При выводе отчетов с помощью построителя отчета иногда возникает необходимость обеспечить дополнительное форматирование полей в отчете, сохранив при этом возможность настройки пользователем всех параметров отчета. Одним из возможных вариантов реализации данной функциональности является программная доработка макета, автоматически генерируемого построителем отчета. В данном разделе описываются некоторые приемы, которые можно использовать для доработки сгенерированного макета.
Объект ПостроительОтчета имеет свойство Макет. Это свойство содержит макет - табличный документ, который будет использован для вывода отчета. В случае, когда данное свойство не установлено, построитель отчета генерирует макет автоматически при каждом доступе к значению данного свойства и использует сгенерированный макет для вывода отчета. Если программно изменить значение данного свойства, то построитель отчета перестает генерировать макет, а для вывода отчета будет использовать установленный макет. Для того чтобы построитель отчета продолжил автоматическую генерацию макета, необходимо "сбросить" свойство Макет, присвоив ему значение Неопределено.
Пример установки макета:
Копировать в буфер обмена// Установить построителю отчета макет ПостроительОтчета.Макет = ПолучитьМакет("МакетОтчета");
Пример сброса макета и получения автоматически сгенерированного макета:
Копировать в буфер обмена// Получение автоматически сгенерированного макета ПостроительОтчета.Макет = Неопределено; СгенерированныйМакет = ПостроительОтчета.Макет;
При необходимости доработки автоматически сгенерированного макета достаточно получить автоматически сгенерированный макет, произвести в нем необходимые изменения и установить его в качестве макета.
Пример:
Копировать в буфер обмена// Получение автоматически сгенерированного макета ПостроительОтчета.Макет = Неопределено; Макет = ПостроительОтчета.Макет; // Некоторые действия по изменению макета Макет.Область().ЦветФона = Новый Цвет(0,0,0); Макет.Область().ЦветТекста = Новый Цвет(255,255,255); // Установка макета построителя отчета ПостроительОтчета.Макет = Макет;
В данном примере были изменены цвет фона и цвет текста во всем макете.
Если необходимо доработать формат некоторого поля, выводимого в отчет, необходимо найти ячейку, в которой располагается данное поле, и изменить значение формата в данной ячейке.
Пример:
Копировать в буфер обменаТекущаяОбласть = Неопределено; Пока Истина Цикл // Осуществим поиск ячейки, в которой находится параметр - Количество ТекущаяОбласть = Макет.НайтиТекст("Количество", ТекущаяОбласть, Макет.Область(), Истина, Истина, Истина, Ложь); Если ТекущаяОбласть <> Неопределено Тогда Если ТекущаяОбласть.Параметр = "Количество" Тогда // Установим формат значения - два знака после запятой ТекущаяОбласть.Формат = "ЧДЦ=2"; КонецЕсли; Иначе Прервать; КонецЕсли; КонецЦикла;
В приведенном примере в макете ищется поле Количество и устанавливается формат поля - два знака после запятой.
Аналогичным приемом можно воспользоваться для установки ширины колонки, в которой располагается поле.
Пример:
Копировать в буфер обменаТекущаяОбласть = Неопределено; Пока Истина Цикл // Осуществим поиск ячейки, в которой находится параметр - Количество ТекущаяОбласть = Макет.НайтиТекст("Количество", ТекущаяОбласть, Макет.Область(), Истина, Истина, Истина, Ложь); Если ТекущаяОбласть <> Неопределено Тогда Если ТекущаяОбласть.Параметр = "Количество" Тогда // Установим необходимую ширину колонки ТекущаяОбласть.ШиринаКолонки = 10; КонецЕсли; Иначе Прервать; КонецЕсли; КонецЦикла;
Иногда возникает потребность исключения некоторых ресурсов из определенных группировок. Например, требуется выводить поле ВалютнаяСуммаОборот только для группировок, которые располагаются после группировки Валюта, и не выводить для всех вышестоящих группировок. Такой функциональности можно достичь, если доработать макет, удалив из группировок, которые находятся выше группировки Валюта, поле ВалютнаяСуммаОборот.
Пример:
Копировать в буфер обменаПостроительОтчетаОтчет.Макет = Неопределено; Макет = ПостроительОтчетаОтчет.Макет; // Удалим поле ВалютнаяСумма из всех областей группировок, выше группировки Валюта Для Каждого Группировка Из ПостроительОтчетаОтчет.ИзмеренияСтроки Цикл Если Группировка.ПутьКДанным = "Валюта" Тогда Прервать; Иначе // Ищем области с именем группировки, а также с именем группировки + обозначение иерархии ИменаОбластей = Новый Массив; ИменаОбластей.Добавить(Группировка.Имя); ИменаОбластей.Добавить(Группировка.Имя + "Иерархия"); Для Каждого ИмяГруппировки Из ИменаОбластей Цикл Область = Макет.Области.Найти(ИмяГруппировки); Если Область <> Неопределено Тогда ТекущаяОбласть = Неопределено; Пока Истина Цикл // Осуществим поиск ячейки, в которой находится параметр - ВалютнаяСуммаОборот ТекущаяОбласть = Макет.НайтиТекст("ВалютнаяСуммаОборот", ТекущаяОбласть, Область, Истина, Истина, Истина, Ложь); Если ТекущаяОбласть <> Неопределено Тогда Если ТекущаяОбласть.Параметр = "ВалютнаяСуммаОборот" Тогда // Удалим параметр из области ТекущаяОбласть.Параметр = ""; КонецЕсли; Иначе Прервать; КонецЕсли; КонецЦикла; КонецЕсли; КонецЦикла; КонецЕсли; КонецЦикла; ПостроительОтчетаОтчет.Макет = Макет;
При необходимости использования макета оформления для доработанных макетов следует установить построителю отчета макет оформления после доработки маета и вызвать метод построителя ОформитьМакет(). В приведенном ранее примере следует перед указанным кодом сбросить макет оформления построителя отчета, присвоив ему значение Неопределено, а после доработки макета установить требуемый макет оформления и вызвать метод ОформитьМакет().
Пример:
Копировать в буфер обмена// Сброс макета оформления ПостроительОтчетаОтчет.МакетОформления = Неопределено; // Код доработки макета // ... // Оформление доработанного макета ПостроительОтчетаОтчет.МакетОформления = ПолучитьМакетОформления(СтандартноеОформление.Классика); ПостроительОтчетаОтчет.ОформитьМакет();