Найти в Дзене
RG-Soft

Использование скриптов при обновлении доработанных конфигураций

Оглавление

Введение

Подготовка и внедрение обновлений для доработанных конфигураций баз бывает очень затратна по времени. Для оптимизации работы разработчик может использовать скрипты.

Эффективность такого выполнения операций в несколько раз выше, чем при ручных действиях.

В качестве примера приведен проект с подходящими условиями для использования.

Будет показано использование скриптов через программу «Обновлятор-1С».

История оптимизации

Особенности проекта

На одном проекте обновление нетиповых конфигураций оказалось очень затратным по времени.

Усложняют процесс несколько особенностей:

  • Несколько баз с хранилищами

К одному общему хранилищу подключена основная конфигурация (Доработанная "Бухгалтерия предприятия КОРП"). И к двум другим - расширения.

При внедрении обновлений для каждой базы требуется забирать обновления из этих хранилищ.

  • Ограниченные ресурсы сервера

На менее производительном сервере операции выполняются медленнее. При тяжелой операции требуется больше ресурсов сервера. Особенно, свободного места на сервере, которого часто не хватает.

Поэтому операции выполняются один поток (только одна база одновременно обновляется). Иначе выходит ошибка о недостатке памяти (во время операции сохранения конфигурации базы данных). И требуется восстановление из архива.

  • Внедрение с отдельного сервера

Для обновлений используется сервер для разработки, а рабочие базы лежат на других серверах. Выполнение операции замедляется по причине подключения на другой сервер.

  • «Ночное внедрение»

Часто приходится делать внедрение обновлений в неудобное время. Обычно, после окончания рабочего дня. Но это время растягивается до ночи.

Внедрение обновлений на пять баз может завершается ночью. Т.к. на каждую базу требуется примерно один час.

Еще нужно учесть время на подготовительные операции: чистка места на диске, сохранение архивов баз данных и прочее.

Поиски решения проблемы

Требовалось найти способ оптимизации работы. В первую очередь, для процесса внедрения.

Задача решается несколькими способами. Но выбран вариант со скриптами – по причине эффективности.

«Зачем всё делать вручную, если некоторые операции можно доверить компьютеру!?»

Желательно, сократить число ручных операций.

Решено использовать программу "Обновлятор-1С". Т.к. имеет нужный функционал обновления конфигураций, особенно из хранилища. И допускает работу отдельных скриптов.

В первую очередь были настроены операции внедрения обновлений на рабочие базы. А потом оптимизированы другие операции:

  • Работа с хранилищами
  • Сохранение в файлы конфигураций
  • Полное сравнение конфигураций: основной и поставщика

Причем, определенные операции используются несколько раз.

А заданная последовательность их выполнения экономит время. Разработчик может запускать выполнение скрипта и переходить к другим делам – обновлятор пришлет оповещение после выполнения.

Обновлятор-1c

-2

Программа "Обновлятор-1С" выбрана как инструмент, обладающий важными возможностями:

  • Наличие встроенных скриптов обновления

Комплект операций при обновлении конфигурации: от архивирования и до выполнения обработчиков в пользовательском режиме.

Имеется возможность внедрения обновлений из хранилища.

-3
  • Возможность оповещений

При завершении операций могут быть посланы сообщения через электронную почту или Telegam.

-4
  • Автоматическое сохранение логов выполнения операций

Отчеты о ходе выполнения сохраняются для всех операций обновлятора, особенно для скриптов.

-5
  • Создание отдельных скриптов

Обновлятор имеет встроенную библиотеку шаблонов, что сокращает время создания скриптов.

-6

Дополнительная информация:

  • Выполнение операций в обновляторе требует предварительных настроек.
  • Для полного функционала обновлятора без ограничений необходима ПРОФ-версия

Использование скриптов

Ниже приведены примеры оптимизации операций через скрипты. Показаны краткое описание и код.

Далее, последовательно разберем операции от подготовки тестовой конфигурации и до внедрения.

Подготовка к обновлению

Перед обновлением основной конфигурации на более новую версию требуется подготовить тестовую базу и выполнить несколько обязательных действий.

Удаление исправлений

Текущие установленные исправления (патчи) не актуальны в следующей версии конфигурации – их надо удалить.

Иначе они будут мешать при проверке расширений конфигурации (при их адаптации).

Скрипт использует команду обновлятора и удаляет все исправления, что подключены к тестовой базе.

:: 0. Удаление патчей

@remove_patches (

patch_name: ""

)

Получение последних конфигураций

Для получения актуальных данных по основной конфигурации и расширениям нужно обновить их конфигурации из хранилища (извлечение).

Далее, идет операция обновления конфигураций баз данных (принятие).

:: 1. Получение конфигурации и расширений

:: 1.1. Обновление основной конфигурации из хранилища

@run_cmd(

script: "%conf1c% %configuration_repository_auth%
/ConfigurationRepositoryUpdateCfg -revised -force",

keep_sessions_lock: "false"

)

@run_cmd(

script: "%conf1c% /UpdateDBCfg -Dynamic+",

keep_sessions_lock: "false"

)

:: 1.2. Обновление расширения "ПечатьДокументов" из хранилища

@run_cmd(

script: "%conf1c% /ConfigurationRepositoryF^"tcp://rg-spc.ru:11111/BP4_work/PrintDocument^" /ConfigurationRepositoryN^"%configuration_repository_n%^"
/ConfigurationRepositoryP^"^" /ConfigurationRepositoryUpdateCfg
-Extension^"ПечатьДокументов^" -revised -force",

keep_sessions_lock: "false"

)

@run_cmd(

script: "%conf1c% /UpdateDBCfg -Extension ^"ПечатьДокументов^" -Dynamic+",

keep_sessions_lock: "false"

)

:: 1.3. Обновление расширения "КонтрольДокументов" из хранилища

@run_cmd(

script: "%conf1c% /ConfigurationRepositoryF"tcp://rg-spc.ru:11111/BP4_work/extCtrlDoc" /ConfigurationRepositoryN^"%configuration_repository_n%^"
/ConfigurationRepositoryP^"^" /ConfigurationRepositoryUpdateCfg -Extension^"КонтрольДокументов^" -revised -force",

keep_sessions_lock: "false"

)

@run_cmd(

script: "%conf1c% /UpdateDBCfg -Extension ^"КонтрольДокументов^" -Dynamic+",

keep_sessions_lock: "false"

)

По коду можно заметить использование параметров-шаблонов:

  • conf1c: подставляется строка подключения к конфигуратору
  • configuration_repository_auth: подставляется строка доступа к хранилищу основной конфигурации

Используемые основные параметры при операциях выделены синим цветом.

Команда обновлятора «@run_cmd» запускает прописанную строку параметров запуска 1с.

Полное сравнение конфигурации с типовой версией

Для контроля переноса доработок основной конфигурации требуется выполнить операцию сравнения основной конфигурацией с конфигурацией поставщика.

Результаты которого сохраняются в текстовый файл (расширение «txt»)

Такая операция выполняется несколько раз при подготовке обновления. Но полученный файл в начале используется как оригинал при сравнении с последующими.

:: 3. Сравнение основной конфигурации

@run_cmd(

script: "%conf1c% %configuration_repository_auth% /CompareCfg
-FirstConfigurationType MainConfiguration -SecondConfigurationType VendorConfiguration -SecondName ^"БухгалтерияПредприятияКОРП^"
-IncludeChangedObjects -IncludeDeletedObjects -IncludeAddedObjects –ReportType
^"Full^" -ReportFormat ^"txt^" -ReportFile ^"D:\!Home\RGSoft_Programmer\Arhive\Conf_Change_%stamp%.txt^""",

keep_sessions_lock: "false"

)

По коду видно использование параметра-шаблона «stamp» — это метка базы. В данном случае подставляет данные о базе и о текущей дате.

Примерно такого вида получается имя файла:

Conf_Change_TestBase 2024-11-07 (20-27-38) {8.3.24.1548, 3.0.156.21}.txt

-7

Захват конфигураций

Для возможности проведения обновления без вмешательства других разработчиков требуется захватить все объекты конфигурации.

:: 4. Захват основной конфигурации, расширений из хранилища

@run_cmd(

script: "%conf1c% %configuration_repository_auth%
/ConfigurationRepositoryLock -force",

keep_sessions_lock: "false"

)

@run_cmd(

script: "%conf1c% /ConfigurationRepositoryF^"tcp://rg-spc.ru:11111/BP4_work/PrintDocument^" /ConfigurationRepositoryN^"%configuration_repository_n%^"
/ConfigurationRepositoryP^"^" /ConfigurationRepositoryLock -
Extension^"ПечатьДокументов^" -force",

keep_sessions_lock: "false"

)

@run_cmd(

script: "%conf1c% /ConfigurationRepositoryF^"tcp://rg-spc.ru:11111/BP4_work/extCtrlDoc^" /ConfigurationRepositoryN^"%configuration_repository_n%^"
/ConfigurationRepositoryP^"^" /ConfigurationRepositoryLock -
Extension^"КонтрольДокументов^" -force",

keep_sessions_lock: "false"

)

Промежуточные операции обновления

Выполняется следующие действия после обновления конфигурации из подготовленного файла типовой конфигурации.

Сохранение конфигураций

Эта операция сохраняет в файлы основную конфигурацию и конфигурации расширений.

Создаются промежуточные резервные копии файлов.

:: Сохранение конфигурации и расширений

@run_cmd(

script: "%conf1c% /DumpCfg
^"D:\!Home\RGSoft_Programmer\Arhive\Conf_%stamp%.cf^"",

keep_sessions_lock: "false"

)

@run_cmd(

script: "%conf1c% /DumpCfg ^"D:\!Home\RGSoft_Programmer\Arhive\E_ПечатьДокументов_%stamp%.cf^" -Extension ^"ПечатьДокументов^"",

keep_sessions_lock: "false"

)

@run_cmd(

script: "%conf1c% /DumpCfg ^"D:\!Home\RGSoft_Programmer\Arhive\E_КонтрольДокументов_%stamp%.cf^" -Extension ^"КонтрольДокументов^"",

keep_sessions_lock: "false"

)

Полное сравнение конфигурации с типовой версией

Используется такая же операция, что описана ранее в пункте «1.3. Полное сравнение конфигурации с типовой версией».

Полученный файл сравнивается с исходным (полученным первым).

На основании различий в файле делаются правки в основной конфигурации.

Сохранение подготовленных конфигураций

Подготовленные конфигурации требуется поместить в соответствующие хранилища.

:: 1. Помещение основной конфигурации в хранилище

@run_cmd(

script: "%conf1c% %configuration_repository_auth%
/ConfigurationRepositoryCommit -comment ^"Обновление конфигурации^" -force",

keep_sessions_lock: "false"

)

:: 2. Помещение расширения "ПечатьДокументов" в хранилище

@run_cmd(

script: "%conf1c% /ConfigurationRepositoryF^"tcp://rg-spc.ru:11111/BP4_work/PrintDocument^" /ConfigurationRepositoryN^"%configuration_repository_n%^" /ConfigurationRepositoryP^"^" /ConfigurationRepositoryCommit -Extension^"ПечатьДокументов^" -comment ^"Обновление конфигурации^" -force",

keep_sessions_lock: "false"

)

:: 3. Помещение расширения "КонтрольДокументов" в хранилище

@run_cmd(

script: "%conf1c% /ConfigurationRepositoryF"tcp://rg-spc.ru:11111/BP4_work/extCtrlDoc" /ConfigurationRepositoryN^"%configuration_repository_n%^" /ConfigurationRepositoryP^"^" /ConfigurationRepositoryCommit -Extension^"КонтрольДокументов^" -comment ^"Обновление конфигурации^" -force",

keep_sessions_lock: "false"

)

Внедрение на рабочие базы

После подготовительных процедур (архивы и прочее) запускается внедрение в рабочие базы.

Выполняется средствами обновлятора – через команды обновления.

-8

При этом еще отключаются расширения (на время обновления) и выполняются обработчики в пользовательском режиме.

-9

А внедрение расширений выполняется после основного обновления.

В событии "После промежуточного обновления" каждой базы прописан скрипт обновления конфигураций расширений из хранилищ.

-10

Полная версия скрипта:

:: 1. Обновление расширения "ПечатьДокументов" из хранилища

@run_cmd(

script: "%conf1c% /ConfigurationRepositoryF^"tcp://rg-spc.ru:11111/BP4_work/PrintDocument^" /ConfigurationRepositoryN^"%configuration_repository_n%^" /ConfigurationRepositoryP^"^" /ConfigurationRepositoryUpdateCfg -Extension^"ПечатьДокументов^" -force",

keep_sessions_lock: "false"

)

@run_cmd(

script: "%conf1c% /UpdateDBCfg -Extension ^"ПечатьДокументов^" -Dynamic+",

keep_sessions_lock: "false"

)

:: 2. Обновление расширения "КонтрольДокументов" из хранилища

@run_cmd(

script: "%conf1c% /ConfigurationRepositoryF"tcp://rg-spc.ru:11111/BP4_work/extCtrlDoc" /ConfigurationRepositoryN^"%configuration_repository_n%^" /ConfigurationRepositoryP^"^" /ConfigurationRepositoryUpdateCfg -Extension^"КонтрольДокументов^" -force",

keep_sessions_lock: "false"

)

@run_cmd(

script: "%conf1c% /UpdateDBCfg -Extension ^"КонтрольДокументов^" -Dynamic+",

keep_sessions_lock: "false"

)

-11

Выводы

Подготовленные скрипты сильно упрощают труд разработчика за счет последовательного выполнения операций, которые не требуют участия разработчика.

Использование скриптов эффективно на медленных серверах и при множестве выполняемых операций.

Но процесс выполнения должен контролироваться разработчиком.

В результате, разработчик вместо «ночной работы» может запустить долгую операцию внедрения, а утром проконтролировать результат выполнения.