Имя: Пароль:
1C
1С v8
Web сервис не возвращает таблицу значения
, ,
0 ETurdymuratov
 
02.08.18
11:06
всем привет, создал простой веб сервис, назначил тип возвращаемого значения ValueStorage (http://v8.1c.ru/8.1/data/core), в процедуре веб сервиса простой код:

    Запрос = Новый Запрос;
    Запрос.Текст = "ВЫБРАТЬ
                   |    Контрагенты.ИдентификационныйКодЛичности КАК ИИН,
                   |    ТиповойОстатки.Субконто1 КАК Контрагент,
                   |    ТиповойОстатки.Субконто3 КАК Договор,
                   |    ТиповойОстатки.СуммаОстатокКт
                   |ИЗ
                   |    РегистрБухгалтерии.Типовой.Остатки(&НаДату, Счет В ИЕРАРХИИ (&Счет), , ) КАК ТиповойОстатки
                   |        ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.Контрагенты КАК Контрагенты
                   |        ПО ТиповойОстатки.Субконто1 = Контрагенты.Ссылка
                   |ГДЕ
                   |    Контрагенты.Комментарий ПОДОБНО &Комментарий";
    Запрос.УстановитьПараметр("НаДату", ТекущаяДата());
    СЗ1 = Новый СписокЗначений;
    СЗ1.Добавить(ПланыСчетов.Типовой.НайтиПоКоду("3511"));
    СЗ1.Добавить(ПланыСчетов.Типовой.НайтиПоКоду("3517"));
    Запрос.УстановитьПараметр("Счет", СЗ1);
    //Список значений
    Запрос.УстановитьПараметр("Комментарий", id);
    РезультатЗапроса = Запрос.Выполнить();
    ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();
    
    ТЗ = Новый ТаблицаЗначений;
    ТЗ.Колонки.Добавить("ИИН", Новый ОписаниеТипов("Строка"));
    ТЗ.Колонки.Добавить("Наименование", Новый ОписаниеТипов("Строка"));
    ТЗ.Колонки.Добавить("Договор", Новый ОписаниеТипов("Строка"));
    ТЗ.Колонки.Добавить("Сумма", Новый ОписаниеТипов("Число"));
    
    ТипXDTOТипОбъекта1 = ФабрикаXDTO.Тип("http://172.16.103.89";, "Student");  
    ТипОбъекта1 = ФабрикаXDTO.Создать(ТипXDTOТипОбъекта1);

    Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
        СтрТЗ = ТЗ.Добавить();    
        СтрТЗ.ИИН = ВыборкаДетальныеЗаписи.ИИН;
        СтрТЗ.Наименование = ВыборкаДетальныеЗаписи.Контрагент;
        СтрТЗ.Договор = ВыборкаДетальныеЗаписи.Договор;
        СтрТЗ.Сумма = ВыборкаДетальныеЗаписи.СуммаОстатокКт;
        
        ОбъектXdto=СериализаторXDTO.ЗаписатьXDTO(СтрТЗ);
    КонецЦикла;

    Возврат ОбъектXdto;

проверяю через SoapUI ругается <soap:Text xml:lang="ru_RU">Неверный формат.</soap:Text>
1 ETurdymuratov
 
02.08.18
11:07
помогите разобраться
2 ETurdymuratov
 
02.08.18
11:10
в коде подправил,

ОбъектXdto=СериализаторXDTO.ЗаписатьXDTO(ТЗ);

запарился, проблема та же
3 Mankubus
 
02.08.18
11:16
>> ТипXDTOТипОбъекта1 = ФабрикаXDTO.Тип("http://172.16.103.89";;, "Student");  

     ТипОбъекта1 = ФабрикаXDTO.Создать(ТипXDTOТипОбъекта1);
<
зачем это написано если нигде не используется?
4 ETurdymuratov
 
02.08.18
11:19
(3) да исправил на Возврат ТЗ; и так пробовал Возврат ОбъектXdto;  не помогло
5 Вафель
 
02.08.18
11:27
тз нельзя так сериализовать. нужно построчно/пообъектно
6 ETurdymuratov
 
02.08.18
11:28
(5) можно вообще не сереализовывая просто вернуть ТЗ?
7 Вафель
 
02.08.18
11:28
(6) нет конечно
8 ETurdymuratov
 
02.08.18
11:47
(7) как это построчно?
я переделал вот так:

    ЗаписьXML = Новый ЗаписьXML();
    ЗаписьXML.УстановитьСтроку();
    СериализаторXDTO.ЗаписатьXML(ЗаписьXML, ТЗ);
    СтрокаXML = ЗаписьXML.Закрыть();    

    Возврат ЗаписьXML;

ошибка та же
9 Мыш
 
02.08.18
11:52
(8) Сделать из таблицы значений массив структур, например
10 Мыш
 
02.08.18
11:53
+(9) Или структуру массивов. Компактнее будет.
11 Necessitudo
 
02.08.18
11:54
Эм, ValueStorage  это ХранилищеЗначения. С чего ты решил что ТЗ возвращать надо?
12 ETurdymuratov
 
02.08.18
11:56
(11) что надо возвращать?
13 ETurdymuratov
 
02.08.18
11:57
(9) сделал, ошибка другая уже:
Внутренняя ошибка. Ошибка инициализации библиотеки модулей
14 ETurdymuratov
 
02.08.18
11:58
(11) пробовал и ТЗ и ОбъектXdto и МассивСтруктур(ошибка другая)
15 ETurdymuratov
 
02.08.18
12:06
попробовал поменять тип возвращаемого значения на Array (http://v8.1c.ru/8.1/data/core) после того как код передлал чтобы возвращал массив структур, ругается "Внутренняя ошибка. Ошибка инициализации библиотеки модулей"
16 Necessitudo
 
02.08.18
12:33
Слушай, возвращай просто String -  а в него запихни JSON.
17 ETurdymuratov
 
02.08.18
12:35
(16) в смысле использовать функцию ЗначениеВСтрокуВнутр ?
18 ETurdymuratov
 
02.08.18
12:41
(16) переделал так:

    Ответ = РезультатЗапроса.Выгрузить();
    Запись = Новый ЗаписьJSON;
    Запись.УстановитьСтроку();
    ЗаписатьJSON(Запись, Ответ);
    Возврат Запись.Закрыть();    

soap ругается "Неверный формат"
19 Вафель
 
02.08.18
12:42
возвращать нужно то что указано в схеме
20 Necessitudo
 
02.08.18
12:48
(18) Поставь возвращаемое значение - String.
21 ETurdymuratov
 
03.08.18
07:42
(20) Не верный формат
2 + 2 = 3.9999999999999999999999999999999...