Почему ККТ Атол неправильно печатает скидку на чеке и как это исправить

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

При интеграции 1С с фискальными регистраторами (например, Атол FPrint-22ПТК) разработчики периодически сталкиваются с ситуацией, когда скидка на чековой ленте отображается некорректно. Например, при сумме товара 100 рублей и скидке 20% касса выводит на печать сумму 100 рублей и скидку 100 рублей. Разберем по шагам, как локализовать источник проблемы, протестировать печать без закрытой фискализации и правильно передать данные позиции чека.

Шаг 1. Локализация проблемы: драйвер или конфигурация 1С

Первым делом выясним, на каком уровне происходит искажение — в прошивке/настройках самого устройства или в алгоритмах 1С. Для этого выполним проверку через штатный тест драйвера ККТ:

  1. Откроем утилиту Тест драйвера ККТ (для ДТО 8, 9 или 10).
  2. Установим соединение с кассой и перейдем на вкладку регистрации/печати чека.
  3. Зарегистрируем тестовую позицию с указанием базовой цены и скидки вручную.

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

Шаг 2. Организация отладки на нефискализированной кассе или эмуляторе

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

Способ 1. Временное отключение проверки параметров ФР в коде 1С. В старых типовых и нетиповых конфигурациях перед отправкой XML или вызовом драйвера срабатывают проверки готовности фискального регистратора. Для трассировки алгоритма можно временно закомментировать условие проверки:


// Временное отключение проверки статуса ФР для отладки формирования чека
// Если Не РаботаСТорговымОборудованием.ПолучитьПроверитьПараметрыДляПробитияЧека(ФР) Тогда
//     Возврат;
// КонецЕсли;

Способ 2. Использование эмулятора ККТ. В подсистеме подключаемого оборудования (БПО) рекомендуется переключить кассу на 1С:ККТ с передачей данных (эмулятор) или 1С:Фискальный регистратор (эмулятор). Это позволит выполнить типовой алгоритм чека целиком без подключения реального аппарата и увидеть результирующий XML-пакет в отладчике.

Способ 3. Анализ лог-файла драйвера. Драйвер АТОЛ фиксирует все поступающие от 1С команды в файле fptr10.log (или fptr.log). В нем можно увидеть точные значения параметров LIBFPTR_PARAM_PRICE, LIBFPTR_PARAM_POSITION_SUM и LIBFPTR_PARAM_INFO_DISCOUNT_SUM, отправленные из 1С.

Шаг 3. Исправление алгоритма расчета и передачи скидки в 1С

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

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


// Корректный расчет стоимости позиции с учетом процента скидки
СуммаСкидки = Окр(Количество * Цена * ПроцентСкидки / 100, 2, РежимОкругления.Окр15как20);
СуммаПозиции = (Количество * Цена) - СуммаСкидки;

При передаче данных через XML-пакет (CheckPackage) или параметры метода драйвера обратим внимание на следующие правила:

  1. Не передавать конфликтующие теги: если в узле <FiscalString> одновременно передаются полная цена без скидки (Price), итоговая сумма позиции (Amount) и сумма скидки (DiscountAmount), драйвер может повторно уменьшить сумму либо интерпретировать переданную сумму как стопроцентную скидку.
  2. Требования ФФД 1.05 / 1.2: в современных форматах фискализации скидка на позицию не выделяется в отдельный фискальный реквизит. В тег цены (1079) и тег стоимости (1043) всегда должна отправляться конечная цена с уже примененной скидкой (Количество * Цена = Стоимость).
  3. Информационный вывод: если покупателю необходимо наглядно показать размер предоставленной выгоды, исходную цену и сумму скидки выводят отдельными нефискальными текстовыми строками (<TextString>) перед или после фискальной позиции товара.

Шаг 4. Проверка обработки обслуживания и драйвера

Если код расчета в конфигурации корректен, проверим программное окружение:

  1. Обновим внешнюю обработку обслуживания ККТ или компоненту интеграции с БПО до актуальной версии.
  2. Очистим каталог временных файлов и папку ExtComp от устаревших версий библиотек (fptr.dll / fptr10.dll).
  3. Проверим настройки шаблона чека в самой ККТ через тест драйвера (вкладка Параметры ККТ -> Печать чека), отключив автоматический пересчет скидок внутри кассы, если он дублирует расчеты из 1С.
← На главную