Как правильно отразить и напечатать оплату в кредит в чеке ККМ из 1С?

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

При оформлении продаж в кредит в розничных магазинах программисты и бухгалтеры часто сталкиваются со следующей проблемой: при отправке чека на ККМ (например, Штрих-М или Атол) тип оплаты «Кредит» печатается на чеке в виде строки «Постоплатой (в кредит)», тогда как заказчик или бухгалтерия требуют, чтобы в поле «Получено» отображалась понятная клиенту фраза вроде «Оплата Кредита». Как реализовать это технически корректно, не нарушив при этом требования 54-ФЗ и форматы фискальных документов (ФФД)?

В этой статье мы подробно разберем, почему стандартные «костыли» с переименованием таблиц в кассе могут привести к штрафам, в чем разница между передачей товара в кредит и его последующей оплатой, а также покажем правильные примеры кода для интеграции ККМ в 1С.

---

Почему простое переименование типов оплат в ККТ — это опасный путь?

Некоторые специалисты решают задачу «в лоб»: заходят через тест драйвера ККТ в таблицы параметров (например, Таблица 5 «Наименования типов оплаты» в драйвере Штрих-М) и переименовывают стандартные наименования типов оплат под свои нужды (например, меняют «Электронные» или «Кредит» на «Оплата кредита банк Х»).

Выясним причину, почему так делать не стоит:

Согласно требованиям 54-ФЗ, касса отправляет в ОФД не текстовое наименование типа платежа, а строго определенные числовые коды (теги). Всего в ФФД 1.05, 1.1 и 1.2 предусмотрено только 5 типов оплаты (сумм по чеку):

  1. Наличными (тег 1031) — в XML-пакете 1С передается как Cash.
  2. Безналичными (тег 1081, ранее — электронными) — в XML-пакете 1С передается как ElectronicPayment.
  3. Предварительная оплата (зачет аванса) (тег 1215) — в XML передается как PrePayment (или AdvancePayment в старых версиях).
  4. Последующая оплата (в кредит) (тег 1216) — в XML передается как PostPayment (или Credit в старых версиях).
  5. Встречным предоставлением (тег 1217) — в XML передается как Barter (или CashProvision).

Если вы переименуете строку в кассе, на бумажном чеке покупатель действительно увидит нужный вам текст. Однако в электронном чеке, ушедшем в ФНС через ОФД, по-прежнему будет фигурировать стандартный тег. При несовпадении данных на бумажном носителе и в ОФД организация рискует получить крупный штраф при проверке налоговыми органами.

---

Разделяем понятия: «Продажа в кредит» и «Оплата кредита»

Для правильного построения архитектуры взаимодействия 1С и ККТ нам необходимо четко разделять два совершенно разных этапа сделки по методологии ФНС.

Этап 1: Передача товара без оплаты (Покупка в кредит)

Покупатель забирает товар здесь и сейчас, но реальных денег в кассу или на расчетный счет вы еще не получили (например, ждете выплаты от банка по кредитному договору).

Рассмотрим, как должен выглядеть фискальный чек в этом случае:

В XML-пакете 1С это выглядит следующим образом:


// Формирование блока оплат для ККТ при передаче товара в кредит
ЗаписьXML.ЗаписатьАтрибут("Cash"             , XMLСтрока(СуммаНаличными)); // Первоначальный взнос налом, если есть
ЗаписьXML.ЗаписатьАтрибут("ElectronicPayment", XMLСтрока(СуммаЭлектронными)); // Первоначальный взнос картой, если есть
ЗаписьXML.ЗаписатьАтрибут("PostPayment"      , XMLСтрока(СуммаВКредит)); // Сумма, уходящая в кредит (тег 1216)

Этап 2: Погашение кредита (Оплата кредита)

Этот этап наступает, когда клиент (или банк за него) вносит реальные денежные средства в счет погашения ранее выданного кредита. Здесь оформляется совершенно другой чек:

Проанализируем ситуацию: на втором этапе мы ни в коем случае не должны передавать тип оплаты как «Кредит» (PostPayment), иначе мы не зафиксируем реальный приход денег, а лишь увеличим сумму виртуального долга.

---

Как передать произвольный текст (номер договора) в чек легально?

Если бухгалтерия требует выводить на чеке специфическую информацию (номер кредитного договора, ФИО заемщика или марку банковской карты), мы можем пойти двумя законными путями.

Способ 1. Использование нефискальных текстовых строк

Практически все современные драйверы ККТ (включая Штрих-М и Атол) поддерживают печать нефискального текста внутри чека. Эти строки не отправляются в ОФД, не влияют на фискальные итоги, но физически выводятся на чековую ленту.

Разберем пример добавления текстовой строки в XML-пакет чека при использовании БСП (Библиотеки стандартных подсистем) в 1С:


// Добавляем информационную текстовую строку в состав позиций чека
ЗаписьXML.ЗаписатьСтартЭлемента("TextString");
ЗаписьXML.ЗаписатьАтрибут("Text", "Кредитный договор № КР-00125/24");
ЗаписьXML.ЗаписатьКонецЭлемента();

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

Способ 2. Использование дополнительного реквизита пользователя (Тег 1084)

Согласно требованиям ФФД 1.05 и выше, для передачи произвольных реквизитов (таких как номера договоров или транзакций) выделен специальный фискальный тег 1084 («Дополнительный реквизит пользователя»). Этот реквизит отправляется в ОФД и отображается на чеке.

Для его передачи в XML-пакете 1С предусмотрен атрибут AdditionalAttribute в параметрах чека:


// Передача дополнительного реквизита в параметрах фискального документа
ЗаписьXML.ЗаписатьАтрибут("AdditionalAttribute", "Договор кредита № КР-00125/24");

---

Пошаговый пример реализации формирования чека в 1С

Рассмотрим по шагам, как программно сформировать структуру XML-пакета для ККТ (компоненты версии 2.x/3.x) при приеме оплаты в счет погашения кредита:


// Функция формирует XML-пакет для печати чека оплаты кредита
Функция СформироватьПакетОплатыКредита(СуммаПлатежа, НомерДоговора, СпособОплаты) Экспорт

    ЗаписьXML = Новый ЗаписьXML;
    ЗаписьXML.УстановитьСтроку("UTF-8");
    
    ЗаписьXML.ЗаписатьОбъявлениеXML();
    ЗаписьXML.ЗаписатьСтартЭлемента("CheckPackage");
    
    // Описываем параметры самого фискального документа
    ЗаписьXML.ЗаписатьСтартЭлемента("Parameters");
    ЗаписьXML.ЗаписатьАтрибут("CashierName", "Иванова А.А.");
    ЗаписьXML.ЗаписатьАтрибут("OperationType", "1"); // 1 - Приход
    ЗаписьXML.ЗаписатьАтрибут("TaxVariant", "1"); // Система налогообложения
    // Используем официальный тег 1084 для номера договора
    ЗаписьXML.ЗаписатьАтрибут("AdditionalAttribute", "Оплата по договору " + НомерДоговора);
    ЗаписьXML.ЗаписатьКонецЭлемента(); // Parameters
    
    // Описываем товарные позиции чека (в нашем случае - услуга платежа)
    ЗаписьXML.ЗаписатьСтартЭлемента("Positions");
    ЗаписьXML.ЗаписатьСтартЭлемента("FiscalString");
    ЗаписьXML.ЗаписатьАтрибут("Name", "Погашение обязательств по договору " + НомерДоговора);
    ЗаписьXML.ЗаписатьАтрибут("Quantity", "1");
    ЗаписьXML.ЗаписатьАтрибут("Price", XMLСтрока(СуммаПлатежа));
    ЗаписьXML.ЗаписатьАтрибут("Amount", XMLСтрока(СуммаПлатежа));
    ЗаписьXML.ЗаписатьАтрибут("Department", "1");
    ЗаписьXML.ЗаписатьАтрибут("TaxRate", "none"); // Без НДС
    
    // Важно: Указываем признак способа расчета - Оплата кредита (значение 7)
    ЗаписьXML.ЗаписатьАтрибут("SignMethodCalculation", "7"); 
    // Признак предмета расчета - Платеж (значение 10)
    ЗаписьXML.ЗаписатьАтрибут("SignSubjectCalculation", "10"); 
    
    ЗаписьXML.ЗаписатьКонецЭлемента(); // FiscalString
    
    // Добавим нефискальную строку для визуальной красоты на чековой ленте
    ЗаписьXML.ЗаписатьСтартЭлемента("TextString");
    ЗаписьXML.ЗаписатьАтрибут("Text", "ПОЛУЧЕНО В СЧЕТ ПОГАШЕНИЯ КРЕДИТА");
    ЗаписьXML.ЗаписатьКонецЭлемента(); // TextString
    
    ЗаписьXML.ЗаписатьКонецЭлемента(); // Positions
    
    // Описываем фактический платеж (нал или карта)
    ЗаписьXML.ЗаписатьСтартЭлемента("Payments");
    Если СпособОплаты = "Наличные" Тогда
        ЗаписьXML.ЗаписатьАтрибут("Cash", XMLСтрока(СуммаПлатежа));
    ИначеЕсли СпособОплаты = "Карта" Тогда
        ЗаписьXML.ЗаписатьАтрибут("ElectronicPayment", XMLСтрока(СуммаПлатежа));
    КонецЕсли;
    ЗаписьXML.ЗаписатьКонецЭлемента(); // Payments
    
    ЗаписьXML.ЗаписатьКонецЭлемента(); // CheckPackage
    
    Возврат ЗаписьXML.Закрыть();

КонецФункции

Используя приведенный шаблон, мы получаем абсолютно легальный чек, который без проблем пройдет проверки ОФД и ФНС. В ОФД уйдет корректная информация о приходе реальных денежных средств (нал или безнал) с указанием того, что эта транзакция закрывает ранее выданный кредит по конкретному договору. На бумажном же чеке покупатель увидит всю необходимую текстовую информацию, подтверждающую внесение средств по кредитному обязательству.

← На главную