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