Как подменить артикул товара при отправке электронного УПД через ЭДО в 1С:Управление торговлей 11.4?

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

В процессе работы с крупными торговыми сетями или специфическими заказчиками часто возникает ситуация, когда клиент требует, чтобы в электронных документах (УПД), поступающих к нему по ЭДО, фигурировал не ваш внутренний артикул, а его собственный код товара. При этом менять артикул в вашей информационной базе (справочнике Номенклатура) нельзя, так как он завязан на складской учет или другие бизнес-процессы. Рассмотрим подробно, как реализовать подмену данных «на лету» при формировании исходящего документа в 1С:Управление торговлей 11.4.

Способ 1. Использование типового механизма «Номенклатура контрагентов»

Прежде чем приступать к программированию, разберем методологически верный способ, заложенный разработчиками 1С. В конфигурации 1С:УТ 11.4 существует специальный механизм для хранения соответствий между вашими товарами и товарами клиента. Это позволяет не «хардкодить» условия для каждого покупателя, а управлять данными через пользовательский интерфейс.

Алгоритм настройки:

  1. Перейдем в раздел НСИ и администрирование — Настройка НСИ и разделов — Номенклатура и убедимся, что включена опция Номенклатура контрагентов.
  2. В карточке партнера (клиента) на вкладке Номенклатура контрагента создадим записи для необходимых товаров. Здесь можно указать наименование и артикул так, как их видит клиент.
  3. Проанализируем работу системы: при формировании электронного документа типовые механизмы БЭД (Библиотеки электронного документооборота) в первую очередь ищут сопоставление в этом регистре.

Если по каким-то причинам стандартный механизм не подставляет артикул в нужный тег XML (например, клиент требует его в специфическом поле ДопСведТов), перейдем к программным методам коррекции.

Способ 2. Программная подмена в модуле «ЭлектронноеВзаимодействиеУТ»

Как показывает практика и опыт участников форума, одной из наиболее эффективных точек входа для модификации данных УПД является общий модуль, отвечающий за заполнение данных первичных документов. Рассмотрим подробнее процедуру ЗаполнитьДанныеПервичногоДокументаУПД_2019.

В этом модуле происходит сбор данных из табличной части документа и их подготовка для формирования структуры XDTO. Чтобы подменить артикул, нам необходимо вмешаться в процесс формирования запроса или обработки его результатов. Выясним причину, по которой стандартный код берет именно ваш артикул: обычно это происходит в запросе к справочнику Номенклатура.

Пример реализации через расширение:

Для сохранения возможности обновления конфигурации крайне рекомендуем использовать механизм расширений. Мы можем перехватить данные в модуле менеджера или в процедурах заполнения коллекции текстов для визуализации.


&После("ЗаполнитьДанныеПервичногоДокументаУПД_2019")
Процедура ИТ_ЗаполнитьДанныеПервичногоДокументаУПД_2019(ДанныеДокумента, ПараметрыЗаполнения)
    
    // Перебираем строки табличной части в структуре данных документа
    Для Каждого СтрокаТЧ Из ДанныеДокумента.ТабличнаяЧасть Цикл
        
        // Получаем артикул контрагента из регистра "НоменклатураКонтрагентов"
        АртикулПокупателя = ПолучитьАртикулПокупателя(СтрокаТЧ.Номенклатура, ДанныеДокумента.Партнер);
        
        Если ЗначениеЗаполнено(АртикулПокупателя) Тогда
            // Подменяем значение артикула для выгрузки в ЭДО
            СтрокаТЧ.Артикул = АртикулПокупателя;
        КонецЕсли;
        
    КонецЦикла;

КонецПроцедуры

Способ 3. Модификация данных через события БСП (ИнтеграцияЭДО)

В современных версиях УТ 11, использующих актуальную версию БЭД, существует более гибкий способ — использование обработчиков событий. Проанализируем ситуацию: нам нужно изменить данные непосредственно перед тем, как они превратятся в XML-файл. Для этого отлично подходит общий модуль ИнтеграцияЭДО и процедура ПриФормированииДанныхЭлектронногоДокумента.

Этот метод позволяет работать напрямую с XDTO-пакетом документа. Разберем по шагам, как это работает:

  1. Система формирует стандартный объект данных на основе метаданных и настроек ЭДО.
  2. Вызывается событие, в которое передается структура данных.
  3. Мы находим в структуре таблицу товаров и заменяем значения артикулов.

Рассмотрим пример кода в расширении:


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

Способ 4. Использование дополнительных реквизитов

Если справочник Номенклатура контрагентов кажется избыточным (например, такой клиент всего один), можно пойти по упрощенному пути. Создадим Дополнительный реквизит для справочника Номенклатура с названием «Артикул для Клиента Х».

В коде формирования УПД (в модуле менеджера или общем модуле ЭлектронноеВзаимодействиеУТ) добавим проверку: если получателем документа является «Клиент Х», то в поле Артикул запроса подставляем значение этого доп. реквизита. Это позволяет избежать создания сложных связей в регистрах, но требует аккуратности при поддержке кода.

Важные нюансы и риски

При реализации подобных «извращений» (как выразился автор темы), обязательно нужно учитывать последствия для дальнейшего документооборота:

1. Корректировки и возвраты:

Если вы отправили клиенту документ с подмененным артикулом, то при оформлении возврата клиент, скорее всего, пришлет вам документ с этим же «своим» кодом. Ваша система должна уметь распознать его и сопоставить с вашей реальной номенклатурой. Использование справочника Номенклатура контрагентов решает эту проблему автоматически, так как 1С умеет делать «обратный поиск». Если же вы просто подменили текст в запросе, входящий документ возврата придется сопоставлять вручную.

2. Визуализация документа:

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

3. Формат УПД (Приказ 820):

Согласно формату ФНС, артикул может передаваться в разных тегах. Чаще всего это атрибут КодТов или дополнительные сведения ИнфПолФХЖ1. Перед внесением изменений согласуйте с техническим отделом клиента, в каком именно теге они ожидают увидеть свой внутренний код.

Подводя итог, можно сказать, что наиболее стабильным и правильным решением является использование штатного механизма Номенклатура контрагентов в сочетании с небольшим расширением, которое гарантирует попадание данных из этого регистра в нужные теги XML-файла УПД.

← На главную