Автоматизация процесса обновления информационных баз — одна из ключевых задач системного администрирования и DevOps-инженерии в среде 1С. Когда речь заходит об основной конфигурации, параметры командной строки обычно не вызывают вопросов. Однако обновление расширений из хранилища в пакетном режиме имеет свои нюансы, которые часто не очевидны из стандартной документации. В этой статье мы подробно разберем, как правильно составить скрипт для обновления расширений, как избежать навязчивых диалоговых окон и как обработать возможные ошибки.
Для начала разберем основную команду, которая позволяет «подтянуть» изменения из хранилища расширения. Многие ошибочно полагают, что параметры для расширений должны быть указаны в основном списке ключей платформы, однако они являются уточняющими для команды /ConfigurationRepositoryUpdateCfg. Рассмотрим пример рабочей строки:
"C:\Program Files\1cv8\8.3.22.2239\bin\1cv8.exe" DESIGNER /S "Server\Base" /N "Admin" /P "Pass" /ConfigurationRepositoryF "tcp://RepoServer/ExtensionRepo" /ConfigurationRepositoryN "RepoUser" /ConfigurationRepositoryP "RepoPass" /ConfigurationRepositoryUpdateCfg -force -Extension "ИмяРасширения"
Проанализируем ключевые параметры этого вызова:
Получение изменений из хранилища — это только половина дела. После того как расширение в конфигураторе обновлено, необходимо применить эти изменения к структуре базы данных. Для этого используется команда /UpdateDBCfg. Важно помнить, что если мы обновляем расширение, этот ключ также должен сопровождаться уточнением:
"C:\Program Files\1cv8\8.3.22.2239\bin\1cv8.exe" DESIGNER /S "Server\Base" /N "Admin" /P "Pass" /UpdateDBCfg -Extension "ИмяРасширения"
Если в вашей системе используется несколько расширений, в современных версиях платформы (начиная с 8.3.24) можно использовать ключ -AllExtensions вместе с /UpdateDBCfg, чтобы обновить структуру базы данных для всех измененных расширений одним махом, а для очистки системы подойдет универсальное удаление расширений.
Рассмотрим ситуацию, с которой часто сталкиваются разработчики: при попытке обновить расширение система внезапно запрашивает авторизацию в хранилище основной конфигурации. Это происходит из-за того, что база «помнит» о своей привязке к основному репозиторию. Чтобы выполнение скрипта не прерывалось на ожидание ввода пользователя, необходимо использовать дополнительные флаги подавления интерактивности.
Выясним причину такого поведения: 1С при запуске в режиме конфигуратора пытается проверить состояние всех подключенных объектов. Чтобы этого избежать, добавим следующие параметры или используйте универсальное отключение всех уведомлений по расширениям при старте 1С:
Пример полной команды с подавлением окон:
"C:\Program Files\1cv8\8.3.xx\bin\1cv8.exe" DESIGNER /S "SQL\Base" /DisableStartupMessages /DisableStartupDialogs /ConfigurationRepositoryF "tcp://Repo/Ext" /ConfigurationRepositoryN "User" /ConfigurationRepositoryP "Pass" /ConfigurationRepositoryUpdateCfg -force -Extension "MyExt"
Одной из главных преград при автоматическом обновлении являются активные пользователи или фоновые задания. Если база занята, команда /UpdateDBCfg завершится с ошибкой. Начиная с версии 8.3.21, платформа предоставляет встроенный механизм решения этой проблемы — ключ -SessionTerminate.
Рассмотрим, как интегрировать это в процесс:
/UpdateDBCfg -Extension "MyExt" -SessionTerminate force
Использование этого флага позволяет системе принудительно разорвать соединения перед началом реструктуризации (также полезно автоматизировать удаление спящих сеансов 1С:8.3). Однако будьте осторожны: это может привести к потере несохраненных данных пользователями.
Чтобы понять, успешно ли прошло обновление, крайне важно анализировать коды возврата и записывать вывод системы в файл (а также проводить анализ расширений на наличие ошибок). Разберем пример продвинутого скрипта автоматизации:
@echo off
set EXE1C="C:\Program Files\1cv8\8.3.22.2239\bin\1cv8.exe"
set CONNECTION_STR=/S "Server\Base" /N "Admin" /P "Pass"
set REPO_STR=/ConfigurationRepositoryF "tcp://Repo/Ext" /ConfigurationRepositoryN "U" /ConfigurationRepositoryP "P"
set LOG_FILE="C:\Logs\update.log"
echo %DATE% %TIME% Starting Update... >> %LOG_FILE%
%EXE1C% DESIGNER %CONNECTION_STR% /DisableStartupMessages /DisableStartupDialogs %REPO_STR% /ConfigurationRepositoryUpdateCfg -force -Extension "MyExt" /Out %LOG_FILE% -NoTruncate
if %errorlevel% neq 0 (
echo Error during repository update! Code: %errorlevel% >> %LOG_FILE%
exit /b %errorlevel%
)
%EXE1C% DESIGNER %CONNECTION_STR% /DisableStartupMessages /DisableStartupDialogs /UpdateDBCfg -Extension "MyExt" -SessionTerminate force /Out %LOG_FILE% -NoTruncate
if %errorlevel% eq 0 (
echo Update successful! >> %LOG_FILE%
) else (
echo Error during DB update! Code: %errorlevel% >> %LOG_FILE%
)
В данном скрипте мы используем переменную %errorlevel%. Напомним основные коды возврата 1С:
Иногда странное поведение пакетного режима (например, настойчивое требование пароля от старого хранилища) лечится только очисткой локального кэша на сервере, где запускается скрипт. В параметрах запуска 1С можно использовать ключ /ClearCache, хотя для режима DESIGNER он применяется редко. Более надежным способом является удаление папок в %AppData%\1C\1cv8 для пользователя, под которым работает планировщик задач.
Мы проанализировали процесс пакетного обновления расширений и выяснили, что ключ -Extension является обязательным дополнением к стандартным командам работы с репозиторием. Сочетание правильной последовательности вызовов (сначала получение изменений, затем обновление базы данных) вместе с подавлением диалогов через /DisableStartupDialogs позволяет полностью автоматизировать процесс доставки изменений из хранилища в рабочие или тестовые базы.