Продолжаю рисовать «ручное» дерево

Продолжаю попытки отобразить древовидную структуру, начало тут:

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

В модели выглядит так:

На практике получилось так:

До этого я вручную использовал декорацию для вывода оступа (как раз перед командой отступа).

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

Возникло подозрение, что так широко из-за вывода заголовков. Отключаю во всех группах, получаю такое:

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

Поэтому решаю отступ разместить перед кнопкой развертки:

Получается так, как надо, на всякий случай проверил создав еще задачу 2.2.1, все отображается корректно.

Но отступы великоваты, попробую сделать все группы с выделением «Нет», не помогло. Добавил вертикальный интервал = Нет, это сделало чуть компактнее, но не окончательно:

На обработке-модели вижу тоже, что избавиться от промежутка не получается:

Однако, оказалось, что если убрать цвет фона, то лишнее выделение убирается. Как ни странно, оно происходит из за выделения цвета фона:

Правда, при этом убрались и отступы. Видимо, я не правильно разметил страницу. Пробую поправить ситуацию.

Получается опять не сразу, сначала опять появляются лишние отступы:

Получилось поправить так:

Чтобы смотрелось красиво, вернул вертикальные интервалы по-умолчанию:

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

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

Структура групп такая:

Код по-своему элегантен:

//== Создаем место для дерева задач, отображаемых вручную   

//В - вертикально
//	ГПЗ - горизонтально для подзадачи
//		Отступ (Декорация)      
//		ГЭ - вертикально для элементов задачи
//			Г - горизонтально для основных элементов задачи
//				Кнопка свертки-развертки
//				Пометка
//				Наименование
//			З - группа для починенной задачи
//		Группа (подчиненные элементы)

ВыводитьЦвета = ложь; //Выводить цвета для отладки

ИмяГруппыЗадачиВ = ИмяГруппыЗадачи(СтрокаЗадачи, "В") ; //Вертикальная группа
ИмяГруппыЗадачиГ = ИмяГруппыЗадачи(СтрокаЗадачи, "Г"); //Горизонтальная группа для пометки и наименования
ИмяГруппыЗадачиГЭ = ИмяГруппыЗадачи(СтрокаЗадачи, "ГЭ"); 
ИмяГруппыЗадачиГПЗ = ИмяГруппыЗадачи(СтрокаЗадачи, "ГПЗ"); 

ГруппаЗадачиВ = Контекст.Форма.Элементы.Добавить(ИмяГруппыЗадачиВ, Тип("ГруппаФормы"), ВГруппу);
ГруппаЗадачиВ.Вид = ВидГруппыФормы.ОбычнаяГруппа;
ГруппаЗадачиВ.Группировка = ГруппировкаПодчиненныхЭлементовФормы.Вертикальная;     
Если ВыводитьЦвета Тогда ГруппаЗадачиВ.ЦветФона = WebЦвета.БледноЗеленый; КонецЕсли;
ГруппаЗадачиВ.ОтображатьЗаголовок = ложь;     
ГруппаЗадачиВ.Отображение = ОтображениеОбычнойГруппы.Нет; 
//ГруппаЗадачиВ.ВертикальныйИнтервал = ИнтервалМеждуЭлементамиФормы.Нет;                          


ГруппаЗадачиГПЗ = Контекст.Форма.Элементы.Добавить(ИмяГруппыЗадачиГПЗ, Тип("ГруппаФормы"), ГруппаЗадачиВ);
ГруппаЗадачиГПЗ.Вид = ВидГруппыФормы.ОбычнаяГруппа;
ГруппаЗадачиГПЗ.Группировка = ГруппировкаПодчиненныхЭлементовФормы.ГоризонтальнаяВсегда;     
Если ВыводитьЦвета Тогда ГруппаЗадачиГПЗ.ЦветФона = WebЦвета.СеребристоСерый; КонецЕсли;
ГруппаЗадачиГПЗ.ОтображатьЗаголовок = ложь;
ГруппаЗадачиГПЗ.Отображение = ОтображениеОбычнойГруппы.Нет; 
//ГруппаЗадачиГПЗ.ВертикальныйИнтервал = ИнтервалМеждуЭлементамиФормы.Нет;

ИмяОтступаЗадачи = ИмяГруппыЗадачи(СтрокаЗадачи, "Отступ");
ОтступЗадачи = Контекст.Форма.Элементы.Добавить(ИмяОтступаЗадачи, Тип("ДекорацияФормы"), ГруппаЗадачиГПЗ);
ОтступЗадачи.Вид = ВидДекорацииФормы.Надпись;
ОтступЗадачи.Заголовок = "-";

ГруппаЗадачиГЭ = Контекст.Форма.Элементы.Добавить(ИмяГруппыЗадачиГЭ, Тип("ГруппаФормы"), ГруппаЗадачиГПЗ);
ГруппаЗадачиГЭ.Вид = ВидГруппыФормы.ОбычнаяГруппа;
ГруппаЗадачиГЭ.Группировка = ГруппировкаПодчиненныхЭлементовФормы.Вертикальная;     
Если ВыводитьЦвета Тогда ГруппаЗадачиГЭ.ЦветФона = WebЦвета.Желтый; КонецЕсли;
ГруппаЗадачиГЭ.ОтображатьЗаголовок = ложь;
ГруппаЗадачиГЭ.Отображение = ОтображениеОбычнойГруппы.Нет; 
//ГруппаЗадачиГЭ.ВертикальныйИнтервал = ИнтервалМеждуЭлементамиФормы.Нет;


ГруппаЗадачиГ = Контекст.Форма.Элементы.Добавить(ИмяГруппыЗадачиГ, Тип("ГруппаФормы"), ГруппаЗадачиГЭ);
ГруппаЗадачиГ.Вид = ВидГруппыФормы.ОбычнаяГруппа;
ГруппаЗадачиГ.Группировка = ГруппировкаПодчиненныхЭлементовФормы.ГоризонтальнаяВсегда;     
Если ВыводитьЦвета Тогда ГруппаЗадачиГ.ЦветФона = WebЦвета.БледноЗолотистый; КонецЕсли;
ГруппаЗадачиГ.ОтображатьЗаголовок = ложь;
ГруппаЗадачиГ.Отображение = ОтображениеОбычнойГруппы.Нет; 
//ГруппаЗадачиГ.ВертикальныйИнтервал = ИнтервалМеждуЭлементамиФормы.Нет;



ГруппаЗадачи = Контекст.Форма.Элементы.Добавить(ИмяГруппыЗадачи, Тип("ГруппаФормы"), ГруппаЗадачиГЭ);
ГруппаЗадачи.Вид = ВидГруппыФормы.ОбычнаяГруппа;
//ГруппаНовая.Заголовок = Заголовок;
ГруппаЗадачи.Группировка = ГруппировкаПодчиненныхЭлементовФормы.Вертикальная;     
Если ВыводитьЦвета Тогда ГруппаЗадачи.ЦветФона = WebЦвета.Розовый; КонецЕсли;
ГруппаЗадачи.ОтображатьЗаголовок = ложь;
ГруппаЗадачи.Отображение = ОтображениеОбычнойГруппы.Нет; 
//ГруппаЗадачи.ВертикальныйИнтервал = ИнтервалМеждуЭлементамиФормы.Нет;


//ИмяГруппыВерт = ИмяГруппыЗадачи + "_Гор";
//ГруппаВерт = Контекст.Форма.Элементы.Добавить(ИмяГруппыЗадачи, Тип("ГруппаФормы"), ВГруппу);
//ГруппаЗадачи.Вид = ВидГруппыФормы.ОбычнаяГруппа;
////ГруппаНовая.Заголовок = Заголовок;
//ГруппаЗадачи.Группировка = ГруппировкаПодчиненныхЭлементовФормы.ГоризонтальнаяВсегда;     

//== Создаем элементы

ИмяКоманды = ИмяГруппыЗадачи(СтрокаЗадачи, "Развертка");  
КомандаФормы = Контекст.Форма.Команды.Добавить(ИмяКоманды);
КомандаФормы.Действие = "Развертка";
//КомандаФормы.Заголовок = "+Задача";
КомандаФормы.Картинка = БиблиотекаКартинок.БС_Задача_Плюс;
КомандаФормы.ИзменяетСохраняемыеДанные = Ложь;
КомандаФормы.Отображение = ОтображениеКнопки.Картинка;

НовыйЭлемент = Контекст.Форма.Элементы.Добавить(ИмяКоманды, Тип("КнопкаФормы"), ГруппаЗадачиГ);
НовыйЭлемент.ИмяКоманды = ИмяКоманды;
НовыйЭлемент.ОтображениеФигуры = ОтображениеФигурыКнопки.Нет;


НовыйЭлемент  = Контекст.Форма.Элементы.Добавить(ИмяПометкиЗадачи, Тип("ПолеФормы"), ГруппаЗадачиГ);
НовыйЭлемент.Вид = ВидПоляФормы.ПолеФлажка;      
НовыйЭлемент.ПутьКДанным = ИмяПометкиЗадачи;
НовыйЭлемент.ПоложениеЗаголовка = ПоложениеЗаголовкаЭлементаФормы.Нет;

НовыйЭлемент  = Контекст.Форма.Элементы.Добавить(ИмяНаименованияЗадачи,Тип("ПолеФормы"),ГруппаЗадачиГ);
НовыйЭлемент.Вид = ВидПоляФормы.ПолеВвода;      
НовыйЭлемент.ПутьКДанным = ИмяНаименованияЗадачи;   
НовыйЭлемент.ПоложениеЗаголовка = ПоложениеЗаголовкаЭлементаФормы.Нет;

Понадобилось много бумажек для рисования групп:

Еще немного доработал, чтобы задачи без подчиненных элементов выводились кружочками:

Вот такими, нарисованными в MS Paint:

Но потом решил, что лучше выводить пустую картинку для таких кнопок, получилось красиво:

fixin

Программирую на 1С с 1999 года. В 1С просто Гений. В 2020 году ушел из офиса на вольные хлеба фриланса. Принимаю заказы.

Читайте также:

Добавить комментарий

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