Как настроить подмену контрагента на обобщенное «Физлицо» при обмене через КД 2.0 без создания лишних записей?

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

При настройке обмена данными между конфигурациями «Управление торговлей» и «Бухгалтерия для Казахстана» (или любой другой учетной системой на базе 1С) часто возникает задача агрегации данных. Одной из самых распространенных ситуаций является необходимость скрыть детальную информацию о розничных покупателях (физических лицах) и выгрузить их в приемник как одно общее «Физическое лицо». Это позволяет не загромождать справочник Контрагенты в бухгалтерской базе тысячами записей, которые не имеют значения для регламентированного учета.

Рассмотрим ситуацию: при выгрузке документов РеализацияТоваровУслуг или ПриходныйКассовыйОрдер нам нужно, чтобы вместо конкретного Иванова или Петрова в базу-приемник подставлялся заранее созданный контрагент «Физлицо». При этом важно, чтобы сам Иванов даже не попадал в файл выгрузки, и система не пыталась создать его карточку в приемнике. Разберем пошагово, как это реализовать с помощью инструментов «Конвертации данных 2.0».

Метод 1: Подмена значения в ПКС документа

Этот способ считается наиболее эффективным и «чистым», так как мы перехватываем управление на уровне выгрузки свойства документа. Проанализируем алгоритм работы в Правилах конвертации свойств (ПКС) для объекта Контрагент.

Для начала нам необходимо определить логику в обработчике Перед выгрузкой соответствующего ПКС в правилах выгрузки документа (например, Реализации). Мы не можем просто написать Отказ = Истина, так как в этом случае в приемнике поле контрагента останется пустым. Нам нужно заменить Источник.

Рассмотрим пример кода для обработчика Перед выгрузкой в ПКС Контрагент:


// Проверяем, является ли текущий контрагент физическим лицом
// Предположим, в УТ это определяется реквизитом ВидКонтрагента
Если Источник.ВидКонтрагента = Перечисления.ВидыКонтрагентов.ФизЛицо Тогда
    
    // Находим ссылку на обобщенного контрагента в базе-источнике
    // Лучше вынести это в параметры обмена для оптимизации
    ФизЛицоСсылка = Справочники.Контрагенты.НайтиПоНаименованию("Физ лицо");
    
    Если Не ФизЛицоСсылка.Пустая() Тогда
        // Подменяем источник для выгрузки
        Источник = ФизЛицоСсылка;
    КонецЕсли;
    
КонецЕсли;

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

Метод 2: Использование «Входящих данных» и принудительное назначение ПКО

Разберем более сложную, но гибкую ситуацию. Допустим, нам нужно не просто подменить контрагента, но и использовать для него специальное правило, которое гарантированно не создаст дублей. Выясним, как использовать параметр ИмяПКО.

В ПКС Контрагент документа в обработчике Перед выгрузкой мы можем явно указать, какое правило использовать для выгрузки конкретного значения:


Если Источник.ЭтоФизЛицо Тогда // Ваше условие
    Значение = Справочники.Контрагенты.НайтиПоКоду("0000001"); // Код общего Физлица
    ИмяПКО = "Контрагенты_ТолькоПоиск";
Иначе
    // Для юридических лиц используем стандартное ПКО
    ИмяПКО = "Контрагенты";
КонецЕсли;

В этом случае мы создаем отдельное ПКО с именем Контрагенты_ТолькоПоиск. В нем мы отключаем галочку «Генерировать новый номер или код, если он не задан» и в обработчике При загрузке или в настройках полей поиска указываем, что поиск идет только по ключевым реквизитам. Если объект не найден, создание можно заблокировать в обработчике Перед загрузкой через Отказ = Истина.

Метод 3: Синхронизация по фиксированному идентификатору

Проанализируем ситуацию, когда в приемнике (Бухгалтерии) уже есть предопределенный элемент или элемент с известным UUID. Чтобы не плодить записи, мы можем передавать данные так, чтобы приемник всегда «схлопывал» их в одну карточку.

Для этого в ПКС Контрагент документа используем следующий подход:

  1. Определяем, что перед нами физлицо.
  2. Вместо выгрузки реального объекта передаем структуру ВходящиеДанные.
  3. В ПКО Контрагенты в полях поиска описываем алгоритм сопоставления.

Однако проще всего воспользоваться поиском по уникальному коду, который совпадает в обеих базах. Если в УТ код общего физлица «ФЛ-001» и в БК он такой же, то подмена Источник в ПКС документа решит проблему полностью: реальный контрагент (Иванов) не попадет в XML-файл, так как он вообще не будет передаваться в процедуру выгрузки объекта.

Критический момент: Выгрузка договоров

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

Чтобы избежать этой «свалки» данных, необходимо применить аналогичную логику подмены в ПКС Договор документа:


Если Источник.Контрагент.ЭтоФизЛицо Тогда
    // Подставляем ссылку на основной договор общего физлица
    Значение = Справочники.ДоговорыКонтрагентов.НайтиПоНаименованию("Основной договор", , ФизЛицоСсылка);
    ИмяПКО = "Договоры";
КонецЕсли;

Резюме и рекомендации

Для реализации задачи без изменения типовой конфигурации приемника (БК), мы рекомендуем придерживаться следующих правил:

  1. Подмена на уровне документа: Всегда делайте замену Источник или Значение в правилах конвертации свойств (ПКС) конкретных документов, а не в самом ПКО контрагента. Это позволит сохранить возможность выгрузки физлиц «как есть» для других типов документов, если это потребуется в будущем.
  2. Использование параметров: Ссылку на обобщенное «Физлицо» лучше получить один раз при старте обмена в обработчике Перед выгрузкой данных конвертации и записать в Параметры.ОбщееФизЛицо. Это существенно ускорит выгрузку, так как не будет постоянных поисков в базе НайтиПоНаименованию.
  3. Синхронная замена договора: Никогда не забывайте про объект Договор. Подмена контрагента без подмены договора лишает смысла всю процедуру очистки базы от лишних данных.
  4. Проверка через ИмяПКО: Если вы хотите быть абсолютно уверены, что новые контрагенты-физлица не создадутся, используйте для них отдельное ПКО с отключенной опцией создания новых объектов в приемнике.

Используя эти методы, мы добьемся того, что в файле обмена вместо данных о тысячах розничных покупателей будет фигурировать только одна ссылка, которая при загрузке в Бухгалтерию для Казахстана всегда будет указывать на единственную карточку контрагента.

← На главную