Back to top

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

Опубликовано e-1c@mail.ru - вт, 05/16/2017 - 05:32

Необходимо было сделать следующее: в строку отчета вывести картинку, вид которой зависит от значения другого поля. Отчет создан на компоновке данных.

Рассмотрим алгоритм реализации на небольшом примере.

Необходимо на базе справочника «Номенклатура» вывести реквизит «Ссылка» и картинку возле этого реквизита. Вид картинки зависит от свойства «ЭтоГруппа» элемента справочника «Номенклатура».

Программная часть алгоритма оформлена в процедуре модуля отчета "ПриКомпоновкеРезультата".

Пример программного кода:

Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка)
 
	СтандартнаяОбработка = Ложь;
	ДокументРезультат.Очистить();
	КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных;
	Макет = КомпоновщикМакета.Выполнить(СхемаКомпоновкиДанных, КомпоновщикНастроек.Настройки, ДанныеРасшифровки);
	ПроцессорКомпоновки = Новый ПроцессорКомпоновкиДанных;
	ПроцессорКомпоновки.Инициализировать(Макет, , ДанныеРасшифровки);
	ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент;
	ПроцессорВывода.УстановитьДокумент(ДокументРезультат);
	//ПроцессорВывода.Вывести(ДокументРезультат);
 
	ПолеПоКоторомуНеобходимоПолучитьЗначение = "Ссылка";
	ПроцессорВывода.НачатьВывод();
	Пока истина Цикл
		ЭлементРезультата = ПроцессорКомпоновки.Следующий();
 
		Если ЭлементРезультата = Неопределено Тогда
			прервать;
		КонецЕсли;	
		ПроцессорВывода.ВывестиЭлемент(ЭлементРезультата);
		Если ЭлементРезультата.ЗначенияПараметров.Количество() > 0 Тогда
			ЗначениеВыводимыхДанных = Неопределено;
			Для каждого ЗначениеПараметра из ЭлементРезультата.ЗначенияПараметров Цикл
				Если ТипЗнч(ЗначениеПараметра.Значение) = Тип("ИдентификаторРасшифровкиКомпоновкиДанных") Тогда
					ПоляРасшифровки = ДанныеРасшифровки.Элементы[ЗначениеПараметра.Значение].ПолучитьПоля();
					Для Каждого ПолеРасшифровки из ПоляРасшифровки Цикл
						Если ПолеРасшифровки.Поле = ПолеПоКоторомуНеобходимоПолучитьЗначение Тогда
							ЗначениеВыводимыхДанных = ПолеРасшифровки.Значение;
							Прервать;
						КонецЕсли;	
					КонецЦикла;	
				КонецЕсли;	
			КонецЦикла;	
			Если ЗначениеЗаполнено(ЗначениеВыводимыхДанных) Тогда
				Рис = ДокументРезультат.Рисунки.Добавить(ТипРисункаТабличногоДокумента.Картинка);
				Рис.РазмерКартинки = РазмерКартинки.РеальныйРазмер;
				Индекс = ДокументРезультат.Рисунки.Индекс(Рис);
				Если ЗначениеВыводимыхДанных.ЭтоГруппа Тогда
					ДокументРезультат.Рисунки[Индекс].Картинка = БиблиотекаКартинок.СоздатьГруппу;
				Иначе
					ДокументРезультат.Рисунки[Индекс].Картинка = БиблиотекаКартинок.ВидРасчета;
				КонецЕсли;	
				ВысотаТабДок = ДокументРезультат.ВысотаТаблицы;
				ОбластьДляКартинки = ДокументРезультат.НайтиТекст("%Картинка%");
				Если ОбластьДляКартинки <> Неопределено Тогда
					ДокументРезультат.Рисунки[Индекс].Расположить(ОбластьДляКартинки);	
					ОбластьДляКартинки.Текст = "%КартинкаДобавлена%"
				КонецЕсли;
			КонецЕсли;	
		КонецЕсли;	
	КонецЦикла;
	ПроцессорВывода.ЗакончитьВывод();
 
КонецПроцедуры

В схеме компоновке данных в «вычисляемые поля» было добавлено поле «ПолеКартинка». В выражение добавлено значение «%Картинка%», поэтому выражению будем искать область ячеек куда необходимо вставить нашу картинку.

Настройка вычисляемого поля

В это поле и будет выводится наша картинка.

Создана следующая настройка схемы компоновки данных:

Настройка СКД

После вывода отчета получили следующий результат:

Результат отчета