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

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

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

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

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

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

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

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

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

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

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

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

(6) Делал по одному примеру. Там так было приведено.
Подскажите как правильно, пожалуйста? Я ищу решение.

Источник

ДеревоЗначений.Колонки Метод Добавить()

Сервер, толстый клиент, внешнее соединение, мобильное приложение(сервер).

Пример использования

Пример кода с использованием метода Добавить() :

//создание нового дерева значений дз = Новый ДеревоЗначений; //добавляем колонки НоваяКолонка = дз.Колонки.Добавить(, Новый ОписаниеТипов("Строка")); НоваяКолонка.Имя = "Наименование"; НоваяКолонка.Заголовок = "Наименование"; //однако удобнее сразу описывать все свойства колонки за один вызов: НоваяКолонка = дз.Колонки.Добавить("КодТовара", Новый ОписаниеТипов("Строка"), "Код товара"); 

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

Источник

Читайте также:  Чайное дерево против демодекоза

Дерево значений 1с. Описание и примеры использования

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

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

Строки и колонки имеют индексы, по которым к ним можно обращаться напрямую (начинаются с 0). Кроме этого, к колонкам можно обращаться по идентификатору.

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

Дерево значений является полностью динамическим объектом, т.е. Вы можете манипулировать не только строками дерева, добавляя и удаляя их, но и колонками.

Дерево значений может использоваться явно при создании в коде необходимого количества переменных типа ДеревоЗначений , либо неявно: при добавлении элемента управления ТабличноеПоле на обычную форму, и ТаблицаФормы — на управляемую. Здесь мы рассмотрим только программную работу с деревом значений.

Создание дерева значений

Как и большинство объектов встроенного языка, новая дерево значений может быть создано с помощью оператора Новый :

Свойства и методы дерева значений

Имя Тип Описание
Свойства
Колонки КоллекцияКолонокДереваЗначений содержит коллекцию колонок дерева значений
Строки КоллекцияСтрокДереваЗначений содержит коллекцию корневых строк дерева значений
Методы
ВыбратьСтроку() СтрокаДереваЗначений открывает диалог для интерактивного выбора строки дерева значений
Скопировать() ДеревоЗначений создает новый объект копированием текущего (копируются все колонки и строки)

Колонки дерева значений

Прежде чем начать работу с деревом значений, необходимо создать структуру колонок. Каждая колонка характеризуется следующими свойствами:

Имя Тип Описание
Имя Строка символьный идентификатор колонки, по которому к ней можно обращаться из кода. Может содержать только алфавитные символы, цифры и знаки подчеркивания. Причем, начинаться имя колонки может только с буквы или символа подчеркивания
Заголовок Строка строковое представление колонки на форме. Может содержать произвольные символы
ТипЗначения ОписаниеТипов тип значения содержимого ячеек в этой колонке. Свойство ограничивает пространство доступных значений, которые можно указать в данной колонке
Ширина Число ширина колонки на форме (выражается в количестве символов)

Доступ к колонкам производится через свойство Колонки объекта ДеревоЗначений . Для добавления новой колонки используется метод Колонки.Добавить():

дз.Колонки.Добавить("Наименование", Новый ОписаниеТипов("Строка")); дз.Колонки.Добавить("Количество", Новый ОписаниеТипов("Число")); дз.Колонки.Добавить("Свойство");//можно хранить произвольные данные 

Для того, чтобы определить наличие колонки с нужным именем используется метод Колонки.Найти():

найдКолонка = дз.Колонки.Найти("Наименование"); Если найдКолонка = Неопределено Тогда Сообщить("Колонка не найдена!"); Иначе Сообщить("Индекс колонки color: red;">+ дз.Колонки.Индекс(найдКолонка)); КонецЕсли; 

Перебор колонок выполняется следующим образом:

Для каждого Колонка Из дз.Колонки Цикл Сообщить(Колонка.Имя + ": " + Колонка.ТипЗначения); КонецЦикла; //Результат: // Наименование: Строка // Количество: Число // Свойство: 

Для удаления колонки используется метод Колонки.Удалить():

найдКолонка = дз.Колонки.Найти("Свойство"); Если НЕ найдКолонка = Неопределено Тогда дз.Колонки.Удалить(найдКолонка); КонецЕсли; 

Методы коллекции колонок дерева значений

Вставить() Вставляет новую колонку в указанную позицию коллекции
Добавить() Добавляет новую колонку в конец коллекции
Индекс() Возвращает индекс колонки в коллекции колонок
Получить() Возвращает колонку по ее индексу
Количество() Возвращает количество колонок в коллекции
Найти() Ищет колонку в коллекции по имени
Очистить() Удаляет все колонки из коллекции
Сдвинуть() Сдвигает колонку влево или вправо
Удалить() Удаляет колонку из коллекции
Читайте также:  Осина дерево осенью листья

Строки дерева значений

С колонками разобрались. Давайте теперь разберемся со строками. Строки дерева значений можно программно добавлять и удалять, перемещать и сортировать, а также выполнять операции поиска и отбора.

В отличие от таблицы значений, доступ к строкам дерева значений производится через свойство Строки объекта ДеревоЗначений или объекта СтрокаДереваЗначений . Каждая строка является узлом иерархии, поэтому обладает следующими свойствами и методами:

Имя Тип Описание
Свойства
Родитель СтрокаДереваЗначений ссылается на строку верхнего уровня. Для корневой строки имеет значение Неопределено
Строки КоллекцияСтрокДереваЗначений содержит коллекцию подчиненных строк
Методы
Владелец() ДеревоЗначений возвращает ссылку на дерево значений, которому принадлежит строка
Уровень() Число возвращает уровень вложенности строки в иерархии дерева. Для строки, не имеющей родителя, уровень будет равен 0 (верхний уровень или корневой уровень). Подчиненная ей строка будет иметь уровень 1 и т.д.

Добавление и удаление строк

Для добавления новой строки используется метод Строки.Добавить(). Метод возвращает объект СтрокаДереваЗначений , с которым доступны дальнейшие манипуляции:

СтрокаДЗ = дз.Строки.Добавить(); 

И только теперь мы можем заполнить строку данными. Для этого обращаемся к ячейкам строки, указывая идентификаторы колонок через точку:

СтрокаДЗ.Наименование = "Стул деревянный"; СтрокаДЗ.Количество = 1; СтрокаДЗ.Свойство = ТекущаяДата(); 

Для удаления строки используется метод Строки.Удалить(). Строку можно удалить передав методу либо саму строку, либо ее индекс:

//удаление строки дз.Строки.Удалить(СтрокаДЗ); //удаление по индексу ИндексСтроки = дз.Строки.Индекс(СтрокаДЗ); дз.Строки.Удалить(ИндексСтроки); //безопасное удаление НайдСтрока = дз.Строки.Найти("Стул деревянный", "Наименование"); Если НЕ НайдСтрока = Неопределено Тогда дз.Строки.Удалить(НайдСтрока); КонецЕсли; 

Перебор строк дерева значений

Для перебора строк удобнее всего использовать оператор цикла Для Каждого . В редких случаях оправдано применение цикла Для :

Для Каждого СтрокаДЗ Из дз.Строки Цикл ИндСтроки = дз.Строки.Индекс(СтрокаДЗ); Сообщить("Строка[" + ИндСтроки + "]: " + СтрокаДЗ.Наименование); КонецЦикла; //в редких случаях Для ИндСтроки = 0 По дз.Строки.Количество() - 1 Цикл СтрокаДЗ = дз.Строки.Получить(ИндСтроки); Сообщить("Строка[" + ИндСтроки + "]: " + СтрокаДЗ.Наименование); КонецЦикла; 

Поиск строк

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

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

Поиск возможен даже среди вложенных строк. Внимательно изучите документацию к методам Строки.Найти() и Строки.НайтиСтроки().

Читайте также:  Чем покрыть разделочные доски из дерева

Все методы коллекции строк дерева значений:

Вставить() Вставляет строку на указанное место коллекции строк
ВыгрузитьКолонку() Выгружает значения ячеек указанной колонки из текущей коллекции строк в массив значений
Добавить() Добавляет новую строку в коллекцию строк
ЗагрузитьКолонку() Загружает значения из массива в ячейки указанной колонки коллекции строк
Индекс() Возвращает индекс строки дерева значений в коллекции
Итог() Возвращает просуммированный итог по колонке дерева значений
Количество() Возвращает количество строк в коллекции строк
Найти() Выполняет поиск строки по значению
НайтиСтроки() Выполняет поиск строк по указанным параметрам
Очистить() Удаляет все строки из текущей коллекции строк
Получить() Возвращает строку по ее индексу
Сдвинуть() Сдвигает строку вверх или вниз по коллекции строк
Сортировать() Выполняет сортировку строк в коллекции по указанным колонкам
Удалить() Удаляет строку из коллекции строк

Иерархию свойств и типов значений, связанных с деревом значений, схематически можно представить в виде дерева:

Источник

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