Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
today2 / today2 / Лабраб10.doc
Скачиваний:
275
Добавлен:
08.11.2013
Размер:
41.58 Mб
Скачать

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

Соседние файлы в папке today2