Форум 1С
Программистам, бухгалтерам, администраторам, пользователям
Задай вопрос - получи решение проблемы
14 ноя 2024, 08:42

Отображение иерархии в списке

Автор Nosferatu112, 04 сен 2023, 11:06

0 Пользователей и 1 гость просматривают эту тему.

Nosferatu112

Всем доброго времени суток, создавал я справочник около полугода назад, там нужно было предусмотреть отобржение списка иерархичски, попросили дополнить
Сейчас он выглядит вот так:
ШРСтандарт.png
То есть у Удаленного офиса Пенза родитель центральный офис он отображается иерархически
А у АХО УО Пенза Родитель Удалённый офис Пенза, но вместо привязки к уже имеющимуся УОП создаётся новая группа
выглядеть он должен так:
ШРНовый.png
Как правильно это сделать?
Код:
&НаКлиенте
Процедура ВидИерархия(Команда)

Если Не ВидИерархия Или ОтображатьСтруктуруПредприятия Тогда
ВидИерархия = Истина;
ОтображатьСтруктуруПредприятия = Ложь;
ОбработатьИзменениеВидаСписка();
КонецЕсли;

ПодключитьОбработчикОжидания("ПриИзмененииСохраняемойНастройки", 0.2, Истина);

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

&НаКлиенте
Процедура ВидСписок(Команда)

Если ВидИерархия Или ОтображатьСтруктуруПредприятия Тогда

ВидИерархия = Ложь;
ОтображатьСтруктуруПредприятия = Ложь;

ОбщегоНазначенияКлиентСервер.УдалитьЭлементыГруппыОтбораДинамическогоСписка(Список, "МестоВСтруктуреПредприятия");

ОбработатьИзменениеВидаСписка();

КонецЕсли;

ПодключитьОбработчикОжидания("ПриИзмененииСохраняемойНастройки", 0.2, Истина);

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

&НаСервере
Процедура ОбработатьИзменениеВидаСписка()

ОбработатьОтображениеРежимаИерархии(ЭтотОбъект);

ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(Элементы, "ГруппаСтруктураПредприятия", "Видимость", ОтображатьСтруктуруПредприятия);
ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(Элементы, "СоздатьУправленческуюПозицию", "Видимость", ОтображатьСтруктуруПредприятия);

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

&НаКлиентеНаСервереБезКонтекста
Процедура ОбработатьОтображениеРежимаИерархии(Форма)

Элементы = Форма.Элементы;

Элементы.ФормаВидИерархия.Пометка = Форма.ВидИерархия И Не Форма.ОтображатьСтруктуруПредприятия;
Элементы.ФормаВидСписок.Пометка = Не Форма.ВидИерархия И Не Форма.ОтображатьСтруктуруПредприятия;

ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(Элементы,
"ВидСтруктураПредприятия", "Пометка", Форма.ОтображатьСтруктуруПредприятия)
;

ЭлементГруппировки = Неопределено;
Если Элементы.ФормаВидИерархия.Пометка = Истина Тогда
Элементы.Подразделение.Видимость = Ложь;
Элементы.ПодразделениеРодитель.Видимость = Истина;
Иначе
Элементы.Подразделение.Видимость = Истина;
Элементы.ПодразделениеРодитель.Видимость = Ложь;
КонецЕсли;
Для каждого Элемент Из Форма.Список.Группировка.Элементы Цикл

Если СокрЛП(Элемент.Поле) = "Подразделение" Тогда
ЭлементГруппировки = Элемент;

Прервать;
КонецЕсли;
Если СокрЛП(Элемент.Поле) = "Подразделение.Родитель" Тогда
ЭлементГруппировки1 = Элемент;

КонецЕсли;

КонецЦикла;

Если ЭлементГруппировки = Неопределено Тогда

ЭлементГруппировки = Форма.Список.Группировка.Элементы.Добавить(Тип("ПолеГруппировкиКомпоновкиДанных"));
ЭлементГруппировки.Поле = Новый ПолеКомпоновкиДанных("Подразделение.Родитель");
ЭлементГруппировки1 = Форма.Список.Группировка.Элементы.Добавить(Тип("ПолеГруппировкиКомпоновкиДанных"));
ЭлементГруппировки1.Поле = Новый ПолеКомпоновкиДанных("Подразделение");
КонецЕсли;

ЭлементГруппировки.Использование = Форма.ВидИерархия;
ЭлементГруппировки1.Использование = Форма.ВидИерархия;


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

&НаКлиентеНаСервереБезКонтекста
Функция НастройкиСписка(Список)

Настройки = Новый Структура;

Настройки.Вставить("ОтборПоОрганизации", Неопределено);

Настройки.Вставить("УстановленОтборПоОрганизации", Ложь);
Настройки.Вставить("УстановленОтборПоПодразделению", Ложь);

КоллекцияОтборов = Новый Массив;
КоллекцияОтборов.Добавить(Список.КомпоновщикНастроек.ФиксированныеНастройки.Отбор.Элементы);
КоллекцияОтборов.Добавить(Список.КомпоновщикНастроек.Настройки.Отбор.Элементы);
КоллекцияОтборов.Добавить(ПользовательскиеОтборы(Список));

Для каждого ЭлементыОтбора Из КоллекцияОтборов Цикл

Для каждого ЭлементОтбора Из ЭлементыОтбора Цикл

Если ТипЗнч(ЭлементОтбора) = Тип("ГруппаЭлементовОтбораКомпоновкиДанных") Тогда
Продолжить;
КонецЕсли;

Если ЭлементОтбора.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Подразделение") Тогда
Настройки.УстановленОтборПоПодразделению = ЭлементОтбора.Использование;
КонецЕсли;

Если ЭлементОтбора.Использование
И ЭлементОтбора.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Владелец") Тогда

Настройки.УстановленОтборПоОрганизации = Истина;
Настройки.ОтборПоОрганизации = ЭлементОтбора.ПравоеЗначение;

КонецЕсли;

КонецЦикла;

КонецЦикла;

Возврат Настройки;

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

LexaK

эээ, а если использовать платформенный механизм отображения структуры подчиненности без всего это Г..кода?
чем он не устраивает?
если помогло нажмите: Спасибо!

Nosferatu112

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

Nosferatu112

LexaK, А и ещё у них подобное оформление ещё на нескольких спр и доках это я там подсмотрел, так что хз что с платформеным механизмом
Это БСП если что то это скажет

LexaK

как вариант, сделайте на форме две закладки/страницы
одна с иерахичиским отображением
другая с линейным

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

если помогло нажмите: Спасибо!

Nosferatu112

LexaK,Спасибо за совет, нарыл я как отображать список платформеным механизмом,
ДСн.png
Что я делаю ни так, что проставить в настройки группировки что бы он отображался как нужно с такими настройками он отображаеться так же как сейчас кодом а не так как нужно

LexaK

имелось ввиду, взять Список - Динамический список, как есть, без произвольного запроса и собственных группировок

(еще возможно, у вас в иерархии, неправильное подчинение групп, поэтому так и отображается
не в нужном вам подчинении,
попробуйте изменить на нужный порядок... )
если помогло нажмите: Спасибо!

Nosferatu112

LexaK, Я сделал так, создал ещё один ДС убрал у него все группировки и в процедуре кнопки прописал
Элементы.Список1.Видимость = Ложь;
Элементы.Список.Видимость = Истина;
И на оборот для другого отображения
работает отлично всю эту груду кода можно удалять
И почему не отображаеться так как я хочу я тоже понял просто не пойму как бы это исправить
НовыйИерар.png
Вот на скрине Удал Оф Пенза внизу это подразделение
А уд Оф Пенза в верху это Родитель поэтому оно и не группируетсья я только не понимаю как их связать
Из кода у меня осталось только вот это
&НаКлиенте
Процедура ВидИерархия(Команда)

Если Не ВидИерархия Или ОтображатьСтруктуруПредприятия Тогда
ВидИерархия = Истина;
Элементы.Список1.Видимость = Ложь;
Элементы.Список.Видимость = Истина;
//ОбработатьИзменениеВидаСписка();
КонецЕсли;

//ПодключитьОбработчикОжидания("ПриИзмененииСохраняемойНастройки", 0.2, Истина);

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

&НаКлиенте
Процедура ВидСписок(Команда)

Если ВидИерархия Или ОтображатьСтруктуруПредприятия Тогда

ВидИерархия = Ложь;
Элементы.Список1.Видимость = Истина;
Элементы.Список.Видимость = Ложь;
//ОбщегоНазначенияКлиентСервер.УдалитьЭлементыГруппыОтбораДинамическогоСписка(Список, "МестоВСтруктуреПредприятия");

//ОбработатьИзменениеВидаСписка();

КонецЕсли;

//ПодключитьОбработчикОжидания("ПриИзмененииСохраняемойНастройки", 0.2, Истина);

КонецПроцедуры
&НаКлиенте
Процедура Создать(Команда)
Форма = ОткрытьФорму("Справочник.ШтатноеРасписание.Форма.ФормаЭлемента");
Если ВидИерархия = Истина Тогда
Эл = Элементы.Список.ТекущиеДанные.РодительскаяГруппировкаСтроки;
КонецЕсли;
Итоговое = ИмяСпр.Добавить();
Итоговое.ИмяСправочника = Эл;
Имя = СПР();
Если ВидИерархия = Истина Тогда
Форма.Объект.Подразделение = Имя;
КонецЕсли;

КонецПроцедуры
Функция СПР()
Для Каждого К ИЗ ИмяСпр Цикл
Имя = Справочники.Подразделения.НайтиПоНаименованию(К.ИмяСправочника);
КонецЦикла;
Возврат Имя;
КонецФункции;


LexaK

Nosferatu112, похоже, у вас заведены группы с одинаковыми наименованиями,
соответственно элементы принадлежат разным группам и поэтому попадают в разные ветки дерева
если помогло нажмите: Спасибо!

Теги:

Похожие темы (5)

Рейтинг@Mail.ru

Поиск