Имя: Пароль:
1C
1С v8
Как передать основное изображение номенклатуры УТ10.3 в Мобильное приложение
0 OzziK2000
 
07.02.15
16:11
В базе УТ10:
Сделал XDTO пакет. 1 тип - Номенклатура, свойство Picture c типом ValueStorage из пространства http://v8.1c.ru/8.1/data/core и парой свойств Kod и Name с типом String. 2 тип - СписокНоменклатуры со свойством Номенклатура.

Создал новый Web-сервис ВыгрузитьНоменклатуру, в процедуре делаю выборку номенклатуры и заполняю СписокНоменклатуры. Свойство Picture заполняю так:

Объект = ФабрикаXDTO.Создать(ТипНоменклатура);

Объект.Name = Выборка.Наименование;
Объект.Kod = Выборка.Код;
Объект.Picture = Новый ХранилищеЗначения(Выборка.ОсновноеИзображение.Хранилище.Получить().ПолучитьДвоичныеДанные());

На мобильном приложении. Сделал два справочника. Номенклатура и подчиненный справочник Изображения с реквизитом Хранилище с типом ХранилищеЗначений. Обрабатываю полученный списокНоменклатуры так:

Для каждого Товар Из СписокНоменклатуры.Номенклатура цикл

    
    Объект = Справочники.Номенклатура.СоздатьЭлемент();
    
    Объект.Наименование = Товар.Name;
        
    Объект.Код = Товар.Kod;
    
    Объект.Записать();
    
    Если Товар.Picture <> Неопределено тогда
    
        
    Картинка = справочники.Изображения.СоздатьЭлемент();
    
    Картинка.код = Объект.Код;
    Картинка.Наименование ="Основное";
    Картинка.Владелец = Объект.Ссылка;        
            
    Картинка.Хранилище = Новый ХранилищеЗначения(Новый Картинка(Товар.Picture.Получить()));
    
    Картинка.Записать();
    
    Объект.СсылкаНаИзображение = Картинка.Ссылка;
    
    КонецЕсли;
    
    Объект.Записать();
    
КонецЦикла;

Что получается. Справочник Номенклатура переносится замечательно. Справочник Изображения заполняется только теми элементами, у которых в основной базе есть изображения. То есть казалось бы все хорошо. Но картинка на форме элемента справочника Изображения не показывается. Пытаюсь показать ее так:

&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
    
    АдресКартинки = ПолучитьНавигационнуюСсылку(Объект.ссылка, "Хранилище");
    
КонецПроцедуры

Прошу помочь понять где я ошибся. Извините, если немного путанно объясняю - это мой первый в жизни пост)
1 OzziK2000
 
07.02.15
16:42
То есть Вопросы следующие.
1) Правильно ли я выбрал тип ValueStorage для помещения туда картинки и передачи ее через веб сервис в мобильное приложение.

2) Если правильно, то правильно ли я ее туда поместил на стороне УТ:

Объект.Picture = Новый ХранилищеЗначения(Выборка.ОсновноеИзображение.Хранилище.Получить().ПолучитьДвоичныеДанные());

3) Правильно ли я ее принимаю на Мобильном приложении:

Картинка.Хранилище = Новый ХранилищеЗначения(Новый Картинка(Товар.Picture.Получить()));
2 DitriX
 
08.02.15
01:11
(1)
4. Правильно ли я вывожу картинку?

Попробуйте получить фото из фото камеры и вывести его :)
Фишка в том, что выдолжны получить двоичные данные из картинки, потом, внимаение!, помечтить их во временное хранилище, потом вернуть с сервера на клиент адрес хранилища, потом ОПЯТЬ ЗАСУНУТЬ во временное хранилище, но уже на клиенте, и адрес этого хранилища передать как картинку.
Как то так, точно не посню уже :)
3 Mikhail Volkov
 
08.02.15
06:57
4 OzziK2000
 
10.02.15
11:27
(2) (3) Спасибо, разбираюсь!)