Как настроить выборочный перенос данных из УТ 11 в БП и предотвратить появление битых ссылок

Программист 1С v8.3 (Управляемые формы) 1С:Управление торговлей Управленческий учет Торговля и дистрибуция
← На главную

При настройке обмена данными между конфигурациями «1С:Управление торговлей 11» и «1С:Бухгалтерия предприятия 3.0» через Универсальный формат (Enterprise Data) часто возникает необходимость исключить определенные объекты из обмена. Например, вы можете захотеть запретить выгрузку справочника «Физические лица» или определенных видов документов, чтобы не засорять бухгалтерскую базу лишней информацией. Рассмотрим, как это сделать правильно, сохранив конфигурацию на поддержке и избежав типичных ошибок вроде появления «объектов не найденных».

Понимание механизмов обмена через Универсальный формат

Для начала проанализируем, как работает современный обмен в 1С. Он состоит из двух независимых уровней, каждый из которых требует своей настройки:

  1. Правила регистрации объектов (ПРО): определяют, какие объекты должны попасть в очередь на выгрузку при их записи или изменении. Эти правила обычно создаются в конфигурации «Конвертация данных 2.0».
  2. Правила обмена (Менеджер обмена): определяют, как именно данные преобразуются в формат XML (Enterprise Data). Здесь используется логика «Конвертации данных 3.0», которая встроена в саму конфигурацию в виде общего модуля (Менеджер обмена через универсальный формат).

Разберем последовательно способы реализации нашей задачи.

Способ 1. Настройка правил регистрации объектов (КД 2.0)

Это самый «чистый» способ. Мы настраиваем систему так, чтобы при записи физического лица оно просто не регистрировалось на узле обмена. Рассмотрим, как это сделать:

  1. Выясним, какие правила регистрации используются. Для этого перейдем в НСИ и администрирование — Синхронизация данных — Настройки синхронизации. В параметрах выберем пункт «Загрузить правила регистрации объектов». Там же можно выгрузить текущие правила в XML-файл.
  2. Загрузим этот файл в базу «Конвертация данных 2.0».
  3. Найдем в списке объектов Справочник_ФизическиеЛица.
  4. В обработчике ПередОбработкой пропишем условие Отказ = Истина;.
  5. Сохраним правила и загрузим их обратно в УТ.

Важно: Этот метод предотвратит автоматическую регистрацию при изменении карточки физлица. Однако, если физическое лицо указано как реквизит (например, ответственный в документе «Реализация товаров и услуг»), оно все равно может быть выгружено «по ссылке» вместе с этим документом.

Способ 2. Использование расширения для управления регистрацией

Если мы не хотим работать с внешними правилами регистрации, можно воспользоваться механизмом ДополнительныеСвойства в расширении. Проанализируем пример кода, который предотвращает регистрацию объекта на всех планах обмена:


&Перед("ПередЗаписью")
Процедура Расш_ПередЗаписью(Отказ)
    Если ОбменДанными.Загрузка Тогда
        Возврат;
    КонецЕсли;
    
    // Блокируем стандартный механизм регистрации изменений
    ДополнительныеСвойства.Вставить("ОтключитьМеханизмРегистрацииОбъектов");    
КонецПроцедуры

Этот код нужно поместить в расширение для справочника ФизическиеЛица. Однако стоит помнить, что в некоторых версиях типовых конфигураций 1С этот ключ в ДополнительныеСвойства может игнорироваться, если регистрация происходит в подписках на события. В таком случае надежнее использовать явное удаление регистрации в процедуре ПриЗаписи:


&После("ПриЗаписи")
Процедура Расш_ПриЗаписи(Отказ)
    УзелБП = ПланыОбмена.СинхронизацияДанныхЧерезУниверсальныйФормат.НайтиПоКоду("КодВашегоУзла");
    Если Не УзелБП.Пустая() Тогда
        ПланыОбмена.УдалитьРегистрациюИзменений(УзелБП, Ссылка);    
    КонецЕсли; 
КонецПроцедуры

Способ 3. Модификация Менеджера обмена (КД 3.0)

Если объект все же попал в выборку (например, выгружается по ссылке), мы можем запретить его обработку непосредственно в момент формирования выгрузки. Для этого в УТ 11 используется общий модуль МенеджерОбменаЧерезУниверсальныйФормат. Рассмотрим, как переопределить его поведение через расширение.

Нам необходимо найти процедуру, отвечающую за обработку данных справочника перед отправкой. Обычно она называется по шаблону ПОД_Справочник_ФизическиеЛица_Отправка_ПриОбработке.


&Вместо("ПОД_Справочник_ФизическиеЛица_Отправка_ПриОбработке")
Процедура Расш_ПОД_Справочник_ФизическиеЛица_Отправка_ПриОбработке(ДанныеИБ, ИспользованиеПКО, КомпонентыОбмена)
    // Полностью отключаем использование правила конвертации для данного объекта
    УстановитьИспользованиеПКО(ИспользованиеПКО, Ложь);
КонецПроцедуры

Этот метод гарантирует, что данные о физическом лице не попадут в XML-файл. Но здесь нас подстерегает главная проблема обмена — «битые ссылки».

Решение проблемы «Объект не найден»

Рассмотрим ситуацию: мы запретили выгрузку физических лиц. При выгрузке документа «Реализация товаров и услуг» система видит, что в поле Ответственный заполнено конкретное физлицо. Поскольку само физлицо мы выгружать запретили, в XML-файле документа останется только ссылка (GUID). При загрузке в «1С:Бухгалтерию» программа увидит GUID, попытается найти объект в своей базе, не найдет его и создаст пустую запись или покажет текст <Объект не найден>.

Чтобы этого избежать, нужно очищать соответствующие поля в документах перед их отправкой. Проанализируем, как это сделать в правилах конвертации объектов (ПКО):

  1. Найдем процедуру конвертации документа, например, ПКО_Документ_РеализацияТоваровУслуг_Отправка_ПриОтправкеДанных.
  2. В этой процедуре мы можем программно изменить структуру данных, которая будет записана в XML.

&После("ПКО_Документ_РеализацияТоваровУслуг_Отправка_ПриОтправкеДанных")
Процедура Расш_ПКО_Документ_РеализацияТоваровУслуг_Отправка_ПриОтправкеДанных(ДанныеИБ, ДанныеXDTO, КомпонентыОбмена, СтекВыгрузки)
    // Проверяем наличие свойства и очищаем его, чтобы не передавать ссылку на физлицо
    Если ДанныеXDTO.Свойства().Получить("Ответственный") <> Неопределено Тогда
        ДанныеXDTO.Ответственный = Неопределено;
    КонецЕсли;
КонецПроцедуры

Таким образом, в Бухгалтерию документ придет с пустым полем «Ответственный», и проблема битых ссылок будет решена. Если же поле обязательно для заполнения в Бухгалтерии, вместо Неопределено можно подставлять ссылку на некое «дежурное» физическое лицо, которое создано в обеих базах вручную.

Итоги и рекомендации

Для надежной настройки выборочного обмена мы рекомендуем комбинированный подход:

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

← На главную