Имя: Пароль:
1C
 
Передать в качестве параметра метода веб сервиса XML
0 cmex
 
22.04.19
20:12
Доброго дня!
В SoapUI рабочий текст "<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"; xmlns:plug="http://plugins.operday.ERPIntegration.crystals.ru/">;
   <soapenv:Header/>
   <soapenv:Body>
      <plug:getPurchasesByParams>
         <dateOperDay>2019-04-22</dateOperDay>
         <shopNumber>999</shopNumber>
      </plug:getPurchasesByParams>
   </soapenv:Body>
</soapenv:Envelope>"
Как из 1С вызвать метод getPurchasesByParams и передать туда этот xml?

код не работает, не достаточно параметров

СтрокаXML = "
        |<soapenv:Envelope xmlns:soapenv=""http://schemas.xmlsoap.org/soap/envelope/""; xmlns:plug=""http://plugins.operday.ERPIntegration.crystals.ru/"">;
        |<soapenv:Header/>
        |<soapenv:Body>
        |    <plug:getPurchasesByParams>
        |    <dateOperDay>2019-04-22</dateOperDay>
        |     <shopNumber>999</shopNumber>
        |  </plug:getPurchasesByParams>
        |    </soapenv:Body>
        |</soapenv:Envelope>";        
        Ответ = Прокси.getPurchasesByParams(СтрокаXML);

Помогите разобраться, куда копать
1 Cyberhawk
 
22.04.19
20:15
Ну либо через ВС-прокси, создаваемое из ВСДЛ-описания (в т.ч. на лету), либо через ХТТП-соединение и его ХТТП-запрос.
Второе надежнее (в плане гарантированного успеха), т.к. 1С не с любым ВСДЛ-описанием умеет.
2 cmex
 
22.04.19
20:26
(1) а можно поподробнее? что в моем коде переделать? если через ВС
3 cmex
 
22.04.19
21:07
кто нибудь, хеелп
4 Cyberhawk
 
22.04.19
21:14
Ну тебе в метод надо не текст ХМЛ передавать, а ХДТО-объект (структуру / соответствие в терминологии 1С), созданный через фабрику ВС-прокси, с нужными полями dateOperDay и shopNumber
5 cmex
 
22.04.19
23:33
(4) СвояФабрикаXDTO = Определения.ФабрикаXDTO;
        
        КорневойТип = СвояФабрикаXDTO.Тип(ПрострИмен, "getPurchasesByParams");
        КорневойОбъект = СвояФабрикаXDTO.Создать(КорневойТип);
        
        КорневойОбъект.dateOperDay = элОперационныйДень;
        КорневойОбъект.shopNumber = 93;
        
        ДвоичныеДанные = Прокси.getPurchasesByParams(КорневойОбъект);

не достаточно параметров
6 azernot
 
22.04.19
23:45
Прокси.getPurchasesByParams(КорневойОбъект.dateOperDay, КорневойОбъект.shopNumber)

А если так?
7 cmex
 
22.04.19
23:54
(6) момент
8 cmex
 
22.04.19
23:58
(6) то же самое - недостаточно фактических параметров. я вот принцип не могу понять, что в качестве параметров в метод можно передавать? там явно надо 5 значений. то есть если я передам всего один и там укажу "фигню" , он тупо не пропустит количество этих параметров, даже не дойдет до проверки "фигни". как будто платформа из Определения видит, что все 5 параметров обязательны для заполнения и дальше сама 1с не пускает
9 cmex
 
23.04.19
00:00
добавляю WS ссылку , там у 4х параметров "Возможно пустое" = Истина, но ощущение что на заборе тоже написано, а по факту очень даже обязательное. Если передаю такое Прокси.getPurchasesByParams("2019-04-22", 93 , 0 ,0,0), то ответ приходит, но пустой, но приходит
10 cmex
 
23.04.19
00:03
а можно как то создать xdto объект из WS прокси, но при этом удалить оттуда ненужные свойства? может платформу глючит?
11 palsergeich
 
23.04.19
00:13
(10) Можно сохранить схему, из нее убрать ненужные свойства, потом прочитать схему и создать XDTO объект на основании модифицированной схемы.
Там есть еще фишка. если это платформенная интеграция, то в БСП вроде схемы сохраняются в регистре сведений, кше чего то там, и если запись в регистре есть, то он не лезет за самой схемой в источник и может быть невалидная схема на текущий момент хранится.
На сколько я помню в обработке из состава БСП - обновление вспомогательных данных - можно этот регистр почистить
12 palsergeich
 
23.04.19
00:14
Платформенная имеется ввиду коробочная интеграция от вендора
13 palsergeich
 
23.04.19
00:21
регистр сведений "Кэш программных интерфейсов" вспомнил
14 cmex
 
23.04.19
07:24
(11) не совсем понял, какую схему и как сохранить? буду признателен за чуть поподробнее)
15 cmex
 
23.04.19
09:36
up
16 cmex
 
23.04.19
13:17
коллеги, победил, но убого - через "MSXML2.XMLHTTP". есть еще варианты или мой окультурить как то можно?

Запрос =  "
            |<soapenv:Envelope xmlns:soapenv=""http://schemas.xmlsoap.org/soap/envelope/""; xmlns:plug=""http://plugins.operday.ERPIntegration.crystals.ru/"">;
            |<soapenv:Header/>
            |<soapenv:Body>
            |<plug:getPurchasesByParams>
            |<dateOperDay>"+Формат(элОперационныйДень,"ДФ=""yyyy-MM-dd""")+"</dateOperDay>
            |<shopNumber>93</shopNumber>
            |</plug:getPurchasesByParams>
            |</soapenv:Body>
            |</soapenv:Envelope>";    
            MSXML = Новый COMОбъект("MSXML2.XMLHTTP");
            MSXML.open("POST", "http://"; + МестоположениеWSDL + "/SET-ERPIntegration/FiscalInfoExport?wsdl", 0);
            MSXML.setRequestHeader("Content-Type", "text/xml; charset=utf-8");
            MSXML.setRequestHeader("Content-Length", СтрДлина(Запрос));
            MSXML.setRequestHeader("SOAPAction", "getPurchasesByOperDay");
            MSXML.send(Запрос);
            ОтветПолучен = Ложь;
            Для НомерЦикла = 1 по 100 Цикл
                Если MSXML.readyState > 3 Тогда
                    ОтветПолучен = Истина;
                    Прервать;
                КонецЕсли;      
            КонецЦикла;  
            
            Если ОтветПолучен Тогда
                ДвоичныеДанные = Base64Значение(MSXML.responseXML.text);
17 cmex
 
23.04.19
17:24
up
18 Cyberhawk
 
23.04.19
17:24
Кому охота разбираться в твоих мытарствах?
19 cmex
 
23.04.19
17:27
(18) ты только последний вариант про окультурить решил рассмотреть? Как по умному то сделать?