ДиаграммыКак заполнить диаграмму данными?Диаграмма = ЭлементыФормы.Диаграмма; // Очистить диаграмму, возможно ранее в нее уже выводились данные. Диаграмма.КоличествоСерий = 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; ТекущаяДата = ПервыйДень; Пока ТекущаяДата <= МаксимальнаяДата Цикл Конец = НачалоНедели(ТекущаяДата); Начало = Конец - Выходные; ДГ.ИнтервалыФона.Добавить(Начало, Конец); ТекущаяДата = ТекущаяДата + Неделя; КонецЦикла; |