Диаграммы
и Как заполнить диаграмму данными?

Код 1c:
Диаграмма = ЭлементыФормы.Диаграмма; 
 
// Очистить диаграмму, возможно ранее в нее уже выводились данные. 
 
Диаграмма.КоличествоСерий = 0; 
Диаграмма.КоличествоТочек = 0; 
 
// Количество серий будет ограничиваться (не все значения будут показываться). 
 
Диаграмма.МаксимумСерий = МаксимумСерий.Ограничено; 
Диаграмма.МаксимумСерийКоличество = 7; 
Диаграмма.ВидПодписей = ВидПодписейКДиаграмме.Процент; 
Диаграмма.ОбластьЗаголовка.Текст = "Обороты номенклатуры"; 
 
Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ 
|    ПродажиКомпанииОбороты.Номенклатура, 
|    СУММА(ПродажиКомпанииОбороты.КоличествоОборот) КАК КоличествоОборот 
|ИЗ 
|    РегистрНакопления.Продажи.Обороты(, , , ) КАК ПродажиКомпанииОбороты 
|СГРУППИРОВАТЬ ПО 
|    ПродажиКомпанииОбороты.Номенклатура"; 
 
Результат = Запрос.Выполнить(); 
 
// Запретить обновление диаграммы на время вывода данных. 
 
Диаграмма.Обновление = Ложь; 
 
// Установить единственную точку. 
 
Диаграмма.КоличествоТочек = 1; 
Диаграмма.Точки[0].Текст = "Количество"; 
Выборка = Результат.Выбрать(); 
 
Пока Выборка.Следующий() Цикл 
 
    // Количество серий, если бы не ограничивали зависело бы от результата запроса. 
 
    КоличествоСерий = Диаграмма.Серии.Количество(); 
    Диаграмма.КоличествоСерий = КоличествоСерий + 1; 
    Диаграмма.Серии[КоличествоСерий].Текст = Выборка.Номенклатура; 
 
    // Установить значение "на пересечении" точки и серии. 
 
    // Первый параметр - 0 , так как в диаграмме только одна точка. 
 
    Диаграмма.УстановитьЗначение(0, КоличествоСерий, Выборка.КоличествоОборот); 
 
КонецЦикла; 
 
// Обновить диаграмму. 
 
Диаграмма.Обновление = Истина;

Как заполнить данными измерительную диаграмму?

Код 1c:
// Настроить свойства диаграммы. 
 
Диаграмма = ЭлементыФормы.ДиаграммаПродажи; 
Диаграмма.ТипДиаграммы = ТипДиаграммы.Измерительная; 
Диаграмма.АвтоМаксимальноеЗначение = Ложь; 
Диаграмма.МаксимальноеЗначение = 20000; 
Диаграмма.АвтоМинимальноеЗначение = Ложь; 
Диаграмма.МинимальноеЗначение = 0; 
 
// Создать три полосы. 
 
Полосы = Диаграмма.ПолосыИзмерительнойДиаграммы; 
НоваяПолоса = Полосы.Добавить(); 
НоваяПолоса.Начало = 0; 
НоваяПолоса.Конец = 1000; 
НоваяПолоса.ЦветФона = WebЦвета.Красный; 
 
НоваяПолоса = Полосы.Добавить(); 
НоваяПолоса.Начало = 1000; 
НоваяПолоса.Конец = 5000; 
НоваяПолоса.ЦветФона = WebЦвета.Желтый; 
 
НоваяПолоса = Полосы.Добавить(); 
НоваяПолоса.Начало = 5000; 
НоваяПолоса.Конец = 20000; 
НоваяПолоса.ЦветФона = WebЦвета.Зеленый; 
 
Запрос = Новый Запрос(" 
|ВЫБРАТЬ 
|    ПродажиОбороты.Период, 
|    ПродажиОбороты.СтоимостьОборот 
|ИЗ 
|    РегистрНакопления.Продажи.Обороты(&ДатаНачала, &ДатаОкончания, День, ) КАК ПродажиОбороты"); 
 
Запрос.УстановитьПараметр("ДатаНачала", '2004.08.10 00:00:00'); 
Запрос.УстановитьПараметр("ДатаОкончания", '2004.08.30 23:59:59'); 
 
ЭлементыФормы.ДиаграммаПродажи.ИсточникДанных = Запрос.Выполнить().Выгрузить();

и Как вывести результат запроса в сводную диаграмму?

Код 1c:
Запрос = Новый Запрос( "ВЫБРАТЬ 
|    ТоварыНаСкладахОстаткиИОбороты.Склад КАК Склад, 
|    ТоварыНаСкладахОстаткиИОбороты.Склад.Представление, 
|    ТоварыНаСкладахОстаткиИОбороты.Номенклатура КАК Номенклатура, 
|    ТоварыНаСкладахОстаткиИОбороты.Номенклатура.Представление, 
|    СУММА(ТоварыНаСкладахОстаткиИОбороты.КоличествоПриход) КАК КоличествоПриход, 
|    СУММА(ТоварыНаСкладахОстаткиИОбороты.КоличествоОборот) КАК КоличествоОборот, 
|    СУММА(ТоварыНаСкладахОстаткиИОбороты.КоличествоРасход) КАК КоличествоРасход 
|ИЗ 
|    РегистрНакопления.ТоварыНаСкладах.ОстаткиИОбороты КАК ТоварыНаСкладахОстаткиИОбороты 
|СГРУППИРОВАТЬ ПО 
|    ТоварыНаСкладахОстаткиИОбороты.Склад, 
|    ТоварыНаСкладахОстаткиИОбороты.Номенклатура, 
|    ТоварыНаСкладахОстаткиИОбороты.Склад.Представление, 
|    ТоварыНаСкладахОстаткиИОбороты.Номенклатура.Представление 
|ИТОГИ СУММА(КоличествоПриход), СУММА(КоличествоОборот), СУММА(КоличествоРасход) ПО 
|    ОБЩИЕ, 
|    Номенклатура ИЕРАРХИЯ, 
|    Склад ИЕРАРХИЯ"); 
 
Диаграмма = ЭлементыФормы.СводнаяДиаграмма1; 
Диаграмма.ОбластьЗаголовка.Текст = "Приход товаров"; 
Диаграмма.ИсточникДанных = Запрос.Выполнить(); 
 
Диаграмма.Серии.Добавить("Номенклатура"); 
Диаграмма.Точки.Добавить("Склад"); 
Диаграмма.Ресурсы.Добавить("КоличествоПриход");
и Как заполнить диаграмму Ганта данными?
Код 1c:
ДГ = ЭлементыФормы.ДГ; 
 
// Установить заголовок диаграммы. 
 
ДГ.ОбластьЗаголовка.Текст = "График дежурств"; 
 
// Интервал будем определять самостоятельно. 
 
ДГ.АвтоОпределениеПолногоИнтервала = Ложь; 
 
// Установить интервал. 
 
ДГ.УстановитьПолныйИнтервал(НачалоМесяца(ТекущаяДата()), КонецМесяца(ТекущаяДата())); 
 
// В диаграмме будет две точки - сотрудники Петров и Сидоров... 
 
ТочкаП = ДГ.УстановитьТочку("Петров"); 
ТочкаС = ДГ.УстановитьТочку("Сидоров"); 
 
// и две серии - дежурство на вахте и дежурство в центральном офисе. 
 
СерияНаВахте = ДГ.УстановитьСерию("На вахте"); 
СерияВЦентре = ДГ.УстановитьСерию("В центральном офисе"); 
 
// Задать цвета серий, отличные от цвета по умолчанию. 
 
СерияНаВахте.Цвет = 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;

Как связать интервалы диаграммы Ганта?

Код 1c:
 // Получить значение диаграммы - дежурство Петрова на вахте. 
 
Значение = ДГ.ПолучитьЗначение(ТочкаП, СерияНаВахте); 
 
// В значении определить новый интервал. 
 
Интервал = Значение.Добавить(); 
 
// Запомнить интервал начала связи. 
 
СвязьИнтервалНачало = Интервал; 
 
// Получить значение диаграммы - дежурство Петрова в центральном офисе. 
 
Значение = ДГ.ПолучитьЗначение(ТочкаП, СерияВЦентре); 
Интервал = Значение.Добавить(); 
 
// Запомнить интервал окончания связи. 
 
СвязьИнтервалКонец = Интервал;  
 
// Связать два интервала. 
 
Связь = СвязьИнтервалНачало.Добавить(СвязьИнтервалКонец); 
Связь.Цвет = WebЦвета.Синий; 
 
// Получить значение диаграммы - дежурство Сидорова на вахте. 
 
Значение = ДГ.ПолучитьЗначение(ТочкаС, СерияНаВахте); 
Интервал = Значение.Добавить(); 
СвязьИнтервалНачало = Интервал;  
 
// Получить значение диаграммы - дежурство Сидорова в центральном офисе. 
 
Значение = ДГ.ПолучитьЗначение(ТочкаС, СерияВЦентре); 
Интервал = Значение.Добавить(); 
СвязьИнтервалКонец = Интервал; 
 
// Связать два интервала. 
 
Связь = СвязьИнтервалНачало.Добавить(СвязьИнтервалКонец); 
Связь.Цвет = WebЦвета.Синий; 
 
Как обработать интерактивное изменение интервалов диаграммы Ганта?
 
// Получить значение диаграммы - дежурство Петрова на вахте. 
 
Значение = ДГ.ПолучитьЗначение(ТочкаП, СерияНаВахте); 
 
// Разрешить интерактивное редактирование интервалов. 
 
Значение.Редактирование = Истина; 
 
// Получить значение диаграммы - дежурство Петрова в центральном офисе. 
 
Значение = ДГ.ПолучитьЗначение(ТочкаП, СерияВЦентре); 
Значение.Редактирование = Истина; 
 
// Получить значение диаграммы - дежурство Сидорова на вахте. 
 
Значение = ДГ.ПолучитьЗначение(ТочкаС, СерияНаВахте); 
Значение.Редактирование = Истина; 
 
// Получить значение диаграммы - дежурство Сидорова в центральном офисе. 
 
Значение = ДГ.ПолучитьЗначение(ТочкаС, СерияВЦентре); 
Значение.Редактирование = Истина; 
 
Процедура ДГПриОкончанииРедактированияИнтервала(Элемент, Интервал, Отмена) 
 
// Сгладить погрешности интерактивного перетаскивания - 
 
// округлить интервал по границе дня. 
 
Интервал.Начало = Интервал.Начало + 3600 * 12; 
Интервал.Начало = НачалоДня(Интервал.Начало); 
Интервал.Конец = Интервал.Конец + 3600 * 12; 
Интервал.Конец = НачалоДня(Интервал.Конец); 
 
// Скорректировать цвета связей. 
 
Для Каждого Связь Из Интервал Цикл 
    Если Связь.Начало.Конец <= Связь.Конец.Начало Тогда 
        Связь.Цвет = WebЦвета.Синий; 
    Иначе // есть пересечение интервалов - выделить красным 
 
        Связь.Цвет = WebЦвета.Красный; 
    КонецЕсли; 
КонецЦикла; 
 
КонецПроцедуры

Как разместить непериодические метки в диаграмме Ганта?

Код 1c:
// Установить непериодические метки - контроль дежурства. 
 
 
// Создать отдельный элемент шкалы времени (для более наглядного отображения) 
 
ЭлементМеток = ДГ.ОбластьПостроения.ШкалаВремени.Элементы.Добавить(); 
ЭлементМеток.Единица = ТипЕдиницыШкалыВремени.День; 
 
// Скрыть периодические метки добавленного элемента. 
 
ЭлементМеток.ОтображатьПериодическиеМетки = Ложь; 
 
// Установить метку - первая проверка - 10 часов утра 9 числа. 
 
ПерваяПроверка = ПервыйДень + 8 * 24 * 60 * 60 + 10 * 60 * 60; 
Метка = ЭлементМеток.Метки.Добавить(ПерваяПроверка); 
Метка.Текст = "Проверка"; 
Метка.ЦветТекста = WebЦвета.Красный; 
Метка.ЦветЛинии = Метка.ЦветТекста; 
 
// Установить метку - вторая проверка - 8 часов вечера 23 числа. 
 
ВтораяПроверка = ПервыйДень + 22 * 24 * 60 * 60 + 20 * 60 * 60; 
Метка = ЭлементМеток.Метки.Добавить(ВтораяПроверка); 
Метка.Текст = "Проверка"; 
Метка.ЦветТекста = WebЦвета.Красный; 
Метка.ЦветЛинии = Метка.ЦветТекста;

Как выделить некоторые интервалы фона диаграммы Ганта?

Код 1c:
// Выделить выходные дни другим цветом фона. 
 
Неделя = 3600 * 24 * 7; 
Выходные = 3600 * 48; 
МаксимальнаяДата = ПервыйДень + Неделя * 4; 
ТекущаяДата = ПервыйДень; 
 
Пока ТекущаяДата <= МаксимальнаяДата Цикл
    Конец = НачалоНедели(ТекущаяДата);     
    Начало = Конец - Выходные;     
    ДГ.ИнтервалыФона.Добавить(Начало, Конец); 
 
    ТекущаяДата = ТекущаяДата + Неделя; 
КонецЦикла;