![]() |
![]() |
![]() |
|
Флаги в дереве значений | ☑ | ||
---|---|---|---|---|
0
Stepa86
20.10.08
✎
11:53
|
Есть иерархическая структура некоторого справочника (дерево значений) с флажками. Назначение: отметить необходимые элементы.
1. Если ставим флажок у группы, то все подчиненные тоже устанавливаются в истину и наоборот, при снятии все устанавливаются в ложь. 2. Если у потомков группы есть разные флажки, то флажок становится затемненным. 3. Ну и там всякие вопросы, типа вы точно хотите установить все флажки в группе... где нить в типовых или у кого нить есть функции, уже реализующие это, а то самому писать и отлаживать (изобретать велосипед) как то неохото =) |
|||
1
Immortal
20.10.08
✎
11:57
|
типовая УниверасльнаяЗагрузкаВыгрузкаXML
на форме таблицаПравилВыгрузки с деревом |
|||
2
Stepa86
20.10.08
✎
11:59
|
(1) Пасиба =) минут 30-40 мне сэкономил
|
|||
3
zbv
20.10.08
✎
11:59
|
Обработка "Регламентированные отчеты", но там только два уровня. Если больше, то придеться доработать...
|
|||
4
Stepa86
20.10.08
✎
12:14
|
После небольшой работы напильником получилось вот это (может кому пригодицо):
Процедура ДеревоПриИзмененииФлажка(Элемент, Колонка) ТекСтрока = Элемент.ТекущаяСтрока; Если ТекСтрока.Принадлежность = 2 Тогда ТекСтрока.Принадлежность = 0; КонецЕсли; УстановитьПометкиПодчиненных(ТекСтрока, "Принадлежность"); УстановитьПометкиРодителей(ТекСтрока, "Принадлежность"); КонецПроцедуры Процедура УстановитьПометкиПодчиненных(ТекСтрока, пРеквизит) Экспорт Подчиненные = ТекСтрока.Строки; Если Подчиненные.Количество() = 0 Тогда Возврат; КонецЕсли; Для Каждого цСтрока из Подчиненные Цикл цСтрока[пРеквизит] = ТекСтрока[пРеквизит]; УстановитьПометкиПодчиненных(цСтрока, пРеквизит); КонецЦикла; КонецПроцедуры // УстановитьПометкиПодчиненных() // Устанавливает состояние пометки у родительских строк строки дерева значений // в зависимости от пометки текущей строки // // Параметры: // ТекСтрока - Строка дерева значений // Процедура УстановитьПометкиРодителей(ТекСтрока, пРеквизит) Экспорт лРодитель = ТекСтрока.Родитель; Если лРодитель = Неопределено Тогда Возврат; КонецЕсли; ТекСостояние = лРодитель[пРеквизит]; НайденыВключенные = Ложь; НайденыВыключенные = Ложь; Для Каждого цСтрока из лРодитель.Строки Цикл Если цСтрока[пРеквизит] = 0 Тогда НайденыВыключенные = Истина; ИначеЕсли цСтрока[пРеквизит] = 1 ИЛИ цСтрока[пРеквизит] = 2 Тогда НайденыВключенные = Истина; КонецЕсли; Если НайденыВключенные И НайденыВыключенные Тогда Прервать; КонецЕсли; КонецЦикла; Если НайденыВключенные И НайденыВыключенные Тогда Включить = 2; ИначеЕсли НайденыВключенные И (Не НайденыВыключенные) Тогда Включить = 1; ИначеЕсли (Не НайденыВключенные) И НайденыВыключенные Тогда Включить = 0; ИначеЕсли (Не НайденыВключенные) И (Не НайденыВыключенные) Тогда Включить = 2; КонецЕсли; Если Включить = ТекСостояние Тогда Возврат; Иначе лРодитель[пРеквизит] = Включить; УстановитьПометкиРодителей(лРодитель, пРеквизит); КонецЕсли; КонецПроцедуры // УстановитьПометкиРодителей() |
|||
5
Stepa86
20.10.08
✎
12:17
|
теперь меня мучает вопрос, если у группы менять флажок, то спрашивать о подтверждении поменять флажки у всех подчиненных или молча менять???
|
|||
6
Кураж
20.10.08
✎
12:23
|
Хренасе, лисапедист! )
http://infostart.ru/blogs/306/ |
|||
7
Stepa86
20.10.08
✎
12:32
|
(6) так я из типовой вытащил, так что я юзаю чужой трехколесный лисапед... Решил ничего не спрашивать при смене, а сделать кнопочку "отменить последнее действие с деревом" (юзабилити, хуле)
|
|||
8
RomaH
naïve
20.10.08
✎
12:39
|
(7) надо спрашивать - что именно сделать
родитель - серый - т.е. подчиненные часть помечена - часть - нет если я кликаю на серый флаг - что я хочу сделать? установить или снять флаги у всех подчиненнных меня отсутсвие этого вопроса бесит в ролях - хочешь снять право удаления у всех доков, а оно устанавливается, да еще и чтение выставляет у всех |
|||
9
Stepa86
20.10.08
✎
12:42
|
(8) значит в контекстном меню будут кнопки "установить флажок", "снять флажок"... меня наоборот частенько бесит каждый раз в модальном окошке кликать на подтверждения
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |