Как изменить или добавить поля в XML-документе 1С-ЭДО: пошаговое руководство

Программист 1С v8.3 (Обычные формы) 1C:Бухгалтерия Бухгалтерский учет IT и автоматизация бизнеса
← На главную

В процессе работы с электронным документооборотом (ЭДО) часто возникает задача адаптации выгружаемых XML-файлов под специфические требования контрагентов. Например, когда покупателю требуется передавать несколько оснований сделки (договоры, спецификации, приложения) внутри одной структуры <СодФХЖ1>, в то время как типовая конфигурация по умолчанию формирует только одно основание.

В данной статье мы подробно разберем, как решить эту задачу в рамках конфигурации «1С:Бухгалтерия». Мы проанализируем несколько различных подходов: от классической доработки общего модуля конфигурации до более современных и безопасных альтернатив, таких как расширения конфигурации и использование штатного функционала ручной корректировки XML-данных.

Метод 1. Программное изменение формирования XML-документа в коде 1С

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

За генерацию XML-файла отвечает механизм XDTO (XML Data Transfer Objects). Перед тем как данные преобразуются в XML, программа собирает их в структуру СведенияСделки. Нам нужно перехватить эту структуру, определить контрагента и добавить необходимые поля.

Проанализируем по шагам процесс доработки в конфигураторе:

  1. Откроем конфигуратор и найдем общий модуль ОбщийМодуль.ОбменСКонтрагентамиВнутренний (в зависимости от версии БСП и модуля ЭДО название может немного отличаться, например, ОбменСКонтрагентамиБЭД).
  2. Найдем функцию, отвечающую за формирование сведений продавца. Обычно это СформироватьПередачаТоваровПродавецCML.
  3. Внутри этой функции происходит подготовка структуры данных перед вызовом платформенного метода ЗаполнитьСвойствоXDTO(СведенияПродавца, "СодФХЖ1", СведенияСделки, Истина, Ошибки).
  4. Вставим наш программный код непосредственно перед заполнением свойств XDTO. Нам нужно проверить, что документ оформляется для целевого контрагента, и программно расширить массив оснований в структуре СведенияСделки.

Посмотрим на пример программной реализации такой доработки:


// Определяем получателя документа
КонтрагентПолучатель = СведенияСделки.Покупатель; // Или получаем из шапки документа-источника

// Проверяем, входит ли контрагент в список тех, для кого нужна доработка
Если КонтрагентПолучатель.Код = "00-000123" Тогда 
    
    // Создаем массив для хранения нескольких оснований
    МассивОснований = Новый Массив;
    
    // Первое основание (например, основной договор)
    Основание1 = Новый Структура;
    Основание1.Вставить("НаимОсн", "Договор");
    Основание1.Вставить("НомОсн", "01");
    Основание1.Вставить("ДатаОсн", "01.07.2019");
    МассивОснований.Добавить(Основание1);
    
    // Второе основание (например, спецификация или приложение)
    Основание2 = Новый Структура;
    Основание2.Вставить("НаимОсн", "Приложение");
    Основание2.Вставить("НомОсн", "13");
    Основание2.Вставить("ДатаОсн", "01.09.2019");
    МассивОснований.Добавить(Основание2);
    
    // Перезаписываем свойство в структуре сделки для XDTO
    СведенияСделки.Вставить("Основание", МассивОснований);
    
КонецЕсли;

Благодаря этому коду при формировании XML-файла платформа автоматически преобразует массив структур в несколько дочерних XML-тегов <Основание> внутри родительского блока <СодФХЖ1>.

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

Внесение изменений напрямую в общие модули типовой конфигурации (как описано в Методе 1) имеет существенный недостаток: это усложняет последующие обновления программы. Чтобы сохранить конфигурацию полностью типовой, применим механизм расширений.

Выполним следующие действия по шагам:

  1. Перейдем в меню Конфигурация -> Расширения конфигурации и добавим новое расширение с назначением "Адаптация".
  2. В дереве метаданных основной конфигурации найдем общий модуль ОбменСКонтрагентамиВнутренний, кликнем по нему правой кнопкой мыши и выберем пункт Добавить в расширение.
  3. В расширении откроем модуль и создадим обработчик-перехватчик для процедуры формирования XML с аннотацией &После или &Вместо.

Рассмотрим пример кода для модуля расширения с использованием аннотации &После:


&После("СформироватьПередачаТоваровПродавецCML")
Процедура Расш_СформироватьПередачаТоваровПродавецCML(ПараметрыВыгрузки, СведенияСделки, Результат)
    
    // Проверяем наличие структуры сделки и модифицируем её элементы перед финальной сериализацией
    Если СведенияСделки.Свойство("Основание") Тогда
        
        // Наш алгоритм анализа контрагента и добавления полей
        // См. логику заполнения массива оснований из Метода 1
        
    КонецЕсли;

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

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

Метод 3. Выгрузка, ручное редактирование и обратная загрузка XML

Рассмотрим ситуацию, когда изменения в XML-документ нужно внести оперативно и разово для конкретной сделки, не прибегая к программированию и изменению кода. Модуль 1С-ЭДО предоставляет штатную возможность ручного переопределения файла до момента его подписания электронной подписью.

Разберем данный алгоритм по шагам:

  1. Сформируйте документ реализации в 1С как обычно.
  2. Перейдите в меню ЭДО -> Посмотреть электронный документ.
  3. В открывшейся форме просмотра нажмите кнопку Еще -> Сохранить в файл (или выгрузить документ на диск). Система предложит сохранить архив.
  4. Распакуйте архив и найдите XML-файл (имя файла обычно начинается с префикса ON_NSCH... или ON_SFACT...).
  5. Откройте файл в любом текстовом редакторе (например, Блокнот или Notepad++) и найдите тег <СодФХЖ1>.
  6. Отредактируйте структуру тегов так, как вам необходимо. Добавьте новые блоки или исправьте существующие данные. Сохраните изменения в файле.
  7. Вернитесь в форму предварительного просмотра электронного документа в 1С.
  8. Нажмите меню Еще -> Загрузить с диска и выберите отредактированный XML-файл.
  9. Программа обновит визуальное представление документа на основе вашего файла. Теперь вы можете нажать кнопку Подписать и отправить.

Важное предупреждение: Данный способ подходит только для единичных операций. Если отредактировать файл XML после того, как он был подписан электронной подписью, то подпись станет недействительной, и оператор ЭДО отклонит транзакцию. Корректировка должна выполняться строго ДО подписания! Для проверки корректности структуры измененного файла можно использовать обработку для проверки валидности XML по схеме XSD.

Метод 4. Настройка дополнительных полей через пользовательский интерфейс 1С

Проанализируем современные штатные возможности «1С:Бухгалтерии», которые позволяют решать подобные задачи без кода. Разработчики предусмотрели два удобных механизма:

А. Ссылка "Реквизиты печатных форм и ЭДО"

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

Б. Конструктор дополнительных полей в настройках ЭДО

Если вашему контрагенту требуются специфические данные, которые должны передаваться в блоке информационных полей (<ИнфПолФХЖ1>), вы можете настроить их вывод через интерфейс:

  1. Перейдите в раздел Администрирование -> Обмен электронными документами -> Настройки ЭДО.
  2. Откройте настройки отправки для интересующего вас контрагента.
  3. Выберите нужный тип документа и перейдите по ссылке в колонке "Способ обработки".
  4. В открывшейся форме перейдите к разделу Настройка заполнения дополнительных полей.
  5. Здесь вы можете без программирования указать, какие реквизиты из документа-источника 1С должны попадать в XML-файл электронного документа.

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

← На главную