Как настроить вывод вида оплаты Кредит в чеке ККТ для 1С:УТ 10.3

Программист 1С:Управление торговлей Управленческий учет Торговля и дистрибуция
← На главную

При работе с онлайн-кассами в старых редакциях программ, таких как 1С:Управление торговлей 10.3, программисты часто сталкиваются с проблемой некорректного отображения видов оплаты на бумажном чеке. Типичная ситуация: в программе выбран вид оплаты «Кредит», но на чеке печатается «Плат. карта» или «Безналичными». Проанализируем, почему это происходит, как устроена структура XML-пакета для фискализации и как заставить драйвер ККТ (например, Штрих-М) выводить правильные наименования.

Разбираем структуру XML-пакета для фискализации

Для начала рассмотрим, как 1С передает данные о платежах в драйвер кассы. Основную роль играет секция <Payments>. Посмотрим на пример стандартного пакета, который генерирует 1С:


<Payments Cash="0" ElectronicPayment="1" Credit="0" AdvancePayment="0" CashProvision="0"/>

В этом блоке атрибуты соответствуют типам оплаты согласно ФФД (Формату фискальных данных):

  1. Cash — оплата наличными (тег 1031).
  2. ElectronicPayment — безналичная оплата (тег 1081). Сюда входят карты, переводы и прочие электронные способы.
  3. Credit — последующая оплата, то есть продажа в кредит (тег 1030).
  4. AdvancePayment — аванс или предоплата (тег 1037).
  5. CashProvision — оплата встречным предоставлением (тег 1038).

Если мы хотим, чтобы касса зафиксировала продажу именно как «Кредит» (без фактического поступления денег в момент отгрузки), нам необходимо изменить значения в этом узле. Рассмотрим правильный вариант формирования узла для кредитной сделки:


<Payments Cash="0" ElectronicPayment="0" Credit="100.00" AdvancePayment="0" CashProvision="0"/>

В данном случае сумма 100.00 передается в атрибут Credit, что сигнализирует кассе о возникновении задолженности покупателя перед организацией.

Проблема подмены наименований в драйвере Штрих-М

Часто возникает ситуация: даже если мы передали ElectronicPayment="1", на чеке вместо «Безналичными» печатается «Плат. карта». Это связано с тем, что в драйверах ККТ (особенно Штрих-М) существует внутренняя таблица наименований типов оплат. Выясним причину, почему настройки, сделанные вручную в «Тесте драйвера», могут сбрасываться.

Проанализируем механизм работы интеграционной компоненты 1С. При каждом открытии смены или даже при каждой печати чека 1С выполняет метод УстановитьПараметры. В современных версиях библиотек подключаемого оборудования (БПО) реализована принудительная синхронизация таблиц кассы с настройками в 1С. Если в базе 1С в параметрах оборудования жестко прописано соответствие типов оплат, программа будет каждый раз перезаписывать Таблицу №17 (Наименования типов оплат) в памяти ККТ.

Чтобы решить эту проблему, выполним следующие шаги:

  1. Зайдем в настройки подключаемого оборудования в интерфейсе 1С.
  2. Найдем вкладку или кнопку «Параметры устройства».
  3. В открывшемся окне найдем таблицу соответствия типов оплат. Именно там нужно изменить название «Плат. карта» на «Безналичными» или «Кредит» для соответствующего индекса.

Различие между признаком способа расчета и видом оплаты

Важно не путать вид оплаты (наличные/безналичные) и признак способа расчета (тег 1214). В XML-пакете 1С признак способа расчета передается внутри каждой позиции <FiscalString> в параметре SignMethodCalculation.

Разберем основные значения SignMethodCalculation:

Рассмотрим пример строки позиции для отгрузки товара в кредит:


<FiscalString Name="Товар" Quantity="1" PriceWithDiscount="100" SumWithDiscount="100" ... SignMethodCalculation="6" SignCalculationObject="1" />

Здесь SignMethodCalculation="6" говорит о том, что товар передается в кредит. При этом в блоке <Payments> сумма должна стоять в атрибуте Credit.

Особенности учета банковских кредитов

Ситуация усложняется, когда покупатель берет кредит в банке. С точки зрения ФЗ-54, это двухэтапная операция. Рассмотрим ее подробнее:

Этап 1: Отгрузка товара. Покупатель оформляет кредит, банк еще не перечислил деньги, но товар мы отдаем. В этот момент печатается первый чек. Признак способа расчета: ПЕРЕДАЧА В КРЕДИТ (6). Тип оплаты в чеке: ПОСЛЕДУЮЩАЯ ОПЛАТА (КРЕДИТ).

Этап 2: Поступление денег от банка. Когда банк перечисляет средства на расчетный счет организации, мы обязаны пробить второй чек на «Оплату кредита». Признак способа расчета: ОПЛАТА КРЕДИТА (7). Тип оплаты в чеке: БЕЗНАЛИЧНЫМИ (т.к. деньги пришли от юрлица/банка).

В УТ 10.3 для реализации этой схемы часто требуется доработка кода. Разберем, где именно формируется XML. Обычно это происходит в общем модуле МенеджерОборудованияВызовСервера или в обработке обслуживания драйвера. Нам нужно найти функцию ПолучитьXMLПакетДляФискализацияЧека и проанализировать, как заполняется структура ОбъектЧека.

Пример кода для программного разделения типов оплат в обработке формирования чека:


// Пример заполнения таблицы оплат для XML
ТаблицаОплат = Новый ТаблицаЗначений;
ТаблицаОплат.Колонки.Добавить("ТипОплаты"); // 0-нал, 1-безнал, 2-кредит
ТаблицаОплат.Колонки.Добавить("Сумма");

Если СпособОплатыПоДокументу = Перечисления.ВидыОплатЧека.Кредит Тогда
    НоваяСтрока = ТаблицаОплат.Добавить();
    НоваяСтрока.ТипОплаты = 2; // Соответствует атрибуту Credit в XML
    НоваяСтрока.Сумма = СуммаДокумента;
Иначе
    // Стандартная логика
КонецЕсли;

Подведем итоги

Чтобы в чеке корректно отображался вид оплаты «Кредит», необходимо соблюдение трех условий:

  1. Корректный XML: Сумма должна попадать в атрибут Credit узла Payments.
  2. Настройка драйвера: Наименования в таблице типов оплат ККТ должны соответствовать законодательству (Безналичными / Кредит).
  3. Синхронизация с 1С: Названия типов оплат должны быть прописаны в настройках оборудования в самой 1С, чтобы программа не перезаписывала их на значения по умолчанию.

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

← На главную