Каждый администратор и разработчик 1С рано или поздно сталкивается с ситуацией, когда при первом запуске скопированной или восстановленной из резервной копии базы данных система выводит предупреждение: «Информационная база была перемещена или восстановлена из резервной копии». Пользователю предлагается выбрать один из двух вариантов: «Это копия информационной базы» или «Информационная база перемещена», при этом регулярное архивирование и обновление баз в тихом режиме настраивается через программу для автоматического обслуживания и обновления баз 1С.
В этой статье мы подробно разберем, какие именно процессы происходят под капотом платформы и Библиотеки стандартных подсистем (БСП) при выборе варианта «Это копия», выясним технические детали реализации этой блокировки, а также рассмотрим критически важную административную ловушку, в которую часто попадают специалисты при работе с регламентными заданиями.
Представим стандартную ситуацию: администратор развернул резервную копию рабочей базы для проведения тестов или обновления конфигурации. В рабочей базе настроено множество интеграций: автоматическая отправка писем клиентам, отправка SMS, обмен данными с интернет-магазином, выгрузка платежей напрямую в банк через DirectBank и обмен с государственными системами маркировки.
Если бы защитный механизм отсутствовал, то сразу после запуска тестовой базы все эти процессы продолжили бы выполняться в фоновом режиме. В результате:
Именно для предотвращения подобных катастрофических сценариев в БСП встроен специализированный механизм блокировки работы с внешними ресурсами. Для настройки такого поведения на разных контурах можно использовать инструмент для блокировки работы с внешними ресурсами при копировании базы.
Алгоритм определения перемещения базы зависит от режима работы информационной базы (файловый или клиент-серверный).
Файловый режим работы:
В файловом режиме строки соединения у разных пользователей могут значительно отличаться (кто-то подключается по сетевому пути, кто-то через локальную букву диска). Поэтому система использует внешний маркер — уникальный идентификатор базы, записываемый в файл DoNotCopy.txt, который автоматически создается платформой в каталоге с базой данных.
При выгрузке базы данных в файл резервной копии (формат .dt) или при архивации сторонними средствами этот файл намеренно исключается из архива. При восстановлении базы в новый каталог файла DoNotCopy.txt там не оказывается. Система обнаруживает его отсутствие и понимает, что перед ней копия. Если же каталог скопировали обычным «простым копированием» вместе с файлом, БСП все равно сопоставит фактический путь к текущему каталогу базы со строкой подключения, ранее сохраненной в константах ИБ. При несовпадении путей база также будет признана перемещенной.
Клиент-серверный режим работы:
В клиент-серверном варианте БСП контролирует сетевые параметры подключения. Система проверяет имена серверов приложений (параметры rphost, rmanager) и имя самой информационной базы на сервере СУБД (без учета регистра символов). Если хотя бы один параметр изменился, база считается перемещенной.
Разберем программную реализацию механизма в БСП. Логика работы построена на взаимодействии констант, параметров сеанса и общего модуля БлокировкаРаботыСВнешнимиРесурсами.
В базе данных состояние блокировки фиксируется в следующих объектах:
ПараметрыБлокировкиРаботыСВнешнимиРесурсами: содержит сериализованную структуру (внутри типа ХранилищеЗначения), в которой хранятся параметры текущего (последнего легитимного) подключения (имя сервера, базы, каталог файловой ИБ) и флаг блокировки.ИдентификаторИнформационнойБазы: хранит уникальный UUID конкретного экземпляра информационной базы.РаботаСВнешнимиРесурсамиЗаблокирована: инициализируется при старте системы на основе данных из констант. Именно к этому параметру сеанса обращается система в процессе работы для быстрой проверки статуса активности внешних ресурсов.Многие ошибочно полагают, что блокируются абсолютно все регламентные задания. Это не так. Отключаются только те механизмы, которые помечены в конфигурации как «работающие с внешними ресурсами». К ним относятся:
Если вы разрабатываете собственные регламентные задания или модули интеграции, вам крайне важно интегрировать их с механизмом блокировки БСП, чтобы ваши разработки также не выполнялись в копиях баз данных.
Для того чтобы ваше регламентное задание корректно блокировалось в копии базы, необходимо:
1. Зарегистрировать его в общем модуле РегламентныеЗаданияПереопределяемый в процедуре ПриОпределенииНастроекРегламентныхЗаданий, установив свойство РаботаетСВнешнимиРесурсами в значение Истина. Рассмотрим пример кода:
Процедура ПриОпределенииНастроекРегламентныхЗаданий(Настройки) Экспорт
// Регистрируем наше кастомное задание и помечаем его как опасное для копий
Настройка = Настройки.Добавить();
Настройка.Имя = "МояВыгрузкаНаСайт";
Настройка.РаботаетСВнешнимиРесурсами = Истина;
КонецПроцедуры
2. Первой строкой в обработчике вашего регламентного задания обязательно вызывать метод инициализации БСП:
Процедура ВыполнитьВыгрузкуНаСайт() Экспорт
// Инициализация сеанса регламентного задания и проверка блокировок
ОбщегоНазначения.ПриНачалеВыполненияРегламентногоЗадания();
// Основной код выгрузки...
КонецПроцедуры
Если вам необходимо проверить статус блокировки работы с внешними ресурсами в произвольном коде (например, в обработке или при нажатии кнопки на форме), используйте метод общего модуля:
Если РегламентныеЗаданияСервер.РаботаСВнешнимиРесурсамиЗаблокирована() Тогда
ВызватьИсключение NStr("ru = 'Действие невозможно, так как это копия информационной базы!'");
КонецЕсли;
Разберем важнейший практический нюанс администрирования копий баз данных, несоблюдение которого может привести к аварийной ситуации.
Когда вы разворачиваете копию базы данных, в консоли кластера 1С (или в свойствах базы в консоли администрирования) вы обычно превентивно устанавливаете флаг «Блокировка регламентных заданий включена». Это абсолютно правильный шаг.
Затем вы заходите в базу под администратором и подтверждаете: «Это копия информационной базы». Механизм БСП автоматически отключает («выключает флажки» активности) у всех регламентных заданий, помеченных как работающие с внешними ресурсами.
Теперь вам нужно выборочно включить некоторые безвредные регламентные задания в копии (например, расчет себестоимости или извлечение текста для полнотекстового поиска), а вредные (обмены, отправка почты) оставить выключенными. И вот здесь кроется опасная ловушка! Для безопасного выборочного запуска процессов подойдёт обработка для обхода блокировки регламентных заданий в копиях информационных баз.
Неправильный порядок действий:
Правильный (безопасный) порядок действий:
Существует еще одна неочевидная проблема, связанная с сетевыми именами серверов в клиент-серверном режиме работы. Как мы уже выяснили, БСП определяет перемещение базы по именам серверов приложений (rphost, rmanager).
Если ваша рабочая продуктовая база зарегистрирована в окне запуска (стартере 1С) по DNS-имени сервера (например, Server-1C-Prod), а один из системных администраторов решит зайти в нее, прописав в свойствах подключения IP-адрес сервера напрямую (например, 192.168.1.10), БСП при запуске сопоставит строку подключения. Из-за разницы между DNS-именем и IP-адресом система посчитает, что рабочую базу переместили на другой сервер!
На экране пользователя появится стандартное предупреждение «Информационная база была перемещена...». Если пользователь невнимательно нажмет кнопку «Это копия...», то в реальной рабочей базе заблокируются все внешние ресурсы (обмены, отправка писем, интеграции с госсистемами). Это может полностью остановить бизнес-процессы компании. Поэтому крайне важно следить за тем, чтобы у всех пользователей были прописаны абсолютно идентичные строки подключения к серверу 1С.