Как исправить ошибку перемещения информационной базы 1С из-за localhost в строке соединения?

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

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

Выясним причину, почему так происходит. Функция платформы СтрокаСоединенияИнформационнойБазы() при запуске на сервере (например, в контексте регламентного задания) может возвращать адрес сервера в виде Srvr="localhost:2541", в то время как у обычных пользователей в ярлыках подключения прописано сетевое имя компьютера, например Srvr="server:2541". Из-за этого разночтения БСП считает, что база была запущена на другом сервере-копии, и блокирует отправку почты, синхронизацию и запуск регламентных заданий во избежание дублирования данных.

Рассмотрим подробнее несколько практических способов решения этой проблемы: от правильной настройки сервера до программного отключения проверки.

Решение 1. Системное исправление настроек сервера 1С (Рекомендуемый способ)

Самый надежный метод раз и навсегда устранить проблему на системном уровне — привести настройки кластера серверов 1С к единому сетевому имени хоста. Если при установке или создании кластера сервер самоопределился как localhost или 127.0.0.1, платформа на стороне сервера всегда будет возвращать это значение.

Разберем по шагам, как исправить конфигурационные файлы кластера:

  1. Остановим службу «Агент сервера 1С:Предприятия» через консоль служб Windows (services.msc) или с помощью терминала в Linux.
  2. Создадим резервную копию папки с данными кластера. По умолчанию в Windows этот каталог расположен по пути C:\Program Files\1cv8\srvinfo, а в ОС Linux — /home/usr1cv8/.1cv8/1C/1cv8/.
  3. Откроем текстовым редактором (желательно с поддержкой кодировки UTF-8) следующие файлы конфигурации кластера:
    • 1cv8wsrv.lst (находится в корневом каталоге srvinfo);
    • 1CV8Clst.lst (находится внутри папки конкретного рег-номера кластера, например, reg_1541);
    • 1CV8Clsto.lst (в той же папке reg_1541, если файл существует).
  4. Проанализируем содержимое этих файлов. Нам нужно найти все вхождения параметров "localhost" или "127.0.0.1" в блоках описания рабочих серверов и менеджеров кластера.
  5. Заменим их на реальное сетевое имя сервера (например, "server-db") или его статический IP-адрес, который используют клиенты для подключения.
  6. Сохраним изменения в файлах и запустим службу сервера 1С.

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

Решение 2. Унификация настроек подключения на клиентах

Иногда проблема вызвана тем, что системные администраторы настроили подключение к одной и той же базе у разных пользователей по-разному. У одного пользователя в списке баз прописано server, у другого — его IP-адрес, у третьего — локальное имя.

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

Решение 3. Отключение проверки имени сервера через интерфейс БСП

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

Посмотрим на пример работы с формой предупреждения:

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

Также эту настройку можно найти через администрирование системы: перейдите в раздел Администрирование — Обслуживание — Регламентные операции и проверьте доступные параметры блокировки работы с внешними ресурсами.

Решение 4. Программное отключение проверки через внешнюю обработку

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

Рассмотрим пример кода для управления константой ПараметрыБлокировкиРаботыСВнешнимиРесурсами:


// Вариант А. Использование экспортного метода общего модуля БСП
Попытка
    БлокировкаРаботыСВнешнимиРесурсами.УстановитьПроверкуИмениСервераВПараметрыБлокировки(Ложь);
    Сообщить("Проверка имени сервера успешно отключена через общий модуль.");
Исключение
    Сообщить("Метод общего модуля недоступен, пробуем прямой доступ к константе...");
КонецПопытки;

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

Этот код перезаписывает настройки защиты БСП, принудительно заставляя систему игнорировать несовпадение имени хоста при выполнении регламентных заданий на сервере.

Решение 5. Корректировка кода общего модуля (Крайний случай)

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

Разберем по шагам этот процесс:

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

Пример модификации кода может выглядеть следующим образом:


// Было:
// Если ПараметрыТекущие.ИмяСервера <> ПараметрыСохраненные.ИмяСервера 
//    Или ПараметрыТекущие.ИмяБазы <> ПараметрыСохраненные.ИмяБазы Тогда
//     Возврат Истина;
// КонецЕсли;

// Стало:
Если ПараметрыТекущие.ИмяБазы <> ПараметрыСохраненные.ИмяБазы Тогда
    Возврат Истина; // Блокируем только если изменилось само имя базы данных
КонецЕсли;

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

← На главную