Как запустить пакетное обновление 1С без интерактивного окна подтверждения легальности

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

При настройке автоматического обновления конфигураций 1С, особенно в крупных инфраструктурах или при использовании CI/CD процессов, специалисты часто сталкиваются с проблемой: запуск системы в пакетном режиме прерывается модальным окном «Подтверждение легальности получения обновления». Это окно требует ручного нажатия кнопки, что делает невозможным полностью автоматический (фоновый) процесс. Разберем детально, как обойти это ограничение, используя возможности командной строки и программные методы Библиотеки стандартных подсистем (БСП).

Анализ проблемы: почему стандартные ключи не всегда помогают

Стандартный механизм обновления ИБ через командную строку предполагает использование параметра /C ЗапуститьОбновлениеИнформационнойБазы. Однако в типовых конфигурациях за проверку легальности отвечает отдельный механизм БСП, который инициализируется при запуске системы в режиме Предприятие. Если флаг подтверждения легальности не установлен в базе данных, система вызывает интерактивный диалог еще до того, как основной программный код приступит к выполнению процедур обновления.

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

Метод 1: Использование расширенных параметров командной строки

Рассмотрим стандартный способ запуска обновления. В большинстве случаев достаточно простого ключа, но для некоторых версий БСП требуются уточняющие параметры. Попробуем выполнить запуск со следующей комбинацией:

Стандартный запуск:

1cv8.exe ENTERPRISE /F "ПутьКБазе" /N "Админ" /P "Пароль" /C ЗапуститьОбновлениеИнформационнойБазы

Если это не помогает и окно всё равно появляется, проанализируем возможность использования комбинированных команд. В некоторых редакциях БСП запуск процедур обработки данных можно инициировать более жестко:

/C "ЗапуститьОбновлениеИнформационнойБазы;СкорректироватьДанные"

Также важно использовать ключ /UC (код разрешения), который позволяет обходить блокировку установки соединений, если база находится в режиме технического обслуживания:

/UC ПакетноеОбновление

Метод 2: Программное отключение проверки через COM-соединение

Выясним причину появления окна. Оно завязано на конкретную константу или значение в хранилище настроек. Если мы не можем «прожать» кнопку в окне, мы можем изменить состояние базы данных до основного запуска обновления. Для этого удобно использовать COM-соединение (V83.COMConnector) или External Connection.

Разберем пример кода, который нужно выполнить перед тем, как запускать обновление через /C:


// Подключаемся к базе программно
Соединитель = Новый COMОбъект("V83.COMConnector");
База = Соединитель.Connect("File='C:\Base1C';Usr='Admin';Pwd='123'");

// Отключаем проверку легальности обновления
// В разных версиях БСП имя константы может отличаться
Попытка
    База.Константы.ПроверкаЛегальностиПолученияОбновления.Установить(Ложь);
    // Или через набор констант, если это предусмотрено в метаданных
    База.Константы.ПодтверждениеЛегальностиПолученияОбновления.Установить(Истина);
Исключение
    // Если константа не найдена, используем механизм параметров работы программы
    База.СтандартныеПодсистемыСервер.УстановитьПараметрРаботыПрограммы("ПодтверждениеЛегальностиПолученияОбновления", Истина);
КонецПопытки;

После выполнения этого кода флаг в базе данных будет установлен, и при последующем запуске с параметром /C ЗапуститьОбновлениеИнформационнойБазы окно подтверждения не появится.

Метод 3: Вызов служебных процедур БСП

Посмотрим на внутреннее устройство БСП. В модуле ОбновлениеИнформационнойБазыСлужебный часто существуют экспортные процедуры, предназначенные специально для программного подтверждения статуса обновления. Если у вас есть доступ к коду, проанализируем возможность вызова процедуры подтверждения напрямую.

При использовании OneScript или внешней обработки можно выполнить следующий скрипт:


Процедура ПодтвердитьЛегальностьПрограммно() Экспорт
    // Имитируем запись в регистр сведений или константу, которую проверяет БСП
    ПараметрыОбновления = ОбновлениеИнформационнойБазыСлужебный.ПараметрыОбновленияИнформационнойБазы();
    ПараметрыОбновления.ПроверитьЛегальностьПолученияОбновления = Ложь;
    ОбновлениеИнформационнойБазыСлужебный.ЗаписатьПараметрыОбновленияИнформационнойБазы(ПараметрыОбновления);
КонецПроцедуры

Этот метод считается наиболее надежным, так как он работает на уровне логики самой библиотеки и гарантирует, что при старте системы проверка будет считаться пройденной.

Метод 4: Использование скриптов автоматизации (OneScript)

Рассмотрим ситуацию, когда нам нужно полностью автоматизировать процесс без использования громоздких расширений или изменения конфигурации. Специалисты по автотестированию рекомендуют использовать OneScript. Мы можем написать скрипт, который будет имитировать действия администратора на низком уровне.

Скрипт может выполнять следующие шаги:

  1. Запускает сеанс 1С в режиме External Connection.
  2. Проверяет версию конфигурации и статус константы ПроверкаЛегальностиПолученияОбновления.
  3. Если флаг не установлен, скрипт напрямую записывает значение Ложь в базу.
  4. Завершает соединение и запускает штатный процесс обновления через командную строку.

Метод 5: Прямая модификация параметров работы программы

В современных версиях БСП информация о подтверждении легальности может храниться не в константе, а в системном регистре сведений ПараметрыРаботыПрограммы. Выясним, как это изменить. Нам необходимо найти запись с ключом "ПодтверждениеЛегальностиПолученияОбновления" и установить её значение в Истина (или соответствующую дату подтверждения).

Пример работы с регистром через внешнее соединение:


МенеджерЗаписи = База.РегистрыСведений.ПараметрыРаботыПрограммы.СоздатьМенеджерЗаписи();
МенеджерЗаписи.ИмяПараметра = "ПодтверждениеЛегальностиПолученияОбновления";
МенеджерЗаписи.Прочитать();
МенеджерЗаписи.ЗначениеПараметра = Истина;
МенеджерЗаписи.Записать();

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

Заключение и рекомендации

Подведем итог. Чтобы избавиться от окна лицензирования при пакетном обновлении, рекомендуется:

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

← На главную