Как автоматически применить конфигурацию базы данных 1С и завершить сеансы пользователей?

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

Рано или поздно перед любым администратором или разработчиком крупных систем на платформе 1С встает задача автоматизации процесса обновления. В условиях, когда пользователи работают круглосуточно, а ручные манипуляции в консоли администрирования занимают слишком много времени и повышают риск «человеческого фактора», автоматическое развертывание релизов становится жизненной необходимостью. В этой статье мы подробно разберем, как автоматизировать этот процесс, начиная от выгона пользователей и создания резервных копий СУБД, заканчивая непосредственным применением конфигурации базы данных.

Определяем основные проблемы ручного обновления

Прежде чем переходить к написанию скриптов, давайте проанализируем, какие препятствия возникают при попытке обновить конфигурацию «на лету»:

  1. Активные сеансы пользователей. Помимо обычных пользователей в тонких и толстых клиентах, в базе всегда могут висеть активные фоновые задания, регламентные операции, COM-подключения и открытые HTTP/Web-сервисы. Все они держат соединения и мешают монопольному доступу.
  2. Блокировка базы. Если начать обновление без установки жесткой блокировки новых соединений, пользователи продолжат заходить в базу в процессе подготовки, срывая регламентное окно.
  3. Риск потери данных. Перед любым обновлением структуры метаданных жизненно необходимо иметь свежую и гарантированно восстановимую резервную копию.
  4. Сложность ручного контроля. Администратору приходится вручную выполнять десятки рутинных операций, что ночью или ранним утром часто приводит к ошибкам.

Рассмотрим по шагам несколько надежных и проверенных на практике сценариев автоматизации этой процедуры.

Решение 1. Использование утилиты RAC и службы RAS (Рекомендуемый способ)

Использование старого доброго COM-соединения для управления кластером 1С постепенно уходит в прошлое. Оно требует регистрации библиотек на сервере приложений, привязано к разрядности операционной системы и часто ломается при обновлении платформы. Современный и кроссплатформенный стандарт — это использование связки RAS (Remote Administration Server) и консольной утилиты RAC (Remote Administration Client).

Давайте разберем по шагам, как настроить автоматический сценарий выгона пользователей и обновления базы через RAC. Для этого нам понадобятся параметры: имя сервера кластера, порт RAS, имя информационной базы, имя и пароль администратора.

Ниже представлен пример PowerShell-скрипта, который выполняет эту задачу:


# Параметры подключения к кластеру 1С
$ServerName = "1C-SERVER"
$PortRAS = "1545"
$ClusterID = "00000000-0000-0000-0000-000000000000" # UUID кластера
$IBName = "Trade"
$IBID = "11111111-1111-1111-1111-111111111111" # UUID информационной базы
$AdminUser = "Admin"
$AdminPass = "SuperPassword"
$LockCode = "12345"

# Путь к утилите rac.exe
$RacPath = "C:\Program Files\1cv8\8.3.22.1709\bin\rac.exe"

Write-Host "Шаг 1. Установка блокировки новых сеансов и фоновых заданий..."
& $RacPath infobase --cluster=$ClusterID --infobase=$IBID update --sessions-deny=on --scheduled-jobs-deny=on --lock-message="База находится на техническом обслуживании. Пожалуйста, зайдите позже." --lock-code=$LockCode --cluster-user=$AdminUser --cluster-pwd=$AdminPass

Write-Host "Шаг 2. Завершение активных сеансов пользователей..."
# Получаем список всех сеансов и принудительно их закрываем
$Sessions = & $RacPath session --cluster=$ClusterID --infobase=$IBID list
# Парсим и завершаем каждый сеанс
foreach ($Session in $Sessions) {
    if ($Session -match "session\s+:\s+(.+)") {
        $SessionID = $Matches[1]
        & $RacPath session --cluster=$ClusterID terminate --session=$SessionID
    }
}

Обратите внимание на параметр --scheduled-jobs-deny=on. Он критически важен, так как предотвращает автоматический запуск фоновых задач сервером 1С в тот момент, когда мы выгоняем пользователей. Параметр --lock-code позволяет администратору (или нашему скрипту обновления) беспрепятственно заходить в заблокированную базу для выполнения регламентных операций.

Решение 2. Обновление конфигурации через пакетный режим запуска 1С

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

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


"C:\Program Files\1cv8\8.3.22.1709\bin\1cv8.exe" CONFIG /S"1C-SERVER\Trade" /N"Admin" /P"SuperPassword" /UC"12345" /LoadCfg"C:\Deploy\metadata.cf" /UpdateDBCfg -Visible -Out "C:\Deploy\log.txt"

Давайте проанализируем ключи запуска, используемые в этой команде:

Решение 3. Автоматизация DevOps с использованием OneScript и библиотеки Deployka

Если вы хотите идти в ногу со временем и использовать современные инструменты DevOps-сообщества 1С, настоятельно рекомендуем обратить внимание на кроссплатформенную среду OneScript и специализированную библиотеку Deployka (Деплойка).

Написание скриптов автоматизации на OneScript происходит на привычном для разработчиков 1С языке. Библиотека Deployka берет на себя всю грязную работу по взаимодействию с сервером администрирования, завершению сеансов, созданию резервных копий и обновлению конфигурации. Сценарий развертывания выглядит лаконично и читаемо:


#использовать deployka

ПараметрыОбновления = Новый ПараметрыДеплоя;
ПараметрыОбновления.АдресRAS = "1C-SERVER:1545";
ПараметрыОбновления.ИмяБазы = "Trade";
ПараметрыОбновления.АдминистраторКластера = "Admin";
ПараметрыОбновления.ПарольКластера = "SuperPassword";
ПараметрыОбновления.ФайлОбновления = "C:\Deploy\metadata.cf";
ПараметрыОбновления.КодРазрешения = "12345";

Деплоер = Новый Деплоер(ПараметрыОбновления);
Деплоер.ЗаблокироватьБазу();
Деплоер.ЗавершитьСеансы();
Деплоер.ОбновитьКонфигурацию();
Деплоер.РазблокироватьБазу();

Этот подход отлично масштабируется и легко встраивается в современные пайплайны непрерывной интеграции (CI/CD) на базе GitLab CI, Jenkins или GitHub Actions.

Решение 4. Использование готового решения «Обновлятор-1С»

Для тех администраторов, у которых нет времени или желания самостоятельно писать скрипты на PowerShell или OneScript, на рынке существует отличное готовое и проверенное временем коммерческое решение — программа «Обновлятор-1С». Она позволяет полностью автоматизировать весь жизненный цикл обслуживания баз 1С:

  1. Программа умеет сама определять тип базы (файловая или серверная на СУБД MS SQL / PostgreSQL).
  2. Перед началом работ «Обновлятор» автоматически делает резервную копию базы средствами самой СУБД (это работает в разы быстрее и надежнее штатной выгрузки в .dt).
  3. Рассылает предупреждающие сообщения активным пользователям. Если пользователи работают в терминальном режиме (RDP), утилита может выполнить принудительный сброс зависших процессов 1cv8.exe на терминальных серверах с помощью системной команды taskkill /F /IM 1cv8.exe.
  4. Корректно завершает сеансы через COM или RAS/RAC, накатывает файлы обновлений и запускает реструктуризацию.
  5. По окончании процесса отправляет отчет об успешном или неудачном обновлении на электронную почту, в Telegram или Slack.

Важные рекомендации и лучшие практики

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

Таким образом, автоматизация обновления конфигурации 1С — это абсолютно решаемая задача. Выберите подходящий именно вам инструмент — будь то гибкие PowerShell-скрипты на базе RAC, современный OneScript/Deployka или готовый «Обновлятор-1С» — и забудьте о ночных дежурствах у монитора.

← На главную