Как настроить работу 1С:Розница с УТМ 4.2.0 и форматом документов v4?

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

Переход на УТМ версии 4.2.0 и новый формат документооборота v4 стал серьезным испытанием для пользователей и разработчиков систем на базе 1С. Основная сложность заключалась не только в изменении схем XML-документов, но и в глубоких технических преобразованиях самого транспортного модуля, который перешел на обновленные методы API и более строгие требования к формированию HTTP-пакетов. В данной статье мы подробно разберем, как адаптировать типовые конфигурации (на примере 1С:Розница) к новым реалиям, исправим ошибки подключения и научимся корректно работать с признаком перехода права собственности.

Анализ проблемы: почему типовая 1С перестает видеть УТМ 4.2.0

Разберем ситуацию: после обновления транспортного модуля до версии 4.2.0 связь между 1С и ЕГАИС часто обрывается. При попытке проверить настройки обмена система выдает ошибку или сообщает об отсутствии сертификатов. Выясним причину: в четвертой версии УТМ разработчики ФСРАР изменили пути к ресурсам для скачивания RSA-сертификатов и получения идентификаторов организации (FSRARID). Кроме того, модуль стал чувствителен к разделителям строк в теле POST-запросов и наличию определенных заголовков в Multipart-сообщениях.

Исправление ошибки подключения: работа с HTTP-запросами

Проанализируем программный код, отвечающий за взаимодействие с УТМ. Первым делом необходимо внести правки в механизм формирования тела запроса. УТМ 4 требует использования строгого разделителя строк CR+LF. Рассмотрим, как это реализовать в общем модуле ИнтеграцияЕГАИСКлиентСервер (или аналогичном в вашей конфигурации).

Найдем функцию ПараметрыHTTPЗапроса и внесем следующие изменения:


// В теле функции формирования запроса принудительно устанавливаем разделитель строк
ТелоЗапроса = Новый ТекстовыйДокумент();
ТелоЗапроса.РазделительСтрок = Символы.CR + Символы.LF; 

// Добавляем обязательный параметр имени файла в заголовок формы
ТелоЗапроса.ДобавитьСтроку("Content-Disposition: form-data; name=""xml_file""; filename=""Query.xml""");

Важный момент: если оставить старый вариант формирования заголовка без filename, УТМ может вернуть ошибку Missing initial multi part boundary, так как парсер Java на стороне транспортного модуля не сможет корректно обработать входящий поток данных.

Изменение путей API для получения FSRARID

Посмотрим на метод получения кода ФСРАР. В старых версиях использовался путь /info/certificate/RSA. В УТМ 4.2.0 этот путь изменился. Чтобы обеспечить совместимость с обеими версиями транспортного модуля, применим условие. Разберем пример кода в функции КодФСРАР:


СтрокаЗапросаV3 = "/info/certificate/RSA?attachment=true";
СтрокаЗапросаV4 = "/api/certificate/download/RSA?attachment=true";

ВерсияУТМ = ПолучитьВерсиюУТМ(НастройкаОбменаЕГАИС); // Получаем версию через /info/version

Если ВерсияУТМ = "3.0.8" Тогда
    СтрокаЗапроса = СтрокаЗапросаV3;
Иначе 
    СтрокаЗапроса = СтрокаЗапросаV4;
КонецЕсли;

// Формируем запрос с новым путем
Результат = ОтправитьHTTPЗапрос(НастройкаОбменаЕГАИС, СтруктураДанныхHTTPЗапроса("GET", СтрокаЗапроса));

Однако более надежным и современным способом получения информации об организации является использование сервиса /diagnosis. Рассмотрим универсальную функцию, которая парсит XML-ответ от этого сервиса и извлекает CN (Common Name), являющийся вашим FSRARID:


Функция КодФСРАР_Универсальный(НастройкаОбменаЕГАИС) Экспорт
    РезультатЗапроса = ОтправитьHTTPЗапрос(НастройкаОбменаЕГАИС, СтруктураДанныхHTTPЗапроса("GET", "/diagnosis"));
    
    Если ЗначениеЗаполнено(РезультатЗапроса.ТекстОтвета) Тогда
        ЧтениеXML = Новый ЧтениеXML;
        ЧтениеXML.УстановитьСтроку(РезультатЗапроса.ТекстОтвета);
        
        ПостроительDOM = Новый ПостроительDOM;
        ДокументDOM = ПостроительDOM.Прочитать(ЧтениеXML);
        
        УзлыCN = ДокументDOM.ПолучитьЭлементыПоИмени("CN");
        Если УзлыCN.Количество() > 0 Тогда
            Возврат УзлыCN[0].ТекстовоеСодержимое;
        КонецЕсли;
    КонецЕсли;
    
    Возврат "";
КонецФункции

Решение ошибки разбора XML [87,8] после обновления

Многие пользователи столкнулись с ошибкой Ошибка разбора XML: - [87,8] сразу после обновления «1С:Розница» на релизы ветки 2.3.8. Эта ошибка обычно возникает из-за того, что УТМ возвращает ответ в формате HTML с описанием внутренней ошибки сервера (500 Server Error) вместо ожидаемого XML. Система пытается прочитать <html> как <xml> и падает.

Чтобы выяснить истинную причину ошибки, проанализируем содержимое папки logs в каталоге установки УТМ (файл transport_info.log). В 90% случаев это связано с тем, что 1С в новых релизах изменила структуру формирования HTTP-запроса, и старые версии УТМ (3.0.8) перестали понимать новые заголовки. Решение: обновите УТМ до актуальной версии 4.2.0 или используйте расширение для отката логики формирования HTTP-пакетов к состоянию предыдущего релиза 1С.

Переход на формат документооборота v4 (Версия 4)

С 1 июня 2021 года (после завершения переходного периода) использование формата v4 стало обязательным для корректного отражения признака перехода права собственности. Этот реквизит крайне важен для прослеживаемости продукции.

Разберем по шагам, как включить поддержку v4 в 1С:

  1. Убедимся, что установлена актуальная версия 1С:Розница (не ниже 2.3.8.27).
  2. Перейдем в раздел НСИ — ЕГАИС — Настройки обмена с ЕГАИС.
  3. Откроем карточку настроек для конкретной организации.
  4. В поле Формат обмена выберем значение V4 (УТМ 4.0.2 и выше).
  5. Нажмем на кнопку (зеленую стрелку) рядом с полем выбора для отправки уведомления в ЕГАИС о готовности принимать документы в новом формате.

Важно: после отправки этого уведомления ЕГАИС начнет присылать входящие ТТН в формате WayBill_v4. Если ваша программа не готова к их обработке, вы не сможете принять товар. Поэтому перед включением v4 обязательно убедитесь, что конфигурация обновлена и успешно проходит тест связи с УТМ.

Особенности для пользователей устаревших версий (Розница 2.2)

Проанализируем ситуацию для тех, кто до сих пор использует редакцию 2.2. В данной редакции выбор формата v4 может отсутствовать в интерфейсе. Поскольку поддержка редакции 2.2 прекращена, правильным решением будет переход на редакцию 2.3. Это потребует обновления платформы до версии 8.3.18 и выше. После перехода на 2.3 возможность выбора формата v4 появится автоматически.

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

Резюме и практические советы

Подводя итог, отметим, что для стабильной работы необходимо соблюдение трех условий:

Помните, что УТМ 4.2.0 работает на собственной встроенной Java, поэтому конфликты с системными переменными JAVA_HOME теперь встречаются реже, но работоспособность модуля все так же сильно зависит от корректности RSA-ключа на носителе (Рутокен/Джакарта). Регулярно проверяйте вкладку Администрирование в локальном интерфейсе УТМ (localhost:8080) для контроля срока действия сертификатов.

← На главную