Диаграммы в 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; 
ТекущаяДата = ПервыйДень; 

Пока ТекущаяДата <= МаксимальнаяДата Цикл
	Конец = НачалоНедели(ТекущаяДата); 	
	Начало = Конец - Выходные; 	
	ДГ.ИнтервалыФона.Добавить(Начало, Конец); 

	ТекущаяДата = ТекущаяДата + Неделя; 
КонецЦикла;          

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *