Как обновить расширение конфигурации из хранилища в пакетном режиме?

Программист 1С v8.3 (Управляемые формы) IT и автоматизация бизнеса
← На главную

Автоматизация процесса обновления информационных баз — одна из ключевых задач системного администрирования и 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 "ИмяРасширения"

Проанализируем ключевые параметры этого вызова:

  1. /ConfigurationRepositoryF — путь к хранилищу именно расширения (а не основной конфигурации).
  2. /ConfigurationRepositoryUpdateCfg — команда на получение изменений.
  3. -Extension "ИмяРасширения" — критически важный ключ, указывающий, к какому именно расширению применяются команды репозитория.
  4. -force — параметр, позволяющий игнорировать некоторые предупреждения при получении изменений.

Обновление конфигурации базы данных

Получение изменений из хранилища — это только половина дела. После того как расширение в конфигураторе обновлено, необходимо применить эти изменения к структуре базы данных. Для этого используется команда /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). Однако будьте осторожны: это может привести к потере несохраненных данных пользователями.

Логирование и обработка ошибок в BAT-файлах

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


@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 позволяет полностью автоматизировать процесс доставки изменений из хранилища в рабочие или тестовые базы.

← На главную