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)

Источник

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