При настройке обмена данными между 1С:Управление торговлей 10.3 и 1С:Бухгалтерия предприятия 3.0 часто возникает задача деперсонализации данных. Типичный пример: в торговой базе ведется детальный учет розничных или мелкооптовых покупателей, а в бухгалтерию все эти продажи должны попадать на одного обобщенного контрагента (например, "Розничный покупатель"). Рассмотрим подробно, как реализовать эту задачу с помощью конфигурации "Конвертация данных 2.1" (КД 2.1).
Самый правильный и архитектурно чистый способ — это создание дополнительного Правила Конвертации Объектов (ПКО). Если мы просто изменим основное правило для справочника Контрагенты, то во всех документах (поступлениях, заявках, оплатах) контрагенты заменятся на одного, что обычно недопустимо. Нам же нужно изменить только реализации.
Разберем этот метод по шагам:
Контрагенты. Назовем его, например, Контрагенты_ТолькоРозничный.Код или Наименование. В обработчике ПередВыгрузкой для этого свойства напишем код:
Значение = "000000001"; // Здесь указываем код контрагента "Розничный покупатель" из базы БП
РеализацияТоваровУслуг. Найдем в списке свойств реквизит Контрагент.Контрагенты_ТолькоРозничный.Проанализируем ситуацию: теперь при выгрузке любой реализации программа будет обращаться к специальному правилу, которое всегда возвращает одного и того же контрагента, в то время как остальные документы будут использовать стандартное ПКО.
Если вы не хотите создавать новое ПКО, можно решить задачу непосредственно в правилах конвертации свойств документа. Посмотрим на пример кода, который можно прописать в ПКС Контрагент документа РеализацияТоваровУслуг в обработчике ПередВыгрузкой:
// Очищаем источник, чтобы не передавать данные конкретного клиента
Источник = Неопределено;
// Передаем фиксированное значение для поиска в приемнике
// В данном случае мы можем передать код или наименование
Значение = "Розничный покупатель";
Важно помнить, что в этом случае в настройках ПКО Контрагенты должен быть настроен поиск по наименованию. Однако такой подход менее надежен, так как наименование может измениться, а код в базе обычно более стабилен.
Многие начинающие разработчики "ломают голову", почему после подмены контрагента документы в базе-приемнике не проводятся. Выясним причину: в 1С:Бухгалтерии документ Реализация жестко привязан к связке Контрагент + Договор. Если вы подменили контрагента, но оставили "родной" договор из УТ, система выдаст ошибку, так как этот договор принадлежит другому контрагенту.
Рассмотрим, как правильно подменить договор вместе с контрагентом:
ДоговорыКонтрагентов, назовем его Договоры_Розничные.Владелец укажем ПКО Контрагенты_ТолькоРозничный.Наименование (или Код) пропишем поиск основного договора:
Значение = "Основной договор"; // Название договора у "Розничного покупателя" в БП
РеализацияТоваровУслуг для свойства ДоговорКонтрагента выберем созданное правило Договоры_Розничные.Совет: Чтобы исключить ошибки, лучше всего в обработчике ПриПоиске в ПКО договоров добавить проверку на владельца, чтобы система точно нашла договор, принадлежащий именно нашему "Розничному покупателю".
Иногда удобнее оставить файл обмена "как есть" (с оригинальными данными), а подмену совершить уже в момент записи в базу 1С:Бухгалтерия. Для этого используется обработчик ПередЗагрузкой в ПКО документа РеализацияТоваровУслуг.
Проанализируем пример кода для этого обработчика:
// Ищем ссылку на нужного контрагента в БП
НужныйКонтрагент = Справочники.Контрагенты.НайтиПоКоду("000000001");
Если Не НужныйКонтрагент.Пустая() Тогда
Объект.Контрагент = НужныйКонтрагент;
// Ищем основной договор этого контрагента
Объект.ДоговорКонтрагента = Справочники.ДоговорыКонтрагентов.НайтиПоНаименованию("Основной договор", Истина, , НужныйКонтрагент);
КонецЕсли;
Этот метод хорош тем, что если вам потребуется отладить обмен и понять, какой контрагент был в источнике изначально, вы сможете увидеть его данные в файле выгрузки (XML), хотя в саму базу запишется уже подмененное значение.
Чтобы не "зашивать" коды контрагентов прямо в программный код (что считается плохим тоном), используйте Параметры конвертации. В КД 2.1 на закладке "Параметры" создайте параметр КодРозничногоПокупателя. Тогда в коде обработчиков можно будет писать:
Значение = Параметры.КодРозничногоПокупателя;
Это позволит вам менять настройки обмена без редактирования самих правил. Вы сможете просто указать нужный код в интерфейсе обработки обмена данными в самой 1С.
После внесения изменений выполните следующие действия:
V8Exchan82.epf (Универсальный обмен данными).Помните, что при использовании подмены на одного контрагента вы теряете возможность вести аналитику по клиентам в бухгалтерии. Если такая аналитика важна (например, для сверки взаиморасчетов), данный метод использовать не рекомендуется.