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

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С:Предприятие в режиме отладки и проверьте работу отчета. Обратите внимание на то, что некоторые типы диаграмм выглядят «некрасиво» (график) или не отображаются совсем (изометрическая непрерывная, изометрическая лента). Это связано с тем, что при использовании источника данных нет возможности использовать свойство диаграммы «АвтоТранспонирование» и нужно обрабатывать транспонирование диаграммы «вручную» (используя свойство «СерииВСтроках»). Таким образом, на примере этого отчета мы продемонстрировали как создавать запросы, используя конструктор запросов, и как использовать диаграмму для визуализации результата запроса.

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