Как убрать нежелательную скидку в чеке ККТ АТОЛ при частичной оплате в 1С?

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

При переходе на новые форматы фискальных данных (ФФД 1.05 и выше) многие разработчики и пользователи «1С» сталкиваются с неприятной проблемой: при пробитии чека на частичную оплату (или доплату) ККТ АТОЛ автоматически печатает на чеке строку «Скидка». Например, если товар стоит 1000 рублей, а покупатель вносит только 300 рублей, в чеке неожиданно появляется скидка в размере 700 рублей. Покупатель недоумевает, а бухгалтерия бьет тревогу, ведь фактически никакая скидка клиенту не предоставлялась.

В этой статье мы подробно разберем, почему драйвер ККТ АТОЛ ведет себя подобным образом, как правильно с точки зрения налогового законодательства и ФФД оформлять такие операции, и что именно нужно изменить в коде «1С», чтобы навсегда избавиться от нежелательной скидки в чеке.

Выясняем причину: почему драйвер АТОЛ печатает «скидку»?

Для начала проанализируем ситуацию с технической стороны. В современных драйверах ККТ АТОЛ (как в устаревшей 9-й версии, так и в актуальной 10-й линейке) жестко зашит алгоритм контроля ФФД. Драйвер ККТ следит за тем, чтобы математика чека сходилась. Для каждой товарной позиции выполняется простая проверка:

Цена × Количество = Стоимость (Сумма строки)

Если в коде «1С» при заполнении параметров чека вы передаете:

Драйвер видит математическое расхождение: 1000 * 1 не равно 300. Разница составляет 700 рублей. В соответствии с внутренней логикой, ККТ АТОЛ трактует эту разницу как предоставленную покупателю скидку. Информация об этой «скидке» тут же выводится на печать в бумажном чеке и отправляется в ОФД. Однако при частичной оплате или кредите это методологически неверно: товар не стал дешевле, просто клиент оплачивает его не полностью.

Налоговая инспекция совершенно справедливо требует, чтобы при частичной оплате в чеке фигурировала полная стоимость товара (1000 рублей), а не заниженная до фактически вносимой суммы. Как же быть?


Методология ФФД 1.05: как правильно оформлять частичную оплату

Чтобы избежать появления ложной скидки, сумма товарных позиций в чеке должна строго соответствовать сумме всех типов оплат в подвале чека. В ФФД 1.05 для этого реализован механизм разделения платежей по признакам способа расчета и типам оплаты. Рассмотрим два основных сценария, которые зависят от того, передается ли товар покупателю в момент совершения данного платежа.

Сценарий 1. Товар передается покупателю сразу (Частичная оплата и Кредит)

Если клиент забирает товар стоимостью 1000 рублей прямо сейчас, но платит в кассу только 300 рублей (остальные 700 рублей обязуется доплатить позже), операция оформляется следующим образом:

  1. В товарной позиции указывается полная стоимость товара — 1000 рублей (Цена = 1000, Количество = 1, Сумма = 1000).
  2. Для товарной позиции устанавливается Признак способа расчета (тег 1214) со значением 5 — «ЧАСТИЧНЫЙ РАСЧЕТ И КРЕДИТ».
  3. В блоке оплат (раздел платежей чека) общая сумма 1000 рублей разбивается на две составляющие:
    • Наличные или безналичные (в зависимости от того, как платит клиент) — 300 рублей.
    • Постоплата / В кредит (тег 1216) — 700 рублей.

При такой схеме драйвер ККТ сравнивает общую стоимость товарной строки (1000 рублей) с суммой всех видов оплат (300 рублей наличными + 700 рублей кредитом = 1000 рублей). Математика сходится, и никакая скидка в чеке не печатается!

Когда клиент приходит доплачивать оставшиеся 700 рублей, выбивается второй чек:

  1. Признак способа расчета (тег 1214) устанавливается в значение 9 — «ОПЛАТА КРЕДИТА».
  2. В типах оплаты указывается фактически внесенная сумма — 700 рублей (наличными или безналичными).

Сценарий 2. Предоплата (Товар остается у продавца)

Если покупатель вносит 300 рублей в качестве аванса, а сам товар заберет только после полной оплаты:


Развеиваем страхи: не задвоится ли выручка в ФНС из-за «Постоплаты»?

Многие программисты и бухгалтеры опасаются использовать тип оплаты «Постоплата» (Кредит), думая, что эти виртуальные суммы попадут в Z-отчет (отчет о закрытии смены) как реальная выручка и приведут к завышению налогооблагаемой базы.

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

В Z-отчете и в личном кабинете ОФД эти суммы будут разнесены по разным строкам. Никакого «двоения» выручки при правильном заполнении признаков способа расчета не происходит.


Реализация решения в коде «1С»

Рассмотрим, как правильно передавать структуру чека в драйвер ККТ АТОЛ из «1С». Если вы работаете напрямую с драйвером (через COM-объект или внешнюю компоненту), вам необходимо правильно формировать XML-пакет для фискализации чека или корректно заполнять свойства объектов драйвера.

Ниже приведен пример формирования XML-пакета для частичной оплаты по Сценарию 1 (товар передается сразу, часть оплачивается на месте, часть уходит в кредит). Этот формат используется в современных БСП-совместимых конфигурациях:


// Формируем XML-пакет для передачи на ККТ через БСП
ЗаписьXML = Новый ЗаписьXML;
ЗаписьXML.УстановитьСтроку("UTF-8");
ЗаписьXML.ЗаписатьОбъявлениеXML();

ЗаписьXML.ЗаписатьНачалоЭлемента("Receipt"); // Начало чека
ЗаписьXML.ЗаписатьНачалоЭлемента("Positions"); // Список товаров

ЗаписьXML.ЗаписатьНачалоЭлемента("FiscalString");
ЗаписьXML.ЗаписатьАтрибут("Name", "Пылесос беспроводной");
ЗаписьXML.ЗаписатьАтрибут("Quantity", "1");
ЗаписьXML.ЗаписатьАтрибут("PriceWithDiscount", "1000.00"); // Полная цена товара
ЗаписьXML.ЗаписатьАтрибут("SumWithDiscount", "1000.00");   // Полная стоимость строки
ЗаписьXML.ЗаписатьАтрибут("VATRate", "20");                 // Ставка НДС
ЗаписьXML.ЗаписатьАтрибут("PaymentMethod", "5");            // Тег 1214: "Частичный расчет и кредит"
ЗаписьXML.ЗаписатьКонецЭлемента(); // FiscalString

ЗаписьXML.ЗаписатьКонецЭлемента(); // Positions

ЗаписьXML.ЗаписатьНачалоЭлемента("Payments"); // Раздел оплат
// 1. Оплата наличными или безналичными (то, что клиент платит сейчас)
ЗаписьXML.ЗаписатьНачалоЭлемента("Payment");
ЗаписьXML.ЗаписатьАтрибут("Type", "1"); // 1 - Наличные (или 2 - Безналичные)
ЗаписьXML.ЗаписатьАтрибут("Sum", "300.00");
ЗаписьXML.ЗаписатьКонецЭлемента(); // Payment

// 2. Постоплата (виртуальный платеж в кредит на оставшуюся сумму)
ЗаписьXML.ЗаписатьНачалоЭлемента("Payment");
ЗаписьXML.ЗаписатьАтрибут("Type", "5"); // 5 - Постоплата (Кредит) в терминах драйвера АТОЛ
ЗаписьXML.ЗаписатьАтрибут("Sum", "700.00");
ЗаписьXML.ЗаписатьКонецЭлемента(); // Payment

ЗаписьXML.ЗаписатьКонецЭлемента(); // Payments
ЗаписьXML.ЗаписатьКонецЭлемента(); // Receipt

XMLПакет = ЗаписьXML.Закрыть();

Если вы пишете интеграцию напрямую через низкоуровневые методы драйвера ККТ АТОЛ 9.х или 10.х, обратите внимание на обязательное заполнение свойств платежей. Посмотрим на логику работы с объектом драйвера:


// Пример для прямого обращения к свойствам драйвера (DTO 10)
// 1. Регистрация позиции с полной ценой
Драйвер.setParam(Драйвер.LIBFPTR_PARAM_COMMODITY_NAME, "Пылесос беспроводной");
Драйвер.setParam(Драйвер.LIBFPTR_PARAM_PRICE, 1000.00);
Драйвер.setParam(Драйвер.LIBFPTR_PARAM_QUANTITY, 1);
Драйвер.setParam(Драйвер.LIBFPTR_PARAM_TAX_TYPE, Драйвер.LIBFPTR_TAX_VAT20);
// Устанавливаем признак способа расчета - ЧАСТИЧНЫЙ РАСЧЕТ И КРЕДИТ
Драйвер.setParam(Драйвер.LIBFPTR_PARAM_PAYMENT_METHOD, Драйвер.LIBFPTR_PM_PARTIAL_PAYMENT); 
Драйвер.registration();

// 2. Регистрация оплаты живыми деньгами (300 рублей безналичными)
Драйвер.setParam(Драйвер.LIBFPTR_PARAM_PAYMENT_TYPE, Драйвер.LIBFPTR_PT_ELECTRONIC);
Драйвер.setParam(Драйвер.LIBFPTR_PARAM_PAYMENT_SUM, 300.00);
Драйver.payment();

// 3. Регистрация оплаты кредитом (700 рублей постоплаты)
Драйвер.setParam(Драйвер.LIBFPTR_PARAM_PAYMENT_TYPE, Драйвер.LIBFPTR_PT_CREDIT);
Драйвер.setParam(Драйвер.LIBFPTR_PARAM_PAYMENT_SUM, 700.00);
Драйвер.payment();

// Закрытие чека
Драйвер.closeReceipt();

Полезный совет по обновлению ПО

В оригинальном обсуждении на форуме упоминается использование крайне старого драйвера АТОЛ версии 9.12. Мы настоятельно рекомендуем обновить драйвер ККТ до актуальной 10-й версии (ДТО 10). Начиная с версии 10, взаимодействие интеграционных библиотек «1С» и кассовых аппаратов АТОЛ по форматам ФФД 1.05 и ФФД 1.2 работает значительно стабильнее. Новые версии БСП автоматически формируют правильные XML-пакеты со всеми необходимыми тегами предоплат и кредитов, избавляя вас от необходимости писать сложные обработчики распределения сумм вручную.

← На главную