Имя: Пароль:
1C
 
Как вытащить реквизит из дока в обработку (есть нюансы)
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
+ с сервера на клиент не все гуляет свободно
структуру можно.
Выдавать глобальные идеи — это удовольствие; искать сволочные маленькие ошибки — вот настоящая работа. Фредерик Брукс-младший