Разработка отчетов при помощи универсального механизма "Шаблон типового отчета"

Зачем пользоваться механизмом типовых отчетов

Настройка варианта отчета

Изменение настроек схемы компоновки данных

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

Как создать отчет на базе типового механизма

Событие "Доработать компоновщик перед выводом". Сложная структура отчета

События при выводе отчета. Доработка расшифровки отчета

Разработка отчетов со сложным макетом

События панели пользователя

Подключение дополнительных возможностей отчета

Как подключить универсальный механизм "Шаблон типового отчета" к конфигурации

Поставка демонстрационной конфигурации

Зачем пользоваться механизмом типовых отчетов

Схема компоновки данных (СКД) позволяет быстро и качественно разрабатывать отчеты любой сложности. Причем, правильно написанная СКД часто позволяет получать сразу несколько отчетов за счет изменения своих настроек. Однако как бы хорошо ни была разработана и настроена СКД, пользователю требуется изменять группировки отчета, устанавливать отборы, дополнительные оформления отчета, т.е. персонализировать настройку СКД. Для неподготовленного пользователя "настройка СКД" является очень сложным заданием, поэтому механизм типовых отчетов предназначен в первую очередь для того, чтобы позволить обычному пользователю работать с отчетами, разработанными на базе СКД без дополнительного обучения и документации. Помимо этого типовой механизм позволяет ускорить разработку отчетов, а так же позволяет на базе одного отчета получать несколько его вариантов, что существенно сокращает количество разрабатываемых отчетов. Общая концепция типового механизма предполагает наличие двух пользователей: администратора отчета и пользователя отчета. Администратор отчета заранее настраивает варианты отчета, чтобы в дальнейшем "неподготовленный" пользователь отчета смог сформировать нужный ему отчет. Вариант отчета содержит в себе настройку СКД и настройку панели пользователя. В настройке СКД описывается структура отчета, по которой в дальнейшем будут выводиться данные. Настройка панели пользователя содержит описание элементов структуры отчета, которые может менять пользователь отчета. Каждый элемент структуры отчета для пользователя имеет свои элементы управления, которые администратор выбирает в процессе настройки. Таким образом, конечный пользователь получает отчет с заранее подготовленными вариантами отчета, в которых он устанавливает отборы, группировки, сортировки при помощи понятных ему элементов управления.

Настройка варианта отчета

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

Изменение настроек схемы компоновки данных

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

Форма редактирования структуры отчета может работать в двух режимах:

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

  1. Настройка СКД не должна содержать сложных элементов структуры. Ниже приведены примеры сложных структур отчета

    Параллельные группировки, таблицы или диаграммы

    Таблица или диаграмма, которую группируют

     

  2. Настройки структуры отчета (отборы, поля, условные оформления, параметры вывода) должны быть настроены только в корневом элементе структуры отчета.
  3. Ни один из элементов структуры отчета не должен иметь имя.

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

Обычный режим настройки отчета структуры отчета

Обычный режим редактирования настройки отчета предоставляет возможность редактировать три наиболее востребованные структуры:

  1. Таблица

    На рисунке ниже приведена структура отчета, соответствующая настройке "Таблица".

    В настройке структуры отчета изменение состава группировок производится путем редактирования строк табличного поля "Группировки строк". Порядок использования группировок определяется очередностью строк в табличном поле.

     

  2. Кросс-таблица

    На рисунке ниже приведена структура отчета, соответствующая настройке "Кросс-таблица".

    В настройке структуры отчета изменение состава группировок производится путем редактирования строк табличных полей "Группировки строк" и "Группировки колонок". Порядок использования группировок определяется очередностью строк в табличном поле.

     

  3. Диаграмма

    На рисунке ниже приведена структура отчета, соответствующая настройке "Диаграмма".

    В настройке структуры отчета изменение состава группировок производится путем редактирования строк табличных полей "Серии" и "Точки". Порядок использования группировок определяется очередностью строк в табличном поле.

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

Расширенный режим настройки отчета структуры отчета

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

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

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

Настройка видимости стандартных страниц

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

Период

На странице Период расположен элемент настройки периода или даты формирования отчета:

Большинство отчетов требуют, чтобы пользователь указал период или дату отчета. В большинстве случаев пользователь указывает один и тот же период или дату. К примеру, прошлый месяц или текущую дату. Чтобы пользователь не повторял операцию каждый раз при открытии отчета, элемент управления периодом позволяет задать относительные период отчета: Этот месяц, этот год, предыдущий год, предыдущий месяц и т.п.

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

Параметры

На странице Параметры расположено табличное поле, позволяющее задать все параметры отчета

Отбор

На странице Отбор расположено табличное поле, позволяющее задать отбор любой сложности

Сортировка

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

Показатели

На странице Показатели элемент управления показателями отчета позволяет включать или выключать ресурсы отчета.

Элемент управления показателями позволяет включать только поля СКД, которые являются ресурсами.

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

 

 

Настройка быстрых отборов

"Быстрые" отборы - это набор элементов управления, при помощи которых пользователь может настраивать отборы СКД. Добавляются элементы управления быстрыми отборами на закладке "Быстрые отборы".

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

Виды быстрых отборов:

"Список" и "Длинный список"

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

Чтобы добавить элемент управления отбором на панель пользователя, нужно:

"Флажок"

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

Чтобы добавить элемент управления отбором на панель пользователя, нужно:

"Флажок + Значение" и "Значение"

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

Чтобы добавить элемент управления отбором на панель пользователя, нужно:

Настройка параметров отчета

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

Вид отображения "Поле ввода", расположение "Горизонтальная панель"

Вид отображения "Поле ввода", расположение "Правая панель"

Вид отображения "Список значений", расположение "Горизонтальная панель"

В данном случае элемент управления похож на элемент управления для вида отображения "Поле ввода", но в нем задается список значений.

Вид отображения "Список значений", расположение "Правая панель"

Вид отображения "Переключатель", расположение "Правая панель"

Для использования вида отображения "Переключатель" есть ряд ограничений:

Расшифровка отчета

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

Как создать отчет на базе типового механизма

Процесс разработки отчета на базе типового механизма делится на три этапа:

  1. Разработка СКД
  2. Подключение СКД к типовому отчету
  3. Разработка вариантов отчета

Разработка СКД стоит на первом месте в разработке отчета, именно от алгоритма СКД будет зависеть, какие отчеты сможет получать пользователь. Но в данной статье мы не будем рассматривать вопросы, связанные с разработкой СКД (эти вопросы подробно рассматриваются в книге Е. Ю. Хрусталевой "1С:Библиотека разработчика. Разработка сложных отчетов в "1С:Предприятии 8". Система компоновки данных"), оговоримся лишь, что СКД для типового отчета может быть любой.

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

Для этого необходимо:

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

После того как в отчет вставлена СКД, следует создать предопределенные настройки отчета. Для этого нужно:

Событие "Доработать компоновщик перед выводом". Сложная структура отчета

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

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

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

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

Подразделение Руководители Работники Служащие Прочие рабочие Мужчины Женщины
Администрация 3 10 3 10
Производство 50 1 5 44 5
Склад 5 1 1 5 5

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

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

При формировании отчета потребуется добавить два поля на один уровень группировки. Для этого добавим в процедуру модуля отчета ДоработатьКомпоновщикПередВыводом следующий текст:

Копировать в буфер обмена
 
// проверим структуру отчета
ПервыйЭлементСтруктуры = Неопределено;
Если КомпоновщикНастроек.Настройки.Структура.Количество() <> 0 тогда
	ПервыйЭлементСтруктуры = КомпоновщикНастроек.Настройки.Структура[0];
КонецЕсли;
Если ПервыйЭлементСтруктуры = Неопределено или ТипЗнч(ПервыйЭлементСтруктуры) <> Тип("ТаблицаКомпоновкиДанных") тогда
	Возврат;
КонецЕсли;

// получить последний элемент группировки колонок таблицы компоновки данных
ПоследнийЭлемент = ТиповыеОтчеты.ПолучитьПоследнийЭлементСтруктуры(КомпоновщикНастроек, ложь);	

// добавим группировки отчета
ТиповыеОтчеты.ДобавитьГруппировку(ПоследнийЭлемент, "Категория");
ТиповыеОтчеты.ДобавитьГруппировку(ПоследнийЭлемент, "Пол");

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

События при выводе отчета. Доработка расшифровки отчета

Отчеты, которые показывают движения документов или реквизиты/ресурсы одного и того же справочника, зачастую требуют особого алгоритма расшифровки в случае, когда отчет показывает детальные записи СКД.

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

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

Копировать в буфер обмена
 
ПередВыводомОтчета(МакетКомпоновки, ПроцессорКомпоновки);
ПередВыводомЭлементРезультата(МакетКомпоновки, ПроцессорКомпоновки, ЭлементРезультата);
	

Разработка отчетов со сложным макетом

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

  1. При помощи СКД выбираются данные для отчета;
  2. Полученные данные выводятся в отчет при помощи специального алгоритма заполнения макета отчета.

Алгоритм получения данных также может состоять из нескольких частей:

  1. При помощи СКД выбираются данные для отчета в виде таблицы или дерева значений в соответствии с заданными пользователем настройками
  2. Получить недостающие данные при помощи дополнительных запросов

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

Копировать в буфер обмена
 
	
КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных;
		
МакетКомпоновки = КомпоновщикМакета.Выполнить(СхемаКомпоновкиДанных, КомпоновщикНастроек.Настройки, , , Тип("ГенераторМакетаКомпоновкиДанныхДляКоллекцииЗначений"));
	
ПроцессорКомпоновки = Новый ПроцессорКомпоновкиДанных;
ПроцессорКомпоновки.Инициализировать(МакетКомпоновки, , , Истина);
	
ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВКоллекциюЗначений;
	
ДеревоДанных =  Новый ДеревоЗначений;
	
ПроцессорВывода.УстановитьОбъект(ДеревоДанных);
ПроцессорВывода.Вывести(ПроцессорКомпоновки);
	

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

События панели пользователя

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

  1. Добавить в структуру, возвращаемую процедурой ПолучитьПараметрыИсполненияОтчета, свойство с названием используемого события и установить его значение в Истина;
  2. Добавить в модуль формы отчета нужные процедуры как экспортные
     
    Название события Процедура Описание события
    ПослеВыводаПанелиПользователя ПослеВыводаПанелиПользователя(ЗначениеНастроек) Событие вызывается после вывода всех элементов управления вариантом отчета. В процедуру передается значение настроек панели пользователя.
    ПослеВыводаПериода ПослеВыводаПериода(СтруктураЭлементовУправления) Событие вызывается после вывода элемента управления периодом отчета. В процедуру передается структура элемента управления отчетом.
    ПослеВыводаПараметра ПослеВыводаПараметра(СтруктураЭлементовУправления) Событие вызывается после вывода параметра отчета. В процедуру передается структура элемента управления отчетом.
    ПослеВыводаГруппировки ПослеВыводаГруппировки(СтруктураЭлементовУправления) Событие вызывается после вывода элемента управления группировками отчета. В процедуру передается структура элементов управления отчетом.
    ПослеВыводаОтбора ПослеВыводаОтбора (СтруктураЭлементовУправления) Событие вызывается после вывода элемента управления отборами отчета. В процедуру передается структура элементов управления отчетом.

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

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

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

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

Структура элементов управления отбором на горизонтальной панели имеет следующие поля:

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

Структура элементов управления отбором в виде флажка и/или значения имеет следующие поля:

Подключение дополнительных возможностей отчета

Иногда в отчете требуется выводить не только таблицу с данными, но и диаграмму Ганта или рисунок. Другими словами, отчет должен иметь возможность выводить другое представление данных в дополнение к существующим возможностям. К примеру, отчет по отпускам удобно смотреть не только в виде таблицы, но и в виде диаграммы Ганта.

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

Копировать в буфер обмена
 
Функция ПолучитьДополнительныеНастройкиОтчета() Экспорт
	МассивДополнительныхНастроек = Новый Массив;
	МассивДополнительныхНастроек.Добавить(Новый Структура("Имя, Заголовок, ЗначениеПоУмолчанию", "ВыводитьДиаграммуГанта", "Выводить диаграмму", истина));
	Возврат МассивДополнительныхНастроек;
КонецФункции
	

После добавления данного программного кода на правую панель пользователя будет выведен флажок с названием "Выводить диаграмму Ганта" (по умолчанию взведенный). Значение этого флажка в настройке отчета будет называться ВыводитьДиаграммуГанта.

Как подключить универсальный механизм "Шаблон типового отчета" к конфигурации

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

Общие картинки:

Общие макеты:

Общие модули:

Общие формы:

Справочники:

Перечисления:

Обработки:

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

Поставка демонстрационной конфигурации

Дистрибутив конфигурации находится в каталоге \1CITS\EXE\TREPORT

Установить демо-конфигурацию и файл поставки

После установки файл поставки библиотеки (.cf-файл) автоматически скопируется в каталог шаблонов

Дистрибутив конфигурации и файл шаблона (Шаблон.erf) находятся в каталоге \1CITS\EXE\TREPORT