Как получить историю движений алкогольной марки из УТМ ЕГАИС?

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

В процессе работы с алкогольной продукцией часто возникает необходимость отследить «судьбу» конкретной бутылки: когда она была получена, по каким накладным перемещалась и числится ли она на остатках организации. Несмотря на то что в интерфейсе многих учетных систем кажется, что запрос идет напрямую по марке, технически взаимодействие с УТМ (Универсальным транспортным модулем) устроено сложнее. В этой статье мы подробно разберем алгоритм получения данных о марке, проанализируем структуру необходимых XML-файлов и выясним, как связать 150-символьный код марки с историей движений.

Принцип работы ЕГАИС: почему нельзя запросить историю напрямую по марке

Важно понимать архитектуру системы ЕГАИС. История движений в системе фиксируется не за конкретным кодом марки (DataMatrix), а за партией продукции, которая идентифицируется Справкой 2 (в текущей терминологии — Inform2RegId или номер формы Б). Марка является лишь аналитическим признаком, привязанным к этой справке.

Рассмотрим стандартную цепочку действий, которую нам необходимо реализовать в 1С для получения полной информации:

  1. Преобразование кода марки в идентификатор партии (получение Inform2RegId).
  2. Запрос истории движений по найденному идентификатору партии.
  3. Обработка полученного ответа от ЕГАИС.

Шаг 1: Получение информации о марке через QueryBarcodeInfo

Первым делом нам нужно выяснить, к какой Справке 2 привязана наша марка. Для этого в УТМ существует специализированный запрос QueryBarcodeInfo. Мы отправляем считанный сканером код (длиной 150 или 68 символов), а система возвращает нам данные о типе марки и, самое главное, идентификаторы документов.

Проанализируем структуру XML-запроса для получения данных о штрихкоде:


<?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>030000123456</ns:FSRAR_ID>
 </ns:Owner>
 <ns:Document>
  <ns:QueryBarcodeInfo>
   <qp:Parameters>
    <qp:Parameter>
     <qp:Name>BARCODE</qp:Name>
     <qp:Value>ВАШ_КОД_МАРКИ_150_СИМВОЛОВ</qp:Value>
    </qp:Parameter>
   </qp:Parameters>
  </ns:QueryBarcodeInfo>
 </ns:Document>
</ns:Documents>

После отправки этого файла в УТМ (через POST-запрос на адрес /opt/in/QueryBarcodeInfo), через некоторое время во входящей очереди (/opt/out) появится ответ. Из этого ответа нам необходимо извлечь значение узла Inform2RegId. Это и есть ключ к истории движений.

Шаг 2: Запрос истории по Справке 2 (QueryFormBHistory)

Теперь, когда у нас есть номер Справки 2, мы можем запросить историю всех операций, которые проводились с данной партией продукции. Разберем структуру XML-файла QueryFormBHistory, которую необходимо сформировать:


<?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>030000123456</ns:FSRAR_ID>
    </ns:Owner>
    <ns:Document>
        <ns:QueryFormBHistory>
            <qp:Parameters>
                <qp:Parameter>
                    <qp:Name>RFB</qp:Name>
                    <qp:Value>FB-000000012345678</qp:Value>
                </qp:Parameter>
            </qp:Parameters>
        </ns:QueryFormBHistory>
    </ns:Document>
</ns:Documents>

В данном запросе:

Важный нюанс: История по Справке 2 возвращается только в том случае, если ваша организация когда-либо владела этой продукцией (принимала на баланс, перемещала или продавала). Если вы отправите запрос с «чужого» УТМ по продукции, которая никогда не проходила через ваш FSRAR_ID, система может вернуть пустой ответ или ошибку доступа.

Шаг 3: Проверка остатков марок (Регистр №3)

Для современной продукции (с новыми марками DataMatrix), которая учитывается поштучно, полезно использовать запрос остатков по Регистру №3. Это позволяет убедиться, числится ли конкретная марка за вами в данный момент. Для этого используется запрос QueryRestBCode.

Рассмотрим, как проанализировать ситуацию, если история не приходит:

  1. Если марка «старая» (150 символов), она может числиться на Регистре №1 или №2 без поштучной привязки. В этом случае история по Справке 2 покажет общие движения партии.
  2. Если марка «новая», она обязательно должна быть привязана к Справке 2 на Регистре №3. Если запрос QueryRestBCode не возвращает вашу марку, значит, она была списана или не была принята корректно.

Альтернативные способы получения данных

Если программная реализация через API кажется избыточной для разовой проверки, рассмотрим альтернативные варианты, которые предоставляет регулятор:

1. Личный кабинет ФСРАР (service.egais.ru)
В разделе «Проверка марок» можно выполнить поиск по коду. Преимущество этого метода в том, что авторизация происходит по ключу RSA, и система не требует ввода капчи для каждой проверки. Здесь можно увидеть полную цепочку — от производителя до текущего статуса в системе.

2. Мобильное приложение «АнтиКонтрафакт Алко»
Официальное приложение позволяет оперативно получить информацию о легальности продукции, дате розлива и производителе. Это удобный инструмент для сотрудников склада или торгового зала, не требующий написания кода.

Резюме для разработчика 1С

Для автоматизации процесса получения истории в 1С, рекомендуем реализовать следующий алгоритм в коде:

  1. Функция формирования и отправки QueryBarcodeInfo.
  2. Фоновое задание, которое ожидает ответ от УТМ и парсит Inform2RegId.
  3. Функция отправки QueryFormBHistory на основе полученного ID.
  4. Вывод итоговой таблицы движений пользователю.

Использование связки этих двух запросов является единственным легитимным способом получения истории движений через программный интерфейс УТМ ЕГАИС.

← На главную