Имя: Пароль:
1C
 
Флаги в дереве значений
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) значит в контекстном меню будут кнопки "установить флажок", "снять флажок"... меня наоборот частенько бесит каждый раз в модальном окошке кликать на подтверждения
Основная теорема систематики: Новые системы плодят новые проблемы.