|   |   | 
| 
 | Как передать 3 параметра вместо 4 в функцию ws-ссылки | ☑ | ||
|---|---|---|---|---|
| 0
    
        rumi 17.03.20✎ 13:12 | 
        Добрый день.
 Существует сервис, с которым происходит обмен через ws-ссылку. В конкретном случае у их web сервиса есть метод SaveDataObjectRecord(dataObjectRecord, lang, version, runAs) В дереве ws ссылки: DataObjectRecord - Возможно пустое: Истина lang - Возможно пустое: Истина version: Возможно пустое: Ложь runAs = Возможно пустое: Истина Но при попытке отправки запроса с тремя параметрами, например без runAs SaveDataObjectRecord(dataObjectRecord, lang, version) 1С перед отправкой выдает ошибку: "Недостаточно физических параметров" Вроде как есть "какая-то галочка" которую можно убрать. Подскажите, пожалуйста. | |||
| 1
    
        rumi 17.03.20✎ 13:15 | ||||
| 2
    
        Cyberhawk 17.03.20✎ 13:19 | 
        Так "Возможно пустое" - это не про возможность опустить его, а про возможность передавать туда Неопределено     | |||
| 3
    
        rumi 17.03.20✎ 13:21 | 
        (2) У них этот параметр runAs не проходит проверку на NULL. Сервер возвращает ответ "SERVER_ERROR", причем первые два параметра сделаны с этой проверкой     | |||
| 4
    
        rumi 17.03.20✎ 13:22 | 
        (2) Смысл в том, чтобы Вызвать функцию с тремя параметрами, но чтобы при этом 1С не ругался, что их 3, а не 4     | |||
| 5
    
        Cyberhawk 17.03.20✎ 13:22 | 
        (4) Откуда потребность "Вызвать функцию с тремя параметрами"?     | |||
| 6
    
        rumi 17.03.20✎ 13:26 | 
        (5) Ответ от разработчика web сервиса.
 "Будет работать, если вызовите с тремя параметрами, причем четвертый runAs не указывайте как null. Его просто не должно быть". | |||
| 7
    
        Cyberhawk 17.03.20✎ 13:27 | 
        (6) Передавай туда Неопределено, не баклань     | |||
| 8
    
        rumi 17.03.20✎ 13:27 | 
        (7) Сервер возвращает ответ "SERVER_ERROR"     | |||
| 9
    
        Cyberhawk 17.03.20✎ 13:30 | 
        (8) А прокси в коде как создаешь - из файла / wsdl-описания или своего пакета? У тебя параметр в этой операции ендпоинта обязательный, поэтому не указывать не получится. Минимальное количество = 0 надо поставить в wsdl-описании, тогда заработает.     | |||
| 10
    
        Cyberhawk 17.03.20✎ 13:30 | 
        Но это придется динамически править wsdl-описание, коли оно кривое у поставщика сервиса     | |||
| 11
    
        rumi 17.03.20✎ 13:34 | 
        (9) из файла. Поставщик ленивый. Говорит, что за полгода не смогли разобраться как исправить     | |||
| 12
    
        rumi 17.03.20✎ 13:37 | 
        (10) Как править подскажите, пожалуйста     | |||
| 13
    
        rumi 17.03.20✎ 13:39 | 
        https://radikal.ru/big/lm2lry3j40w0l
 Какое-то значение отсюда взять и подставить перед вызовом? | |||
| 14
    
        rumi 17.03.20✎ 13:43 | 
        (9)
 Определение = Новый WSОпределения("http://srs.gs1ru.org/GS46_Interfaces/GS1RU_Operations?wsdl", Пользователь, Пароль); Прокси = Новый WSПрокси(Определение, ПространствоИмен, ИмяСервиса, ТочкаПодключения); Прокси.Пользователь = Пользователь; Прокси.Пароль = Пароль; | |||
| 15
    
        Cyberhawk 17.03.20✎ 14:16 | 
        (11) Кинь файл     | |||
| 16
    
        rumi 17.03.20✎ 14:25 | 
        (15) 
 Определение = Новый WSОпределения("http://srs.gs1ru.org/GS46_Interfaces/GS1RU_Operations?wsdl", Пользователь, Пароль); Прокси = Новый WSПрокси(Определение, ПространствоИмен, ИмяСервиса, ТочкаПодключения); Прокси.Пользователь = Пользователь; Прокси.Пароль = Пароль; типdataObjectRecord = Прокси.ФабрикаXDTO.Тип(ПространствоИмен, "dataObjectRecord"); Параметр_DataObjectRecord = ПолучитьОбъектDataObjectRecord(Прокси); Параметр_change_version = false; Параметр_lang = "RU"; Параметр_runAs = Пользователь; ПолученныеДанные = Прокси.SaveDataObjectRecord(Параметр_DataObjectRecord, Параметр_lang, Параметр_change_version); | |||
| 17
    
        rumi 17.03.20✎ 14:28 | 
        (15) 
 Файл получаю по ссылке... Правда она сейчас перестала работать. Может начали ковырять в ней <xsd:complexType name="SaveDataObjectRecord"> <xsd:sequence> <xsd:element name="DataObjectRecord" type="ns0:dataObjectRecord" form="qualified" minOccurs="0"/> <xsd:element name="lang" type="xsd:string" form="qualified" minOccurs="0"/> <xsd:element name="change_version" type="xsd:boolean" form="qualified"/> <xsd:element name="runAs" type="xsd:string" form="qualified" minOccurs="0"/> </xsd:sequence> </xsd:complexType> | |||
| 18
    
        rumi 17.03.20✎ 14:31 | ||||
| 19
    
        rumi 17.03.20✎ 15:11 | ||||
| 20
    
        Cyberhawk 17.03.20✎ 16:08 | 
        Схему-то скинь     | |||
| 21
    
        Cyberhawk 17.03.20✎ 16:10 | 
        А лучше логин и пароль     | |||
| 22
    
        rumi 17.03.20✎ 16:21 | 
        l: 4660059229997
 p: 906214335 | |||
| 23
    
        Cyberhawk 17.03.20✎ 16:35 | 
        Нормально все в схеме, minOccurs = 0     | |||
| 24
    
        rumi 17.03.20✎ 16:51 | 
        (23) 
 Это означает, что значение параметра можно передать как Неопределено. Верно? Смысл в том, что их серверу нужно передать функцию с ТРЕМЯ параметрами . Если вызвать функция(п1, п2, п3, Неопределено), то приходит ошибка SERVER_ERROR | |||
| 25
    
        Cyberhawk 17.03.20✎ 16:53 | 
        Вообще есть ощущение, что 1С при импорте ВС-ссылки сама разворачивает объект-параметр на 4 входящих параметра.
 Попробуй вызывать операцию прокси с одним параметром (ХДТО-объектом) с тремя свойствами. | |||
| 26
    
        Cyberhawk 17.03.20✎ 16:55 | 
        wrapped-стайл и все такое. Мрак.     | |||
| 27
    
        rumi 17.03.20✎ 17:06 | 
        "Недостаточно фактических параметров" (26)     | |||
| 28
    
        rumi 17.03.20✎ 17:12 | 
        Можно ли как-то убрать проверку от 1С на количество параметров?     | |||
| 29
    
        arsik гуру 17.03.20✎ 17:24 | 
        (28) Попробуй вот так сделать
 <xs:complexType name="SaveDataObjectRecord">
 | |||
| 30
    
        arsik гуру 17.03.20✎ 17:28 | 
        + (29) Ну или вообще так оставь
 <xs:complexType name="SaveDataObjectRecord">
 | |||
| 31
    
        arsik гуру 17.03.20✎ 17:28 | 
        + (30) Сори. Вот так
 <xs:complexType name="SaveDataObjectRecord">
 | |||
| 32
    
        rumi 17.03.20✎ 17:30 | 
        (31) К сожалению, я не могу у них на сервере подредактировать этот файлик. Они упираются рогами, что у них всё ок.     | |||
| 33
    
        arsik гуру 17.03.20✎ 17:31 | 
        (32) Зачем на их сервере? Ты можешь их схему сохранить в файл и поправить его. И при создании использовать его, а не с их сайта.     | |||
| 34
    
        arsik гуру 17.03.20✎ 17:34 | 
        +(33) Ну или прямо импортировать схему в 1С и там ее поправить.
 https://i.imgur.com/RgvnXpC.png | |||
| 35
    
        Cyberhawk 17.03.20✎ 17:47 | 
        (27) Ок. В ХДТО-пакете ВС-ссылки поставь "Возможно пустое" = Истина, это и есть nillable = true     | |||
| 36
    
        Cyberhawk 17.03.20✎ 17:48 | 
        Но вообще конфигурацию насиловать необязательно, в (10) и подразумевался способ, описанный в (33).     | |||
| 37
    
        rumi 17.03.20✎ 21:49 | 
        (34) (36)
 Начал сначала: Удалил из конфы WS-ссылку Добавил из файла xsd схему. В конфе появился XDTO-пакет. Удалил параметр runAs. Заполнил параметры: Определение = Новый WSОпределения("http://srs.gs1ru.org/GS46_Interfaces/GS1RU_Operations?wsdl", Пользователь, Пароль); Прокси = Новый WSПрокси(Определение, ПространствоИмен, ИмяСервиса, ТочкаПодключения,); Прокси.Пользователь = Пользователь; Прокси.Пароль = Пароль; типSaveDataObjectRecord = ФабрикаXDTO.Тип(ПространствоИмен, "SaveDataObjectRecord"); параметрыSaveDataObjectRecord = ФабрикаXDTO.Создать(типSaveDataObjectRecord); параметрыSaveDataObjectRecord.dataObjectRecord = ПолучитьОбъектDataObjectRecord(); параметрыSaveDataObjectRecord.change_version = false; параметрыSaveDataObjectRecord.lang = "RU"; Здесь туплю. Как его теперь отправить и получить ответ? ОтветОтСервера = ??? | |||
| 38
    
        Cyberhawk 18.03.20✎ 09:23 | 
        (37) Зачем ты что-то в конфу добавляешь и правишь в ней, если прокси все равно создаешь по wsdl-описанию из онлайна (от поставщика сервиса)?
 "Как его теперь отправить и получить ответ?" // Ну так же, как и раньше - Прокси.SaveDataObjectRecord(параметрыSaveDataObjectRecord); | |||
| 39
    
        rumi 18.03.20✎ 13:53 | 
        (38) 
 Потому у меня и пошел ступор, что все равно придется вызывать функцию у них на сервере и передавать туда параметры (а их там будет 4), хотя в XML описана эта функция с одним параметром parameters в который и добавляем нужные. На самом деле тут проблема в том, что 1С почему-то по разному импортирует XML блоки. Может быть есть какая-то обработка для редактирования импортированной схемы из ws-ссылки? Написал к ним в тех поддержку. Они создали тикет. Надеюсь удалят ненужный им параметр из XML | |||
| 40
    
        Cyberhawk 18.03.20✎ 16:31 | 
        "1С почему-то по разному импортирует XML блоки" // Ну, в (25) же об этом речь.
 У тебя всегда есть железобетонный вариант, который сработает всегда - это формировать СОАП-конверт вручную (в виде xml-текста) и стучаться в веб-сервис не через ВС-прокси, а через ХТТП-соединение | |||
| 41
    
        rumi 13.04.20✎ 18:06 | 
        (40) К сожалению, так и сделал. Вручную составлял запрос через HTTPСоединение. 
 Вот здесь похожая тема https://partners.v8.1c.ru/forum/message/1781734 | |||
| 42
    
        DES 13.04.20✎ 18:10 | 
        4 ПАРАМЕТР ПОПРОБУЙ 0 ИЛИ -1     | |||
| 43
    
        rumi 13.04.20✎ 18:19 | 
        (42) Пробовал. Проверки на null у них нет (выполнение на сервере прекращается), а на любое другое значение  стоит заглушка - возвращает ошибку, что такое значение нельзя использовать. Криворукие разрабы. Говорят, что у всех работает, проблема в 1С. В чем-то они конечно правы, но они сами костылей напихали.     | |||
| 44
    
        rumi 13.04.20✎ 18:20 | 
        *Сервис на java     | |||
| 45
    
        sevod 13.04.20✎ 21:09 | 
        (43) Есть утилита SoapUI. Если из нее работает, ковыряй дальше у себя. Если не работает, шлешь им все настройки тестовые и пусть правят. Они ее наверняка знают.     | |||
| 46
    
        pechkin 13.04.20✎ 23:04 | 
        А если пустую строку передать?     | 
| Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |