|
веб-сервис | ☑ | ||
---|---|---|---|---|
0
ic-kat
26.06.12
✎
12:01
|
платформа 8.2
есть веб-сервис, передает и получает данные, все вроде корректно работает. возникла необходимость отправить в него тз с данными, пока отправляла только строковые. отправляю тз, выходит ошибка Отправка=Прокси.AddInvoices(тз); по причине: Несоответствие типов (параметр номер '1') что не так? |
|||
1
Cube
26.06.12
✎
12:07
|
(0) Передавать можно только примитивные типы (строка, число и т.п.). Если нужно передать список строк, то нужно делать XDTO-пакет для списка, а если нужно передать список объектов, то ещё и XDTO-пакет объекта.
|
|||
2
ic-kat
26.06.12
✎
12:11
|
нужен именно список строк.
если я в другой базе для проверки добавила ws-ссылку для проверки, то там я, понятно, сделаю XDTO-пакет для списка, а если с веб-сервисом работает и отправляет на него данные какая-то сторонняя программа, написанная на си, то там как это делается? |
|||
3
Cube
26.06.12
✎
12:27
|
(2) Даже не знаю как объяснить... Нужно на С описать XDTO-пакет и передать в нем строки... Если смотреть со стороны результата - в xml-файл, который формируется на С нужно вставить узел (это наш XDTO-пакет) и натолкать в этот узел наши строки.
|
|||
4
Fragster
гуру
26.06.12
✎
12:28
|
(3) при чем тут си вообще?
|
|||
5
Cube
26.06.12
✎
12:29
|
(4) Читай (2) в самом конце.
|
|||
6
Alex_MA
26.06.12
✎
12:30
|
Ветка метаданных XDTOПакеты - описать твой объект.
В инете поищи, где то на пальцах объяснено как работать с web сервисом. |
|||
7
Fragster
гуру
26.06.12
✎
12:30
|
(5) да и xdto не наод, можно просто правильный WSDL сделать
|
|||
8
ic-kat
26.06.12
✎
12:33
|
правильный - это какой?
|
|||
9
Fragster
гуру
26.06.12
✎
12:34
|
(8) в котором пакет XDTO описан внутрях. просто 1с пир импорте wsdlя само все создаст как надо
|
|||
10
ic-kat
26.06.12
✎
12:39
|
что значит, описан внутрях?
в веб-сервисе описала типа получаемых данных как таблицу |
|||
11
Serginio1
26.06.12
✎
13:04
|
(10) Как таблица значений? В любом случае ты должен создать объект через Прокси.Создать( ТипОбъектXDTO)
Книга знаний: Использование внешних web-сервисов в 1С:Предприятие 8 |
|||
12
Serginio1
26.06.12
✎
13:08
|
||||
13
Serginio1
26.06.12
✎
13:10
|
Тьфу Прокси.ФабрикаXDTO
|
|||
14
Cube
26.06.12
✎
13:14
|
(11) Если я правильно понял, то в статье описывается, как из 1С отправить список... А автору, на сколько я понял, нужно передать в 1С список...
|
|||
15
Cube
26.06.12
✎
13:15
|
(2) Ты откуда данные-то в 1С передаешь? Есть кусок кода хотя бы, где формируется запрос к web-сервису 1C?
|
|||
16
ic-kat
26.06.12
✎
13:17
|
(14)да, именно в 1с передать список
|
|||
17
Cube
26.06.12
✎
13:20
|
(16) Я, конечно не сильно много опыта имею, но выгрузку документов с андройда в 1С через веб сервис написать смог. Так что я знаю, как это написать на андройде и JavaScript, но в других языках, наверное, аналогично...
|
|||
18
ic-kat
26.06.12
✎
13:20
|
из 1с отправляются таблицы без проблем. как раз с созданием хдто
|
|||
19
Cube
26.06.12
✎
13:21
|
(18) Ты на (15) ответь.
|
|||
20
ic-kat
26.06.12
✎
13:29
|
(19) передаю не я, передает сишник, мне нужно в веб-сервисе нужную операцию добавить, чтобы принять данные и потом обрабатывать их.
|
|||
21
ic-kat
26.06.12
✎
13:30
|
остальные операции тестировала через веб-ссылку, а тут застряла
|
|||
22
ic-kat
26.06.12
✎
13:31
|
когда веб-сервис принимал строку, то в процедуре просто операцию присваивания использовала, при принятии таблицы что-то меняется?
|
|||
23
Cube
26.06.12
✎
13:34
|
(20) Ну? В чем проблема? Я тут недавно уже это рассказывал: v8: Список в параметр операции веб-сервиса
Вот скрин веб-сервиса: http://storage4.static.itmages.ru/i/12/0618/h_1340009101_7804304_6936d6e252.jpeg |
|||
24
Cube
26.06.12
✎
13:35
|
+(23) Только у меня там список объектов, а у тебя будет список строк, поэтому XDTO-пакет Document создавать тебе не надо.
|
|||
25
ic-kat
26.06.12
✎
13:39
|
у меня аналог, только имена другие.
XDTO-пакет создавать наверное все-таки нужно, потому что эээ... не совсем список строк, на самом деле массив 7 столбцов, строк куча. |
|||
26
ic-kat
26.06.12
✎
13:40
|
тема по поиску почему-то не вышла, читаю
|
|||
27
Cube
26.06.12
✎
13:43
|
(25) XDTO-пакет объекта тебе не нужен. Столбцы в твоей таблице это будут свойства XDTO-пакета твоего списка. Если в каждойй колонке тип примитивный, то XDTO-пакеты для них не нужны.
|
|||
28
ic-kat
26.06.12
✎
13:46
|
(27)сейчас у меня вот так http://i079.radikal.ru/1206/3b/7125e9cbf973.jpg
каждое значение массива будет строковым получается, что у ParametrsInvoices будет тип не InvoiceTable, а InvoiceRecord? |
|||
29
Cube
26.06.12
✎
13:48
|
(28) "получается, что у ParametrsInvoices будет тип не InvoiceTable, а InvoiceRecord?"
Получается так... |
|||
30
Serginio1
26.06.12
✎
14:20
|
Что то типа такого
Фабрика=Прокси.ФабрикаXDTO; ТипInvoiceTable= Фабрика.Тип(ПространствоИмен,"InvoiceTable"); ТипInvoiceRecord=Фабрика.Тип.Создать(ПространствоИмен,"nvoiceRecord"); InvoiceTable= Фабрика.Создать(ТипInvoiceTable); В цикле создаешь записи и добавляешь их в InvoiceRecordInvoiceRecord=Фабрика.Создать(ТипInvoiceRecord); InvoiceTable.InvoiceRecord.Добавить(InvoiceRecord); и вызываешь метод Прокси.AddInvoices(InvoiceTable); |
|||
31
ic-kat
26.06.12
✎
14:46
|
(30) так все-таки тип InvoiceTable?
|
|||
32
Serginio1
26.06.12
✎
14:48
|
Да, но строки то у тебя другогг типа.
InvoiceRecordInvoiceRecord=Фабрика.Создать(ТипInvoiceRecord); InvoiceRecordInvoiceRecord.СвойствоЗаписи="Значение этой записи" И добавляешь эту запись в таблицу InvoiceTable.InvoiceRecord.Добавить(InvoiceRecord); |
|||
33
Serginio1
26.06.12
✎
14:49
|
||||
34
ic-kat
26.06.12
✎
14:53
|
(33) как вставить кусок кода, чтобы как в (30) отображался?
|
|||
35
Serginio1
26.06.12
✎
14:54
|
||||
36
Serginio1
26.06.12
✎
14:56
|
Какой ти у твоего InvoiceRecord?
Тебе нужно поставить нужный ТипСтроки ТипInvoiceRecord=Фабрика.Тип.Создать(ПространствоИмен,ТипСтроки); Все остальное смотри 30 |
|||
37
ic-kat
26.06.12
✎
14:56
|
у меня вот так:
http://i079.radikal.ru/1206/3b/7125e9cbf973.jpg пишу: Фабрика=Прокси.ФабрикаXDTO; ТипInvoiceTable= Фабрика.Тип("блабла","InvoiceTable"); ТипInvoiceRecord=Фабрика.Тип("блабла","InvoiceRecord"); InvoiceTable = Фабрика.Создать(ТипInvoiceTable); Для Каждого СтрокаДанных Из ТЗ цикл InvoiceRecord = ФабрикаXDTO.Создать(ТипInvoiceRecord); InvoiceRecord.parametr1 = СокрЛП(СтрокаДанных.Первая); InvoiceRecord.parametr2 = СокрЛП(СтрокаДанных.Вторая); InvoiceRecord.parametr3 = СокрЛП(СтрокаДанных.Третья); InvoiceTable.dataRecord.Добавить(InvoiceRecord); КонецЦикла; Отправка=Прокси.AddInvoices(InvoiceTable); вываливается ошибка: Ошибка при вызове метода контекста (Создать) InvoiceRecord = ФабрикаXDTO.Создать(ТипInvoiceRecord); по причине: Несоответствие типов XDTO: Тип '{блабла}InvoiceRecord' не найден Тип принадлежит пакету, отсутствующему в фабрике типов XDTO |
|||
38
Serginio1
26.06.12
✎
14:59
|
А какой тип у InvoiceRecord?
|
|||
39
Serginio1
26.06.12
✎
15:00
|
Согласно рисунку У тебя InvoiceTable.InvoiceRecord.Добавить
|
|||
40
Serginio1
26.06.12
✎
15:02
|
Так не
InvoiceRecord = ФабрикаXDTO.Создать(ТипInvoiceRecord); а InvoiceRecord = Фабрика.Создать(ТипInvoiceRecord); |
|||
41
ic-kat
26.06.12
✎
15:04
|
ой, прохлопала, сейчас исправлю
|
|||
42
ic-kat
26.06.12
✎
15:06
|
теперь ругается так:
Поле объекта недоступно для записи (parametr1) InvoiceRecord.parametr1 = СокрЛП(СтрокаДанных.Первая); |
|||
43
Serginio1
26.06.12
✎
15:07
|
А в отладчике какие свойства?
|
|||
44
ic-kat
26.06.12
✎
15:08
|
(43) где именно в отладчике? и какие свойства?
|
|||
45
Serginio1
26.06.12
✎
15:09
|
А какой тип у этого parametr1?
|
|||
46
ic-kat
26.06.12
✎
15:09
|
строка
|
|||
47
Serginio1
26.06.12
✎
15:11
|
И у parametr2 тоже недоступно. Покажи рисунок свойств
|
|||
48
ic-kat
26.06.12
✎
15:14
|
||||
49
Serginio1
26.06.12
✎
15:17
|
Так Parametr1 это список. Тяжело 1С с такими параметрами.
Попробуй InvoiceRecord.parametr1.Добавить(СокрЛП(СтрокаДанных.Первая)); |
|||
50
ic-kat
26.06.12
✎
15:19
|
почему список?
|
|||
51
Serginio1
26.06.12
✎
15:21
|
А потому что максимальное равно -1. Посмотри на описание InvoiceRecord
|
|||
52
Serginio1
26.06.12
✎
15:21
|
в структуре InvoiceTable
|
|||
53
ic-kat
26.06.12
✎
15:22
|
какое значение должно быть, чтоб был не список?
|
|||
54
Serginio1
26.06.12
✎
15:27
|
0 и при этом галочки не должно стоять
|
|||
55
ic-kat
26.06.12
✎
15:34
|
большое спасибо!! все заработало
|
|||
56
ic-kat
26.06.12
✎
15:39
|
а что за тип данных получается в итоге?
|
|||
57
ic-kat
26.06.12
✎
15:46
|
(54)циклом не перебирается, метода количество у него нет. как его расковыривать?
|
|||
58
Serginio1
26.06.12
✎
15:58
|
(57) А вот 1С плохо с такими типами. Мне приходилось создавать прокси через C# используя v8: Объекты Net в IDispatch
В 1С прекрасно живут структуры типа InvoiceTable и InvoiceRecord. Кстати в C# они отображаются как массив структур. Сейчас под рукой нет 8 ки. Но там можно с этими свойствами поколдовать как с атрибутами. |
|||
59
ic-kat
26.06.12
✎
16:05
|
ууу... лес какой.
а есть возможность как-то по-другому или в других типах передать таблицу? или в любом случае потом изголяться придется, чтобы данные вытащить? |
|||
60
Serginio1
26.06.12
✎
16:20
|
Ну во первых смотри ссылку v8: Выгрузить таблицу в xml
ТипОбъектаXDTO=ФабрикаXDTO.Тип("http://v8.1c.ru/8.1/data/core","ValueTable"); Это будет универсальный тип. Между 1С через сериализатор они лекго создаются и востанавливаются. А вот как на других языках не знаю. А чем тебе не нравится структуры nbgf InvoiceTable и InvoiceRecord? |
|||
61
ic-kat
26.06.12
✎
16:27
|
(60) фуу, напугал меня))
вот так все данные веб-сервисом получаются и разбираются: Функция AddInvoices(ParametrsInvoices) Строка=""; Для Каждого Запись Из ParametrsInvoices.InvoiceRecord Цикл Строка=Строка+Запись.parametr1+Запись.parametr2+Запись.parametr3; КонецЦикла; Возврат Строка; КонецФункции это я для примера, что каждый элемент таблицы обрабатывается и в строку добавляется |
|||
62
Serginio1
26.06.12
✎
16:35
|
Ну конечно для примитивных типов это все работает.
Я про другое хотел сказать касаемо Таблицы значений когда у тебя количество колонок неограничено. Это ответ на вопрос " как-то по-другому или в других типах передать таблицу" |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |