При настройке обмена данными между конфигурациями «1С:Управление торговлей 11» и «1С:Бухгалтерия предприятия 3.0» через Универсальный формат (Enterprise Data) часто возникает необходимость исключить определенные объекты из обмена. Например, вы можете захотеть запретить выгрузку справочника «Физические лица» или определенных видов документов, чтобы не засорять бухгалтерскую базу лишней информацией. Рассмотрим, как это сделать правильно, сохранив конфигурацию на поддержке и избежав типичных ошибок вроде появления «объектов не найденных».
Для начала проанализируем, как работает современный обмен в 1С. Он состоит из двух независимых уровней, каждый из которых требует своей настройки:
Разберем последовательно способы реализации нашей задачи.
Это самый «чистый» способ. Мы настраиваем систему так, чтобы при записи физического лица оно просто не регистрировалось на узле обмена. Рассмотрим, как это сделать:
Справочник_ФизическиеЛица.ПередОбработкой пропишем условие Отказ = Истина;.Важно: Этот метод предотвратит автоматическую регистрацию при изменении карточки физлица. Однако, если физическое лицо указано как реквизит (например, ответственный в документе «Реализация товаров и услуг»), оно все равно может быть выгружено «по ссылке» вместе с этим документом.
Если мы не хотим работать с внешними правилами регистрации, можно воспользоваться механизмом ДополнительныеСвойства в расширении. Проанализируем пример кода, который предотвращает регистрацию объекта на всех планах обмена:
&Перед("ПередЗаписью")
Процедура Расш_ПередЗаписью(Отказ)
Если ОбменДанными.Загрузка Тогда
Возврат;
КонецЕсли;
// Блокируем стандартный механизм регистрации изменений
ДополнительныеСвойства.Вставить("ОтключитьМеханизмРегистрацииОбъектов");
КонецПроцедуры
Этот код нужно поместить в расширение для справочника ФизическиеЛица. Однако стоит помнить, что в некоторых версиях типовых конфигураций 1С этот ключ в ДополнительныеСвойства может игнорироваться, если регистрация происходит в подписках на события. В таком случае надежнее использовать явное удаление регистрации в процедуре ПриЗаписи:
&После("ПриЗаписи")
Процедура Расш_ПриЗаписи(Отказ)
УзелБП = ПланыОбмена.СинхронизацияДанныхЧерезУниверсальныйФормат.НайтиПоКоду("КодВашегоУзла");
Если Не УзелБП.Пустая() Тогда
ПланыОбмена.УдалитьРегистрациюИзменений(УзелБП, Ссылка);
КонецЕсли;
КонецПроцедуры
Если объект все же попал в выборку (например, выгружается по ссылке), мы можем запретить его обработку непосредственно в момент формирования выгрузки. Для этого в УТ 11 используется общий модуль МенеджерОбменаЧерезУниверсальныйФормат. Рассмотрим, как переопределить его поведение через расширение.
Нам необходимо найти процедуру, отвечающую за обработку данных справочника перед отправкой. Обычно она называется по шаблону ПОД_Справочник_ФизическиеЛица_Отправка_ПриОбработке.
&Вместо("ПОД_Справочник_ФизическиеЛица_Отправка_ПриОбработке")
Процедура Расш_ПОД_Справочник_ФизическиеЛица_Отправка_ПриОбработке(ДанныеИБ, ИспользованиеПКО, КомпонентыОбмена)
// Полностью отключаем использование правила конвертации для данного объекта
УстановитьИспользованиеПКО(ИспользованиеПКО, Ложь);
КонецПроцедуры
Этот метод гарантирует, что данные о физическом лице не попадут в XML-файл. Но здесь нас подстерегает главная проблема обмена — «битые ссылки».
Рассмотрим ситуацию: мы запретили выгрузку физических лиц. При выгрузке документа «Реализация товаров и услуг» система видит, что в поле Ответственный заполнено конкретное физлицо. Поскольку само физлицо мы выгружать запретили, в XML-файле документа останется только ссылка (GUID). При загрузке в «1С:Бухгалтерию» программа увидит GUID, попытается найти объект в своей базе, не найдет его и создаст пустую запись или покажет текст <Объект не найден>.
Чтобы этого избежать, нужно очищать соответствующие поля в документах перед их отправкой. Проанализируем, как это сделать в правилах конвертации объектов (ПКО):
ПКО_Документ_РеализацияТоваровУслуг_Отправка_ПриОтправкеДанных.
&После("ПКО_Документ_РеализацияТоваровУслуг_Отправка_ПриОтправкеДанных")
Процедура Расш_ПКО_Документ_РеализацияТоваровУслуг_Отправка_ПриОтправкеДанных(ДанныеИБ, ДанныеXDTO, КомпонентыОбмена, СтекВыгрузки)
// Проверяем наличие свойства и очищаем его, чтобы не передавать ссылку на физлицо
Если ДанныеXDTO.Свойства().Получить("Ответственный") <> Неопределено Тогда
ДанныеXDTO.Ответственный = Неопределено;
КонецЕсли;
КонецПроцедуры
Таким образом, в Бухгалтерию документ придет с пустым полем «Ответственный», и проблема битых ссылок будет решена. Если же поле обязательно для заполнения в Бухгалтерии, вместо Неопределено можно подставлять ссылку на некое «дежурное» физическое лицо, которое создано в обеих базах вручную.
Для надежной настройки выборочного обмена мы рекомендуем комбинированный подход:
УстановитьИспользованиеПКО(ИспользованиеПКО, Ложь) для гарантированного исключения данных из файла.Проанализировав эти шаги, мы видим, что синхронизация через Универсальный формат дает гибкие инструменты для управления данными, хотя и требует внимательного отношения к связям между объектами.