При работе с контрольно-кассовой техникой АТОЛ (в частности, моделью 11Ф) программисты часто сталкиваются с неприятной ситуацией: при попытке пробить чек с безналичной оплатой в фискальном документе вместо привычного «Электронными» или «Безналичными» печатается текст «Последующая оплата (кредит)». Эта проблема особенно актуальна для конфигураций на базе 1С, использующих Библиотеку подключаемого оборудования (БПО), и связана с изменением логики обработки типов оплаты в формате фискальных данных (ФФД) 1.05.
В данной статье мы подробно разберем причины возникновения этой ошибки, проанализируем, как версии драйверов и прошивок влияют на результат, и рассмотрим несколько способов решения — от простых «костылей» до правильной настройки обмена данными.
Разберем ситуацию: в старых версиях прошивок ККТ и драйверов (ДТО 8) нумерация типов оплаты была достаточно простой. Значение 0 соответствовало наличным, а значение 1 — безналичным (электронным). Однако с введением формата ФФД 1.05 структура типов оплат в ККТ АТОЛ жестко зафиксировалась. Теперь касса ожидает следующие индексы:
Проблема заключается в том, что при обновлении прошивки кассы до версии, поддерживающей ФФД 1.05, или при смене драйверов на версию 9.х/10.х, индексы, которые передает 1С, могут интерпретироваться драйвером иначе. Если ваша обработка или версия БПО сформирует XML-пакет, где тип оплаты указан неверно или не соответствует внутренней таблице кассы, устройство подставит значение по умолчанию, которым часто оказывается именно «Кредит».
Проанализируем самый быстрый способ решения для самописных конфигураций. Если вы используете формирование структуры оплаты вручную, попробуйте изменить передаваемый индекс. Как показывает практика многих разработчиков, в некоторых связках «драйвер-прошивка» значение 1 ошибочно вызывает кредит, а значение 2 — безналичные.
Рассмотрим пример кода, который часто используется в самописных решениях на БПО:
// Для наличных оплат используем стандартный индекс 0
Если СуммаНалички > 0 Тогда
СтрокаОплаты = Новый Структура;
СтрокаОплаты.Вставить("ТипОплаты", 0); // Наличные
СтрокаОплаты.Вставить("Наименование", "Наличными");
СтрокаОплаты.Вставить("Сумма", СуммаНалички);
ОбщиеПараметры.ТаблицаОплат.Добавить(СтрокаОплаты);
КонецЕсли;
// Для безналичных оплат попробуем индекс 2 вместо 1
Если Объект.ПолученоБезНал > 0 Тогда
СтрокаОплаты = Новый Структура;
СтрокаОплаты.Вставить("ТипОплаты", 2); // Было 1, пробуем 2 для обхода ошибки с кредитом
СтрокаОплаты.Вставить("Наименование", "Электронными");
СтрокаОплаты.Вставить("Сумма", Объект.ПолученоБезНал);
ОбщиеПараметры.ТаблицаОплат.Добавить(СтрокаОплаты);
КонецЕсли;
Важный момент: этот метод является «околонаучным тыком» и может перестать работать при следующем обновлении драйвера. Однако, если время поджимает, это рабочая временная мера.
Если проблема возникла в типовой конфигурации (например, 1С:Розница 2.2), причина может крыться в формировании XML-строки, которая отправляется драйверу. Проанализируем ситуацию: функция ПолучитьXMLПакетДляФискализацияЧека собирает данные, и если в ней жестко прописаны старые соответствия, касса будет печатать «Кредит».
Выясним, как внести изменения в модуль МенеджерОборудованияВызовСервера. Нам нужно найти место, где формируются данные чека, и убедиться, что для безналичной оплаты подставляется корректный тип. В некоторых случаях помогает принудительная замена типа оплаты в самом конце формирования пакета.
Посмотрим на пример логики исправления в 1С:
// В функции формирования XML пакета находим обход таблицы оплат
Для Каждого СтрокаОплаты Из ОбщиеПараметры.ТаблицаОплат Цикл
// Если мы видим тип оплаты Безналичные (обычно 1 в БПО)
// но касса воспринимает его как кредит, проверяем версию ФФД
Если СтрокаОплаты.ТипОплаты = 1 Тогда
// Возможно, ваша касса на ФФД 1.05 требует тег CashLessType со значением 2
// или специфический атрибут Type в XML
КонецЕсли;
КонецЦикла;
Также обратите внимание на специфику обработки ATOL_KKM_1C82_54FZ. Иногда сумма безналичных передается в теге CashLessType1, но из-за особенностей прошивки драйвер ожидает её в CashLessType2. Это часто встречается при использовании ДТО 8.15 или 8.16.
Разберем самый правильный, но трудозатратный способ. Проблема со «съехавшими» индексами часто лечится переходом на ДТО 10.х и обновлением Библиотеки подключаемого оборудования (БПО) в самой 1С.
Часто вместе с проблемой типов оплаты «вылезает» ошибка со ставками НДС (например, печатается 18% или 20% вместо 0%). Это происходит по той же причине: 1С передает номер строки из таблицы налогов ККТ, а не саму ставку. В старых прошивках под индексом «1» мог быть НДС 0%, а в новых там стоит НДС 18/20%.
Проанализируем, как это исправить:
Подведем итоги. Если ваш АТОЛ 11Ф начал печатать «Кредит» вместо «Безналичных», выполните следующие действия:
ТипОплаты с 1 на 2.CashLessType и соответствие типа оплаты версии ФФД.Помните: работа с торговым оборудованием требует осторожности. Перед внесением изменений в программный код всегда делайте копию базы и проверяйте печать чеков на тестовых позициях с минимальной суммой (например, 1 рубль), чтобы не аннулировать ошибочные чеки на крупные суммы в ОФД.