Волшебство
программирования на 1С:Предприятие 7.7 и 8.0
Выпуск
67 / 22.08.2004
Здравствуйте, уважаемые подписчики. В этом выпуске
приводится первая статья Печенкина Романа о построителе отчета
в 1С:Предприятии 8.0. Эту статью со скриншотами можно найти здесь www.mista.ru/v8/repbuilder.htm.
Свои замечания по статье можно присылать мне по e-mail или публиковать
на форуме www.forum.mista.ru
Построитель
отчета
Автор: Печенкин Роман
1. Что такое построитель отчета?
Построитель отчета —это объект, позволяющий
на основе заданного текста запроса и настроек получить результат
и вывести его в табличный документ или диаграмму.
Настройки построителя отчета включают:
- группировки (пример: “Номенклатура”, “Контрагент”…),
- показатели (пример: “Количество”, “Сумма”…),
- дополнительные поля (пример: “Номенклатура.Услуга”, “Контрагент.Код”…),
- фильтр (пример: по конкретной номенклатуре, по группе контрагентов…)
и
- сортировка (пример: “Номенклатура.Код”, “Контрагент.Наименование”…)
Настройки построителя имеют средства визуализации, что позволяет
программисту с минимальными трудозатратами предоставить пользователю
интерфейс для их установки.
Перед выводом макет построителя отчета можно оформить с помощью
макета оформления.
Вывод результата выполнения запроса построителя отчета осуществляется
одной командой.
2. Где можно использовать построитель отчета?
С помощью построителя отчета можно проектировать основную массу
отчетов (пример: “Остатки товаров”, “Продажи за период”…). При
этом время на их разработку и программный код существенно сократятся,
а качество оформления и функциональность —повысятся.
Кроме того, построитель отчета можно использовать в тех случаях,
когда не нужен вывод результата, но требуется настройка пользователем
элементов запроса, к примеру, группировок или фильтра (пример:
выгрузка номенклатуры в xml-файл или обработка проведения документов
по заданному фильтру).
Поскольку построитель отчета недоступен на сервере 1С:Предприятия
и не используется в модуле внешнего соединения, то в этих случаях
необходимо использовать построитель запроса, который аналогичен
построителю отчета, но не имеет визуальных свойств и методов (“Макет”,
“ВыводитьЗаголовокОтчета”, “Вывести()”, “ОформитьМакет()”…).
3. Немного о понятиях
По сравнению с версией 7.7 в версии 8.0 произошла небольшая смена
понятий, поэтому стоит немного остановиться на этом.
Понятие
|
Описание
|
Измерения строки |
Список группировок, по которым будет осуществляться вывод
по строкам (пример: “Номенклатура”, “Контрагент”…) |
Измерения колонки |
Список группировок, по которым будет осуществляться вывод
по колонкам (пример: “Склад”, “Месяц”…). |
Отбор |
Набор различных фильтров (пример: по группе контрагентов,
по заданной организации…). |
Порядок |
Набор полей сортировки (пример: “Номенклатура.Код”, “ДокументПродажи.Ответственный”…). |
Поле |
Одно из полей выборки запроса (пример: “Номенклатура”, “Контрагент.Код”,
“Количество”, “Сумма”…). |
Выбранные поля |
Список выбранных полей, включает в себя показатели (пример:
“Количество”, “Сумма”…) и дополнительные поля (реквизиты группировок)
(пример: “Номенклатура.Группа”, “Контрагент.Код”…). |
Доступные поля |
Список полей, доступных для добавления в группировки, фильтр,
сортировку и выбранные поля. Заполняется, как правило, списком
полей выборки запроса, но может быть программно отредактирован
(можно добавлять, изменять и удалять доступные поля). |
Важно понимать, что поля группировки, фильтра, сортировки и выбранные
поля не связаны напрямую с доступными полями, это разные объекты.
Главное отличие заключается в том, что доступное поле не имеет
свойства “ПутьКДанным” (пример: “Номенклатура.Код”, “Количество”),
так как это просто своеобразное описание поля, по которому будет
произведена попытка найти соответствие среди полей выборки запроса
в момент добавления его в список группировок, фильтра, сортировки
или выбранных полей.
При этом нет возможности программно добавить одно из доступных
полей в какой-либо из вышеперечисленных списков, так как, с одной
стороны, у доступного поля нет методов а-ля “ДобавитьВОтбор()”
или “ДобавитьВВыбранныеПоля()”, а, с другой стороны, при добавлении
нового элемента в любой из вышеперечисленных списков требуется
указать свойство “ПутьКДанным”, которое не всегда совпадает с именем
поля (пример: поля “Номенклатура.Родитель” и “Номенклатура.Родитель.Родитель”
имеют одинаковое имя “Родитель”).
4. Типовой вариант использования построителя отчета
В общем случае последовательность действий при работе с построителем
отчета следующая:
- Создать новый объект “ПостроительОтчета”;
- Присвоить свойству “Текст” текст запроса;
- Если в тексте запроса не были заданы настройки построителя
отчета, то выполнить метод “ЗаполнитьНастройки()”;
- Предоставить пользователю возможность изменения настроек построителя
отчета;
- При необходимости можно отказаться от автогенерации макета
построителем отчета и присвоить свойству “Макет” фиксированный
макет;
- При необходимости можно присвоить свойству “МакетОформления”
один из стандартных или свой макет, при этом, если автогенерируемый
макет построителя отчета был заменен на фиксированный, то выполнить
метод “ОформитьМакет()”;
- Вызвать метод “Выполнить()”;
- Вызвать метод “Вывести()”.
Пример:
Построитель = Новый "ПостроительОтчета";
Построитель.Текст =
"ВЫБРАТЬ РАЗРЕШЕННЫЕ
| ДенежныеСредстваКомпанииОстатки.СтруктурнаяЕдиница,
| СУММА(ДенежныеСредстваКомпанииОстатки.СуммаОстаток) КАК Сумма
|
|ИЗ
| РегистрНакопления.ДенежныеСредстваКомпании.Остатки(, {СтруктурнаяЕдиница.*})
|
|СГРУППИРОВАТЬ ПО
| ДенежныеСредстваКомпанииОстатки.СтруктурнаяЕдиница
|
|ИТОГИ СУММА(Сумма) ПО
| ОБЩИЕ,
| СтруктурнаяЕдиница";
Построитель.ЗаполнитьНастройки();
//Здесь можно дать пользователю возможность
//изменить настройки построителя отчета
Построитель.Макет = ПолучитьМакет("СвойМакет"); Построитель.МакетОформления = ПолучитьМакетОформления(СтандартноеОформление.Классика); Построитель.ОформитьМакет(); Построитель.Выполнить(); Построитель.Вывести();
|
5. Описание некоторых свойств построителя отчета
Свойство
|
Описание
|
Текст |
Содержит текст запроса построителя отчета. Если текст запроса
построителя отчета не содержит элементов настройки “{…}”, то
можно с помощью метода “ЗаполнитьНастройки()” автоматически
заполнить настройки на основе текста запроса. |
ТекстЗаголовка |
Текст, который будет выводиться в заголовке отчета (пример:
“Остатки товаров на 01.01.2004”, “Продажи за январь 2004 года”…). |
ВыводитьЗаголовокОтчета
ВыводитьШапкуТаблицы
ВыводитьОбщиеИтоги
ВыводитьПодвалТаблицы
ВыводитьПодвалОтчета |
Эти свойства определяют, будут ли выводиться, соответственно,
заголовок отчета, шапка таблицы, общие итоги, подвал таблицы
и подвал отчета. |
ВыводитьДетальныеЗаписи |
Свойство отвечает за принудительный вывод или запрет вывода
детальных записей. |
АвтоДетальныеЗаписи |
Если свойство “АвтоДетальныеЗаписи” установить в Истина,
то каждая детальная запись будет выводиться только в том случае,
если она отличается от групповой. |
ДоступныеПоля |
Содержит список полей, доступных для добавления в группировки,
фильтр, выбранные поля и сортировку. |
ИзмеренияСтроки
ИзмеренияКолонки |
Содержат список группировок, соответственно, по строкам и
по колонкам. |
Отбор |
Содержит список фильтров, заданных построителю отчета. |
ВыбранныеПоля |
содержит список выбранных показателей и реквизитов группировок. |
Порядок |
содержит список полей сортировки. |
Параметры |
Содержит список параметров построителя (объявленных в тексте
запроса построителя с помощью символа “&”). |
Результат |
Содержит результат выполнения запроса построителя отчета
(объект типа РезультатЗапроса). |
6. Обработка Расшифровки с помощью построителя отчета
Свойство “ЗаполнениеРасшифровки” содержит один из трех вариантов
заполнения расшифровки при выводе:
1-ый вариант: не заполнять (не использовать расшифровку).
2-ой вариант: значения группировок (при расшифровке ячейки будет
открываться значение группировки, выведенное в ней).
3-ий вариант: расшифровка (расшифровка будет заполняться структурой,
содержащей значения всех группировок). В этом случае требуется
обрабатывать событие табличного документа “Обработка расшифровки”,
где нужно анализировать переданную структуру и выполнять те или
иные действия.
Важным моментом является то, что в третьем варианте нельзя осуществлять
вывод в генерируемый табличный документ, так как тогда невозможно
обработать расшифровку, обработка события которой происходит в
модуле той формы, на которой расположено поле табличного документа.
Если используется третий вариант заполнения расшифровки, то можно
использовать метод “НастроитьРасшифровку()”, предназначенный для
того, чтобы выполнить и вывести отчет с учетом расшифровки, выполненной
пользователем.
Построитель отчета может использоваться тот же самый или новый.
При настройке расшифровки все фильтры настраиваемого построителя
отчета будут удалены и добавлены все установленные фильтры исходного
построителя запроса плюс фильтры по значениям группировок из расшифровки.
Пример:
Процедура РезультатТаблицаОбработкаРасшифровки (Элемент, Расшифровка, СтандартнаяОбработка)
СтандартнаяОбработка = Ложь;
Построитель.НастроитьРасшифровку(Построитель, Расшифровка); Построитель.Выполнить(); Построитель.Вывести();
КонецПроцедуры
|
См. также:
1С:Предприятие 7.7: учебник, курс
лекций, статьи, ссылки
Книга "Разработка в системе 1С:Предприятие 8.0" - http://www.v8.1c.ru/book/v8develop.htm
Официальный
сайт рассылки - www.mista.ru
Волшебный форум - www.forum.mista.ru,
Форум по 1С - http://www.forum.mista.ru/index.php?forum=1c
Архив выпусков этой рассылки - http://www.mista.ru/subscribe
С уважением,
Станислав Митичкин (aka Волшебник)
stasmit@mail.ru
<< Предыдущий
выпуск | Список
выпусков |
Следующий выпуск >>
|