Почему появляется сообщение «Информационная база была перемещена или восстановлена из резервной копии» и как это исправить?

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

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

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

Зачем нужен этот механизм?

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

Данные сохраняются в скрытой константе ПараметрыБлокировкиРаботыСВнешнимиРесурсами. Если система обнаруживает расхождение, она считает базу «копией» и выводит предупреждение.

Причина 1: Различия в строках подключения у пользователей

Проанализируем наиболее частую причину — человеческий фактор при настройке списка баз. Для БСП строки Srvr="1c-server";Ref="work_db"; и Srvr="192.168.1.10";Ref="work_db"; являются абсолютно разными, несмотря на то, что они ведут на один и тот же физический сервер.

Рассмотрим, что может вызвать конфликт:

  1. Регистр символов: Использование server вместо SERVER. Механизм сравнения в некоторых версиях БСП регистрозависим.
  2. IP-адрес вместо DNS-имени: Если часть пользователей подключается по IP, а часть по имени сервера, это вызовет срабатывание блокировки.
  3. Локальные адреса: Использование localhost или 127.0.0.1 на самом сервере при том, что пользователи подключаются по внешнему имени.
  4. Разделители в кластере: В строке соединения серверов кластера могут использоваться запятые или точки с запятой (например, serv1,serv2 против serv1;serv2).

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

Причина 2: Специфика работы кластера серверов 1С

В условиях работы SQL-кластера или кластера серверов 1С ситуация усложняется. Выясним причину: фоновое задание может запуститься на одном узле кластера, а пользователь войти через другой. Если в настройках кластера имена серверов прописаны не единообразно, система зафиксирует различие в параметре ИмяКомпьютера.

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

Причина 3: Ошибки в коде БСП и платформы

Существуют и чисто программные ошибки. Например, ошибка 00-00068833 в БСП версии 2.3.2.48 и ниже. В более новых релизах (начиная с 3.0.1.349) алгоритм сравнения стал более «умным» и научился игнорировать регистр и порядок параметров в строке соединения.

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

Способ решения 1: Использование программных заплаток (патчей)

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

Посмотрим на пример модификации функции УстановленаБлокировкаРаботыСВнешнимиРесурсами, чтобы сделать сравнение регистронезависимым:


// В модуле РегламентныеЗаданияСлужебный
Функция УстановленаБлокировкаРаботыСВнешнимиРесурсами() Экспорт
    // ... существующий код получения параметров ...
    ИмяБазы = ВРег(НРег(СтроковыеФункцииКлиентСервер.ПолучитьПараметрыИзСтроки(СтрокаСоединения).Ref));
    СохраненноеИмяБазы = ВРег(НРег(СтроковыеФункцииКлиентСервер.ПолучитьПараметрыИзСтроки(ПараметрыБлокировки.СтрокаСоединения).Ref));
    
    Если ИмяБазы <> СохраненноеИмяБазы Тогда
        // Логика блокировки
    КонецЕсли;
КонецФункции

Также можно полностью отключить проверку имени сервера, изменив параметр ПроверятьИмяСервера на Ложь в процедуре инициализации параметров блокировки. Однако помните, что это снижает уровень безопасности вашей системы.

Способ решения 2: Ручной сброс блокировки в режиме «Предприятие»

Если сообщение появилось, и вы уверены, что база рабочая, выполните следующие действия:

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

ПараметрыБлокировки = Константы.ПараметрыБлокировкиРаботыСВнешнимиРесурсами.Получить().Получить();
ПараметрыБлокировки.РаботаСВнешнимиРесурсамиЗаблокирована = Ложь;
Константы.ПараметрыБлокировкиРаботыСВнешнимиРесурсами.Установить(Новый ХранилищеЗначения(ПараметрыБлокировки));

Способ решения 3: Настройка инфраструктуры

Разберем по шагам, как минимизировать риск ложных срабатываний без правки кода:

  1. Проверьте Журнал регистрации: Найдите записи об ошибках. БСП обычно пишет туда детально: «Различаются имя информационной базы или имя компьютера. Сохраненное: [X], Текущее: [Y]». Это даст вам точный ответ, в каком символе различие.
  2. Единообразие имен: Убедитесь, что в консоли администрирования кластера 1С сервер указан так же, как в настройках подключения (например, везде по FQDN: srv-1c.company.local).
  3. Веб-сервер: Если используется публикация на веб-сервере, проверьте файл default.vrd. Параметр ib (строка соединения) в нем должен в точности соответствовать строке в толстом/тонком клиенте.

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

Подводя итог, можно сказать, что проблема «перемещенной базы» чаще всего кроется в мелочах: лишний пробел, разный регистр или использование IP-адреса вместо имени. Внимательный анализ журнала регистрации и приведение всех клиентских мест к единому стандарту подключения позволяют решить эту проблему в 90% случаев без вмешательства в программный код конфигурации.

← На главную