Как проверить выгрузку УПД в XML на соответствие формату и исправить ошибки оператора ЭДО?

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

При самостоятельной разработке выгрузки универсального передаточного документа (УПД) по формату приказа ФНС России от 24.03.2016 № ММВ-7-15/155@ разработчики нередко сталкиваются с ситуацией, когда оператор электронного документооборота возвращает ошибки или документ не проходит автоматический входной контроль. Выясним причину такого поведения транспортных систем, разберем типовые ошибки в структуре файла и рассмотрим способы автоматической проверки XML-документа средствами платформы 1С.

Анализ ошибки маршрутизации оператора ЭДО

В тексте ответа от транспортной системы оператора часто можно встретить внутренние сообщения базы данных, например: from m in class lv.fis.edi.comp.edi.OrgRelationsModel WHERE m.orgIdSend = ? and m.orgIdRec = ? and m.type=?. Проанализируем, почему возникает данный сбой.

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


<СвУчДокОбор ИдОтпр="" ИдПол="2IJA">
    <СвОЭДОтпр НаимОрг="Эдисофт, ООО" ИдЭДО="2IJ" ИННЮЛ="7801471082"/>
</СвУчДокОбор>

В атрибуте ИдОтпр передана пустая строка. Из-за отсутствия идентификатора отправителя система оператора не может подставить параметры в запрос маршрутизации, что приводит к критической ошибке обработки еще до того, как начнется проверка содержимого по схеме XSD. Для устранения проблемы необходимо передавать корректные уникальные идентификаторы участников ЭДО, присвоенные оператором (например, вида 2BM-7701234567-770101001-2016010100000000000):


<СвУчДокОбор ИдОтпр="2IJ-7801111111-780101001-1111111111111111" ИдПол="2IJAD6-...">

Синтаксические ошибки и формирование имени файла

Разберем структуру имени файла и корректность XML-разметки. Согласно требованиям формата, атрибут ИдФайл формируется по жестко заданному шаблону, включающему идентификаторы отправителя и получателя. Если между разделителями идентификатор опущен (например, ON_SCHFDOPPR_2IJ__...), файл считается некорректным.

Кроме того, в XML-документе недопустимы синтаксические ошибки формирования атрибутов. Обратим внимание на тег адреса покупателя:


<АдрРФ Индекс="111111" КодРегион="111" Район="" Город="" НаселПункт="" Улица=1111" Дом="111111" />

Здесь пропущена открывающая кавычка перед значением атрибута Улица=1111". В результате файл перестает быть синтаксически правильным (not well-formed XML). Любой стандартный парсер прервет разбор на этой строке, не доходя до сопоставления с XSD-схемой.

Типовые несоответствия XSD-схеме формата 155@

Рассмотрим подробнее элементы, которые нарушают ограничения схемы приказа 155@:

  1. Пустые строки в обязательных атрибутах. Схема строго задает ограничения на минимальную длину текстовых значений (тип xs:string с ограничением minLength="1"). В блоке сведений о лице, передавшем товар, нельзя оставлять атрибуты пустыми:
    
    <РабОргПрод Должность="Менеджер продаж">
        <ФИО Фамилия="" Имя="" Отчество=""/>
    </РабОргПрод>
    
    Атрибуты Фамилия и Имя являются строго обязательными. Если данные отсутствуют, документ не пройдет валидацию.
  2. Пустые узлы контактов. Тег <Контакт/> без заполненных атрибутов (телефон, адрес электронной почты) недопустим по схеме. Если контактная информация контрагента отсутствует в информационной базе, данный узел необходимо полностью исключать из XML, а не создавать пустым.
  3. Неполная структура блока подписанта. В узле <Подписант> указания одних лишь атрибутов ОблПолн, Статус и ОснПолн недостаточно. По формату данный элемент обязан содержать дочерний узел с идентификацией лица (например, <ФЛ>, <ИП> или <ЮЛ> с вложенными ФИО и должностью).
  4. Формат налоговой ставки. В реквизите НалСт значение должно передаваться строго из списка фиксированных перечислений (например, 18% или без НДС), а не числовой дробью 18.00.

Валидация файла по XSD-схеме встроенными средствами 1С

Для того чтобы оперативно находить ошибки структуры без загрузки файла к оператору, используем встроенные возможности платформы 1С:Предприятие по работе с XDTO. Механизм позволяет программно сопоставить сформированный XML с официальной схемой XSD и получить подробный список несовпадений.

Разберем по шагам пример процедуры проверки:


&НаСервере
Процедура ПроверитьXMLПоСхеме(ПутьКФайлуXML, ПутьКСхемеXSD)
    
    // Создаем фабрику XDTO на основании файла схемы
    Попытка
        Фабрика = СоздатьФабрикуXDTO(ПутьКСхемеXSD);
    Исключение
        ВызватьИсключение "Ошибка инициализации XSD-схемы: " + ОписаниеОшибки();
    КонецПопытки;
    
    // Инициализируем чтение файла выгрузки
    Чтение = Новый ЧтениеXML;
    Чтение.ОткрытьФайл(ПутьКФайлуXML);
    
    // Выполняем десериализацию и проверку структуры
    Попытка
        Фабрика.ПрочитатьXML(Чтение);
        Сообщить("Файл успешно прошел проверку по схеме XSD!");
    Исключение
        // В случае несоответствия метод выбросит исключение с указанием узла и типа ошибки
        Сообщить("Обнаружены ошибки формата:");
        Сообщить(ОписаниеОшибки());
    КонецПопытки;
    
    Чтение.Закрыть();
    
КонецПроцедуры

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

Практические рекомендации по формированию выгрузки

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

  1. Не создавайте пустые теги. Если необязательный реквизит не заполнен в базе 1С, соответствующий узел XML не должен записываться в поток. Запись пустого тега в большинстве случаев трактуется схемой как нарушение структуры.
  2. Форматируйте даты и числа строго по регламенту. Все даты в формате 155@ должны иметь строгий вид ДД.ММ.ГГГГ, а время — ЧЧ:ММ:СС.
  3. Используйте типовые модули БЭД. Если в конфигурацию интегрирована Библиотека электронных документов, предпочтительно использовать существующие типовые процедуры генерации структуры документа, где корректность ветвления, обработка пустых полей и правила сопоставления ставок НДС уже реализованы разработчиками платформы.
← На главную