Работа с подакцизной продукцией в ЕГАИС требует ювелирной точности, но на практике мы часто сталкиваемся с ситуациями, когда необходимо списать огромное количество марок (например, более 3000 штук) разово. Вводить такие данные вручную через стандартный интерфейс подбора в «1С:Розница» — задача, которая может затянуться на долгие часы и привести к ошибкам. В этой статье мы разберем, как автоматизировать этот процесс, обойти технические ограничения системы и корректно обработать статусы марок.
Когда мы пытаемся списать внушительный список марок, мы сталкиваемся с тремя основными препятствиями:
Проанализируем ситуацию и рассмотрим по шагам, как решить задачу с помощью программных инструментов и штатных возможностей системы.
Основная сложность программного добавления марок в документы ЕГАИС в «1С:Розница» (начиная с релизов 2.3.x) заключается в том, что данные о проверенных марках хранятся не просто в табличной части, а в специальном реквизите ДанныеПроверкиИПодбора. Этот реквизит имеет тип ХранилищеЗначения, внутри которого находится дерево значений.
Разберем, как получить доступ к этим данным. Для того чтобы программа «увидела» добавленные вами марки как проверенные, необходимо извлечь это дерево, модифицировать его и записать обратно. Рассмотрим пример кода для получения структуры:
// Получаем объект документа (например, Акт списания ЕГАИС)
ДокументОбъект = СсылкаНаДокумент.ПолучитьОбъект();
// Извлекаем дерево из хранилища значений
ДеревоПодбора = ДокументОбъект.ДанныеПроверкиИПодбора.Получить();
// Если дерево еще не создано, его нужно инициализировать
// (структура должна соответствовать метаданным конфигурации)
Если ДеревоПодбора = Неопределено Тогда
// Здесь должна быть логика создания структуры дерева по шаблону ЕГАИС
КонецЕсли;
Дерево обычно имеет двухуровневую структуру: на первом уровне располагается номенклатура (алкогольная продукция), на втором — конкретные акцизные марки. Выясним причину частых ошибок: если вы просто добавите марку, не привязав её к корректной строке алкогольной продукции, система выдаст ошибку при попытке проведения или завершения проверки.
Как отмечалось в обсуждении, одной из главных проблем является наличие в списке марок со статусом «Реализована». Если мы попытаемся списать то, что по данным 1С уже продано, мы создадим лишние записи в регистрах и запутаем учет. Поэтому перед добавлением марки в акт необходимо выполнить проверку по регистру сведений АкцизныеМаркиЕГАИС.
Проанализируем пример логики, которую можно внедрить в обработку по загрузке марок:
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| АкцизныеМаркиЕГАИС.Статус КАК Статус,
| АкцизныеМаркиЕГАИС.Номенклатура КАК Номенклатура
|ИЗ
| РегистрСведений.АкцизныеМаркиЕГАИС КАК АкцизныеМаркиЕГАИС
|ГДЕ
| АкцизныеМаркиЕГАИС.КодМарки = &КодМарки";
Запрос.УстановитьПараметр("КодМарки", ТекущийКодИзСписка);
Результат = Запрос.Выполнить();
Если НЕ Результат.Пустой() Тогда
Выборка = Результат.Выбрать();
Выборка.Следующий();
Если Выборка.Статус = Перечисления.СтатусыАкцизныхМарок.ВНаличии Тогда
// Только в этом случае добавляем марку в Акт списания
ДобавитьМаркуВДерево(ДеревоПодбора, ТекущийКодИзСписка, Выборка.Номенклатура);
КонецЕсли;
КонецЕсли;
Именно такой подход применил автор темы, что позволило ему избежать ошибок при заполнении документа. Если марка имеет статус «Реализована», она просто пропускается, так как фактически её уже нет на остатках в базе.
Если вы не планируете писать собственную обработку с нуля, воспользуемся штатным или полуавтоматическим методом. В новых релизах «1С:Розница» в форме проверки и подбора алкогольной продукции предусмотрена кнопка загрузки из внешнего файла.
Рассмотрим алгоритм действий:
Важный нюанс: Если марки старого образца (длинные) или новые (короткие) не сопоставляются с номенклатурой, убедитесь, что в базе загружены классификаторы ЕГАИС и установлена связь между алкогольной продукцией ЕГАИС и вашей номенклатурой 1С.
Отправка одного акта списания на 3000 марок — это риск получить отказ от УТМ (Универсального транспортного модуля) по причине превышения времени ожидания или объема XML-пакета. Разберем, как минимизировать риски:
1. Разбиение на части. Рекомендуем разделять список на несколько документов по 100–300 марок. Это оптимальный объем, который быстро обрабатывается серверами ФСРАР и не вызывает «зависания» транспортного модуля.
2. Актуализация остатков по Регистру №3. Прежде чем приступать к массовому списанию, крайне важно запросить «Остатки по регистру №3» (Запрос марок). Это позволит вам увидеть, какие именно марки числятся за вами в облаке ЕГАИС. Списывать нужно именно те марки, которые есть в ответе от ЕГАИС, а не просто те, что накопились в текстовом файле за годы работы.
3. Режим инвентаризации. Посмотрим на ситуацию шире: иногда эффективнее создать документ «Инвентаризация продукции ЕГАИС». После сопоставления фактических марок и остатков в ЕГАИС, программа сама сформирует акты списания на недостачу. Это самый методически верный способ очистки остатков.
Если при нажатии на кнопку «Завершить проверку» вы видите пустое окно сообщения, а статус проверки не меняется, проанализируем дерево ДанныеПроверкиИПодбора. Обычно это происходит по следующим причинам:
Совет: Если программная доработка не удается, попробуйте обновить «1С:Розница» до актуального релиза. Разработчики постоянно оптимизируют механизмы работы с хранилищем значений в документах ЕГАИС.
Таким образом, автоматизация списания большого количества марок требует либо использования внешней обработки для заполнения дерева ДанныеПроверкиИПодбора с обязательной фильтрацией по регистру АкцизныеМаркиЕГАИС, либо грамотного использования штатного механизма инвентаризации с предварительным запросом остатков по Регистру №3.