Как работает механизм «Это копия информационной базы» в 1С и как правильно им управлять?

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

Каждый администратор и разработчик 1С рано или поздно сталкивается с ситуацией, когда при первом запуске скопированной или восстановленной из резервной копии базы данных система выводит предупреждение: «Информационная база была перемещена или восстановлена из резервной копии». Пользователю предлагается выбрать один из двух вариантов: «Это копия информационной базы» или «Информационная база перемещена», при этом регулярное архивирование и обновление баз в тихом режиме настраивается через программу для автоматического обслуживания и обновления баз 1С.

В этой статье мы подробно разберем, какие именно процессы происходят под капотом платформы и Библиотеки стандартных подсистем (БСП) при выборе варианта «Это копия», выясним технические детали реализации этой блокировки, а также рассмотрим критически важную административную ловушку, в которую часто попадают специалисты при работе с регламентными заданиями.

Зачем нужна блокировка работы с внешними ресурсами?

Представим стандартную ситуацию: администратор развернул резервную копию рабочей базы для проведения тестов или обновления конфигурации. В рабочей базе настроено множество интеграций: автоматическая отправка писем клиентам, отправка SMS, обмен данными с интернет-магазином, выгрузка платежей напрямую в банк через DirectBank и обмен с государственными системами маркировки.

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

  1. Клиенты начали бы получать дублирующие (или устаревшие) тестовые SMS-сообщения и письма.
  2. В реальный интернет-магазин выгрузились бы тестовые цены или номенклатура вида «Тест 1», «Тест 2».
  3. Произошла бы порча данных в смежных продуктовых базах из-за несанкционированного обмена, поиск расхождений после которого выполняется через инструмент автоматической сверки бухгалтерских и налоговых проводок между базами 1С.
  4. В государственные системы (Честный Знак, ЕГАИС, Меркурий) могли уйти недостоверные сведения.

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

Как система понимает, что база была скопирована или перемещена?

Алгоритм определения перемещения базы зависит от режима работы информационной базы (файловый или клиент-серверный).

Файловый режим работы:

В файловом режиме строки соединения у разных пользователей могут значительно отличаться (кто-то подключается по сетевому пути, кто-то через локальную букву диска). Поэтому система использует внешний маркер — уникальный идентификатор базы, записываемый в файл DoNotCopy.txt, который автоматически создается платформой в каталоге с базой данных.

При выгрузке базы данных в файл резервной копии (формат .dt) или при архивации сторонними средствами этот файл намеренно исключается из архива. При восстановлении базы в новый каталог файла DoNotCopy.txt там не оказывается. Система обнаруживает его отсутствие и понимает, что перед ней копия. Если же каталог скопировали обычным «простым копированием» вместе с файлом, БСП все равно сопоставит фактический путь к текущему каталогу базы со строкой подключения, ранее сохраненной в константах ИБ. При несовпадении путей база также будет признана перемещенной.

Клиент-серверный режим работы:

В клиент-серверном варианте БСП контролирует сетевые параметры подключения. Система проверяет имена серверов приложений (параметры rphost, rmanager) и имя самой информационной базы на сервере СУБД (без учета регистра символов). Если хотя бы один параметр изменился, база считается перемещенной.

Где и как хранятся настройки блокировки (технические детали)

Разберем программную реализацию механизма в БСП. Логика работы построена на взаимодействии констант, параметров сеанса и общего модуля БлокировкаРаботыСВнешнимиРесурсами.

В базе данных состояние блокировки фиксируется в следующих объектах:

Что именно блокируется при выборе варианта «Это копия»?

Многие ошибочно полагают, что блокируются абсолютно все регламентные задания. Это не так. Отключаются только те механизмы, которые помечены в конфигурации как «работающие с внешними ресурсами». К ним относятся:

  1. Регламентные задания, взаимодействующие с внешним миром: отправка/получение почты, рассылка SMS, обмен с сайтами, синхронизация данных с другими информационными базами, настройка регулярного выполнения которой возможна через программу для автоматического обмена данными между базами 1С по расписанию.
  2. Интеграция с государственными информационными системами: ГИС МТ (Честный Знак), ЕГАИС, ВетИС (Меркурий).
  3. DirectBank: прямая отправка платежей и получение выписок из банков во избежание проведения тестовых транзакций в реальном контуре.
  4. Облачные сервисы 1С: автоматическое обновление курсов валют, загрузка классификаторов (ФИАС, классификаторы банков).
  5. Система взаимодействия (Обсуждения): база автоматически отключается от сервера взаимодействия, чтобы тестовые сообщения не уходили реальным пользователям.
  6. Синхронизация файлов с облачными хранилищами (WebDAV, Яндекс.Диск и др.).

Программный интерфейс (API) для разработчика

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

Для того чтобы ваше регламентное задание корректно блокировалось в копии базы, необходимо:

1. Зарегистрировать его в общем модуле РегламентныеЗаданияПереопределяемый в процедуре ПриОпределенииНастроекРегламентныхЗаданий, установив свойство РаботаетСВнешнимиРесурсами в значение Истина. Рассмотрим пример кода:


Процедура ПриОпределенииНастроекРегламентныхЗаданий(Настройки) Экспорт
    
    // Регистрируем наше кастомное задание и помечаем его как опасное для копий
    Настройка = Настройки.Добавить();
    Настройка.Имя = "МояВыгрузкаНаСайт";
    Настройка.РаботаетСВнешнимиРесурсами = Истина;
    
КонецПроцедуры

2. Первой строкой в обработчике вашего регламентного задания обязательно вызывать метод инициализации БСП:


Процедура ВыполнитьВыгрузкуНаСайт() Экспорт
    
    // Инициализация сеанса регламентного задания и проверка блокировок
    ОбщегоНазначения.ПриНачалеВыполненияРегламентногоЗадания();
    
    // Основной код выгрузки...
    
КонецПроцедуры

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


Если РегламентныеЗаданияСервер.РаботаСВнешнимиРесурсамиЗаблокирована() Тогда
    ВызватьИсключение NStr("ru = 'Действие невозможно, так как это копия информационной базы!'");
КонецЕсли;

Административная ловушка: правильный порядок включения заданий

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

Когда вы разворачиваете копию базы данных, в консоли кластера 1С (или в свойствах базы в консоли администрирования) вы обычно превентивно устанавливаете флаг «Блокировка регламентных заданий включена». Это абсолютно правильный шаг.

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

Теперь вам нужно выборочно включить некоторые безвредные регламентные задания в копии (например, расчет себестоимости или извлечение текста для полнотекстового поиска), а вредные (обмены, отправка почты) оставить выключенными. И вот здесь кроется опасная ловушка! Для безопасного выборочного запуска процессов подойдёт обработка для обхода блокировки регламентных заданий в копиях информационных баз.

Неправильный порядок действий:

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

Правильный (безопасный) порядок действий:

  1. Убеждаемся, что в консоли кластера 1С блокировка регламентных заданий для этой базы активна (выполнение физически запрещено платформой).
  2. Заходим в саму базу 1С. Переходим в раздел Администрирование — Обслуживание и нажимаем кнопку «Разблокировать работу с внешними ресурсами».
  3. В этот момент БСП включает обратно те регламентные задания, которые она отключала. Но так как в кластере они жестко заблокированы, ни одно из них физически не может запуститься.
  4. Открываем в режиме 1С:Предприятие обработку «Консоль регламентных заданий» (или стандартный список регламентных заданий).
  5. Внимательно, вручную анализируем весь список. Находим опасные регламентные задания (выгрузки на сайт, обмены, отправка писем, интеграции с госсистемами) и явно снимаем с них флаг активности (выключаем их навсегда для этой копии).
  6. Только после того, как все потенциально опасные задания принудительно отключены в интерфейсе 1С, мы переходим в консоль кластера 1С и снимаем общую блокировку регламентных заданий для этой базы. Теперь запустятся только одобренные вами безопасные фоновые процессы.

Административная «ловушка» с IP-адресами серверов

Существует еще одна неочевидная проблема, связанная с сетевыми именами серверов в клиент-серверном режиме работы. Как мы уже выяснили, БСП определяет перемещение базы по именам серверов приложений (rphost, rmanager).

Если ваша рабочая продуктовая база зарегистрирована в окне запуска (стартере 1С) по DNS-имени сервера (например, Server-1C-Prod), а один из системных администраторов решит зайти в нее, прописав в свойствах подключения IP-адрес сервера напрямую (например, 192.168.1.10), БСП при запуске сопоставит строку подключения. Из-за разницы между DNS-именем и IP-адресом система посчитает, что рабочую базу переместили на другой сервер!

На экране пользователя появится стандартное предупреждение «Информационная база была перемещена...». Если пользователь невнимательно нажмет кнопку «Это копия...», то в реальной рабочей базе заблокируются все внешние ресурсы (обмены, отправка писем, интеграции с госсистемами). Это может полностью остановить бизнес-процессы компании. Поэтому крайне важно следить за тем, чтобы у всех пользователей были прописаны абсолютно идентичные строки подключения к серверу 1С.

← На главную