В розничной торговле при оформлении возврата товара от покупателя день в день кассиры часто сталкиваются с ситуацией, когда фискальный регистратор печатает чек возврата, но подключенный банковский пинпад не реагирует и не инициирует транзакцию возврата денежных средств на карту покупателя. Разберем архитектурные причины такого поведения конфигурации 1С:Управление торговлей 10.3, разницу между банковскими операциями отмены и возврата, а также рассмотрим программные и штатные способы решения этой задачи.
Проанализируем, почему типовая 1С:Управление торговлей 10.3 не отправляет команду на терминал в интерфейсе РМК:
ЧекККМ с видом операции Чек на возврат изначально проектировался разработчиками «1С» исключительно для возврата наличных денежных средств непосредственно из операционной кассы в течение текущей смены.ЧекККМ в ветке проверки вида операции на возврат отсутствуют обращения к эквайринговой подсистеме торгового оборудования.Возврат товаров от покупателя с последующим созданием документа Оплата от покупателя платежной картой (вид операции Возврат денежных средств покупателю) либо кассир выполняет операцию вручную через меню управления эквайрингом.Перед реализацией программного вызова важно понимать различие двух банковских процедур:
Рассмотрим, как модифицировать код формы документа ЧекККМ, чтобы при закрытии чека на возврат автоматически вызывалась функция работы с эквайринговым терминалом.
Откроем форму документа ЧекККМ и найдем процедуру ЗакрытьЧек. Добавим проверку типа операции и вызов процедуры оплаты картой перед фискализацией чека:
Процедура ЗакрытьЧек(Печать = Ложь)
Перем Ответ;
Перем Паника;
Если ТолькоПросмотр Тогда
Закрыть();
Иначе
Если ВидОперации = Перечисления.ВидыОперацийЧекККМ.Продажа Тогда
Если Не ЧекПробитНаККМ И Товары.Итог("Сумма") > 0 Тогда
ФормаОплат = ПолучитьФорму("ФормаОплатЧека", ЭтаФорма);
Результат = ФормаОплат.ОткрытьМодально();
КонецЕсли;
Иначе
Результат = "Закрыть чек";
КонецЕсли;
Если Результат <> "Закрыть чек" Тогда
Возврат;
Иначе
РучнойРежимПечати = Ложь;
Если УстановленЕНВДОрганизации И КассаККМ.ФормироватьНефискальныеЧеки Тогда
Если КассаККМ.РучнойРежимФормирования Тогда
Если (мФР = Неопределено И Не Печать) Или (мФР <> Неопределено) Тогда
Ответ = Вопрос("Напечатать чек на " + ?(мФР = Неопределено, "принтере", "принтере документов для ЕНВД") + "?", РежимДиалогаВопрос.ДаНетОтмена, , КодВозвратаДиалога.Нет);
Если Ответ = КодВозвратаДиалога.Отмена Тогда
Возврат;
Иначе
Если мФР = Неопределено Тогда
Печать = (Ответ = КодВозвратаДиалога.Да);
Иначе
РучнойРежимПечати = (Ответ = КодВозвратаДиалога.Да);
КонецЕсли;
КонецЕсли;
КонецЕсли;
ИначеЕсли Не Печать Тогда
Печать = (мФР = Неопределено);
КонецЕсли;
КонецЕсли;
// Обработка возврата денег по платежной карте
Если ВидОперации <> Перечисления.ВидыОперацийЧекККМ.Продажа Тогда
Если ЭтотОбъект.Оплата.Количество() > 0 И ЭтотОбъект.Оплата[0].ВидОплаты.Наименование <> "Наличные" Тогда
СуммаВозврата = Товары.Итог("Сумма");
ОплатитьКартой(СуммаВозврата);
КонецЕсли;
КонецЕсли;
СоздатьНовыйЧек = Истина;
Если Не ПровестиИРаспечататьЧек(Ответ, Паника, ЭтаФорма, РучнойРежимПечати) Тогда
ОбщегоНазначения.СообщитьОбОшибке(Ответ);
Если Паника Тогда
Предупреждение("Возможны расхождения ИБ и ленты ФР!", , "Внимание! Критическая ошибка!!!");
Возврат;
КонецЕсли;
КонецЕсли;
Если ЧекПробитНаККМ Или (УстановленЕНВДОрганизации И КассаККМ.ФормироватьНефискальныеЧеки) Тогда
Если Печать Тогда
Печать("Чек");
КонецЕсли;
ДокументОбъект = Документы.ЧекККМ.СоздатьДокумент();
ДокументОбъект.Дата = РабочаяДата;
ПриОткрытии();
Обновить();
КонецЕсли;
КонецЕсли;
КонецЕсли;
КонецПроцедуры
При реализации собственного алгоритма взаимодействия с банковскими терминалами обратим внимание на следующие технические правила:
ОплатитьКартой(). Если транзакция не завершилась успехом, процедуру закрытия чека следует прерывать оператором Возврат.Если внесение изменений в конфигурацию нежелательно, рассмотрим альтернативные варианты:
ЧекККМ с безналичным типом оплаты без прямого обращения к оборудованию.Сервис -> Торговое оборудование -> Управление эквайринговой системой, где кассир может инициировать отмену по номеру чека перед пробитием документа в РМК.