Каталог решений - Полезности | Дерево значений | Обычные формы |

Полезности | Дерево значений | Обычные формы |

Полезности | Дерево значений | Обычные формы |

В наличии

Полезные функции при работе с деревом значений.

Категория:

Описание

Работая с таким объектом, как дерево значений, нужно было автоматизировать ряд функций и процедур, связанных с настройкой и оформлением дерева значений. Поскольку дерево значений формируется или заполняется программно, заранее неизвестно количество колонок, строк и уровней в дереве значений, потому в свойствах объекта нет возможности настройки формата колонок, настройки расположения колонок, установки определенной ширины колонок, нет возможности выделения числовых отрицательных значений в колонках  и т. д. Также меня очень раздражала ситуация, когда дерево создается программно, все заголовки колонок отображаются слитно в соответствии с их наименованием в коде.  

В данной статье я попробовал собрать наиболее полезны методы «борьбы» с этими казусами.

Примерно использование этих методов в каком нибудь отчете, будет выглядеть так, как показано на скриншоте ниже.

////////////////////////////////////////////////////////////////////////////////
// ПЕРЕМЕННЫЕ МОДУЛЯ

Перем ТекущееДерево;


// Функция возвращает дерево значений
//
Функция Получить_ДеревоЗначений()

    Запрос = Новый Запрос;
	Запрос.Текст = "";
	
	РезультатЗапроса = Запрос.Выполнить().Выгрузить(ОбходРезультатаЗапроса.ПоГруппировкамСИерархией);

    Возврат РезультатЗапроса;

КонецФункции
  
// Процедура - выполняет заполнение дерева значений
//
Процедура ЗаполнитьДеревоЗначений()

	// Очистить дерево перед заполнением
	ДеревоЗначений.Строки.Очистить();

    // Выборка данных (запрос)   
    ДеревоЗначений = Получить_ДеревоЗначений();

    // Массив удаляемых колонок из дерева
    МассивУдаляемыхКолонок = Новый Массив;
	МассивУдаляемыхКолонок.Добавить("Колонка_1");
	МассивУдаляемыхКолонок.Добавить("Колонка_2");

    ОформитьДеревоЗначений(ДеревоЗначений, "Наименование", МассивУдаляемыхКолонок);

КонецПроцедуры


// Процедура - оформляет колонки дерева
//
Процедура ОформитьДеревоЗначений(Дерево, Наименование, МассивУдаляемыхКолонок = Неопределено)

    ТекущееДерево = Дерево;

	Если Наименование = "Наименование" Тогда
		
        Дерево.Колонки.Колонка_Имя.Заголовок = "Красивый заголовок с пробелами";
		Дерево.Колонки.Колонка_Имя.Ширина    = 15;

        // Удаляем ненужные колонки
	    Если МассивУдаляемыхКолонок <> Неопределено Тогда
		    Удалить_Колонки_ДеревоЗначений(МассивУдаляемыхКолонок, Дерево);
        КонецЕсли

	КонецЕсли;

	НастройкаФорматаКолонок(Дерево);
    НастройкаРасположенияКолонок(ДеревоЗначений, "ДеревоЗначений");
	
КонецПроцедуры // ()


// Процедура - выполняет настройкку формата колонок в дереве
//
Процедура НастройкаФорматаКолонок(СтрокаДерево)
	
	Дерево  = ТекущееДерево;	
	Строки  = ТекущееДерево.Строки; 
	Колонки = ТекущееДерево.Колонки;
	
	Для Каждого стр из Строки Цикл
		Для Каждого Колонка из Колонки Цикл
			Если ТипЗнч(стр[Колонка.Имя]) = Тип("Число") Тогда 
				стр[Колонка.Имя] = Формат(стр[Колонка.Имя], "ЧДЦ=2");
			КонецЕсли;
		КонецЦикла;
		НастройкаФорматаКолонок(стр);
	КонецЦикла;
	
КонецПроцедуры


// Процедура - выполняет настройкку расположения колонок в дереве
//
Процедура НастройкаРасположенияКолонок(Дерево, Наименование)
	
	Колонки = ТекущееДерево.Колонки;
	
	Для Каждого Колонка Из Колонки Цикл 
		Тип_Число = Дерево.Колонки[Колонка.Имя].ТипЗначения.СодержитТип(Тип("Число"));
		Тип_Дата  = Дерево.Колонки[Колонка.Имя].ТипЗначения.СодержитТип(Тип("Дата"));
		Если Тип_Число Или Тип_Дата Тогда 
			Колонка.ГоризонтальноеПоложениеВШапке   = ГоризонтальноеПоложение.Центр;
			Колонка.ГоризонтальноеПоложениеВКолонке = ГоризонтальноеПоложение.Центр;
			Колонка.ГоризонтальноеПоложениеВПодвале = ГоризонтальноеПоложение.Центр;
		КонецЕсли;
	КонецЦикла;
	
КонецПроцедуры

// Процедура выполняет удаление ненужных колонок из дерева значений
//
Процедура Удалить_Колонки_ДеревоЗначений(Массив, Дерево)
	
	Для Каждого Имя Из Массив Цикл
		Дерево.Колонки.Удалить(Имя);
	КонецЦикла;
	
КонецПроцедуры


Процедура ДеревоЗначенийПриВыводеСтроки(Элемент, ОформлениеСтроки, ДанныеСтроки)
	
	// Раскраска дерева по уровнях
	Если ДанныеСтроки.Уровень() = 0 Тогда
		ОформлениеСтроки.ЦветФона = WebЦвета.Циан;		
		ОформлениеСтроки.Шрифт = Новый Шрифт(,,Истина);	
	ИначеЕсли  ДанныеСтроки.Уровень() =  1 Тогда 
		ОформлениеСтроки.ЦветФона = WebЦвета.ЦианСветлый;		
		//ОформлениеСтроки.Шрифт = Новый Шрифт(,,Истина);	
	КонецЕсли;
	
	// Виделим отрицательные значения в колонках	
	Для Каждого Колонка Из Элемент.Колонки Цикл
		Если ТипЗнч(ДанныеСтроки[Колонка.Имя]) = Тип("Число") Тогда 
			Если  ДанныеСтроки[Колонка.Имя] < 0 Тогда
				ОформлениеСтроки.Ячейки[Колонка.Имя].ЦветТекста = WebЦвета.Красный;	
			КонецЕсли;
			ДанныеСтроки[Колонка.Имя] = Формат(ДанныеСтроки[Колонка.Имя], "ЧДЦ=2");
		КонецЕсли;
	КонецЦикла;
	
КонецПроцедуры


 

has been added to your cart:
Оформление заказа