Как программно обновить типовые правила регистрации в РИБ на базе БСП?

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

В процессе сопровождения распределенных информационных баз (РИБ) разработчики часто сталкиваются с необходимостью изменения правил регистрации объектов для планов обмена. Стандартный подход предполагает редактирование макета правил регистрации в конфигурации. Однако после внесения изменений в макет конфигуратор не обновляет правила в самой информационной базе автоматически. Для этого требуется принудительное обновление кэша правил.

Обычно для этого используют запуск базы с параметром /c ЗапуститьОбновлениеИнформационнойБазы. Но в распределенной сети со множеством узлов (например, более 100 розничных точек) такой способ становится крайне неэффективным, так как требует длительного времени на перезапуск каждого узла. В этой статье мы подробно разберем, как устроен механизм хранения правил в Библиотеке стандартных подсистем (БСП) и как программно автоматизировать процесс их обновления без использования ключей запуска.

Суть проблемы: почему правила не обновляются сами?

Проанализируем архитектуру хранения правил обмена и регистрации в современных конфигурациях 1С, построенных на БСП. Типовые правила, которые мы редактируем в конфигураторе в виде макетов, для ускорения работы кэшируются платформой в независимом регистре сведений «Правила для обмена данными» (в метаданных это РегистрСведений.ПравилаДляОбменаДанными).

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

Решение 1: Интерактивное обновление правил (для тестирования)

Рассмотрим самый простой способ, который отлично подходит для отладки решения на одном узле или в процессе разработки. Чтобы обновить правила вручную через интерфейс системы, выполним следующие шаги:

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

После выполнения этих действий система мгновенно зачитает XML-данные из макета конфигурации и перезапишет кэш правил в регистре. Однако этот способ требует ручного вмешательства, что невозможно масштабировать на 100+ узлов.

Решение 2: Программное обновление через общий модуль БСП

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

Если нам требуется обновить правила для всех планов обмена, зарегистрированных в системе, мы можем использовать следующий метод общего модуля:


ОбменДаннымиСервер.ВыполнитьОбновлениеПравилДляОбменаДанными();

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

Если же перед нами стоит задача жестко обновить правила только для одного конкретного плана обмена, мы можем обратиться напрямую к менеджеру регистра сведений ПравилаДляОбменаДанными:


ИмяПланаОбмена = "НашПланОбмена";
РегистрыСведений.ПравилаДляОбменаДанными.ЗагрузитьПоставляемыеПравила(ИмяПланаОбмена);

Этот метод принудительно очищает старый кэш в регистре для указанного плана обмена и считывает актуальные правила из макета конфигурации.

Решение 3: Интеграция в процедуру обновления информационной базы (РИБ)

Теперь разберем по шагам, как настроить автоматическое применение новых правил на всех розничных точках при получении обновления конфигурации.

  1. Вносим изменения в макет: Изменим правила регистрации в макете нашего плана обмена в центральной базе данных.
  2. Создаем обработчик обновления: Напишем программный обработчик обновления информационной базы БСП. Для этого добавим вызов в общий модуль, отвечающий за обновление (например, ОбновлениеИнформационнойБазыПереопределяемый или создадим новый обработчик через специализированный модуль обновления вашей конфигурации). В теле обработчика пропишем вызов обновления правил:

Процедура ОбновитьПравилаРегистрации() Экспорт
    ОбменДаннымиСервер.ВыполнитьОбновлениеПравилДляОбменаДанными();
КонецПроцедуры
  1. Доставка обновления на узлы: Выполним синхронизацию данных. Измененная конфигурация (включая наш новый макет и обработчик обновления) придет на все периферийные узлы.
  2. Применение на точках: Когда на стороне периферийного узла администратор (или скрипт автоматизации) запустит обновление конфигурации базы данных (клавишей F7 в конфигураторе), а затем запустит базу в режиме «1С:Предприятие», БСП автоматически определит наличие новой версии конфигурации. Во время первого запуска выполнится наш зарегистрированный обработчик обновления, который мгновенно и без лишних перезапусков обновит правила регистрации на каждом узле.

Этот подход позволяет избежать длительного и тяжелого процесса запуска баз с параметром /c ЗапуститьОбновлениеИнформационнойБазы, экономя время системных администраторов и обеспечивая корректность регистрации изменений сразу после обновления конфигурации.

← На главную