Имя: Пароль:
1C
1С v8
веб -сервисы 8.2
0 Dagmanor
 
02.05.13
12:22
Доброго времени суток. Может кто-то подсказать как передать в веб-сервис массив строк.
1 Wobland
 
02.05.13
12:24
и кто же это?
2 Dagmanor
 
02.05.13
12:25
Тип входящего параметра я поставил AnyType, при попытке получить элемент массива по индексу
"Перем1 = полученныймассив[0]"
получаю ошибку:
{WebСервис.Smart.Модуль(97)}: Отримання елементу за індексом для значення не визначено'.

Подскажите как правильно с ним работать
3 Dagmanor
 
02.05.13
12:29
Может я не правильно определил тип входящего параметра? или неправильно обращаюсь к элементам массива?
4 Dagmanor
 
02.05.13
12:49
Помогите, кто-нибудь.
5 Нуф-Нуф
 
02.05.13
12:52
поставль демо базу документооборота последнего релиза. там все есть
6 Dagmanor
 
02.05.13
12:56
На всякий случай уточню, массив передаю из Delphi
7 Dagmanor
 
02.05.13
13:15
Если не трудно, выложите пример.
8 yukon
 
02.05.13
13:19
(5) > поставль демо базу документооборота последнего релиза. там все есть

такого там нет. И похожего тоже.

(2) Отладчик в руки и смотри чего там в переменной.
А вообще неплохо бы код вызова показать.
9 Нуф-Нуф
 
02.05.13
13:29
(8) там нет передачи массива значений?
10 yukon
 
02.05.13
13:33
(9) В параметрах функции? нет.
11 yukon
 
02.05.13
13:39
(6) Вот ты и влип очкарик! (с)

Чтобы получить массив как параметр, этот параметр в вэб-сервисе должен иметь тип {http://v8.1c.ru/8.1/data/core}Array.

Сомневаюсь, что ты в Delphi формируешь объект именно этого типа.
12 alexei366
 
02.05.13
13:57
(11) Да создай свой тип или импортируй в 1С XDTO пакет со стандартным массивом, а из делфи его создавай и передавай
13 yukon
 
02.05.13
14:00
(12) Да зачем нам легкие пути? Там 99% на входе СписокXDTO, "для каждого" в руки и вперед.
14 Jaap Vduul
 
02.05.13
14:10
>> Тип входящего параметра я поставил AnyType
Надо объявлять примерно таким образом:
<xs:complexType name="МассивСтрок">
   <xs:sequence>
       <xs:element name="Строка" type="xs:string" nillable="true" minOccurs="0" maxOccurs="unbounded"/>
   </xs:sequence>
</xs:complexType>
Тогда извне это действительно будет выглядеть как массив строк.
В самой же 1цэ поскольку такого типа как "массив строк" не существует, параметр будет представлен типом "ОбъектXDTO".
И к элементам массива можно обращаться примерно так:
СтрокаМассиваНомерОдин = МассивСтрок.ПолучитьСписок("Строка")[0];
15 alexei366
 
02.05.13
14:23
(13) "{WebСервис.Smart.Модуль(97)}: Отримання елементу за індексом для значення не визначено'. ". Походу для Каждого уже не прокатит))
16 yukon
 
02.05.13
14:24
(15) Сделай

ВызватьИсключение Строка(ТипЗнч(полученныймассив));
17 Dagmanor
 
02.05.13
14:41
всем спасибо за ответы, попробую и отпишусь
18 alexei366
 
02.05.13
14:57
(16) Какое тут ВызватьИсключение, этож тебе не интерфейс а веб сервис
19 Dagmanor
 
02.05.13
15:00
(11)  параметру в вэб-сервисе поставил тип {http://v8.1c.ru/8.1/data/core}Array.
ВДелфи импортировал wsdl ссылку получил описание типов:
========
 Value   =  type string;      { "http://v8.1c.ru/8.1/data/core"[Alias] }
 Array_  = array of Value;                  { "http://v8.1c.ru/8.1/data/core"[GblCplx] }
==========

Далее передаю параметром :
var
p:Value;
_arr : Array_;
begin
SetLength(_arr,Length(_arr)+1);
p:= trim(Phone.Text);
_arr[High(_arr)]:=p;

GetSmartPortType.sendSMS(Парам1,Парам2,_arr,Парам4);
end;
=======
После чего получаю следующую ошибку...:


raised exception class ERemotableException with message 'Невідома помилка. Помилка перетворення даних XDTO:
Читання об`єкта типу: {http://v8.1c.ru/8.1/data/core}Array - [2,219]
Перевірка  додаткової властивості:
   форма: Атрибут
   ім`я: {http://www.w3.org/2003/05/soap-encoding}itemType
через:
Помилка перетворення даних XDTO:
Читання об`єкта типу: {http://v8.1c.ru/8.1/data/core}Array - [2,219]
Перевірка  додаткової властивості:
   форма: Атрибут
   ім`я: {http://www.w3.org/2003/05/soap-encoding}itemType
через:
Помилка перевірки даних XDTO:
Структура об’єкта не відповідає типу: {http://v8.1c.ru/8.1/data/core}Array
'.
===========================================
20 Dagmanor
 
02.05.13
15:01
Ткните меня носом... а то я с вэб-сервисами не сильно дркжу... :(
21 Jaap Vduul
 
02.05.13
15:14
(20)
Создаёшь новый XDTO пакет (или используешь свои, уже существующие), добавляешь в него тип объекта "МассивСтрок".
В этот тип добавляешь свойство "Строка" (минимальное кол-во = 0, максимальное кол-во = -1, тип = string (http://www.w3.org/2001/XMLSchema)).
Параметру веб-сервиса назначаешь этот новый тип "МассивСтрок".
Из дельфей передаёшь обычный массив строк.
В 1цэ в модуле метода веб-сервиса с элементами массива обращаешься как с типом СписокXDTO - см. (14).
22 Dagmanor
 
02.05.13
15:28
(21) Та же ошибка что и в (19) :
=============

Невідома помилка. Помилка перетворення даних XDTO:
Читання об`єкта типу: {http://localhost/smartws/str_arr/}МассивСтрок - [2,224]
Перевірка  додаткової властивості:
   форма: Атрибут
   ім`я: {http://www.w3.org/2003/05/soap-encoding}itemType
через:
Помилка перетворення даних XDTO:
Читання об`єкта типу: {http://localhost/smartws/str_arr/}МассивСтрок - [2,224]
Перевірка  додаткової властивості:
   форма: Атрибут
   ім`я: {http://www.w3.org/2003/05/soap-encoding}itemType
через:
Помилка перевірки даних XDTO:
Структура об’єкта не відповідає типу: {http://localhost/smartws/str_arr/}МассивСтрок

-----------
23 Dagmanor
 
02.05.13
15:40
АП
24 Dagmanor
 
02.05.13
15:59
ап
25 toypaul
 
гуру
02.05.13
16:37
В Дельфи не знаю как. В 1С недавно делал.
26 Dagmanor
 
02.05.13
16:52
Всем спасибо за помощь, проблема решена.
Компьютеры — прекрасное средство для решения проблем, которых до их появления не было.