Как вывести картинки в отчете на СКД?

10 Jun
Published by Nicholas

Картинки в отчете на СКД

Простая, казалось бы, задача - сделать средствами СКД отчет с двумя колонками: "Номенклатура" и ее "Изображение". Давайте попробуем это реализовать.

Создадим новый отчет.

Номенклатура с картинками

Набор данных типа запрос. 

Запрос к справочнику Номенклатура

Сделаем настройки схемы компоновки. 

Настройки компоновки данных

Отчет будет выглядить вот так. 

Хранилище значения

Как же теперь вывести картинки? Алгоритм примерно следующий. Перехватим обработчки ПриКомпоновкеРезультата(), последовательно пробежимся по всем ячейкам табличного документа и выведем вместо ХранилицеЗначения соответствующую картинку. 

Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка)

   
СтандартнаяОбработка = Ложь;

   
НастройкиКомпоновки = КомпоновщикНастроек.ПолучитьНастройки();

   
КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных;
   
МакетКомпоновки = КомпоновщикМакета.Выполнить(СхемаКомпоновкиДанных, НастройкиКомпоновки, ДанныеРасшифровки);

   
ПроцессорКомпоновки = Новый ПроцессорКомпоновкиДанных;
   
ПроцессорКомпоновки.Инициализировать(МакетКомпоновки, , ДанныеРасшифровки);

   
ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент;
   
ПроцессорВывода.УстановитьДокумент(ДокументРезультат);
   
ПроцессорВывода.Вывести(ПроцессорКомпоновки);


    Для
ТекущаяСтрока = 1 По ДокументРезультат.ВысотаТаблицы Цикл

        Для
ТекущаяКолонка = 1 По ДокументРезультат.ШиринаТаблицы Цикл

           
ТекущаяОбласть = ДокументРезультат.Область(ТекущаяСтрока, ТекущаяКолонка);
           
ТекущаяРасшифровка = ТекущаяОбласть.Расшифровка;

            Если
ТипЗнч(ТекущаяРасшифровка) = Тип("ИдентификаторРасшифровкиКомпоновкиДанных") Тогда

               
ПоляРасшифровки = ДанныеРасшифровки.Элементы.Получить(ТекущаяРасшифровка).ПолучитьПоля();
               
ПолеКартинки = ПоляРасшифровки.Найти("Картинка");

                Если
ТипЗнч(ПолеКартинки) = Тип("ЗначениеПоляРасшифровкиКомпоновкиДанных") Тогда

                   
ФайлКартинки = ПолеКартинки.Значение;

                    Если
ТипЗнч(ФайлКартинки) = Тип("ХранилищеЗначения") Тогда

                       
КартинкаВДокументе = ДокументРезультат.Рисунки.Добавить(ТипРисункаТабличногоДокумента.Картинка);
                       
КартинкаВДокументе.Картинка = Новый Картинка(ФайлКартинки.Получить());
                       
КартинкаВДокументе.РазмерКартинки = РазмерКартинки.Пропорционально;
                       
КартинкаВДокументе.Расположить(ТекущаяОбласть);

                    КонецЕсли;

                КонецЕсли;

            КонецЕсли;

        КонецЦикла;

    КонецЦикла;

КонецПроцедуры

 

Теперь отчет формируется вот так. Задача решена.

Отчет с картинками

Файлы для скачивания
1НоменклатураСКартинками.erf

Тэги 

СКД

Комментарии

Аватар пользователя Александр

Спасибо! Получилось.

Аватар пользователя Наталья

Спасибо большое, столько информации перерыто...По вашей инструкции получилось!

Аватар пользователя Анастасия

А у меня не получилось. В расшифровке поля фотография нет хранилища значения. В отчет фотография выводится как ХранилищеЗначения, а в отладке ПолеКартинки.Значение
- null. И расшифровать по нему в принципе нельзя, если два раза ткнуть в поле отчета, меня Расшифровка серое. 1С:Предприятие 8.3 (8.3.15.1700).

Аватар пользователя Nicholas

Пример из статьи у вас тоже не работает?

Аватар пользователя Сергей

У Вас в настройках СКД в наборах данных скорей всего указан тип значения. Удалите его.

Аватар пользователя Alias

Такая же фигня. Решили?

Аватар пользователя Алексей

Спасибо. Очень помогло :)

Добавить комментарий

Plain text

  • HTML-теги не обрабатываются и показываются как обычный текст
  • Строки и абзацы переносятся автоматически.
CAPTCHA
Вы человек или автоматическая спам-рассылка?
Target Image