Как правильно запросить остатки и справки в УТМ 4 ЕГАИС: решение проблемы несоответствия формата

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

Переход на Универсальный Транспортный Модуль (УТМ) версии 4.0 и выше принес немало хлопот разработчикам самописных конфигураций и администраторам систем на базе 1С. Одной из самых распространенных проблем стала ошибка при попытке получить остатки или справки по организации. Система возвращает тикет с отказом, в котором указано: не соответствует заявленному формату: DocType=[QueryRests] (или аналогичный тип документа).

В этой статье мы подробно разберем, почему старые механизмы запросов перестали работать, проанализируем изменения в протоколе обмена и выясним, как правильно формировать и отправлять XML-файлы в актуальных версиях УТМ. Для технического упрощения взаимодействия с транспортным модулем и исключения ошибок ручного формирования файлов применяется обмен 1С и ЕГАИС.

Причина ошибки: строгость адресации в УТМ 4

Рассмотрим ситуацию, с которой сталкиваются многие программисты. При отправке XML-файла, который кажется абсолютно корректным и соответствующим схемам XSD, сервер ЕГАИС присылает отказ. Выясним причину: в предыдущих версиях УТМ (например, в версии 3) транспортный модуль был более лоялен к тому, на какой именно endpoint (адрес входа) отправляется файл. Можно было отправить запрос остатков второй версии на общий адрес, и система его принимала.

В УТМ 4 правила ужесточились. Теперь тип документа, указанный внутри XML-тега (например, QueryRests_v2), должен строго соответствовать адресу URL, на который вы посылаете POST-запрос. Если вы отправляете файл с тегом QueryRests_v2 на адрес /opt/in/QueryRests, УТМ автоматически присваивает документу тип старой версии, видит несоответствие внутренней структуре и выдает ошибку валидации.

Разбираем правильный запрос остатков (Регистр №1)

Проанализируем структуру XML-файла для получения остатков по складу (первый регистр). Для работы в УТМ 4 мы должны использовать вторую версию запроса — QueryRests_v2. Посмотрим на пример корректного файла:


<?xml version="1.0" encoding="UTF-8"?>
<ns:Documents Version="1.0"
 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 xmlns:ns="http://fsrar.ru/WEGAIS/WB_DOC_SINGLE_01"
 xmlns:qp="http://fsrar.ru/WEGAIS/QueryParameters">
    <ns:Owner>
        <ns:FSRAR_ID>020000123456</ns:FSRAR_ID>
    </ns:Owner>
    <ns:Document>
        <ns:QueryRests_v2/>
    </ns:Document>
</ns:Documents>

Важные моменты:

  1. Атрибут Version в корневом теге Documents должен иметь значение "1.0". Это версия обертки документа, а не версия самого протокола ЕГАИС.
  2. Пространство имен для параметров запроса xmlns:qp должно соответствовать актуальным схемам.
  3. Тег запроса должен быть именно QueryRests_v2. Первая версия (QueryRests) в УТМ 4 официально признана устаревшей и во многих случаях отключена.

Корректная отправка файла через Curl или 1С

Теперь перейдем к самому критичному моменту — адресу отправки. Если мы используем утилиту curl или программный метод HTTPЗапрос в 1С, мы должны явно указать версию в URL.

Пример неправильной команды:

curl -F "xml_file=@QueryRests.xml" http://localhost:8080/opt/in/QueryRests

Пример правильной команды для УТМ 4:

curl -F "xml_file=@QueryRests.xml" http://localhost:8080/opt/in/QueryRests_v2

Обратите внимание на суффикс _v2 в конце адреса. Без него УТМ будет пытаться интерпретировать ваш файл как старый формат, что и приводит к ошибке DocType=[QueryRests].

Запрос справок к ТТН (QueryFormF1F2)

Ситуация с запросом справок (Форма 1 и Форма 2, ныне называемые справками А и Б) также изменилась. Рассмотрим, как теперь работает QueryFormF1F2. Вместо раздельных запросов для разных типов справок в УТМ 4 рекомендуется использовать универсальный запрос.

Проанализируем структуру запроса справки:


<ns:Documents xmlns:ns="http://fsrar.ru/WEGAIS/WB_DOC_SINGLE_01" 
 xmlns:qf="http://fsrar.ru/WEGAIS/QueryFormF1F2">
    <ns:Owner>
        <ns:FSRAR_ID>020000123456</ns:FSRAR_ID>
    </ns:Owner>
    <ns:Document>
        <ns:QueryFormF1>
            <qf:FormRegId>FA-000000000000000</qf:FormRegId>
        </ns:QueryFormF1>
    </ns:Document>
</ns:Documents>

Для успешной отправки такого документа в УТМ 4 необходимо использовать endpoint: http://localhost:8080/opt/in/QueryFormF1F2. Попытка отправить этот XML на старые адреса QueryFormA или QueryFormB приведет к ошибке валидации формата.

Дополнительные технические нюансы УТМ 4

Рассмотрим несколько неочевидных факторов, которые могут влиять на получение остатков в 1С:

  1. Ограничение по времени (Таймаут): В ЕГАИС действует жесткое ограничение на частоту запроса остатков. Вы можете запрашивать QueryRests_v2 не чаще одного раза в час для одного FSRAR_ID. Если вы отправите запрос раньше, УТМ примет файл, но в ответ придет тикет с ошибкой "Превышен лимит времени".
  2. Кодировка и BOM: УТМ крайне чувствителен к кодировке XML. Файл должен быть в UTF-8. Однако, если 1С при записи текстового файла добавляет BOM (Byte Order Mark), УТМ может не распознать структуру тегов. При использовании объекта ЗаписьТекста в 1С убедитесь, что вы используете режим без BOM.
  3. Регистр №3: Начиная с УТМ 4, остатки по маркированной продукции на Регистре №2 (торговый зал) практически не используются. Маркированный алкоголь учитывается поштучно на Регистре №1 с привязкой к конкретным маркам (Регистр №3). Для получения марок на остатках используйте специальный тип запроса — QueryRestBCode, который отправляется на адрес /opt/in/QueryRestBCode.

Итоги и рекомендации

Подведем итог нашему исследованию. Для стабильной работы запросов остатков и справок в УТМ 4 необходимо выполнить три условия:

Если вы разрабатываете обмен в 1С "с нуля" через XDTO, убедитесь, что используемые схемы загружены из актуальной документации УТМ 4.2.0, так как пространства имен (Namespace) в заголовке XML критически важны для успешного прохождения транспортного модуля. Для последующей проверки и сопоставления полученных данных с остатками в базе 1С можно использовать отчет для сверки остатков с ЕГАИС.

← На главную