Доброго время суток. Наткнулся на такую задачу: как вывести изображение в отчет. Конечно же, не хочется отказываться от СКД, ибо вручную это все ясно, но долго. В интернете не нашел нормального объяснения... Поэтому решил сделать и отдать всем в пользование пример (рабочий отчет), как вывести изображение номенклатуры в СКД.
Условия:
- В запросе всегда выводим поле Основное изображение из Номенклатуры,
- в макетах добавляем макет поля Основного изображения и всегда его используем в сумме с группировкой Номенклатуры (на картинке видно пример).
- Вывод отчета надо делать вручную. Вот модуль, который надо вставить в действие кнопки "Сформировать":
//*********************************
СхемаКомпоновкиДанных = ПолучитьМакет("ОсновнаяСхемаКомпоновкиДанных");
Настройки = КомпоновщикНастроек.Настройки;
// Параметры
ПараметрыДанных = Настройки.ПараметрыДанных;
ДатаН = ПараметрыДанных.Элементы.Найти("НачалоПериода");
Если ЗначениеЗаполнено(НачПериода) Тогда
ДатаН.Использование = Истина;
ДатаН.Значение = НачалоДня(НачПериода);
Иначе
ДатаН.Использование = Ложь;
КонецЕсли;
ДатаК = ПараметрыДанных.Элементы.Найти("КонецПериода");
Если ЗначениеЗаполнено(КонПериода) Тогда
ДатаК.Использование = Истина;
ДатаК.Значение =КонецДня(КонПериода);
Иначе
ДатаК.Использование = Ложь;
КонецЕсли;
ДанныеРасшифровки = Новый ДанныеРасшифровкиКомпоновкиДанных;
КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных;
МакетКомпоновки = КомпоновщикМакета.Выполнить(СхемаКомпоновкиДанных,Настройки, ДанныеРасшифровки);
ПроцессорКомпоновкиДанных = Новый ПроцессорКомпоновкиДанных;
ПроцессорКомпоновкиДанных.Инициализировать(МакетКомпоновки,,ДанныеРасшифровки);
Результат = ЭлементыФормы.Результат;
Результат.Очистить();
ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент;
ПроцессорВывода.УстановитьДокумент(Результат);
ПроцессорВывода.Вывести(ПроцессорКомпоновкиДанных);
// Шаманим над картинками
Если ПоказыватьИзображение Тогда
ТабДок = ЭлементыФормы.Результат;
В = Результат.ВысотаТаблицы;
Ш = Результат.ШиринаТаблицы;
Для с=1 По В Цикл
Для к=1 По Ш Цикл
Область = ТабДок.ПолучитьОбласть("R"+Формат(с,"ЧГ=0")+"C"+Формат(к,"ЧГ=0"));
ТекОбласть = ТабДок.Область("R"+Формат(с,"ЧГ=0")+"C"+Формат(к,"ЧГ=0"));
Расшифровка = ТекОбласть.Расшифровка;
Если ТипЗнч(Расшифровка) = Тип("СправочникСсылка.ХранилищеДополнительнойИнформации") Тогда
Картинка = Расшифровка.Хранилище.Получить();
Если Картинка = Неопределено Тогда
Продолжить;
КонецЕсли;
ТекОбласть.ВысотаСтроки = ВысотаКартинки;
ТекОбласть.ШиринаКолонки = ШиринаКартинки/4;
Рисунок = Область.Рисунки.Добавить(ТипРисункаТабличногоДокумента.Картинка);
Рисунок.Картинка = Картинка;
Рисунок.Лево = 1;
Рисунок.Верх = 1;
Рисунок.Высота = ВысотаКартинки;
Рисунок.Ширина = ШиринаКартинки/4;
Рисунок.ГраницаСверху = Истина;
Рисунок.ГраницаСлева = Истина;
Рисунок.ГраницаСнизу = Истина;
Рисунок.ГраницаСправа = Истина;
Рисунок.РазмерКартинки = РазмерКартинки.АвтоРазмер;
Рисунок.ВыводитьНаПечать = Истина;
Рисунок.Расположить(Область.ТекущаяОбласть);
ТабДок.ВставитьОбласть(Область.ТекущаяОбласть,ТабДок.Область("R"+Формат(с,"ЧГ=0")+"C"+Формат(к,"ЧГ=0")));
КонецЕсли;
КонецЦикла;
КонецЦикла;
КонецЕсли;
//************************
Думаю тут все понятно, из элементов формы обрабатываем только Даты, в параметры.
Настроить макет просто: В макетах в СКД выбираем добавить макет поля, выбираем ячейку и добавляем только один параметр в расшифровку как называется у нас поле в запросе с изображением, на картинке видно.
(Бывает глючит: тогда делаем поле тип не "Текст", а "Параметр" и задаем одинаковое имя для "Параметра" и "Параметра расшифровки". По умолчанию он напишет : Представление(ИмяПараметра)) стираем Представление и меняем тип поля на Текст и остается только один параметр Расшифровки.
В настройках всегда используем рядом с номенклатурой поле изображения.
Ну вот как то так.
PS: Эта публикация полностью бесплатна и свободна, т.к. это не готовый продукт, а простой пример решения задачи
Всем удачной работы.
от 20.04.2012 - По просьбе одного из участников форума, была добавлена функция открытия изображения по клику.