Один из способов решения проблем при работе с интегрированным банковским терминалом в РМК Розница
Всем привет, надеюсь кому-нибудь поможет
При работе с интегрированным банковским терминалом в РМК Розница иногда возникают проблемы, одна из самых неудобных и неприятных, когда при совершении оплаты - денежные средства с карты клиента списываются, а чек продажи не пробивается. Как можно решить данную проблему. К примеру банк эквайринг Сбербанк. В справочнике контрагентов создаем 2 записи - собственно сам Сбербанк и его аналог с названием к примеру "Использовать в случае сбоя Сбербанк". Далее в справочнике Эквайринговые терминалы создаем также 2 записи с привязкой к кассе ККМ, в одной указываем, что используем подключаемое оборудование, а в другой ставим признак "использовать ЭТ без подключения к системе". И теперь при работе в РМК при осуществлении оплаты платежной картой будет осуществляться выбор банковского терминала. И если возникнет сбой, и денежные средства будут списаны с карты покупателя, а завершить оплату штатно не получится, то можно будет пробить чек, выбрав терминал без подключаемого оборудования.
P.S. В публикации данного поста было отказано, по причине "Слишком мал объем для статьи. Можно разместить информацию на форуме." :(
При работе с интегрированным банковским терминалом в РМК Розница иногда возникают проблемы, одна из самых неудобных и неприятных, когда при совершении оплаты - денежные средства с карты клиента списываются, а чек продажи не пробивается. Как можно решить данную проблему. К примеру банк эквайринг Сбербанк. В справочнике контрагентов создаем 2 записи - собственно сам Сбербанк и его аналог с названием к примеру "Использовать в случае сбоя Сбербанк". Далее в справочнике Эквайринговые терминалы создаем также 2 записи с привязкой к кассе ККМ, в одной указываем, что используем подключаемое оборудование, а в другой ставим признак "использовать ЭТ без подключения к системе". И теперь при работе в РМК при осуществлении оплаты платежной картой будет осуществляться выбор банковского терминала. И если возникнет сбой, и денежные средства будут списаны с карты покупателя, а завершить оплату штатно не получится, то можно будет пробить чек, выбрав терминал без подключаемого оборудования.
P.S. В публикации данного поста было отказано, по причине "Слишком мал объем для статьи. Можно разместить информацию на форуме." :(
Прикрепленные файлы:
Ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
&НаКлиенте
Процедура ОповещениеОткрытьФормуВводаЧислаВвестиПарольПробитьБезналичн ый(РезультатОткрытияФормы, ДополнительныеПараметры) Экспорт//фдуч
Если НЕ РезультатОткрытияФормы = Неопределено Тогда
ЧислоВвода = РезультатОткрытияФормы.ВведенноеЧисло;
Если ЧислоВвода<>пароль Тогда
Возврат;
КонецЕсли;
фдЗаполнитьСтрокуОплаты();
ЗаполнитьТаблицуЧеков();
ЗавершитьОплатуТоваров(Ложь);
КонецЕсли;
КонецПроцедуры
&НаСервере
Процедура фдЗаполнитьСтрокуОплаты()//фдуч
фдЭквайринговыйТерминал=Справочники.ЭквайринговыеТерминалы.ПустаяСсылка();
фдВидОплаты=Справочники.ВидыОплатЧекаККМ.ПустаяСсылка();
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ РАЗРЕШЕННЫЕ
| ЭквайринговыеТерминалыТарифыЗаРасчетноеОбслуживание.Ссылка КАК ЭквайринговыйТерминал,
| ЭквайринговыеТерминалыТарифыЗаРасчетноеОбслуживание.ВидОплаты КАК ВидОплаты
|ИЗ
| Справочник.ЭквайринговыеТерминалы.ТарифыЗаРасчетноеОбслуживание КАК ЭквайринговыеТерминалыТарифыЗаРасчетноеОбслуживание
|ГДЕ
| ЭквайринговыеТерминалыТарифыЗаРасчетноеОбслуживание.Ссылка.Касса = &КассаККМ
| И ЭквайринговыеТерминалыТарифыЗаРасчетноеОбслуживание.Ссылка.Организация = &Организация
| И НЕ ЭквайринговыеТерминалыТарифыЗаРасчетноеОбслуживание.Ссылка.ПометкаУдаления";
Запрос.УстановитьПараметр("КассаККМ" , ТаблицаКассККМОрганизаций[0].КассаККМ);
Запрос.УстановитьПараметр("Организация", ТаблицаКассККМОрганизаций[0].Организация);
Результат = Запрос.Выполнить();
ТаблицаВидовОплат = Результат.Выгрузить();
Если ТаблицаВидовОплат.Количество()>0 Тогда
фдЭквайринговыйТерминал=ТаблицаВидовОплат[0].ЭквайринговыйТерминал;
фдВидОплаты=ТаблицаВидовОплат[0].ВидОплаты;
КонецЕсли;
СтрокаОплаты=Объект.Оплата.Добавить();
СтрокаОплаты.ВидОплаты=фдВидОплаты;
СтрокаОплаты.Сумма=Объект.Товары.Итог("СуммаВсего");
СтрокаОплаты.Организация=ТаблицаКассККМОрганизаций[0].Организация;
СтрокаОплаты.ЭквайринговыйТерминал=фдЭквайринговыйТерминал;
СтрокаОплаты.ДанныеПереданыВБанк=Истина;
КонецПроцедуры
в процедуре выполняемой по нажатию кнопки код:
//фдуч пробить чек с оплатой по карте без отправки данных в банк
ОбработчикОповещения = Новый ОписаниеОповещения("ОповещениеОткрытьФормуВводаЧислаВвестиПарольПробитьБезналич ный", ЭтотОбъект);
ПолучитьИнтерактивноЧисло("Введите пароль для завершения операции",
0,
99999999999,
Ложь,
Ложь,
ОбработчикОповещения);
Показать
Создаем двух контрагентов Сбербанк и его аналог с названием к примеру "Использовать в случае сбоя Сбербанк", а поступление на счет то потом приходит от одного, придется вручную поступление на счет делить на двух контрагентов?
(8) можно сделать изящнее.
в модуле
ПодключаемоеОборудованиеУниверсальныйДрайверКлиент
есть такая процедура
ПечатьТекста
которая по сути своей и отвечает за печать слип чеков.
Что мы тут видим, а видим мы тут простите б**ядство. Эти асинхронные вызовы с печатью чека, это реально от лукавого.
Что мы сделали у себя
Править надо этот участок
Заменил
на
Согласен затычка не лучшая, но проще если оплата прошла закрыть чек и распечатать копию последнего слипа, штатной кнопкой.
Чем то что реализованно в 1С, выводится окно отмены, на терминала надпись отмена, надо вставить карту и ввести пин. У меня девочки тупо закрывали это окно.
Поэтому следуя логике, если мы провалились в данную процедуру, то следовательно банковская операция у нас прошла => Нам в принципе плевать на этот слип, деньги поступили и надо закрыть чек, далее распечатать копию слип чека банка.
у нас полет нормальный 3 месяца, пользоваться нужно осторожно.
Не ковырял где еще используется эта процедура.
Можно отбиться условиями конечно, было откровенно лень.
в модуле
ПодключаемоеОборудованиеУниверсальныйДрайверКлиент
есть такая процедура
ПечатьТекста
которая по сути своей и отвечает за печать слип чеков.
Попытка
Для Каждого ТекстПечати Из ДанныеЧека Цикл
Результат = ОбъектДрайвера.НапечататьТекстовыйДокумент(ПараметрыПодключения.ИДУстройства, ТекстПечати);
Если НЕ Результат Тогда
ВыходныеПараметры.Очистить();
ВыходныеПараметры.Добавить(999);
ВыходныеПараметры.Добавить("");
ОбъектДрайвера.ПолучитьОшибку(ВыходныеПараметры[1]);
Возврат Результат;
Иначе
ВыходныеПараметры.Очистить();
ВыходныеПараметры.Добавить(0);
ВыходныеПараметры.Добавить(0);
ВыходныеПараметры.Добавить(0);
ВыходныеПараметры.Добавить(МенеджерОборудованияКлиентПереопределяемый.ДатаСеанса());
КонецЕсли;
КонецЦикла;
Исключение
Результат = Ложь;
ВыходныеПараметры.Очистить();
ВыходныеПараметры.Добавить(999);
ВыходныеПараметры.Добавить(НСтр("ru='Ошибка вызова метода <ОбъектДрайвера.НапечататьТекстовыйДокумент>.'") + Символы.ПС + ОписаниеОшибки());
КонецПопытки;
ПоказатьЧто мы тут видим, а видим мы тут простите б**ядство. Эти асинхронные вызовы с печатью чека, это реально от лукавого.
Что мы сделали у себя
Править надо этот участок
Результат = ОбъектДрайвера.НапечататьТекстовыйДокумент(ПараметрыПодключения.ИДУстройства, ТекстПечати);
Если НЕ Результат Тогда
ВыходныеПараметры.Очистить();
ВыходныеПараметры.Добавить(999);
ВыходныеПараметры.Добавить("");
ОбъектДрайвера.ПолучитьОшибку(ВыходныеПараметры[1]);
Возврат Результат;
Иначе
ВыходныеПараметры.Очистить();
ВыходныеПараметры.Добавить(0);
ВыходныеПараметры.Добавить(0);
ВыходныеПараметры.Добавить(0);
ВыходныеПараметры.Добавить(МенеджерОборудованияКлиентПереопределяемый.ДатаСеанса());
КонецЕсли;
КонецЦикла;
ПоказатьЗаменил
на
СлипЧек = ОбъектДрайвера.НапечататьТекстовыйДокумент(ПараметрыПодключения.ИДУстройства, ТекстПечати);
Результат = Истина;
Если НЕ Результат Тогда
ВыходныеПараметры.Очистить();
ВыходныеПараметры.Добавить(999);
ВыходныеПараметры.Добавить("");
ОбъектДрайвера.ПолучитьОшибку(ВыходныеПараметры[1]);
Возврат Результат;
Иначе
ВыходныеПараметры.Очистить();
ВыходныеПараметры.Добавить(0);
ВыходныеПараметры.Добавить(0);
ВыходныеПараметры.Добавить(0);
ВыходныеПараметры.Добавить(МенеджерОборудованияКлиентПереопределяемый.ДатаСеанса());
КонецЕсли;
КонецЦикла;
ПоказатьСогласен затычка не лучшая, но проще если оплата прошла закрыть чек и распечатать копию последнего слипа, штатной кнопкой.
Чем то что реализованно в 1С, выводится окно отмены, на терминала надпись отмена, надо вставить карту и ввести пин. У меня девочки тупо закрывали это окно.
Поэтому следуя логике, если мы провалились в данную процедуру, то следовательно банковская операция у нас прошла => Нам в принципе плевать на этот слип, деньги поступили и надо закрыть чек, далее распечатать копию слип чека банка.
у нас полет нормальный 3 месяца, пользоваться нужно осторожно.
Не ковырял где еще используется эта процедура.
Можно отбиться условиями конечно, было откровенно лень.
(14) почему, вполне имеющий право на жизнь, мы просто выносили дополнительные оповещения по слипам, а так вполне работает и такое.
Что касается того как сейчас, надо посмотреть модуль, мы ушли даже от стандартного функционала драйвера , переписал с xml на json, что удивидельно json гораздо быстрее отрабатывается фискальником чем тот же пресловутый xml.
Ну и порядок чеков мы слегка поправили, сейчас при оплате безналом пеечатается в один заход Слип+Чек, потом отрез и наш слип, Если не выходит егаисовский слип система тупо игнорирует эту ошибку)
Что касается того как сейчас, надо посмотреть модуль, мы ушли даже от стандартного функционала драйвера , переписал с xml на json, что удивидельно json гораздо быстрее отрабатывается фискальником чем тот же пресловутый xml.
Ну и порядок чеков мы слегка поправили, сейчас при оплате безналом пеечатается в один заход Слип+Чек, потом отрез и наш слип, Если не выходит егаисовский слип система тупо игнорирует эту ошибку)
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот