Как отключить вопрос «БД перемещена или это копия БД» при пакетной загрузке базы 1С?

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

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

Выясним причину появления предупреждения

Проанализируем механику работы типовых конфигураций (например, «1С:Зарплата и Управление Персоналом»). Данное окно формируется не платформой «1С:Предприятие», а подсистемой «Блокировка работы с внешними ресурсами», входящей в состав «1С:Библиотеки стандартных подсистем» (БСП).

Основное назначение подсистемы — исключить дублирование запросов к внешним системам (рассылка расчетных листков, отправка отчетов, синхронизация с банками и другими базами данных) из тестовых стендов или копий баз. Механизм контролирует уникальность расположения базы с помощью двух ключевых сущностей:

  1. Файла DoNotCopy.txt, который размещается непосредственно в каталоге файловой информационной базы и содержит ее уникальный строковый идентификатор (GUID).
  2. Константы ПараметрыБлокировкиРаботыСВнешнимиРесурсами, где хранится служебная структура с исходной строкой соединения и признаками блокировки.

Когда вы выполняете пакетную загрузку базы данных командой /RestoreIB, таблицы базы данных перезаписываются информацией из архива .dt. Однако архив не сохраняет внешний файл DoNotCopy.txt. При первом запуске система обнаруживает несоответствие сохраненного идентификатора расположению базы и блокирует выполнение заданий, ожидая решения администратора.

Способ 1. Запуск внешней обработки для программного снятия блокировки

Рассмотрим наиболее надежный и универсальный метод. Мы можем сразу после загрузки базы вызвать сеанс «1С:Предприятие» в пакетном режиме с ключом /Execute, указав внешнюю обработку. Обработка программно вызовет методы БСП, подтвердит статус базы и корректно закроет сеанс.

Создадим внешнюю обработку (файл .epf). В модуле обработки или в обработчике формы при открытии напишем следующий код:


Процедура ПриОткрытии()
    // Снимаем блокировку работы с внешними ресурсами средствами БСП
    БлокировкаРаботыСВнешнимиРесурсами.РазрешитьРаботуСВнешнимиРесурсами();
    
    // Завершаем сеанс без лишних вопросов
    ЗавершитьРаботуСистемы(Ложь);
КонецПроцедуры

В некоторых редакциях БСП вызов метода может производиться через общий модуль регламентных заданий:


РегламентныеЗаданияСервер.РазблокироватьРаботуСВнешнимиРесурсами();
ЗавершитьРаботуСистемы(Ложь);

Теперь объединим это в сценарии командной строки или пакетном файле .bat / .cmd:


rem 1. Загружаем базу из файла выгрузки
"C:\Program Files\1cv8\common\1cestart.exe" DESIGN /F "C:\DB1C\ZUP" /RestoreIB "C:\DB1C\zup.dt" /N "Backup" /P "Backup"

rem 2. Запускаем обработку для подтверждения перемещения базы
"C:\Program Files\1cv8\common\1cestart.exe" ENTERPRISE /F "C:\DB1C\ZUP" /N "Backup" /P "Backup" /Execute "C:\Scripts\UnlockResources.epf"

Способ 2. Снятие блокировки через COM-соединение

Посмотрим на альтернативное решение без отображения графического интерфейса. Мы можем обратиться к базе через V83.COMConnector. Так как сеанс COM-соединения не инициирует интерактивные диалоги клиента, предупреждающее окно не появится вовсе, а встроенный код позволит актуализировать параметры.

Разберем пример скрипта на VBScript или PowerShell, выполняющего подключение и вызов метода:


$connector = New-Object -ComObject "V83.COMConnector"
$connection = $connector.Connect("File=""C:\DB1C\ZUP"";Usr=""Backup"";Pwd=""Backup"";")
$connection.БлокировкаРаботыСВнешнимиРесурсами.РазрешитьРаботуСВнешнимиРесурсами()

Данный метод автоматически запишет обновленный путь к базе в константу и пересоздаст служебный файл DoNotCopy.txt с актуальным идентификатором.

Способ 3. Перенос и сохранение файла DoNotCopy.txt

Разберем более простой вариант для файловых информационных баз. Если задача состоит в регулярном обновлении тестовой базы из рабочей копии, можно сохранить исходный файл DoNotCopy.txt перед загрузкой и вернуть его на место:

  1. Перед вызовом команды /RestoreIB сохраняем файл DoNotCopy.txt из рабочего каталога в резервную папку.
  2. Выполняем загрузку .dt в целевую базу.
  3. Копируем сохраненный ранее DoNotCopy.txt обратно в каталог базы C:\DB1C\ZUP.

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

Рекомендация по резервному копированию

Обратим внимание на архитектурное ограничение: фирма «1С» не рекомендует применять связку выгрузки и загрузки .dt для регулярного резервного копирования рабочих баз. Формат .dt предназначен для переноса данных между разными СУБД или подготовки демонстрационных баз.

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

← На главную