В статье infostart.ru/public/259667 я делился опытом подключения POS терминала Hypercom Optimum T4220 К Рознице 1.0 Финальным аккордом являлась успешная интеграция. Да не тут то было! при тестировании было выявлено, что возврат по кассе не проходил, но по пос терминалу он был успешно авторизован. Оставалось разобраться в чем дело. на стороне терминала проблем нет - сумма возврата успешно уходила на карту. Пришла в голову идея проверить как отрабатывает возврат при оплате наличными. Анализ ТИПОВОГО исходного кода показал странные моменты в коде. Расскажу по подробнее.
В модуле объекта документа ЧекККМ присутствует Функция ПолучитьСтрокиРасхожденияПоОплатеСЧекомПродажи(ДанныеДокумента) Экспорт
Данный код отрабатывает при возврате. Не могу детально рассказать что она делает, но меня смутил вот этот код:
Если Не ЗначениеЗаполнено(СтрокаТаблицыЗначений.ВидОплаты) ИЛИ СтрокаТаблицыЗначений.ВидОплаты.ТипОплаты = Перечисления.ТипыОплатЧекаККМ.Наличные ИЛИ СтрокаТаблицыЗначений.ВидОплаты = Справочники.ВидыОплатЧекаККМ.ОплатаПодарочнымСертификатом Тогда ТаблицаОплат.Удалить(СтрокаТаблицыЗначений); КонецЕсли;
Как мы видим, в проверке возврата видно что имеются перечисления возврата ч/з наличные и подарочный сертификат. Помимо этого, чуть ниже этого кода есть запрос, в котором указаны точно такие же условия(отрывок запроса):
| ГДЕ | ЧекККМОплата.Ссылка = &ДокументОснование | И ЧекККМОплата.ВидОплаты.ТипОплаты <> ЗНАЧЕНИЕ(Перечисление.ТипыОплатЧекаККМ.Наличные) | И (НЕ ЧекККМОплата.ВидОплаты = ЗНАЧЕНИЕ(Справочник.ВидыОплатЧекаККМ.ОплатаПодарочнымСертификатом))
Как мы видим ни про какое перечисление платежной картой здесь нет..ради интереса добавим его:
Если Не ЗначениеЗаполнено(СтрокаТаблицыЗначений.ВидОплаты) ИЛИ СтрокаТаблицыЗначений.ВидОплаты.ТипОплаты = Перечисления.ТипыОплатЧекаККМ.Наличные ИЛИ СтрокаТаблицыЗначений.ВидОплаты.ТипОплаты = Перечисления.ТипыОплатЧекаККМ.ПлатежнаяКарта ИЛИ СтрокаТаблицыЗначений.ВидОплаты = Справочники.ВидыОплатЧекаККМ.ОплатаПодарочнымСертификатом Тогда ТаблицаОплат.Удалить(СтрокаТаблицыЗначений); КонецЕсли;
И в запрос:
| ГДЕ | ЧекККМОплата.Ссылка = &ДокументОснование | И ЧекККМОплата.ВидОплаты.ТипОплаты <> ЗНАЧЕНИЕ(Перечисление.ТипыОплатЧекаККМ.Наличные) | И ЧекККМОплата.ВидОплаты.ТипОплаты <> ЗНАЧЕНИЕ(Перечисление.ТипыОплатЧекаККМ.ПлатежнаяКарта) | И (НЕ ЧекККМОплата.ВидОплаты = ЗНАЧЕНИЕ(Справочник.ВидыОплатЧекаККМ.ОплатаПодарочнымСертификатом))
и вуаля! возврат успешно прошел! Не могу с уверенностью сказать нашел ли я изъян в рознице или просто что то не понял, но сейчас возврат заработал. Возможно, точно такая же проблема присутствует в Рознице 2.0, а быть может и в УТ..надо смотреть