Построитель отчета

В 1С:Предпритии 8.0 появился новый объект ПостроительОтчета, предназначенный для быстрой разработки сложных, настраиваемых пользователем отчетов.

Построитель отчета использует запрос как основу для формирования отчета. Фактически, запрос — это единственное, что требуется запрограммировать, остальное сделает построитель отчета.

Конечно, разработчик имеет средства влиять на этот процесс, например, задать макет для формирования отчета.

Общая схема

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

Цифрами на схеме обозначены следующие действия:

1. На вход построителя отчета подается исходный текст запроса на расширенном языке запросов. Из этого текста могут быть автоматически сформированы доступные отборы, измерения, условия упорядочивания и доступные поля.

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

3. Для хорошего визуального представления отчета на вход подается макет или несколько макетов для каждой области отчета.

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

5. Расшифровки отчета передаются в построитель отчета, он корректирует свой запрос и формирует новый отчет.

6. Результат запроса может быть получен в отдельную переменную.

7. Запрос также может быть получен в переменную.

8. Настройки построителя могут быть сохранены в специальном объекте и затем восстановлены. У объекта НастройкиПостроителяОтчета нет свойств и методов, он нужен только для хранения настроек построителя.

Простой пример

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

1. Создайте новый отчет (или внешнюю обработку).

2. Создайте у него реквизит Построитель и укажите тип ПостроительОтчета.

3. В модуле объекта (не в модуле формы) напишите следующий текст запроса:

 

Построитель.Текст = "
| ВЫБРАТЬ
| ПродажиОбороты.Контрагент КАК Контрагент,
| ПродажиОбороты.СуммаОборот КАК СуммаОборот,
| ПродажиОбороты.Товар КАК Товар
|ИЗ
| РегистрНакопления.Продажи.Обороты КАК ПродажиОбороты
| (ИТОГИ СУММА(СуммаОборот) ПО
| Контрагент,
| Товар
| АВТОУПОРЯДОЧИВАНИЕ";
//сформировать автоматически настройки построителя,
//исходя из текста запроса
Построитель.ЗаполнитьНастройки();
 

4. Создайте форму отчета (обработки).

5. Для кнопки Выполнить создайте процедуру-обработчик события Нажатие. В этой процедуре напишите следующий текст:

 

Построитель.Выполнить();
Построитель.Вывести();

 

В результате будет сформирован следующий отчет с группировками.

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

  • • Построитель.Порядок — условия сортировки данных;

  • • Построитель.Отбор — условия отбора (фильтры);

  • • Построитель.ИзмеренияСтроки — измерения отчета по строкам, например, Номенклатура;

  • • Построитель ИзмеренияКолонки — измерения отчета по колонкам, например, Контрагент.Вид;

  • • Построитель.ДоступныеПоля — все поля, доступные для выбора;

  • • Построитель.ВыбранныеПоля — выбранные поля для вывода в отчет.

Ниже приведена простая форма, позволяющая управлять настройками построителя отчета:

 

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

Например, сделаем поле Контрагент измерением колонки, а не строки, тогда будет сформирован следующий кросс-отчет:

Настройки построителя

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

В самом тексте запроса можно явно указать настройки построителя (см. ниже «расширение языка запросов»), но обычно они формируются автоматически после указания текста запроса (свойство Текст), для чего необходимо вызвать метод ЗаполнитьНастройки.

Из доступных настроек построителя пользователь интерактивно указывает только те, которые ему нужны. Но настройки построителя также поддаются изменению средствами встроенного языка через соответствующие свойства:

  • • Текст — исходный текст запроса,

  • • Параметры — коллекция параметров для запроса,

  • • Порядок — объект, содержащий условия сортировки,

  • • Отбор — объект, содержащий условия отбора,

  • • ИзмеренияСтроки — коллекция измерений по строкам,

  • • ИзмеренияКолонки — коллекция измерений по колонкам,

  • • ДоступныеПоля — коллекция всех доступных для выбора полей,

  • • ВыбранныеПоля — коллекция всех выбранных полей для вывода в отчет.

Два метода ПолучитьНастройки и УстановитьНастройки позволяют запомнить или восстановить настройки построителя, используя специальный объект НастройкиПостроителяОтчетов.

Этот объект не имеет ни свойств, ни методов, он предназначен только для хранения настроек построителя.

Форматирование отчета

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

Макет для построителя отчета может содержать следующие области-строки:

  • • ШапкаТаблицы,

  • • Заголовок,

  • • <имя измерения>,

  • • <имя измерения>Иерархия,

  • • Детали<имя измерения>,

  • • ОбщиеИтоги.

Ниже показан пример макета с такими областями:

 

Именованные области макета автоматически будут использованы для вывода соответствующих областей отчета. Можно задать свой макет для каждой области, используя следующие свойства:

  • • МакетДетальныхЗаписей,

  • • МакетШапкиТаблицы,

  • • МакетЗаголовкаОтчета,

  • • МакетПодвалаТаблицы,

  • • МакетПодвалаОтчета.

Обработка результата

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

Вывести()

Создает и показывает на экране новый табличный документ.

Вывести(ТабДок)

Выводит отчет в переданный табличный документ.

Вывести(Диаграмма, ИмяРесурса)

Выводит результат в переданную диаграмму. Можно указать ресурс для отображения на диаграмме. Если имя ресурса не указано, то выводится первый ресурс.

На основе результата, полученного построителем, можно сформировать сводную таблицу, для чего необходимо установить у нее свойство ИсточникДанных:

 

СводТаб = ЭлементыФормы.ПолеТабДок.ВстроенныеТаблицы.СводнаяТаблица;
СводТаб.ИсточникДанных = Построитель;
СводТаб.ОтображатьПоля = Истина;
 

Из построителя можно извлечь результат запроса и сам запрос, с помощью свойства Результат и метода ПолучитьЗапрос:

• Свойство Результат содержит объект типа РезультатЗапроса. Используя этот объект, можно открыть выборку из результата запроса и перебрать ее для своих целей, например, вывести новый отчет.

• Метод ПолучитьЗапрос возвращает объект типа Запрос. В его свойстве Текст содержится текст итогового выполненного запроса, который в общем случае может не совпадать с исходным текстом запроса.

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

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

Расширение языка запросов

Обычно настройки построителя формируются автоматически исходя из текста запроса с помощью метода ЗаполнитьНастройки, но их можно указать явно прямо в тексте запроса. Язык запросов системы 1C:Предприятие 8.0 имеет особые расширения синтаксиса, предназначенные специально для построителя отчетов. Такие инструкции оформляются в фигурные скобки {...} и игнорируются при обычном выполнении запроса.

В следующем примере инструкции для построителя отчетов выделены жирным шрифтом:

 

ВЫБРАТЬ
Номенклатура, Номенклатура.Представление,
Контрагент, Контрагент.Представление,
КоличествоОборот КАК Количество,
СуммаОборот КАК Сумма
{ВЫБРАТЬ Номенклатура.*, Контрагент.*,
КоличествоОборот КАК Количество,
СуммаОборот КАК Сумма}
ИЗ
РегистрНакопления.Продажи.Обороты(
{&ПериодС},
{&ПериодПо},,
{Номенклатура.*, Контрагент.*})
{ИТОГИ ПО
Номенклатура.*, Контрагент.*}
ИТОГИ Сумма(Количество), Сумма(Сумма) ПО ОБЩИЕ
 

Обратите внимание на параметры «{&ПериодС}» и «{ПериодПо}». Эти конструкции при обычном выполнении запроса игнорируются, а при установке свойства Текст построителя они распознаются как поля для отбора, т.е. пользователь сможет указать для них условия отбора.

Конструкция «{ИТОГИ ПО ...}» распознается как ресурсы для построителя отчета. Указание точки со звездочкой («.*») говорит о том, что в построителе будет доступно не только само поле, но и все его вложенные поля, например, реквизиты справочника. Компания осуществляет высотные работы в кратчайшие сроки, в то . разработка сайта . работа водителем Крым . авиабилеты луганск москва