Как автоматизировать процесс обновления множества баз 1С?

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

Рассмотрим ситуацию, с которой часто сталкиваются администраторы и программисты 1С: на сервере находится множество однотипных баз (например, 15–20 баз "1С:Бухгалтерии" или "Зарплаты и управления персоналом"). Чтобы эффективно управлять такой инфраструктурой, часто используют конфигурацию для администрирования большого количества баз, так как выполнять обновление каждой базы вручную — процесс трудоемкий, долгий и подверженный ошибкам из-за человеческого фактора.

Стандартный ручной алгоритм выглядит так:

  1. Зайти в Конфигуратор.
  2. Сделать архивную копию.
  3. Открыть конфигурацию, нажать "Поддержка — Обновить конфигурацию".
  4. Выбрать файл обновления, подождать, принять изменения.
  5. Обновить конфигурацию базы данных (F7). На этом этапе может пригодиться помощник оператора обновления КБД, облегчающий жизнь разработчику.
  6. Запустить режим "1С:Предприятие", чтобы отработали служебные обработчики обновления данных.

Если умножить это на 20 баз, рабочий день будет потерян. Разберем подробно, как автоматизировать этот процесс, используя штатные средства платформы 1С и командную строку.

Основные подходы к автоматизации

Проанализируем два основных метода решения задачи, которые обсуждались экспертами:

  1. Пакетные скрипты (Batch/CMD): Использование параметров запуска исполняемого файла 1С. Это бесплатный и гибкий метод, требующий навыков администрирования.
  2. Специализированное ПО: Использование готовых программ, таких как "Обновлятор-1С", или применять полноценный центр администрирования 1С для массового выполнения операций. Это решение требует меньше времени на настройку, но часто является платным для коммерческого использования.

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

Параметры командной строки для обновления

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

Для запуска конфигуратора используется ключевое слово DESIGNER (в старых версиях или по привычке иногда называют CONFIG, но корректный параметр — DESIGNER).

Основные ключи доступа к базе:

Ключи для операций обновления:

Сценарий 1: Обновление одной типовой базы

Рассмотрим простейший скрипт (bat-файл) для обновления одной базы. Алгоритм действий: делаем бэкап, накатываем обновление, применяем изменения.


REM Установка переменных для удобства
SET EXE_PATH="C:\Program Files\1cv8\8.3.xx.xxxx\bin\1cv8.exe"
SET BASE_PATH="C:\Bases\Accounting"
SET USER="Администратор"
SET PASS="12345"
SET UPDATE_FILE="C:\Updates\1cv8.cfu"
SET LOG_FILE="C:\Logs\update.txt"

REM Шаг 1: Резервное копирование
%EXE_PATH% DESIGNER /F %BASE_PATH% /N %USER% /P %PASS% /DumpIB "C:\Backups\backup.dt" /Out %LOG_FILE%

REM Шаг 2: Обновление конфигурации и базы данных
%EXE_PATH% DESIGNER /F %BASE_PATH% /N %USER% /P %PASS% /UpdateCfg %UPDATE_FILE% /UpdateDBCfg /Out %LOG_FILE% -NoTruncate

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

Сценарий 2: Оптимизация для множества одинаковых баз

Если у вас 20 одинаковых типовых баз (например, все "Бухгалтерия 3.0" одной версии), обновлять каждую из них файлом обновления .cfu долго. Процесс сравнения и объединения занимает много времени. Особенно остро проблема стоит в крупных компаниях, где ускорение обновления ЗУП может сократить время процесса с часов до минут.

Разберем оптимизированный алгоритм, предложенный опытными специалистами:

  1. Обновляем только одну базу традиционным способом (через /UpdateCfg с файлом .cfu).
  2. Выгружаем из этой обновленной базы полный файл конфигурации .cf. Для этого используется параметр /DumpCfg.
  3. Во все остальные 19 баз мы просто загружаем этот готовый .cf файл. Это делается командой /LoadCfg.

Почему это лучше? Команда /LoadCfg выполняет полную замену конфигурации без долгих сравнений объектов. Это работает в разы быстрее. Однако будьте осторожны: этот метод подходит только для полностью идентичных конфигураций, находящихся на поддержке без изменений.

Пример команды для "быстрой" загрузки в остальные базы:


SET CF_FILE="C:\Updates\NewRelease.cf"

REM Загрузка конфигурации и обновление БД
%EXE_PATH% DESIGNER /S "Server\Base2" /N %USER% /P %PASS% /LoadCfg %CF_FILE% /UpdateDBCfg /Out update_base2.log

Проблема "Шага №3": Запуск в режиме Предприятия

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

Если этого не сделать, пользователи при входе увидят окно с прогресс-баром обновления, которое может висеть долго и блокировать работу.

Рассмотрим, как автоматизировать этот шаг. Для этого 1С запускается в режиме ENTERPRISE с определенными параметрами.

Вариант А: Использование ключа /C

Многие конфигурации позволяют передать команду через параметр /C. Например, для принудительного выполнения обработчиков:


%EXE_PATH% ENTERPRISE /S "Server\Base" /N %USER% /P %PASS% /C "ЗапуститьОбновлениеИнформационнойБазы" /Out enterprise_log.txt

В современных конфигурациях часто достаточно просто запустить сеанс с ключом, разрешающим выполнение регламентных заданий, и обновление запустится фоновым заданием. Чтобы дождаться окончания и закрыть программу, придется писать более сложные скрипты на VBScript или PowerShell.

Нюансы для клиент-серверных баз (SQL)

Если ваши базы находятся на сервере 1С (SQL вариант), простого запуска скрипта недостаточно. Необходимо обеспечить монопольный доступ.

Разберем обязательные дополнительные шаги:

  1. Блокировка соединений: Нужно запретить пользователям входить в базу.
  2. Завершение сеансов: Поможет консоль активности пользователей, чтобы увидеть, кто занимает лицензии, и принудительно "выгнать" тех, кто уже работает.
  3. Блокировка регламентных заданий: Фоновые задания могут мешать обновлению.

Для автоматизации этих действий в клиент-серверном варианте используется утилита администрирования кластера RAC (Remote Administration Client). Без использования RAC (или COM-соединения с агентом сервера) скрипт обновления скорее всего выдаст ошибку "Ошибка исключительной блокировки информационной базы".

Пример логики скрипта с RAC:


REM Блокировка базы
rac session list --cluster=... | (команда для завершения сеансов)
rac infobase update --cluster=... --infobase=... --sessions-deny=on

REM Здесь команды обновления 1С (как описано выше)

REM Разблокировка базы
rac infobase update --cluster=... --infobase=... --sessions-deny=off

Альтернатива: OneScript

Написание сложных .bat файлов — прошлый век. Сейчас в сообществе 1С стандартом для автоматизации стал OneScript (oscript). Это независимая реализация языка 1С, которая позволяет писать скрипты на родном языке 1С, но выполнять их как системные скрипты.

Для OneScript существует библиотека deployka или инструменты проекта Vanessa, которые уже содержат готовые команды типа ОбновитьКонфигурацию() или ЗавершитьРаботуПользователей(). Это делает код читаемым и надежным.

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

  1. Для малого количества баз (1–2) можно использовать простые bat-файлы с параметрами /UpdateCfg и /UpdateDBCfg.
  2. Для большого количества одинаковых баз эффективнее обновить одну, выгрузить .cf и загрузить его в остальные через /LoadCfg.
  3. Не забывайте про шаг запуска в режиме "Предприятие" для выполнения обработчиков данных.
  4. В клиент-серверном варианте обязательно используйте инструменты администрирования кластера (RAC) для сброса сеансов.
  5. Обязательно проверяйте %ERRORLEVEL% (код возврата) после каждого шага скрипта. Если обновление конфигурации прошло с ошибкой, нельзя запускать обновление базы данных!

Если самостоятельное написание скриптов кажется слишком сложным или рискованным, стоит обратить внимание на готовые инструменты, упомянутые в обсуждении, такие как "Обновлятор-1С", который берет на себя всю рутину по управлению блокировками, бэкапами и многопоточным обновлением.

← На главную