Флажок у дерева значений

Как добавить флажки в дерево значений ?

Есть обработка «РегистрацияИзмененийДляОбмена», у нее в ТЧ есть колонка «Имя», она заполняется метаданными, а рядом картинка.
Как сделать чтобы тут же отображалось поле флажок как в обработке «ВыгрузкаЗагрузкаДанныхXML»

Спасибо за внимание. За советы и ответы премного благодарен.

(3) Не обязательно. Если речь о 8.1, то у ячейки табличного поля есть свойства «Флажок» и «Отображать флажок» (управление в ПриВыводеСтроки() и в ПриПолученииДанных()). Для дерева реализация флажка этим способом намного интереснее выглядит, т.к. флажок можно отрисовывать непосредственно перед значениями ветки дерева, а не в фиксированной колонке (наподобие дерева подсистем в конфигураторе). Как в 8.2 такое сделать — не знаю, не рыл.

Пишу:
ОформлениеСтроки.Ячейки.Имя.ОтображатьФлажок = Истина;
ОформлениеСтроки.Ячейки.Имя.ЗначениеФлажка = Истина;

Теперь выводит флажек, только нельзя менять значение. Как его менять ?
И еще рамки у флажка нет

(6) Еще раз читай (1,2)..
У своей колонки выставляешь
ДанныеФлажка=»МояПометка»
РежимРедактирования=»Непосредственно»

(6) Значение флажка, ессно, нужно где-то хранить (и при выводе менять оформление ячейки в соответствии с ним). А менять по событию ПриИзмененииФлажка. Почему у тебя без рамки, навскидку не соображу. У меня с рамкой. Хотя режим редактирования той колонки, где отображается иерархия с флажком, стоит «Вход».

чего то вообще не меняется флажек.

На форме элемент управл.(Реквизит формы «ДеревоОбмена»):

Имя: «ДеревоОбмена»
Данные: «ДеревоОбмена»
ТипЗнч: ДеревоЗначений

У него колонка:
Имя: «Имя»
Данные: «Имя»
ДанныеФлажка = «Выгружать»

Програмно заполняю :
СтрокаДерева = ДеревоОбмена.Строки.Добавить();
СтрокаДерева.Имя = ИмяОтображения;
СтрокаДерева.Данные = ИмяДанных;
СтрокаДерева.Выгружать = Истина;

Выводит дерево, с галками, но не редактируются..
Я как то не правильно прописываю данные на колонку ?

(10) Ты определись, наконец, как ты делаешь. Если стандартно — в отдельной колонке, тогда для этой колонки прописываешь только «ДанныеФлажка» («Выгружать»), а «Данные» очищаешь.

Читайте также:  Дерево ольха цветы листья

(11)Хочу чтобы в колонке «Имя» отображался флаг, с возможностью редактирования. Уж прощевайте несведущего. Хочется прозреть.

(15) А осознал? Если осознал, то вылилось ли это в какие-то твои действия? И если да, то каковы результаты?

короче не редактируются флажки
вот ссылка на картинку
http://www.pictureshack.ru/images/6750NoName.JPG
режим редактирования — непосредственно написал
что может быть еще

Дошло. Ты всё-таки хочешь вместе со значением, а не в отдельной колонке. Тогда первым делом, нужно разобраться почему рамка не появляется. Когда появится, тогда читай (9). Проверь на всяк пожарный «Доступность» и «ТолькоПросмотр» у табличного поля, колонки и самого поля. «ДанныеФлажка» очисть. Флажок ПриПолученииДанных() рисоваться будет.

Добился таки результата. Вчера уже потерял надежду. Сел на 5 мин., поперетыкал все галки — Заработало.
Однако 1Са-жгет.
Для тех кому необходимо реализовать данную возможность — все здесь описано как нильзя лучше.

Источник

Табличное поле ~ Как реализовать в дереве значений флажок с тремя состояниями?

Распечатать

8.2 УП
Необходимо реализовать трехпозиционный флажок в ДеревеЗначений на управляемой форме 1С предприятия 8.2, который работает по следующему алгоритму:
* Если у элемента ДереваЗначений нет подчиненных элементов, то флажок может быть либо “включен”, либо “выключен”.
* Если у элемента есть подчиненные, то флажок “включен”, если ВКЛЮЧЕНЫ флажки у ВСЕХ подчиненных элементов, “выключен” если ВЫКЛЮЧЕНЫ флажки у ВСЕХ подчиненных элементов.
Если у некоторых подчиненных элементов флажки включены, а у некоторых выключены, то флажок родительского элемента имеет значение “неопределенно”.
* При включении флажка у родительского элемента, включаются флажки ВСЕХ подчиненных, при выключении флажка у родительского элемента, выключаются флажки ВСЕХ подчиненных.

Возьмем из первой статьи процедуру построения дерева значений и доработаем ее, добавив в дерево еще одну колонку, которая будет содержать элемент управления флажок и реализуем для него обработчик события “ПриИзменении”. Весь алгоритм сводится к обработке изменения флажка: у всех подчиненных элементов необходимо включить/выключить флажки в зависимости от состояния флажка текущего элемента, а у всех родителей текущего элемента (которые расположены на верхних уровнях иерархии) проставить флажки в состояния “включен”/”выключен”/”неопределенно” в соответствии с вышеописанным алгоритмом. Пример — Скачивать файлы может только зарегистрированный пользователь!
Код 1C v 8.2 УП

 &НаСервере 
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)

// Создание и заполнение "обычного" объекта прикладного типа ДеревоЗначений,
// который будет отображен на управляемой форме
ДеревоОбъект = Новый ДеревоЗначений;
ДеревоОбъект.Колонки.Добавить("Узел", Новый ОписаниеТипов("Строка"));
ДеревоОбъект.Колонки.Добавить("Пометка", Новый ОписаниеТипов("Число"));
Для к1 = 1 По 3 Цикл
СтрокаУ1 = ДеревоОбъект.Строки.Добавить();
СтрокаУ1.Узел = "Узел"+к1;
Для к2 = 1 По 3 Цикл
СтрокаУ2 = СтрокаУ1.Строки.Добавить();
СтрокаУ2.Узел = СтрокаУ1.Узел+к2;
Для к3 = 1 По 3 Цикл
СтрокаУ3 = СтрокаУ2.Строки.Добавить();
СтрокаУ3.Узел = СтрокаУ2.Узел+к3;
КонецЦикла;
КонецЦикла;
КонецЦикла;

// Создание Реквизита формы типа ДанныеФормыДерево
МассивДобавляемыхРеквизитов = Новый Массив;
МассивДобавляемыхРеквизитов.Добавить(Новый РеквизитФормы("Дерево",
Новый ОписаниеТипов("ДеревоЗначений")));
Для Каждого Колонка Из ДеревоОбъект.Колонки Цикл
МассивДобавляемыхРеквизитов.Добавить(Новый РеквизитФормы(Колонка.Имя,
Колонка.ТипЗначения, "Дерево"));
КонецЦикла;
ИзменитьРеквизиты(МассивДобавляемыхРеквизитов);

// Преобразование объекта прикладного типа ДеревоЗначений
// в реквизит управляемой формы (данные формы)
ЗначениеВРеквизитФормы(ДеревоОбъект, "Дерево");

// Создание элемента формы типа ТаблицаФормы для отображения дерева
ЭлементДерево = Элементы.Добавить("Дерево", Тип("ТаблицаФормы"));
ЭлементДерево.ПутьКДанным = "Дерево";
ЭлементДерево.Отображение = ОтображениеТаблицы.Дерево;

Для Каждого Колонка Из ДеревоОбъект.Колонки Цикл
НовыйЭлемент = Элементы.Добавить(Колонка.Имя, Тип("ПолеФормы"),
ЭлементДерево);
НовыйЭлемент.ПутьКДанным = "Дерево." + Колонка.Имя;
Если НЕ Колонка.Имя = "Пометка" Тогда
НовыйЭлемент.Вид = ВидПоляФормы.ПолеВвода;
Иначе
НовыйЭлемент.Вид = ВидПоляФормы.ПолеФлажка;
НовыйЭлемент.ТриСостояния = Истина;
НовыйЭлемент.УстановитьДействие("ПриИзменении",
"ФлажокПриИзменении");
КонецЕсли;
КонецЦикла;

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

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

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

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

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

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

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

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

КонецЕсли;

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Источник

Читайте также:  Духи чайное дерево ив роше
Оцените статью