Библиотека для запуска 1С:Предприятие 8 в различных режимах.
Описание
Библиотека на OneScript для запуска 1С:Предприятия 8 в различных режимах, включая пакетный режим запуска конфигуратора и работу с хранилищем конфигурации.
Установка
Установка через пакетный менеджер opm командой:
opm install trun1c
Использование библиотеки
Библиотека подключается как отдельный класс. Экземпляр класса используется для ведения текущего лога.
Подключение библиотеки:
#Использовать TRun1C
Создание класса:
Запуск1С = Новый ТУправлениеЗапуском1С();
Параметры класса:
ПараметрыЗапуска - Структура параметров запуска, состав:
ПутьКПлатформе1С - Путь к платформе 1С
ВерсияПлатформы - Версия Платформы 1С (Если не заполнена, вычисляется автоматически). Варианты:
81
82
83
ТипБазы - Тип базы 1С. Варианты:
F - файловая
S - серверная
WS - веб
ИмяБазы - Указывается как для файловой, так и для серверной базы.
АдресКластера - Параметры сервера 1С, по умолчанию - localhost
ПортКластера - Параметры сервера 1С, по умолчанию - 1541
ПортАгента - Параметры сервера 1С, по умолчанию - 1540
КодРазрешения - Параметры сервера 1С, по умолчанию - 987654321
СообщениеПриБлокировке - Параметры сервера 1С, по умолчанию - "Информационная база заблокирована для обслуживания."
ИмяПользователя - Параметры авторизации в информационной базе
ПарольПользователя - Параметры авторизации в информационной базе
АдресХранилища - Параметры работы с хранилищем
ИмяПользователяХранилища - Параметры работы с хранилищем
ПарольПользователяХранилища - Параметры работы с хранилищем
ВидныДействияВПакетномРежиме - При установке данного флага, все дейстия в пакетном запуске конфигуратора будут видны пользователю
ФайлДляЗаписиРезультатовРаботыВПакетномРежиме - При указании имени файла, результат работы конфигуратора в пакетном режиме будет записан в данные файл файл
ТекстОшибки - Переменная для возврата ошибки, если таковая имела место быть
Экспортные процедуры и функции класса:
Процедура ОчиститьПараметры()
Выполняет сборс всех параметров запуска к настройкам по умолчанию
Функция ИмяФайлаПоИмениБазыНаДату(Расширение)
Возвращает имя файла, построенном по принципу: ИмяБазы + ДатаВремя + Расширение. Пример: Base_2017_04_28_19_02_12.dt
Функция ЗавершитьРаботуПользователей()
Завершает работу пользователей для серверной базы
Функция УстановитьБлокировкуНачалаСеансов(БлокироватьРегламентныеЗадания = Истина)
Устанавливает блокирвку сенасов для серверной базы
Функция СнятьБлокировкуНачалаСеансов(СнятьБлокировкуРегламентныхЗаданий = Истина)
Снимает блокировку сеансов для серверной базы
Функция ПолучитьСписокСеансов(ПропускатьКонсольКластера = Истина)
Получает список текущих сеансов с информационной базой
Функция ЗапуститьПредприятие(ПутьКОбработке="", ОжидатьЗавершения = Ложь)
Запускает 1С:Предприятие
Параметры:
ПутьКОбработке - Строка - Если указан путь к обработке, то обработка будет открыта после запуска 1С:Предприятие
ОжидатьЗавершения - Булево - Ожидать завершения работы 1С:Предприятие, по умолчанию - Ложь
Функция ЗапуститьКонфигуратор(ОжидатьЗавершения = Ложь)
Запускает конфигуратор
Параметры:
ОжидатьЗавершения - Булево - Ожидать завершения работы конфигуратора, по умолчанию - Ложь
Функция ВыгрузитьИнформационнуюБазу(ПолныйПутьКФайлу)
Выгружает информационную базу в указанный файл (dt)
Параметры:
ПолныйПутьКФайлу - Строка - Полный путь к файлу
Функция ЗагрузитьИнформационнуюБазу(ПолныйПутьКФайлу)
Загружает информационную базу из указанного файла (dt)
Параметры:
ПолныйПутьКФайлу - Строка - Полный путь к файлу
Функция СохранитьКонфигурациюВФайл(ПолныйПутьКФайлу)
Сохраняет текущую конфигурацию в указаннй файл (cf)
Параметры:
ПолныйПутьКФайлу - Строка - Полный путь к файлу
Функция СохранитьКонфигурациюБазыДанныхВФайл(ПолныйПутьКФайлу)
Сохраняет конфигурацию базы данных в указаннй файл (cf)
Параметры:
ПолныйПутьКФайлу - Строка - Полный путь к файлу
Функция ЗагрузитьКонфигурациюИзФайла(ПолныйПутьКФайлу)
Загружает конфигурацию из указанного файла (cf)
Параметры:
ПолныйПутьКФайлу - Строка - Полный путь к файлу
Функция ОбновитьКонфигурациюБазыДанных(ПредупрежденияКакОшибки=Ложь, НаСервере=Ложь)
Обновлет конфигурацию базы данных
Параметры:
ПредупрежденияКакОшибки - Булево - Если Истина, то все предупреждения трактуются как ошибки.
НаСервере - Булево - Если Истина, то обновление будет выполняться на сервере (имеет смысл только в клиент-серверном варианте работы).
ПравилоУстановкиСоответствийОбъектов - Строка - для тех случаев, когда конфигурации не состоят в отношениях «родитель-потомок», возможные значения:
ByObjectName – по именам объектов. Используется по умолчанию.
ByObjectIDs – по внутренним идентификаторам.
Возвращает:
Истина - Отчет сформирован успешно
Ложь - Были ошибки
Функция ЕстьИзмененияВОтчетеОСравненииКраткийТекст(ПутьКФайлуОтчетаОСравнении)
Проверяет есть ли записи об изменении в файле отчета о сравнении конфигураций. При условии, что отчет "краткий" в формате txt.
Параметры:
ПутьКФайлуОтчетаОСравнении - Путь к файлу отчета о сравнении
Возвращает:
Истина - Есть изменения
Ложь - Изменений нет
Неопределено - Были ошибки
Функция ЕстьИзмененияОсновнойКонфигурации()
Проверяет, если ли изменения в основной конфигурации относительно конфигурации базы данных
Возвращает:
Истина - Есть изменения
Ложь - Изменений нет
Неопределено - Были ошибки
Функция ЕстьИзмененияВХранилище()
Проверяет, если ли изменения в хранилище относительно основной конфигурации
Возвращает:
Истина - Есть изменения
Ложь - Изменений нет
Неопределено - Были ошибки
Функция СохранитьКонфигурациюИзХранилищаВФайл(ПолныйПутьКФайлу, НомерВерсии="")
Сохраняет конфигурацию из хранилища в файл
Параметры:
ПолныйПутьКФайлу - Полный путь к файлу
НомерВерсии (-v [номер версии хранилища]) — номер версии хранилища, если номер версии не указан, или равен -1, будет сохранена последняя версия
Функция ОбновитьКонфигурациюИзХранилища(НомерВерсии="", ПолучатьЗахваченныеОбъекты = Ложь, Форсировать = Истина)
Обновляет текущую конфигурацию из хранилища
Параметры:
НомерВерсии (-v [номер версии хранилища]) — номер версии хранилища, если номер версии не указан, или равен -1, будет сохранена последняя версия, если конфигурация не подключена к хранилищу, то параметр игнорируется;
ПолучатьЗахваченныеОбъекты (-revised) — получать захваченные объекты, если потребуется. Если конфигурация не подключена к хранилищу, то параметр игнорируется;
Форсировать (-force) — если при пакетном обновлении конфигурации из хранилища должны быть получены новые объекты конфигурации или удалиться существующие, указание этого параметра свидетельствует о подтверждении пользователем описанных выше операций. Если параметр не указан — действия выполнены не будут.
Функция ОтключитьКонфигурациюОтХранилища(Форсировать = Истина)
Отключает конфигурацию от хранилища
Параметры:
Форсировать (-force) Булево — ключ для форсирования отключения от хранилища (пропуск диалога аутентификации, если не указаны параметры пользователя хранилища, игнорирование наличия захваченных и измененных объектов).
Форсировать (-force) — Булево - выполняет подключение даже в том случае, если для данного пользователя уже есть конфигурация, связанная с данным хранилищем.
ЗаменитьТекущуюКонфигурацию - Булево - если конфигурация непустая, данный ключ подтверждает замену конфигурации на конфигурацию из хранилища.
Функция ВыполнитьОчисткуЛокальногоКешаХранилища()
Выполняет очистку локального кэша хранилища конфигурации
Функция ВыполнитьОчисткуЛокальнойБазыДанныхХранилища()
Выполняет очистку локальной базы данных хранилища конфигурации
Выполняет захват объектов из хранилища конфигурации для редактирования (/ConfigurationRepositoryLock [–Objects <имя файла>] [-revised]).
Параметры:
ПутьИмяФайлаОбъектов (-Objects <имя файла>) - путь к файлу со списком объектов, которые будут участвовать в операции. Если файл указан – в операции участвуют только указанные в файле объекты, в противном случае участвует вся конфигурация.
ПолучатьОбъектыИзХранилища(-revised) - получать захваченные объекты, если потребуется.
Возвращает:
Истина - операция выполнена успешно;
Ложь - были ошибки.
Функция ОтменитьЗахватВХранилище(ПутьИмяФайлаОбъектов = "", ОтменитьЛокальныеИзменения = Истина)
Выполняет отмену захвата объектов в хранилище конфигурации (/ConfigurationRepositoryUnLock [–Objects <имя файла>] [-force]).
Параметры:
ПутьИмяФайлаОбъектов (-Objects <имя файла>) - путь к файлу со списком объектов, которые будут участвовать в операции. Если файл указан – в операции участвуют только указанные в файле объекты, в противном случае участвует вся конфигурация.
ОтменитьЛокальныеИзменения(-force) - описывает поведение с локально измененными объектами:
Ключ указан – локально измененные объекты будут получены из хранилища. Изменения будут потеряны.
Ключ не указан – при наличии локально измененных объектов будет выдана ошибка, и операция будет отменена целиком, для всех объектов, участвующих в операции.
Помещает измененные объекты в хранилище (/ConfigurationRepositoryCommit [–Objects <имя файла>] [-comment <текст комментария>] [-keepLocked] [-force])
Параметры:
ПутьИмяФайлаОбъектов (–Objects <имя файла>) – путь к файлу со списком объектов, которые будут участвовать в операции. Если файл указан – в операции участвуют только указанные в файле объекты, в противном случае участвует вся конфигурация.
ТекстКомментария (-comment <текст комментария>) - текст комментария к помещаемым объектам.
ОставлятьОбъектыЗахваченными (-keepLocked) - оставлять помещенные объекты захваченными. Если не указан, то после помещения изменений будет отменен захват для объектов, участвующих в операции.
ОчищатьСсылкиНаУдаленныеОбъекты (-force) - описывает поведение при обнаружении ссылок на удаленные объекты:
Истина – будет выполнена попытка очистки ссылок.
Ложь – будет выдана ошибка.
Возвращает:
Истина - операция выполнена успешно;
Ложь - были ошибки.
Функция СоздатьФайлСпискаОбъектов(ПолныйПутьКФайлуОтчета="", ПолныйПутьКФайлуСпискаОбъектов="")
Создает файл списка объектов на основании отчета о сравнении
Параметры:
ПолныйПутьКФайлуОтчета - полный путь к файлу отчета о сравнении (отчет должен быть кратким в формате txt)
ПолныйПутьКФайлуСпискаОбъектов - полный путь к файлу списка объектов, если путь не указан, будет создан временный.
Возвращает:
Неопределено - были ошибки;
Путь к файлу списка объектов - Файл создан успешно.
Пример использования
#Использовать TRun1C
// Создадим объект
Запуск1С = Новый ТУправлениеЗапуском1С();
// Введем параметры
ПараметрыЗапуска = Запуск1С.ПараметрыЗапуска;
ПараметрыЗапуска.ПутьКПлатформе1С = "C:\Program Files (x86)\1cv8\8.3.8.2054\bin\1cv8.exe";
ПараметрыЗапуска.ТипБазы = "S";
ПараметрыЗапуска.ИмяБазы = "TestBase";
ПараметрыЗапуска.АдресКластера = "10.1.1.40";
ПараметрыЗапуска.ПортКластера = "2541";
ПараметрыЗапуска.ПортАгента = "2540";
ПараметрыЗапуска.ИмяПользователя = "Администратор";
ПараметрыЗапуска.ПарольПользователя = "";
ПараметрыЗапуска.ВидныДействияВПакетномРежиме = Ложь; //Можно не указывать
ПараметрыЗапуска.АдресХранилища = "C:\repo\OS_TScripts\_Tests\Repository";
ПараметрыЗапуска.ИмяПользователяХранилища = "admin";
ПараметрыЗапуска.ПарольПользователяХранилища = "1";
// Запустим тест всех процедур
ПолныйТестВсехПроцедур(Запуск1С);
// Введем параметры
ПараметрыЗапуска.ТипБазы = "F";
ПараметрыЗапуска.ИмяБазы = "C:\repo\OS_TScripts\_Tests\Base";
ПараметрыЗапуска.ИмяПользователя = "";
ПараметрыЗапуска.ПарольПользователя = "";
// Флаг наличия ошибок
БылиОшибки = Ложь;
// Создадим необходимые файлы
Если РабочийКаталог = "" Тогда
РабочийКаталог = ".\";
КонецЕсли;
РабочийКаталог = ОбъединитьПути(РабочийКаталог,"Test_TRun1C");
СоздатьКаталог(РабочийКаталог);
// Результат работы в пакетном режиме
ПараметрыЗапуска = Запуск1С.ПараметрыЗапуска;
ПараметрыЗапуска.ФайлДляЗаписиРезультатовРаботыВПакетномРежиме = ОбъединитьПути(РабочийКаталог,Запуск1С.ИмяФайлаПоИмениБазыНаДату("txt")); //Можно не указывать
Если ПараметрыЗапуска.ТипБазы = "S" Тогда // Серверная база
// Запустим 1С:Предприятие
Если Запуск1С.ЗапуститьПредприятие() Тогда
Сообщить("ЗапуститьПредприятие: УСПЕШНО");
Иначе
Сообщить("ЗапуститьПредприятие: " + Запуск1С.ТекстОшибки);
БылиОшибки = Истина;
КонецЕсли;
Приостановить(6000);
// Запустим Конфигуратор
Если Запуск1С.ЗапуститьКонфигуратор() Тогда
Сообщить("ЗапуститьКонфигуратор: УСПЕШНО");
Иначе
Сообщить("ЗапуститьКонфигуратор: " + Запуск1С.ТекстОшибки);
БылиОшибки = Истина;
КонецЕсли;
Приостановить(6000);
// Получим список сеансов
ТаблицаСеансов = Запуск1С.ПолучитьСписокСеансов();
Если ТаблицаСеансов <> Неопределено Тогда
Сообщить("ПолучитьСписокСеансов: УСПЕШНО");
Для Каждого Сеанс Из ТаблицаСеансов Цикл
Сообщить(" Номер: " + Сеанс.НомерСоединения + ", Время начала: " + Сеанс.ВремяНачала + ", Имя пользователя: " + Сеанс.ИмяПользователя +
", Имя компьютера: " + Сеанс.ИмяКомпьютера + ", Приложение: " + Сеанс.Приложение);
КонецЦикла;
Иначе
Сообщить("ПолучитьСписокСеансов: " + Запуск1С.ТекстОшибки);
БылиОшибки = Истина;
КонецЕсли;
// Заблокируем сеансы
Если Запуск1С.УстановитьБлокировкуНачалаСеансов() Тогда
Сообщить("УстановитьБлокировкуНачалаСеансов: УСПЕШНО");
Иначе
Сообщить("УстановитьБлокировкуНачалаСеансов: " + Запуск1С.ТекстОшибки);
БылиОшибки = Истина;
КонецЕсли;
// Завершим работу пользователей, наш сеанс должен закрыться
Если Запуск1С.ЗавершитьРаботуПользователей() Тогда
Сообщить("ЗавершитьРаботуПользователей: УСПЕШНО");
Иначе
Сообщить("ЗавершитьРаботуПользователей: " + Запуск1С.ТекстОшибки);
БылиОшибки = Истина;
КонецЕсли;
ВыполнитьСборкуМусора();
КонецЕсли;
// Отключимся от хранилища
Если Запуск1С.ОтключитьКонфигурациюОтХранилища() Тогда
Сообщить("ОтключитьКонфигурациюОтХранилища: УСПЕШНО");
Иначе
Сообщить("ОтключитьКонфигурациюОтХранилища: " + Запуск1С.ТекстОшибки);
БылиОшибки = Истина;
КонецЕсли;
// Выгрузим информационную базу
ПолныйПутьКФайлу = ОбъединитьПути(РабочийКаталог,Запуск1С.ИмяФайлаПоИмениБазыНаДату("dt"));
Если Запуск1С.ВыгрузитьИнформационнуюБазу(ПолныйПутьКФайлу) Тогда
Сообщить("ВыгрузитьИнформационнуюБазу: УСПЕШНО " + " в " + ПолныйПутьКФайлу);
Иначе
Сообщить("ВыгрузитьИнформационнуюБазу: " + Запуск1С.ТекстОшибки);
БылиОшибки = Истина;
КонецЕсли;
// Загрузим файл в информационную базу
Если Запуск1С.ЗагрузитьИнформационнуюБазу(ПолныйПутьКФайлу) Тогда
Сообщить("ЗагрузитьИнформационнуюБазу: УСПЕШНО " + " из " + ПолныйПутьКФайлу);
Иначе
Сообщить("ЗагрузитьИнформационнуюБазу: " + Запуск1С.ТекстОшибки);
БылиОшибки = Истина;
КонецЕсли;
УдалитьФайлы(ПолныйПутьКФайлу);
// Сохраним конфигурацию в файл
ПолныйПутьКФайлу = ОбъединитьПути(РабочийКаталог,Запуск1С.ИмяФайлаПоИмениБазыНаДату("cf"));
Если Запуск1С.СохранитьКонфигурациюВФайл(ПолныйПутьКФайлу) Тогда
Сообщить("СохранитьКонфигурациюВФайл: УСПЕШНО " + " в " + ПолныйПутьКФайлу);
Иначе
Сообщить("СохранитьКонфигурациюВФайл: " + Запуск1С.ТекстОшибки);
БылиОшибки = Истина;
КонецЕсли;
// Загрузим конфигурацию из файла
Если Запуск1С.ЗагрузитьКонфигурациюИзФайла(ПолныйПутьКФайлу) Тогда
Сообщить("ЗагрузитьКонфигурациюИзФайла: УСПЕШНО " + " из " + ПолныйПутьКФайлу);
Иначе
Сообщить("ЗагрузитьКонфигурациюИзФайла: " + Запуск1С.ТекстОшибки);
БылиОшибки = Истина;
КонецЕсли;
// Сохраним конфигурацию баз данных в файл
Если Запуск1С.СохранитьКонфигурациюБазыДанныхВФайл(ПолныйПутьКФайлу) Тогда
Сообщить("СохранитьКонфигурациюБазыДанныхВФайл: УСПЕШНО " + " в " + ПолныйПутьКФайлу);
Иначе
Сообщить("СохранитьКонфигурациюБазыДанныхВФайл: " + Запуск1С.ТекстОшибки);
БылиОшибки = Истина;
КонецЕсли;
// Сохраним конфигурацию хранилища в файл
Если Запуск1С.СохранитьКонфигурациюИзХранилищаВФайл(ПолныйПутьКФайлу) Тогда
Сообщить("СохранитьКонфигурациюИзХранилищаВФайл: УСПЕШНО " + " в " + ПолныйПутьКФайлу);
Иначе
Сообщить("СохранитьКонфигурациюИзХранилищаВФайл: " + Запуск1С.ТекстОшибки);
БылиОшибки = Истина;
КонецЕсли;
// Обновим конфигурацию из хранилища
Если Запуск1С.ОбновитьКонфигурациюИзХранилища() Тогда
Сообщить("ОбновитьКонфигурациюИзХранилища: УСПЕШНО");
Иначе
Сообщить("ОбновитьКонфигурациюИзХранилища: " + Запуск1С.ТекстОшибки);
БылиОшибки = Истина;
КонецЕсли;
// Обновим конфигурацию базы данных
Если Запуск1С.ОбновитьКонфигурациюБазыДанных() Тогда
Сообщить("ОбновитьКонфигурациюБазыДанных: УСПЕШНО");
Иначе
Сообщить("ОбновитьКонфигурациюБазыДанных: " + Запуск1С.ТекстОшибки);
БылиОшибки = Истина;
КонецЕсли;
//Проверим, есть ли изменения в основной конфигурации
ЕстьИзменения = Запуск1С.ЕстьИзмененияОсновнойКонфигурации();
Если ЕстьИзменения <> Неопределено Тогда
Сообщить("ЕстьИзмененияОсновнойКонфигурации: УСПЕШНО, Есть изменения: " + ?(ЕстьИзменения,"Да","Нет"));
Иначе
Сообщить("ЕстьИзмененияОсновнойКонфигурации: " + Запуск1С.ТекстОшибки);
БылиОшибки = Истина;
КонецЕсли;
// Подключимся к хранилищу
Если Запуск1С.ПодключитьКонфигурациюКХранилищу() Тогда
Сообщить("ПодключитьКонфигурациюКХранилищу: УСПЕШНО");
Иначе
Сообщить("ПодключитьКонфигурациюКХранилищу: " + Запуск1С.ТекстОшибки);
БылиОшибки = Истина;
КонецЕсли;
// Выполним очистку локального кэша хранилища конфигурации
Если Запуск1С.ВыполнитьОчисткуЛокальногоКешаХранилища() Тогда
Сообщить("ВыполнитьОчисткуЛокальногоКешаХранилища: УСПЕШНО");
Иначе
Сообщить("ВыполнитьОчисткуЛокальногоКешаХранилища: " + Запуск1С.ТекстОшибки);
БылиОшибки = Истина;
КонецЕсли;
// Выполним очистку локальной базы данных хранилища конфигурации
Если Запуск1С.ВыполнитьОчисткуЛокальнойБазыДанныхХранилища() Тогда
Сообщить("ВыполнитьОчисткуЛокальнойБазыДанныхХранилища: УСПЕШНО");
Иначе
Сообщить("ВыполнитьОчисткуЛокальнойБазыДанныхХранилища: " + Запуск1С.ТекстОшибки);
БылиОшибки = Истина;
КонецЕсли;
// Проверим, есть ли изменения в хранилище конфигураций
ЕстьИзмененияВХранилище = Запуск1С.ЕстьИзмененияВХранилище();
Если ЕстьИзмененияВХранилище <> Неопределено Тогда
Сообщить("ЕстьИзмененияВХранилище: УСПЕШНО, Есть изменения: " + ?(ЕстьИзмененияВХранилище,"Да","Нет"));
Иначе
Сообщить("ЕстьИзмененияВХранилище: " + Запуск1С.ТекстОшибки);
БылиОшибки = Истина;
КонецЕсли;
Если ПараметрыЗапуска.ТипБазы = "S" Тогда // Серверная база
// Снимем блокировку пользователей
Если Запуск1С.СнятьБлокировкуНачалаСеансов() Тогда
Сообщить("СнятьБлокировкуНачалаСеансов: УСПЕШНО");
Иначе
Сообщить("СнятьБлокировкуНачалаСеансов: " + Запуск1С.ТекстОшибки);
БылиОшибки = Истина;
КонецЕсли;
КонецЕсли;