Как в 1С:Розница получить статус акцизной марки из документа "Отчет ЕГАИС" запросом?

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

В процессе работы с алкогольной продукцией в 1С:Розница часто возникает задача проверить статус акцизных марок через ЕГАИС. Для этого используется документ Отчет ЕГАИС с видом операции "Запрос акцизных марок". После отправки запроса и получения ответа, в форме документа отображаются марки и их статусы. Однако при попытке получить эти данные с помощью простого запроса к табличной части документа, программисты сталкиваются с проблемой: в табличной части АкцизныеМарки нет поля "Статус".

Рассмотрим, почему так происходит и как правильно построить запрос, чтобы добраться до нужной информации.

Почему прямой запрос к документу не работает?

Основная причина заключается в архитектуре хранения данных в 1С. Документ Отчет ЕГАИС выступает в роли инициатора запроса и контейнера для ответа от сервера ЕГАИС. Когда система получает ответ, она не просто показывает его на экране, а обрабатывает и записывает актуальные статусы марок в специализированное хранилище — регистр сведений АкцизныеМаркиЕГАИС.

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

Вот пример некорректного запроса, который не вернет статус, так как в таблице ОтчетЕГАИС.АкцизныеМарки такого реквизита просто нет:


ВЫБРАТЬ
    ОтчетЕГАИСАкцизныеМарки.КодАкцизнойМарки КАК КодАкцизнойМарки,
    ОтчетЕГАИСАкцизныеМарки.Ссылка.Справка2 КАК Справка2,
    ОтчетЕГАИСАкцизныеМарки.Ссылка.АлкогольнаяПродукция КАК АлкогольнаяПродукция
ИЗ
    Документ.ОтчетЕГАИС.АкцизныеМарки КАК ОтчетЕГАИСАкцизныеМарки

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

Разбираем правильную структуру запроса

Ключ к решению — найти связующее звено между маркой в документе и её записью в регистре статусов. Эта связь реализована через справочник ШтрихкодыУпаковокТоваров.

Проанализируем по шагам, как построить правильный запрос:

  1. Исходная точка: Табличная часть документа Документ.ОтчетЕГАИС.АкцизныеМарки. Отсюда мы берем сам код акцизной марки.
  2. Связующее звено: Соединяем нашу таблицу со справочником ШтрихкодыУпаковокТоваров. Код акцизной марки (КодАкцизнойМарки) из документа соответствует значению штрихкода (ЗначениеШтрихкода) в этом справочнике. Это позволит нам получить ссылку на элемент справочника, который представляет нашу марку.
  3. Конечная цель: Соединяем результат со срезом последних регистра сведений АкцизныеМаркиЕГАИС. Связь происходит по полю ШтрихкодУпаковки, которое хранит ссылку на тот самый элемент справочника ШтрихкодыУпаковокТоваров. Из этого регистра мы наконец-то можем получить реквизит Статус.

Давайте посмотрим, как это выглядит в коде запроса. Мы будем использовать ЛЕВОЕ СОЕДИНЕНИЕ, чтобы в результат попали все марки из документа, даже если по какой-то причине для них не нашлось записи в регистре.


ВЫБРАТЬ
    ОтчетЕГАИСАкцизныеМарки.КодАкцизнойМарки,
    ОтчетЕГАИСАкцизныеМарки.Ссылка.АлкогольнаяПродукция,
    ЕСТЬNULL(АкцизныеМаркиЕГАИС.Статус, "Статус не определен") КАК СтатусМарки
ИЗ
    Документ.ОтчетЕГАИС.АкцизныеМарки КАК ОтчетЕГАИСАкцизныеМарки
        ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ШтрихкодыУпаковокТоваров КАК ШтрихкодыУпаковокТоваров
        ПО ОтчетЕГАИСАкцизныеМарки.КодАкцизнойМарки = ШтрихкодыУпаковокТоваров.ЗначениеШтрихкода
        ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.АкцизныеМаркиЕГАИС.СрезПоследних КАК АкцизныеМаркиЕГАИС
        ПО ШтрихкодыУпаковокТоваров.Ссылка = АкцизныеМаркиЕГАИС.ШтрихкодУпаковки
ГДЕ
    ОтчетЕГАИСАкцизныеМарки.Ссылка = &СсылкаНаДокумент

Что делает этот запрос:

Статус в базе данных (ИБ) и актуальный статус в ЕГАИС

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

Если с момента получения ответа прошло время, реальный статус марки в системе ЕГАИС мог измениться (например, марку продали в другом магазине сети). Чтобы получить самый актуальный, "живой" статус марки непосредственно из ЕГАИС, необходимо сформировать и отправить новый документ Отчет ЕГАИС.

Наш запрос позволяет работать с уже полученными и сохраненными данными, что идеально подходит для анализа и отчетов на основе ранее выполненных проверок.

Какие бывают статусы?

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

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

← На главную