|
Как вытащить реквизит из дока в обработку (есть нюансы) | ☑ | ||
---|---|---|---|---|
0
Korvin1C
10.07.24
✎
16:57
|
Собственно предистория. Документ Чек.Есть обработка от ПРРО (Вебчек) которая на неуправляемые формы - отлично работает на почти всех типовых конфах. Но есть нюанс - конкретно в одной конфе при не выясненных причинах при ОплатитьПлатежнойКартой - параметр КодRRN почему то не сохраняется( вся обрабтка все парамеры пакует в ХМЛ а потом при отмене или возврате вытягивает оттуда) но вот загвоздка. Почемуто КодRRN возвращает пустым . Я пошел другим путем, при оплате картой сохраняю в Коментарий всю строку оплаты (все параметры) и думал щас просто разложу строку и вытяну данные . Но вод подстава - в нормальных обработках параметр "Обьект" хранит ссыылку на чек и я обычно вот так вытягиваю данные
Объект.СтруктураОбщиеПараметры.ЧекККМ.Комментарий - и получаю нужное мне. А конкретно эта обработка в Объекте хранит данные с формы настройки ( порт, скорость, итдитп) и получается у меня нет якоря - и вот вопрос как вытянуть данные из Комментария? Предлагать доп параметр который будет передаваться и в хмл не хочу. Почему то ж один из параметров не работает. Хочу тянуть именно с Коментария...там я хоть вижу что за данные... |
|||
1
Korvin1C
10.07.24
✎
16:58
|
сори опечатка. Обработка еквайрингово терминала)
|
|||
2
Волшебник
10.07.24
✎
17:04
|
Вы сами себе злобный Буратино
|
|||
3
Korvin1C
10.07.24
✎
17:05
|
мм???
|
|||
4
Волшебник
10.07.24
✎
17:07
|
Вы загнали все параметры в строку "Коментарий" и теперь не можете её распарсить. Это так и называется — ССЗБ
|
|||
5
Korvin1C
10.07.24
✎
17:10
|
Ваши предложения как выйти из этой ситуации? Куда мне сохранить параметр так чтобы его вытянуть? Причем так чтобы с привязкой конкретно к этому чеку? Мне КодRRN нужен для возврата по карте...
|
|||
6
Волшебник
10.07.24
✎
17:12
|
(5) Предлагаю не загонять все параметры в одну строку.
|
|||
7
Korvin1C
10.07.24
✎
17:14
|
Ок. Я не против - куда тогда? Не важно все параметры или один мне нужен по факту только КодRRN - но удобно хранить все параметры чтобы всегда можно было подсмотреть была ли оплата картой и что вообще передавалось
|
|||
8
Korvin1C
10.07.24
✎
17:15
|
тут стоит вопрос как передать данные из документа в внешнюю обрабтку не имея при этом ссылки на док.
|
|||
9
СвинТуз
10.07.24
✎
17:21
|
(0)
Не беспокоят с призывом? "как передать данные из документа" есть больше одного способа. Устаревшая функция "значениеВСтрокуВнутр". + "-//- из строки" Наверное хранилище значений. Вы наверное топорно плюсом собираете? Потом маркеры ищете? |
|||
10
СвинТуз
10.07.24
✎
17:21
|
Можно было еще накидать способов.
Но я на другом рабочем месте. |
|||
11
Garykom
10.07.24
✎
17:25
|
(0) Может тебе работу поменять?
|
|||
12
Korvin1C
10.07.24
✎
17:26
|
Беспокоят. Но пока я бегаю быстрее.
Делаю вот так Функция ПолучитьБанковскийЧек(Объект) СтруктураБанковскийЧек = Неопределено; Если Объект.Свойство("СтруктураОбщиеПараметры") Тогда Если Объект.СтруктураОбщиеПараметры.Свойство("ЧекККМ") Тогда СтрокаJSON = СокрЛП(Объект.СтруктураОбщиеПараметры.ЧекККМ.Комментарий); Если ЗначениеЗаполнено(СтрокаJSON) И (Найти(НРег(СтрокаJSON), "кодтранзакции")>0) Тогда Попытка Чтение = Новый ЧтениеJSON; Чтение.УстановитьСтроку(СтрокаJSON); СтруктураБанковскийЧек = ПрочитатьJSON(Чтение); Чтение.Закрыть(); Исключение СтруктураБанкЧек = Неопределено; КонецПопытки; КонецЕсли; КонецЕсли; КонецЕсли; Возврат СтруктураБанковскийЧек; КонецФункции А потом кусок как достаю Функция ОтменитьПлатежПоПлатежнойКарте(Объект, Сумма, КодRRN, КодАвторизации, КодОперации, МассивСтрокСлипЧека, ШиринаЧека, КоличествоКопий) Экспорт мТипТранзакции = "Повернення"; мНомерКарты = ""; мКодRRN = ""; мКодАвторизации = ""; Результат = мНетОшибки; МассивСтрок = Новый Массив; СтрокаИзМассива=""; МерчантИД = СокрЛП(Объект.Параметры.МерчантИД); Если СтрДлина(МерчантИД)=0 Тогда МерчантИД = "0"; КонецЕсли; СуммаЧек = СтрЗаменить(Сумма,Символы.НПП,""); СуммаЧек = СтрЗаменить(СуммаЧек," ",""); //++Глеб Если КодRRN = Неопределено Тогда мСтруктураБанковскогоПлатежа = ПолучитьБанковскийЧек(Объект); //мСтруктура = новый Структура("ВидОперации,ИндетификаторЭквайера,НомерКарты,ПодписьКлиента,КодАвторизации,НаименованиеБанкаВыпистившегоКарту,ИндетификаторТерминала,КодТранзакции"); Если мСтруктураБанковскогоПлатежа<>Неопределено Тогда RRN = Лев(СокрЛП(мСтруктураБанковскогоПлатежа.КодТранзакции),12); PA = мСтруктураБанковскогоПлатежа.ИндетификаторЭквайера; // можна прописати магазин PB = Лев(СокрЛП(мСтруктураБанковскогоПлатежа.ИндетификаторТерминала),8); PSNM = ?(Лев(СокрЛП(мСтруктураБанковскогоПлатежа.НаименованиеБанкаВыпистившегоКарту),16)="","V",Лев(СокрЛП(мСтруктураБанковскогоПлатежа.НаименованиеБанкаВыпистившегоКарту),16)); PC = мСтруктураБанковскогоПлатежа.ВидОперации; PD = Лев(СокрЛП(мСтруктураБанковскогоПлатежа.НомерКарты),20); PE = Лев(СокрЛП(мСтруктураБанковскогоПлатежа.КодАвторизации),20); PF = "0.00"; КонецЕсли; КонецЕсли; КодRRN = RRN; //-- Если СтрДлина(КодRRN)=0 Тогда Сообщить("При поверненні по платіжній карті, поле RRN траназакції продажу обов'язкове ! Поле RRN не заповнене !",СтатусСообщения.Важное); Результат = мОшибкаНеизвестно; КонецЕсли; Ответ=Объект.Драйвер.Cardserv("<?xml version=""1.0"" encoding=""UTF-8""?> <InputParameters> <Parameters type="""+Объект.Параметры.типтерминала+""" dest="""+Объект.Параметры.ПортНазанчения+""" method= ""Refund"" amount = """+СуммаЧек+""" merchantId = """+МерчантИД+""" subMerchant = """" rrn = """+КодRRN+""" /></InputParameters>"); СтруктураПараметров = Новый Структура; Если Ответ Тогда СтрокаXMLОтвет = Объект.Драйвер.StatusBarXML(); Если СтрДлина(СтрокаXMLОтвет)>0 Тогда ЧтениеXML = Новый ЧтениеXML; ЧтениеXML.УстановитьСтроку(СтрокаXMLОтвет); ЧтениеXML.ПерейтиКСодержимому(); Пока ЧтениеXML.Прочитать() Цикл Если ЧтениеXML.Имя = "Parameters" И ЧтениеXML.ТипУзла = ТипУзлаXML.НачалоЭлемента Тогда Пока ЧтениеXML.ПрочитатьАтрибут() Цикл СтруктураПараметров.Вставить(ЧтениеXML.Имя,ЧтениеXML.Значение); КонецЦикла; КонецЕсли; КонецЦикла; КонецЕсли; ТекстСообщения =""; МассивСтрок = Новый Массив; МассивСтрок.Добавить("PA_"+СтруктураПараметров.bankacquirer); //PA МассивСтрок.Добавить("PB_"+СтруктураПараметров.terminalid); //PB МассивСтрок.Добавить("PC_"+"Повернення"); //PC МассивСтрок.Добавить("PD_"+СтруктураПараметров.pan); //PD МассивСтрок.Добавить("PE_"+СтруктураПараметров.approvalcode); //PE МассивСтрок.Добавить("PSNM_"+СтруктураПараметров.paymentsystem); //PSNM МассивСтрок.Добавить("RRN_"+СтруктураПараметров.rrn); //RRN //СтрокаИзМассива = СтрСоединить(МассивСтрок, ";"); СтрокаИзМассива = ""; Разделитель = ","; Для каждого элт Из МассивСтрок Цикл СтрокаИзМассива = СтрокаИзМассива + ?(ПустаяСтрока(СтрокаИзМассива), "", Разделитель); СтрокаИзМассива = СтрокаИзМассива + элт; КонецЦикла; КодRRN = СтрокаИзМассива; КодАвторизации = СтруктураПараметров.approvalcode; КодОперации = СтруктураПараметров.pan; иначе Результат = мОшибкаНеизвестно; КонецЕсли; Возврат Результат; КонецФункции |
|||
13
Korvin1C
10.07.24
✎
17:28
|
Garykom - 1С для меня не есть основная работа. Хотя сейчас ее стало больше. Что в ней не так?Или все всё знают?
|
|||
14
СвинТуз
10.07.24
✎
17:32
|
(13)
Даром чужой код ворочать? Он иногда пахнет не совсем хорошо. Зачем же рисковать. Вам же сказали сделай структуру и загони в строку. Потом вынь обратной функцией структуру. Не гуманитарная бы помощь если бы, так и не писал бы. Бегать тренируйся. |
|||
15
СвинТуз
10.07.24
✎
17:34
|
Не охота пережевывать да и Вам со слюнями моими кушать не приятно будет.
Детская проблема. Ну так выглядит имхо. Могу не понимать всего. Не охота вникать ))) Сорян. |
|||
16
СвинТуз
10.07.24
✎
17:34
|
+ с сервера на клиент не все гуляет свободно
структуру можно. |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |