Вход | Регистрация

1С:Предприятие ::

Метки: 

ХранилищеЗначения Несоответствие типов при выводе картинки на элемент формы

Я
   DenisVich
 
30.11.17 - 13:17
Есть реквизит с типом ХранилищеЗначения. Туда записана картинка. Хочу ее отобразить при активизации на форме(табличная часть содержит этот реквизит). При активизации строки во время попытки вывода изображения:
"            Если мТекущееОсновноеИзображение = Неопределено Тогда
                ЭлементыФормы.ПолеКартинкиФотография.Картинка = мПустаяКартинка;
            Иначе
                ЭлементыФормы.ПолеКартинкиФотография.Картинка = мТекущееОсновноеИзображение;
            КонецЕсли;    "
Сообщение: "Несоответствие типов. ЭлементыФормы.ПолеКартинкиФотография.Картинка = мТекущееОсновноеИзображение;"
Пустая картинка(Неопределено) элементу присваевается.
 
 
   DenisVich
 
1 - 30.11.17 - 13:18
Отображение делаю в записанном элементе.(Задачи).
   Fish
 
2 - 30.11.17 - 13:18
Показывай, как ты картинку запихиваешь в ХранилищеЗначения и как достаёшь оттуда.
   DenisVich
 
3 - 30.11.17 - 13:19
Перем ДиалогВыбораФайлаОбъект;
    Перем КартинкаОбъект;
    //Объявление, инициализация переменных. -

    ДиалогВыбораФайлаОбъект = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Открытие);
    ДиалогВыбораФайлаОбъект.Фильтр = "Все картинки (*.jpg;*.jpeg;*.tif;*.gif;*.png)|*.jpg;*.jpeg;*.tif;*.gif;*.png|"
            + "Формат JPEG (*.jpg;*.jpeg)|*.jpg;*.jpeg|"
            + "Формат TIFF (*.tif)|*.tif|"
            + "Формат GIF (*.gif)|*.gif|"
            + "Формат PNG (*.png)|*.png";

        Если ДиалогВыбораФайлаОбъект.Выбрать() Тогда
            КартинкаОбъект = Новый Картинка(ДиалогВыбораФайлаОбъект.ПолноеИмяФайла);
            Если ЗначениеЗаполнено(ДиалогВыбораФайлаОбъект.ПолноеИмяФайла)    Тогда
                ОбходСтроки = ДиалогВыбораФайлаОбъект.ПолноеИмяФайла;
                ИскомыйНомер = 0;
                НомерСимвола = 0;
                Пока СтрДлина(ОбходСтроки)>0 Цикл
                    НомерСимвола = НомерСимвола+1;
                    ИскомыйСимвол = Прав(ОбходСтроки,1);
                    Если ИскомыйСимвол = "\" Тогда
                        ИскомыйНомер = НомерСимвола-1;
                        Прервать;
                    Иначе
                        ОбходСтроки = Лев(ДиалогВыбораФайлаОбъект.ПолноеИмяФайла,СтрДлина(Обходстроки)-1);    
                    КонецЕсли;                    
                КонецЦикла;
                ИмяФайла = Прав(ДиалогВыбораФайлаОбъект.ПолноеИмяФайла,ИскомыйНомер);
            КонецЕсли;
            //Фотография = Новый ХранилищеЗначения(КартинкаОбъект.ПолучитьДвоичныеДанные());

            НовыйЭлемент = Картинки.Добавить();
            НовыйЭлемент.Название = ИмяФайла;
            НовыйЭлемент.ДанныеКартинки = Новый ХранилищеЗначения(КартинкаОбъект.ПолучитьДвоичныеДанные());
   DenisVich
 
4 - 30.11.17 - 13:20
Если сделать так то картинка отображается.
"ЭлементыФормы.ПолеКартинкиФотография.Картинка = КартинкаОбъект";
   Fish
 
5 - 30.11.17 - 13:21
А переменной мТекущееОсновноеИзображение где значение присваивается?
   DenisVich
 
6 - 30.11.17 - 13:21
Во время добавления в табличну часть. А не по активизации строки в записанном элементе.
   DenisVich
 
7 - 30.11.17 - 13:21
Все отображается. (6)
   Fish
 
8 - 30.11.17 - 13:24
(4)(6) Ну так КартинкаОбъект у тебя имеет тип Картинка. А значение переменной мТекущееОсновноеИзображение из (0), похоже иного типа.
   DenisVich
 
9 - 30.11.17 - 13:25
В модуле форму ниже всех процедур:
"мПустаяКартинка = Новый Картинка;
мТекущееОсновноеИзображение = Новый Картинка; "
Пустая картинка работает.
   DenisVich
 
10 - 30.11.17 - 13:28
Тогда как получить из хранилища картинку.
Элементы.ДанныеКартинки.Получить()?
"Процедура ПоказатьОсновноеИзображение(АктивнаяСтрока)

            ЗаписаннаяЗадача = Задачи.ТекущиеЗадания.НайтиПоНомеру(Номер);
            Для Каждого Элементы Из ЗаписаннаяЗадача.Картинки Цикл
                Если Не ЗначениеЗаполнено(Элементы.НомерСтроки) Тогда
                    Возврат;
                КонецЕсли;
                Если Элементы.НомерСтроки = АктивнаяСтрока Тогда
                    мТекущееОсновноеИзображение  = Элементы.ДанныеКартинки.Получить();
                КонецЕсли;
            КонецЦикла;
            
            Если мТекущееОсновноеИзображение = Неопределено Тогда
                ЭлементыФормы.ПолеКартинкиФотография.Картинка = мПустаяКартинка;
            Иначе
                ЭлементыФормы.ПолеКартинкиФотография.Картинка = мТекущееОсновноеИзображение;
            КонецЕсли;                
                
КонецПроцедуры
"
 
 Рекламное место пустует
   Fish
 
11 - 30.11.17 - 13:28
(9) А почему она не должна работать?
   DenisVich
 
12 - 30.11.17 - 13:29
После того как обращаешься к Элементы.ДанныеКартинки.есть только Получить(). Обратиться нельзя по другому.
   DenisVich
 
13 - 30.11.17 - 13:31
Не пойму почему несоотвествие типов.
   Fish
 
14 - 30.11.17 - 13:31
(12) У тебя в хранилище значений лежат двоичные данные. Это ещё не картинка. Используй:
Картинка (Picture)
Формирование из двоичных данных
Синтаксис:

Новый Картинка(<ДвоичныеДанные>, <ПрозрачныйФон>)
Параметры:

<ДвоичныеДанные> (обязательный)

Тип: ДвоичныеДанные.
Двоичные данные изображения, из которого будет сформирован объект Картинка. 
<ПрозрачныйФон> (необязательный)

Тип: Булево.
Определяет, будет ли использован цвет прозрачности при создании картинки.
Используется только для картинок, формат которой не поддерживает прозрачности.
За цвет прозрачности принимается цвет последнего пикселя (правый - нижний).
Значение по умолчанию: Ложь.
Описание:

Создает картинку из двоичных данных.
В режиме запуска "Веб-клиент" конструктор не используется.
   Fish
 
15 - 30.11.17 - 13:32
(13) Посмотри в отладчике, там увидишь тип, и всё поймёшь.
   DenisVich
 
16 - 30.11.17 - 13:35
Поменял на: мТекущееОсновноеИзображение  = Новый Картинка(Элементы.ДанныеКартинки.Получить()); 
(15) Спасибо.
   Fish
 
17 - 30.11.17 - 13:39
(16) Только вот зачем ты преобразовывал картинку в двоичные данные?
Вроде ХЗ позволяет напрямую с картинкой работать:
ХранилищеЗначения (ValueStorage)
Методы:

Получить (Get)

Конструкторы:

На основании значения

Описание:

Предназначен для хранения значения в специальном формате. Он может быть записан в поля базы данных, имеющие соответствующий тип. Это позволяет сохранять в базе данных значения, тип которых не может быть выбран в качестве типа поля, например, Картинка.

Пример:

МояКартинка = Новый Картинка("C:\Мои документы\Картинка1.bmp");
ХранилищеКартинки = Новый ХранилищеЗначения(МояКартинка);

НовНоменклатура = Справочники.Номенклатура.СоздатьЭлемент();
НовНоменклатура.Наименование = "Диван ""Маргарита""";
НовНоменклатура.Изображение = ХранилищеКартинки;
НовНоменклатура.Записать();


Список тем форума
Рекламное место пустует Рекламное место пустует
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.
Тема не обновлялась длительное время, и была помечена как архивная. Добавление сообщений невозможно.
Но вы можете создать новую ветку и вам обязательно ответят!
Каждый час на Волшебном форуме бывает более 2000 человек.
Рекламное место пустует