|
1С:Предприятие
:: 1С:Предприятие 8 общая
|
|
| ||
new_hope 09.04.20 - 18:55 | Имею работающий Веб сервис. Все работает, данные получаю. Вернее получал до сегодняшнего дня.
Делал запросы - получал данные и все было хорошо. Данные, которые я получал были в таблице, поля которой были исключительно примитивных типов (Строки, числа) Появился на ресурсе новый метод, мне его нужно использовать и получать данные, но в таблице (ответе) появился тип (не примитивный), как я понимаю, ссылка на другую таблицу (или строку другой таблицы с данными). И все. При запросе получаю ошибку: http://i.piccy.info/i9/3ce5f37aa06c1bdd4178664e75d5eca2/1586446965/16763/1372020/Oshybka.png Код: http://i.piccy.info/i9/dfa68d23bc7a7c0dc3adc2235febe528/1586446560/24219/1372020/Kod.png ВС_Ссылка http://i.piccy.info/i9/8c66be63a64ad07501d02f86616524c9/1586447616/8452/1372020/WS_Link.png Описание типов?: http://i.piccy.info/i9/18d60f474d77935ea16a67a37dccaa3a/1586447699/14998/1372020/OpysanyeTypov.png и сама "подчиненная" таблица: http://i.piccy.info/i9/b5410fa5ecf873d50d5ba1ecd04ce915/1586447763/7558/1372020/Opysanye_tablytsy_etoi_ssylky.png Постарался как смог описать свою проблему. Не пойму, как получить в 1С данные. Например - программой SoapUI я получаю данные. | ||
new_hope 1 - 09.04.20 - 19:06 | То-есть оно пишет ошибку, что не может типа проверить это "дополнительное" свойство (то-есть это поле, которое не примитивное а является явно другой таблицей...) Как это все увязать?
Хотябы пример какойто похожий? | ||
acht 2 - 09.04.20 - 19:08 | вссылку обнови | ||
new_hope 3 - 09.04.20 - 19:09 | (2) та это сделано в самую первую очередь... Или ее нужно динамически обновлять при каждом запросе? (я ее в конфигураторе тока обновил) | ||
NorthWind 4 - 09.04.20 - 19:24 | Может, поднять фиддлер и посмотреть что реально приходит, а потом сравнить это со схемой? Если метод свежевнедренный, то не исключены и ошибки разработчиков сервиса... | ||
new_hope 5 - 09.04.20 - 19:25 | (4) А что такое Фиддлер? Можно чуть поподробнее, по этому моменту? | ||
new_hope 6 - 09.04.20 - 19:26 | (4) Понял... прокси отладочный... ну это также для меня новое поле знаний | ||
NorthWind 7 - 09.04.20 - 19:27 | (5) это такая штука, которая перехватывает веб-трафик (wininet.dll) и показывает его. Веб-отладчик. Можно смотреть что вы отправляете на сервис и получаете с него | ||
Cyberhawk 8 - 09.04.20 - 19:34 | Так у тебя в ответе походу приходит не то содержимое, что ожидается | ||
new_hope 9 - 09.04.20 - 19:41 | (8) нууу... наверное да... Но вот программой SoapUI которой меня ткнули носом - данные получает - она отрабатывает и какие то данные приходят... типа "на все работает"
А в 1С? С точки зрения кода и запроса все ок? рядом методы работают - но там тока примитивные типы. В методах, где есть кроме примитивных типов данных - вот то, что я указал - все. капут! | ||
Cyberhawk 10 - 09.04.20 - 19:42 | Если дашь доступ к веб-сервису, то смогу посмотреть | ||
Garykom 11 - 09.04.20 - 19:45 | |||
new_hope 12 - 09.04.20 - 20:01 | (11) Уже. В конфигураторе | ||
new_hope 13 - 09.04.20 - 20:02 | Вот в сторонней программе запрос отрабатывает:
http://piccy.info/view3/13748209/7d6ad3d5935fb9963e5e7f129d19d63f/ | ||
new_hope 14 - 09.04.20 - 20:02 | Короче - надо торбить разработчика, как я понял | ||
NorthWind 15 - 09.04.20 - 20:10 | (13) вы обратили внимание, что у вас в теге ACTS элементов меньше чем указано в схеме? D_ISSUE и ORDERS нет. Они ненароком не обязательные? По остальным нормально все - т.е. данные примерно соответствуют типам и фасетам? | ||
NorthWind 16 - 09.04.20 - 20:13 | дело не в том отрабатывает запрос или нет. Дело в том что вы XDTO-пакет для разбора ответа генерируете по схеме, но во-первых, в схеме не исключены мелкие косяки, во-вторых, составные элементы в SOAP могут представляться немножко по-разному и из-за этого разные клиентские библиотеки иногда лажаются. 1Cный XDTO не исключение. | ||
new_hope 17 - 09.04.20 - 20:17 | (15) Понял... а и вправду - нету в ответе "D_ISSUE и ORDERS".... Както странно | ||
NorthWind 18 - 09.04.20 - 20:23 | (17) на самом деле если они необязательные, то это влиять не должно. Надо проверить. | ||
new_hope 19 - 09.04.20 - 20:26 | (18) А как понять, обязательные они или нет? Это можно в описании wdsl увидеть? | ||
new_hope 20 - 09.04.20 - 20:30 | |||
new_hope 21 - 09.04.20 - 20:35 | А.... и может это.... версия 1С 8.3.10 | ||
NorthWind 22 - 09.04.20 - 20:53 | (20) минимальное количество элементов D_ISSUE=1. Т.е. как минимум один должен быть. А у вас ни одного. | ||
NorthWind 23 - 09.04.20 - 20:54 | + поменяйте на ноль и посмотрите что и как будет происходить | ||
NorthWind 24 - 09.04.20 - 20:56 | это я и имел в виду под "мелкими косяками". Элем описан как обязательный, но в продакшене ответ идет без него. | ||
Cyberhawk 25 - 10.04.20 - 13:37 | (20) Минимальное кол-во = 1, обязательное | ||
new_hope 26 - 10.04.20 - 14:14 | Еще вопрос - ответ от сервера - это данные в виде XML ? | ||
NorthWind 27 - 10.04.20 - 14:16 | (26) да, конечно. SOAP так и работает - запрос в виде XML, ответ тоже в виде XML. | ||
new_hope 28 - 10.04.20 - 14:17 | И и этот "ответ" (XML) 1С-ка преобразует в свой собственный объект XDTO.... Верно я понимаю? | ||
NorthWind 29 - 10.04.20 - 14:19 | (28) нет. Как я понимаю, сервер отправляет ответ, XDTО-пакет его проверяет на соответствие схеме (где у вас и происходит ошибка) и затем разбирает, разбрасывая данные по полям. После чего к ним можно обращаться из программы на 1С. | ||
NorthWind 30 - 10.04.20 - 14:20 | * сорри, неверно вашу реплику прочитал. Все верно. Рекламное место пустует | ||
new_hope 31 - 10.04.20 - 14:23 | (25) Не меняя ничего они мне смоделировали набор данных (за один определенный деть) со всеми полями, которые есть и указаны. Всеравно ошибка. | ||
new_hope 32 - 10.04.20 - 14:30 | У меня поле "ORDERS" составного (не примитивного типа)... для таких полей нет никаких в 1С определенных специальных методов работы или получения данных?
Короче... уже всех задрал чувствую :-) пардон. | ||
NorthWind 33 - 10.04.20 - 14:49 | (31) навскидку сказать сложно, нужно проводить эксперименты. Как вариант, можно "сыграть" наоборот - заполнить поля в XDTO-пакете и записать XML, и сравнить получившееся с тем что возвращается сервером. Тут и вылезет косяк. | ||
new_hope 34 - 10.04.20 - 16:56 | Маленький вопрос.. Это не может касаться моего Варианта (вычитал на просторах интернета, в том числе и на ИТС):
Типы делятся на простые (simple) и составные (complex). Составные типы могут иметь несколько моделей содержимого, но XDTO поддерживает только простые последовательности свойств - так называемые sequence. (Для контента сложных типов следует использовать только модель sequence - ИТС) Может быть проблема какраз в этом? | ||
NorthWind 35 - 10.04.20 - 18:44 | (34) да, вполне может быть в этом. | ||
Сияющий в темноте 36 - 10.04.20 - 23:20 | можно через httpзапрос отправить запрос и разобрать ответ вручную,но это придется пеоеписывать при каждом изменении сервиса. | ||
Сияющий в темноте 37 - 10.04.20 - 23:21 | и можно спросить,если на той стороне сервис писали кодом,то лучше и на этой работать кодом,тогда странных ошибок будет меньше. | ||
H A D G E H O G s 38 - 10.04.20 - 23:33 | Тащить WSDL схему на каждый чих - такое себе.
Закешируйте его в tmp файл при первом обращении программы и обновляй при перезапуске 1С. | ||
NorthWind 39 - 11.04.20 - 08:17 | |||
new_hope 40 - 13.04.20 - 14:53 | (37) Кодом - это как...на этой стороне? Можно "работать" еще както совсем другим кодом?
На той стороне НЕ 1С | ||
NorthWind 41 - 13.04.20 - 19:31 | (40) это понятно что не 1С. Серьезные нагруженные системы такого плана пишутся на Java обычно или еще на чем-то подобном.
Имеется в виду следующее: вмешаться в механизм разбора XDTO-пакета нельзя, он - вещь в себе. У него, например, нет процедур обработки событий, которые бы позволили подправить входящие узлы перед обработкой или сделать еще что-то подобное. Поэтому если возможности по подправке XSD/WSDL исчерпаны, то остается только разбирать ответы руками, что адски неприятно для серьезных сервисов, где таких пакетов может быть много. | ||
NorthWind 42 - 13.04.20 - 19:38 | если вы уверены что у вас все хорошо со схемой - попробуйте платформу посвежее. Может, вам повезет и это ошибка платформы, которую со временем устранили. | ||
Serginio1 43 - 14.04.20 - 13:48 | Если вдруг не получится можно воспользоваться Использование классов .Net в 1С для новичков В свое время для таких случаев и писал
Не всегда сторонние схемы соответствует 1С Wsdl. Прелесть C# в том, что всегда можно для типа реализовать IXmlSerializable и ты сам будешь контролировать сериализацию. Ну или Скачать Wsdl и заменить тип на Any импортировать и уже самому программно разбирать объект XDTO | ||
new_hope 44 - 14.04.20 - 18:03 | (42) Пробовал и на 16-й версии - все таже ошибка, к сожалению.
Как я понимаю, со стороны 1С уже ниначто не повлиять. осталось ждать совместимости со стороны разработчика сервиса. :-( | ||
NorthWind 45 - 14.04.20 - 18:32 | (44) не видя xsd и не имея хотя бы 1-2 респонсов в виде текстовых файлов, трудно родить каких-либо идей кроме тех что уже были озвучены. Выложите - ну, можно будет попробовать выбрать время посмотреть. | ||
milan 46 - 14.04.20 - 20:34 | Плюнул в свое время , запрашиваю и разбираю ответы ручками. | ||
new_hope 47 - 15.04.20 - 17:40 | (46) можно пример как Вы это делаете? | ||
Serginio1 48 - 16.04.20 - 14:05 | |||
new_hope 49 - 17.04.20 - 12:22 | (46)
Получил информацию. Выкладываю XSD схему: https://mega.nz/file/0N1V1RqC#fKsFrc_cZDmsOWAUa2Nao_Wuc7yRHwzc8Em9u5BoIc8 И ответ сервера по запросу (xml файл): https://mega.nz/file/AN03TTbS#sP_fKiVQhO-OGhJrbqBbmKEhhnJc9_ZUtndsvfuseXM | ||
NorthWind 50 - 17.04.20 - 16:10 | Уже вижу косяк. В XSD у вас <xs:complexType name="OcInsOrderCompensationResponceDto"> <xs:sequence> <!-- Номер приказа на выплату --> <xs:element name="NUM_PO" type="xs:string" minOccurs="0" /> а в респонсе <ns2:ORDERS> <ns2:NUM>003/037/000012/20/1/1</ns2:NUM>т.е. номера обозваны по-разному. Если подправить в схеме NUM_PO на NUM и удалить из XML-файла SOAPовские обертки: ==Response_mista1.xml==
| ||
new_hope 51 - 17.04.20 - 16:56 | (50)ОГО - спасибо! Большое!
А по поводу "Соаповские" обертки - разработчики сервиса с ними тоже должны что-то подправить? | ||
new_hope 52 - 17.04.20 - 17:04 | Кстати - в WDSL файле также "NUM_PO" ::-( | ||
new_hope 53 - 17.04.20 - 18:06 | Все это от собственного незнания.... В Программе SoapUI есть возможность автоматически проверять "Правильность" соответствия данных -> схеме этих данных.
Немножко изучив функционал и нажав кнопочку "Validate" в окне ответа (где результат с данными) получил следующее - четко написано, что ожидается элемент "NUM_PO" (В ответе "NUM") line 17: Expected elements 'NUM_PO@http://othersoft.com/oc/schemas SUM_RECEIPT@http://othersoft.com/oc/schemas CUSTOMER_S@http://othersoft.com/oc/schemas OKPO@http://othersoft.com/oc/schemas' instead of 'NUM@http://othersoft.com/oc/schemas' here in element ORDERS@http://othersoft.com/oc/schemas | ||
NorthWind 54 - 17.04.20 - 18:34 | (51) > А по поводу "Соаповские" обертки - разработчики сервиса с ними тоже должны что-то подправить?
Думаю, что нет. Типы Envelope, Header, Body - служебные, они обрабатываются библиотекой SOAP-клиента, в схемах не указываются. А тип верхнего уровня OcConsolidatedCaseInfoListResponse, по-видимому, описан в WSDL. Все оставшееся нормально обрабатывается вашей схемой, если ее подправить. Если у вас есть контакт с разрабами - укажите им на ошибки. А если нет - исправьте сами ручками схему под данные да и пользуйтесь, пока не исправят. (53) так я ж вам еще неделю назад говорил - проверяйте схему и сравнивайте ее с ответом. У вас там не сотни атрибутов - с такими размерами схем безо всякого SOAPUI делается глазками за несколько минут. | ||
NorthWind 55 - 17.04.20 - 18:40 | как вариант - можно вообще в схеме указать оба атрибута, как необязательные:
<xs:element name="NUM" type="xs:string" minOccurs="0" /> <xs:element name="NUM_PO" type="xs:string" minOccurs="0" />и потом обработать программно встречаемость обоих из них. Т.е. по умолчанию берем NUM, а если его вдруг нет, то проверяем NUM_PO. В этом случае у вас программа не упадет, когда они исправят атрибут и ответ внезапно пойдет с NUM_PO вместо NUM. | ||
new_hope 56 - 21.04.20 - 09:58 | (54) Приветствую! Супер . Спасибо.. вроде как почти понял темперь все необходимые нюансы
Тоесть, мне достаточно отредактировать WDSL файл в соответствии с ответом (данными), которые приходят в ответ от сервера? Это конечно просто, буду его в отредактированом виде использовать локально с диска. Но вот саму схему (xsd файл) мне его прислали, обственно на сам файл и его расположение как повлиять или достаточно WDSL? | ||
new_hope 57 - 21.04.20 - 10:39 | (54) У меня все получилось! Спасибо всем огромное! Банальная невнимательность разработчика сервиса! | ||
NorthWind 58 - 21.04.20 - 13:11 | (56) когда вы создаете WS-ссылку в конфигурации, вы импортируете WSDL. Также вы импортируете XSD, когда создаете XDTO-пакеты. Раз вы проимпортировали - вы фиксируете то состояние, в котором оно пребывает на момент, например когда вы скачали его у разработчика и подправили под свои нужды. Если у разработчика сервиса что-то поменяется, то придется еще раз это все проделать и еще раз передать вашу конфу пользователям - обновить там или еще как-то.
Как я понимаю, в норме разработчик сервиса должен обеспечить такие XSD и WSDL, которые позволяют все нормально импортировать куда угодно - в дельфю, в 1С, в С# и т.д. Но на практике все не так просто - есть немного различающиеся механизмы представления сложных объектов в XML, разные библиотеки web-клиентов могут по-разному это все разбирать, что-то они могут уметь, а что-то не уметь (привет, XDTO), в некоторых языках может быть даже конфликт атрибутов с зарезервированными словами. Кроме того, разработчики сервисов, как в вашем случае, могут косячить, это не редкость, и крайне долго и неохотно исправлять свои косяки. Короче, править иногда приходится. Это практически норма. | ||
new_hope 59 - 21.04.20 - 14:09 | (58) Да, по поводу XSD файла... я его, фактически, только посмотрел! А внес изменения только в файл wdsl (согласно с XML фалом данных, которые отвечает сервер, что-бы все "совпадало") поместил файл локально и импортировал его в конфигурацию. И все сразу заработало без ошибок.
Это я к чему - к тому, что я так и не ПОНЯЛ, какую функцию несет тот XSD файл для 1C (ведь в нем осталосьвсе поля без изменений на стороне сервиса), оказалось, что достаточно только правильного WDSL файла и все. | ||
NorthWind 60 - 21.04.20 - 14:15 | (59) в wsdl-файле может быть вот так:
<wsdl:types>но вообще этот вопрос - скорее к разработчику сервиса. Рекламное место пустует |
|
Список тем форума
|