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

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

При настройке регулярного обслуживания информационных баз 1С системные администраторы часто автоматизируют процесс выгрузки данных через командную строку Windows. Типовой сценарий предполагает запуск сеанса в режиме ENTERPRISE со специальным параметром запуска /C ЗавершитьРаботуПользователей, после чего должна производиться выгрузка информационной базы конфигуратором (ключ /DumpIB). Однако на практике администраторы сталкиваются с проблемой: сеанс администратора успешно рассылает предупреждения и выгоняет других пользователей, но сам процесс 1cv8.exe не закрывается, блокируя дальнейшее выполнение командного файла .bat.

Разберем причины такого поведения платформы и рассмотрим надежные варианты решения этой задачи.

Почему зависает сеанс администратора при вызове параметра ЗавершитьРаботуПользователей?

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

  1. Интерактивный диалог подтверждения. В большинстве конфигураций после рассылки оповещений и установки блокировки процедура завершения работы БСП выводит администратору модальный вопрос: «Работа пользователей с программой запрещена. Завершить работу этого сеанса?». Поскольку запуск выполняется в автоматическом режиме, ответить на вопрос некому, и процесс остается активным до бесконечности.
  2. Блокирующие и модальные окна у активных пользователей. В файловом режиме работы завершение сеансов происходит через фоновые обработчики ожидания на рабочих станциях. Если у пользователя открыто модальное окно выбора, диалог сохранения файла или системная ошибка, обработчик ожидания не срабатывает. Административный сеанс встает в цикл ожидания освобождения базы и не завершает работу.
  3. Отсутствие учетных данных кластера серверов. В клиент-серверном варианте принудительный сброс соединений требует аутентификации администратора кластера 1С. Если параметры не переданы в строке вызова, сеанс не может завершить соединения на сервере и зависает.

Решение 1. Использование внешней обработки с безусловным завершением работы

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

Создадим внешнюю обработку, например УстановитьБлокировкуИВыйти.epf. В модуле формы или в обработке инициализации вызовем процедуру установки блокировки сеансов, после чего используем штатный метод платформы ПрекратитьРаботуСистемы() или ЗавершитьРаботуСистемы() с параметром Ложь (завершение без интерактивного подтверждения):


ПараметрыБлокировки = Новый БлокировкаСеансовИнформационнойБазы;
ПараметрыБлокировки.Установлена = Истина;
ПараметрыБлокировки.Начало = ТекущаяДата();
ПараметрыБлокировки.Сообщение = "Выполняется резервное копирование информационной базы.";
ПараметрыБлокировки.КодРазрешения = "BackupPass";

УстановитьБлокировкуСеансов(ПараметрыБлокировки);

// Принудительно завершаем работу текущего сеанса без вывода диалоговых окон
ПрекратитьРаботуСистемы(Ложь);

Запуск такой обработки выполняется через командную строку с помощью ключа /Execute:


"C:\Program Files\1cv8\8.3.10.2252\bin\1cv8.exe" ENTERPRISE /F "C:\1С\infobase" /N "Admin" /P "Pass" /Execute "C:\Scripts\УстановитьБлокировкуИВыйти.epf" /DisableStartupMessages

Решение 2. Корректная выгрузка базы с кодом разрешения (/UC) без преждевременного снятия блокировки

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

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


@echo off
set v8path="C:\Program Files\1cv8\8.3.10.2252\bin\1cv8.exe"
set ibPath="C:\1С\infobase"
set user="Admin"
set pass="Pass"
set ucCode="BackupPass"
set logFile="C:\1С\backup_log.txt"
set dumpFile="C:\1С\backup.dt"

rem 1. Установка блокировки через внешнюю обработку
%v8path% ENTERPRISE /F %ibPath% /N %user% /P %pass% /Execute "C:\Scripts\УстановитьБлокировкуИВыйти.epf" /DisableStartupMessages /Out %logFile%

rem 2. Выгрузка базы с ключом разрешения блокировки /UC
%v8path% DESIGNER /F %ibPath% /N %user% /P %pass% /UC %ucCode% /DumpIB %dumpFile% /DumpResult "C:\1С\result.txt" /Out %logFile% -NoTruncate

rem 3. Разблокировка базы отдельной внешней обработкой или удалением блокировки
%v8path% ENTERPRISE /F %ibPath% /N %user% /P %pass% /UC %ucCode% /Execute "C:\Scripts\СнятьБлокировкуИВыйти.epf" /DisableStartupMessages

Параметр /DumpResult позволяет батнику зафиксировать код возврата: значение 0 свидетельствует об успешной выгрузке, а 1 — о возникновении ошибок. Параметр /Out с флагом -NoTruncate дописывает сообщения платформы в единый файл журнала.

Решение 3. Управление файлом блокировки 1Cv8.cdn в файловом режиме

Проанализируем файловую архитектуру 1С. В файловой базе механизм УстановитьБлокировкуСеансов создает рядом с файлом базы 1Cv8.1CD специальный маркерный файл 1Cv8.cdn. Другие клиенты при запуске считывают данные из этого файла и не входят в базу.

Файл 1Cv8.cdn представляет собой текстовый документ следующего формата:


{1,20260329120000,00010101000000,"Выполняется резервное копирование базы данных.","BackupPass",""}

Для файловой базы можно сформировать данный файл средствами операционной системы или скрипта перед выполнением процедур копирования, а по окончании резервного копирования — удалить его командующим вызовом del /f /q "C:\1С\infobase\1Cv8.cdn".

Решение 4. Принудительное закрытие клиентских процессов средствами ОС

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


taskkill /t /f /im 1cv8.exe
taskkill /t /f /im 1cv8c.exe

Важно: Применение taskkill является аварийной мерой. Принудительное закрытие файловой базы в момент записи транзакции может привести к повреждению структуры таблиц 1Cv8.1CD. Используйте эту команду только после отправки штатного сигнала на завершение и технологической паузы (команда timeout /t 60).

Решение 5. Штатные средства для клиент-серверного режима: утилита rac и ibcmd

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

  1. Утилита rac (в связке со службой ras). Позволяет централизованно через команды кластера заблокировать начало новых сеансов (rac infobase update --sessions-deny=on), запросить список активных сеансов (rac session list) и мгновенно разорвать их (rac session terminate). Это полностью исключает зависание скрипта на стороне клиентских окон.
  2. Автономная утилита ibcmd. Начиная с современных версий 8.3, для создания дампа можно использовать команду ibcmd infobase dump, которая работает напрямую с кластером или файловой базой без запуска графического конфигуратора 1cv8.exe.

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

← На главную