Как можно программно загрузить картинку из хранилища значений?
Добрый день.
Задача: есть внешняя печатная форма для неважно какого документа. Любого. Надо при печати данной формы вставлять в нее картинку,ранее сохраненную пользователем в базу.
Картинку пользователь ранее сохраняет в справочник "Хранилище Дополнительной Информации" и меняет по мере необходимости. То есть, он создает запись этого справочника, загружает картинку - но данная запись не содержит Объект. То есть картинка ни к чему не привязана, болтается сама по себе.
Теперь можно ли программно, зная,что эта картинка занесена в справочник Хранилище информации в,допустим,первой по счету записи, вставить ее в макет печатной формы? Тоесть как добыть ее адрес и вытащить ее из хранилища в нужный момент.
В интернете все перелопатила,но там везде примеры с динамическим созданием нового элемента и присваиванием ему изображения, а у меня изображение уже в справочнике. Только надо его достать, и сделать все это силами одного модуля печатной формы...
Вот так ((
Задача: есть внешняя печатная форма для неважно какого документа. Любого. Надо при печати данной формы вставлять в нее картинку,ранее сохраненную пользователем в базу.
Картинку пользователь ранее сохраняет в справочник "Хранилище Дополнительной Информации" и меняет по мере необходимости. То есть, он создает запись этого справочника, загружает картинку - но данная запись не содержит Объект. То есть картинка ни к чему не привязана, болтается сама по себе.
Теперь можно ли программно, зная,что эта картинка занесена в справочник Хранилище информации в,допустим,первой по счету записи, вставить ее в макет печатной формы? Тоесть как добыть ее адрес и вытащить ее из хранилища в нужный момент.
В интернете все перелопатила,но там везде примеры с динамическим созданием нового элемента и присваиванием ему изображения, а у меня изображение уже в справочнике. Только надо его достать, и сделать все это силами одного модуля печатной формы...
Вот так ((
По теме из базы знаний
Ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
(1) evgalex, скажите, пожалуйста, Вы разобрались с выводом картинки? У меня сейчас подобная ситуация, программно создаю на форме страницу с декорацией и хочу на ней вывести картинку. Картинка храниться в справочнике. Вот думаю, как это реализовать, подскажите, как Вы решили свою задачу?
ИмяФайла = КаталогВременныхФайлов() + Объект.Наименование;
Объект.Ссылка.Хранилище.Получить().Записать(ИмяФайла);
Картинка = Новый Картинка(ИмяФайла);
Объект.Ссылка.Хранилище.Получить().Записать(ИмяФайла);
Картинка = Новый Картинка(ИмяФайла);
Более правильным будет использовать метод ПолучитьИмяВременногоФайла()
УТ 10.3 Справочник "Номенклатура", удаляю все картинки у всех элементов:
///////// ///
процедура УдалитьКартинку()
выборка=справочники.Номенклатура.Выбрать();
Пока выборка.Следующий() Цикл
Номенклатура = выборка.Ссылка;
ИзображениеНом = выборка.Ссылка.ОсновноеИзображение;///это объект Спр-к ХранилищеДопИнформации
ИзображениеНом1 = ИзображениеНом.ссылка.получитьОБъект();
ИзображениеНом1.Удалить();
сообщить(" удалена картинка "+номенклатура);
КонецЦикла;
КонецПРоцедуры
///////// ///
процедура УдалитьКартинку()
выборка=справочники.Номенклатура.Выбрать();
Пока выборка.Следующий() Цикл
Номенклатура = выборка.Ссылка;
ИзображениеНом = выборка.Ссылка.ОсновноеИзображение;///это объект Спр-к ХранилищеДопИнформации
ИзображениеНом1 = ИзображениеНом.ссылка.получитьОБъект();
ИзображениеНом1.Удалить();
сообщить(" удалена картинка "+номенклатура);
КонецЦикла;
КонецПРоцедуры
Зачем ее сохранять?
Если обычная форма, то я делал так (в табличном документе при печати)
Если обычная форма, то я делал так (в табличном документе при печати)
КартинкаДв = Номенклатура.ОсновноеИзображение.Хранилище.Получить();
Если ТипЗнч(КартинкаДв) = ТИп("ДвоичныеДанные") Тогда
Картинка = Новый Картинка(КартинкаДв);
Иначе
Картинка = КартинкаДв;
КонецЕсли;
Если НЕ Картинка = Неопределено Тогда
Рисунок ТабличныйДокумент.Рисунки.Добавить(ТипРисункаТабличногоДокумента.Картинка);
Попытка
Рисунок.Картинка = Картинка;
Исключение
КонецПопытки;
КонецЕсли;
Показать
Если кому надо, то вот кусок кода как в base64 вывести без внешних файлов (очень удобно для импорта любой программой)
ВыбранноеИзображение = Новый Картинка(ИмяВременногоФайла, Ложь);
ЭлементыФормы.ПолеКартинки1.Картинка = ВыбранноеИзображение;
ЭлементыФормы.ПолеКартинки1.Масштабировать = Истина;
ЭлементыФормы.Надпись1.Значение = Строка(Выборка.ФизЛицо);
ЗаписьXML.ЗаписатьАтрибут("img", Base64Строка(Картинка.ПолучитьДвоичныеДанные()));
Как то пригодилось для кнопки "Сделать основным изображением Номенклатуры":
т.е.
1. Сохранил на диск картинку из спр. номенклатуры
2. Преобразовал её в двоичные данные
3. Сохранил эти двоичные данные как картинку с другим именем
НомерКартинки=0;
ИзображениеНоменклатуры = Номенклатура.ОсновноеИзображение.Хранилище.Получить();
ПутьКФайлу = ""+ КаталогВременныхФайлов() + "NomImWS"+НомерКартинки+"."+Строка(ИзображениеНоменклатуры.Формат());
ИзображениеНоменклатуры.Записать(ПутьКФайлу);
Файл = Новый Файл(ПутьКФайлу);
Если Файл.Существует() Тогда
Сообщить("ОК", СтатусСообщения.Обычное);
ДвоичныеДанные = Новый ДвоичныеДанные(ПутьКФайлу);
НомерКартинки=1;
ИзображениеНоменклатуры = Новый Картинка(ДвоичныеДанные);
ПутьКФайлу = ""+ КаталогВременныхФайлов() + "NomImWS"+НомерКартинки+"."+Строка(ИзображениеНоменклатуры.Формат());
Попытка
ИзображениеНоменклатуры.Записать(ПутьКФайлу);
Сообщить(ПутьКФайлу, СтатусСообщения.Обычное);
Исключение
Сообщить(ОписаниеОшибки());
КонецПопытки;
Иначе
Сообщить("Не ОК", СтатусСообщения.Обычное);
КонецЕсли;
Показатьт.е.
1. Сохранил на диск картинку из спр. номенклатуры
2. Преобразовал её в двоичные данные
3. Сохранил эти двоичные данные как картинку с другим именем
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот