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