Имя: Пароль:
1C
 
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, создавать их в коде, правильно заполнять и т.п. мне сейчас некогда разбираться, будет время - посмотрю если не забуду