При продаже товаров в мелких дозировках или специфических единицах измерения (например, в тоннах при продаже небольших объемов) пользователи 1С сталкиваются с проблемой: кассовый аппарат АТОЛ 11Ф обрезает дробную часть количества. К примеру, при попытке пробить 0,00101 тонны товара в чек попадает значение 0,001. Разберем технические причины такого поведения кассового оборудования и проанализируем способы решения этой проблемы без изменения общей структуры учета.
Выясним причину, почему происходят срез и округление знаков после запятой:
Количество предмета расчета (тег 1023) передается в кассовый аппарат с точностью до трех знаков после запятой (тысячные доли). Драйвер АТОЛ и прошивка кассы автоматически отсекают все разряды, начиная с 4-го знака после запятой.Рассмотрим подробнее несколько вариантов решения задачи, которые позволят корректно пробивать чеки и избежать расхождений в копейках и количествах.
Самый простой и стандартный вариант — передача количества товара в ККТ в более мелких единицах измерения (килограммах или граммах). При этом менять базовую единицу учета во всей базе 1С не обязательно:
1,01 грамма или 0,00101 тонны, выраженное в граммах, уложится в допустимый лимит 3 знаков после запятой и корректно отпечатается на чеке.Если в 1С используется доработка кассового модуля, проанализируем алгоритм пересчета значений непосредственно перед отправкой данных в драйвер ККТ. Разберем его по шагам:
1 000 для перехода к килограммам или на 1 000 000 для перехода к граммам).Посмотрим на пример кода, реализующего данный пересчет в обработке формирования чека:
КоэффициентПересчета = 1000000; // Переводим тонны в граммы
КоличествоДляККТ = СтрокаТовара.Количество * КоэффициентПересчета;
ЦенаДляККТ = СтрокаТовара.Цена / КоэффициентПересчета;
СтрокаЧека.Количество = КоличествоДляККТ;
СтрокаЧека.Цена = ЦенаДляККТ;
СтрокаЧека.Сумма = Округлить(КоличествоДляККТ * ЦенаДляККТ, 2);
Разберем еще один подход — создание фиксированных упаковок (порций). В этом случае товар продается целым количеством упаковок (например, 1 порция / фасовка), а ее объем фиксируется в наименовании или характеристике товара. В результат касса получает целое число, что полностью исключает проблемы с округлением дробной части.
Таким образом, учет ограничений ФФД и драйверов ККТ позволяет настроить правильную передачу дробного количества товара без искажения сумм и структуры учета в 1С.