![]() |
![]() |
![]() |
|
v8: Web-сервисы пример аэрофлот | ☑ | ||
---|---|---|---|---|
0
John Connor
13.01.09
✎
11:28
|
Пытаюсь разобраться с web-сервисами. Нашел пример в книге знаний:
Книга знаний: v8: Использование внешних web-сервисов в 1С:Предприятие 8 Все сделал как было написано. Но выдает ошибку при попытке получить список аэропортов: "Ошибка вызова операции сервиса: {http://www.aeroflot.ru/}:FlightStatus:AirportList()" Может кто подскажет как с этим бороться? На других форумах тоже встречаются сообщения с подобной ошибкой, но решения я там не нашел. |
|||
1
gvido
13.01.09
✎
11:29
|
какая версия платформы?
|
|||
2
John Connor
13.01.09
✎
11:30
|
8.1.12.101
|
|||
3
ASV
13.01.09
✎
11:32
|
не работает он. по крайне мере в текущий момент
|
|||
4
gvido
13.01.09
✎
11:32
|
||||
5
John Connor
13.01.09
✎
11:32
|
(3) т.е. проблема в самом сервисе?
|
|||
6
ASV
13.01.09
✎
11:33
|
(3) ой. это ero отработал
|
|||
7
gvido
13.01.09
✎
11:34
|
нет проблема в версии платформы
|
|||
8
gvido
13.01.09
✎
11:35
|
к сожалению в версии 8.1.12.101 были произведены какие то изменения в работе Web-сервисов... Что не лучшим образом на них отразилось((((
|
|||
9
John Connor
13.01.09
✎
11:37
|
Не знаю на счет текущей версии платформы, но есть сообщения что этот сервис не работает даже на 8.1.8. Сообщения с форума itland.
А сам сервис да, работает. |
|||
10
John Connor
13.01.09
✎
11:38
|
Там на тесте использовалась платформа 8.1.6. на ней сервис отрабатывал.
А вот дальше уже что-то не пошло. |
|||
11
Mitriy
13.01.09
✎
11:39
|
прокся мешает, имхо...
|
|||
12
John Connor
13.01.09
✎
11:42
|
(11) А можно поподробнее. В какие настройки лезть?
|
|||
13
gvido
13.01.09
✎
11:44
|
У меня Web-сервис корректно работает на 8.1.11.67, правда не аэрофлотовский.
А на 8.1.12.101 корректно отрабатывается только передача простых типов значений, ИМХО |
|||
14
John Connor
13.01.09
✎
11:46
|
(13) Насколько я понимаю AirportList() вообще не передает никаких параметров.
|
|||
15
John Connor
13.01.09
✎
12:22
|
Может автор статьи в курсе, что надо настроить? Если не ошибаюсь Asmody, просвети, плиз.
|
|||
16
John Connor
13.01.09
✎
15:57
|
А чем можно посмотреть запрос который он отправляет сервису?
|
|||
17
Asmody
модератор
13.01.09
✎
18:11
|
аж самому интересно стало.
я не знаю, что там поменялось в платформе или сервисе Аэрофлота (а скорее всего и там, и там), вот такой код работает: СервисАэрофлот=WSСсылки.Аэрофлот.СоздатьWSПрокси("http://www.aeroflot.ru/", "FlightStatus", "FlightStatusSoap" ); СписокВыбора=ЭлементыФормы.ВыборАэропорта.СписокВыбора; СписокВыбора.Очистить(); ТипAirportList = СервисАэрофлот.ФабрикаXDTO.Пакеты.Получить("http://www.aeroflot.ru/").Получить("AirportList"); al=СервисАэрофлот.ФабрикаXDTO.Создать(ТипAirportList); СписокАэропортов=СервисАэрофлот.AirportList(al).AirportListResult.Airport; ВсегоАэропортов=СписокАэропортов.Количество(); Для ии=0 по ВсегоАэропортов-1 Цикл Аэропорт=СписокАэропортов.Получить(ии); СписокВыбора.Добавить(Аэропорт.code, ""+Аэропорт.city+" : "+Аэропорт.name); КонецЦикла; |
|||
18
Asmody
модератор
13.01.09
✎
18:12
|
(17)+ платформа 1С:Предприятие 8.1 (8.1.12.101)
|
|||
19
awers
13.01.09
✎
18:21
|
Обработка.ТаблоВылетов.Форма.Форма(12)}: Ошибка при вызове метода контекста (AirportList): Ошибка вызова операции сервиса: {http://www.aeroflot.ru/}:FlightStatus:AirportList()
СписокАэропортов=СервисАэрофлот.AirportList().ПолучитьСписок("list"); по причине: Ошибка вызова операции сервиса: {http://www.aeroflot.ru/}:FlightStatus:AirportList() по причине: Неизвестная ошибка. Ошибка работы с Интернет: Send failed since rewinding of the data stream failed по причине: Ошибка работы с Интернет: Send failed since rewinding of the data stream failed |
|||
20
John Connor
14.01.09
✎
12:33
|
(17) хм.. может у меня руки кривые, но такой код не работает.
{Обработка.Табло.Форма.Форма(24)}: Ошибка при вызове метода контекста (Создать): Несоответствие типов (параметр номер '1') al=СервисАэрофлот.ФабрикаXDTO.Создать(ТипAirportList); по причине: Несоответствие типов (параметр номер '1') Посмотрел в отладчике, значение ТипAirportList - Неопределено. Попробовал передать значение по индексу ТипAirportList = СервисАэрофлот.ФабрикаXDTO.Пакеты.Получить("http://www.aeroflot.ru/").Получить(1); ТипAirportList Знаение: {http://www.aeroflot.ru/}ArrayOfAirport Тип: ТипОбъектаXDTO но тогда ругается в следующей строке: {Обработка.Табло.Форма.Форма(13)}: Слишком много фактических параметров СписокАэропортов=СервисАэрофлот.AirportList(al).AirportListResult.Airport; |
|||
21
Asmody
14.01.09
✎
12:46
|
(20) версия платформы какая?
да, wsdl брать этот: http://webservices.aeroflot.ru/flightstatus.asmx?WSDL |
|||
22
John Connor
14.01.09
✎
12:51
|
версия 8.1.12.101
Щас попробую. |
|||
23
John Connor
14.01.09
✎
12:53
|
(21) Спасибо огромное, заработало как надо. Буду разбираться дальше.
|
|||
24
AntonU
27.01.09
✎
12:33
|
Данные=СервисАэрофлот.Arrival(ВыборАэропорта, ДатаРейса,,).Flight - список почему-то всегда пустой.
Где ошибка? |
|||
25
AntonU
27.01.09
✎
12:48
|
up
|
|||
26
AntonU
27.01.09
✎
14:38
|
(17) - а процедура заполнения данных по прилету\вылетуне работает
СервисАэрофлот=WSСсылки.Аэрофлот.СоздатьWSПрокси("http://www.aeroflot.ru/", "FlightStatus", "FlightStatusSoap" ); ТаблицаТабло.Колонки.Очистить(); ТаблицаТабло.Колонки.Добавить("КодРейса",, "Код рейса"); ТаблицаТабло.Колонки.Добавить("КодАвиакомпании",, "Авиакомпания"); ТаблицаТабло.Колонки.Добавить("НомерРейса",, "Номер"); ТаблицаТабло.Колонки.Добавить("АэропортТранзит",, "Аэропорт-транзит"); ТаблицаТабло.Колонки.Добавить("Аэропорт",, "Аэропорт "+?(Прилет,"вылета","прилета")); ТаблицаТабло.Колонки.Добавить("ВремяРасписание",, "По расписанию"); ТаблицаТабло.Колонки.Добавить("ВремяПланируемое",, "Планируемое"); ТаблицаТабло.Колонки.Добавить("ВремяФактическое",, "Фактическое"); ТаблицаТабло.Колонки.Добавить("ВремяРасчетное",, "Расчетное"); ТаблицаТабло.Колонки.Добавить("ВремяПосадки",, ?(Прилет,"Посадка","Взлет")); ТаблицаТабло.Колонки.Добавить("ОбъедРейс",, "Объед.рейс"); ТаблицаТабло.Колонки.Добавить("Статус",, "Статус"); Если Не Прилет Тогда ТаблицаТабло.Колонки.Добавить("Регистрация",, "Регистрация"); ТаблицаТабло.Колонки.Добавить("Посадка",, "Посадка"); КонецЕсли; ЭлементыФормы.ТаблицаТабло.СоздатьКолонки(); ЭлементыФормы.ТаблицаТабло.Колонки.КодРейса.Видимость=Ложь; Если Не Прилет Тогда ЭлементыФормы.ТаблицаТабло.Колонки.ВремяРасчетное.Видимость=Ложь; КонецЕсли; Если Прилет Тогда ("http://www.aeroflot.ru/").Получить("Arrival"); Данные=СервисАэрофлот.Arrival(ВыборАэропорта, ДатаРейса,"airport","desc").Flight; Иначе ДатаРейса).ПолучитьСписок("list"); Данные=СервисАэрофлот.Departure(ВыборАэропорта, ДатаРейса,,).Flight; КонецЕсли; Данные - всегда пустой список :-( |
|||
27
AntonU
27.01.09
✎
15:45
|
Указанная по ссылке Книга знаний: v8: Использование внешних web-сервисов в 1С:Предприятие 8 процедура также не работает
Процедура ЗаполнитьТабло(Прилет=Истина) ТаблицаТабло.Колонки.Очистить(); ТаблицаТабло.Колонки.Добавить("КодРейса",, "Код рейса"); ТаблицаТабло.Колонки.Добавить("КодАвиакомпании",, "Авиакомпания"); ТаблицаТабло.Колонки.Добавить("НомерРейса",, "Номер"); ТаблицаТабло.Колонки.Добавить("АэропортТранзит",, "Аэропорт-транзит"); ТаблицаТабло.Колонки.Добавить("Аэропорт",, "Аэропорт "+?(Прилет,"вылета","прилета")); ТаблицаТабло.Колонки.Добавить("ВремяРасписание",, "По расписанию"); ТаблицаТабло.Колонки.Добавить("ВремяПланируемое",, "Планируемое"); ТаблицаТабло.Колонки.Добавить("ВремяФактическое",, "Фактическое"); ТаблицаТабло.Колонки.Добавить("ВремяРасчетное",, "Расчетное"); ТаблицаТабло.Колонки.Добавить("ВремяПосадки",, ?(Прилет,"Посадка","Взлет")); ТаблицаТабло.Колонки.Добавить("ОбъедРейс",, "Объед.рейс"); ТаблицаТабло.Колонки.Добавить("Статус",, "Статус"); Если Не Прилет Тогда ТаблицаТабло.Колонки.Добавить("Регистрация",, "Регистрация"); ТаблицаТабло.Колонки.Добавить("Посадка",, "Посадка"); КонецЕсли; ЭлементыФормы.ТаблицаТабло.СоздатьКолонки(); ЭлементыФормы.ТаблицаТабло.Колонки.КодРейса.Видимость=Ложь; Если Не Прилет Тогда ЭлементыФормы.ТаблицаТабло.Колонки.ВремяРасчетное.Видимость=Ложь; КонецЕсли; Если Прилет Тогда Данные=СервисАэрофлот.Arrival(ВыборАэропорта, ДатаРейса).ПолучитьСписок("list"); Иначе Данные=СервисАэрофлот.Departure(ВыборАэропорта, ДатаРейса).ПолучитьСписок("list"); КонецЕсли; ВсегоЗаписей=Данные.Количество(); Для ии=0 по ВсегоЗаписей-1 Цикл Запись=ДАнные.Получить(ии); НоваяСтрока=ТаблицаТабло.Добавить(); НоваяСтрока.КодАвиакомпании=Запись.company; НоваяСтрока.НомерРейса=Запись.flight_no; НоваяСтрока.АэропортТранзит=Запись.airport_inter; НоваяСтрока.Аэропорт=Запись.airport; НоваяСтрока.ВремяРасписание=Запись.sched; НоваяСтрока.ВремяПланируемое=Запись.plan; НоваяСтрока.ВремяФактическое=Запись.fact; НоваяСтрока.ВремяРасчетное=Запись.calc; НоваяСтрока.ВремяПосадки=Запись.real; НоваяСтрока.ОбъедРейс=Запись.union_flight_no; НоваяСтрока.Статус=Запись.status; Если Не Прилет Тогда НоваяСтрока.Регистрация=Запись.is_check; НоваяСтрока.Посадка=Запись.is_board; КонецЕсли; КонецЦикла; КонецПроцедуры Ошибка в команде Данные=СервисАэрофлот.Arrival(ВыборАэропорта, ДатаРейса).ПолучитьСписок("list"); Как ее исправить? |
|||
28
Asmody
27.01.09
✎
16:15
|
видимо что-то там где-то поменялось. теперь методы веб-сервисов требуют параметров типа объект XDTO. нужно разобраться каких параметров хотят методы Arrival и Departure, создавать их в коде, правильно заполнять и т.п. мне сейчас некогда разбираться, будет время - посмотрю если не забуду
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |