Как массово списать акцизные марки в 1С:Розница, если их список содержит тысячи позиций?

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

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

Анализ проблемы: почему стандартные методы не всегда работают

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

  1. Трудоемкость: Сканирование или ручной поиск каждой марки в базе для добавления в «Акт списания ЕГАИС» практически невозможны при объемах в несколько тысяч единиц.
  2. Рассинхронизация статусов: В списке на списание могут оказаться марки, которые в базе 1С уже числятся как «Реализованные». Попытка добавить их в акт списания может вызвать конфликт логики программы.
  3. Технические ошибки формы проверки: При программном заполнении документа часто возникает пустая ошибка после нажатия кнопки «Завершить проверку». Это происходит из-за некорректного формирования внутренней структуры документа.

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

Программное заполнение документа и работа с деревом подбора

Основная сложность программного добавления марок в документы ЕГАИС в «1С:Розница» (начиная с релизов 2.3.x) заключается в том, что данные о проверенных марках хранятся не просто в табличной части, а в специальном реквизите ДанныеПроверкиИПодбора. Этот реквизит имеет тип ХранилищеЗначения, внутри которого находится дерево значений.

Разберем, как получить доступ к этим данным. Для того чтобы программа «увидела» добавленные вами марки как проверенные, необходимо извлечь это дерево, модифицировать его и записать обратно. Рассмотрим пример кода для получения структуры:


// Получаем объект документа (например, Акт списания ЕГАИС)
ДокументОбъект = СсылкаНаДокумент.ПолучитьОбъект();

// Извлекаем дерево из хранилища значений
ДеревоПодбора = ДокументОбъект.ДанныеПроверкиИПодбора.Получить();

// Если дерево еще не создано, его нужно инициализировать 
// (структура должна соответствовать метаданным конфигурации)
Если ДеревоПодбора = Неопределено Тогда
    // Здесь должна быть логика создания структуры дерева по шаблону ЕГАИС
КонецЕсли;

Дерево обычно имеет двухуровневую структуру: на первом уровне располагается номенклатура (алкогольная продукция), на втором — конкретные акцизные марки. Выясним причину частых ошибок: если вы просто добавите марку, не привязав её к корректной строке алкогольной продукции, система выдаст ошибку при попытке проведения или завершения проверки.

Фильтрация марок по статусу в информационной базе

Как отмечалось в обсуждении, одной из главных проблем является наличие в списке марок со статусом «Реализована». Если мы попытаемся списать то, что по данным 1С уже продано, мы создадим лишние записи в регистрах и запутаем учет. Поэтому перед добавлением марки в акт необходимо выполнить проверку по регистру сведений АкцизныеМаркиЕГАИС.

Проанализируем пример логики, которую можно внедрить в обработку по загрузке марок:


Запрос = Новый Запрос;
Запрос.Текст = 
    "ВЫБРАТЬ
    |	АкцизныеМаркиЕГАИС.Статус КАК Статус,
    |	АкцизныеМаркиЕГАИС.Номенклатура КАК Номенклатура
    |ИЗ
    |	РегистрСведений.АкцизныеМаркиЕГАИС КАК АкцизныеМаркиЕГАИС
    |ГДЕ
    |	АкцизныеМаркиЕГАИС.КодМарки = &КодМарки";

Запрос.УстановитьПараметр("КодМарки", ТекущийКодИзСписка);
Результат = Запрос.Выполнить();

Если НЕ Результат.Пустой() Тогда
    Выборка = Результат.Выбрать();
    Выборка.Следующий();
    
    Если Выборка.Статус = Перечисления.СтатусыАкцизныхМарок.ВНаличии Тогда
        // Только в этом случае добавляем марку в Акт списания
        ДобавитьМаркуВДерево(ДеревоПодбора, ТекущийКодИзСписка, Выборка.Номенклатура);
    КонецЕсли;
КонецЕсли;

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

Массовая загрузка через внешний файл

Если вы не планируете писать собственную обработку с нуля, воспользуемся штатным или полуавтоматическим методом. В новых релизах «1С:Розница» в форме проверки и подбора алкогольной продукции предусмотрена кнопка загрузки из внешнего файла.

Рассмотрим алгоритм действий:

  1. Откройте «Акт списания ЕГАИС» и перейдите на вкладку «Товары».
  2. Нажмите кнопку «Проверка и подбор».
  3. В открывшемся окне найдите иконку загрузки (обычно в виде папки или кнопки «Загрузить из файла»).
  4. Вставьте ваш список марок. Обратите внимание, что система будет сопоставлять их с базой.

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

Рекомендации по работе с большими объемами (3000+ марок)

Отправка одного акта списания на 3000 марок — это риск получить отказ от УТМ (Универсального транспортного модуля) по причине превышения времени ожидания или объема XML-пакета. Разберем, как минимизировать риски:

1. Разбиение на части. Рекомендуем разделять список на несколько документов по 100–300 марок. Это оптимальный объем, который быстро обрабатывается серверами ФСРАР и не вызывает «зависания» транспортного модуля.

2. Актуализация остатков по Регистру №3. Прежде чем приступать к массовому списанию, крайне важно запросить «Остатки по регистру №3» (Запрос марок). Это позволит вам увидеть, какие именно марки числятся за вами в облаке ЕГАИС. Списывать нужно именно те марки, которые есть в ответе от ЕГАИС, а не просто те, что накопились в текстовом файле за годы работы.

3. Режим инвентаризации. Посмотрим на ситуацию шире: иногда эффективнее создать документ «Инвентаризация продукции ЕГАИС». После сопоставления фактических марок и остатков в ЕГАИС, программа сама сформирует акты списания на недостачу. Это самый методически верный способ очистки остатков.

Исправление «пустой ошибки» при завершении проверки

Если при нажатии на кнопку «Завершить проверку» вы видите пустое окно сообщения, а статус проверки не меняется, проанализируем дерево ДанныеПроверкиИПодбора. Обычно это происходит по следующим причинам:

Совет: Если программная доработка не удается, попробуйте обновить «1С:Розница» до актуального релиза. Разработчики постоянно оптимизируют механизмы работы с хранилищем значений в документах ЕГАИС.

Таким образом, автоматизация списания большого количества марок требует либо использования внешней обработки для заполнения дерева ДанныеПроверкиИПодбора с обязательной фильтрацией по регистру АкцизныеМаркиЕГАИС, либо грамотного использования штатного механизма инвентаризации с предварительным запросом остатков по Регистру №3.

← На главную