Каждый администратор 1С рано или поздно сталкивается с рутинной задачей: конфигурации в десятках баз успешно обновлены (например, через хранилище или пакетный режим конфигуратора), но работать в них пользователи всё еще не могут. При первом входе в каждую базу необходимо вручную подтвердить легальность обновления, согласиться с изменениями в окне предупреждения и дождаться завершения монопольных обработчиков обновления Библиотеки стандартных подсистем (БСП). Если баз больше десятка, выполнение этой процедуры вручную превращается в кошмар.
В этой статье мы подробно разберем, как полностью автоматизировать процесс принятия обновлений, прохождения всех регламентных процедур и подтверждения легальности во всех 50 базах с помощью скриптов командной строки, механизмов COM-соединения и встроенных возможностей платформы 1С.
В современных конфигурациях 1С, построенных на базе БСП (Библиотека стандартных подсистем), процесс обновления состоит из двух ключевых этапов:
.cf или обновление из хранилища.Если пользователи попытаются войти в базу до завершения второго этапа, система либо заблокирует вход, либо процесс обновления начнется под сеансом первого зашедшего пользователя, что может привести к ошибкам и зависаниям. Проанализируем, как решить эту задачу в автоматическом режиме.
Самый простой и надежный способ автоматизации — запуск сеанса «1С:Предприятие» в пакетном режиме с передачей специального параметра в код конфигурации. Платформа 1С поддерживает ключ запуска /C (не путать с /Слиент), который передает текстовую строку в глобальный модуль программы. БСП умеет обрабатывать этот параметр.
Для запуска монопольного обновления без участия пользователя используется параметр ВыполнитьОбновлениеИЗавершитьРаботу. Рассмотрим структуру команды запуска:
"C:\Program Files\1cv8\8.3.22.1709\bin\1cv8.exe" ENTERPRISE /F"C:\1C_Bases\Base1" /N"Администратор" /P"Пароль" /C"ВыполнитьОбновлениеИЗавершитьРаботу" /DisableStartupMessages
Разберем детально, что происходит при таком запуске:
ENTERPRISE запускает базу в режиме предприятия./N и /P передают авторизационные данные администратора. У пользователя обязательно должны быть полные права./C"ВыполнитьОбновлениеИЗавершитьРаботу" дает команду БСП автоматически проставить флаг легальности получения обновления, запустить все монопольные обработчики в фоновом режиме, а после их успешного завершения — закрыть программу 1С./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 "ВыполнитьОбновлениеИЗавершитьРаботу;РегламентныеЗаданияОтключены"
В современных конфигурациях БСП часть обработчиков выполняется не монопольно (когда в базе никого нет), а в фоновом режиме (так называемое отложенное обновление). Это позволяет пользователям быстрее начать работу. Однако, если баз много и сервер сильно нагружен, фоновые задания от 50 баз могут перегрузить систему.
Если мы хотим, чтобы все процедуры (включая отложенные) завершились до прихода пользователей, мы можем запустить второй проход скрипта с другим ключом:
/C ВыполнитьОтложенноеОбновлениеСейчас
Этот ключ заставит систему выполнить все отложенные обработчики немедленно в монопольном режиме и завершить работу программы по окончании.
Если по какой-то причине вы используете старую конфигурацию, где параметры командной строки БСП не отрабатывают корректно, или хотите более тонко контролировать процесс из собственного скрипта, можно использовать программное COM-подключение.
При подключении к базе через COM-соединение мы можем напрямую вызвать экспортный метод общего модуля БСП, который отвечает за запись признака легальности обновления. Разберем пример кода на языке 1С, который можно запустить из внешней обработки или административной базы:
// Создаем COM-соединитель к базе данных
Connector = Новый COMОбъект("V83.COMConnector");
ConnectionPath = "File=""C:\1C_Bases\Base1"";Usr=""Администратор"";Pwd=""Пароль"";";
Попытка
Connection = Connector.Connect(ConnectionPath);
// Программно подтверждаем легальность получения обновления
Connection.ОбновлениеИнформационнойБазыСлужебный.ЗаписатьПодтверждениеЛегальностиПолученияОбновлений();
// Запускаем сам процесс обновления данных
Connection.ОбновлениеИнформационнойБазыСлужебный.ВыполнитьОбновлениеИнформационнойБазы();
Сообщить("База успешно обновлена и легальность подтверждена!");
Исключение
Сообщить("Ошибка подключения или обновления базы: " + ОписаниеОшибки());
КонецПопытки;
После вызова метода ЗаписатьПодтверждениеЛегальностиПолученияОбновлений() признак легальности запишется в константы базы данных, и пользователи при входе в систему больше не увидят предупреждающее диалоговое окно.
Выясним, какие готовые инструменты существуют для решения этой задачи, если писать собственные батники и COM-скрипты нет времени.
deployka умеют программно подключаться к кластеру серверов 1С, выгонять активных пользователей, блокировать регламентные задания, обновлять конфигурации баз из хранилища и запускать сеанс «Предприятия» с нужными ключами для выполнения обработчиков обновления БСП, полностью контролируя результат в логах.Мы подробно изучили различные варианты решения проблемы ручного подтверждения обновлений. Для быстрого и бесплатного решения задачи без стороннего софта идеальным выбором будет создание батника с ключом запуска /C "ВыполнитьОбновлениеИЗавершитьРаботу;РегламентныеЗаданияОтключены".
Если же инфраструктура из 50 баз требует регулярного обслуживания, рекомендуем посмотреть в сторону специализированных инструментов автоматизации, таких как «Обновлятор-1С» или скрипты на базе OneScript. Это сэкономит десятки часов рабочего времени системного администратора и убережет от ошибок человеческого фактора.