Часто после обновления конфигурации, переноса базы на другой сервер или даже простой перезагрузки кластера пользователи сталкиваются с неприятной ситуацией: регламентные задания перестают выполняться. При этом в журнале регистрации или в форме «Обслуживание» красуется ошибка: «Изменилась строка соединения информационной базы. Возможно, информационная база была перемещена». Даже если нажать кнопку «Информационная база перемещена», проблема может вернуться снова. В рамках этой статьи мы подробно разберем, почему это происходит и как окончательно восстановить работу системы.
В современных конфигурациях 1С, построенных на базе Библиотеки стандартных подсистем (БСП), реализован механизм защиты от случайного запуска регламентных заданий в копиях баз. Это сделано для того, чтобы тестовая база случайно не начала рассылать реальные счета клиентам или не синхронизировалась с рабочей системой. Система запоминает параметры своего расположения (имя сервера и имя базы) в константе ПараметрыБлокировкиРаботыСВнешнимиРесурсами.
Проанализируем ситуацию, когда ошибка возникает «на ровном месте». Проблема заключается в алгоритме сравнения текущей строки соединения с сохраненной. Рассмотрим основные причины «ложного» срабатывания:
SERVER-1C и server-1c — это разные строки. Если в консоли администрирования база прописана заглавными буквами, а в параметрах подключения пользователя — строчными, может возникнуть конфликт.Server1) с полным доменным именем (Server1.domain.local).MyServer), в то время как тонкий клиент передает её с портом (MyServer:1541).Прежде чем переходить к программным правкам, проверим стандартные настройки. Рассмотрим порядок действий в консоли администрирования кластера серверов 1С:
mmc.Если нажатие кнопок в интерфейсе «Я перенес базу» не помогает, мы можем заставить систему «забыть» старые настройки. Это наиболее безопасный метод, так как он не требует изменения типового кода конфигурации. Нам потребуется внешняя обработка или консоль кода, в которой нужно выполнить следующую команду:
ОбщегоНазначения.УстановитьПараметрыБлокировкиРаботыСВнешнимиРесурсами(Неопределено);
Разберем, что произойдет после выполнения этого кода. При следующем запуске любого регламентного задания система увидит, что эталонные параметры не заданы. Она автоматически возьмет текущую строку соединения, сохранит её как правильную и продолжит работу без ошибок. Это идеальный способ «вылечить» базу без снятия с поддержки.
Если проблема повторяется регулярно (например, из-за особенностей настройки сети или кластера), и обновление БСП до актуальной версии невозможно, можно прибегнуть к корректировке кода. Посмотрим на пример исправления в общем модуле РегламентныеЗаданияСлужебный.
Нам нужно найти процедуру, отвечающую за сравнение имен серверов. В проблемных версиях конфигураций (например, БП 3.0.67.x) проверка на равенство имен серверов слишком строгая. Рассмотрим, как можно модифицировать код, чтобы игнорировать различие в именах серверов, если имя самой базы совпадает:
// В общем модуле РегламентныеЗаданияСлужебный найдем фрагмент проверки
// и закомментируем сравнение по имени сервера
Если ИмяБазы <> СохраненноеИмяБазы Тогда
// Или ИмяСервера <> СохраненноеИмяСервера Тогда
ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
НСтр("ru = 'Различаются имя информационной базы или имя компьютера.
|Сохраненное имя базы: %1, текущее имя базы: %2.'"),
СохраненноеИмяБазы, ИмяБазы);
УстановитьПризнакНеобходимостиПринятияРешенияОБлокировке(ПараметрыБлокировки, ТекстСообщения);
Возврат Истина;
КонецЕсли;
Проанализируем это изменение: теперь система будет блокировать задания только в том случае, если изменилось именно имя базы (в терминах кластера 1С). Если же база осталась той же, но к ней обратились по другому имени сервера или через другой порт, регламентные задания продолжат выполняться.
Иногда причина кроется в «зависшем» кэше серверных вызовов. Выясним, как правильно произвести очистку:
1C:Enterprise 8.3 Server Agent.C:\Program Files\1cv8\srvinfo).snaccxt и reg_1541 (будьте осторожны, не удалите саму базу, если она файловая!).Важное замечание для распределенных информационных баз (РИБ): Настройки блокировки внешних ресурсов (включая строку соединения) могут мигрировать между узлами. Если в центральном узле база прописана как 1C-MAIN, а в периферийном через IP-адрес 192.168.1.10, то после каждого обмена периферийный узел может пытаться «примерить» на себя имя 1C-MAIN и блокировать задания. В этом случае необходимо привести строки подключения на всех серверах к единому стандарту (использовать только имена или только IP).
Для восстановления работы регламентных заданий рекомендуем придерживаться следующего алгоритма:
ОбщегоНазначения.РегламентныеЗаданияСлужебный, как показано выше.Помните, что в новых версиях платформы (начиная с 8.3.15+) и БСП многие из этих ошибок уже исправлены разработчиками, поэтому наиболее правильным долгосрочным решением будет обновление конфигурации и платформы до актуальных релизов.