В процессе работы с алкогольной продукцией в 1С:Розница часто возникает задача проверить статус акцизных марок через ЕГАИС. Для этого используется документ Отчет ЕГАИС с видом операции "Запрос акцизных марок". После отправки запроса и получения ответа, в форме документа отображаются марки и их статусы. Однако при попытке получить эти данные с помощью простого запроса к табличной части документа, программисты сталкиваются с проблемой: в табличной части АкцизныеМарки нет поля "Статус".
Рассмотрим, почему так происходит и как правильно построить запрос, чтобы добраться до нужной информации.
Основная причина заключается в архитектуре хранения данных в 1С. Документ Отчет ЕГАИС выступает в роли инициатора запроса и контейнера для ответа от сервера ЕГАИС. Когда система получает ответ, она не просто показывает его на экране, а обрабатывает и записывает актуальные статусы марок в специализированное хранилище — регистр сведений АкцизныеМаркиЕГАИС.
Таким образом, табличная часть самого документа содержит лишь список марок, которые были в запросе, но не их результирующие статусы. То, что мы видим в форме документа — это динамически собранный отчет, который может подтягивать данные из нескольких источников, включая тот самый регистр сведений. Поэтому попытка получить статус напрямую из документа обречена на неудачу.
Вот пример некорректного запроса, который не вернет статус, так как в таблице ОтчетЕГАИС.АкцизныеМарки такого реквизита просто нет:
ВЫБРАТЬ
ОтчетЕГАИСАкцизныеМарки.КодАкцизнойМарки КАК КодАкцизнойМарки,
ОтчетЕГАИСАкцизныеМарки.Ссылка.Справка2 КАК Справка2,
ОтчетЕГАИСАкцизныеМарки.Ссылка.АлкогольнаяПродукция КАК АлкогольнаяПродукция
ИЗ
Документ.ОтчетЕГАИС.АкцизныеМарки КАК ОтчетЕГАИСАкцизныеМарки
Чтобы получить нужные данные, нам необходимо связать информацию из документа с данными в регистре.
Ключ к решению — найти связующее звено между маркой в документе и её записью в регистре статусов. Эта связь реализована через справочник ШтрихкодыУпаковокТоваров.
Проанализируем по шагам, как построить правильный запрос:
Документ.ОтчетЕГАИС.АкцизныеМарки. Отсюда мы берем сам код акцизной марки.ШтрихкодыУпаковокТоваров. Код акцизной марки (КодАкцизнойМарки) из документа соответствует значению штрихкода (ЗначениеШтрихкода) в этом справочнике. Это позволит нам получить ссылку на элемент справочника, который представляет нашу марку.АкцизныеМаркиЕГАИС. Связь происходит по полю ШтрихкодУпаковки, которое хранит ссылку на тот самый элемент справочника ШтрихкодыУпаковокТоваров. Из этого регистра мы наконец-то можем получить реквизит Статус.Давайте посмотрим, как это выглядит в коде запроса. Мы будем использовать ЛЕВОЕ СОЕДИНЕНИЕ, чтобы в результат попали все марки из документа, даже если по какой-то причине для них не нашлось записи в регистре.
ВЫБРАТЬ
ОтчетЕГАИСАкцизныеМарки.КодАкцизнойМарки,
ОтчетЕГАИСАкцизныеМарки.Ссылка.АлкогольнаяПродукция,
ЕСТЬNULL(АкцизныеМаркиЕГАИС.Статус, "Статус не определен") КАК СтатусМарки
ИЗ
Документ.ОтчетЕГАИС.АкцизныеМарки КАК ОтчетЕГАИСАкцизныеМарки
ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ШтрихкодыУпаковокТоваров КАК ШтрихкодыУпаковокТоваров
ПО ОтчетЕГАИСАкцизныеМарки.КодАкцизнойМарки = ШтрихкодыУпаковокТоваров.ЗначениеШтрихкода
ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.АкцизныеМаркиЕГАИС.СрезПоследних КАК АкцизныеМаркиЕГАИС
ПО ШтрихкодыУпаковокТоваров.Ссылка = АкцизныеМаркиЕГАИС.ШтрихкодУпаковки
ГДЕ
ОтчетЕГАИСАкцизныеМарки.Ссылка = &СсылкаНаДокумент
Что делает этот запрос:
&СсылкаНаДокумент).ШтрихкодыУпаковокТоваров по коду марки.АкцизныеМаркиЕГАИС.Статус.ЕСТЬNULL используется для подстраховки: если для марки не будет найдена запись в регистре, в поле СтатусМарки будет выведено значение "Статус не определен".Важно понимать еще один нюанс, который часто вызывает путаницу. Статус, который мы получаем с помощью приведенного выше запроса — это статус, хранящийся в информационной базе (ИБ) 1С. Это последний известный системе статус, который был получен от ЕГАИС в момент обработки ответа на запрос.
Если с момента получения ответа прошло время, реальный статус марки в системе ЕГАИС мог измениться (например, марку продали в другом магазине сети). Чтобы получить самый актуальный, "живой" статус марки непосредственно из ЕГАИС, необходимо сформировать и отправить новый документ Отчет ЕГАИС.
Наш запрос позволяет работать с уже полученными и сохраненными данными, что идеально подходит для анализа и отчетов на основе ранее выполненных проверок.
В обсуждении на форуме упоминались статусы "В наличии" и "отсутствует". На самом деле, в регистре сведений АкцизныеМаркиЕГАИС их может быть больше. Статус меняется автоматически при выполнении различных операций с алкоголем. Возможные значения могут включать:
Не подтверждена — марка числится в документе поступления, но ТТН еще не подтверждена.В наличии — ТТН подтверждена, марка официально находится на остатках организации в ЕГАИС.В резерве — марка зарезервирована для продажи или перемещения.Реализовано — марка была продана через кассу, и информация об этом ушла в ЕГАИС.Таким образом, для получения статуса акцизной марки, который был получен через документ Отчет ЕГАИС, необходимо обращаться не к самому документу, а к регистру сведений АкцизныеМаркиЕГАИС, используя сложный запрос с соединениями через справочник штрихкодов.