При работе с распределенными информационными базами (РИБ), особенно в конфигурациях на базе Библиотеки стандартных подсистем (БСП), таких как «1С:Розница 2.2», системные администраторы и программисты часто сталкиваются с ситуацией, когда периферийный узел начинает вести себя нестабильно после обновления главного узла. Одной из самых неприятных проблем является циклическое появление окна «Обновление параметров работы программы» при каждом входе в систему, которое сопровождается полным отказом регламентных заданий. Разберем детально причины этого поведения и способы исправления ситуации.
Для начала проанализируем, как устроено обновление в БСП. Весь процесс обновления конфигурации разделен на два ключевых этапа:
Проблема «бесконечного обновления» возникает тогда, когда система видит, что отложенные обработчики обновления не завершены (статус «Выполняется» или «Ошибка»), но запустить их через механизм регламентных заданий не может. В результате при каждом старте 1С пытается инициировать этот процесс заново, но терпит неудачу.
В рассматриваемом случае главный узел работает в режиме клиент-сервер, а периферийный — в файловом режиме. В файловых базах выполнение регламентных заданий имеет свои особенности: они запускаются либо в отдельном выделенном сеансе, либо в текущем пользовательском сеансе при наличии активности. Если регламентные задания «зависли» или заблокированы, процесс обновления параметров никогда не получит статус «Завершено».
Проверим статус блокировки регламентных заданий программно. Рассмотрим код, который позволяет увидеть состояние блокировки:
Блокировка = ИнформационнаяБаза.ПолучитьБлокировкуРегламентныхЗаданий();
Если Блокировка.Установлена Тогда
Сообщить("Внимание: Регламентные задания заблокированы!");
Блокировка.Установлена = Ложь;
ИнформационнаяБаза.УстановитьБлокировкуРегламентныхЗаданий(Блокировка);
КонецЕсли;
Также важно убедиться, что платформа понимает, какому сеансу разрешено выполнять эти задания. Попробуем запустить клиента с параметром командной строки AllowExecuteScheduledJobs. Это принудительно разрешает выполнение заданий в данном сеансе.
Если регламентные задания не запускаются автоматически, нам необходимо заставить систему выполнить обработчики обновления вручную. Проанализируем состояние регистра сведений «Потоки обновления» или воспользуемся типовым интерфейсом: «Администрирование» — «Обслуживание» — «Обновление программы» — «Результаты обновления».
Если в списке есть незавершенные пункты, их можно попробовать запустить форсированно. Для этого закроем все сеансы и запустим 1С с ключом:
/C ЗапуститьОбновлениеИнформационнойБазы
Этот параметр заставляет БСП выполнить все отложенные процедуры обновления в текущем (активном) окне, не дожидаясь срабатывания регламентного задания. Это критически важно для удаленных магазинов с плохим интернетом, где фоновые процессы могут обрываться.
В РИБ часто возникает конфликт идентификаторов. Система сравнивает структуру метаданных конфигурации со справочником «Идентификаторы объектов метаданных». Если в периферийном узле данные справочника «разъехались» с реальной структурой базы (что бывает при некорректном приеме сообщения обмена), система будет пытаться обновить параметры при каждом запуске.
Для решения этой проблемы рекомендуется использовать стандартную обработку БСП «Обновление идентификаторов объектов метаданных». Если обработка не помогает, стоит проверить регистр сведений «Версии подсистем». Выясним причину расхождений, сравнив версии в главном и периферийном узлах. В крайнем случае, можно принудительно прописать актуальный номер версии конфигурации в этот регистр для всех подсистем, используя код:
МенеджерЗаписи = РегистрыСведений.ВерсииПодсистем.СоздатьМенеджерЗаписи();
МенеджерЗаписи.ИмяПодсистемы = "СтандартныеПодсистемы";
МенеджерЗаписи.Прочитать();
МенеджерЗаписи.Версия = "2.2.11.24"; // Указываем актуальный номер релиза
МенеджерЗаписи.Записать();
Разберем ситуацию, когда база была скопирована или перенесена. В файловом режиме при первом запуске система часто спрашивает: «Это копия или база перемещена?». Если пользователь случайно ответил, что это копия, 1С блокирует все внешние соединения и регламентные задания в целях безопасности.
Чтобы исправить это, перейдем в раздел «Обслуживание» и найдем кнопку «Разблокировать работу с внешними ресурсами» (или «Я подтверждаю, что это не копия»). Без этого действия ни одно регламентное задание по обновлению параметров не запустится.
Также проанализируем права доступа к самой папке с файловой базой. Поскольку обновление параметров требует записи в служебные файлы (включая временные файлы и файлы блокировок), у пользователя Windows должны быть полные права на папку DBName. Тот факт, что проблема решается под учетной записью «Администратор», часто указывает именно на ограничение прав на уровне файловой системы или на уровне ролей в самой 1С (недостаток прав на запись в технические регистры сведений БСП).
Рассмотрим пошагово, что нужно сделать, чтобы починить периферийный узел:
/C ЗапуститьОбновлениеИнформационнойБазы под пользователем с полными правами.ПланыОбмена.УстановитьГлавныйУзел(Неопределено)), выполнить запуск и обновление параметров, а затем вернуть привязку к главному узлу.Помните, что в РИБ крайне важно соблюдать идентичность версий платформы на всех узлах. Разные релизы платформы могут по-разному вычислять хэш метаданных, что также приводит к постоянному желанию системы «обновить параметры».