Top.Mail.Ru

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

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

Скажем сразу, что из-за некоторых ограничений 1С, данная задача не решается средствами конструктора СКД, через задание макета или как-то иначе. Решается она только программно, определением процедуры ПриКомпоновкеРезультата() в модуле отчета СКД. Но обо всем по порядку.

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

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

В качестве примера создадим отчет «Список сотрудников с фотографиями» в конфигурации ЗУП 3.1.

  1. Создаем отчет конструктором 1С СКД с выводом поля «Фотография», в котором будет ссылка на двоичные данные с картинкой. В ЗУП фотографии физических лиц хранятся в отдельном регистре сведений «ФотографииФизическихЛиц».

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

  1. В процедуре ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка) отменим стандартный вывод (СтандартнаяОбработка = Ложь) и выведем макет в табличный документ программно. Тут все стандартно:
    СтандартнаяОбработка = Ложь;

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

    КомпонощикМакета     = Новый КомпоновщикМакетаКомпоновкиДанных;

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

    ПроцессорКомпоновки = Новый ПроцессорКомпоновкиДанных;

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

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

    ПроцессорВывода.УстановитьДокумент(ДокументРезультат);

    ПроцессорВывода.Вывести(ПроцессорКомпоновки);

Здесь нужно обратить внимание на параметр ДанныеРасшифровки, именно из него мы будем извлекать ссылки на картинки.

Далее просто в двух циклах (по строкам и по колонкам) пробегаемся по получившемуся табличному документу и в нужных полях (в нашем случае это поля с наименованием «Фотография»), если их расшифровка соответствует типу ссылки на картинку (в нашем случае это «ДвоичныеДанные»), добавляем картинки.

    ВсегоСтрок         = ДокументРезультат.ВысотаТаблицы;

    ВсегоКолонок    = ДокументРезультат.ШиринаТаблицы;

    Для НомерСтроки =1 По Всегострок Цикл

        Для НомерКолонки = 1 По ВсегоКолонок Цикл

            Область     = ДокументРезультат.Область(НомерСтроки, НомерКолонки);

            Расшифровка = Область.Расшифровка;

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

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

                НайденноеПоле     = ПоляРасшифровки.Найти("Фотография");

                Если НайденноеПоле = Неопределено Тогда

                 Продолжить;

                КонецЕсли;

                Если ТипЗнч(НайденноеПоле.Значение) = Тип("ХранилищеЗначения") Тогда

                    Область.АвтоВысотаСтроки = Ложь;

                    Область.ВысотаСтроки = 80;

                    Картинка = Новый Картинка(НайденноеПоле.Значение.Получить());

                    РисунокТД = ДокументРезультат.Рисунки.Добавить(ТипРисункаТабличногоДокумента.Картинка);

                    РисунокТД.Картинка             = Картинка;

                    РисунокТД.РазмерКартинки     = РазмерКартинки.Пропорционально;

                    //РисунокТД.Линия             = Новый Линия(ТипЛинииРисункаТабличногоДокумента.Сплошная, 1);

                    РисунокТД.Расположить(Область);

                КонецЕсли;

            КонецЕсли;

        КонецЦикла;

    КонецЦикла;

Вот и все, наш отчет готов.

Comments

So empty here ... leave a comment!

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

Sidebar