|
ХранилищеЗначения Несоответствие типов при выводе картинки на элемент формы | ☑ | ||
---|---|---|---|---|
0
DenisVich
30.11.17
✎
13:17
|
Есть реквизит с типом ХранилищеЗначения. Туда записана картинка. Хочу ее отобразить при активизации на форме(табличная часть содержит этот реквизит). При активизации строки во время попытки вывода изображения:
" Если мТекущееОсновноеИзображение = Неопределено Тогда ЭлементыФормы.ПолеКартинкиФотография.Картинка = мПустаяКартинка; Иначе ЭлементыФормы.ПолеКартинкиФотография.Картинка = мТекущееОсновноеИзображение; КонецЕсли; " Сообщение: "Несоответствие типов. ЭлементыФормы.ПолеКартинкиФотография.Картинка = мТекущееОсновноеИзображение;" Пустая картинка(Неопределено) элементу присваевается. |
|||
1
DenisVich
30.11.17
✎
13:18
|
Отображение делаю в записанном элементе.(Задачи).
|
|||
2
Fish
30.11.17
✎
13:18
|
Показывай, как ты картинку запихиваешь в ХранилищеЗначения и как достаёшь оттуда.
|
|||
3
DenisVich
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); КонецЕсли; КонецЦикла; ИмяФайла = Прав(ДиалогВыбораФайлаОбъект.ПолноеИмяФайла,ИскомыйНомер); КонецЕсли; //Фотография = Новый ХранилищеЗначения(КартинкаОбъект.ПолучитьДвоичныеДанные()); НовыйЭлемент = Картинки.Добавить(); НовыйЭлемент.Название = ИмяФайла; НовыйЭлемент.ДанныеКартинки = Новый ХранилищеЗначения(КартинкаОбъект.ПолучитьДвоичныеДанные()); |
|||
4
DenisVich
30.11.17
✎
13:20
|
Если сделать так то картинка отображается.
"ЭлементыФормы.ПолеКартинкиФотография.Картинка = КартинкаОбъект"; |
|||
5
Fish
30.11.17
✎
13:21
|
А переменной мТекущееОсновноеИзображение где значение присваивается?
|
|||
6
DenisVich
30.11.17
✎
13:21
|
Во время добавления в табличну часть. А не по активизации строки в записанном элементе.
|
|||
7
DenisVich
30.11.17
✎
13:21
|
Все отображается. (6)
|
|||
8
Fish
30.11.17
✎
13:24
|
(4)(6) Ну так КартинкаОбъект у тебя имеет тип Картинка. А значение переменной мТекущееОсновноеИзображение из (0), похоже иного типа.
|
|||
9
DenisVich
30.11.17
✎
13:25
|
В модуле форму ниже всех процедур:
"мПустаяКартинка = Новый Картинка; мТекущееОсновноеИзображение = Новый Картинка; " Пустая картинка работает. |
|||
10
DenisVich
30.11.17
✎
13:28
|
Тогда как получить из хранилища картинку.
Элементы.ДанныеКартинки.Получить()? "Процедура ПоказатьОсновноеИзображение(АктивнаяСтрока) ЗаписаннаяЗадача = Задачи.ТекущиеЗадания.НайтиПоНомеру(Номер); Для Каждого Элементы Из ЗаписаннаяЗадача.Картинки Цикл Если Не ЗначениеЗаполнено(Элементы.НомерСтроки) Тогда Возврат; КонецЕсли; Если Элементы.НомерСтроки = АктивнаяСтрока Тогда мТекущееОсновноеИзображение = Элементы.ДанныеКартинки.Получить(); КонецЕсли; КонецЦикла; Если мТекущееОсновноеИзображение = Неопределено Тогда ЭлементыФормы.ПолеКартинкиФотография.Картинка = мПустаяКартинка; Иначе ЭлементыФормы.ПолеКартинкиФотография.Картинка = мТекущееОсновноеИзображение; КонецЕсли; КонецПроцедуры " |
|||
11
Fish
30.11.17
✎
13:28
|
(9) А почему она не должна работать?
|
|||
12
DenisVich
30.11.17
✎
13:29
|
После того как обращаешься к Элементы.ДанныеКартинки.есть только Получить(). Обратиться нельзя по другому.
|
|||
13
DenisVich
30.11.17
✎
13:31
|
Не пойму почему несоотвествие типов.
|
|||
14
Fish
30.11.17
✎
13:31
|
(12) У тебя в хранилище значений лежат двоичные данные. Это ещё не картинка. Используй:
Картинка (Picture) Формирование из двоичных данных Синтаксис: Новый Картинка(<ДвоичныеДанные>, <ПрозрачныйФон>) Параметры: <ДвоичныеДанные> (обязательный) Тип: ДвоичныеДанные. Двоичные данные изображения, из которого будет сформирован объект Картинка. <ПрозрачныйФон> (необязательный) Тип: Булево. Определяет, будет ли использован цвет прозрачности при создании картинки. Используется только для картинок, формат которой не поддерживает прозрачности. За цвет прозрачности принимается цвет последнего пикселя (правый - нижний). Значение по умолчанию: Ложь. Описание: Создает картинку из двоичных данных. В режиме запуска "Веб-клиент" конструктор не используется. |
|||
15
Fish
30.11.17
✎
13:32
|
(13) Посмотри в отладчике, там увидишь тип, и всё поймёшь.
|
|||
16
DenisVich
30.11.17
✎
13:35
|
Поменял на: мТекущееОсновноеИзображение = Новый Картинка(Элементы.ДанныеКартинки.Получить());
(15) Спасибо. |
|||
17
Fish
30.11.17
✎
13:39
|
(16) Только вот зачем ты преобразовывал картинку в двоичные данные?
Вроде ХЗ позволяет напрямую с картинкой работать: ХранилищеЗначения (ValueStorage) Методы: Получить (Get) Конструкторы: На основании значения Описание: Предназначен для хранения значения в специальном формате. Он может быть записан в поля базы данных, имеющие соответствующий тип. Это позволяет сохранять в базе данных значения, тип которых не может быть выбран в качестве типа поля, например, Картинка. Пример: МояКартинка = Новый Картинка("C:\Мои документы\Картинка1.bmp"); ХранилищеКартинки = Новый ХранилищеЗначения(МояКартинка); НовНоменклатура = Справочники.Номенклатура.СоздатьЭлемент(); НовНоменклатура.Наименование = "Диван ""Маргарита"""; НовНоменклатура.Изображение = ХранилищеКартинки; НовНоменклатура.Записать(); |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |