Как отредактировать XML при 1С:ЭДО в УПП и правильно заполнить строку 5а

Программист 1С v8.3 (Обычные формы) Налоговый учет Промышленность, строительство и АПК
← На главную

При работе с электронным документооборотом (1С:ЭДО) в конфигурации "Управление производственным предприятием" (УПП) пользователи часто сталкиваются с требованиями контрагентов по специфическому заполнению отдельных полей. Одной из наиболее проблемных зон является строка 5а ("Документ об отгрузке") в Универсальном передаточном документе (УПД). Особенно остро этот вопрос встает при оформлении документа Акт об оказании производственных услуг, когда стандартные алгоритмы 1С могут не удовлетворять запросам получателя.

В данной статье мы подробно разберем, почему попытки «ручной» правки XML-файлов обречены на провал, где именно в программном коде формируются данные для строки 5а, как добавить пользовательские реквизиты в XML-файл и как грамотно настроить систему, чтобы документ уходил клиенту в нужном виде.

Почему нельзя просто отредактировать XML-файл на диске

Иногда у разработчиков возникает соблазн найти сформированный XML-файл в томах хранения (путь к которым прописан в настройках программы) и поправить его текстовым редактором. Рассмотрим, почему это категорически не рекомендуется:

  1. Нарушение целостности электронной подписи (ЭЦП). Электронная подпись формируется на основании хеш-суммы содержимого файла. Как только вы меняете хотя бы один символ в XML-структуре, хеш-сумма документа изменяется. При попытке отправить такой файл оператор ЭДО или приемная сторона выдаст ошибку, так как подпись станет недействительной.
  2. Автоматическая перезапись. В 1С:ЭДО процесс формирования файла и его подписания зачастую происходит в рамках одной транзакции или тесно связанных процедур. Даже если вы измените файл до отправки, система может просто переформировать его из данных информационной базы, используя механизм регистрации изменений, непосредственно перед наложением подписи, затирая ваши правки.
  3. Сложность контроля. При массовой отправке документов ручное вмешательство в файловую систему исключает возможность автоматизации и ведет к огромному количеству ошибок.

Следовательно, единственный верный путь — это влияние на процесс формирования XML на стороне 1С до того, как будет сформирован окончательный файл для подписания.

Анализ программного кода формирования строки 5а

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

Основная функция, отвечающая за сбор сведений об отгрузке, обычно называется ПолучитьСведенияОДокументеОтгрузки. В зависимости от версии БЭД, встроенной в вашу УПП, её можно найти в модуле ОбщегоНазначенияЭД или ЭлектронныеДокументыПередачаДанных.

Рассмотрим пример кода, который отвечает за заполнение соответствующего узла в дереве данных документа:


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

В случае с услугами программа часто берет номер и дату самого Акта, однако при загрузке документов из других систем требования могут отличаться. Если клиент требует иного (например, ссылку на первичный договор или специфический формат номера), нам необходимо модифицировать возвращаемое значение функции ПолучитьСведенияОДокументеОтгрузки.

Способ 1: Использование внешней обработки формирования ЭД

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

Разберем алгоритм действий:

  1. Создаем новую внешнюю обработку.
  2. В модуле обработки реализуем процедуру, которая перехватывает дерево данных электронного документа.
  3. В процедуре находим узел ДокументОбОтгрузке и подставляем туда нужное значение.
  4. Подключаем эту обработку в справочнике "Настройки ЭДО" (закладка "Формирование электронных документов") для нужного типа документа и контрагента.

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

Способ 2: Модификация кода через расширение (для адаптированных баз)

Если ваша версия платформы и конфигурации позволяет использовать расширения (хотя УПП и на обычных формах, современные релизы частично поддерживают этот механизм), мы можем применить аннотацию &Вместо для функции формирования строки отгрузки.

Посмотрим на пример реализации в расширении:


&Вместо("ПолучитьСведенияОДокументеОтгрузки")
Функция Мой_ПолучитьСведенияОДокументеОтгрузки(СсылкаНаОбъект, ДанныеДокумента, ЭтоУПД)
    
    // Если это наш специфический Акт для конкретного случая
    Если ТипЗнч(СсылкаНаОбъект) = Тип("ДокументСсылка.АктОбОказанииПроизводственныхУслуг") Тогда
        // Формируем строку 5а по особому алгоритму
        Результат = "№ " + СсылкаНаОбъект.Номер + " от " + Формат(СсылкаНаОбъект.Дата, "ДЛФ=D");
        // Можно добавить информацию из дополнительных реквизитов
        Возврат Результат;
    КонецЕсли;
    
    // Для остальных случаев вызываем стандартную логику
    Возврат ПродолжитьВызов(СсылкаНаОбъект, ДанныеДокумента, ЭтоУПД);
    
КонецФункции

Особенности прослеживаемости и их влияние

Иногда претензии к строке 5а или сопутствующим полям возникают из-за того, что в документе присутствуют товары, подлежащие прослеживаемости. Если в Акт об оказании производственных услуг включены материалы, которые система идентифицирует как прослеживаемые, 1С начинает требовать заполнения данных о РНПТ и документах отгрузки, по которым эти ценности поступили к вам.

Проанализируем ситуацию: если ваша услуга не связана с передачей таких товаров, убедитесь, что в карточках номенклатуры, используемых в акте, не установлен признак "Прослеживаемый товар". Если же прослеживаемость действительно присутствует, то строка 5а должна быть заполнена в строгом соответствии с требованиями Постановления №534, и здесь ручная правка кода может привести к нарушению законодательных норм.

Резюме

Для успешного редактирования данных в XML при 1С:ЭДО в УПП мы рекомендуем придерживаться следующей стратегии:

  1. Не пытайтесь править файлы на диске — это бесполезно из-за механизмов ЭЦП.
  2. Используйте отладчик, чтобы найти точку входа в общем модуле ЭлектронныеДокументыПередачаДанных, где заполняется переменная для узла ДокументОбОтгрузке.
  3. Для внесения изменений используйте внешнюю обработку состава электронного документа (это предпочтительно для сохранения поддержки) или механизм расширений.
  4. Всегда проверяйте, какой формат УПД используется (например, по приказу №820), так как структура XML и требования к строке 5а могут отличаться для разных форматов.

Такой системный подход позволит вам удовлетворить требования самых взыскательных контрагентов, сохранив при этом целостность и легитимность электронного документооборота.

← На главную