Почему ККТ АТОЛ 11Ф обрезает количество товара в чеке и как это исправить

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

При продаже товаров в мелких дозировках или специфических единицах измерения (например, в тоннах при продаже небольших объемов) пользователи 1С сталкиваются с проблемой: кассовый аппарат АТОЛ 11Ф обрезает дробную часть количества. К примеру, при попытке пробить 0,00101 тонны товара в чек попадает значение 0,001. Разберем технические причины такого поведения кассового оборудования и проанализируем способы решения этой проблемы без изменения общей структуры учета.

Технические причины ограничения точности

Выясним причину, почему происходят срез и округление знаков после запятой:

  1. Ограничения формата фискальных документов (ФФД) и драйвера ККТ: Согласно требованиям ФФД, значение реквизита Количество предмета расчета (тег 1023) передается в кассовый аппарат с точностью до трех знаков после запятой (тысячные доли). Драйвер АТОЛ и прошивка кассы автоматически отсекают все разряды, начиная с 4-го знака после запятой.
  2. Ограничения Библиотеки подключаемого оборудования (БПО): При формировании структуры чека перед отправкой команды на пробитие кассовые механизмы 1С принудительно форматируют числовые значения, приводя количество к стандарту с точностью до 3 знаков.

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

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

Вариант 1. Использование килограммов или граммов в кассовом чеке

Самый простой и стандартный вариант — передача количества товара в ККТ в более мелких единицах измерения (килограммах или граммах). При этом менять базовую единицу учета во всей базе 1С не обязательно:

  1. В карточке номенклатуры оставим базовую единицу учета — тонны.
  2. Настроим дополнительную единицу измерения (упаковку) — килограммы или граммы с нужным коэффициентом пересчета (например, 1 г = 0,000001 т).
  3. При формировании чека фискализации будем передавать количество в граммах или килограммах. Значение 1,01 грамма или 0,00101 тонны, выраженное в граммах, уложится в допустимый лимит 3 знаков после запятой и корректно отпечатается на чеке.

Вариант 2. Программный пересчет пары «Цена — Количество» при отправке на ККТ

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

  1. Перед вызовом функции отправки чека проверяем количество знаков в поле количества.
  2. Умножаем количество на коэффициент пересчета (например, на 1 000 для перехода к килограммам или на 1 000 000 для перехода к граммам).
  3. Делим цену за единицу товара на этот же коэффициент.
  4. Передаем полученные значения в кассовый чек. Общая сумма строки остается неизменной, а количество умещается в рамки 3 знаков после запятой.

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


КоэффициентПересчета = 1000000; // Переводим тонны в граммы
КоличествоДляККТ = СтрокаТовара.Количество * КоэффициентПересчета;
ЦенаДляККТ = СтрокаТовара.Цена / КоэффициентПересчета;

СтрокаЧека.Количество = КоличествоДляККТ;
СтрокаЧека.Цена = ЦенаДляККТ;
СтрокаЧека.Сумма = Округлить(КоличествоДляККТ * ЦенаДляККТ, 2);

Вариант 3. Использование индивидуальных упаковок и фасовок

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

Таким образом, учет ограничений ФФД и драйверов ККТ позволяет настроить правильную передачу дробного количества товара без искажения сумм и структуры учета в 1С.

← На главную