Как настроить соответствие видов оплаты между 1С:Розница и ККТ АТОЛ для корректного пробития чеков?

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

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

В данной статье мы разберем, как технически устроено взаимодействие 1С:Розницы с драйверами АТОЛ, и рассмотрим несколько способов настройки корректного соответствия видов оплаты.

Разбор механизма передачи данных в ККТ

Когда мы нажимаем кнопку «Пробить чек» в интерфейсе РМК (Рабочее место кассира), система формирует специальный массив или структуру данных, которую затем передает в Библиотеку подключаемого оборудования (БПО). БПО, в свою очередь, формирует XML-пакет, который драйвер ККТ интерпретирует и отправляет на печать. Основная сложность заключается в том, что для ККТ АТОЛ важен числовой индекс типа оплаты. По умолчанию в большинстве настроек принято следующее распределение:

  1. 0 — Наличные.
  2. 1 — Безналичные (Электронные).
  3. 2 — Предварительная оплата (Аванс).
  4. 3 — Последующая оплата (Кредит).
  5. 4 — Иная форма оплаты (Встречное предоставление).

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

Способ 1: Программная корректировка в модуле менеджера

Проанализируем ситуацию, когда необходимо жестко задать соответствие типов оплат в коде конфигурации. Для этого нам потребуется обратиться к модулю менеджера документа ЧекККМ. Именно там формируется таблица оплат перед отправкой на устройство.

Рассмотрим пример кода, который позволяет явно указать драйверу, какой индекс использовать для каждого типа перечисления ТипыОплатЧекаККМ. Мы находим нужную строку в таблице оплат и вставляем в структуру СтрокаОплаты параметр ТипОплаты с соответствующим числом.


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

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

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

Важный нюанс: Перед внесением изменений в код обязательно проверьте настройки в самом драйвере АТОЛ (через "Тест драйвера"). Там в разделе «Настройки» -> «Типы оплат» можно увидеть, под каким номером числится то или иное название.

Способ 2: Использование расширения для подмены XML-пакета

Если вы работаете с современными версиями 1С, крайне не рекомендуется изменять типовую конфигурацию. Вместо этого лучше использовать механизм расширений. Современная БПО при работе с ККТ формирует XML. Проблема часто кроется в том, что драйвер 8-й или 10-й версии ожидает разные наименования узлов (например, CashLess1, CashLess2).

Выясним причину, по которой штатная настройка может не работать: 1С может отправлять все виды безналичных оплат в один узел XML. С помощью расширения мы можем перехватить процедуру формирования XML и заменить значения. Например, если мы видим, что в чеке присутствует оплата кредитом, мы принудительно меняем индекс в XML-структуре перед вызовом метода СформироватьЧек.

Проанализируем логику: в расширении для процедуры ПодготовитьДанныеДляЧека (или аналогичной в зависимости от версии БПО) мы можем выполнить поиск по строке XML и заменить идентификатор оплаты с 1 на 3.

Способ 3: Настройка таблиц в драйвере АТОЛ

Иногда проблему можно решить без программирования в 1С, настроив само оборудование. В драйверах АТОЛ есть возможность переименовать типы оплат. Рассмотрим, как это сделать:

  1. Запустите «Тест драйвера ККТ».
  2. Перейдите в раздел «Программирование» или «Таблицы» (зависит от версии).
  3. Найдите таблицу «Типы оплат».
  4. Проверьте наименования для индексов. Бывают случаи, когда разработчики 1С жестко привязали код 1 к «Платежной карте», а в кассе под кодом 1 значится «Электронными». Если переименовать тип оплаты в кассе так, как его ожидает 1С, или наоборот, синхронизация восстановится.

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

Специфика ФФД и признак способа расчета

Важно различать вид оплаты (чем платит клиент: деньгами или обещанием заплатить позже) и признак способа расчета (тег 1214). Если клиент покупает товар в кредит без первоначального взноса, то сумма по типу оплаты «Наличные» и «Карта» будет равна нулю, а вся сумма пойдет в тип оплаты «Кредит» (последующая оплата). При этом сам фискальный признак способа расчета должен иметь значение «ПЕРЕДАЧА В КРЕДИТ».

В 1С:Розница за это отвечают настройки в справочнике Виды оплат. Убедитесь, что для кредитной оплаты выбран правильный тип из системного списка перечислений. В последних релизах Розницы (2.3+) появилась возможность более гибкой настройки сопоставления в самой карточке подключаемого оборудования, где можно вручную проставить индексы для различных типов безналичных расчетов.

Резюмируем: если стандартная настройка в «Подключаемом оборудовании» не дает результата, проверьте сначала соответствие индексов в «Тесте драйвера», а затем используйте либо программную правку структуры ТаблицаОплат в модуле менеджера, либо корректировку XML-пакета через расширение.

← На главную