Построение графиков с несколькими показателями на форме



Один из вариантов программного построения графиков на форме обработки.

Коллеги, доброго времени суток. 

На днях поступила задача отображения данных на диаграмме в форме обработки, а точнее создание онлайн-табло с графиками. При построении диаграммы с помощью СКД проблем не возникло. Поиски в Google и на форумах не увенчались успехом. Для того чтобы данную задачу решить на форме обработки было сделано следующее

На форме обработки создано поле диаграммы

В модуле формы написан следующий код

   Диаграмма = ЭлементыФормы.ДиаграммаПлан;

Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| РасчетнаяТаблица.ДатаПериода КАК ДатаПериода,
| РасчетнаяТаблица.ФактНарастающий КАК ФактНарастающий,
| РасчетнаяТаблица.Прогноз КАК Прогноз,
| РасчетнаяТаблица.ФактПоступлений КАК ФактПоступлений,
| РасчетнаяТаблица.ПланНаМесяц КАК ПланНаМесяц,
| РасчетнаяТаблица.План75 КАК План75,
| РасчетнаяТаблица.ПланНарастающий КАК ПланНарастающий,
| РасчетнаяТаблица.ПрогнозНарастающий КАК ПрогнозНарастающий,
| РасчетнаяТаблица.ВыполнениеПлана КАК ВыполнениеПлана,
| РасчетнаяТаблица.ВыполнениеПрогноза КАК ВыполнениеПрогноза
|ПОМЕСТИТЬ ТаблицаДляДиаграммы
|ИЗ
| &РасчетнаяТаблица КАК РасчетнаяТаблица
|;
|
|////////////////////////////////////////////////////////////////////////////////
|ВЫБРАТЬ
| ТаблицаДляДиаграммы.ДатаПериода КАК ДатаПериода,
| ТаблицаДляДиаграммы.ФактНарастающий КАК ФактНарастающий,
| ТаблицаДляДиаграммы.Прогноз КАК Прогноз,
| ТаблицаДляДиаграммы.ФактПоступлений КАК ФактПоступлений,
| ТаблицаДляДиаграммы.ПланНаМесяц КАК ПланНаМесяц,
| ТаблицаДляДиаграммы.План75 КАК План75,
| ТаблицаДляДиаграммы.ПланНарастающий КАК ПланНарастающий,
| ТаблицаДляДиаграммы.ПрогнозНарастающий КАК ПрогнозНарастающий,
| ТаблицаДляДиаграммы.ВыполнениеПлана КАК ВыполнениеПлана,
| ТаблицаДляДиаграммы.ВыполнениеПрогноза КАК ВыполнениеПрогноза
|ИЗ
| ТаблицаДляДиаграммы КАК ТаблицаДляДиаграммы
|ИТОГИ
| МАКСИМУМ(ФактНарастающий),
| СУММА(Прогноз),
| МАКСИМУМ(ФактПоступлений),
| СУММА(ПланНаМесяц),
| МАКСИМУМ(План75),
| МАКСИМУМ(ПланНарастающий),
| МАКСИМУМ(ПрогнозНарастающий),
| СУММА(ВыполнениеПлана),
| СУММА(ВыполнениеПрогноза)
|ПО
| ДатаПериода";
Запрос.УстановитьПараметр("РасчетнаяТаблица",РасчетнаяТаблица);

РезультатЗапроса = Запрос.Выполнить();

Диаграмма.Обновление = Ложь;
Диаграмма.Очистить();
Диаграмма.АвтоТранспонирование = Ложь;

Серия = Диаграмма.Серии.Добавить();
Серия2 = Диаграмма.Серии.Добавить();
Серия3 = Диаграмма.Серии.Добавить();
Серия4 = Диаграмма.Серии.Добавить();
Серия5 = Диаграмма.Серии.Добавить();


//Точка2 = Диаграмма.Точки.Добавить();
ВыборкаДатаПериода = РезультатЗапроса.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);

Пока ВыборкаДатаПериода.Следующий() Цикл
// Серия = Диаграмма.Серии.Добавить();
Точка = Диаграмма.УстановитьТочку(Формат(ВыборкаДатаПериода.ДатаПериода, "ДФ=dd.MM.yyyy"));

Диаграмма.УстановитьЗначение(Точка, Серия, ВыборкаДатаПериода.ФактНарастающий, );
Диаграмма.УстановитьЗначение(Точка, Серия2, ВыборкаДатаПериода.План75, );
Диаграмма.УстановитьЗначение(Точка, Серия3, ВыборкаДатаПериода.ПрогнозНарастающий, );
Диаграмма.УстановитьЗначение(Точка, Серия4, ВыборкаДатаПериода.ФактПоступлений, );
Диаграмма.УстановитьЗначение(Точка, Серия5, ВыборкаДатаПериода.ПланНарастающий, );
//Диаграмма.УстановитьЗначение(Точка, Серия6, ВыборкаДатаПериода.ПрогнозНарастающий, );
КонецЦикла;

Диаграмма.АвтоТранспонирование = Истина;
Диаграмма.Обновление = Истина;
Диаграмма.ОтображатьЛегенду=Ложь;


ЭлементыФормы.Надпись84.Заголовок ="Выполнение плана продаж за " + Формат(ДатаСреза, "ДФ=ММММ")+" месяц по состоянию на "+Формат(ТекущаяДата(), "ДФ=dd.MM.yyyy") + " процент выполнения " + выполнениеПлана;

В параметрах была передана таблица значений.  В итоге был получен желаемый результат.

Эта публикация является примером ее можно перестроить под свои задачи.

В связи с тем что сам давно искал решение данной задачи. Нашел и решил написать публикацию. 

Буду рад услышать отзывы так и критику в свой адрес. Прошу сильно не бить, если что-то не так написал.  

Спасибо за внимание.

Leave a Comment

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