Как передать Диаграмму через Web-сервисы на планшет?
Всем привет. Помогите разобраться)
Пишу мобильное приложение. Нужно на планшет вывести отчет в виде диаграммы по данным с сервера.
На сервере создаю отчет с типом диаграмма. Затем создаю web-сервис с операцией Получить отчет(), тип возвращаемого значения: Chart.
В модуле web-сервиса прописываю следующий код:
Если запустить клиента с ПК, то диаграмма отображается. А если запускаем на планшете, то выдает ошибку(прикрепила ниже).
P.s: Делала по видео уроку, где в отчете передавали таблицу. В моем случае оставила код без изменений, изменила только в операции web-сервиса тип возвращаемого значения с SpreadsheetDocument на Chart.
Пишу мобильное приложение. Нужно на планшет вывести отчет в виде диаграммы по данным с сервера.
На сервере создаю отчет с типом диаграмма. Затем создаю web-сервис с операцией Получить отчет(), тип возвращаемого значения: Chart.
В модуле web-сервиса прописываю следующий код:
Функция ПолучитьОтчет(Отбор)
ОтчетТест = Отчеты.Отчет1.Создать();
ТабличныйДок = Новый ТабличныйДокумент;
ОтчетТест.СкомпоноватьРезультат(ТабличныйДок);
Возврат СериализаторXDTO.ЗаписатьXDTO(ТабличныйДок);
КонецФункции
Функция Сериализовать(ОбъектСериализации)
ДеревоВОбъектеXDTO = СериализаторXDTO.ЗаписатьXDTO(ОбъектСериализации);
МойXML = Новый ЗаписьXML;
МойXML.УстановитьСтроку();
ФабрикаXDTO.ЗаписатьXML(МойXML, ДеревоВОбъектеXDTO);
Возврат МойXML.Закрыть();
КонецФункции
Функция Десериализовать(XMLСтруктураСериализованногоОбъекта)
ЧтениеXMLДанных = Новый ЧтениеXML;
ЧтениеXMLДанных.УстановитьСтроку(XMLСтруктураСериализованногоОбъекта);
ТЗ = СериализаторXDTO.ПрочитатьXML(ЧтениеXMLДанных);
ЧтениеXMLДанных.Закрыть();
Возврат ТЗ;
КонецФункции
Затем на клиенте создаю обработку. через которую вызываю отчет.
На форме создаю реквизит с типом ТабличныйДокумент и кнопку СформироватьОтчет.
В модуле обработки прописываю следующий код:
&НаКлиенте
Процедура СформироватьОтчет(Команда)
СформироватьОтчетНаСервере();
КонецПроцедуры
&НаСервере
Процедура СформироватьОтчетНаСервере()
Попытка
ВСОпределение = Новый WSОпределения("http://192.168.56.1/QWertyy/ws/ОбменДанными.1cws?wsdl");
ВСервис = ВСОпределение.Сервисы.Получить("DataTransfer","ОбменДанными");
ВТочкаВхода = ВСервис.ТочкиПодключения.Получить("ОбменДаннымиSoap");
ВОперация = ВТочкаВхода.Интерфейс.Операции.Получить("ПолучитьОтчет");
ДанныеXDTO = ВСОпределение.ФабрикаXDTO.Создать(ВОперация.Параметры.Получить("Отбор").Тип,"");
ВСПрокси = Новый WSПрокси(ВСОпределение,"DataTransfer","ОбменДанными","ОбменДаннымиSoap") ;
ТабличныйДокументОтвет = ВСПрокси.ПолучитьОтчет(ДанныеXDTO);
ТабличныйДокумент = СериализаторXDTO.ПрочитатьXDTO(ТабличныйДокументОтвет);
Исключение
Сообщить(ОписаниеОшибки());
КонецПопытки;
КонецПроцедуры
Функция Сериализовать(ОбъектСериализации)
ДеревоВОбъектеXDTO = СериализаторXDTO.ЗаписатьXDTO(ОбъектСериализации);
МойXML = Новый ЗаписьXML;
МойXML.УстановитьСтроку();
ФабрикаXDTO.ЗаписатьXML(МойXML, ДеревоВОбъектеXDTO);
Возврат МойXML.Закрыть();
КонецФункции
Функция Десериализовать(XMLСтруктураСериализованногоОбъекта)
ЧтениеXMLДанных = Новый ЧтениеXML;
ЧтениеXMLДанных.УстановитьСтроку(XMLСтруктураСериализованногоОбъекта);
ТЗ = СериализаторXDTO.ПрочитатьXML(ЧтениеXMLДанных);
ЧтениеXMLДанных.Закрыть();
Возврат ТЗ;
КонецФункции
ПоказатьЕсли запустить клиента с ПК, то диаграмма отображается. А если запускаем на планшете, то выдает ошибку(прикрепила ниже).
P.s: Делала по видео уроку, где в отчете передавали таблицу. В моем случае оставила код без изменений, изменила только в операции web-сервиса тип возвращаемого значения с SpreadsheetDocument на Chart.
Прикрепленные файлы:

Ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
(2)спасибо за совет. Попробовала сделать через хранилище значений, но что-то не получается(((
В web-сервисе у операции изменила тип на ValueStorage и прописала следующий код:
В web-сервисе у операции изменила тип на ValueStorage и прописала следующий код:
Функция ПолучитьОтчет(Отбор)
ОтчетПоРасходам = Отчеты.СчетаНаОплату.Создать();
ТД = Новый ТабличныйДокумент;
ХранилищеЗн = Новый ХранилищеЗначения(ТД, Новый СжатиеДанных(9));
СтрокаДляПередачи = Сериализовать(ХранилищеЗн);
Возврат СтрокаДляПередачи;
КонецФункции
Функция Сериализовать(ОбъектСериализации)
ДеревоВОбъектеXDTO = СериализаторXDTO.ЗаписатьXDTO(ОбъектСериализации);
МойXML = Новый ЗаписьXML;
ФабрикаXDTO.ЗаписатьXML(МойXML, ДеревоВОбъектеXDTO);
Возврат МойXML.Закрыть();
КонецФункции
На клиенте в модуле обработки написала так:
&НаКлиенте
Процедура СформироватьОтчет(Команда)
СформироватьОтчетНаСервере();
КонецПроцедуры
&НаСервере
Процедура СформироватьОтчетНаСервере()
Попытка
ВСОпределение = Новый WSОпределения("http://192.168.56.1/day3/ws/ОбменДанными.1cws?wsdl");
ВСервис = ВСОпределение.Сервисы.Получить("DataTransfer","ОбменДанными");
ВТочкаВхода = ВСервис.ТочкиПодключения.Получить("ОбменДаннымиSoap");
ВОперация = ВТочкаВхода.Интерфейс.Операции.Получить("ПолучитьОтчет");
ДанныеXDTO = ВСОпределение.ФабрикаXDTO.Создать(ВОперация.Параметры.Получить("Отбор").Тип,
"");
ВСПрокси = Новый WSПрокси(ВСОпределение,"DataTransfer","ОбменДанными","ОбменДаннымиSoap") ;
ХранилищеЗн = ВСПрокси.ПолучитьОтчет(ДанныеXDTO);
Хранилище = Десериализовать(ХранилищеЗн);
ТД = Хранилище;
Исключение
Сообщить(ОписаниеОшибки());
КонецПопытки;
КонецПроцедуры
Функция Десериализовать(XMLСтруктураСериализованногоОбъекта)
ЧтениеХМЛДанных = Новый ЧтениеXML;
ЧтениеХМЛДанных.УстановитьСтроку(XMLСтруктураСериализованногоОбъекта);
ТЗ = СериализаторXDTO.ПрочитатьXML(ЧтениеХМЛДанных);
ЧтениеХМЛДанных.Закрыть();
Возврат ТЗ;
КонецФункции
ПоказатьПрикрепленные файлы:

(3)
Не так, хранилище надо возвращать, то есть тип передаваемого значения должен быть ValueStorage, не надо его сериализовать, только то, что внутри
Примерно так, на сервере
И так на клиенте:
ХранилищеЗн = Новый ХранилищеЗначения(ТД, Новый СжатиеДанных(9));
СтрокаДляПередачи = Сериализовать(ХранилищеЗн);
Возврат СтрокаДляПередачи;
СтрокаДляПередачи = Сериализовать(ХранилищеЗн);
Возврат СтрокаДляПередачи;
Не так, хранилище надо возвращать, то есть тип передаваемого значения должен быть ValueStorage, не надо его сериализовать, только то, что внутри
Примерно так, на сервере
Возврат Новый ХранилищеЗначения(Сериализовать(Ответ),Новый СжатиеДанных(9));
И так на клиенте:
Возврат Десериализовать(Ответ.Получить());
(4) На сервере переделала так:
Выдает ошибку при сериализации в строчке: ФабрикаXDTO.ЗаписатьXML(МойXML, ДеревоВОбъектеXDTO);
Функция ПолучитьОтчет(Отбор)
ОтчетПоРасходам = Отчеты.СчетаНаОплату.Создать();
ТД = Новый ТабличныйДокумент;
Возврат Новый ХранилищеЗначения(Сериализовать(ТД),Новый СжатиеДанных(9));
КонецФункции
Функция Сериализовать(ОбъектСериализации)
ДеревоВОбъектеXDTO = СериализаторXDTO.ЗаписатьXDTO(ОбъектСериализации);
МойXML = Новый ЗаписьXML;
ФабрикаXDTO.ЗаписатьXML(МойXML, ДеревоВОбъектеXDTO);
Возврат МойXML.Закрыть();
КонецФункции
ПоказатьВыдает ошибку при сериализации в строчке: ФабрикаXDTO.ЗаписатьXML(МойXML, ДеревоВОбъектеXDTO);
Прикрепленные файлы:

(5) Попробуйте так
Функция Сериализовать(ОбъектСериализации) Экспорт
ДеревоВОбъектеXDTO = СериализаторXDTO.ЗаписатьXDTO(ОбъектСериализации);
МойXML = Новый ЗаписьXML;
МойXML.УстановитьСтроку();
ФабрикаXDTO.ЗаписатьXML(МойXML, ДеревоВОбъектеXDTO);
Возврат МойXML.Закрыть();
КонецФункции
(6) Спасибо большое, очень помогли) можно еще вопрос) в хранилище значений я передавала табличный документ, в настройках схемы компоновки данных выводила таблицу. Так все работает, но если меняю на вид Диаграмма выдает ошибку(причем, если запускать клиент с ПК, то работает), с чем это может быть связано?
Прикрепленные файлы:

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот