Sky1C

Разделы каталога

Товар дняХиты продажПереносы данных 1СПродукты и лицензии 1СПрочий Софт

Информация

О насИнтересноеДоставка и оплатаКонтакты

Флажок с тремя состояниями в 1С 8

Флажок с тремя состояниями в 1С 8

Рассмотрим более подробно постановку задачи. На форме имеется табличное поле, источником данных для которого является дерево значений. В одной из колонок расположен элемент управления «Флажок». Необходимо что бы он мог принимать три состояния «Включен», «Выключен» и «Неопределено». При этом состояние «Неопределено» или так называемый «серый флажок», т.е. выбранный частично, устанавливается в том случае, если не у всех подчиненных строк состояние флажка одинаковое. Так же если строка имеет подчиненные строки, то при изменении её флажка, соответствующим образом должны изменяться флажки и всех подчиненных строк. Во-первых, добавим нашу колонку с флажком в дерево значений:

Дерево.Колонки.Добавить("Пометка", Новый ОписаниеТипов("Число")); ЭлементыФормы.Дерево.СоздатьКолонки(); КолонкиДерева = ЭлементыФормы.Дерево.Колонки; КолонкиДерева.Пометка.ДанныеФлажка = "Пометка"; КолонкиДерева.Пометка.УстановитьЭлементУправления(Тип("Флажок")); КолонкиДерева.Пометка.РежимРедактирования = РежимРедактированияКолонки.Непосредственно; КолонкиДерева.Пометка.ТриСостоянияФлажка = Истина;

Во-вторых, при изменении флажка нужно устанавливать соответствующие значения в подчиненных строках и контролировать значение флажка в «строке-родителе»:

Процедура ДеревоПриИзмененииФлажка(Элемент, Колонка)   ТекущаяСтрока = Элемент.ТекущаяСтрока;   Если ТекущаяСтрока.Пометка = 2 Тогда      ТекущаяСтрока.Пометка = 0;   КонецЕсли;   УстановкаФлажков(ТекущаяСтрока, ТекущаяСтрока.Пометка);   Пока ТекущаяСтрока.Родитель <> Неопределено Цикл      ТекущаяСтрока.Родитель.Пометка =                       ?(УстановленноДляВсех(ТекущаяСтрока), ТекущаяСтрока.Пометка, 2);      ТекущаяСтрока = ТекущаяСтрока.Родитель;   КонецЦикла; КонецПроцедуры
 

Здесь процедура УстановкаФлажков() рекурсивно устанавливает флажки в подчиненных строках:

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

А функция УстановленноДляВсех() проверяет установлено ли одинаковое значение для всех строк на текущем уровне:

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

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

ТабличноеПоле с типом ДеревоЗначений. Не отображается Дерево · Периодический регистр сведений - запись с такими полями уже существует! · Как получить текущий элемент списка значений в 1С8 · Дерево значений обход рекурсией