При работе с программными продуктами на платформе 1С:Предприятие 8.3, использующими Библиотеку стандартных подсистем (БСП), пользователи часто сталкиваются с защитным механизмом, который выдает сообщение: «Информационная база перемещена». Обычно это происходит после переноса базы на другой сервер, смены имени базы в кластере или перехода с файлового варианта на клиент-серверный. Однако бывают случаи, когда база не перемещалась или подтверждение выбора («Это копия» или «База перемещена») не сохраняется, и окно появляется при каждом запуске. В этой статье мы подробно разберем, как работает этот механизм, почему он может «зациклиться» и как окончательно решить проблему.
Для начала проанализируем логику системы. Механизм защиты предназначен для того, чтобы предотвратить дублирование регламентных заданий (например, рассылку отчетов клиентам, синхронизацию с банками или выгрузку в ОФД) из копии базы. Если система решит, что она является копией, она заблокирует работу с внешними ресурсами.
Рассмотрим, как происходит проверка. В типовых конфигурациях (БП, ЗУП, УНФ) за это отвечает модуль РегламентныеЗаданияСлужебный. Система сравнивает текущие параметры подключения (строку соединения) с теми, которые были сохранены в специальной константе при предыдущем «успешном» запуске. Если хотя бы один символ в строке отличается, 1С выведет диалоговое окно.
Давайте заглянем «под капот» и проанализируем фрагмент кода, который осуществляет проверку в серверном варианте работы. Это поможет нам понять, почему даже при одинаковых настройках сообщение может появляться снова.
// Фрагмент логики из модуля РегламентныеЗаданияСлужебный
ИмяБазы = НРег(СтроковыеФункцииКлиентСервер.ПолучитьПараметрыИзСтроки(СтрокаСоединения).Ref);
ИмяСервера = НРег(СтроковыеФункцииКлиентСервер.ПолучитьПараметрыИзСтроки(СтрокаСоединения).Srvr);
СохраненноеИмяБазы = НРег(СтроковыеФункцииКлиентСервер.ПолучитьПараметрыИзСтроки(ПараметрыБлокировки.СтрокаСоединения).Ref);
СохраненноеИмяСервера = НРег(СтроковыеФункцииКлиентСервер.ПолучитьПараметрыИзСтроки(ПараметрыБлокировки.СтрокаСоединения).Srvr);
Если ИмяБазы <> СохраненноеИмяБазы Или (ПараметрыБлокировки.ПроверятьИмяСервера И (ИмяСервера <> СохраненноеИмяСервера)) Тогда
// Система устанавливает признак необходимости принятия решения
Возврат Истина;
КонецЕсли;
Проанализируем эту ситуацию. Обратите внимание на функцию НРег() — система приводит параметры к нижнему регистру для сравнения. Однако существуют нюансы, которые код может не учесть автоматически:
192.168.1.10, а другой — по сетевому имени SERVER-1C. Для платформы это разные строки соединения, что вызывает срабатывание защиты.server, а в другом server.domain.local, проверка не пройдет.НРег() в коде, в некоторых старых релизах платформы или БСП сравнение могло быть чувствительным к регистру в определенных узлах параметров.Прежде чем переходить к программированию, попробуем решить проблему штатными средствами. Если вы уверены, что база является основной (рабочей), выполним следующие действия:
Это действие должно обновить сохраненные параметры в базе данных. Если после этого при перезапуске сообщение появляется снова, значит, запись в базу не прошла или параметры сеанса снова отличаются.
Вся информация о «прошлом» месте жительства базы хранится в константе с типом ХранилищеЗначения. Рассмотрим, как найти и очистить её, если стандартная кнопка не помогает. Название константы: ПараметрыБлокировкиРаботыСВнешнимиРесурсами.
Выясним причину, почему сообщение может «зациклиться». Часто это происходит из-за нехватки прав доступа у пользователя SQL-сервера, под которым работает сервер 1С, на изменение структуры или данных в таблице констант. Также возможны проблемы с кэшем сервера 1С.
Для программного сброса блокировки мы можем воспользоваться консолью кода или создать небольшую обработку со следующим фрагментом:
// Программная разблокировка через механизмы БСП
Процедура ПринудительнаяРазблокировка() Экспорт
УстановитьПривилегированныйРежим(Истина);
ПараметрыБлокировки = Константы.ПараметрыБлокировкиРаботыСВнешнимиРесурсами.Получить().Получить();
Если ПараметрыБлокировки <> Неопределено Тогда
ПараметрыБлокировки.РаботаСВнешнимиРесурсамиЗаблокирована = Ложь;
// Обновляем строку соединения на текущую, чтобы проверки проходили успешно
ПараметрыБлокировки.СтрокаСоединения = СтрокаСоединенияИнформационнойБазы();
Константы.ПараметрыБлокировкиРаботыСВнешнимиРесурсами.Установить(Новый ХранилищеЗначения(ПараметрыБлокировки));
Сообщить("Параметры блокировки успешно обновлены.");
КонецЕсли;
КонецПроцедуры
Иногда корень проблемы кроется в настройках операционной системы сервера. Выясним, как протокол IPv6 может влиять на 1С. В некоторых релизах платформы (особенно 8.3.10, 8.3.12) наблюдался баг: при обращении к серверу система иногда получала адрес в формате IPv6 (например, ::1), а в константу сохраняла IPv4 или имя хоста.
Разберем, что можно сделать в этой ситуации:
hosts на сервере 1С и на рабочих станциях. Убедимся, что имя сервера однозначно сопоставлено с его IPv4-адресом.Если проблема наблюдается только у определенных сотрудников, проанализируем состояние их локального кэша. Информация о состоянии информационной базы может частично кэшироваться в профиле пользователя Windows.
Выполним полную очистку кэша по шагам:
%AppData%\Local\1C\1Cv8%AppData%\Roaming\1C\1Cv8eb08966c-843b-4d32...).Важно помнить, что в старых версиях платформы (например, указанной в обсуждении 8.3.10.2772) механизмы взаимодействия с SQL-сервером и определения сетевых параметров имели ряд недоработок. Рассмотрим целесообразность обновления. Начиная с релизов 8.3.12 и выше, многие ошибки, связанные с ложным определением перемещения базы, были исправлены разработчиками 1С. Если вышеуказанные способы помогают лишь на время, настоятельно рекомендуем обновить платформу до актуальной версии.
Подведем итог. Сообщение о перемещении базы — это не ошибка, а работа системы безопасности. Чтобы оно исчезло, необходимо добиться полной идентичности строки соединения у всех пользователей и корректной записи этих данных в константу ПараметрыБлокировкиРаботыСВнешнимиРесурсами. Совместное использование инструментов администрирования и программных методов разблокировки позволяет решить эту задачу максимально оперативно.