Отчет по товарам на складах с Изображениями номенклатуры (пример, как вывести картинку СКД)


Маленький пример, как вывести изображение номенклатуры в отчет СКД

Доброго время суток. Наткнулся на такую задачу: как вывести изображение в отчет. Конечно же, не хочется отказываться от СКД, ибо вручную это все ясно, но долго. В интернете не нашел нормального объяснения... Поэтому решил сделать и отдать всем в пользование пример (рабочий отчет), как вывести изображение номенклатуры в СКД.

Условия:

  1. В запросе всегда выводим поле Основное изображение из Номенклатуры,

  2. в макетах добавляем макет поля Основного изображения и всегда его используем в сумме с группировкой Номенклатуры (на картинке видно пример).
  3.  
  4. Вывод отчета надо делать вручную. Вот модуль, который надо вставить в действие кнопки "Сформировать":
	 //*********************************
СхемаКомпоновкиДанных = ПолучитьМакет("ОсновнаяСхемаКомпоновкиДанных");
 
Настройки = КомпоновщикНастроек.Настройки;
 
// Параметры
ПараметрыДанных = Настройки.ПараметрыДанных;
ДатаН = ПараметрыДанных.Элементы.Найти("НачалоПериода");
Если ЗначениеЗаполнено(НачПериода) Тогда
    ДатаН.Использование = Истина;
    ДатаН.Значение = НачалоДня(НачПериода);
Иначе
    ДатаН.Использование = Ложь;
КонецЕсли;
 
ДатаК = ПараметрыДанных.Элементы.Найти("КонецПериода");
Если ЗначениеЗаполнено(КонПериода) Тогда
    ДатаК.Использование = Истина;
    ДатаК.Значение =КонецДня(КонПериода);
Иначе
    ДатаК.Использование = Ложь;
КонецЕсли;
 
ДанныеРасшифровки = Новый ДанныеРасшифровкиКомпоновкиДанных;
КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных;
МакетКомпоновки = КомпоновщикМакета.Выполнить(СхемаКомпоновкиДанных,Настройки, ДанныеРасшифровки);
 
ПроцессорКомпоновкиДанных = Новый ПроцессорКомпоновкиДанных;
ПроцессорКомпоновкиДанных.Инициализировать(МакетКомпоновки,,ДанныеРасшифровки);
 
Результат = ЭлементыФормы.Результат;
Результат.Очистить();
ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент;
ПроцессорВывода.УстановитьДокумент(Результат);
ПроцессорВывода.Вывести(ПроцессорКомпоновкиДанных);

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

                Рисунок.РазмерКартинки = РазмерКартинки.АвтоРазмер;
                Рисунок.ВыводитьНаПечать = Истина;
 
                Рисунок.Расположить(Область.ТекущаяОбласть);
 
                ТабДок.ВставитьОбласть(Область.ТекущаяОбласть,ТабДок.Область("R"+Формат(с,"ЧГ=0")+"C"+Формат(к,"ЧГ=0")));
 
            КонецЕсли;
        КонецЦикла;
    КонецЦикла;
КонецЕсли;
 
//************************

Думаю тут все понятно, из элементов формы обрабатываем только Даты, в параметры.

Настроить макет просто: В макетах в СКД выбираем добавить макет поля, выбираем ячейку и добавляем только один параметр в расшифровку как называется у нас поле в запросе с изображением, на картинке видно.


(Бывает глючит: тогда делаем поле тип не "Текст", а "Параметр" и задаем одинаковое имя для "Параметра" и "Параметра расшифровки". По умолчанию он напишет : Представление(ИмяПараметра)) стираем Представление и меняем тип поля на Текст и остается только один параметр Расшифровки.

В настройках всегда используем рядом с номенклатурой поле изображения.

Ну вот как то так.

PS: Эта публикация полностью бесплатна и свободна, т.к. это не готовый продукт, а простой пример решения задачи

Всем удачной работы.

от 20.04.2012 - По просьбе одного из участников форума, была добавлена функция открытия изображения по клику.

Файлы обработки:

-