Почему при пробитии чека по двум организациям в 1С:Розница возникает ошибка Тэг «Позиции чека» не заполнен?

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

После обновления конфигурации 1С:Розница до версии 2.2.10.19 многие пользователи столкнулись с критической проблемой при работе в режиме РМК (Рабочее место кассира). Ситуация выглядит следующим образом: в корзине находятся товары, принадлежащие двум разным организациям (например, алкогольная продукция и сопутствующие товары). При попытке пробить чек первый фискальный документ (обычно с маркированным товаром или алкоголем) выходит корректно, а второй чек не печатается. Вместо этого система выдает ошибку: «Чек не напечатан на устройстве для печати чеков. Дополнительное описание: Тэг "Позиции чека" не заполнен».

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

Разбор причины возникновения ошибки

Проанализируем техническую сторону вопроса. Ошибка возникает из-за нарушения логики работы управляемой формы РМК. Когда программа обрабатывает оплату по двум организациям, она должна последовательно сформировать и отправить на фискализацию два пакета данных. Однако в релизе 2.2.10.19 была допущена ошибка в последовательности вызова процедур.

Выясним причину: после успешной печати первого чека (например, по организации с алкоголем) программа автоматически переходит к процедуре ЗавершитьОплатуТоваровПослеВыводаСдачи. В этой процедуре жестко прописана команда на очистку таблицы Товары, расположенной на форме. Проблема в том, что эта очистка происходит до того, как система успевает собрать данные для второго чека. Когда очередь доходит до второй организации, программный код обращается к табличной части формы, видит ее пустой и передает драйверу ККТ пустой массив позиций. Драйвер, следуя требованиям ФФД, выдает закономерную ошибку об отсутствии позиций в чеке.

Интересно, что ошибка проявляется не у всех. Это связано с тем, что скорость выполнения операций может зависеть от производительности компьютера и настроек драйвера ККТ. Если система успевает «подхватить» данные до полной очистки, чек может выйти, но в большинстве случаев происходит сбой.

Решение №1: Изменение настроек обмена с ЕГАИС (самый быстрый способ)

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

  1. Перейдем в раздел Администрирование — Настройки номенклатуры.
  2. Откроем подраздел Учет алкогольной продукции и найдем Параметры обмена с ЕГАИС.
  3. В настройках торговой точки или общей настройке обмена необходимо установить флаг «Выполнять обмен на сервере 1С:Предприятия».

Важный момент: эта настройка актуальна даже для файловых баз данных. Перенос выполнения части логики на «серверный» слой (даже если он эмулируется в файловом варианте) позволяет корректно отработать цепочку событий печати без преждевременной очистки формы.

Решение №2: Программная корректировка порядка печати

Если первый способ не помог или не подходит по техническим причинам, разберем, как можно поправить логику работы через расширение или доработку конфигурации. Один из эффективных методов — изменить сортировку организаций при подготовке таблицы чеков.

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

Для этого в обработке РМКУправляемыйРежим необходимо найти процедуру ЗаполнитьТаблицуЧеков. Рассмотрим пример того, как можно изменить логику сортировки:


// В расширении для формы РМКУправляемыйРежим
&Вместо("ЗаполнитьТаблицуЧеков")
Процедура Ист_ЗаполнитьТаблицуЧеков(ПараметрыЧека)
    // Вызываем оригинальную логику заполнения
    ПродолжитьВызов(ПараметрыЧека);
    
    // Добавляем свою сортировку в ТаблицаЧеков
    // Задача: переместить организацию с алкоголем в конец списка
    // Это позволит избежать очистки ТЧ на форме раньше времени
    ПараметрыЧека.ТаблицаЧеков.Сортировать("ЕстьАлкоголь Возр"); 
КонецПроцедуры

Такой подход гарантирует, что процедура ЗавершитьОплатуТоваровПослеВыводаСдачи, инициирующая очистку данных, сработает только в самом конце процесса.

Решение №3: Контроль очистки таблицы товаров

Более правильным, с точки зрения архитектуры, решением будет добавление проверки в процедуру очистки. Проанализируем код процедуры ЗавершитьОплатуТоваровПослеВыводаСдачи. В идеале очистка должна происходить только тогда, когда в очереди не осталось ни одного непробитого чека по текущей сделке.

Разберем логику исправления:

  1. Программа запрашивает массив подготовленных чеков.
  2. Проверяется индекс текущего пробиваемого чека.
  3. Команда Объект.Товары.Очистить() выполняется только в том случае, если текущий чек является последним в массиве.

К сожалению, в релизе 2.2.10.19 эта проверка была реализована некорректно, что и привело к массовым жалобам пользователей.

Последствия ошибки и как их исправить в учете

Если вы уже столкнулись с этой проблемой и у вас зависли «пустые» чеки, проанализируем, что нужно сделать для восстановления учета:

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

Рекомендация по обновлению

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

← На главную