Все об 1С8 - просто и доступно

Добавить в Избранное  Сделать Стартовой  Написать письмо

Главная Статьи Вопрос-ответ Экспресс-справочник Гостевая книга
Статьи по 1С

Размещение диаграммы на управляемой форме

Размещение диаграммы на управляемой форме требуется не часто, но все же случается необходимость добавить диаграмму на управляемую форму. Самый тривиальный случай потребности добавить диаграмму на управляемую форму это обработка Монитор руководителя в конфигурации 1С: Бухгалтерия предприятия 2.0. Также могут возникнуть и другие задачи, которые потребуют размещения диаграммы на управляемой форме. Пример решения такой задачи приводится в настоящей статье.
Итак, как добавить диаграмму на управляемую форму? Задачу можно решить через добавление реквизита обработки типа Диаграмма. Или добавить такой реквизит на форму обработки. В первом случае проще получить данные для заполнения диаграммы, поскольку процесс сбора данных и помещение в реквизит диаграммы происходит на стороне сервера. Но в этом случае настройку отображения диаграммы придется выполнять программно, во втором же варианте больше визуальных средств для настройки диаграммы. Здесь будет приведено решение обоими вариантами.
Первым делом открываем конфигуратор и создаем новую внешнюю обработку.
Назовем ее ДиаграммаНаУправляемойФорме. Добавим реквизит ДиаграммаПример, тип выберем Диаграмма. Для иллюстрации примера создадим табличную часть ТЗДляПримера, в ней будет три реквизита - ДатаДанных(Дата), РасчетныйСчет(Число 15,2), Касса(Число 15,2). Эту табличную часть будем заполнять данными для примера в процедуре ПриСозданииНаСервере. В итоге получается следующее:

Создание обработки для добавления диаграммы на управляемую форму
Добавим форму. На ней разместим элекменты формы ТЗДляПримера(таблица значений) и ДиаграммаПримерНаСервере(Поле). Путь к данным этих эелементов формы укажем к соответствующим реквизитам объекта. Диаграмма ДиаграммаПримерНаСервере данные будет получать из реквизита объекта, а для примера диаграммы на форме добавим на эту самую форму реквизит ДиаграммаПримерНаФорме(Тип Диаграмма). В этот момент можно открыть свойства диаграммы и произвести какие-то настройки при помощи визуальных средств - указать тип диаграммы, привязать значения к подписям и т.д. Вид формы в режиме Конфигуратора таков:
Вид управляемой формы после добавления диаграммы

Если нажать в палитре свойств Настройка - Открыть, то можно открыть свойства диаграммы и установить какие-то настройки.

Настройка свойств диаграммы на управляемой форме

Также разместим кнопку Обновить и команду для нее. Подробно на этом останавливаться не будем.
Теперь переходим в модуль формы и начинаем ваять код.
Для начала заполним таблицу значений данными для примера:
Заполнение таблицы значений данными для примера
Затем создадим две процедуры - для заполнения диаграмм и одну функцию для получения данных. Затем вызов двух процедур заполнения диаграмм поместим в обработчик команды кнопки Обновить, которую мы разместили ранее.

В итоге получается следующий код. Сначала функция получения данных. Эта функция нужна для того, чтобы на сервере собрать данные и вернуть  - как вариант - в виде структуры на клиент. Будет использована для заполнения данных диаграммы на форме.

&НаСервере
Функция ПолучитьДанные()
	
	СтруктураДанных = Новый Структура;
	прНомерЗаписи = 0;
	
	Для Каждого ТекСтрока Из Объект.ТЗДляПримера Цикл
		СтруктураСтроки = Новый Структура;
		СтруктураСтроки.Вставить("ДатаДанных", ТекСтрока.ДатаДанных);
		СтруктураСтроки.Вставить("РасчетныйСчет", ТекСтрока.РасчетныйСчет);
		СтруктураСтроки.Вставить("Касса", ТекСтрока.Касса);
		СтруктураДанных.Вставить("Запись" + Строка(прНомерЗаписи), СтруктураСтроки);
		прНомерЗаписи = прНомерЗаписи + 1;
	КонецЦикла; 

	Возврат СтруктураДанных;

КонецФункции 

&НаСервере
Процедура ОбновитьНаСервере()
	
	Объект.ДиаграммаПример.Очистить();
	Объект.ДиаграммаПример.АвтоТранспонирование = Ложь;
	Объект.ДиаграммаПример.Обновление 			= Ложь;
	
	Объект.ДиаграммаПример.Серии.Добавить("Остаток денежных средств на расчетном счете (тыс.руб.)");
	Объект.ДиаграммаПример.Серии[0].Цвет = WebЦвета.БледноКрасноФиолетовый;
	Объект.ДиаграммаПример.Серии.Добавить("Остаток денежных средств в кассе (тыс.руб.)");
	Объект.ДиаграммаПример.Серии[1].Цвет = WebЦвета.ГрифельноСиний;
	
	Для Каждого ТекСтрока Из Объект.ТЗДляПримера Цикл
		Точка = Объект.ДиаграммаПример.УстановитьТочку(Формат(ТекСтрока.ДатаДанных,"ДЛФ=ДД"));
		
		Объект.ДиаграммаПример.УстановитьЗначение(Точка
			, Объект.ДиаграммаПример.Серии[0]
			, ТекСтрока.РасчетныйСчет/1000
			, Неопределено
			, "РасчетныйСчет");				
		Объект.ДиаграммаПример.УстановитьЗначение(Точка
			, Объект.ДиаграммаПример.Серии[1]
			, ТекСтрока.Касса/1000
			, Неопределено
			, "Касса");		

	КонецЦикла;
	
	Объект.ДиаграммаПример.ОбластьЗаголовка.Текст 	= "Денежные средства";
	Объект.ДиаграммаПример.АвтоТранспонирование 	= Истина;
	Объект.ДиаграммаПример.Обновление		= Истина;
	
КонецПроцедуры

&НаКлиенте
Процедура ОбновитьНаКлиенте()
	
	ДиаграммаПримерНаФорме.Очистить();
	ДиаграммаПримерНаФорме.АвтоТранспонирование = Ложь;
	ДиаграммаПримерНаФорме.Обновление = Ложь;
	
	ДиаграммаПримерНаФорме.Серии.Добавить("Остаток денежных средств на расчетном счете (тыс.руб.)");
	ДиаграммаПримерНаФорме.Серии[0].Цвет = WebЦвета.БледноКрасноФиолетовый;
	ДиаграммаПримерНаФорме.Серии.Добавить("Остаток денежных средств в кассе (тыс.руб.)");
	ДиаграммаПримерНаФорме.Серии[1].Цвет = WebЦвета.ГрифельноСиний;
	
	ДанныеДиаграммы = ПолучитьДанные();
	
	Для Сч = 0 По ДанныеДиаграммы.Количество() - 1 Цикл
		ДанныеСтроки 	= ДанныеДиаграммы["Запись" + Сч];
		Точка 			= ДиаграммаПримерНаФорме.УстановитьТочку(Формат(ДанныеСтроки.ДатаДанных,"ДЛФ=ДД"));
		ДиаграммаПримерНаФорме.УстановитьЗначение(Точка
			, ДиаграммаПримерНаФорме.Серии[0]
			, ДанныеСтроки.РасчетныйСчет/1000
			, Неопределено
			, "РасчетныйСчет");				
		ДиаграммаПримерНаФорме.УстановитьЗначение(Точка
			, ДиаграммаПримерНаФорме.Серии[1]
			, ДанныеСтроки.Касса/1000
			, Неопределено
			, "Касса");		

	КонецЦикла;
	
	ДиаграммаПримерНаФорме.АвтоТранспонирование = Истина;
	ДиаграммаПримерНаФорме.Обновление = Истина;
	
КонецПроцедуры
Сохраняем нашу обработку. Запускаем ее в клиенте и формируем. Пример выполнения обработки с размещением диаграммы на управляемой форме на картинке.

Обработку для примера можно скачать тут