close

Вход

Забыли?

вход по аккаунту

?

Лабраб10

код для вставкиСкачать
2.10 Лабораторная работа № 10. Конструктор запросов.
Цель работы. Получение навыков построения отчетов при работе с конструктором запросов.
2.10.1. Теоретические сведения
2.10.1.1 Отчет "РеестрДокументовОказаниеУслуги"
Первым отчетом, на основе которого мы начнем знакомиться с конструктором запросов, будет отчет "РеестрДокументовОказаниеУслуги". Этот отчет просто будет выводить список существующих в базе данных документов "ОказаниеУслуги" в порядке их дат и номеров. Создадим в конфигураторе новый объект конфигурации Отчет "РеестрДокументовОказаниеУслуги". Перейдем на закладку "Макет" и запустим конструктор выходной формы. Рис. 1
Рис. 2
В качестве источника данных для запроса выберем объектную (ссылочную) таблицу документов "ОказаниеУслуги". Из этой таблицы выберем следующие поля: • "Дата", • "Номер", • "Склад", • "Мастер", • "Клиент":
Рис. 3
Обратите внимание, что при выборе полей "Склад", "Мастер" и "Клиент" в список выбранных полей подбираются также поля "Склад.Представление", "Мастер.Представление" и "Клиент.Представление". Дело в том, что в общем случае подразумевается, что эти поля будут выводиться в ячейки табличного документа. Поскольку соответствующие поля "Склад", "Мастер" и "Клиент" являются ссылочными, то в случае, если в качестве значения параметра для вывода будет передано значение-ссылка, система будет выполнять дополнительный запрос для получения представления этого поля (которое и будет выведено в документ), в результате чего вывод отчета замедлится. Поэтому система, при выборе ссылочных полей, предлагает сразу же включить в список выбранных полей и представления ссылочных полей, в расчете на то, что именно они и будут использованы для вывода в документ. После этого перейдем на закладку "Порядок" и укажем, что результат запроса должен быть сначала упорядочен по значению поля "Дата", а затем - по значению поля "ОказаниеУслуги.Ссылка": Рис. 4
Перейдем на закладку "Отчет" и сбросим флаг "Использовать построитель отчета":
Рис. 5
Нажмем "ОК". Конструктор сформирует форму отчета и макет.
Рис. 6
Откроем модуль формы и найдем в нем процедуру "РеестрДокументовОказаниеУслуги". В этой процедуре как раз формируется текст запроса, который будет использован для получения интересующих нас данных:
Рис. 7
Текст запроса начинается, как говорилось выше, с части описания запроса. Описание запроса начинается с обязательного ключевого слова "ВЫБРАТЬ". Затем следует список полей выборки, в котором описываются поля, которые должны содержаться в результате запроса. Этот список может содержать как собственно поля, так и некоторые выражения, вычисляемые на основе значений полей.
После ключевого слова "ИЗ" указываются источники данных - исходные таблицы запроса, содержимое которых обрабатывается в запросе. В данном случае это объектная (ссылочная) таблица "Документ.ОказаниеУслуги". После ключевого слова "КАК" указывается псевдоним источника данных. В нашем случае это "ОказаниеУслуги". В дальнейшем к этому источнику данных можно будет обращаться в тексте запроса, используя псевдоним. Такое обращение мы видим в описании полей выборки.
Поля выборки также могут иметь псевдонимы, по которым в дальнейшем в тексте запроса можно обращаться к этому полю. В нашем случае это псевдонимы "Дата" и "Номер". После части описания запроса в нашем примере следует часть упорядочивания результатов. Предложение "УПОРЯДОЧИТЬ ПО" позволяет сортировать строки в результате запроса. После этого ключевого предложения располагается выражение упорядочивания, которое, в общем случае, представляет собой перечисление полей (выражений) и порядка вывода. В нашем случае упорядочивание будет выполняться сначала по полю выборки, обращение к которому выполняется через псевдоним - "Код", а затем по полю - "Номер". В обоих случаях порядок сортировки будет по возрастанию, который является порядком сортировки по умолчанию.
Теперь обратим внимание на то, как выводится результат запроса в табличный документ.
Рис. 8
В форме отчета расположен элемент управления "ПолеТабличногоДокумента" с именем "ТабДок", который заполняется данными на основе макета, сформированного конструктором.
В начале процедуры мы получаем макет отчета, из которого затем получаем существующие в нем области в соответствующие переменные.
Затем мы очищаем табличный документ и выводим в него те области, которые не содержат данных, получаемых из результата запроса:
В последней строке конструктор добавил начало автогруппировки строк. В данном примере у нас нет строк, которые нужно было бы группировать, но по умолчанию конструктор всегда предлагает выполнить группировку строк в табличном документе. На скорость вывода отчета такой вызов влиять не будет, поэтому оставим текст конструктора без изменений. После этого мы получаем выборку из результата запроса, которую перебираем в цикле.
В каждой итерации цикла мы заполняем параметры полученной ранее области макета значениями, полученными из очередной записи выборки результата запроса, и выводим эту область в табличный документ. В заключение процедуры, мы выводим в табличный документ завершающие области макета. Теперь запустим 1С:Предприятие в режиме отладки и посмотрим на результат работы нашего отчета:
Рис. 9
Таким образом, на примере этого отчета мы продемонстрировали, как использовать конструктор выходной формы и познакомились с некоторыми основными конструкциями языка запросов.
2.10.1.2 Отчет "Рейтинг услуг"
Отчет "Рейтинг услуг" будет содержать информацию о том, выполнение каких услуг принесло предприятию наибольшую прибыль в указанном периоде. На примере отчета "Рейтинг услуг" мы проиллюстрируем, как отбирать данные в некотором периоде, как задавать параметры запроса, и как использовать в запросе данные из нескольких таблиц и включать в результат запроса все данные одного из источников. Создадим новый объект конфигурации "Отчет "РейтингУслуг"". Рис. 10
Перейдем на закладку "Макеты" и вызовем конструктор выходной формы. Рис. 11
Выберем объектную (ссылочную) таблицу справочника "Номенклатура" и виртуальную таблицу регистра накопления "Продажи.Обороты". Для того чтобы исключить неоднозначность имен в запросе, переименуем таблицу "Номенклатура" в "СпрНоменклатура" (контекстное меню правой кнопки мыши).
Рис. 12
Затем установим курсор на таблицу "ПродажиОбороты" и вызовем из контекстного меню пункт "Параметры виртуальной таблицы". В ответ откроется диалог ввода параметров виртуальной таблицы.
Укажем, что начало и конец периода будут переданы в соответствующих параметрах "ДатаНачала" и "ДатаОкончания" (символ "&" перед именем указывает, что это параметр запроса): Рис. 13
Затем выберем из таблиц поля "СпрНоменклатура.Ссылка" и "ПродажиОбороты.ВыручкаОборот": Рис. 14
Перейдем на закладку "Связи" и увидим, что конструктор уже создал связь между двумя выбранными таблицами - значение изменения регистра "Номенклатура" должно быть равно ссылке на элемент справочника "Номенклатура". Единственное, что нам останется сделать, это сбросить флаг "Все" у таблицы регистра и установить его у таблицы справочника.
Рис. 15
Установка флага "Все" у таблицы справочника будет означать, что из справочника будут выбраны все элементы и этим элементам будет поставлено в соответствие значение оборота выручки из регистра. Таким образом, в результате запроса будут присутствовать все услуги, и для некоторых из них будут указаны обороты выручки. Для тех услуг, которые не оказывались в выбранном периоде, не будет указано ничего.
Перейдем на закладку "Условия" и зададим условия выбора элементов из справочника "Номенклатура". При задании условий выбора мы снова будем использовать параметры запроса. Первым условием должно быть то, что выбранный элемент не является группой (для этого следует переключиться в режим "Произвольное условие"). Вторым условием должно быть то, что выбранный элемент является услугой, т.е., что он принадлежит группе "Услуги":
Рис. 16
В дальнейшем, перед выполнением запроса, мы передадим в параметр "ВидНоменклатуры" - соответствующее значение группы справочника. Перейдем на закладку "Объединения/Псевдонимы" и укажем, что представление элемента справочника будет иметь псевдоним "Услуга", а поле регистра будет иметь псевдоним "Выручка": Рис. 17
Перейдем на закладку "Порядок" и укажем, что результат запроса должен быть отсортирован по убыванию значения поля "Выручка".
Рис. 18
На закладке "Итоги" определим, что нужно выводить общие итоги, и они должны представлять собой сумму значений поля "Выручка": Рис. 19
На закладке "Отчет" сбросим флаг "Использовать построитель отчета". Рис. 20
Теперь перейдем на закладку "Выходная форма". Укажем, что параметры "ДатаОкончания" и "ДатаНачала" будут редактироваться в форме в полях ввода с типом "Дата". Для параметров "ВидНоменклатуры" и "Ложь" мы наоборот снимем признак редактирования в форме: Рис. 21
Нажмем "ОК". Платформа сформирует макет и форму отчета. Откроем модуль формы и найдем в нем процедуру "ДействияФормыРейтингУслугСформировать()". В этой процедуре, в той части, где выполняется установка параметров запроса, определим значение параметра "ВидНом", затем подставим его в вызов процедуры "РейтингУслуг()", вместо параметра "неопределено":
Рис. 22
Аналогичным образом поступим и в процедуре "РейтингУслуг()", где значения "неопределено" заменим на "ВидНоменклатуры" и "ЗнЛожь".
Рис. 23
Теперь рассмотрим текст запроса, сформированный конструктором.
Сначала, как обычно, идет часть описания запроса. При описании источников запроса (после ключевого слова "ИЗ"), использована возможность определения нескольких источников запроса. В данном случае выбираются записи из двух источников: "СпрНоменклатура" и "ПродажиОбороты", причем ключевым предложением "ЛЕВОЕ СОЕДИНЕНИЕ... ПО" описан способ, которым будут скомбинированы между собой записи этих двух источников. "ЛЕВОЕ СОЕДИНЕНИЕ" означает, что в результат запроса надо включить комбинации записей из обоих источников, которые соответствуют указанному после ключевого слова "ПО" условию. Кроме этого, в результат запроса надо включить еще и записи из первого (указанного слева от слова "СОЕДИНЕНИЕ") источника, для которых не найдено соответствующих условию записей из второго источника. В описании первого источника и условия соединения нет для нас ничего нового, а вот при описании второго источника, используется возможность задания параметров виртуальной таблицы запроса. Первым параметром передается начало периода расчета итогов, вторым - конец периода. В результате исходная таблица будет содержать только обороты, рассчитанные в переданном периоде. Здесь всегда следует помнить, что если мы передаем в качестве этих параметров дату (а в нашем случае так и будет), то дата содержит и время с точностью до секунды. Если заранее известно, что пользователя не будут интересовать результаты работы отчета в периодах, указанных с точностью до секунд, то следует учесть следующую особенность: по умолчанию время в дате установлено в 00:00:00. Поэтому, если не предпринять специальных мер, получится, что когда пользователь задаст период отчета с 01.03.2004 по 31.03.2004, итоги регистра будут рассчитаны с начала дня 01.03.2004 00:00:00 по начало дня 31.03.2004 00:00:00. Таким образом, данные за 31 число, отличные от начала дня, в расчет не войдут, что сильно удивит пользователя. Для того чтобы исключить эту ситуацию, следует сделать две вещи. Во-первых, в форме отчета ограничить пользователя в возможностях ввода даты начала и даты окончания, установив для соответствующих полей ввода в диалоге состав даты как "Дата".
Рис. 24
Во-вторых, при передаче параметров использовать встроенную функцию "КонецДня()". Для этого вернемся в модуль формы отчета и внесем необходимые изменения в процедуру "ДействияФормыРейтингУслугСформировать()":
Рис. 25
Продолжим рассматривать текст запроса. В части описания запроса есть еще одна новая для нас конструкция - задание условий отбора данных из исходных таблиц. Условию отбора всегда предшествует ключевое слово "ГДЕ". После него описывается само условие. Обратите внимание, что поля исходных таблиц, на которые накладывается условие, могут и не входить в список выборки (как в нашем случае). Кроме того, в нашем условии использован параметр запроса "ВидНоменклатуры".
Далее в запросе следует часть упорядочивания результатов, а за ней - новая для нас часть, которая не встречалась ранее - описание итогов. Она всегда начинается с ключевого слова "ИТОГИ", за которым следует описание того, какие итоги будут присутствовать в результате запроса. Сразу после слова "ИТОГИ" описываются агрегатные функции, которые необходимо рассчитывать в итогах. В нашем случае будет рассчитываться сумма по полю "Выручка". Затем следует ключевое слово "ПО", после которого описываются группировки, в которых должны быть рассчитаны итоги. В нашем случае они отсутствуют, и используется только ключевое слово "ОБЩИЕ", которое указывает на то, что итоги будут рассчитаны по всей таблице в целом.
Рис. 26
Теперь, когда мы закончили знакомиться с текстом запроса, запустим 1С:Предприятие в режиме отладки и посмотрим, как работает наш отчет. Зададим период отчета в один день и убедимся, что данные за этот день попадают в отчет. Таким образом, на примере этого отчета мы продемонстрировали, как отбирать данные в некотором периоде, как задавать параметры запроса и как использовать в запросе данные из нескольких таблиц и включать в результат запроса все данные одного из источников.
Рис. 27
2.10.1.3 Отчет "ВыручкаМастеров"
Отчет "Выручка мастеров" будет содержать информацию о том, какая выручка была получена предприятием благодаря работе каждого из мастеров, с детализацией по всем дням в выбранном периоде и разворотом по клиентам, обслуженным в каждый из дней. На примере этого отчета мы проиллюстрируем, как строить многоуровневые группировки в запросе, как обходить все даты в выбранном периоде, и как управлять состоянием группировок в табличном документе. Создадим новый объект конфигурации "Отчет "ВыручкаМастеров"". Рис. 28
Перейдем на закладку "Макет" и запустим конструктор выходной формы. Рис. 29
Выберем виртуальную таблицу регистра накопления "Продажи.Обороты". Зададим для нее значения параметров "НачалоПериода", "КонецПериода" и "Периодичность".
Рис. 30
После этого выберем из таблицы следующие поля: • "ПродажиОбороты.Мастер", • "ПродажиОбороты.Период", • "ПродажиОбороты.Клиент", • "ПродажиОбороты.ВыручкаОборот".
Рис. 31
Теперь перейдем на закладку "Объединения/Псевдонимы" и зададим псевдоним "Выручка" для поля "ПродажиОбороты.ВыручкаОборот".
Рис. 32
На закладке "Порядок" определим, что результат запроса будет отсортирован по возрастанию значения поля "Период" и на закладке "Итоги" зададим получение общих итогов и промежуточных итогов по полям "Мастер" и "Период".
Рис. 33
Рис. 34
На закладке "Отчет" сбросим флаг "Использовать построитель отчета". На закладке "Выходная форма" отметим, что тип параметров "ДатаНачала" и "ДатаОкончания" будет "Дата". Нажмем "ОК".
Сразу, как и в предыдущем отчете, определим состав даты для полей ввода, расположенных в форме, и затем в вызове процедуры "ВыручкаМастеров" уточним передачу последнего параметра при помощи функции "КонецДня()":
Рис. 35
Рис. 36
Рис. 37
Рис. 38
Теперь обратимся к процедуре "ВыручкаМастеров" и в первую очередь рассмотрим текст запроса, сформированный конструктором. В части описания запроса обратите внимание, что у источника данных, кроме задания начала и окончания периода расчета итогов, задана периодичность выбираемых данных - "День".Именно благодаря этому у нас появляется возможность описать среди выбранных полей поле "Период".
Далее в тексте запроса следует известная нам часть упорядочивания результатов, и в следующей части - описание итогов - мы видим новые для нас строки:
Помимо общих итогов, в нашем запросе будут рассчитаны промежуточные итоги по полям "Мастер" и "Период".
Рис. 39
Теперь, чтобы наглядно продемонстрировать смысл наших дальнейших действий, запустите 1С:Предприятие в режиме отладки и посмотрите на результат работы отчета "Выручка мастеров" за некоторый период:
Рис. 40
Если вы помните, в начале раздела мы говорили, что этот отчет должен показывать данные с детализацией по всем дням в выбранном периоде. У нас же отображаются только те дни, для которых существуют ненулевые записи в таблице регистра накопления. Поэтому сейчас мы займемся тем, что изменим текст программы таким образом, чтобы в отчет попадала каждая дата из указанного периода. Вернемся к модулю отчета "ВыручкаМастеров" и, в части описания итогов запроса, уточним, каким образом должны рассчитываться итоги по полю "Период":
Рис. 41
Такая запись говорит о том, что итоги должны быть, рассчитаны периодами равными дню, в интервале дат, задаваемом параметрами "ДатаНачала" и "ДатаОкончания". И для того, чтобы все эти итоги попали в итоговый табличный документ, нам нужно будет уточнить порядок вывода итогов в выборке результата запроса:
Рис. 42
Смысл внесенных нами уточнений заключается в том, что теперь при формировании выборки по группировке "Период" будут выбираться все имеющиеся значения группировок. Запустим 1С:Предприятие в режиме отладки и выполним отчет "ВыручкаМастеров" за некоторый период, например, неделю.
Рис. 43
Очевидно, что такой внешний вид отчета абсолютно "нечитабелен", поэтому мы снова вернемся к модулю отчета и внесем небольшие уточнения в алгоритм вывода областей табличного документа:
Рис. 44
Смысл внесенных нами изменений заключается в том, что при выводе областей детальных записей и периода, мы сворачиваем группировки, которые по умолчанию выводятся развернутыми. Запустим 1С:Предприятие в режиме отладки и снова выполним отчет "ВыручкаМастеров" за период в месяц. На этот раз результат выглядит гораздо лучше: Рис. 45
Итак, на примере этого отчета мы продемонстрировали, как строить многоуровневые группировки в запросе, как обходить все даты в выбранном периоде, и как управлять состоянием группировок в табличном документе.
2.10.1.4 Отчет "ПереченьУслуг" Отчет "Перечень услуг" будет содержать информацию о том, какие услуги и по какой цене оказывает предприятие. На его примере мы познакомимся с возможностью получения последних значений из периодического регистра сведений и вывода иерархических справочников. Создадим новый объект конфигурации "Отчет "ПереченьУслуг"".
Рис. 46
Перейдем на закладку "Макеты" и вызовем конструктов выходной формы.
Рис. 47
Выберем объектную (ссылочную) таблицу справочника "Номенклатура" и виртуальную таблицу регистра сведений "ЦеныНоменклатуры.СрезПоследних". Для того чтобы исключить неоднозначность имен в запросе, переименуем таблицу "Номенклатура" в "СпрНоменклатура".
Рис. 48
Вызовем диалог ввода параметров виртуальной таблицы "ЦеныСрезПоследних" и укажем, что период будет передан в параметре "ДатаОтчета".
Рис. 49
Затем выберем из таблиц следующие поля:
* "СпрНоменклатура.Родитель", * "СпрНоменклатура.Ссылка", * "ЦеныСрезПоследних.Цена".
Рис. 50
Перейдем на закладку "Связи" и сбросим флаг "Все" у таблицы регистра и установим его у таблицы справочника.
Рис. 51
На закладке "Условия" зададим условие выбора элементов справочника "Номенклатура" - выбираемые элементы должны принадлежать группе, переданной в параметре запроса "ВидНоменклатуры":
Рис. 52
На закладке "ОбъединенияПсевдонимы" укажем, что поле "Родитель" будет иметь псевдоним "ГруппаУслуг", а поле "Ссылка" - "Услуга".
Рис. 53
Перейдем на закладку "Итоги" и укажем, что группировка будет производиться по полю "ГруппаУслуг" с типом итогов "Элементы и иерархия", а значения суммируемых полей задавать не станем.
Рис. 54
На закладке "Отчет" сбросим флаг "Использовать построитель отчета". На закладке "Выходная форма" отметим, что тип параметра "ДатаОтчета" будет "Дата", а параметр "ВидНоменклатуры" в форме редактироваться не будет. Нажмем "ОК".
Рис. 55
Откроем модуль формы и в процедуре "ДействияФормыПереченьУслугСформировать()" определим значение параметра процедуры "ПереченьУслуг".
Рис. 56
Откроем модуль формы и в процедуре "ПереченьУслуг()" определим значение параметра запроса.
Рис. 57
Теперь рассмотрим текст запроса, сформированный конструктором. Практически все конструкции, использованные в этом запросе, нам уже известны, за исключением ключевого слова "ИЕРАРХИЯ", использованного в части описания итогов. Это ключевое слово позволяет рассчитывать итоги по иерархии справочника, однако поскольку в нашем случае какие либо итоги в отчете не нужны, мы использовали эту возможность для создания группировок по иерархии справочника "Номенклатура". Теперь запустим 1С:Предприятие в режиме отладки и, прежде всего, откроем периодический регистр "ЦеныНоменклатуры" и добавим изменение цены некоторой услуги на текущую дату. После этого выполним отчет "Переченьуслуг" на текущую дату, и убедимся, что в отчет выдается последняя исправленная цена. Затем выполним отчет "Переченьуслуг" на предыдущую дату, и убедимся, что в отчет выдается старое значение цены.
Таким образом, на примере этого отчета мы показали, как при помощи запроса можно получить последние значения из периодического регистра сведений и как вывести группировки по иерархии справочника. Рис. 58
2.10.1.5 Отчет "РейтингКлиентов"
Отчет "Рейтинг клиентов" будет показывать, каков доход от оказания услуг каждому из клиентов за все время работы предприятия. На его примере мы продемонстрируем возможность использования диаграммы для отображения результата запроса. Здесь стоит сделать оговорку о том, что, используя построитель отчета, можно вывести данные в диаграмму исключительно с помощью конструктора выходной формы. Однако для того, чтобы понимать, как устроена диаграмма, и каким образом можно заполнить ее данными, мы рассмотрим сначала более подробный вариант. 2.10.1.5.1 Диаграмма
Диаграмма является элементом управления, предназначенным для размещения в таблицах и формах системы 1С:Предприятие диаграмм и графиков различного вида. Логически диаграмма является совокупностью точек, серий и значений серий в точке.
Как правило, в качестве точек используются моменты или объекты, для которых мы получаем значения характеристик, а в качестве серий - характеристики, значения которых нас интересуют. Например, диаграмма продаж видов номенклатуры по месяцам будет состоять из точек - месяцев, серий - видов номенклатуры и значений - оборотов продаж. Диаграмма, как объект встроенного языка, имеет три области, которые позволяют управлять оформлением диаграммы - это область построения, область заголовка и область легенды: Диаграмма может быть вставлена в форму либо в табличный документ. Заполнение диаграммы данными возможно двумя способами. Во-первых, можно заполнить диаграмму данными автоматически. Для этого используется свойство диаграммы "ИсточникДанных". В качестве источника данных диаграммы может выступать область табличного документа (если диаграмма вставлена в табличный документ), либо таблица значений. Общее требование к источнику данных - он должен поставлять диаграмме (кроме самих данных) имена точек и серий. В случае с областью табличного документа имена точек и серий будут браться из верхней строки и левого столбца области; в случае с таблицей значений - из заголовков колонок и первой колонки. Во-вторых, диаграмма может быть заполнена данными "вручную". Для этого нужно создать в диаграмме несколько серий и точек, а затем, используя метод "УстановитьЗначение()", задать нужные значения для каждой пары серия - точка. Следует отметить, что эти два способа заполнения диаграммы не могут комбинироваться. В следующем примере мы будем использовать диаграмму, расположенную в форме и заполнять ее данными "вручную", используя метод "УстановитьЗначение()". 2.10.1.5.2 Создание отчета "РейтингКлиентов" Создадим в конфигураторе новый объект конфигурации "Отчет "РейтингКлиентов"". Рис. 59
Затем создадим основную форму отчета и расположим на ней поле выбора с именем "ПолеВыбора", подписью "Тип диаграммы:" и подсказкой "Выбор типа диаграммы" (Форма | Вставить элемент управления...)
Рис. 60
Затем разместим под ним диаграмму с именем "Диаграмма". Изменим размеры областей диаграммы, и зададим текст области заголовка - "Рейтинг клиентов".
Рис. 61
Рис. 62
В модуле формы создадим процедуру "Сформировать" с заготовкой для текста запроса.
Рис. 63
Установим курсор в предпоследней строке, перед точкой с запятой и вызовем конструктор запроса (Текст | Конструктор запроса...). Выберем виртуальную таблицу регистра накопления "Продажи.Обороты" и из нее одно поле "ПродажиОбороты.Клиент.Представление".
Рис. 64
Затем добавим новое поле (иконка "Добавить" в командной панели над списком полей) и при помощи построителя выражений определим его как разность между выручкой и стоимостью:
Рис. 65
В результате список выбранных полей будет иметь следующий вид:
Рис. 66
На закладке "Объединения/Псевдонимы" укажем, что поле "ПродажиОбороты.Клиент.Представление" будет иметь псевдоним "Клиент", а вычисляемое поле - псевдоним "Доход":
Рис. 67
На закладке "Порядок" укажем, что строки результата нужно упорядочивать по убыванию значения поля "Доход". Нажмем "ОК" и посмотрим, какой текст сформировал конструктор запроса: Рис. 68
Рис. 69
По сравнению с предыдущими отчетами, текст запроса довольно прост; единственным интересным местом, на которое следует обратить внимание, является поле "Доход", являющееся результатом вычисления выражения.
Теперь обработаем результат запроса таким образом, чтобы данные отобразились в диаграмме, расположенной в форме отчета. Добавим в процедуру следующий текст.
Рис. 70
Сначала, с помощью метода "Выполнить()" мы получаем результат запроса. Затем методом "Выбрать()" получаем выборку записей из результата запроса в переменной "ВыборкаРезультатаЗапроса". Перед началом заполнения мы отключаем обновление и автотранспонирование диаграммы для того, чтобы заполнение данными выполнялось быстрее. После этого добавляем в диаграмму единственную точку. Затем мы организуем цикл по выборке из результата запроса и в цикле добавляем серии в нашу диаграмму. Каждому клиенту будет соответствовать своя серия. После этого мы устанавливаем значение точки, передавая методу "УстановитьЗначение()" точку, серию, для которой устанавливается значение в этой точке, и само значение. После заполнения диаграммы данными мы включаем свойство "Обновление", чтобы новое состояние диаграммы было отображено, и "АвтоТранспонирование" для того, чтобы различные типы диаграмм, которые будут выбраны в поле выбора, отображались правильно.
Следует сделать несколько замечаний no оптимизации заполнения диаграммы данными. Во-первых, перед началом заполнения диаграммы данными следует отключать обновление диаграммы (свойство диаграммы "Обновление"). Это значительно ускорит процесс заполнения, поскольку при включенном обновлении диаграмма будет выполнять пересчет и отрисовку автоматически. После того, как диаграмма будет заполнена данными, обновление диаграммы нужно снова включить. Во-вторых, перед началом заполнения диаграммы данными следует также отключать автотранспонирование диаграммы (свойство диаграммы "АвтоТранспонирование"). Автотранспонирование позволяет диаграмме анализировать данные и выбирать наиболее подходящее представление в зависимости от заданного типа диаграммы. Например, круговая диаграмма отображает значения нескольких серий в одной точке, а обычный график - как раз наоборот - значения одной серии в нескольких точках. Обратите внимание, что автотранспонирование диаграммы доступно только в режиме "ручного" заполнения данными. При использовании источника данных это свойство недоступно. После того, как диаграмма будет заполнена данными, автотранспонирование диаграммы можно снова включить, если в этом есть необходимость.
Теперь создадим обработчик события формы "ПриОткрытии", и добавим в него установку значения поля выбора и типа диаграммы, и вызов нашей процедуры "Сформировать".
Рис. 71
И в заключение, создадим обработчик события поля выбора "При изменении", и выполним в нем установку типа диаграммы.
Затем в теле модуля формы опишем заполнение списка выбора для поля выбора: Рис. 72
Запустим 1С:Предприятие в режиме отладки и откроем отчет "РейтингКлиентов", укажем тип диаграммы "Гистограмма". Обратите внимание, что при наведении курсора на столбец гистограммы появляется подсказка.
Рис. 73
Теперь изменим тип диаграммы на "Круговая объемная": Рис. 74
Только что мы рассмотрели с вами общий случай заполнения диаграммы данными. Однако, если исходные данные могут быть получены в виде таблицы значений или области ячеек табличного документа, существует более простой и эффективный способ заполнения диаграммы данными, используя свойство диаграммы - "ИсточникДанных". Вернемся в модуль формы отчета "РейтингКлиентов" и все строки, которыми мы добавляли в диаграмму данные, заменим одной строкой: Рис. 75
Дело в том, что метод "Выгрузить()" по умолчанию выгружает результат запроса в таблицу значений, которую мы и устанавливаем диаграмме в качестве источника данных. Причем структура получаемой таблицы значений как раз соответствует расположению серий в строках диаграммы, принятому по умолчанию.
Запустите 1С:Предприятие в режиме отладки и проверьте работу отчета. Обратите внимание на то, что некоторые типы диаграмм выглядят "некрасиво" (график) или не отображаются совсем (изометрическая непрерывная, изометрическая лента). Это связано с тем, что при использовании источника данных нет возможности использовать свойство диаграммы "АвтоТранспонирование" и нужно обрабатывать транспонирование диаграммы "вручную" (используя свойство "СерииВСтроках"). Таким образом, на примере этого отчета мы продемонстрировали как создавать запросы, используя конструктор запросов, и как использовать диаграмму для визуализации результата запроса.
2.10.1.6 Универсальный отчет
На примере создания универсального отчета мы подробнее познакомимся с объектом встроенного языка "ПостроительОтчета" и узнаем, как работать со сводной таблицей.
Построитель отчета является объектом встроенного языка, позволяющим выполнять различные настройки запроса в ходе выполнения программы. Такие настройки могут выполняться как средствами встроенного языка (в результате некоторого алгоритма работы программы), так и работы интерактивно, непосредственно пользователем.
Исходными данными для построителя отчета является текст запроса. На его основании построитель отчета определяет, какие параметры будут доступны для настройки, и каким образом возможна настройка состава и порядка итоговых данных. Затем происходит программное или интерактивное формирование этих настроек и вывод результатов в табличный документ, диаграмму, сводную таблицу или сводную диаграмму.
Рис. 76
Формировать параметры настройки на основании текста запроса построитель отчета может двумя способами: автоматически и на основании указаний, расположенных в тексте запроса. Автоматически параметры настройки формируются вызовом метода "ЗаполнитьНастройки()" следующим образом: * полями, доступными для выбора в качестве полей отбора, порядка или вывода в отчет (свойство "ДоступныеПоля"), становятся все поля из списка выборки и все их подчиненные поля, * в список полей, выбранных для вывода в отчет (свойство "ВыбранныеПоля"), добавляются все поля из списка выборки, полями, доступными для выбора в качестве измерений, становятся все поля из предложения "ИТОГИ ПО" и все их подчиненные поля, * в список измерений по строкам (свойство "ИзмеренияСтроки") добавляются все поля из предложения "ИТОГИ ПО", * в доступные отборы (свойство "Отбор") добавляются параметры виртуальных таблиц. Вторым способом формирования параметров настроек построителя отчета является выделение их в тексте запроса. Для этого используются фигурные скобки "{}". Фигурными скобками могут быть выделены параметры построителя отчета, а также некоторые синтаксические конструкции: * "ВЫБРАТЬ ..." - описывает поля, которые пользователь сможет выбирать для вывода, * "ГДЕ ..." - описывает поля, на которые пользователь может накладывать ограничения, * "УПОРЯДОЧИТЬ ПО ..." - описывает поля для обозначения порядка, * "ИТОГИ ПО ..." - описывает поля, по которым будут выводиться итоговые значения. После того, как значения параметров указаны, вывод результатов запроса возможен как принудительно (используя методы "Выполнить()" и "Вывести()"), либо автоматически, если результаты выводятся в сводную таблицу. Рассмотрим один из вариантов использования построителя отчета, в котором результаты отчета будут выводиться в сводную таблицу. Создадим в конфигураторе новый объект конфигурации Отчет "Универсальный".
Рис. 77
Этот отчет будет иметь реквизит "ПостроительОтчета", с типом "ПостроительОтчета". Рис. 78
В модуле отчета создадим текст запроса для построителя отчета. Для этого вставим в модуль следующие строки:
Рис. 79
Установим курсор перед символом точки с запятой и вызовем конструктор запросов (Текст | Конструктор запроса...). В качестве таблицы выберем виртуальную таблицу регистра накопления "Продажи.Обороты". Из этой таблицы выберем все поля.
Рис. 80
Рис. 81
Ha закладке "Итоги" укажем получение общих итогов и выберем все ресурсы регистра.
Рис. 82
Нажмем "OK". B модуле отчета появится текст сформированного запроса.
Рис. 83
Добавим в текст запроса указания для построителя отчетов:
Рис. 84
Теперь создадим форму отчета и расположим на ней поле табличного документа (Форма | Вставить элемент управления I Поле табличного документа) с именем "ПолеТабличногоДокумента"
Рис. 85
Рис. 86
Рис. 87
Затем установим курсор в верхнюю левую ячейку поля табличного документа и выполним "Таблица | Встроенные таблицы | Вставить сводную таблицу". После этого создадим обработчик события формы отчета "При открытии", и добавим в него следующий текст:
Рис. 88
Этим текстом мы устанавливаем сводной таблице в качестве источника данных построитель отчета.
Запустим 1С:Предприятие в режиме отладки и откроем отчет "Универсальный". На экране появится форма отчета, и окно выбора полей сводной таблицы. Поместим значение ресурса "ВыручкаОборот" в данные, измерение "Номенклатура" в строки, а измерение "Мастер" в колонки. Отчет примет вид: Рис. 89
Теперь в окне выбора полей сводной таблицы раскроем группу "Номенклатура" и добавим значение "(Без иерархии)" в строки, а измерение "Клиент" добавим в колонки. Отчет изменит свой вид:
Рис. 90
Таким образом, используя построитель отчета, мы предоставили пользователю возможность самостоятельно формировать отчет по регистру "ОказанныеУслуги" в том виде, который ему нужен.
2.10.2 Задание на лабораторную работу
1. Построить отчет "Реестр документов "ОказаниеУслуги"".
2. Построить отчет "Рейтинг услуг".
3. Построить отчет "Выручка мастеров". 4. Построить отчет "Перечень услуг".
5. Построить отчет "Рейтинг клиентов".
6. Построить отчет "Универсальный отчет".
2.10.3 Контрольные вопросы
1. Понятие диаграммы и ее структура.
2. Способы заполнения диаграммы.
3. Объект встроенного языка "ПостроительОтчета".
4. Способы задания параметров настройки ПостроителяОтчета.
5. Понятие сводной таблицы и ее структура.
6. Использование сводной таблицы для вывода результатов отчета.
Документ
Категория
Без категории
Просмотров
127
Размер файла
40 607 Кб
Теги
лабраб10
1/--страниц
Пожаловаться на содержимое документа