Как исправить ошибку ККТ АТОЛ «Недопустимый реквизит 1023» при продаже разливного пива?

Программист Торговля и дистрибуция
← На главную

При работе с онлайн-кассами АТОЛ, особенно в контексте продажи маркированных товаров на розлив, можно столкнуться с ошибкой "Объекту ... присвоен код ошибки 148 [Ошибка программирования реквизита 1023 (Недопустимый реквизит для данного типа документа)]". Эта проблема часто возникает при попытке передать в чек дробное количество товара, например, 0.5 литра пива. Давайте вместе разберемся, почему ККТ выдает такую ошибку и как ее исправить.

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

Рассмотрим по шагам, что нужно проверить и исправить для успешной продажи разливного пива.

Шаг 1. Проверяем статус товара и порядок передачи тегов

Ключевым моментом для продажи мерного маркированного товара является правильная передача статуса этого товара. За это отвечает тег 2110 (в драйвере АТОЛ ему может соответствовать параметр LIBFPTR_PARAM_MARKING_CODE_STATUS с идентификатором 65846).

Существует важное правило, которое драйвер использует для определения типа товара:

В обсуждаемом случае использовался статус LIBFPTR_MES_DRY_FOR_SALE (2). Число 2 — чётное, и, казалось бы, все должно работать. Однако здесь в игру вступает второй критически важный фактор — порядок передачи реквизитов в драйвер.

Важно: Драйвер ККТ должен сначала получить информацию о том, что товар является мерным, и только потом принять его дробное количество. Если вы сначала передадите количество (тег 1023), а потом статус товара (тег 2110), драйвер по умолчанию будет считать товар штучным и закономерно выдаст ошибку на дробное значение 0.5.

Таким образом, правильная последовательность действий при регистрации позиции в чеке должна быть следующей:

  1. Задать единицу измерения. Для литров это значение "41" для тега 2108 (LIBFPTR_PARAM_MEASUREMENT_UNIT).
  2. Задать статус маркированного товара. Явно укажите, что товар мерный, передав чётное значение в тег 2110 (LIBFPTR_PARAM_MARKING_CODE_STATUS). Например, значение 2.
  3. Только после этого передать дробное количество в тег 1023 (LIBFPTR_PARAM_QUANTITY). Например, 0.5.

Посмотрим на примерный код, демонстрирующий правильный порядок вызовов методов драйвера:


// Устанавливаем единицу измерения - литры
FiscalPrinter.setParam(1212, "Пиво разливное"); // Наименование предмета расчета (тег 1030)
FiscalPrinter.setParam(1079, 150.00); // Цена за единицу (тег 1079)

// Сначала задаем контекст для мерного товара
FiscalPrinter.setParam(65851, 41); // Тег 2108 (LIBFPTR_PARAM_MEASUREMENT_UNIT) = ЛИТР (41)
FiscalPrinter.setParam(65846, 2);  // Тег 2110 (LIBFPTR_PARAM_MARKING_CODE_STATUS) = 2 (чётное)

// Теперь передаем дробное количество
FiscalPrinter.setParam(1023, 0.5); // Тег 1023 (LIBFPTR_PARAM_QUANTITY) = 0.5

// Передаем остальные реквизиты (код маркировки, режим обработки и т.д.)
FiscalPrinter.setParam(65852, 0); // LIBFPTR_PARAM_MARKING_PROCESSING_MODE
// ... другие параметры

// Регистрируем позицию
FiscalPrinter.registration();

Шаг 2. Проверяем формат дробного числа

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

Если в вашем коде или настройках системы в качестве разделителя используется запятая (,), это может привести к ошибке. Убедитесь, что в тег 1023 передается значение именно в формате 0.5, а не 0,5.

Шаг 3. Определяем, какой код передавать в теге 2000

В ходе обсуждения возник вопрос: что именно передавать в тег 2000 (код товара) при продаже пива из кеги — полный код маркировки кеги или только ее GTIN?

Для заведений общественного питания (общепита) законодательство предусматривает упрощенный режим. При постановке кеги на кран вы сообщаете в "Честный ЗНАК" полный код маркировки. А при каждой последующей продаже порции пива из этой кеги в фискальном чеке достаточно указывать только GTIN этой продукции. Это значительно упрощает автоматизацию, так как не требует хранения и передачи уникального кода для каждой проданной кружки.

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

Шаг 4. Если ничего не помогает — обновляем ПО

Если вы уверены, что порядок тегов корректен, статус товара правильный и десятичный разделитель — точка, но ошибка 148 все равно появляется, причина может быть в самой кассе. Проблемы с поддержкой ФФД 1.2 и работой с маркированными товарами часто исправляются производителем в новых версиях:

В заключение, ошибка программирования реквизита 1023 при продаже разливного пива — это почти всегда проблема логики взаимодействия с ККТ. Ключ к решению — сначала "объяснить" кассе, что товар мерный (через теги 2108 и 2110), и только потом передавать его дробное количество (тег 1023). При необходимости можно воспользоваться инструментом для независимой печати чеков на ККМ АТОЛ напрямую через драйвер.

← На главную