При попытке автоматизировать создание резервных копий в формате .dt системные администраторы часто сталкиваются с парадоксальной ситуацией. Мы используем штатный ключ командной строки /CЗавершитьРаботуПользователей, платформа честно выгоняет всех пользователей, но оставляет активным сеанс самого администратора (инициатора процесса). В итоге база не переходит в монопольный режим, и попытка выгрузки через /DumpIB завершается ошибкой. Рассмотрим подробно, почему так происходит, и разберем эффективные способы решения этой задачи.
Важно понимать, что ключ /C — это всего лишь способ передачи параметра внутрь программного кода конфигурации. Платформа сама по себе не анализирует содержимое этой строки. В типовых конфигурациях, построенных на Библиотеке Стандартных Подсистем (БСП), написан код, который считывает этот параметр и запускает процедуру завершения сеансов.
Логика разработчиков БСП такова: «нужно выгнать всех, кроме текущего сеанса, чтобы текущий сеанс мог выполнить административные действия». Это логично для обновления конфигурации, но мешает автоматизированной выгрузке, требующей абсолютной монопольности. Проанализируем ситуацию: текущий сеанс администратора считается «управляющим», поэтому он не завершает работу сам по себе автоматически, ожидая дальнейших команд или завершения скрипта.
Один из самых простых и эффективных «деревянных» способов — заставить администраторский сеанс закрыться сразу после того, как он отдаст команду на отключение остальных. Для этого мы можем создать небольшую внешнюю обработку и запустить ее через ключ /Execute.
Алгоритм действий будет следующим:
CloseSession.epf).ПриОткрытии (или ПриСозданииНаСервере для управляемых форм) прописываем команду завершения работы системы.Пример командной строки:
1cv8.exe ENTERPRISE /F "ПутьКБазе" /N "Admin" /P "Pass" /C ЗавершитьРаботуПользователей /Execute "C:\Scripts\CloseSession.epf"
В этом случае ключ /C отработает через механизмы БСП и установит блокировку, а внешняя обработка закроет само окно 1С, освободив базу для последующей выгрузки.
Если мы не боимся вносить небольшие правки в логику работы системы (что безопасно при использовании расширений), можно скорректировать поведение процедуры завершения работы. Посмотрим на пример кода, который можно добавить в расширение для модуля СоединенияИБКлиент:
&После("ЗавершитьРаботуПользователей")
Процедура ЗавершитьРаботуПользователей(ТекущийРежим)
Если ПараметрыКлиента.ПроцедураЗавершитьРаботуПользователейУжеВыполняется = Ложь Тогда
// Принудительно завершаем текущий сеанс администратора
ЗавершитьРаботуЭтогоСеанса();
КонецЕсли;
КонецПроцедуры
Этот код гарантирует, что после того, как БСП выполнит стандартную процедуру УдалитьВсеСеансыКромеТекущего, сам «текущий» сеанс тоже будет закрыт. Это позволит избежать «зависшего» администратора.
Проанализируем правильный алгоритм автоматизации через .bat или .powershell скрипты. Ошибка многих заключается в попытке сделать всё в один шаг. Разделим процесс на этапы:
ENTERPRISE с ключом /CЗавершитьРаботуПользователей. Это устанавливает флаг блокировки в базе.taskkill /F /IM 1cv8*, чтобы принудительно завершить оставшиеся процессы 1С, а также выполнить очистку кэша 1С через батник.DESIGNER с ключом /DumpIB. Важно: для работы в заблокированной базе обязательно используйте ключ /UC (код разрешения). Код разрешения по умолчанию в БСП часто соответствует строке ЗавершитьРаботуПользователей./CРазрешитьРаботуПользователей /UC <КодРазрешения>.Пример ключа для заблокированной базы:
1cv8.exe DESIGNER /F "Путь" /N "Admin" /P "Pass" /DumpIB "C:\Backup\base.dt" /UC ЗавершитьРаботуПользователей
Если ваша база работает в клиент-серверном варианте, забудьте про ключи /C. Рассмотрим более надежный инструмент — утилиту rac.exe (или ras.exe). Она позволяет управлять кластером серверов напрямую, не запуская само приложение 1С.
С помощью rac можно программно:
Это исключает «человеческий фактор» и проблемы с кодом БСП, так как управление идет на уровне платформы и сервера приложений.
В завершение подчеркнем критически важный момент: компания 1С официально заявляет, что файл .dt не является полноценным средством резервного копирования. Это формат для транспортировки данных между разными СУБД (например, из файловой в SQL).
Проанализируем риски: при создании .dt происходит реструктуризация. Если в индексах или таблицах есть логические ошибки, выгрузка может пройти успешно, а вот загрузить такой файл обратно в базу часто бывает невозможно. Для надежной защиты данных в промышленной эксплуатации всегда используйте средства СУБД (SQL Server Management Studio, архивирование PostgreSQL на Linux) или технологию VSS (Volume Shadow Copy) для «горячего» копирования файловых баз .1CD.