Реализация помарочного (поштучного) учета алкогольной продукции в ЕГАИС является одной из самых сложных задач для разработчика 1С в сфере ритейла и дистрибуции. Основная проблема заключается в огромном объеме данных: при обороте в миллион бутылок в месяц база данных может быстро разрастись до критических размеров, а стандартные механизмы работы с остатками начнут вызывать серьезные задержки при проведении документов. В этой статье мы подробно разберем, как спроектировать архитектуру хранения марок, какие объекты 1С использовать и как обеспечить высокую производительность системы.
Первый и самый важный вопрос, который встает перед разработчиком: где хранить данные о марках? Проанализируем два основных подхода:
Проанализируем ситуацию: если мы выбираем независимый регистр сведений, мы теряем стандартную связь с регистратором (документом). Чтобы решить эту проблему, рассмотрим возможность добавления ресурса или реквизита ДокументОснование в структуру регистра, либо использование избыточности данных для отслеживания истории движений.
Разберем оптимальную структуру Регистра сведений «СостоянияАкцизныхМарок». Для обеспечения производительности и возможности интеграции с ЕГАИС (Регистр №3) нам потребуются следующие измерения и ресурсы:
Измерения:
Марка (Тип: СправочникСсылка.Марки или Строка 150): Уникальный идентификатор марки.Серия (Тип: СправочникСсылка.СерииНоменклатуры или РФУ2): Связь с партией алкогольной продукции (Справка 2).Ресурсы:
Статус (Тип: Перечисление.СтатусыМарок): Например — В наличии, Отгружена, Списана, Ожидается приход.Организация: Владелец марки в текущий момент.Реквизиты:
ДокументДвижения: Последний документ, изменивший статус марки.ДатаИзменения: Время последней операции.ИдентификаторУпаковки: Ссылка на групповую тару (коробку/паллету).Для оптимизации хранения строк длиной 68 или 150 символов (новые марки) крайне рекомендуется использовать Справочник «ШтрихкодыУпаковок». В регистре сведений мы будем хранить ссылку на этот справочник. Это позволит значительно уменьшить размер индекса регистра и ускорить поиск.
Рассмотрим по шагам, как документы должны взаимодействовать с регистром состояний марок:
1. Поступление товаров (ТТН ЕГАИС):
При получении входящей ТТН данные о марках часто приходят во вложенных файлах или XML-структурах. В этот момент мы можем записать марки в регистр со статусом ОжидаетсяПриход. После подтверждения акта приемки и получения квитанции из ЕГАИС, статус меняется на ВНаличии.
Пример кода для фиксации прихода:
МенеджерЗаписи = РегистрыСведений.СостоянияАкцизныхМарок.СоздатьМенеджерЗаписи();
МенеджерЗаписи.Марка = СсылкаНаМарку;
МенеджерЗаписи.Серия = РФУ2;
МенеджерЗаписи.Статус = Перечисления.СтатусыМарок.ВНаличии;
МенеджерЗаписи.Организация = Объект.Организация;
МенеджерЗаписи.ДокументДвижения = Объект.Ссылка;
МенеджерЗаписи.ДатаИзменения = ТекущаяДата();
МенеджерЗаписи.Записать(Истина);
2. Реализация товаров и Акт списания:
При проведении расходных документов мы должны проверять наличие марки в регистре и ее текущий статус. Если статус не равен ВНаличии, проведение должно блокироваться.
Рассмотрим алгоритм проверки:
3. Снятие документа с проведения:
Здесь кроется важный нюанс. Если мы просто очистим запись в регистре сведений, мы можем потерять информацию о том, что марка физически существует. Рекомендуется не удалять запись, а возвращать ей статус ВНаличии, если документ был расходным, или статус Аннулирован, если приходным.
В оптовой торговле невозможно сканировать каждую бутылку. ЕГАИС поддерживает иерархию упаковок. В нашей учетной системе мы должны реализовать дерево связей. Выясним, как это лучше сделать:
Создадим справочник УпаковкиЕГАИС, где родителем будет паллета, а подчиненными элементами — коробки. В регистре сведений для каждой марки будем хранить ИдентификаторУпаковки. При сканировании кода коробки система должна выполнить запрос к регистру и найти все марки, привязанные к этой упаковке.
Важно: При «распаковке» (извлечении одной бутылки из коробки) необходимо программно очищать поле ИдентификаторУпаковки у этой марки и, если этого требует бизнес-логика, отправлять в ЕГАИС соответствующий акт расформирования упаковки.
При объемах в миллионы марок запись в регистр сведений при проведении документа может замедлять работу пользователей. Рассмотрим пути оптимизации:
Марка и Серия.Алкокода (рарИд) в самом регистре позволит делать отчеты по остаткам в разрезе продукции напрямую по регистру сведений, не обращаясь к справочникам номенклатуры.Со временем регистр сведений будет раздуваться. Проанализируем критерии очистки:
Марки, которые были отгружены и по которым получено подтверждение от контрагента более года назад, можно переносить в архивную таблицу или удалять. Шанс того, что по ним будет возврат или проверка, крайне мал, а скорость работы основной таблицы значительно возрастет. Для этого следует создать регламентное задание, которое раз в месяц будет «схлопывать» историю по старым маркам.
Таким образом, использование независимого регистра сведений в сочетании со справочником уникальных марок и логикой статусного управления позволяет построить масштабируемую систему помарочного учета, готовую к любым требованиям регулятора и объемам товарооборота.