Справочные материалы по 1С
Диаграммы в 1С 8.x
Как заполнить диаграмму данными?
Диаграмма = ЭлементыФормы.Диаграмма;
// Очистить диаграмму, возможно ранее в нее уже выводились данные.
Диаграмма.КоличествоСерий = 0;
Диаграмма.КоличествоТочек = 0;
// Количество серий будет ограничиваться (не все значения будут показываться).
Диаграмма.МаксимумСерий = МаксимумСерий.Ограничено;
Диаграмма.МаксимумСерийКоличество = 7;
Диаграмма.ВидПодписей = ВидПодписейКДиаграмме.Процент;
Диаграмма.ОбластьЗаголовка.Текст = "Обороты номенклатуры";
Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ
| ПродажиКомпанииОбороты.Номенклатура,
| СУММА(ПродажиКомпанииОбороты.КоличествоОборот) КАК КоличествоОборот
|ИЗ
| РегистрНакопления.Продажи.Обороты(, , , ) КАК ПродажиКомпанииОбороты
|СГРУППИРОВАТЬ ПО
| ПродажиКомпанииОбороты.Номенклатура";
Результат = Запрос.Выполнить();
// Запретить обновление диаграммы на время вывода данных.
Диаграмма.Обновление = Ложь;
// Установить единственную точку.
Диаграмма.КоличествоТочек = 1;
Диаграмма.Точки[0].Текст = "Количество";
Выборка = Результат.Выбрать();
Пока Выборка.Следующий() Цикл
// Количество серий, если бы не ограничивали зависело бы от результата запроса.
КоличествоСерий = Диаграмма.Серии.Количество();
Диаграмма.КоличествоСерий = КоличествоСерий + 1;
Диаграмма.Серии[КоличествоСерий].Текст = Выборка.Номенклатура;
// Установить значение "на пересечении" точки и серии.
// Первый параметр - 0 , так как в диаграмме только одна точка.
Диаграмма.УстановитьЗначение(0, КоличествоСерий, Выборка.КоличествоОборот);
КонецЦикла;
// Обновить диаграмму.
Диаграмма.Обновление = Истина;
Как заполнить данными измерительную диаграмму?
// Настроить свойства диаграммы.
Диаграмма = ЭлементыФормы.ДиаграммаПродажи;
Диаграмма.ТипДиаграммы = ТипДиаграммы.Измерительная;
Диаграмма.АвтоМаксимальноеЗначение = Ложь;
Диаграмма.МаксимальноеЗначение = 20000;
Диаграмма.АвтоМинимальноеЗначение = Ложь;
Диаграмма.МинимальноеЗначение = 0;
// Создать три полосы.
Полосы = Диаграмма.ПолосыИзмерительнойДиаграммы;
НоваяПолоса = Полосы.Добавить();
НоваяПолоса.Начало = 0;
НоваяПолоса.Конец = 1000;
НоваяПолоса.ЦветФона = WebЦвета.Красный;
НоваяПолоса = Полосы.Добавить();
НоваяПолоса.Начало = 1000;
НоваяПолоса.Конец = 5000;
НоваяПолоса.ЦветФона = WebЦвета.Желтый;
НоваяПолоса = Полосы.Добавить();
НоваяПолоса.Начало = 5000;
НоваяПолоса.Конец = 20000;
НоваяПолоса.ЦветФона = WebЦвета.Зеленый;
Запрос = Новый Запрос("
|ВЫБРАТЬ
| ПродажиОбороты.Период,
| ПродажиОбороты.СтоимостьОборот
|ИЗ
| РегистрНакопления.Продажи.Обороты(&ДатаНачала, &ДатаОкончания, День, ) КАК ПродажиОбороты");
Запрос.УстановитьПараметр("ДатаНачала", '2004.08.10 00:00:00');
Запрос.УстановитьПараметр("ДатаОкончания", '2004.08.30 23:59:59');
ЭлементыФормы.ДиаграммаПродажи.ИсточникДанных = Запрос.Выполнить().Выгрузить();
Как вывести результат запроса в сводную диаграмму?
Запрос = Новый Запрос( "ВЫБРАТЬ
| ТоварыНаСкладахОстаткиИОбороты.Склад КАК Склад,
| ТоварыНаСкладахОстаткиИОбороты.Склад.Представление,
| ТоварыНаСкладахОстаткиИОбороты.Номенклатура КАК Номенклатура,
| ТоварыНаСкладахОстаткиИОбороты.Номенклатура.Представление,
| СУММА(ТоварыНаСкладахОстаткиИОбороты.КоличествоПриход) КАК КоличествоПриход,
| СУММА(ТоварыНаСкладахОстаткиИОбороты.КоличествоОборот) КАК КоличествоОборот,
| СУММА(ТоварыНаСкладахОстаткиИОбороты.КоличествоРасход) КАК КоличествоРасход
|ИЗ
| РегистрНакопления.ТоварыНаСкладах.ОстаткиИОбороты КАК ТоварыНаСкладахОстаткиИОбороты
|СГРУППИРОВАТЬ ПО
| ТоварыНаСкладахОстаткиИОбороты.Склад,
| ТоварыНаСкладахОстаткиИОбороты.Номенклатура,
| ТоварыНаСкладахОстаткиИОбороты.Склад.Представление,
| ТоварыНаСкладахОстаткиИОбороты.Номенклатура.Представление
|ИТОГИ СУММА(КоличествоПриход), СУММА(КоличествоОборот), СУММА(КоличествоРасход) ПО
| ОБЩИЕ,
| Номенклатура ИЕРАРХИЯ,
| Склад ИЕРАРХИЯ");
Диаграмма = ЭлементыФормы.СводнаяДиаграмма1;
Диаграмма.ОбластьЗаголовка.Текст = "Приход товаров";
Диаграмма.ИсточникДанных = Запрос.Выполнить();
Диаграмма.Серии.Добавить("Номенклатура");
Диаграмма.Точки.Добавить("Склад");
Диаграмма.Ресурсы.Добавить("КоличествоПриход");
Как заполнить диаграмму Ганта данными?
ДГ = ЭлементыФормы.ДГ;
// Установить заголовок диаграммы.
ДГ.ОбластьЗаголовка.Текст = "График дежурств";
// Интервал будем определять самостоятельно.
ДГ.АвтоОпределениеПолногоИнтервала = Ложь;
// Установить интервал.
ДГ.УстановитьПолныйИнтервал(НачалоМесяца(ТекущаяДата()), КонецМесяца(ТекущаяДата()));
// В диаграмме будет две точки - сотрудники Петров и Сидоров...
ТочкаП = ДГ.УстановитьТочку("Петров");
ТочкаС = ДГ.УстановитьТочку("Сидоров");
// и две серии - дежурство на вахте и дежурство в центральном офисе.
СерияНаВахте = ДГ.УстановитьСерию("На вахте");
СерияВЦентре = ДГ.УстановитьСерию("В центральном офисе");
// Задать цвета серий, отличные от цвета по умолчанию.
СерияНаВахте.Цвет = WebЦвета.Синий;
СерияВЦентре.Цвет = WebЦвета.СветлоЖелтый;
ПервыйДень = НачалоМесяца(ТекущаяДата());
// Получить значение диаграммы - дежурство Петрова на вахте.
Значение = ДГ.ПолучитьЗначение(ТочкаП, СерияНаВахте);
// В значении определить новый интервал.
Интервал = Значение.Добавить();
Интервал.Текст = "Работает на вахте";
// Определить границы интервала.
Интервал.Начало = ПервыйДень;
Интервал.Конец = ПервыйДень + 10 * 24 * 60 * 60;
// Получить значение диаграммы - дежурство Петрова в центральном офисе.
Значение = ДГ.ПолучитьЗначение(ТочкаП, СерияВЦентре);
Интервал = Значение.Добавить();
Интервал.Текст = "Работает в центральном офисе";
Интервал.Начало = ПервыйДень + 14 * 24 * 60 * 60;
Интервал.Конец = ПервыйДень + 24 * 24 * 60 * 60;
// Получить значение диаграммы - дежурство Сидорова на вахте.
Значение = ДГ.ПолучитьЗначение(ТочкаС, СерияНаВахте);
Интервал = Значение.Добавить();
Интервал.Текст = "Работает на вахте";
Интервал.Начало = ПервыйДень + 5 * 24 * 60 * 60;
Интервал.Конец = ПервыйДень + 15 * 24 * 60 * 60;
// Получить значение диаграммы - дежурство Сидорова в центральном офисе.
Значение = ДГ.ПолучитьЗначение(ТочкаС, СерияВЦентре);
Интервал = Значение.Добавить();
Интервал.Текст = "Работает в центральном офисе";
Интервал.Начало = ПервыйДень + 21 * 24 * 60 * 60;
Интервал.Конец = ПервыйДень + 25 * 24 * 60 * 60;
Как связать интервалы диаграммы Ганта?
// Получить значение диаграммы - дежурство Петрова на вахте.
Значение = ДГ.ПолучитьЗначение(ТочкаП, СерияНаВахте);
// В значении определить новый интервал.
Интервал = Значение.Добавить();
// Запомнить интервал начала связи.
СвязьИнтервалНачало = Интервал;
// Получить значение диаграммы - дежурство Петрова в центральном офисе.
Значение = ДГ.ПолучитьЗначение(ТочкаП, СерияВЦентре);
Интервал = Значение.Добавить();
// Запомнить интервал окончания связи.
СвязьИнтервалКонец = Интервал;
// Связать два интервала.
Связь = СвязьИнтервалНачало.Добавить(СвязьИнтервалКонец);
Связь.Цвет = WebЦвета.Синий;
// Получить значение диаграммы - дежурство Сидорова на вахте.
Значение = ДГ.ПолучитьЗначение(ТочкаС, СерияНаВахте);
Интервал = Значение.Добавить();
СвязьИнтервалНачало = Интервал;
// Получить значение диаграммы - дежурство Сидорова в центральном офисе.
Значение = ДГ.ПолучитьЗначение(ТочкаС, СерияВЦентре);
Интервал = Значение.Добавить();
СвязьИнтервалКонец = Интервал;
// Связать два интервала.
Связь = СвязьИнтервалНачало.Добавить(СвязьИнтервалКонец);
Связь.Цвет = WebЦвета.Синий;
Как обработать интерактивное изменение интервалов диаграммы Ганта?
// Получить значение диаграммы - дежурство Петрова на вахте.
Значение = ДГ.ПолучитьЗначение(ТочкаП, СерияНаВахте);
// Разрешить интерактивное редактирование интервалов.
Значение.Редактирование = Истина;
// Получить значение диаграммы - дежурство Петрова в центральном офисе.
Значение = ДГ.ПолучитьЗначение(ТочкаП, СерияВЦентре);
Значение.Редактирование = Истина;
// Получить значение диаграммы - дежурство Сидорова на вахте.
Значение = ДГ.ПолучитьЗначение(ТочкаС, СерияНаВахте);
Значение.Редактирование = Истина;
// Получить значение диаграммы - дежурство Сидорова в центральном офисе.
Значение = ДГ.ПолучитьЗначение(ТочкаС, СерияВЦентре);
Значение.Редактирование = Истина;
Процедура ДГПриОкончанииРедактированияИнтервала(Элемент, Интервал, Отмена)
// Сгладить погрешности интерактивного перетаскивания -
// округлить интервал по границе дня.
Интервал.Начало = Интервал.Начало + 3600 * 12;
Интервал.Начало = НачалоДня(Интервал.Начало);
Интервал.Конец = Интервал.Конец + 3600 * 12;
Интервал.Конец = НачалоДня(Интервал.Конец);
// Скорректировать цвета связей.
Для Каждого Связь Из Интервал Цикл
Если Связь.Начало.Конец <= Связь.Конец.Начало Тогда
Связь.Цвет = WebЦвета.Синий;
Иначе // есть пересечение интервалов - выделить красным
Связь.Цвет = WebЦвета.Красный;
КонецЕсли;
КонецЦикла;
КонецПроцедуры
Как разместить непериодические метки в диаграмме Ганта?
// Установить непериодические метки - контроль дежурства.
// Создать отдельный элемент шкалы времени (для более наглядного отображения)
ЭлементМеток = ДГ.ОбластьПостроения.ШкалаВремени.Элементы.Добавить();
ЭлементМеток.Единица = ТипЕдиницыШкалыВремени.День;
// Скрыть периодические метки добавленного элемента.
ЭлементМеток.ОтображатьПериодическиеМетки = Ложь;
// Установить метку - первая проверка - 10 часов утра 9 числа.
ПерваяПроверка = ПервыйДень + 8 * 24 * 60 * 60 + 10 * 60 * 60;
Метка = ЭлементМеток.Метки.Добавить(ПерваяПроверка);
Метка.Текст = "Проверка";
Метка.ЦветТекста = WebЦвета.Красный;
Метка.ЦветЛинии = Метка.ЦветТекста;
// Установить метку - вторая проверка - 8 часов вечера 23 числа.
ВтораяПроверка = ПервыйДень + 22 * 24 * 60 * 60 + 20 * 60 * 60;
Метка = ЭлементМеток.Метки.Добавить(ВтораяПроверка);
Метка.Текст = "Проверка";
Метка.ЦветТекста = WebЦвета.Красный;
Метка.ЦветЛинии = Метка.ЦветТекста;
Как выделить некоторые интервалы фона диаграммы Ганта?
// Выделить выходные дни другим цветом фона.
Неделя = 3600 * 24 * 7;
Выходные = 3600 * 48;
МаксимальнаяДата = ПервыйДень + Неделя * 4;
ТекущаяДата = ПервыйДень;
Пока ТекущаяДата <= МаксимальнаяДата Цикл
Конец = НачалоНедели(ТекущаяДата);
Начало = Конец - Выходные;
ДГ.ИнтервалыФона.Добавить(Начало, Конец);
ТекущаяДата = ТекущаяДата + Неделя;
КонецЦикла;