Как убрать из выгрузки файла ЭДО необязательные поля

Программист 1С v8.3 (Управляемые формы)
← На главную

При работе с электронным документооборотом (ЭДО) в среде 1С часто возникает ситуация, когда в сформированный XML-файл попадают дополнительные служебные поля. Чаще всего это касается идентификаторов номенклатуры (ИдентификаторПост, ИдентификаторПок) и блоков информационных полей (ИнфПолФХЖ1). Если ваш контрагент использует сторонние системы (например, SAP, Oracle или веб-интерфейс «Диадок»), эти технические данные могут некорректно отображаться в их печатных формах или мешать автоматической обработке. В этой статье мы подробно разберем, как локализовать место формирования этих данных и корректно исключить их из выгрузки.

Анализируем структуру XML-файла и причины появления лишних полей

Для начала проанализируем, почему эти поля вообще появляются в выгрузке. Стандарт 1С предполагает максимальную автоматизацию сопоставления данных между отправителем и получателем. Блок ДопСвед или ИнфПолФХЖ используется для передачи уникальных идентификаторов объектов (GUID), чтобы система получателя могла автоматически найти нужный товар в своем справочнике без участия человека. Однако, если контрагент требует «чистый» файл согласно формату ФНС (Приказ №820), нам необходимо вмешаться в процесс формирования XML.

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

Метод 1. Корректировка кода в общем модуле (по следам форума)

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

Разберем по шагам, что нужно сделать:

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

Посмотрим на пример кода, который подлежит корректировке:


// В типовой процедуре находим блок заполнения идентификаторов
// Процедура ПодготовитьСопоставлениеНоменклатурыДляЭлектронногоДокументаПоТаблице
...
Результат.Вставить("ИдентификаторПост", СтрокаТаблицы.Номенклатура.УникальныйИдентификатор());
Результат.Вставить("ИдентификаторПок", СтрокаТаблицы.ИдентификаторДляПокупателя);
...

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

Метод 2. Использование расширений (рекомендуемый способ)

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

Создадим расширение и добавим в него процедуру с аннотацией &После или &Вместо. Рассмотрим пример реализации через &После, чтобы не дублировать основной код системы:


&После("ПодготовитьСопоставлениеНоменклатурыДляЭлектронногоДокументаПоТаблице")
Процедура Расш1_ПодготовитьСопоставлениеНоменклатурыПосле(Параметры, Результат)
    
    // Удаляем ненужные поля из структуры, если они были туда добавлены базовым кодом
    Если Результат.Свойство("ИдентификаторПост") Тогда
        Результат.Удалить("ИдентификаторПост");
    КонецЕсли;
    
    Если Результат.Свойство("ИдентификаторПок") Тогда
        Результат.Удалить("ИдентификаторПок");
    КонецЕсли;
    
КонецПроцедуры

Этот подход гарантирует, что даже при обновлении конфигурации 1С ваша логика очистки полей сохранится, а основная конфигурация останется на поддержке.

Метод 3. Использование события «При определении состава дополнительных полей»

В современных версиях 1С (БЭД 1.9 и выше) предусмотрены специальные точки расширения для модификации состава передаваемых данных. Проанализируем событие ПриОпределенииСоставаДополнительныхПолейЭлектронногоДокумента. Это специализированный метод, созданный именно для того, чтобы разработчики могли управлять блоком ДопСвед (Информационные поля) без вмешательства в ядро системы.

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

Метод 4. Настройка в модуле «Диадок»

Если вы используете не встроенный сервис «1С-ЭДО», а модуль для Diadoc, ситуация упрощается. Выясним, где искать настройки в этом случае.

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

Риски и последствия удаления идентификаторов

Важно осознавать, к чему приведет удаление полей ИдентификаторПост и ИдентификаторПок. Рассмотрим основные последствия:

Резюме: Мы проанализировали несколько способов решения задачи. Если вам требуется быстрое решение «здесь и сейчас», можно воспользоваться советом из форума и поправить общий модуль ИнтеграцияЭдо. Однако для долгосрочной и стабильной работы мы рекомендуем использовать механизм расширений, штатные точки входа БЭД для модификации состава полей.

← На главную