Имя: Пароль:
1C
1С v8
Создание простейшего веб сервиса
,
0 kimba
 
07.10.11
17:10
Хочу сделать простейший пример веб сервиса.
Есть 2 базы 1с82, в одной веб сервис с функцией "GetNumbers" с параметрами data1 и data2 (тип указал date (http://www.w3.org/2001/XMLSchema)).
Возвращаться должен список номеров документов в периоде между data1 и data2.
Опубликовал на апаче.
Что не получилось:
1) Пытаюсь добавить web ссылку во вторую базу, она добавляется но при экспорте wsdl ничего не происходит. Я так понял что должно нарисоваться дерево параметров.

2) Функция получения такая:

Функция GetSamples(ДатаНач, ДатаКон)
   Запрос = Новый Запрос;
   Запрос.Текст =
   "ВЫБРАТЬ
   |    Заявка.Номер
   |ИЗ
   |    Документ.Заявка КАК Заявка
   |ГДЕ
   |    Заявка.Дата МЕЖДУ &ДатаНач И &ДатаКон";
   
   Запрос.УстановитьПараметр("ДатаНач", ДатаНач);
   Запрос.УстановитьПараметр("ДатаКон", ДатаКон);
   Результат = Запрос.Выполнить();
   СписокНомеров = Новый СписокЗначений;
   Выборка = Результат.Выбрать();
   Пока Выборка.Следующий() Цикл
       СписокНомеров.Добавить(Выборка.Номер);
   КонецЦикла;
   Возврат СписокНомеров;
КонецФункции

Понятно конечно что она щас не работает как надо, вопрос как из date (http://www.w3.org/2001/XMLSchema) преобразовать в дату
и вопрос как вернуть список в виде XDTO.

3) Как будет выглядеть процедура получения данных во второй базе?
1 kimba
 
07.10.11
18:17
АП
2 Asmody
 
07.10.11
18:28
пакет XDTO в 1 базе создал?
3 kimba
 
07.10.11
19:10
Да, теперь создал, добавил туда элемент тип:
Именя: ListOfNumbers
Вариант: список
Тип элемента: string (http://www.w3.org/2001/XMLSchema)
Указал его использование в веб сервисе
и добавил выходной параметр Results в веб сервис с типом ListOfNumbers.

Что дальше? во второй базе при импорте WSDL ничего не изменилось
4 Asmody
 
07.10.11
19:11
(3) пакет к сервису привязал?
5 kimba
 
07.10.11
19:13
(4) Ну да, на закладке "прочее" у сервиса в поле "Пакеты XDTO", ты это имеешь ввиду?
6 kimba
 
07.10.11
19:19
не верно ссылку на wsdl задал для второй базы, изменил и теперь выдает ошибку при импорте:

Ошибка при выполнении файловой операции  'http://Admin:[email protected]/base/ws/GetNumbersOfDocuments?wsdl'
по причине:
Ошибка работы с Интернет:  внутренняя ошибка сервера (500). <soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
   <soap:Header/>
   <soap:Body>
       <soap:Fault>
           <faultcode>soap:Client</faultcode>
           <faultstring>Операция не найдена:  {http://www.altey.ru}:GetNumbersOfDocuments:GetSamples()</faultstring>;
           <detail>Операция не найдена:  {http://www.altey.ru}:GetNumbersOfDocuments:GetSamples()</detail>;
       </soap:Fault>
   </soap:Body>
</soap:Envelope>
по причине:
Ошибка работы с Интернет:  внутренняя ошибка сервера (500)

Я так понимаю проблеммы с настройкой апача?
7 kimba
 
10.10.11
11:47
Разобрался, проблема была в другом.
Теперь есть еще один вопрос:
Объявил объект в 1 базе в пакете XDTO
Выглядит так:

<xs:schema xmlns:tns="http://www.altey.ru" xmlns:xs="http://www.w3.org/2001/XMLSchema" targetNamespace="http://www.altey.ru" attributeFormDefault="unqualified" elementFormDefault="qualified">
<xs:complexType name="OrderParam">
 <xs:sequence>
  <xs:element name="order_mis_id" type="xs:string"/>
  <xs:element name="order_barcode" type="xs:string"/>
  <xs:element name="patient_mis_id" type="xs:string"/>
  <xs:element name="patient_number" type="xs:string"/>
  <xs:element name="patient_family" type="xs:string"/>
  <xs:element name="patient_name" type="xs:string"/>
  <xs:element name="patient_patronum" type="xs:string"/>
  <xs:element name="patient_sex" type="xs:string"/>
 </xs:sequence>
</xs:complexType>
</xs:schema>

Создал новую функцию и добавил ей один параметр, тип которого этот объект.

Вопрос: как из второй базы передать в эту функцию параметр в виде этого объекта? Я так понимаю нужно создать этот объект XDTO и заполнить его, КАК?
8 kimba
 
10.10.11
12:29
апппп
9 Serginio1
 
10.10.11
12:33
Прокси.ФабрикаXDTO
10 Serginio1
 
10.10.11
12:34
11 kimba
 
10.10.11
12:55
Не работает, код:

   СервисAltey = WSСсылки.WSСсылка.СоздатьWSПрокси("http://www.altey.ru", "LIS_Service", "LIS_ServiceSoap");
   ПараметрыЗаказаТип = СервисAltey.ФабрикаXDTO.Тип("http://www.altey.ru", "OrderParam");
   ПараметрыЗаказа = ФабрикаXDTO.Создать(ПараметрыЗаказаТип);

Выдает ошибку:

Несоответствие типов XDTO:
Тип '{http://www.altey.ru}OrderParam' не найден
Тип принадлежит пакету, отсутствующему в фабрике типов XDTO

Хотя данный код работает в базе №1.
Видимо где то что-то я не добавил. Где?
12 kimba
 
10.10.11
12:58
Блин не так создание написал, надо:
СервисAltey.ФабрикаXDTO.Создать(ПараметрыЗаказаТип);
13 kimba
 
16.10.11
19:26
Еще вопрос необходимо чтобы 1с предоставляло список номенклатуры своей. Соответственно это не фиксированный массив объектов XDTO. Как?

Создал тип объекта в XDTO объектах с 2мя реквизитами: "наименование" и "код".
Что должна возвращать функция у веб сервиса? Как сформировать этот список?
14 Serginio1
 
17.10.11
16:26
Сделай Тип данных  с двумя праметрами. Создай еще Тип данных и добаввь поле типа ранее созданной структуры.
У этого поля Минимальное Количество 0 максимальное количество -1
Есть два вида языков, одни постоянно ругают, а вторыми никто не пользуется.