1с дерево значений установить тип

Установка типа значения поля дерева значений.

На форме есть дерево значений. Поле СотрудникКритерий должно
принимать тип справочника либо сотрудники, либо критерии.
В зависимости от уровня ветки дерева. В данный момент никак
не получается установить тип этого поля. И не пойму как это сделать.
У этого поля снята галка выбирать тип и Я пробую его задавать
программно, в процедуре Процедура, —

ДеревоКритериевПередНачаломДобавления(Элемент, Отказ, Копирование, Родитель, Группа, Параметр)

Если Элементы.ДеревоКритериев.ТекущиеДанные.ПолучитьРодителя() = Неопределено Тогда
Элемент.ТекущийЭлемент.ДоступныеТипы = Новый ОписаниеТипов(«СправочникСсылка.Сотрудники»);
Иначе
Элемент.ТекущийЭлемент.ДоступныеТипы = Новый ОписаниеТипов(«СправочникСсылка.C05_КритерииОценкиКачестваРаботыСотрудника»);
КонецЕсли;

Почему поля не устанавливается, задаваемый тип.
Подскажите пожалуйста, что я не так делаю?

В поле не получается совершить выбор значения.
Так как не устанавливается тип.

Пробую в этой процедуре. То же самое, в поле не могу выбрать тип. Подскажите, пожалуйста как будет правильно?

&НаКлиенте
Процедура ДеревоКритериевСотрудникКритерийНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка)
Если Элементы.ДеревоКритериев.ТекущиеДанные.ПолучитьРодителя() = Неопределено Тогда
Элемент.ДоступныеТипы = Новый ОписаниеТипов(«СправочникСсылка.Сотрудники»);
Элементы.ДеревоКритериев.ТекущийЭлемент.ДоступныеТипы = Новый ОписаниеТипов(«СправочникСсылка.Сотрудники»);
//Элемент.ОграничениеТипа = Новый ОписаниеТипов(«СправочникСсылка.Сотрудники»);
Иначе
Элемент.ДоступныеТипы = Новый ОписаниеТипов(«СправочникСсылка.C05_КритерииОценкиКачестваРаботыСотрудника»);
Элементы.ДеревоКритериев.ТекущийЭлемент.ДоступныеТипы = Новый ОписаниеТипов(«СправочникСсылка.C05_КритерииОценкиКачестваРаботыСотрудника»);
//Элемент.ОграничениеТипа = Новый ОписаниеТипов(«СправочникСсылка.C05_КритерииОценкиКачестваРаботыСотрудника»);
КонецЕсли;
КонецПроцедуры

(3) Там у реквизита дерева значений, составной тип.
Строка и 2 справочника. При выборе предоставляется выбор
реквизита для заполнения. Но это же не подходит. в плане
удобства ввода данных.

Получается либо вообще без типа поле оставить, или что бы
была возможность выбора типа данных. А как это сделать программно? Подскажите пожалуйста?

Если ветка дерева верхнего уровня, то выбирается тип
справочника сотрудники. Если подчиненная ей ветка
то тип справочника критерий оценки качества работы сотрудника.

Читайте также:  Моды фс 19 деревья украшения

Источник

v8: 8.3 как при заполнение дерево значений, указывать тип для каждой ячейки. помогите

1 колонка имеет составной тип строка,число,булево,дата. при заполнение нужно указать 1 из этих типов. как это сделать ?

(1) что то не получается. делал вот так.
ВыборкаСпр =Справочники.СвойстваПротокола.Выбрать();
Пока ВыборкаСпр.Следующий() Цикл
НовСвойство = Объект.СвойствоПротокола.Добавить();
ЗаполнитьЗначенияСвойств(НовСвойство,ВыборкаСпр.Ссылка);
НовСвойство.Значение = ВыборкаСпр.Ссылка.ТипЗначения;
КонецЦикла;

(6) да это пример. у каждого показателя свой тип значения для заполнения. даже вот так не хочет НовСвойство.Значение = «»;

поведение должно быть одинаковым ? если это будет табличная часть документа. тип должен все равно присвоится или нет ?

(9) а при чем тут ссылка на справочник. если я с этого справочника получаю тип для ячейки и для каждой строки тип ячейки может быть свой

(11) этот вариант ограничивает составной тип реквизита при начале его выбора. А если заполняешь значением составного типа, проблем быть вообще не должно. И мне почему-то кажется, что тебе надо именно ограничение типа, чтобы не предлагало выбрать тип сперва из списка, а сразу открывался диалог выбора значения нужного типа.

все чудесно работает. разбираюсь как теперь передать нужные типы по ссылке справочника. спасибо

(15) а зачем его определять? Он у тебя и так известен — в твоем случае он составной. Если надо принудительно еще раз определить — то ТипЗнч. Но только зачем?)

(16) заполняю параметрами протокол. пользователь должен вводить свои значение. а тип определять надо что бы удобней было. заполняют то на планшете.

(16) то как мне тип получить ссылки ? пытаюсь при заполнение сделать так но пусто. НовСвойство.Т = Строка(ТипЗНЧ(ВыборкаСпр.Ссылка.ТипЗначения));

(18) хм. работает. Элемент.ОграничениеТипа = Новый ОписаниеТипов(Элементы.ДЗСвойств.ТекущиеДанные.ТипЗначения);
Элемент.ВыбиратьТип = Ложь;

Источник

Работа с деревом значений в 1С

В последнее время аномально часто мне в работе попадалось дерево значений, поэтому решил написать на эту тему статью.

Попробую рассмотреть способы решения основных задач связанных с деревом значений, при этом постараюсь писать «без воды».

Читайте также:  Все версии линукс дерево

Дерево значений

Из названия объекта понятно, что дерево значений служит для хранения/отображения какой-либо иерархической информации. Каждая строка дерева значений может иметь какое-то количество подчиненных строк, при этом такие операции как поиск, сортировка, подсчет итогов можно проводит с учетом уровня иерархии и подчиненных строк.

Кроме этого, каждая строка дерева значений имеет свойства «Родитель» и «Строки».

Дерево значений на форме

Визуальное представление дерева значений обеспечивает элемент «Табличное поле».

Заполнение дерева значений

При заполнении дерева значений нужно помнить, что сам объект «ДеревоЗначений» и все его строки имеют свойство «Строки»и добавление новых строк на любом уровне дерева осуществляется через это свойство.

Сам же объект «ДеревоЗначений» имеет еще и свойство «Колонки», которое ничем не отличается от аналогичного свойства у таблицы значений.

Небольшой пример программного заполнения таблицы значений для управляемых форм:

Обход дерева значений

Обход всех строк дерева значений делается при помощи рекурсии, вот так будет выглядеть код для обхода дерева созданного в примере выше:

Как свернуть и развернуть дерево значений

Сворачивается и разворачивается дерево значений очень просто.

Привел три примера: для сворачивания текущей строки, для сворачивания строк верхнего уровня, для сворачивания вообще всех строк (рекурсия).

Два примера: для разворачивания текущей строки и для разворачивания всех строк. У метода «Развернуть» есть дополнительный параметр, который позволяет указать нужно ли разворачивать подчиненные строки.

Как удалить строку и очистить дерево значений

Тут опять же все просто, нужно помнить, что при удалении/очистке строки, все подчиненные строки удаляются.

Точно также можно очистить от подчиненных элементов другую другую строку.

Удалить строку дерева значений не сложнее — нужно только знать ее индекс:

Запрос и дерево значений

Результат выполнения запроса очень легко преобразовать в дерево значений, для этого нужно воспользоваться методом «Выгрузить» и указать параметр «ТипОбхода» отличным от того, что стоит по умолчанию, т.е. «ПоГруппировкам» или «ПоГруппировкамСИерархией».

Читайте также:  Груша хосу высота дерева

Если на форме имеется реквизит «ДеревоЗначений» и связанный с ним визуальный элемент, то можно сделать примерно так:

Причем полного совпадения колонок и типов не требуется — лишние колонки будут просто отброшены, а колонки с различными типами будут заполнены пустыми значениями.

Дерево значений в таблицу значений и обратно

Преобразовать дерево значений в таблицу значений и наоборот достаточно просто, ведь дерево значений это та же таблица значений, но с дополнительной колонкой — «Родитель». У меня есть отдельная статья о том как преобразовать дерево значений в таблицу значений и обратно.

Отбор в дереве значений

Стандартного отбора в дереве значений не предусмотрено. Так получилось потому, что непонятно как разрешать ситуацию, когда родительский элемент не удовлетворяет условию отбора, а подчиненные ему элементы удовлетворяют.

Таким образом, если Вам нужно реализовать отбор в дереве значений, то начать нужно с решения именно этой проблемы. А уже после этого можно придумать несколько способов реализовать задуманное.

Первый способ — накладывать отбор до вывода дерева значений (в запросе например). Это не классический отбор, но в тех случаях когда этот способ применим, то следует применять именно его, так как это почти всегда быстрее и правильнее чем что-либо другое.

Второй способ — перебор всех строк дерева значений. Описывать здесь особенно нечего, нужно просто взять обход дерева значений, проверять каждую строку на соответствие условию отбора и удалять лишние строки.

Еще один способ заключается в том, чтобы преобразовать дерево значений в таблицу значений, сделать отбор в таблице значений, проконтролировать результат (почистить «хвосты» — строки, родитель которых не удовлетворил условию отбора) и выполнить обратное преобразование в дерево значений.

На этом все, рассказал все, что знал, надеюсь мне удалось сэкономить Вам немного времени.

Если Вы нашли ошибку или неточность, пожалуйста, выделите фрагмент текста и нажмите Ctrl+Enter.

(оценок: 36, средняя оценка: 4,64 из 5)

Источник

Оцените статью