н п

Универсальный отчет

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

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

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

работы

интерактивно, непосредственно пользователем.

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

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

208

209

Использование основных объектов конфигурации

Автоматически параметры настройки формируются вызовом метода ЗаполнитьНастройки() следующим образом:

• полями, доступными для выбора в качестве полей отбора,
порядка или вывода в отчет (свойство «ДоступныеПоля»),
становятся все поля из списка выборки и все их подчиненные

поля,

•  в список полей, выбранных для вывода в отчет (свойство
«ВыбранныеПоля»), добавляются все поля из списка выборки,

НЕ нашли? Не то? Что вы ищете?

•  полями, доступными для выбора в качестве измерений,
становятся все поля из предложения ИТОГИ ПО и все их
подчиненные поля,

•  в список измерений по строкам (свойство
«ИзмеренияСтроки») добавляются все поля из предложения
ИТОГИПО,

•  в доступные отборы (свойство «Отбор») добавляются
параметры виртуальных таблиц.

Вторым способом формирования параметров настроек построителя отчета является выделение их в тексте запроса. Для этого используются фигурные скобки «{}». Фигурными скобками могут быть выделены параметры построителя отчета, а также некоторые синтаксические конструкции:

•  ВЫБРАТЬ ... - описывает поля, которые пользователь сможет
выбирать для вывода,

•  ГДЕ ... - описывает поля, на которые пользователь может
накладывать ограничения,

•  УПОРЯДОЧИТЬПО ... - описывает поля для обозначения

порядка,

ИТОГИ ПО ... - описывает поля, по которым будут
выводиться итоговые значения.

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

Создание отчетов

Создание универсального отчета

М

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

Создадим в конфигураторе новый объект конфигурации Отчет «Универсальный». Этот отчет будет иметь реквизит «ПостроительОтчета», с типом ПостроительОтчета.

В модуле отчета создадим текст запроса для построителя отчета. Для этого вставим в модуль следующие строки:

ПостроительОтчета. Текст =

;

Установим курсор перед символом точки с запятой и вызовем конструктор запросов (Текст | Конструктор запроса...).

В качестве таблицы выберем виртуальную таблицу регистра накопления «Продажи. Обороты». Из этой таблицы выберем все поля:

Ha закладке «Итоги» укажем получение общих итогов и выберем все ресурсы регистра:

210

211

Использование основных объектов конфигурации

Создание отчетов

Нажмем «OK». B модуле отчета появится текст сформированного запроса:

ПостроительОтчета. Текст =

"ВЫБРАТЬ

| ПродажиОбороты. Номенклатура,

| ПродажиОбороты. Номенклатура. Представление,

| ПродажиОбороты. Клиент,

| ПродажиОбороты. Клиент. Представление,

| ПродажиОбороты. Мастер,

| ПродажиОбороты. Мастер. Представление,

| ПродажиОбороты. КоличествоОборот КАК КоличествоОборот,

| ПродажиОбороты. ВыручкаОборот КАК ВыручкаОборот,

| ПродажиОбороты. СтоимостьОборот КАК СтоимостьОборот

|ИЗ

| РегистрНакопления. Продажи. Обороты КАК ПродажиОбороты

|

|ИТОГИ СУММАСКоличествоОборот), СУММА(ВыручкаОборот),

| СУММА(СтоимостьОборот)

| ПООБЩИЕ";

Добавим в текст запроса указания для построителя отчетов:

ПостроительОтчета. Текст =

"ВЫБРАТЬ

| ПродажиОбороты. Номенклатура,

| ПродажиОбороты. Номенклатура. Представление,

| ПродажиОбороты. Клиент,

| ПродажиОбороты. Клиент. Представление,

| ПродажиОбороты. Мастер,

| ПродажиОбороты. Мастер. Представление,

| ПродажиОбороты. КоличествоОборот КАК КоличествоОборот,

| ПродажиОбороты. ВыручкаОборот КАК ВыручкаОборот,

| ПродажиОбороты. СтоимостьОборот КАК СтоимостьОборот

|ИЗ

| РегистрНакопления. Продажи. Обороты КАК ПродажиОбороты

|{ИТОГИ ПО Номенклатура, Клиент, Мастер}

|ИТОГИ СУММАСКоличествоОборот), СУММА(ВыручкаОборот),

| СУММА(СтоимостьОборот)

| ПООБЩИЕ";

Теперь создадим форму отчета и расположим на ней поле
табличного документа (Форма | Вставить элемент управления I
Поле табличного документа)
с именем

«ПолеТабличногоДокумента»:

Расположим в форме поле табличного документа

Затем установим курсор в верхнюю левую ячейку поля табличного
документа и выполним

Таблица | Встроенные таблицы | Вставить сводную таблицу.

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

Процедура ПриОткрытии() СводнаяТаблица = ЭлементыФормы. ПолеТабличногоДокумеита

■ВстроенныеТаблицы. СводнаяТаблица1,' СводнаяТаблица. ИсточникДанных = ПостроительОтчета;

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

Этим текстом мы устанавливаем сводной таблице в качестве источника данных построитель отчета.

212

213

Использование основных объектов конфигурации

Создание отчетов

Запустим 1С:Предприятие в режиме отладки и откроем отчет «Универсальный». На экране появится форма отчета, и окно выбора полей сводной таблицы:

Теперь в окне выбора полей сводной таблицы раскроем группу «Номенклатура» и добавим значение «(Без иерархии)» в строки, а измерение «Клиент» добавим в колонки. Отчет изменит свой вид:

Поместим значение ресурса «ВыручкаОборот» в данные, измерение «Номенклатура» в строки, а измерение «Мастер» в колонки. Отчет примет вид:

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






214

215

Использование основных объектов конфигурации

Создание отчетов

Отчет Универсальный2

«ТабличноеПолеПоля» (соответственно «КоманднаяПанельПорядок» и «ТабличноеПолеПорядок»):



Н

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

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

Создадим новый объект конфигурации Отчет с именем «Универсальный2».

На закладке «Данные» создадим реквизит отчета с именем «ПостроительОтчета» и типом ПостроительОтчета. На закладке «Формы» с помощью конструктора создадим основную форму отчета и приступим к ее редактированию.

Расположим в форме две надписи с именами «Поля» и «Порядок» и заголовками «Поля:» и «Порядок:» соответственно:

Теперь для табличного поля «ТабличноеПолеПоля»
источник данных

ОтчетОбъект. ПостроительОтчета. ВыбранныеПоля:

зададим как

 





Под каждым текстовым полем расположим командную панель и табличное поле с именами «КоманднаяПанельПоля» и

216

217

Использование основных объектов конфигурации

Создание отчетов

После этого для командной панели «КоманднаяПанельПоля» установим флаг «Автозаполнение» и в качестве источника действий укажем ТабличноеПолеПоля:

Затем аналогичные действия произведем для другой командной панели и табличного поля.

Табличному полю «ТабличноеПолеПорядок» укажем источник
данных ОтчетОбъект. ПостроительОтчета. Порядок, и у командной
панели «КоманднаяПанельПорядок» поднимем флаг

«Автозаполнение» и укажем в качестве источника действий ТабличноеПолеПорядок:

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

Кроме этого, для того, чтобы пользователь мог настраивать значения этих полей, мы расположили в форме две командные панели, связанные с этими табличными полями. Используя свойства командных панелей «Автозаполнение» и «ИсточникДействий» мы добились автоматического формирования команд в командных панелях, исходя из типа данных, содержащихся в каждом из табличных полей.

*" Узнай больше!

О связи элементов управления и данных, можно прочитать в разделе «Данные и элементы управления» на странице 502

218

219

Использование основных объектов конфигурации

Создание отчетов

Теперь в нижней части формы разместим еще одну надпись с именем «Оформление» и заголовком «Оформление:», а под ним поле выбора с именем «ПолеВыбораОформление»:

Теперь откроем модуль формы и добавим в него текст запроса для построителя отчета:

| РегистрНакопления. Продажи КАК Продажи

|

|{УПОРЯДОЧИТЬ ПО Номенклатура.*, Клиент.*, Мастер.*}

|

|ИТОГИ СУММА(Количество),

| Сумма(Выручка),

| Сумма(Стоимость)

| ПО ОБЩИЕ";

Как видите это совсем простой запрос по регистру накопления «Продажи», в котором расположены управляющие конструкции для построителя отчета.

Конструкция ВЫБРАТЬ позволяет предоставить пользователю возможность выбирать в качестве полей запроса как сами исходные поля запроса, так и все поля «через точку» от данных полей.

Конструкция УПОРЯДОЧИТЬ ПО предоставляет пользователю возможность упорядочивать строки результата запроса.

Теперь, для того, чтобы привести состав полей в «исходное» состояние, добавим команду очистки выбранных полей построителя отчета, и затем в обработчик «КнопкаСформироватьНажатие» вставим команды выполнения построителя отчета:

ПроцедураКнопкаСформироватьНажатие(Элемент) КонецПроцедуры

ПостроительОтчета. Текст =

"ВЫБРАТЬ

| Продажи. Номенклатура КАК Номенклатура,

| Продажн. Клиент КАК Клиеит,

| Продажи. Мастер КАК Мастер,

| Продажи. Количество КАК Количества,

| Продажи. Выручка КАК Выручка,

| Продажи. Стоимость КАК Стоимость

|{ВЫБРАТЬ

| Номенклатура.*,

| Клиент.*,

| Мастер.*,

| Количество.*,

| Выручка.*,

| Стоимость.*}

|ИЗ

ПроцедураКнопкаСформироватьНажатие(Элемент) ПостроительОтчета. МакетОформления =

ПолучитьМакетОформления(ПолеВыбораОформление);

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

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

ПостроительОтчета. Текст =

"ВЫБРАТЬ

| Продажи. Номенклатура КАК Номенклатура,

| Продажи. Клиент КАК Клиент,

| Продажи. Мастер КАК Мастер,

| Продажи. Количество КАК Количество,

| Продажи. Выручка КАК Выручка,

| Продажи. Стоимость КАК Стоимость

|{ВЫБРАТЬ

| Номенклатура.*,

| Клиент.*,

| Мастер.*,

| Количество.*,

| Выручка.*,

220

221

Использование основных объектов конфигурации

Создание отчетов

I Стоимость.*}

1ИЗ

I РегистрНакопления. Продажи КАК Продажи

I

!{УПОРЯДОЧИТЬ ПО Номенклатура.*, Клиент.*, Мастер.*}

I

1ИТОГИ СУММА(Количество),

I Сумма(Выручка),

I Сумма(Стоимость)

I ПО ОБЩИЕ";

ПостроительОтчета. ВыбранныеПоля. Очистить():

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

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

Теперь, для завершения нашего универсального отчета следует заполнить список выбора поля выбора «ПолеВыбораОформление» и установить начальное значение поля:

| Продажи. Мастер КАК Мастер,

| Продажи. Количество КАК Количество,

| Продажи. Выручка КАК Выручка,

| Продажи. Стоимость КАК Стоимость

!{ВЫБРАТЬ

| Номенклатура.*,

| Клиент.*,

| Мастер.*,

I Количество.*,

I Выручка.*,

| Стоимость.*}

| ИЗ

I РегистрНакопления. Продажи КАК Продажи

I

|{УПОРЯДОЧИТЬ ПО Номенклатура.*, Клиент.*, Мастер.*}

I

ИТОГИ СУММА(Количество),

I Сумма(Выручка),

I Сумма(Стоимость)

I ПООБЩИЕ";

ПостроительОтчета. ВыбранныеПоля. Очистить();

СписокВыбора = ЭлементыФормы. ПолеВыбораОформление. СписокВыбора;

СписокВыбора. Добавить(СтандартноеОформление. БезОформления,

"БезОформления");

СписокВыбора. Добавить(СтандартноеОформление. Апельсин, "Апельсин"); СпнсокВыбора. Добавить(СтандартноеОформление. Асфальт, "Асфальт"); СписокВыбора. Добавить(СтандартноеОформление. Бирюза, "Бирюза"); СписокВыбора. Добавить(СтандаргноеОформление. Текстиль, "Текстиль");

ПолеВыбораОформление = СтаидартноеОформление. БезОформлевия;

ПроцедураКношсаСформироватьНажатие(Элемент) ПостроительОтчета. МакетОформления =

ПолучитьМакетОформления(ПолеВыбораОформление);

Построительотчета. ОформитьМакет();

ПостроительОтчета. Вышшшть(); ПостроительОтчета. Вывести(); КонецПроцедуры

ПостроитедьОтчета. Текст =

"ВЫБРАТЬ

I Продажи. Номенклатура КАК Номенклатура,

I Продажи. Клиент КАК Клиент,________________________________________

Запустим 1С:Предприятие в режиме отладки и откроем отчет «Универсальный2».

Выберем поля: «Мастер», «Номенклатура. ВидНоменклатуры», «Номенклатура» и «Выручка». Зададим следующий порядок сортировки:

•  «Мастер» по возрастанию,

•  «Номенклатура. ВидНоменклатуры» по убыванию,

•  «Номенклатура» по возрастанию.

222

223

Использование основных объектов конфигурации

Создание отчетов

Выберем оформление «Апельсин» и нажмем «Сформировать» Результат будет выглядеть следующим образом:

Теперь изменим условия формирования отчета. Выберем поля «Клиент», «Номенклатура» и «Выручка», порядок сортировки будет по возрастанию значения поля «Клиент», а вариант оформления -«Асфальт»:

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

в

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

формы.

Отчет УниверсальныйЗ

П

осмотрим, как будет выглядеть отчет «Универсальный2», если, при создании его в конструкторе выходной формы, указать использование построителя отчета.

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

На закладке «Итоги» отметим получение общих итогов и перейдем на закладку «Отчет»:

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

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

224

225

Использование основных объектов конфигурации

Создание отчето!

представления (например, для табличного документа - размещение группировок, реквизитов, итогов, наличие группировок и т. д.).

В нашем случае согласимся с параметрами, которые конструктор предложил по умолчанию, единственное, что мы изменим - вариант стандартного оформления установим «Асфальт».

Перейдем на закладку «Выходная форма» и откроем закладку: «Форма настройки построителя отчета»:

Запустим 1С:Предприятие в режиме отладки, откроем отчет «УниверсальныйЗ», нажмем кнопку «Настройка...» и установим параметры выбранных полей и порядка такими же, как в последнем примере с отчетом «Универсальный2»:

•  выбранные поля: «Клиент», «Номенклатура»
«ВыручкаОборот»,

•  порядок: «Клиент» по возрастанию:

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

В нашем случае мы снова согласимся с тем, что конструктор предлагает по умолчанию, и нажмем «ОК».

Конструктор сформирует форму отчета и форму настроек отчета.

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

Отчет ВыручкаМастеров2

T

еперь, мы создадим отчет, аналогичный отчету

«ВыручкаМастеров», который будет выводить результат в сводную диаграмму.

Откроем конфигуратор и создадим новый объект

226

227

Использование основных объектов конфигурации

Создание отчетов

конфигурации Отчет с именем «ВыручкаМастеров2». Запустим конструктор выходной формы, и выберем поля «Мастер», «Клиент», «ВыручкаОборот» и «СтоимостьОборот» из виртуальной таблицы регистра накопления «Продажи». На закладке «Итоги» укажем группировочные поля «Мастер» и «Клиент» и суммируемые поля «ВыручкаОборот» и «СтоимостьОборот». В заключение на закладке «Отчет» отметим, что результат должен быть выведен только в сводную диаграмму. Нажмем «ОК».

Запустим 1С:Предприятие в режиме отладки и откроем отчет «ВыручкаМастеров2». На закладке «Настройка» укажем, что порядок вывода должен быть по убыванию значения поля «ВыручкаОборот». После этого двойным щелчком мыши по полю сводной диаграммы откроем окно выбора параметров диаграммы и в точки диаграммы поместим поле «Мастер», в серии - поле «Клиент», а поля «ВыручкаОборот» и «СтоимостьОборот» поместим в данные:

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

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

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

228

229

Глава 6. Оптимизация процедуры проведения документа ОказаниеУслуги

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

«Зачем это нужно?» - можете спросить вы. Тому есть две причины. Во-первых, руководство OOO «На все руки мастер» решило, наконец-то, завершить «эксперименты» по вводу стоимости расходуемых материалов руками и перейти на автоматический расчет стоимости расходуемых материалов «по среднему».

Во-вторых, в обработчике события «Обработка проведения» мы используем обращение к реквизиту «ВидНоменклатуры» справочника «Номенклатура» «через точку». Такое обращение может сильно замедлить скорость выполнения процедуры при больших объемах табличной части документа.

Поэтому, изменения, вносимые нами в документ «ОказаниеУслуги», будут преследовать две цели:

•  определение стоимости расходуемых материалов при
проведении документа,

•  повышение скорости выполнения процедуры.

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

Оптимизация процедуры проведения документа ОказаниеУслз

Особенности использования ссылочных данных

Т

ермином «ссылочные данные» мы будем обозначать данные, хранящиеся в базе данных, доступ к которым возможен при помощи объектов встроенного языка вида Ссылка: СправочникСсылка^имя>, ДокументСсылка.<имя> и т. д. Для того чтобы дальнейшее изложение было более понятным, мы построим объяснение на примере получения ссылки на вид номенклатуры при проведении документа «ОказаниеУслуги».

Не все данные, хранящиеся в базе данных, являются ссылочными. Это связано с тем, что в модели данных 1С:Предприятия 8.0 существует деление на данные, представляющие объектные сущности (справочники, планы счетов, документы и т. д.), и данные, представляющие необъектные сущности (регистры сведений, регистры накопления и т. д.).

С точки зрения системы, некоторая совокупность объектных данных определяется не только значениями своих полей, но и самим фактом своего существования. Другими словами, удалив из базы некоторую совокупность объектных данных, мы не сможем вернуть систему в то же состояние, которое было до удаления. Даже если мы заново создадим ту же самую совокупность объектных данных с теми же самыми значениями полей, с точки зрения системы это будет ДРУГАЯ совокупность объектных данных. Каждую такую совокупность объектных данных, уникальную с точки зрения системы, называют объектом базы данных. Для того чтобы система могла отличить один объект базы данных от другого, каждый объект базы данных (совокупность объектных данных) имеет внутренний идентификатор. Различные объекты базы данных всегда будут иметь различные внутренние идентификаторы. Этот идентификатор хранится вместе с остальными данными объекта в специальном поле «Ссылка».

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

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

232

233

Исполь

зование основных объектов конфигурации

Оптимизация процедуры проведения документа ОказаниеУ

сл\

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

Из за большого объема этот материал размещен на нескольких страницах:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29