Вывод картинки в скд. Часть 2.
Всем привет! В первой части мы с вами рассмотрели возможность вывода картинок номенклатуры в отчет на системе компоновки данных. В этой же заметки мы попробуем вывести картинки номенклатуры в отчет на ‘СКД’, где отсутствуют возможность, описанная в первой части. Т.е. у нас платформа имеет релиз менее 8.3.14.
Итак, берем отчет из предыдущей заметки и пытаемся его сформировать на платформе 1сверсии 8.3.11.3034 в конфигурации ‘БСП’ (2.4.6.241):
И видим, что данный метод вывода картинок в отчет не работает. Но не беда! Все что нельзя сделать с помощью конструктора, наверняка всегда можно сделать программно.
Итак, для начала меняем запрос отчета: теперь нам достаточно получить только реквизит ‘ФайлКартинки’ типа ‘СправочникСсылка._ДемоНоменклатураПрисоединенныеФайлы’:
Настраиваем структуру отображения нашего отчета:
И теперь наступает самое интересное. Нам необходимо организовать программный вывод ‘СКД’ в процедуре ‘ПриКомпоновкеРезультата’ и при этом написать алгоритм получения двоичных данных картинки и её отображение в поле отчета (в поле ‘ФайлКартинки’):
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 |
Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка) СтандартнаяОбработка = Ложь; Настройки = КомпоновщикНастроек.ПолучитьНастройки(); ДанныеРасшифровки = Новый ДанныеРасшифровкиКомпоновкиДанных; КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных; СхемаКомпоновкиДанных = ПолучитьМакет("ОсновнаяСхемаКомпоновкиДанных"); МакетКомпоновки = КомпоновщикМакета.Выполнить(СхемаКомпоновкиДанных, Настройки, ДанныеРасшифровки); ПроцессорКомпоновки = Новый ПроцессорКомпоновкиДанных; ПроцессорКомпоновки.Инициализировать(МакетКомпоновки, , ДанныеРасшифровки); ДокументРезультат.Очистить(); ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент; ПроцессорВывода.УстановитьДокумент(ДокументРезультат); ПроцессорВывода.Вывести(ПроцессорКомпоновки); //!!!!!Заполняем наши картинки ВсегоКолонок = ДокументРезультат.ШиринаТаблицы; ВсегоСтрок = ДокументРезультат.ВысотаТаблицы; Для НомерКолонки = 1 По ВсегоКолонок Цикл Для НомерСтроки = 1 По ВсегоСтрок Цикл ТекОбласть = ДокументРезультат.Область(НомерСтроки, НомерКолонки); Если ТекОбласть.Расшифровка <> Неопределено Тогда ПоляРасшифровки = ДанныеРасшифровки.Элементы[ТекОбласть.Расшифровка].ПолучитьПоля(); Если ПоляРасшифровки.Количество() > 0 Тогда Рисунок = ПолучитьИзображение(ПоляРасшифровки.Получить(0).Значение); Если Рисунок <> Неопределено Тогда Рис = ДокументРезультат.Рисунки.Добавить(ТипРисункаТабличногоДокумента.Картинка); Рис.РазмерКартинки = РазмерКартинки.АвтоРазмер; Рис.Картинка = Рисунок; Рис.Расположить(ТекОбласть); КонецЕсли; КонецЕсли; КонецЕсли; КонецЦикла; КонецЦикла; КонецПроцедуры Функция ПолучитьИзображение(п_ФайлКартинки) КартинкаТовара = Неопределено; Если ТипЗнч(п_ФайлКартинки) = Тип("СправочникСсылка._ДемоНоменклатураПрисоединенныеФайлы") Тогда Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ | ДвоичныеДанныеФайлов.ДвоичныеДанныеФайла |ИЗ | РегистрСведений.ДвоичныеДанныеФайлов КАК ДвоичныеДанныеФайлов |ГДЕ | ДвоичныеДанныеФайлов.Файл = &Файл"; Запрос.УстановитьПараметр("Файл", п_ФайлКартинки); Выборка = Запрос.Выполнить().Выбрать(); Если Выборка.Следующий() Тогда КартинкаТовара = Новый Картинка(Выборка.ДвоичныеДанныеФайла.Получить(), Истина); КонецЕсли; КонецЕсли; Возврат КартинкаТовара; КонецФункции |
Отлично, теперь пробуем построить наш отчет:
Вроде как получилось! Но размер картинок нас не устраивает! Давайте изменим условное оформление нашего поля ‘ФайлКартинки‘:
И теперь мы получим совсем другой результат:
Вы наверняка можете сказать: Стоп! Ты же просто-напросто взял эту статью с инфостарта! Но ребят, я не просто её нашел и изучил, а еще для себя и для вас развернул в более понятный алгоритм и плюс выложил готовую бесплатную обработку! Сейчас очень много информации есть в интернете и с каждым днем все сложнее и сложнее выкладывать новые и уникальные знания.
P.S. Запрос в цикле тоже конечно смотрится отвратительно, но по крайней мере работает, в отличие от варианта, если бы получение этой информации находилось бы в самом запросе (при большом объеме данных).
Качаем обработку и узнаем для себя что-то новое! Всем удачи!
Скачать файлы