Диаграмма Диаграмма является элементом управления, предназначенным ...

advertisement
Диаграмма
Диаграмма является элементом управления, предназначенным для размещения в таблицах и формах
диаграмм и графиков различного вида системы 1С: Предприятие.
Логически диаграмма является совокупностью точек, серий и значений серий в точке (рис. 5.53).
Рис. 5.53. Пример диаграммы
Как правило, в качестве точек используются моменты или объекты, для которых мы получаем
значения характеристик, а в качестве серий – характеристики, значения которых нас интересуют.
Диаграмма как объект встроенного языка имеет три области, которые позволяют управлять
оформлением диаграммы: область построения, область заголовка и область легенды (рис.5.54).
Рис. 5.54. Области диаграммы
Создание отчета Рейтинг клиентов
Создадим в конфигураторе новый объект конфигурации Отчет. Назовем его РейтингКлиентов.
Создадим набор данных – запрос, вызовем конструктор запроса и выберем виртуальную таблицу
регистра накопления Продажи.Обороты и из нее одно поле – ПродажиОбороты.Клиент.
Затем добавим новое поле и при помощи построителя выражений определим его как разность между
выручкой и стоимостью (рис. 5.55).
Рис. 5.55. Редактор произвольного выражения поля
В результате список выбранных полей будет иметь следующий вид (рис. 5.56):
Рис. 5.56. Выбранные поля
На закладке Объединения/Псевдонимы укажем, что вычисляемое поле будет иметь псевдоним Доход
(рис. 5.57).
Рис. 5.57. Объединения/Псевдонимы
На закладке Порядок укажем, что строки результата нужно упорядочивать по убыванию значения поля
Доход.
который сформировал конструктор запроса (листинг 5.14):
Листинг 5.14. Текст запроса
ВЫБРАТЬ
ПродажиОбороты.Клиент,
ПродажиОбороты.ВыручкаОборот – ПродажиОбороты.СтоимостьОборот КАК Доход
ИЗ
РегистрНакопления.Продажи.Обороты КАК ПродажиОбороты
УПОРЯДОЧИТЬ ПО
Доход УБЫВ
поле Доход является результатом вычисления выражения (листинг 5.15).
Теперь добавим поле Доход в ресурсы схемы компоновки и перейдем на закладке Настройки создаем
структуру отчета.
добавляем в структуру отчета диаграмму (рис. 5.58).
Рис. 5.58. Структура отчета
В точки диаграммы добавим группировку по полю Клиент. Серии диаграммы оставим без изменений.
на закладке Выбранные поля и выберем поле Доход для вывода в отчет. Структура отчета должна
принять следующий вид (рис. 5.59):
Рис. 5.59. Структура отчета и настройки диаграммы
На закладке Другие настройки зададим заголовок отчета – Рейтинг клиентов, а также выберем тип
диаграммы – Круговая объемная.
в режиме отладки и откроем отчет Рейтинг клиентов (рис. 5.60).
Рис. 5.60. Круговая объемная диаграмма в отчете
Откроем настройки отчета и изменим тип диаграммы на Измерительная. Заново сформируем отчет
(рис. 5.61).
Рис. 5.61. Измерительная диаграмма в отчете
На примере этого отчета мы продемонстрировали, как можно использовать различные виды диаграмм
для визуализации данных отчета.
Создание отчета Диаграмма начислений
Создадим новый объект конфигурации Отчет и назовем его ДиаграммаНачислений. Создадим основную
форму отчета и поместим в нее элемент управления диаграмма Ганта с именем ДиаграммаГанта
(рис. 10.24).
Рис. 10.24. Форма отчета ДиаграммаНачислений
Откроем модуль формы отчета и в обработчик события Нажатие кнопки Сформировать вставим
заготовку запроса (листинг 10.10).
Листинг 10.10. Обработчик события Нажатие кнопки «Сформировать»
Процедура КнопкаСформироватьНажатие(Элемент)
Запрос = Новый Запрос;
Запрос.Текст
=
;
КонецПроцедуры
Откроем
конструктор
запроса
и
выберем
виртуальную
таблицу
регистра
расчета
Начисления.ФактическийПериодДействия. Из этой таблицы выберем следующие поля (рис. 10.25):

Сотрудник;

ВидРасчета;

ПериодДействияНачало;

ПериодДействияКонец;

Результат;

Регистратор;

Регистратор.Представление.
Рис. 10.25. Выбранные поля
Все, запрос готов. Теперь нажмем OK и после текста запроса добавим в процедуру следующий текст
(листинг 10.11):
Листинг 10.11 Изменение обработчика события Нажатие кнопки
Процедура КнопкаСформироватьНажатие(Элемент)
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
|
НачисленияФактическийПериодДействия.Сотрудник,
|
НачисленияФактическийПериодДействия.ВидРасчета,
|
НачисленияФактическийПериодДействия.ПериодДействияНачало,
|
НачисленияФактическийПериодДействия.ПериодДействияКонец,
|
НачисленияФактическийПериодДействия.Результат,
|
НачисленияФактическийПериодДействия.Регистратор,
|
НачисленияФактическийПериодДействия.Регистратор.Представление
|ИЗ
| РегистрРасчета.Начисления.ФактическийПериодДействия КАК
НачисленияФактическийПериодДействия";
ВыборкаРезультата = Запрос.Выполнить().Выбрать();
Диаграмма = ЭлементыФормы.ДиаграммаГанта;
// Запретить обновление диаграммы
Диаграмма.Обновление = Ложь;
Диаграмма.Очистить();
Диаграмма.ОтображатьЗаголовок = Ложь;
// Заполнить диаграмму
Пока ВыборкаРезультата.Следующий() цикл
// Получить серию, точку и значение для них
ТекущаяСерия = Диаграмма.УстановитьСерию(ВыборкаРезультата.ВидРасчета,
ВыборкаРезультата.ВидРасчета);
ТекущаяТочка = Диаграмма.УстановитьТочку(ВыборкаРезультата.Сотрудник,
ВыборкаРезультата.Сотрудник);
ТекущееЗначение = Диаграмма.ПолучитьЗначение(ТекущаяТочка, ТекущаяСерия);
// Создать нужные нам интервалы в значении
ТекущийИнтервал = ТекущееЗначение.Добавить();
ТекущийИнтервал.Начало = ВыборкаРезультата.ПериодДействияНачало;
ТекущийИнтервал.Конец = ВыборкаРезультата.ПериодДействияКонец;
ТекущийИнтервал.Текст = ВыборкаРезультата.РегистраторПредставление;
ТекущийИнтервал.Расшифровка = ВыборкаРезультата.Регистратор;
КонецЦикла;
// Раскрасить серии своими цветами
Для Каждого Серия из Диаграмма.Серии Цикл
Если Серия.Значение = ПланыВидовРасчета.ОсновныеНачисления.Оклад Тогда
Серия.Цвет = WEBЦвета.Желтый;
ИначеЕсли Серия.Значение = ПланыВидовРасчета.ОсновныеНачисления.Премия Тогда
Серия.Цвет = WEBЦвета.Зеленый;
ИначеЕсли Серия.Значение = ПланыВидовРасчета.ОсновныеНачисления.Невыход Тогда
Серия.Цвет = WEBЦвета.Красный;
КонецЕсли;
КонецЦикла;
// Разрешить обновление диаграммы
Диаграмма.Обновление = Истина;
КонецПроцедуры
Сначала в переменной Диаграмма мы сохраняем расположенную в форме диаграмму Ганта и запрещаем
обновление диаграммы на то время, пока мы будем заполнять ее данными. Это нужно для того, чтобы
в процессе заполнения не выполнялись пересчеты при каждом изменении данных диаграммы. После
окончания заполнения диаграммы мы разрешим обновление, и все пересчеты будут выполнены один
раз.
Затем в цикле по выборке запроса мы заполняем диаграмму. Сначала, используя методы
УстановитьСерию() и УстановитьТочку(), мы получаем либо существующие, либо новые точку и серию.
Точки и серии однозначно идентифицируются своими значениями, в качестве которых мы используем
сотрудника и вид расчета из результата запроса.
После того как точка и серия получены, с помощью метода ПолучитьЗначение() мы получаем
соответствующее им значение диаграммы.
Затем мы добавляем в значение диаграммы новый интервал, задаем его начало и конец, текст
интервала, который будет показываться во всплывающей подсказке, и задаем расшифровку
интервала, которая будет выполняться при двойном щелчке мышью на этом интервале.
После того как все значения диаграммы сформированы, мы раскрашиваем серии своими цветами.
Серии диаграммы представляют собой коллекцию значений, которую мы перебираем при помощи
конструкции Для Каждого … Цикл.
В завершение создания нашего отчета настроим ось времени для диаграммы Ганта. Для этого
используем команду контекстного меню Настройка и на закладке Шкала времени зададим Формат дня
как День месяца. После этого нажмем кнопку выбора в колонке Формат (рис.10.26).
Рис. 10.26. Настройка диаграммы Ганта
В открывшемся окне конструктора форматной строки (рис. 10.27) перейдем на закладку Дата,
установим флаг Формат даты и зададим его как d. В нашем случае на оси времени диаграммы Ганта
будут выводиться только числа месяцев.
Рис. 10.27. Настройка формата даты
Нажмем ОK и закроем окно настройки диаграммы Ганта.
Запустим 1С:Предприятие в режиме отладки и посмотрим на результат работы отчета (рис. 10.28).
Рис. 10.28. Отчет Диаграмма начислений
А теперь посмотрим, как выглядит механизм вытеснения по периоду действия "в действии". Откроем
документ Начисления сотрудникам №3 и вместо одного прогула с 1 по 10 число зададим Гусакову два
прогула: с 3 по 7 число и с 12 по 15 число.
Проведем документ и снова нажмем Сформировать в нашем отчете (рис. 10.29).
Рис. 10.29. Отчет Диаграмма начислений
Теперь вы наглядно видите, как записи вида расчета Невыход вытеснили по периоду действия запись
расчета Оклад, изменив ее фактический период действия.
Следует отметить, что существует также возможность интерактивной настройки параметров диаграммы
Ганта, доступная через пункт контекстного меню Настройка.
При создании диаграммы вручную (например, мы помещаем на форму элемент управления
Диаграмма), мы должны написать код построения диаграммы.
Для этого надо:
- определить серии и точки (коллекции диаграммы), например, с помощью методов КоличествоСерий
или УтановитьСерию;
- установить значения для построения диаграммы по точкам и по сериям (указывается номер серии и
номер точки) (метод УстановитьЗначение элемента управления Диаграмма).
Например, с помощью запроса или другим способом сформирована таблица, которая содержит
информацию о товаре (столбец Товар) и его количестве на складе (Количество).
…
ЭлементыФормы.Диаграмма1.КоличествоТочек=1;
ЭлементыФормы.Диаграмма1.ОтображатьЗаголовок=Истина;
ЭлементыФормы.Диаграмма1.ОбластьЗаголовка.Текст=”Остатки товаров на складе”;
Номер=1;
// обрабатываем каждый товар, т.е. строку таблицы
Для каждой стр из Табл цикл
// добавляем новый товар в коллекцию серий диаграммы
ЭлементыФормы.Диаграмма1.Серии.Добавить(стр.Товар.Наименование);
// можно задать разные характеристики серии, например, цвет
ЭлементыФормы.Диаграмма1.Серии[Номер].Цвет = Новый Цвет(255, 0, (номер+1)*10);
// установка значения в серию диаграммы
// первый параметр - номер точки, второй – номер серии
ЭлементыФормы.Диаграмма1.УстановитьЗначение(0, Номер, стр.Количество);
Номер=Номер+1;
КонецЦикла;
Download