Переход на Универсальный Транспортный Модуль (УТМ) версии 4.0 и выше принес немало хлопот разработчикам самописных конфигураций и администраторам систем на базе 1С. Одной из самых распространенных проблем стала ошибка при попытке получить остатки или справки по организации. Система возвращает тикет с отказом, в котором указано: не соответствует заявленному формату: DocType=[QueryRests] (или аналогичный тип документа).
В этой статье мы подробно разберем, почему старые механизмы запросов перестали работать, проанализируем изменения в протоколе обмена и выясним, как правильно формировать и отправлять XML-файлы в актуальных версиях УТМ. Для технического упрощения взаимодействия с транспортным модулем и исключения ошибок ручного формирования файлов применяется обмен 1С и ЕГАИС.
Рассмотрим ситуацию, с которой сталкиваются многие программисты. При отправке XML-файла, который кажется абсолютно корректным и соответствующим схемам XSD, сервер ЕГАИС присылает отказ. Выясним причину: в предыдущих версиях УТМ (например, в версии 3) транспортный модуль был более лоялен к тому, на какой именно endpoint (адрес входа) отправляется файл. Можно было отправить запрос остатков второй версии на общий адрес, и система его принимала.
В УТМ 4 правила ужесточились. Теперь тип документа, указанный внутри XML-тега (например, QueryRests_v2), должен строго соответствовать адресу URL, на который вы посылаете POST-запрос. Если вы отправляете файл с тегом QueryRests_v2 на адрес /opt/in/QueryRests, УТМ автоматически присваивает документу тип старой версии, видит несоответствие внутренней структуре и выдает ошибку валидации.
Проанализируем структуру 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>
Важные моменты:
Version в корневом теге Documents должен иметь значение "1.0". Это версия обертки документа, а не версия самого протокола ЕГАИС.xmlns:qp должно соответствовать актуальным схемам.QueryRests_v2. Первая версия (QueryRests) в УТМ 4 официально признана устаревшей и во многих случаях отключена.Теперь перейдем к самому критичному моменту — адресу отправки. Если мы используем утилиту 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].
Ситуация с запросом справок (Форма 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 приведет к ошибке валидации формата.
Рассмотрим несколько неочевидных факторов, которые могут влиять на получение остатков в 1С:
QueryRests_v2 не чаще одного раза в час для одного FSRAR_ID. Если вы отправите запрос раньше, УТМ примет файл, но в ответ придет тикет с ошибкой "Превышен лимит времени".UTF-8. Однако, если 1С при записи текстового файла добавляет BOM (Byte Order Mark), УТМ может не распознать структуру тегов. При использовании объекта ЗаписьТекста в 1С убедитесь, что вы используете режим без BOM.QueryRestBCode, который отправляется на адрес /opt/in/QueryRestBCode.Подведем итог нашему исследованию. Для стабильной работы запросов остатков и справок в УТМ 4 необходимо выполнить три условия:
QueryRests_v2 для остатков и QueryFormF1 (внутри контейнера F1F2) для справок./opt/in/QueryRests_v2).tc:Comments в полученных тикетах, именно там содержится ключ к пониманию ошибок формата.Если вы разрабатываете обмен в 1С "с нуля" через XDTO, убедитесь, что используемые схемы загружены из актуальной документации УТМ 4.2.0, так как пространства имен (Namespace) в заголовке XML критически важны для успешного прохождения транспортного модуля. Для последующей проверки и сопоставления полученных данных с остатками в базе 1С можно использовать отчет для сверки остатков с ЕГАИС.