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