Как исправить ошибку количества ККТ АТОЛ при печати больших чеков в 1С?

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

При автоматизации розничной торговли маркированными товарами и алкоголем технические специалисты часто сталкиваются со следующей ситуацией. На кассовом узле под управлением программы 1С:Розница оформляется продажа крупной партии однотипного товара (например, 200–250 бутылок крепкого алкоголя для корпоративного клиента). Оплата по карте проходит успешно, XML-пакет для ЕГАИС формируется и отправляется без сбоев, слип-чек ЕГАИС успешно печатается, но на этапе фискализации самого чека в ККТ (контрольно-кассовой технике) процесс прерывается.

На экране кассира буквально на секунду мелькает сообщение от драйвера ККТ АТОЛ с текстом «Неверное количество», «Неверный формат» или ошибками, связанными с объемом данных, после чего транзакция зависает. В этой статье мы подробно проанализируем, почему возникает эта проблема, разберем ограничения фискальных накопителей и рассмотрим три практических способа решения этой задачи.

Выясняем причины: почему кассовый аппарат «спотыкается» на большом количестве

Многие пользователи ошибочно полагают, что если кассир сканирует 250 бутылок одного и того же наименования, то в кассовый аппарат передается всего одна строка с указанием количества 250. Однако в эпоху обязательной маркировки и ФФД 1.2 правила игры кардинально изменились. Разберем детально техническую цепочку происходящего:

  1. Требования поштучного учета (ФФД 1.2): Согласно требованиям законодательства РФ, каждая единица маркированного товара (включая алкоголь с уникальными федеральными специальными марками) должна учитываться обособленно. Кассовое ПО обязано разбить одну позицию «Водка — 250 шт.» на 250 отдельных строк в электронном документе. В каждую строку записывается количество 1 и добавляется свой уникальный код маркировки (тег 1162 или тег 2007).
  2. Физическое ограничение фискального накопителя (ФН): Любой современный фискальный накопитель (например, ФН-1.2) представляет собой специализированное микропроцессорное устройство с жесткими ограничениями памяти. Согласно формату фискальных данных, максимальный объем одного фискального документа (TLV-пакета данных, отправляемых в ФН) не может превышать 32 768 байт (32 КБ). Поскольку каждый код маркировки — это длинная буквенно-цифровая последовательность, передача 200–250 кодов со всеми реквизитами гарантированно переполняет буфер ФН.
  3. Лимиты прошивки ККТ АТОЛ: Помимо ограничений самого ФН, на уровне драйверов и прошивок платформ АТОЛ (например, под управлением платформы 5.0) действуют внутренние лимиты на количество обрабатываемых позиций в рамках одного открытого чека. При попытке передать массив данных, превышающий эти лимиты, касса мгновенно возвращает одну из ошибок:
    • Ошибка 134 (Превышение размеров TLV данных ФН).
    • Ошибка 408 (Переполнена таблица хранения КМ).
    • Внутренние ошибки драйвера АТОЛ с кодами 10 или 17 («Неверное количество» / «Недопустимое количество»).

Развеиваем миф о «коротких» бумажных чеках и экономии бумаги

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

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

---

Варианты решения проблемы

Рассмотрим подробнее три основных способа обхода ограничений ККТ при продаже крупных партий маркированного товара.

Решение 1: Дробление продажи на несколько чеков (Оперативный ручной вариант)

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

Рекомендуется установить на торговой точке жесткое правило: не пробивать в одном чеке более 50–80 единиц маркированной продукции (или алкоголя). Этот диапазон выбран не случайно — он гарантирует достаточный запас по объему памяти фискального накопителя (до лимита в 32 КБ) даже при наличии дополнительных реквизитов (скидки, длинные наименования товаров, данные покупателя).

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

Решение 2: Автоматическое дробление чека программными средствами 1С

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

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


// Функция разбивает исходную таблицу товаров на массив более мелких таблиц по лимиту строк
Функция РазделитьТабличнуюЧастьТоваров(ТаблицаТоваров, МаксимальныйЛимит) Экспорт
    
    МассивТаблиц = Новый Массив;
    ТекущаяТаблица = ТаблицаТоваров.СкопироватьКолонки();
    
    Для Каждого СтрокаТовара Из ТаблицаТоваров Цикл
        
        Если ТекущаяТаблица.Количество() >= МаксимальныйЛимит Тогда
            МассивТаблиц.Добавить(ТекущаяТаблица);
            ТекущаяТаблица = ТаблицаТоваров.СкопироватьКолонки();
        КонецЕсли;
        
        ЗаполнитьЗначенияСвойств(ТекущаяТаблица.Добавить(), СтрокаТовара);
        
    КонецЦикла;
    
    Если ТекущаяТаблица.Количество() > 0 Тогда
        МассивТаблиц.Добавить(ТекущаяТаблица);
    КонецЕсли;
    
    Возврат МассивТаблиц;
    
КонецФункции

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

Решение 3: Оформление оптовой продажи через ЭДО (Юридически верный вариант)

Продажа 250 бутылок алкоголя или аналогичного объема другого маркированного товара частному лицу в розницу — ситуация редкая. Чаще всего такие закупки совершают представители юридических лиц или индивидуальные предприниматели (например, рестораны, организаторы мероприятий) за безналичный расчет.

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

  1. Создается документ отгрузки (например, УПД — Универсальный передаточный документ) в ERP-системе или программе управления торговлей.
  2. Сведения о маркируемых товарах заносятся в документ в виде кодов упаковок или кодов агрегации. При этом ручное сканирование каждой бутылки на кассовом узле не требуется.
  3. Документ подписывается электронной подписью и отправляется покупателю через оператора ЭДО (электронного документооборота). Система маркировки автоматически спишет коды с баланса продавца и переведет их на баланс покупателя.
  4. Если оплата производится наличными или банковской картой через ККТ представителем юрлица, то на кассе пробивается чек с признаком расчета «Расход» или «Приход» без указания конкретных марок каждой бутылки (в чеке указывается только общая номенклатурная позиция и ИНН покупателя, если это предусмотрено требованиями закона для расчетов между организациями).

---

Как локализовать проблему и просмотреть логи ККТ АТОЛ

Если вы хотите точно убедиться, что зависание чека связано именно с аппаратной ошибкой ККТ, а не со сбоем в 1С, вам необходимо проанализировать технологические логи драйвера АТОЛ. Выполните следующие шаги:

  1. Перейдите на кассовом компьютере по следующему пути: C:\ProgramData\ATOL\drivers10\ (папка ProgramData по умолчанию является скрытой в Windows).
  2. Найдите текстовый файл с именем gLog.txt. Это основной файл логирования работы драйвера ККТ АТОЛ 10.
  3. Откройте его с помощью любого текстового редактора и выполните поиск по дате и времени несостоявшейся продажи либо по ключевым словам Error, Ошибка или кодам команд фискализации (например, FnWriteAttribute).
  4. Проанализируйте полученную ошибку. Если вы обнаружите записи вида [134] Превышение размеров TLV данных ФН или ошибки записи фискального признака, это однозначно указывает на физическое переполнение буфера ФН, описанное в нашей статье.

Подводя итог, отметим, что столкновение со сбоем кассы при попытке пробить очень длинный чек — это не ошибка в коде программы 1С и не неисправность фискального регистратора АТОЛ. Это жесткое физическое ограничение архитектуры современных фискальных накопителей. Используя ручное дробление чеков кассирами или внедрив автоматическое разделение документов в коде конфигурации, вы сможете полностью обезопасить бизнес от зависания кассовой смены в моменты пиковых продаж крупных партий товаров.

← На главную