Как увеличить количество знаков после запятой в чеке на кассах АТОЛ и в 1С?

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

При реализации весового, метражного или специфического сырьевого товара (например, металлопроката, кабельной продукции или химикатов) предприятия часто ведут взаиморасчеты в крупных единицах измерения — тоннах. При розничной продаже или расчетах наличными с физическими и юридическими лицами возникает ситуация, когда объем позиции составляет доли единицы: например, 0,01234 т или 5,00256 т. При попытке пробить такой чек на фискальных регистраторах АТОЛ (АТОЛ 11Ф, АТОЛ 30Ф и других) пользователи сталкиваются с тем, что касса или учетная система 1С округляет значение до трех знаков после запятой.

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

Ограничения кассы АТОЛ и форматы фискальных документов (ФФД)

Разберем, на каком уровне возникает ограничение точности — в самом кассовом аппарате или в программном обеспечении.

В соответствии с форматами фискальных документов за количество предмета расчета отвечает реквизит тег 1023 (Количество предмета расчета). Обратимся к описанию формата данных ФФД:

  1. Реквизит имеет тип данных FVLN — число с плавающей точкой без знака. Длина поля составляет до 8 байт (символов). Первый байт определяет позицию разделителя десятичной части.
  2. Законодательно число знаков дробной части жестко не ограничено тремя знаками: значение вида 0.01234 содержит 7 символов с учетом точки и полностью укладывается в требования формата.
  3. Фискальные регистраторы АТОЛ под управлением платформенных прошивок и драйвера ККТ (ДТО 10) аппаратно поддерживают передачу количества до 6 знаков после запятой. Если в кассу передается значение с точностью 4–6 знаков, шаблон печати устройства выводит переданное дробное число.

Следовательно, сама касса АТОЛ не блокирует печать 5 знаков после запятой. Основной барьер находится в учетной программе 1С и библиотеках интеграции торгового оборудования.

Ограничения конфигураций и библиотеки подключаемого оборудования 1С

Выясним причину округления на стороне программы 1С:

  1. Структура метаданных конфигурации: в подавляющем большинстве типовых решений (1С:Управление торговлей, 1С:Комплексная автоматизация, 1С:ERP, 1С:Бухгалтерия предприятия) реквизит Количество в документах реализации и складских регистрах имеет жестко заданный тип Число(15, 3). Ввести напрямую в табличную часть 5 знаков после запятой программа не позволяет. Механизм расширений конфигурации не позволяет менять длину и точность реквизитов типовых табличных частей без снятия конфигурации с поддержки.
  2. Форматирование в БПО (Библиотека подключаемого оборудования): при подготовке XML-пакета фискализации (CheckPackage) процедура выгрузки реквизитов чека выполняет сериализацию строки количества с маской ЧДЦ=3. Даже если драйвер кассы способен принять 5–6 знаков, модуль БПО отсекает лишние цифры перед отправкой команды на ККТ.
  3. Форматно-логический контроль (ФЛК): в кассовом чеке действует строгое математическое правило: Количество * Цена = Сумма. При принудительном округлении дробного количества итоговая сумма строки может разойтись с суммой документа на копейки. Если расхождение превысит 1 копейку, кассовое ядро драйвера возвращает ошибку и чек блокируется.

Вариант 1. Использование базовой единицы «кг» (рекомендуемый способ)

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

Разберем по шагам схему настройки номенклатуры:

  1. В справочнике Номенклатура для позиций металлопроката устанавливаем базовую единицу хранения остатков — килограмм (кг) с коэффициентом 1.
  2. В таблице единиц измерения добавляем единицу тонна (т) с коэффициентом 1000.
  3. При оформлении розничных чеков расчет выполняется в килограммах. Например, вместо значения 0,01234 т по цене 50 000 руб. пробивается позиция 12,34 кг по цене 50 руб. Итоговая сумма остается неизменной: 617 руб.
  4. Для оптовых покупателей, которым требуется документация в тоннах, в накладных УПД/ТОРГ-12 выбор единицы сохраняется в тоннах либо настраивается печатная форма, выводящая параллельно две единицы измерения (тонны и килограммы).

С точки зрения требований 54-ФЗ и Федеральной налоговой службы, единица измерения чека не обязана построчно дублировать единицу из договора поставки. Решающими параметрами фискализации являются: точное наименование товара, ставка НДС, сумма налога и итоговая сумма расчета.

Вариант 2. Программный пересчет строк чека при фискализации

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

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


// Пример пересчета параметров фискальной строки перед отправкой в БПО
Для Каждого СтрЧека Из ТаблицаТоваров Цикл
    Если СтрЧека.ЕдиницаИзмерения = Справочники.КлассификаторЕдиницИзмерения.НайтиПоНаименованию("т") Тогда
        // Переводим количество в килограммы (умножаем на 1000)
        СтрЧека.Количество = Окр(СтрЧека.Количество * 1000, 3);
        // Пересчитываем цену за килограмм
        СтрЧека.Цена = Окр(СтрЧека.Сумма / СтрЧека.Количество, 2);
        СтрЧека.ЕдиницаИзмерения = Справочники.КлассификаторЕдиницИзмерения.НайтиПоНаименованию("кг");
    КонецЕсли;
КонецЦикла;

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

Вариант 3. Доработка конфигурации под точность 5 знаков

Если специфика бизнеса безальтернативно требует печати чека именно в тоннах с 5 знаками после запятой, потребуется глубокая доработка типовой конфигурации 1С:

  1. Снять конфигурацию с поддержки и вручную изменить разрядность реквизита Количество во всех связанных объектах: табличных частях документов реализации, чеков ККМ, регистров накопления (ТоварыНаСкладах, ВыручкаИСебестоимостьПродаж и др.) с Число(15, 3) на Число(15, 5).
  2. В общем модуле интеграции с БПО, формирующем XML-структуру фискального чека (процедуры формирования фискальных тегов), скорректировать форматную строку выгрузки тега 1023, убрав принудительное округление до 3 знаков:
    
    // Корректировка форматирования тега 1023 в XML пакета БПО
    ПараметрыПозиции.Вставить("Quantity", Формат(ТекущаяСтрока.Количество, "ЧДЦ=5; ЧРД=.; ЧГ=0"));
    
  3. Убедиться, что на рабочих местах установлен актуальный драйвер ККТ АТОЛ версии ДТО 10, так как устаревшие версии драйвера (ДТО 8) принудительно обрезали дробную часть до 3 знаков при передаче команд по протоколу ККТ.

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

← На главную