Один из способов решения проблем при работе с интегрированным банковским терминалом в РМК Розница

1. independ 1551 07.03.17 09:51 Сейчас в теме
Всем привет, надеюсь кому-нибудь поможет

При работе с интегрированным банковским терминалом в РМК Розница иногда возникают проблемы, одна из самых неудобных и неприятных, когда при совершении оплаты - денежные средства с карты клиента списываются, а чек продажи не пробивается. Как можно решить данную проблему. К примеру банк эквайринг Сбербанк. В справочнике контрагентов создаем 2 записи - собственно сам Сбербанк и его аналог с названием к примеру "Использовать в случае сбоя Сбербанк". Далее в справочнике Эквайринговые терминалы создаем также 2 записи с привязкой к кассе ККМ, в одной указываем, что используем подключаемое оборудование, а в другой ставим признак "использовать ЭТ без подключения к системе". И теперь при работе в РМК при осуществлении оплаты платежной картой будет осуществляться выбор банковского терминала. И если возникнет сбой, и денежные средства будут списаны с карты покупателя, а завершить оплату штатно не получится, то можно будет пробить чек, выбрав терминал без подключаемого оборудования.

P.S. В публикации данного поста было отказано, по причине "Слишком мал объем для статьи. Можно разместить информацию на форуме." :(
Прикрепленные файлы:
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. kolya_tlt 88 07.03.17 09:55 Сейчас в теме
(1) осталось только написать вторую статью "что делать если продавец выбрал вид оплаты "использовать в случае сбоя" вместо "оплата сбер""
3. independ 1551 07.03.17 10:01 Сейчас в теме
(2) ну тут проблем нет, если выбрали сбой, и закрыли чек, то придется сделать возврат, и чек создать заново и пробить с использованием банковского терминала
5. AlexCherdakov 21 28.03.17 05:23 Сейчас в теме
(2) у меня сначала запрашивается 11 значный пароль, затем создается и пробивается чек по безналу без отправки данных в банк, так что такая статья нужна только при наличии совсем безголовых кассиров, а такие пароль не знают.
4. Shad2008 3 28.03.17 03:30 Сейчас в теме
Уже читал про такое решение, но там не было расписано про виды оплат, а тут прям - ахонь. Надо делать!
6. AlexCherdakov 21 28.03.17 05:41 Сейчас в теме
&НаКлиенте
Процедура ОповещениеОткрытьФормуВводаЧислаВвестиПарольПробитьБезналичн­ый(РезультатОткрытияФормы, ДополнительныеПараметры) Экспорт//фдуч
	Если НЕ РезультатОткрытияФормы = Неопределено Тогда
		
		ЧислоВвода = РезультатОткрытияФормы.ВведенноеЧисло;
		
		Если ЧислоВвода<>пароль Тогда
			Возврат;
		КонецЕсли;
		
		фдЗаполнитьСтрокуОплаты();
		ЗаполнитьТаблицуЧеков();
		ЗавершитьОплатуТоваров(Ложь);

	КонецЕсли;
КонецПроцедуры

&НаСервере
Процедура фдЗаполнитьСтрокуОплаты()//фдуч
	фдЭквайринговыйТерминал=Справочники.ЭквайринговыеТерминалы.ПустаяСсылка();
	фдВидОплаты=Справочники.ВидыОплатЧекаККМ.ПустаяСсылка();
	Запрос = Новый Запрос;
	Запрос.Текст = 
	"ВЫБРАТЬ РАЗРЕШЕННЫЕ
	|	ЭквайринговыеТерминалыТарифыЗаРасчетноеОбслуживание.Ссылка КАК ЭквайринговыйТерминал,
	|	ЭквайринговыеТерминалыТарифыЗаРасчетноеОбслуживание.ВидОплаты КАК ВидОплаты
	|ИЗ
	|	Справочник.ЭквайринговыеТерминалы.ТарифыЗаРасчетноеОбслуживание КАК ЭквайринговыеТерминалыТарифыЗаРасчетноеОбслуживание
	|ГДЕ
	|	ЭквайринговыеТерминалыТарифыЗаРасчетноеОбслуживание.Ссылка.Касса = &КассаККМ
	|	И ЭквайринговыеТерминалыТарифыЗаРасчетноеОбслуживание.Ссылка.Организация = &Организация
	|	И НЕ ЭквайринговыеТерминалыТарифыЗаРасчетноеОбслуживание.Ссылка.ПометкаУдаления";
	Запрос.УстановитьПараметр("КассаККМ"   , ТаблицаКассККМОрганизаций[0].КассаККМ);
	Запрос.УстановитьПараметр("Организация", ТаблицаКассККМОрганизаций[0].Организация);
	Результат = Запрос.Выполнить();
	ТаблицаВидовОплат = Результат.Выгрузить();
	Если ТаблицаВидовОплат.Количество()>0 Тогда
		фдЭквайринговыйТерминал=ТаблицаВидовОплат[0].ЭквайринговыйТерминал;
		фдВидОплаты=ТаблицаВидовОплат[0].ВидОплаты;
	КонецЕсли;
	СтрокаОплаты=Объект.Оплата.Добавить();
	СтрокаОплаты.ВидОплаты=фдВидОплаты;
	СтрокаОплаты.Сумма=Объект.Товары.Итог("СуммаВсего");
	СтрокаОплаты.Организация=ТаблицаКассККМОрганизаций[0].Организация;
	СтрокаОплаты.ЭквайринговыйТерминал=фдЭквайринговыйТерминал;
	СтрокаОплаты.ДанныеПереданыВБанк=Истина;
КонецПроцедуры

в процедуре выполняемой по нажатию кнопки код:
	
//фдуч пробить чек с оплатой по карте без отправки данных в банк
ОбработчикОповещения = Новый ОписаниеОповещения("ОповещениеОткрытьФормуВводаЧислаВвестиПарольПробитьБезналич­ный", ЭтотОбъект);
	ПолучитьИнтерактивноЧисло("Введите пароль для завершения операции", 
								0, 
								99999999999,
								Ложь,
								Ложь,
								ОбработчикОповещения);
Показать
7. Tohin666 15.02.18 15:43 Сейчас в теме
Создаем двух контрагентов Сбербанк и его аналог с названием к примеру "Использовать в случае сбоя Сбербанк", а поступление на счет то потом приходит от одного, придется вручную поступление на счет делить на двух контрагентов?
8. independ 1551 15.02.18 16:32 Сейчас в теме
(7) Эта тема про то, как пробить чек на РМК 1С Розница, при условии, что слипчек оплаты с терминала Сбербанка прошел, а товарный нет (аннулирован или проч.)
9. tezdal 29 05.06.18 16:31 Сейчас в теме
(8) можно сделать изящнее.
в модуле
ПодключаемоеОборудованиеУниверсальныйДрайверКлиент
есть такая процедура

ПечатьТекста
которая по сути своей и отвечает за печать слип чеков.

Попытка
			Для Каждого ТекстПечати Из ДанныеЧека Цикл
				Результат = ОбъектДрайвера.НапечататьТекстовыйДокумент(ПараметрыПодключения.ИДУстройства, ТекстПечати);
				Если НЕ Результат Тогда
					ВыходныеПараметры.Очистить();
					ВыходныеПараметры.Добавить(999);
					ВыходныеПараметры.Добавить("");
					ОбъектДрайвера.ПолучитьОшибку(ВыходныеПараметры[1]);
					Возврат Результат;
				Иначе
					ВыходныеПараметры.Очистить();
					ВыходныеПараметры.Добавить(0);
					ВыходныеПараметры.Добавить(0);
					ВыходныеПараметры.Добавить(0);
					ВыходныеПараметры.Добавить(МенеджерОборудованияКлиентПереопределяемый.ДатаСеанса());
				КонецЕсли;
			КонецЦикла;
		Исключение
			Результат = Ложь;
			ВыходныеПараметры.Очистить();
			ВыходныеПараметры.Добавить(999);
			ВыходныеПараметры.Добавить(НСтр("ru='Ошибка вызова метода <ОбъектДрайвера.НапечататьТекстовыйДокумент>.'") + Символы.ПС + ОписаниеОшибки());
		КонецПопытки;
Показать


Что мы тут видим, а видим мы тут простите б**ядство. Эти асинхронные вызовы с печатью чека, это реально от лукавого.

Что мы сделали у себя

Править надо этот участок

Результат = ОбъектДрайвера.НапечататьТекстовыйДокумент(ПараметрыПодключения.ИДУстройства, ТекстПечати);
				Если НЕ Результат Тогда
					ВыходныеПараметры.Очистить();
					ВыходныеПараметры.Добавить(999);
					ВыходныеПараметры.Добавить("");
					ОбъектДрайвера.ПолучитьОшибку(ВыходныеПараметры[1]);
					Возврат Результат;
				Иначе
					ВыходныеПараметры.Очистить();
					ВыходныеПараметры.Добавить(0);
					ВыходныеПараметры.Добавить(0);
					ВыходныеПараметры.Добавить(0);
					ВыходныеПараметры.Добавить(МенеджерОборудованияКлиентПереопределяемый.ДатаСеанса());
				КонецЕсли;
			КонецЦикла;
Показать


Заменил
на
СлипЧек = ОбъектДрайвера.НапечататьТекстовыйДокумент(ПараметрыПодключения.ИДУстройства, ТекстПечати);
Результат = Истина;
Если НЕ Результат Тогда
ВыходныеПараметры.Очистить();
					ВыходныеПараметры.Добавить(999);
					ВыходныеПараметры.Добавить("");
					ОбъектДрайвера.ПолучитьОшибку(ВыходныеПараметры[1]);
					Возврат Результат;
				Иначе
					ВыходныеПараметры.Очистить();
					ВыходныеПараметры.Добавить(0);
					ВыходныеПараметры.Добавить(0);
					ВыходныеПараметры.Добавить(0);
					ВыходныеПараметры.Добавить(МенеджерОборудованияКлиентПереопределяемый.ДатаСеанса());
				КонецЕсли;
			КонецЦикла;
Показать


Согласен затычка не лучшая, но проще если оплата прошла закрыть чек и распечатать копию последнего слипа, штатной кнопкой.
Чем то что реализованно в 1С, выводится окно отмены, на терминала надпись отмена, надо вставить карту и ввести пин. У меня девочки тупо закрывали это окно.
Поэтому следуя логике, если мы провалились в данную процедуру, то следовательно банковская операция у нас прошла => Нам в принципе плевать на этот слип, деньги поступили и надо закрыть чек, далее распечатать копию слип чека банка.


у нас полет нормальный 3 месяца, пользоваться нужно осторожно.
Не ковырял где еще используется эта процедура.
Можно отбиться условиями конечно, было откровенно лень.
10. svk 31.08.20 15:46 Сейчас в теме
(9)Прикольно.. Как полет на сегодня?? Не проще было сделать всего одну строчку
Результат = Истина;
11. tezdal 29 31.08.20 20:28 Сейчас в теме
(10) по сей день работает) результат = истина при ошибке печати будет не очень, если фн кончился или ещё что то
12. svk 01.09.20 00:48 Сейчас в теме
(11) дак сейчас у вас Результат = истина и написано, но зачем ввели СлипЧек непонятно..
13. tezdal 29 01.09.20 02:14 Сейчас в теме
(12) старый код)) не посмотрел, мы его пару раз ещё изменяли. Сейчас вообще мало от розничного модуля печати чеков осталось. Больно тормозной он. Надо глянуть и освежить данный кусок кода.
14. svk 01.09.20 15:21 Сейчас в теме
(13)эх-х-х значит нерабочий вариант...
15. tezdal 29 01.09.20 21:20 Сейчас в теме
(14) почему, вполне имеющий право на жизнь, мы просто выносили дополнительные оповещения по слипам, а так вполне работает и такое.
Что касается того как сейчас, надо посмотреть модуль, мы ушли даже от стандартного функционала драйвера , переписал с xml на json, что удивидельно json гораздо быстрее отрабатывается фискальником чем тот же пресловутый xml.
Ну и порядок чеков мы слегка поправили, сейчас при оплате безналом пеечатается в один заход Слип+Чек, потом отрез и наш слип, Если не выходит егаисовский слип система тупо игнорирует эту ошибку)
16. DeN_FG 10.08.21 09:30 Сейчас в теме
(15) добрый день. Какой фискальник используете? На сколько по времени ускорили выход чека после перехода с xml на json?
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот