Как в правилах обмена 1С заменить всех контрагентов в документах реализации на одного?

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

При настройке обмена данными между 1С:Управление торговлей 10.3 и 1С:Бухгалтерия предприятия 3.0 часто возникает задача деперсонализации данных. Типичный пример: в торговой базе ведется детальный учет розничных или мелкооптовых покупателей, а в бухгалтерию все эти продажи должны попадать на одного обобщенного контрагента (например, "Розничный покупатель"). Рассмотрим подробно, как реализовать эту задачу с помощью конфигурации "Конвертация данных 2.1" (КД 2.1).

Способ 1. Создание отдельного ПКО для подмены (рекомендуемый метод)

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

Разберем этот метод по шагам:

  1. Откроем конфигурацию Конвертация данных 2.1 и загрузим наши правила обмена.
  2. Создадим новое ПКО для справочника Контрагенты. Назовем его, например, Контрагенты_ТолькоРозничный.
  3. В этом ПКО в настройках поиска обязательно снимем галочку "Искать объект по внутреннему идентификатору". Это критично, так как GUID (уникальный идентификатор) у всех разных контрагентов в УТ будет отличаться от GUID нашего единого контрагента в БП.
  4. Добавим в ПКО правило конвертации свойства (ПКС) для реквизита Код или Наименование. В обработчике ПередВыгрузкой для этого свойства напишем код:
    
    Значение = "000000001"; // Здесь указываем код контрагента "Розничный покупатель" из базы БП
    
  5. В этом ПКС установим флаг "Поиск". Таким образом, система при загрузке в БП проигнорирует данные из источника и найдет контрагента по жестко заданному коду.
  6. Теперь перейдем в ПКО документа РеализацияТоваровУслуг. Найдем в списке свойств реквизит Контрагент.
  7. В колонке "Правило конвертации" выберем наше новое правило Контрагенты_ТолькоРозничный.

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

Способ 2. Использование обработчика "ПередВыгрузкой" в ПКС документа

Если вы не хотите создавать новое ПКО, можно решить задачу непосредственно в правилах конвертации свойств документа. Посмотрим на пример кода, который можно прописать в ПКС Контрагент документа РеализацияТоваровУслуг в обработчике ПередВыгрузкой:


// Очищаем источник, чтобы не передавать данные конкретного клиента
Источник = Неопределено;

// Передаем фиксированное значение для поиска в приемнике
// В данном случае мы можем передать код или наименование
Значение = "Розничный покупатель"; 

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

Критический нюанс: Синхронизация договоров

Многие начинающие разработчики "ломают голову", почему после подмены контрагента документы в базе-приемнике не проводятся. Выясним причину: в 1С:Бухгалтерии документ Реализация жестко привязан к связке Контрагент + Договор. Если вы подменили контрагента, но оставили "родной" договор из УТ, система выдаст ошибку, так как этот договор принадлежит другому контрагенту.

Рассмотрим, как правильно подменить договор вместе с контрагентом:

  1. Создадим еще одно ПКО для справочника ДоговорыКонтрагентов, назовем его Договоры_Розничные.
  2. В ПКС для реквизита Владелец укажем ПКО Контрагенты_ТолькоРозничный.
  3. В ПКС для реквизита Наименование (или Код) пропишем поиск основного договора:
    
    Значение = "Основной договор"; // Название договора у "Розничного покупателя" в БП
    
  4. В ПКО документа РеализацияТоваровУслуг для свойства ДоговорКонтрагента выберем созданное правило Договоры_Розничные.

Совет: Чтобы исключить ошибки, лучше всего в обработчике ПриПоиске в ПКО договоров добавить проверку на владельца, чтобы система точно нашла договор, принадлежащий именно нашему "Розничному покупателю".

Способ 3. Подмена в базе-приемнике (ПередЗагрузкой)

Иногда удобнее оставить файл обмена "как есть" (с оригинальными данными), а подмену совершить уже в момент записи в базу 1С:Бухгалтерия. Для этого используется обработчик ПередЗагрузкой в ПКО документа РеализацияТоваровУслуг.

Проанализируем пример кода для этого обработчика:


// Ищем ссылку на нужного контрагента в БП
НужныйКонтрагент = Справочники.Контрагенты.НайтиПоКоду("000000001");

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

Этот метод хорош тем, что если вам потребуется отладить обмен и понять, какой контрагент был в источнике изначально, вы сможете увидеть его данные в файле выгрузки (XML), хотя в саму базу запишется уже подмененное значение.

Рекомендации по использованию параметров

Чтобы не "зашивать" коды контрагентов прямо в программный код (что считается плохим тоном), используйте Параметры конвертации. В КД 2.1 на закладке "Параметры" создайте параметр КодРозничногоПокупателя. Тогда в коде обработчиков можно будет писать:

Значение = Параметры.КодРозничногоПокупателя;

Это позволит вам менять настройки обмена без редактирования самих правил. Вы сможете просто указать нужный код в интерфейсе обработки обмена данными в самой 1С.

Итоги и проверка

После внесения изменений выполните следующие действия:

  1. Сохраните правила в XML-файл.
  2. Загрузите их в Узел обмена или в обработку V8Exchan82.epf (Универсальный обмен данными).
  3. Выгрузите одну-две реализации для теста.
  4. Проверьте в базе-приемнике, что в документах подставился правильный контрагент и, что самое главное, правильный договор.
  5. Попробуйте провести документ. Если документ проводится без ошибок — задача решена успешно.

Помните, что при использовании подмены на одного контрагента вы теряете возможность вести аналитику по клиентам в бухгалтерии. Если такая аналитика важна (например, для сверки взаиморасчетов), данный метод использовать не рекомендуется.

← На главную