Как автоматизировать подтверждение обновления и запуск обработчиков БСП в нескольких базах 1С одновременно?

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

Каждый администратор 1С рано или поздно сталкивается с рутинной задачей: конфигурации в десятках баз успешно обновлены (например, через хранилище или пакетный режим конфигуратора), но работать в них пользователи всё еще не могут. При первом входе в каждую базу необходимо вручную подтвердить легальность обновления, согласиться с изменениями в окне предупреждения и дождаться завершения монопольных обработчиков обновления Библиотеки стандартных подсистем (БСП). Если баз больше десятка, выполнение этой процедуры вручную превращается в кошмар.

В этой статье мы подробно разберем, как полностью автоматизировать процесс принятия обновлений, прохождения всех регламентных процедур и подтверждения легальности во всех 50 базах с помощью скриптов командной строки, механизмов COM-соединения и встроенных возможностей платформы 1С.

Почему возникает проблема ручного подтверждения?

В современных конфигурациях 1С, построенных на базе БСП (Библиотека стандартных подсистем), процесс обновления состоит из двух ключевых этапов:

  1. Обновление структуры метаданных — выполняется в конфигураторе (серверная часть обновления). Это применение нового файла конфигурации .cf или обновление из хранилища.
  2. Выполнение обработчиков обновления данных — выполняется в режиме «1С:Предприятие» при первом запуске (клиентская часть). Именно на этом этапе программа пересчитывает регистры, заполняет новые реквизиты, выводит диалоговое окно с подтверждением легальности получения обновлений и запускает монопольные процедуры.

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

Решение 1. Пакетный запуск с использованием ключа /C и параметров БСП

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

Для запуска монопольного обновления без участия пользователя используется параметр ВыполнитьОбновлениеИЗавершитьРаботу. Рассмотрим структуру команды запуска:


"C:\Program Files\1cv8\8.3.22.1709\bin\1cv8.exe" ENTERPRISE /F"C:\1C_Bases\Base1" /N"Администратор" /P"Пароль" /C"ВыполнитьОбновлениеИЗавершитьРаботу" /DisableStartupMessages

Разберем детально, что происходит при таком запуске:

Для полной автоматизации 50 баз мы можем написать простой батник (файл с расширением .bat или .cmd), который будет последовательно запускать каждую базу:


@echo off
chcp 65001
set "EXE_PATH=C:\Program Files\1cv8\8.3.22.1709\bin\1cv8.exe"
set "ADMIN_USER=Администратор"
set "ADMIN_PWD=Пароль"

echo Запуск обновления базы 1...
"%EXE_PATH%" ENTERPRISE /F"C:\1C_Bases\Base1" /N"%ADMIN_USER%" /P"%ADMIN_PWD%" /C"ВыполнитьОбновлениеИЗавершитьРаботу" /DisableStartupMessages

echo Запуск обновления базы 2...
"%EXE_PATH%" ENTERPRISE /F"C:\1C_Bases\Base2" /N"%ADMIN_USER%" /P"%ADMIN_PWD%" /C"ВыполнитьОбновлениеИЗавершитьРаботу" /DisableStartupMessages

echo Все базы успешно обновлены!
pause

Этот скрипт запускает первую базу, ожидает выполнения всех процедур обновления и закрытия программы 1С (благодаря тому, что батник по умолчанию ждет завершения процесса, если не используется команда start), а затем переходит ко второй базе.

Важная деталь: Чтобы во время обновления в базу гарантированно не зашли пользователи и не запустились фоновые задания, которые могут помешать монопольной блокировке, рекомендуется использовать расширенную команду:

/C "ВыполнитьОбновлениеИЗавершитьРаботу;РегламентныеЗаданияОтключены"

Решение 2. Форсирование отложенного обновления

В современных конфигурациях БСП часть обработчиков выполняется не монопольно (когда в базе никого нет), а в фоновом режиме (так называемое отложенное обновление). Это позволяет пользователям быстрее начать работу. Однако, если баз много и сервер сильно нагружен, фоновые задания от 50 баз могут перегрузить систему.

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

/C ВыполнитьОтложенноеОбновлениеСейчас

Этот ключ заставит систему выполнить все отложенные обработчики немедленно в монопольном режиме и завершить работу программы по окончании.

Решение 3. Программный обход подтверждения легальности через COM-соединение

Если по какой-то причине вы используете старую конфигурацию, где параметры командной строки БСП не отрабатывают корректно, или хотите более тонко контролировать процесс из собственного скрипта, можно использовать программное COM-подключение.

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


// Создаем COM-соединитель к базе данных
Connector = Новый COMОбъект("V83.COMConnector");
ConnectionPath = "File=""C:\1C_Bases\Base1"";Usr=""Администратор"";Pwd=""Пароль"";";

Попытка
    Connection = Connector.Connect(ConnectionPath);
    
    // Программно подтверждаем легальность получения обновления
    Connection.ОбновлениеИнформационнойБазыСлужебный.ЗаписатьПодтверждениеЛегальностиПолученияОбновлений();
    
    // Запускаем сам процесс обновления данных
    Connection.ОбновлениеИнформационнойБазыСлужебный.ВыполнитьОбновлениеИнформационнойБазы();
    
    Сообщить("База успешно обновлена и легальность подтверждена!");
Исключение
    Сообщить("Ошибка подключения или обновления базы: " + ОписаниеОшибки());
КонецПопытки;

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

Решение 4. Использование специализированного софта

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

  1. Обновлятор-1С. Это популярная и крайне эффективная утилита, созданная специально для администраторов большого количества баз 1С. В ней реализованы все вышеописанные подходы:
    • Автоматический запуск баз в режиме «Предприятия» под служебным пользователем.
    • Автоматический обход и подтверждение легальности обновлений.
    • Возможность распараллеливания процессов. Программа может запускать обновление не последовательно, а, например, в 4 или 8 потоков (в зависимости от мощности сервера), что сократит время обработки 50 баз в несколько раз.
  2. OneScript (1sscript) и библиотека deployka. Для сторонников автоматизации через код и DevOps-подходы идеальным решением станет OneScript — скриптовый язык на базе синтаксиса 1С. Готовые скрипты из библиотеки deployka умеют программно подключаться к кластеру серверов 1С, выгонять активных пользователей, блокировать регламентные задания, обновлять конфигурации баз из хранилища и запускать сеанс «Предприятия» с нужными ключами для выполнения обработчиков обновления БСП, полностью контролируя результат в логах.

Резюме и рекомендации

Мы подробно изучили различные варианты решения проблемы ручного подтверждения обновлений. Для быстрого и бесплатного решения задачи без стороннего софта идеальным выбором будет создание батника с ключом запуска /C "ВыполнитьОбновлениеИЗавершитьРаботу;РегламентныеЗаданияОтключены".

Если же инфраструктура из 50 баз требует регулярного обслуживания, рекомендуем посмотреть в сторону специализированных инструментов автоматизации, таких как «Обновлятор-1С» или скрипты на базе OneScript. Это сэкономит десятки часов рабочего времени системного администратора и убережет от ошибок человеческого фактора.

← На главную