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

04.12.19

Разработка - Универсальные функции

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

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

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

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

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

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


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

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

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

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

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

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

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

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

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


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

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

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

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

	КонецЕсли;

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


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


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

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


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


 

Дерево значений функции процедуры

См. также

Вставляем картинку из буфера обмена (платформа 1С 8.3.24)

Универсальные функции Платформа 1С v8.3 Конфигурации 1cv8 Абонемент ($m)

Задача: вставить картинку из буфера обмена на форму средствами платформы 1С.

1 стартмани

18.03.2024    2655    0    John_d    8    

53

GUID в 1С 8.3 - как с ними быть

Универсальные функции Платформа 1С v8.3 Конфигурации 1cv8 Бесплатно (free)

Пришлось помучиться с GUID-ами немного, решил поделиться опытом, мало ли кому пригодится.

12.02.2024    4590    atdonya    22    

45

Переоткрытие внешних обработок

Универсальные функции Платформа 1С v8.3 Бесплатно (free)

На заключительных этапах, когда идет отладка или доработка интерфейса, необходимо много раз переоткрыть внешний объект. Вот один из способов автоматизации этого.

30.11.2023    3950    ke.92@mail.ru    16    

61

Валидация JSON через XDTO (включая массивы)

WEB-интеграция Универсальные функции Механизмы платформы 1С Платформа 1С v8.3 Конфигурации 1cv8 Бесплатно (free)

При работе с интеграциями рано или поздно придется столкнуться с получением JSON файлов. И, конечно же, жизнь заставит проверять файлы перед тем, как записывать данные в БД.

28.08.2023    8799    YA_418728146    6    

141

Печать непроведенных документов для УТ, КА, ERP. Настройка печати по пользователям, документам и печатным формам

Пакетная печать Печатные формы Адаптация типовых решений Универсальные функции Платформа 1С v8.3 1С:ERP Управление предприятием 2 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х Россия Абонемент ($m)

Расширение для программ 1С:Управление торговлей, 1С:Комплексная автоматизация, 1С:ERP, которое позволяет распечатывать печатные формы для непроведенных документов. Можно настроить, каким пользователям, какие конкретные формы документов разрешено печатать без проведения документа.

2 стартмани

22.08.2023    2069    21    progmaster    7    

3

Расширение: Быстрые отборы через буфер [Alt+C] Копировать список, [Alt+V] Вставить список, [Ctrl+C] Копировать из файлов

Инструментарий разработчика Универсальные функции Платформа 1С v8.3 Конфигурации 1cv8 1С:Розница 2 1С:ERP Управление предприятием 2 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х 1С:Зарплата и Управление Персоналом 3.x Абонемент ($m)

Копирует в буфер значения из списков, из ячеек отчетов, таблиц, настроек списков, других отборов и вставляет в выбранную настройку отбора. Работает с Объект не найден. Работает как в одной так и между разными базами 1С. Использует комбинации [Alt+C] Копировать список, [Alt+V] Вставить список. Также для копирования данных используется стандартная [Ctrl+C] (например из открытого xls, mxl, doc и т.п. файла скопировать список наименований)

1 стартмани

13.10.2022    16139    133    sapervodichka    112    

129

Система контроля ведения учета [БСП]

Универсальные функции Механизмы типовых конфигураций БСП (Библиотека стандартных подсистем) Платформа 1С v8.3 Конфигурации 1cv8 Бесплатно (free)

В данном материале рассмотрим типовой алгоритм подсистемы контроля учета БСП в конфигурациях на примерах.

18.07.2022    7241    quazare    8    

109
Комментарии
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
1. json 3297 05.12.19 07:54 Сейчас в теме
// Функция возвращает дерево значений
//
Функция Получить_ДеревоЗначений()


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


Комментарии от кэпа.
Отличный пример как не надо писать комментарии

// Процедура выполняет удаление ненужных колонок из дерева значений

Раз уж пишешь комментарий, так разъяснил бы в нем почему они ненужные, и так ведь понятно что раз их удаляешь, то они тебе не нужны
3. Mellow 58 05.12.19 11:04 Сейчас в теме
(1) Согласен, что может быть не все коментарии информативные, но я разве статью об правильном написании комментариев писал
5. davdykin 25 13.12.19 17:14 Сейчас в теме
(1)Вы совершенно правильно указали на бесполезность комментариев в данном случаи, но упустили то, что имена функциям даны таким образом, что без комментариев понятно, какое действие они выполняют.
2. VmvLer 05.12.19 10:20 Сейчас в теме
приятный код, вспомнил школу когда читал камменты по слогам.
4. пользователь 08.12.19 19:35
6. popenko 22.05.20 22:39 Сейчас в теме
Извините, за вопрос не в тему - а что это за обработка с какой кофигурации? скрин которой в начале статьи.
7. Mellow 58 23.05.20 12:25 Сейчас в теме
(6)Сводный отчет для руководителей подразделений организации, разрабативался для украинской утп 1.2
Оставьте свое сообщение