Как пробить чек на продажу в кредит на кассах Штрих-М по формату ФФД 1.05 в 1С?

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

При переходе на формат фискальных данных ФФД 1.05 и обновлении прошивок ККТ возникает задача корректного оформления продаж в кредит и рассрочку. Часто разработчики сталкиваются с ситуацией, когда сумма кредита закрывается как безналичная оплата (платежная карта) либо драйвер ККТ выдает ошибку несоответствия сумм. Разберем по шагам, как правильно подготовить структуру данных в 1С, заполнить признаки способа расчета и сформировать XML-пакет фискализации для касс производителя Штрих-М.

Различие видов оплат и признаков расчета в ФФД 1.05

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

  1. Cash — наличная оплата;
  2. ElectronicPayment — безналичная оплата (платежные карты, эквайринг);
  3. AdvancePayment — сумма предоплаты (зачет аванса или ранее внесенной предоплаты);
  4. Credit — постоплата (продажа в кредит или рассрочку продавца);
  5. CashProvision — встречное предоставление (товарообмен, подарочные сертификаты).

Также ключевую роль играет реквизит позиции чека Признак способа расчета (тег 1214):

  1. Передача без оплаты (значение 6) — используется при полной передаче товара в кредит без первоначального взноса;
  2. Передача с частичной оплатой (значение 5) — применяется, если покупатель вносит часть суммы (наличными или картой), а остаток оформляется в кредит;
  3. Оплата кредита (значение 7) — оформляется вторым чеком в момент внесения покупателем очередного платежа или окончательного расчета за ранее переданный товар.

Шаг 1. Заполнение таблицы оплат в 1С

Проанализируем частую ошибку: если сумма кредита добавляется в таблицу оплат с типом Электронно, драйвер фискализирует весь чек как оплату банковской картой. Чтобы сумма попала в фискальный реквизит кредита (тег 1216), необходимо явно указывать тип оплаты постоплатой.

Рассмотрим пример формирования таблицы оплат для документа продажи:


// Оплата наличными
СуммаТипаОплатыНаличные = ПолучитьСуммуНаличнойОплаты(ЧекККМ);
Если СуммаТипаОплатыНаличные <> 0 Тогда
    СтрокаОплаты = Новый Структура();
    СтрокаОплаты.Вставить("ТипОплаты", ПредопределенноеЗначение("Перечисление.ТипыОплатыККТ.Наличные"));
    СтрокаОплаты.Вставить("Наименование", "Наличная оплата");
    СтрокаОплаты.Вставить("Сумма", СуммаТипаОплатыНаличные);
    ОбщиеПараметры.ТаблицаОплат.Добавить(СтрокаОплаты);
КонецЕсли;

// Оплата платежной картой (эквайринг)
СуммаТипаОплатыПлатежнойКартой = ПолучитьСуммуОплатыПлатежнойКартой(ЧекККМ);
Если СуммаТипаОплатыПлатежнойКартой <> 0 Тогда
    СтрокаОплаты = Новый Структура();
    СтрокаОплаты.Вставить("ТипОплаты", ПредопределенноеЗначение("Перечисление.ТипыОплатыККТ.Электронно"));
    СтрокаОплаты.Вставить("Наименование", "Платежная карта");
    СтрокаОплаты.Вставить("Сумма", СуммаТипаОплатыПлатежнойКартой);
    ОбщиеПараметры.ТаблицаОплат.Добавить(СтрокаОплаты);
КонецЕсли;

// Продажа в кредит / рассрочку
СуммаТипаОплатыКредит = ПолучитьСуммуКредита(ЧекККМ);
Если СуммаТипаОплатыКредит <> 0 Тогда
    СтрокаОплаты = Новый Структура();
    СтрокаОплаты.Вставить("ТипОплаты", ПредопределенноеЗначение("Перечисление.ТипыОплатыККТ.Постоплата"));
    СтрокаОплаты.Вставить("Наименование", "Кредит");
    СтрокаОплаты.Вставить("Сумма", СуммаТипаОплатыКредит);
    ОбщиеПараметры.ТаблицаОплат.Добавить(СтрокаОплаты);
КонецЕсли;

Шаг 2. Формирование строк товарных позиций чека

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

Посмотрим на алгоритм заполнения товарных позиций:


Для Каждого СтрокаТовара Из ЧекККМ.Товары Цикл

    СтрокаЧека = МенеджерОборудованияКлиентСервер.ПараметрыФискальнойСтрокиЧека();
    СтрокаЧека.Количество = СтрокаТовара.Количество;
    СтрокаЧека.Цена = СтрокаТовара.Цена;
    СтрокаЧека.ЦенаСоСкидками = СтрокаТовара.Сумма / СтрокаТовара.Количество;
    СтрокаЧека.Сумма = СтрокаТовара.Сумма; // Всегда полная сумма с учетом скидок!
    
    СтрокаЧека.ПризнакПредметаРасчета = ПредопределенноеЗначение("Перечисление.ПризнакиПредметаРасчета.Товар");
    
    // Определяем признак способа расчета
    Если ЧекККМ.СуммаКредита = ЧекККМ.СуммаДокумента Тогда
        // 100% кредит без первого взноса
        СтрокаЧека.ПризнакСпособаРасчета = ПредопределенноеЗначение("Перечисление.ПризнакиСпособаРасчета.ПередачаБезОплаты");
    ИначеЕсли ЧекККМ.СуммаКредита > 0 Тогда
        // Частичная оплата (аванс/взнос + кредит)
        СтрокаЧека.ПризнакСпособаРасчета = ПредопределенноеЗначение("Перечисление.ПризнакиСпособаРасчета.ПередачаСЧастичнойОплатой");
    Иначе
        // Обычная продажа со 100% оплатой
        СтрокаЧека.ПризнакСпособаРасчета = ПредопределенноеЗначение("Перечисление.ПризнакиСпособаРасчета.ПередачаСПолнойОплатой");
    КонецЕсли;

    ОбщиеПараметры.ПозицииЧека.Добавить(СтрокаЧека);

КонецЦикла;

Шаг 3. Подготовка XML-пакета фискализации (БПО)

При передаче чека в интеграционную компоненту драйвера Штрих-М формируется XML-пакет. В функции ПолучитьXMLПакетДляФискализацияЧека распределение сумм по атрибутам зависит от версии ФФД:


Если ВерсияФФД > 0 Тогда // Формат ФФД 1.0.5
    ЗаписьXML.ЗаписатьАтрибут("Cash"             , XMLСтрока(СуммаНаличными));
    ЗаписьXML.ЗаписатьАтрибут("ElectronicPayment", XMLСтрока(СуммаЭлектронными));
    ЗаписьXML.ЗаписатьАтрибут("Credit"           , XMLСтрока(СуммаПостоплатой));
    ЗаписьXML.ЗаписатьАтрибут("AdvancePayment"   , XMLСтрока(СуммаПредоплатой));
    ЗаписьXML.ЗаписатьАтрибут("CashProvision"    , XMLСтрока(СуммаПредоставлением));
Иначе // Формат ФФД 1.0
    ЗаписьXML.ЗаписатьАтрибут("Cash"             , XMLСтрока(СуммаНаличными));
    ЗаписьXML.ЗаписатьАтрибут("ElectronicPayment", XMLСтрока(СуммаЭлектронными + СуммаПостоплатой + СуммаПредоплатой + СуммаПредоставлением));
КонецЕсли;

При корректной передаче для кредитного чека результирующий XML-пакет будет выглядеть следующим образом:


<?xml version="1.0" encoding="UTF-8"?>
<CheckPackage>
    <Parameters PaymentType="1" TaxVariant="0" CashierName="Иванов И.И."/>
    <Positions>
        <FiscalString Name="Холодильник" Quantity="1" PriceWithDiscount="30000" SumWithDiscount="30000" Department="1" Tax="none" SignMethodCalculation="6" SignCalculationObject="1"/>
    </Positions>
    <Payments Cash="0" ElectronicPayment="0" Credit="30000" AdvancePayment="0" CashProvision="0"/>
</CheckPackage>

Особенности отображения на чековой ленте Штрих-М

Разберем визуальные особенности напечатанного чека:

  1. Строка «Последующая оплата (КРЕДИТ)»: появление такой надписи на бумажном чеке является нормальным штатным поведением прошивок Штрих-М под ФФД 1.05. Именно так ККТ расшифровывает реквизит постоплаты (тег 1216).
  2. НДС при передаче в кредит: в момент передачи товара НДС рассчитывается и фиксируется со всей стоимости товара (по ставке 20%, 10% и т.д.), так как факт реализации и переход права собственности уже произошли.
  3. НДС при последующей оплате долга: когда покупатель приходит погашать кредит (признак способа расчета 7, признак предмета расчета 10 — платеж), в чеке на оплату кредита ставка НДС всегда должна указываться как «Без НДС» (Tax = none), чтобы избежать повторного начисления налога.
  4. POS-кредит через банк: если покупатель оформил потребительский кредит у банка-партнера, и банк напрямую перечисляет магазину денежные средства, операция с точки зрения кассы оформляется не как постоплата, а как обычная безналичная продажа (признак 4 — «Полный расчет», оплата — ElectronicPayment).
← На главную