При реализации весового, метражного или специфического сырьевого товара (например, металлопроката, кабельной продукции или химикатов) предприятия часто ведут взаиморасчеты в крупных единицах измерения — тоннах. При розничной продаже или расчетах наличными с физическими и юридическими лицами возникает ситуация, когда объем позиции составляет доли единицы: например, 0,01234 т или 5,00256 т. При попытке пробить такой чек на фискальных регистраторах АТОЛ (АТОЛ 11Ф, АТОЛ 30Ф и других) пользователи сталкиваются с тем, что касса или учетная система 1С округляет значение до трех знаков после запятой.
Проанализируем природу этого ограничения, выясним требования законодательства и разберем варианты правильной настройки учета и кассового узла.
Разберем, на каком уровне возникает ограничение точности — в самом кассовом аппарате или в программном обеспечении.
В соответствии с форматами фискальных документов за количество предмета расчета отвечает реквизит тег 1023 (Количество предмета расчета). Обратимся к описанию формата данных ФФД:
FVLN — число с плавающей точкой без знака. Длина поля составляет до 8 байт (символов). Первый байт определяет позицию разделителя десятичной части.0.01234 содержит 7 символов с учетом точки и полностью укладывается в требования формата.Следовательно, сама касса АТОЛ не блокирует печать 5 знаков после запятой. Основной барьер находится в учетной программе 1С и библиотеках интеграции торгового оборудования.
Выясним причину округления на стороне программы 1С:
Количество в документах реализации и складских регистрах имеет жестко заданный тип Число(15, 3). Ввести напрямую в табличную часть 5 знаков после запятой программа не позволяет. Механизм расширений конфигурации не позволяет менять длину и точность реквизитов типовых табличных частей без снятия конфигурации с поддержки.CheckPackage) процедура выгрузки реквизитов чека выполняет сериализацию строки количества с маской ЧДЦ=3. Даже если драйвер кассы способен принять 5–6 знаков, модуль БПО отсекает лишние цифры перед отправкой команды на ККТ.Количество * Цена = Сумма. При принудительном округлении дробного количества итоговая сумма строки может разойтись с суммой документа на копейки. Если расхождение превысит 1 копейку, кассовое ядро драйвера возвращает ошибку и чек блокируется.Рассмотрим наиболее надежный и юридически безопасный способ решения проблемы, не требующий изменения типового кода 1С и перепрошивки кассы. Переведем единицы измерения на уровень, где физическое количество укладывается в стандартную точность 3 знака.
Разберем по шагам схему настройки номенклатуры:
Номенклатура для позиций металлопроката устанавливаем базовую единицу хранения остатков — килограмм (кг) с коэффициентом 1.0,01234 т по цене 50 000 руб. пробивается позиция 12,34 кг по цене 50 руб. Итоговая сумма остается неизменной: 617 руб.С точки зрения требований 54-ФЗ и Федеральной налоговой службы, единица измерения чека не обязана построчно дублировать единицу из договора поставки. Решающими параметрами фискализации являются: точное наименование товара, ставка НДС, сумма налога и итоговая сумма расчета.
Если оптовые документы обязательно должны оформляться в тоннах, а менеджеры работают только с этой единицей, разберем вариант с доработкой механизма передачи данных на ККТ без изменения структуры метаданных документов.
Проанализируем алгоритм: перед передачей таблицы товаров в функцию фискализации чека проверяется единица измерения позиции. Если единица измерения — «т», программа выполняет автоматический пересчет количества и цены в килограммы непосредственно в структуре фискального пакета:
// Пример пересчета параметров фискальной строки перед отправкой в БПО
Для Каждого СтрЧека Из ТаблицаТоваров Цикл
Если СтрЧека.ЕдиницаИзмерения = Справочники.КлассификаторЕдиницИзмерения.НайтиПоНаименованию("т") Тогда
// Переводим количество в килограммы (умножаем на 1000)
СтрЧека.Количество = Окр(СтрЧека.Количество * 1000, 3);
// Пересчитываем цену за килограмм
СтрЧека.Цена = Окр(СтрЧека.Сумма / СтрЧека.Количество, 2);
СтрЧека.ЕдиницаИзмерения = Справочники.КлассификаторЕдиницИзмерения.НайтиПоНаименованию("кг");
КонецЕсли;
КонецЦикла;
В результате накладная и внутренний учет остаются в тоннах, а фискальный накопитель и покупатель получают корректный чек без искажения сумм и без копеечных погрешностей округления.
Если специфика бизнеса безальтернативно требует печати чека именно в тоннах с 5 знаками после запятой, потребуется глубокая доработка типовой конфигурации 1С:
Количество во всех связанных объектах: табличных частях документов реализации, чеков ККМ, регистров накопления (ТоварыНаСкладах, ВыручкаИСебестоимостьПродаж и др.) с Число(15, 3) на Число(15, 5).
// Корректировка форматирования тега 1023 в XML пакета БПО
ПараметрыПозиции.Вставить("Quantity", Формат(ТекущаяСтрока.Количество, "ЧДЦ=5; ЧРД=.; ЧГ=0"));
Обратите внимание: изменение разрядности метаданных усложняет последующие обновления типовой конфигурации 1С и многократно увеличивает объем базы данных за счет перестроения индексов регистров накопления. Поэтому реализация через перевод единиц измерения в базовые (килограммы) является наиболее рациональным и стабильным решением.