В процессе автоматизации розничной торговли часто возникает задача расширения перечня способов оплаты. Помимо стандартных наличных и оплаты банковской картой, бизнес часто внедряет продажи в кредит, использование подарочных сертификатов или авансовые платежи. Однако при пробитии чека на ККТ АТОЛ многие сталкиваются с проблемой: независимо от выбранного в 1С способа «Кредит», в чеке печатается «Платежная карта» или вовсе «Наличные». Это происходит из-за несоответствия внутренних кодов (индексов) типов оплаты в базе 1С и в прошивке кассового аппарата.
В данной статье мы разберем, как технически устроено взаимодействие 1С:Розницы с драйверами АТОЛ, и рассмотрим несколько способов настройки корректного соответствия видов оплаты.
Когда мы нажимаем кнопку «Пробить чек» в интерфейсе РМК (Рабочее место кассира), система формирует специальный массив или структуру данных, которую затем передает в Библиотеку подключаемого оборудования (БПО). БПО, в свою очередь, формирует XML-пакет, который драйвер ККТ интерпретирует и отправляет на печать. Основная сложность заключается в том, что для ККТ АТОЛ важен числовой индекс типа оплаты. По умолчанию в большинстве настроек принято следующее распределение:
Если в 1С вид оплаты «Кредит» не привязан к индексу «3», касса может по умолчанию использовать индекс «1» (карту), так как это самый частый вид безналичного расчета.
Проанализируем ситуацию, когда необходимо жестко задать соответствие типов оплат в коде конфигурации. Для этого нам потребуется обратиться к модулю менеджера документа ЧекККМ. Именно там формируется таблица оплат перед отправкой на устройство.
Рассмотрим пример кода, который позволяет явно указать драйверу, какой индекс использовать для каждого типа перечисления ТипыОплатЧекаККМ. Мы находим нужную строку в таблице оплат и вставляем в структуру СтрокаОплаты параметр ТипОплаты с соответствующим числом.
// Обработка типа оплаты "Наличные"
СтрокаТаблицы = ТаблицаПоТипамОплат.Найти(Перечисления.ТипыОплатЧекаККМ.Наличные, "ТипОплаты");
Если НЕ СтрокаТаблицы = Неопределено Тогда
СтрокаОплаты = Новый Структура;
СтрокаОплаты.Вставить("ТипОплаты", 0); // Код 0 для АТОЛ
СтрокаОплаты.Вставить("Сумма", СтрокаТаблицы.Сумма);
ОбщиеПараметры.ТаблицаОплат.Добавить(СтрокаОплаты);
КонецЕсли;
// Обработка типа оплаты "Платежная карта"
СтрокаТаблицы = ТаблицаПоТипамОплат.Найти(Перечисления.ТипыОплатЧекаККМ.ПлатежнаяКарта, "ТипОплаты");
Если НЕ СтрокаТаблицы = Неопределено Тогда
СтрокаОплаты = Новый Структура;
СтрокаОплаты.Вставить("ТипОплаты", 1); // Код 1 для АТОЛ
СтрокаОплаты.Вставить("Сумма", СтрокаТаблицы.Сумма);
ОбщиеПараметры.ТаблицаОплат.Добавить(СтрокаОплаты);
КонецЕсли;
// Обработка типа оплаты "Банковский кредит"
СтрокаТаблицы = ТаблицаПоТипамОплат.Найти(Перечисления.ТипыОплатЧекаККМ.БанковскийКредит, "ТипОплаты");
Если НЕ СтрокаТаблицы = Неопределено Тогда
СтрокаОплаты = Новый Структура;
СтрокаОплаты.Вставить("ТипОплаты", 2); // Код 2 может быть Авансом или Кредитом в зависимости от версии драйвера
СтрокаОплаты.Вставить("Сумма", СтрокаТаблицы.Сумма);
ОбщиеПараметры.ТаблицаОплат.Добавить(СтрокаОплаты);
КонецЕсли;
Важный нюанс: Перед внесением изменений в код обязательно проверьте настройки в самом драйвере АТОЛ (через "Тест драйвера"). Там в разделе «Настройки» -> «Типы оплат» можно увидеть, под каким номером числится то или иное название.
Если вы работаете с современными версиями 1С, крайне не рекомендуется изменять типовую конфигурацию. Вместо этого лучше использовать механизм расширений. Современная БПО при работе с ККТ формирует XML. Проблема часто кроется в том, что драйвер 8-й или 10-й версии ожидает разные наименования узлов (например, CashLess1, CashLess2).
Выясним причину, по которой штатная настройка может не работать: 1С может отправлять все виды безналичных оплат в один узел XML. С помощью расширения мы можем перехватить процедуру формирования XML и заменить значения. Например, если мы видим, что в чеке присутствует оплата кредитом, мы принудительно меняем индекс в XML-структуре перед вызовом метода СформироватьЧек.
Проанализируем логику: в расширении для процедуры ПодготовитьДанныеДляЧека (или аналогичной в зависимости от версии БПО) мы можем выполнить поиск по строке XML и заменить идентификатор оплаты с 1 на 3.
Иногда проблему можно решить без программирования в 1С, настроив само оборудование. В драйверах АТОЛ есть возможность переименовать типы оплат. Рассмотрим, как это сделать:
Однако помните, что в новых требованиях ФФД 1.05 и 1.2 названия типов оплат жестко регламентированы законом. Поэтому лучше настраивать передачу правильного индекса из 1С, чем менять названия в кассе.
Важно различать вид оплаты (чем платит клиент: деньгами или обещанием заплатить позже) и признак способа расчета (тег 1214). Если клиент покупает товар в кредит без первоначального взноса, то сумма по типу оплаты «Наличные» и «Карта» будет равна нулю, а вся сумма пойдет в тип оплаты «Кредит» (последующая оплата). При этом сам фискальный признак способа расчета должен иметь значение «ПЕРЕДАЧА В КРЕДИТ».
В 1С:Розница за это отвечают настройки в справочнике Виды оплат. Убедитесь, что для кредитной оплаты выбран правильный тип из системного списка перечислений. В последних релизах Розницы (2.3+) появилась возможность более гибкой настройки сопоставления в самой карточке подключаемого оборудования, где можно вручную проставить индексы для различных типов безналичных расчетов.
Резюмируем: если стандартная настройка в «Подключаемом оборудовании» не дает результата, проверьте сначала соответствие индексов в «Тесте драйвера», а затем используйте либо программную правку структуры ТаблицаОплат в модуле менеджера, либо корректировку XML-пакета через расширение.