При работе в клиент-серверном режиме администраторы и разработчики часто сталкиваются с неприятной ситуацией: после обновления конфигурации или платформы внезапно перестают выполняться регламентные задания, а пользователи видят предупреждение о том, что информационная база была перемещена или скопирована. Причина кроется в механизме защиты работы с внешними ресурсами Библиотеки стандартных подсистем (БСП). Эта система сравнивает текущие параметры подключения с сохраненными ранее.
Выясним причину, почему так происходит. Функция платформы СтрокаСоединенияИнформационнойБазы() при запуске на сервере (например, в контексте регламентного задания) может возвращать адрес сервера в виде Srvr="localhost:2541", в то время как у обычных пользователей в ярлыках подключения прописано сетевое имя компьютера, например Srvr="server:2541". Из-за этого разночтения БСП считает, что база была запущена на другом сервере-копии, и блокирует отправку почты, синхронизацию и запуск регламентных заданий во избежание дублирования данных.
Рассмотрим подробнее несколько практических способов решения этой проблемы: от правильной настройки сервера до программного отключения проверки.
Самый надежный метод раз и навсегда устранить проблему на системном уровне — привести настройки кластера серверов 1С к единому сетевому имени хоста. Если при установке или создании кластера сервер самоопределился как localhost или 127.0.0.1, платформа на стороне сервера всегда будет возвращать это значение.
Разберем по шагам, как исправить конфигурационные файлы кластера:
services.msc) или с помощью терминала в Linux.C:\Program Files\1cv8\srvinfo, а в ОС Linux — /home/usr1cv8/.1cv8/1C/1cv8/.1cv8wsrv.lst (находится в корневом каталоге srvinfo);1CV8Clst.lst (находится внутри папки конкретного рег-номера кластера, например, reg_1541);1CV8Clsto.lst (в той же папке reg_1541, если файл существует)."localhost" или "127.0.0.1" в блоках описания рабочих серверов и менеджеров кластера."server-db") или его статический IP-адрес, который используют клиенты для подключения.После этой процедуры серверная часть платформы начнет возвращать корректное сетевое имя, идентичное пользовательским настройкам подключения.
Иногда проблема вызвана тем, что системные администраторы настроили подключение к одной и той же базе у разных пользователей по-разному. У одного пользователя в списке баз прописано server, у другого — его IP-адрес, у третьего — локальное имя.
Проанализируем ситуацию на рабочих станциях. Если у администратора, который нажимает кнопку «Информационная база перемещена», в ярлыке прописан адрес localhost, БСП запишет именно это значение в константы как легитимный адрес. Необходимо обеспечить единообразие: во всех списках баз (файл ibases.v8i) адрес сервера должен быть прописан абсолютно одинаково для всех сотрудников.
Если у вас нет прямого доступа к файлам кластера сервера или возможность перезапуска службы временно отсутствует, можно отключить валидацию имени сервера штатными средствами БСП.
Посмотрим на пример работы с формой предупреждения:
Ref, игнорируя различия в имени сервера Srvr.Также эту настройку можно найти через администрирование системы: перейдите в раздел Администрирование — Обслуживание — Регламентные операции и проверьте доступные параметры блокировки работы с внешними ресурсами.
Если в вашей версии БСП флаг отключения проверки имени сервера скрыт из интерфейса, но архитектура конфигурации уже поддерживает данное свойство, мы можем изменить настройки программно. Для этого не нужно снимать конфигурацию с поддержки — достаточно создать простую внешнюю обработку и выполнить следующий код.
Рассмотрим пример кода для управления константой ПараметрыБлокировкиРаботыСВнешнимиРесурсами:
// Вариант А. Использование экспортного метода общего модуля БСП
Попытка
БлокировкаРаботыСВнешнимиРесурсами.УстановитьПроверкуИмениСервераВПараметрыБлокировки(Ложь);
Сообщить("Проверка имени сервера успешно отключена через общий модуль.");
Исключение
Сообщить("Метод общего модуля недоступен, пробуем прямой доступ к константе...");
КонецПопытки;
// Вариант Б. Прямая перезапись структуры параметров в константе
ПараметрыСтруктуры = Константы.ПараметрыБлокировкиРаботыСВнешнимиРесурсами.Получить().Получить();
Если ТипЗнч(ПараметрыСтруктуры) = Тип("Структура") Тогда
ПараметрыСтруктуры.Вставить("ПроверятьИмяСервера", Ложь);
Константы.ПараметрыБлокировкиРаботыСВнешнимиРесурсами.Установить(Новый ХранилищеЗначений(ПараметрыСтруктуры));
Сообщить("Свойство 'ПроверяйИмяСервера' успешно установлено в Ложь.");
Иначе
Сообщить("Не удалось получить структуру параметров блокировки.");
КонецЕсли;
Этот код перезаписывает настройки защиты БСП, принудительно заставляя систему игнорировать несовпадение имени хоста при выполнении регламентных заданий на сервере.
В старых версиях БСП, где функционал выборочной проверки отсутствует, а платформа продолжает вызывать коллизию адресов, разработчики прибегают к точечному изменению конфигурации. Нам потребуется внести изменения в общий модуль, отвечающий за валидацию параметров блокировки.
Разберем по шагам этот процесс:
РегламентныеЗаданияСлужебный (или РегламентныеЗаданияСлужебныйКлиентСервер в зависимости от версии БСП).УстановленаБлокировкаРаботыСВнешнимиРесурсами или аналогичную ей функцию, выполняющую сверку строк соединения (например, ПараметрыРаботыСВнешнимиРесурсамиИзменились).СтрокаСоединенияИнформационнойБазы(), на параметры Srvr и Ref.Srvr), и оставьте только сравнение имени информационной базы (Ref).Пример модификации кода может выглядеть следующим образом:
// Было:
// Если ПараметрыТекущие.ИмяСервера <> ПараметрыСохраненные.ИмяСервера
// Или ПараметрыТекущие.ИмяБазы <> ПараметрыСохраненные.ИмяБазы Тогда
// Возврат Истина;
// КонецЕсли;
// Стало:
Если ПараметрыТекущие.ИмяБазы <> ПараметрыСохраненные.ИмяБазы Тогда
Возврат Истина; // Блокируем только если изменилось само имя базы данных
КонецЕсли;
Использование этого метода гарантирует бесперебойную работу регламентных заданий, однако помните, что внесение изменений непосредственно в код БСП усложнит последующие обновления конфигурации. Поэтому в первую очередь рекомендуется использовать Решение 1 или программное отключение проверки параметров.