При настройке автоматического резервного копирования баз 1С через командные файлы (батники) системные администраторы часто сталкиваются с ситуацией, когда после обновления платформы или конфигурации привычные скрипты перестают работать корректно. Одной из самых раздражающих проблем является появление модального окна «Сеанс работы завершен администратором». Это окно блокирует дальнейшее выполнение скрипта до тех пор, пока пользователь не нажмет кнопку «ОК» вручную, что полностью перечеркивает саму идею автоматизации.
В этой статье мы подробно проанализируем, почему возникает эта ошибка, разберем механизмы работы платформы и предложим несколько эффективных способов решения — от исправления текущих скриптов до перехода на профессиональные методы резервного копирования.
Разберем ситуацию: в скрипте используется запуск клиента 1С с параметром /C ЗавершитьРаботуПользователей. Важно понимать, что параметр /C не является встроенной командой самой платформы 1С. Это всего лишь способ передачи текстовой строки внутрь конфигурации. Эту строку обрабатывает программный код в модуле управляемого приложения (чаще всего это механизмы Библиотеки стандартных подсистем — БСП).
Проанализируем цепочку событий:
ЗавершитьРаботуПользователей.Посмотрим на типичный скрипт, который вызывает проблему:
start /wait /d"C:\Program Files\1cv8\8.3.12.1790\bin\" 1cv8.exe ENTERPRISE /S "Server\Base" /N "Admin" /P "Pass" /DisableStartupMessages /C ЗавершитьРаботуПользователей
start /wait /d"C:\Program Files\1cv8\8.3.12.1790\bin\" 1cv8.exe DESIGNER /S "Server\Base" /N "Admin" /P "Pass" /UC "Code123" /DumpIB "C:\Backup\Base.dt"
В данной схеме первый запуск «зависает» на информационном сообщении, и выполнение второй строки (самой выгрузки) не начинается без вмешательства человека.
Если мы хотим оставить текущую логику работы, нам необходимо научить скрипт игнорировать «зависшие» окна. Самый простой, хоть и грубый метод — использование системной команды taskkill. Мы можем добавить небольшую задержку, чтобы 1С успела установить блокировку, а затем принудительно закрыть все процессы 1cv8.exe.
Рассмотрим пример модифицированного скрипта:
:: Запускаем процесс установки блокировки
start "" /d"C:\Program Files\1cv8\8.3.12.1790\bin\" 1cv8.exe ENTERPRISE /S "Server\Base" /N "Admin" /P "Pass" /C ЗавершитьРаботуПользователей
:: Ждем 60 секунд, чтобы БСП успела отработать логику выгона пользователей
timeout /t 60 /nobreak
:: Принудительно завершаем все процессы 1С, чтобы закрыть окно уведомления
taskkill /f /im 1cv8.exe
:: Теперь запускаем конфигуратор для выгрузки .dt
start /wait /d"C:\Program Files\1cv8\8.3.12.1790\bin\" 1cv8.exe DESIGNER /S "Server\Base" /N "Admin" /P "Pass" /UC "Code123" /DumpIB "C:\Backup\Base.dt"
Важно: этот метод подходит только в том случае, если на сервере в этот момент не запущены другие базы 1С, процессы которых нельзя прерывать. Команда taskkill закроет все найденные экземпляры 1cv8.exe.
Чтобы избежать появления любых графических окон, мы можем отказаться от запуска 1cv8.exe для установки блокировки. Вместо этого воспользуемся COM-объектом. Это позволит нам напрямую обратиться к параметрам информационной базы на сервере.
Создадим небольшой файл lock_base.vbs и вызовем его из батника. Проанализируем пример кода на VBScript:
Set Connector = CreateObject("V83.COMConnector")
' Параметры: Строка соединения с сервером
Set ServerRepo = Connector.ConnectServer("ServerName")
' Авторизуемся в кластере
ServerRepo.Authenticate "ClusterAdmin", "ClusterPass"
' Ищем нужную базу и устанавливаем блокировку
Set Bases = ServerRepo.GetInfoBases()
For Each IB In Bases
If UCase(IB.Name) = "HRM" Then
IB.SessionsDenied = True
IB.PermissionCode = "Code123"
IB.Message = "База закрыта на обслуживание"
ServerRepo.UpdateInfoBase(IB)
End If
Next
Этот метод работает мгновенно, не создает окон и гораздо надежнее взаимодействует с кластером серверов 1С.
Для серверных баз (SQL) правильным подходом является использование встроенных утилит администрирования rac.exe. Это консольный интерфейс, который позволяет управлять сеансами и блокировками без запуска клиента 1С.
Выясним основные шаги для реализации этого метода:
rac session terminate для сброса всех активных сеансов.rac infobase modify для установки блокировки новых соединений.Преимущество этого способа в том, что он полностью штатный и не зависит от кода конфигурации или версии БСП.
Проанализируем ситуацию глубже. В сообщении форума упоминается, что база работает на сервере (SQL-вариант). В этом случае использование команды /DumpIB (выгрузка в .dt) для ежедневных бэкапов является плохой практикой по нескольким причинам:
.dt 1С пересчитывает итоги и делает проверку ссылочной целостности. Если в базе есть логические ошибки, выгрузка может пройти успешно, а загрузка обратно — завершиться аварией..dt.Рассмотрим правильный алгоритм резервного копирования для серверной базы:
Вместо того чтобы бороться с окнами в 1С, настроим обслуживание напрямую в MS SQL Server Management Studio (SSMS):
hrm и настроим расписание (например, каждую ночь в 01:00).Если вы предпочитаете скрипты, то бэкап можно запустить одной строкой через sqlcmd в том же батнике:
sqlcmd -S ServerName -Q "BACKUP DATABASE [hrm] TO DISK='C:\Backup1c\HRM_%date%.bak' WITH INIT"
Если вы столкнулись с окном «Сеанс работы завершен администратором»:
taskkill /f /im 1cv8.exe после паузы в скрипте.COM-соединение или утилиту rac.exe для установки блокировок без участия интерфейса клиента..dt в качестве основного средства бэкапа для серверных баз. Перейдите на SQL-бэкапы. Это избавит вас от необходимости выгонять пользователей, решит проблему с зависающими окнами и обеспечит максимальную сохранность ваших данных.Помните, что резервное копирование — это не просто создание файла, это гарантия возможности восстановления. Используйте инструменты, предназначенные для профессиональной работы с данными, и ваши системы будут работать стабильно в любых условиях.