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