При оформлении продаж с процентными скидками пользователи и специалисты часто сталкиваются с ситуацией, когда итоговая сумма документа в учетной системе не сходится с суммой чека, формируемой фискальным регистратором. Разберем типичный пример: продается 1000 единиц товара по цене 5,26 руб. с общей скидкой 7%. В учетном документе 1С скидка начисляется на общую сумму строки, что дает расчетный итог 4891,80 руб. Однако при выводе на онлайн-кассу скидка распределяется попозиционно на цену за единицу, в результате чего кассовая цена округляется до 4,89 руб., а чек закрывается на сумму 4890,00 руб. Возникает разница в 1 рубль 80 копеек, из-за которой кассовое устройство либо отклоняет операцию, либо формирует неверные фискальные данные.
Проанализируем природу этой проблемы, требования законодательства и практические пути ее решения в типовых конфигурациях 1С.
В соответствии с форматами фискальных документов (ФФД 1.05 и новее), кассовый чек не содержит отдельного итогового реквизита «процент скидки на чек», уменьшающего стоимость после суммирования строк. В фискальный накопитель передаются реквизиты конкретной товарной позиции:
Согласно жестким математическим правилам ФФД, значение стоимости предмета расчета (тег 1043) обязано равняться произведению цены с учетом скидки (тег 1079) на количество (тег 1023). Допустимое расхождение при расчете внешним калькулирующим устройством не может превышать 1 копейку. Когда касса пытается умножить 4,89 руб. на 1000 шт., результат 4890,00 руб. расходится с учетной суммой документа 1С (4891,80 руб.) намного больше допустимого предела. Касса блокирует печать чека с ошибкой несовпадения итогов.
Для разрешения копеечных нестыковок разработчики 1С включили в подсистему «Библиотека подключаемого оборудования» (БПО) механизм форматно-логического контроля (ФЛК). Настройка выполняется непосредственно в параметрах фискального регистратора.
В свойствах подключенного оборудования доступны два основных метода корректировки:
Рассмотрим, как функционирует вариант «Разделять строки». Если у нас продается крупная партия товара (например, 1000 штук), алгоритм не станет создавать 1000 отдельных позиций в чеке. Позиция математически разбивается максимум на две строки с ценами, различающимися ровно на 1 копейку:
В рассмотренном примере программа автоматически разобьет строку следующим образом:
Итоговая фискальная сумма чека составит ровно 4891,80 руб. Требование ФФД о совпадении произведения цены на количество соблюдается для каждой строки, а общая сумма документа совпадает с кассовым чеком до копейки.
Второй вариант контроля — «Зачитывать суммы» — предназначен для распределения погрешностей округления между разными товарами в чеке. Алгоритм пытается взаимно компенсировать излишки и недостачи копеек между разными строками многострочного документа. Однако этот метод имеет существенные ограничения:
Операции сравнения на больше-меньше допустимы только для значений совпадающих примитивных типов (Булево, Число, Строка, Дата)
Посмотрим на фрагмент типового кода, где возникала неисправность при обходе строк:
Если ПредыдущаяСтрока[ИмяРеквизита] > ТекущаяСтрока[ИмяРеквизита] Тогда
// Блок распределения копеек
КонецЕсли;
Причина ошибки крылась в том, что одно из сравниваемых полей содержало значение Неопределено вместо числового типа, из-за чего механизм платформы прерывал выполнение операции. Начиная с релиза 10.3.45 данный баг типовой конфигурации был полностью устранен.
Разберем по шагам, как настроить систему для безошибочной печати чеков со скидками:
МенеджерОборудованияКлиентСервер, выполним обновление конфигурации до актуального релиза (не ниже 10.3.45).