При работе с механизмом синхронизации данных в современных конфигурациях 1С (таких как ERP 2, Комплексная автоматизация 2 или Бухгалтерия предприятия 3.0), разработчики часто сталкиваются с тем, что созданные в конфигурации «Конвертация данных 2.1» правила регистрации объектов (ПРО) просто не срабатывают. Объект либо не регистрируется вовсе, либо регистрируется без учета фильтров. Рассмотрим подробно, как правильно интегрировать свои правила в экосистему Библиотеки стандартных подсистем (БСП) и какие неочевидные нюансы нужно учесть.
Правила регистрации объектов определяют логику, по которой система решает: нужно ли выгружать конкретный документ или справочник в узел плана обмена. В отличие от правил конвертации (ПКО), которые отвечают за трансформацию данных, ПРО работают на этапе записи объекта в базу. В конфигурациях на базе БСП этот механизм сильно автоматизирован, но именно эта автоматизация требует строгого соблюдения правил настройки метаданных.
Первым делом проанализируем настройки вашего Плана обмена в конфигураторе. Для того чтобы БСП начала использовать ваши программные правила, необходимо правильно настроить авторегистрацию.
ПланОбмена и перейдем на вкладку Состав.Почему это важно: Если оставить значение «Разрешить», платформа будет регистрировать объект при каждой записи автоматически, игнорируя любые фильтры, прописанные вами в «Конвертации данных». Установка «Запретить» передает управление в руки программного кода БСП, который и будет обращаться к вашим правилам.
Система должна где-то хранить логику правил. Традиционно в БСП для этого используется макет в самом плане обмена.
ПравилаРегистрации.Даже если макет создан, БСП может «не знать», что ваш план обмена поддерживает механизм правил регистрации. Нам нужно проанализировать общий модуль ОбменДаннымиПереопределяемый.
Найдем процедуру ПолучитьПланыОбмена (или аналогичную, в зависимости от версии БСП) и добавим туда наш план обмена. Рассмотрим пример кода:
Процедура ПолучитьПланыОбмена(ПланыОбменаПоддерживающиеОбменДанными) Экспорт
ПланыОбменаПоддерживающиеОбменДанными.Добавить(Метаданные.ПланыОбмена.МойНовыйПланОбмена);
КонецПроцедуры
Без этой регистрации типовые подписки на события, входящие в состав БСП, будут игнорировать ваш план обмена при записи объектов.
Выясним причину, по которой код регистрации может не вызываться. Чтобы правила регистрации сработали, в системе должна существовать подписка на событие ПередЗаписью для нужных объектов.
Проанализируем существующие подписки в конфигурации. Обычно они называются по шаблону ОбменДанными[ИмяПланаОбмена]ПередЗаписью или используют общие подписки вроде ОбменДаннымиРегистрацияПередЗаписью. Нам необходимо:
ОбменДаннымиСобытия.МеханизмРегистрацииОбъектовПередЗаписью.Если вы создаете свой план обмена «с нуля», обязательно создайте соответствующие подписки для событий ПередЗаписью и ПередУдалением, иначе фильтрация ПРО просто не будет инициирована.
Это самый важный этап, на котором часто совершаются ошибки. БСП не читает макет из конфигуратора напрямую при каждой записи. Правила кэшируются в специальном регистре сведений Правила обмена данными.
Посмотрим на алгоритм действий в пользовательском режиме:
Важный нюанс: БСП отслеживает версию правил. Если вы внесли изменения в макет в конфигураторе, но не обновили запись в регистре в режиме предприятия, система продолжит использовать старую (или пустую) версию из базы данных.
Если правила всё равно не работают, проанализируем настройки самих правил в «Конвертации данных». Обратим внимание на флаг «Выполнять только при наличии изменений» в настройках ПРО. Если этот флаг установлен, а вы просто переписываете объект программно без изменения реквизитов, регистрация не произойдет.
Также в современных версиях БСП можно включить режим отладки для правил регистрации:
Подведем итог всему вышесказанному. Если правила регистрации в ERP или другой БСП-конфигурации не работают, пройдите по списку:
ПравилаРегистрации.ПередЗаписью.ОбменДаннымиПереопределяемый.Правила обмена данными.Соблюдение этих структурных шагов гарантирует, что ваши правила регистрации будут успешно подхвачены механизмом синхронизации БСП и начнут работать согласно заложенной логике.