Использование макетов оформления

Обновлено: 17.01.2008

Макеты оформления компоновки данных предназначены для оформления отчетов. При помощи макетов оформления можно указывать различным областям отчета определенные цвета фона, текста, шрифты и т.д.

Типы областей макета оформления

Выводимый отчет можно разделить на области, указанные на рис. 1

         
         
  Отчет  
         
  Заголовок  
         
  Информация  
         
  Элемент отчета 1  
         
  Элемент отчета 2  
         
  ...  
         
  Элемент отчета N  
         

Рис. 1

На указанном рисунке:

Группировку отчета можно представить в виде областей, указанных на рис. 2

             
             
  Группировка  
             
  Заголовок  
             
  Информация  
             
  Заголовок таблицы  
  Заголовок группировки уровень 1  
     Заголовок группировки уровень 2  
  ...  
         Заголовок группировки уровень N  
              Детальные записи  
          Подвал группировки уровень N  
  ...  
      Подвал группировки уровень 2  
  Подвал группировки уровень 1  
  Общие итоги по вертикали  
             

Рис. 2

На указанном рисунке:

Следует заметить, что в качестве заголовков или подвалов группировки могут использоваться заголовки и подвалы иерархической группировки. Также перед заголовками группировок могут находиться области заголовка и информации, отображающие заголовок вложенной группировки и отбор соответственно.

Группировку отчета, отображаемую в виде списка, можно представить в виде областей, указанных на рис. 3

               
               
  Группировка списка  
               
  Заголовок  
               
  Информация  
               
  Заголовок группировки списка уровень 1  
               
     Заголовок группировки списка уровень 2  
               
  ...  
               
         Заголовок группировки списка уровень N  
               
              Детальные записи списка  
               
         Подвал группировки списка уровень N  
               
  ...  
               
      Подвал группировки списка уровень 2  
               
  Подвал группировки списка уровень 1  
               
  Общие итоги по вертикали списка  
               

Рис. 3

На указанном рисунке:

Следует заметить, что в качестве заголовков или подвалов группировки могут использоваться заголовки и подвалы иерархической группировки.

Таблицу можно представить в виде областей, указанных на рис. 4

                                     
                                     
  Таблица  
                                     
  Заголовок                          
                                     
  Информация                          
                                     
  Заголовок таблицы Заголовок группировки колонки уровень 1 Подвал группировки колонки уровень 1  
  Заголовок группировки уровень 1 Ресурсы заголовка группировки уровень 1  
     Заголовок группировки уровень 2 Ресурсы заголовка группировки уровень 2  
  ...  
         Заголовок группировки уровень N Ресурсы заголовка группировки уровень N  
              Детальные записи Ресурсы детальных записей  
          Подвал группировки уровень N Ресурсы подвала группировки уровень N  
  ...  
      Подвал группировки уровень 2 Ресурсы подвала группировки уровень 2  
  Подвал группировки уровень 1 Ресурсы подвала группировки уровень 1  
  Общие итоги по вертикали  
                                     

Рис. 4

На указанном рисунке:

Таким образом, в макете оформления существуют следующие типы областей:

  1. ЗаголовокГруппировки(GroupHeader) - область заголовка группировки. Для данной области можно указать значение уровня группировки, при этом значение уровня, равное 0, подразумевает область по умолчанию;
  2. ПодвалГруппировки(GroupFooter) - область подвала группировки. Для данной области можно указать значение уровня группировки, при этом значение уровня, равное 0, подразумевает область по умолчанию;
  3. ЗаголовокИерархическойГруппировки(HierarchicalGroupHeader) - область заголовка иерархической группировки. Для данной области можно указать значение уровня группировки, при этом значение уровня, равное 0, подразумевает область по умолчанию;
  4. ПодвалИерархическойГруппировки(HierarchicalGroupFooter) - область подвала иерархической группировки. Для данной области можно указать значение уровня группировки, при этом значение уровня, равное 0, подразумевает область по умолчанию;
  5. ЗаголовокГруппировкиСписка(ListGroupHeader) - область заголовка группировки списка. Для данной области можно указать значение уровня группировки, при этом значение уровня, равное 0, подразумевает область по умолчанию;
  6. ПодвалГруппировкиСписка(ListGroupFooter) - область подвала группировки списка. Для данной области можно указать значение уровня группировки, при этом значение уровня, равное 0, подразумевает область по умолчанию;
  7. ЗаголовокИерархическойГруппировкиСписка(ListHierarchicalGroupHeader) - область заголовка иерархической группировки списка. Для данной области можно указать значение уровня группировки, при этом значение уровня, равное 0, подразумевает область по умолчанию;
  8. ПодвалИерархическойГруппировкиСписка(ListHierarchicalGroupFooter) - область подвала иерархической группировки списка. Для данной области можно указать значение уровня группировки, при этом значение уровня, равное 0, подразумевает область по умолчанию;
  9. ЗаголовокГруппировкиКолонки(ColumnGroupHeader) - область заголовка колонки таблицы. Для данной области можно указать значение уровня группировки, при этом значение уровня, равное 0, подразумевает область по умолчанию;
  10. ПодвалГруппировкиКолонки(ColumnGroupFooter) - область подвала колонки таблицы. Для данной области можно указать значение уровня группировки, при этом значение уровня, равное 0, подразумевает область по умолчанию;
  11. ЗаголовокИерархическойГруппировкиКолонки(ColumnHierarchicalGroupHeader) - область заголовка иерархической колонки таблицы. Для данной области можно указать значение уровня группировки, при этом значение уровня, равное 0, подразумевает область по умолчанию;
  12. ПодвалИерархическойГруппировкиКолонки(ColumnHierarchicalGroupFooter) - область подвала иерархической колонки таблицы. Для данной области можно указать значение уровня группировки, при этом значение уровня, равное 0, подразумевает область по умолчанию;
  13. ДетальныеЗаписи(Detail) - область детальных записей. Для данной области значение уровня должно быть всегда равным 0;
  14. ДетальныеЗаписиСписка(ListDetail) - область детальных записей списка. Для данной области значение уровня должно быть всегда равным 0.
  15. РесурсыЗаголовкаГруппировки(ResourcesGroupHeader) - область ресурсов заголовка группировки. Для данной области можно указать значение уровня группировки, при этом значение уровня, равное 0, подразумевает область по умолчанию;
  16. РесурсыПодвалаГруппировки(ResourcesGroupFooter) - область ресурсов подвала группировки. Для данной области можно указать значение уровня группировки, при этом значение уровня, равное 0, подразумевает область по умолчанию;
  17. РесурсыЗаголовкаИерархическойГруппировки(ResourcesHierarchicalGroupHeader) - область ресурсов заголовка иерархической группировки. Для данной области можно указать значение уровня группировки, при этом значение уровня, равное 0, подразумевает область по умолчанию;
  18. РесурсыПодвалаИерархическойГруппировки(ResourcesHierarchicalGroupFooter) - область ресурсов подвала иерархической группировки. Для данной области можно указать значение уровня группировки, при этом значение уровня, равное 0, подразумевает область по умолчанию;
  19. РесурсыДетальныхЗаписей(ResourcesDetail) - область ресурсов детальных записей. Для данной области значение уровня должно быть всегда равным 0;
  20. ИтогПоРесурсамЗаголовкаГруппировки(ResourcesTotalGroupHeader) - область итогов по ресурсам заголовка группировки;
  21. ИтогПоРесурсамПодвалаГруппировки(ResourcesTotalGroupFooter) - область итогов по ресурсам подвала группировки;
  22. ИтогПоРесурсамЗаголовкаИерархическойГруппировки(ResourcesTotalHierarchicalGroupHeader) - область итогов по ресурсам заголовка иерархической группировки;
  23. ИтогПоРесурсамПодвалаИерархическойГруппировки(ResourcesTotalHierarchicalGroupFooter) - область итогов по ресурсам заголовка колонки таблицы;
  24. ИтогПоРесурсамДетальныхЗаписей(ResourcesTotalDetail) - область итога по ресурсам детальных записей. Для данной области значение уровня должно быть всегда равным 0;
  25. ОбщиеИтогиПоВертикали(VerticalOverall) - область общего итога по вертикали. Для данной области можно указать значение уровня группировки, при этом значение уровня, равное 0, подразумевает область по умолчанию;
  26. ОбщиеИтогиПоВертикалиСписка(ListVerticalOverall) - область общего итога по вертикали списка. Для данной области можно указать значение уровня группировки, при этом значение уровня, равное 0, подразумевает область по умолчанию;
  27. ЗаголовокТаблицы(TableHeader) - область заголовка таблицы или группировки. Для данной области значение уровня должно быть всегда равным 0;
  28. ПоУмолчанию(Default) - область по умолчании. Для данной области значение уровня должно быть всегда равным 0;
  29. Заголовок(Title) - область заголовка отчета. Для данной области можно указать значение уровня группировки, при этом значение уровня, равное 0, подразумевает область по умолчанию;
  30. Информация(Information) - область информации. Для данной области можно указать значение уровня группировки, при этом значение уровня, равное 0, подразумевает область по умолчанию.

Существуют следующие особенности вывода заголовков и подвалов группировок:

Использование макетов оформления в отчетах

Система компоновки данных позволяет использовать различные макеты оформления в отчете. Причем существует возможность использования нескольких макетов оформления для различных элементов отчета. Для управления макетами оформления используются настройки компоновки данных. При использовании конструктора схемы компоновки данных необходимо перейти на закладку "Настройки", а затем выбрать закладку "Другие настройки". На данной закладке находится параметр Макет оформления, позволяющий указывать используемый макет оформления в отчете.

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

Создание собственного макета оформления

Собственный макет оформления можно создать, используя конструктор макетов. Для этого необходимо добавить новый макет в папку Общие макеты, находящейся в папке Общие дерева объектов конфигурации. В открывшемся конструкторе макетов необходимо установить тип макета Макет оформления компоновки данных.

Открывшийся редактор макетов оформления позволяет редактировать цвета фона, текста  и границы, шрифты, отступы и т.д. областей макета оформления. При этом имена областей, содержащих оформления областей, выделяются жирным шрифтом. Стоит отметить, что существует возможность использования предопределенного макета оформления -  для этого необходимо использовать команду Стандартный макет.... Также существует возможность загрузки и сохранения макетов оформления в XML - формате.

Использование макетов оформления из встроенного языка

Для обращения к макетам оформления из встроенного языка предназначено свойство глобального контекста БиблиотекаМакетовОформленияКомпоновкиДанных. Данное свойство является коллекцией макетов оформления и содержит предопределенные макеты оформления, а также макеты оформления, определенные в общих макетах дерева конфигурации.

Данная коллекция имеет следующие методы:

Элементами библиотеки макетов оформления компоновки данных являются объекты типа ЭлементБиблиотекиМакетовОформленияКомпоновкиДанных.  Данный объект имеет следующие свойства:

Также данный объект имеет метод ПолучитьМакет(), который возвращает объект типа МакетОформленияКомпоновкиДанных.

Для редактирования макетов оформления предназначен объект встроенного языка КонструкторМакетаОформленияКомпоновкиДанных. Данный объект можно создать при помощи конструктора, который имеет необязательный параметр - макет оформления. Если макет оформления не указан, то создается новый макет, иначе открывается для редактирования указанный макет оформления. Конструктор макетов оформления имеет следующие методы:

Поясним использование конструктора макета оформления на следующем примере. Пусть необходимо добавить возможность создания собственного макета оформления в отчете о продажах. Для этого необходимо создать собственную форму отчета, добавить в командную панель данной формы кнопку создания макета оформления, а также переопределить действие по кнопке Сформировать.

В обработчике нажатия на кнопку "Создать макет оформления" происходит создание конструктора макета оформления:

Копировать в буфер обмена
Процедура ДействияФормыСоздатьМакетОформления(Кнопка)

    // Создать конструктор макета оформления
    Если СвойМакетОформления = Неопределено Тогда

        КонструкторМакетаОформления = Новый КонструкторМакетаОформленияКомпоновкиДанных();

    Иначе

        КонструкторМакетаОформления = Новый КонструкторМакетаОформленияКомпоновкиДанных(СвойМакетОформления);

    КонецЕсли;

    КонструкторМакетаОформления.Редактировать(ЭтаФорма);

КонецПроцедуры

Пример формы конструктора показан на указанном ниже рисунке.

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

Копировать в буфер обмена
Процедура ОбработкаВыбора(ЗначениеВыбора, Источник)

    // Запомнить созданный макет оформления
    Если ТипЗнч(ЗначениеВыбора) = Тип("МакетОформленияКомпоновкиДанных") Тогда

        СвойМакетОформления = ЗначениеВыбора;

    КонецЕсли;

КонецПроцедуры

В обработчике нажатия на кнопку "Сформировать" происходит формирование отчета:

Копировать в буфер обмена
Процедура ДействияФормыСформироватьОтчет(Кнопка)

    // Очистим табличный документ - результат
    ЭлементыФормы.Результат.Очистить();

    // Сгенерируем макет компоновки данных при помощи компоновщика макета
    КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных;

    // В качестве схемы компоновки будет выступать схема самого отчета
    // В качестве настроек отчета - текущие настройки отчета
    // Данные расшифровки будем помещать в свойство расширения формы - ДанныеРасшифровки
    // В качестве макета оформления будем передавать созданный макет оформления или Неопределено,
    // если макет оформления не был создан.
    МакетКомпоновки = КомпоновщикМакета.Выполнить(СхемаКомпоновкиДанных, КомпоновщикНастроек.Настройки, ДанныеРасшифровки, СвойМакетОформления);

    // Создадим и инициализируем процессор компоновки
    ПроцессорКомпоновки = Новый ПроцессорКомпоновкиДанных;
    ПроцессорКомпоновки.Инициализировать(МакетКомпоновки, ,ДанныеРасшифровки);

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

    // Обозначим начало вывода
    ПроцессорВывода.НачатьВывод();

    // Основной цикл вывода отчета
    Пока Истина Цикл

    // Получим следующий элемент результата компоновки
    ЭлементРезультата = ПроцессорКомпоновки.Следующий();

        Если ЭлементРезультата = Неопределено Тогда
            // Следующий элемент не получен - заканчиваем цикл вывода
            Прервать;

        Иначе
            // Элемент получен - выведем его при помощи процессора вывода
            ПроцессорВывода.ВывестиЭлемент(ЭлементРезультата);

        КонецЕсли;

    КонецЦикла;

    // Обозначем завершение вывода
    ПроцессорВывода.ЗакончитьВывод();

КонецПроцедуры