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