Управляемая форма 1С 8.2 – работа с деревом значений и таблицей значений. Часть III (Реализация трехпозиционного флажка)

Управляемая форма 1С 8.2 – работа с деревом значений и таблицей значений. Часть III (Реализация трехпозиционного флажка)


&НаКлиенте
Процедура ФлажокПриИзменении(Элемент)

    ИДТекущейСтроки = Элементы["Дерево"].ТекущаяСтрока;

    Если ИДТекущейСтроки <> Неопределено Тогда

        ЭлементКоллекции = ЭтаФорма["Дерево"].НайтиПоИдентификатору(
            ИДТекущейСтроки);

        Если ЭлементКоллекции.Пометка = 2 Тогда
            ЭлементКоллекции.Пометка = 0;
        КонецЕсли;

        УстановкаФлажков(ЭлементКоллекции, ЭлементКоллекции.Пометка);

        Родитель = ЭлементКоллекции.ПолучитьРодителя();
        Пока Родитель <> Неопределено Цикл
            Родитель.Пометка = ?(УстановленноДляВсех(ЭлементКоллекции),
                ЭлементКоллекции.Пометка, 2);
            ЭлементКоллекции = Родитель;
            Родитель = ЭлементКоллекции.ПолучитьРодителя();
        КонецЦикла;

    КонецЕсли;

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

&НаКлиенте
Процедура УстановкаФлажков(ЭлементКоллекции, ЗначениеПометки)

    ПодчинЭлементы = ЭлементКоллекции.ПолучитьЭлементы();
    Для Каждого ТекЭлемент Из ПодчинЭлементы Цикл
        ТекЭлемент.Пометка = ЗначениеПометки;
        УстановкаФлажков(ТекЭлемент, ТекЭлемент.Пометка);
    КонецЦикла;

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

&НаКлиенте
Функция УстановленноДляВсех(ЭлементКоллекции)

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

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

Скачать обработку

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

Комментарии:

  1. Игорь:

    Блин, спасибо! помогло
    только флажок в упр. форме все равно не принимает третьего состояния! Либо включен, либо выключен 🙁

  2. Игорь:

    Разобрался) спасибо

  3. Роман:

    Те що ви робите заслуговує великої похвали.
    Дуже знадобилось.
    Дякую.
    Молодці!

  4. Артем:

    Автору, спасибо! Очень пригодилось! Так держать!

  5. Антон:

    спасибо за статью.

Оставить комментарий