Добавление строк в дерево значений 1с

Добавление строк в дерево значений 1с

Объект конфигурации 1С:Предприятие «дерево значений» представляет собой набор значений любого типа, схожий с другим часто используемым объектом — таблицей значений. Аналогично таблице значений он содержит строки и столбцы. Отличие состоит в том, что строки дерева значений имеют иерархическую структуру, т.е. подчинены друг другу.

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

Создание строки дерева верхнего уровня иерархии и запись информации:

Добавление подчиненной строки:

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

Для каждого Строка0 из Дерево.Строки Цикл
Сообщить (Строка0.Колонка);
Для каждого Строка1 из Строка0.Строки Цикл

КонецЦикла;
КонецЦикла;

Такой способ имеет один существенный недостаток — мы должны заранее знать количество уровней иерархии дерева значений, и это количество должно быть небольшим, иначе количество вложенных циклов будет чересчур велико. В случае, если заранее неизвестно количество уровней иерархии, необходимо использовать рекурсию, а механизм обхода оформить отдельной процедурой.

Процедура ОбходДерева(Элемент)
ПодчиненныйЭлемент=Элемент.Строки;
Для каждого Строка из ПодчиненныйЭлемент Цикл
Сообщить (Строка.Колонка);
ОбходДерева(Строка);
КонецЦикла;
КонецПроцедуры;

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

Для каждого Строка из Дерево.Строки Цикл
Сообщить (Строка.Колонка);
ОбходДерева(Строка);
КонецЦикла;

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

Программное создание дерева значений

Как уже упоминалось выше, каждая строка имеет свойство Строки , которое содержит коллекцию дочерних строк. И сам объект ДеревоЗначений имеет свойство Строки , которое содержит коллекцию строк верхнего уровня.

  • Добавляет колонку в конец коллекции колонок дерева значений.
  • Возвращаемое значение: КолонкаДереваЗначений .
  • Добавляет строку в конец коллекции строк данного уровня дерева значений.
  • Возвращаемое значение: СтрокаДереваЗначений .

    Заполнить табличное поле на форме

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

    Пример программного заполнения дерева значений для управляемых форм:

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

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

    Свернуть и развернуть дочерние строки элемента дерева значений можно с помощью методов Свернуть() и Развернуть() .

  • Сворачивает узел в указанной строке дерева.
  • ИдектификаторСтроки — идентификатор строки таблицы.
  • Разворачивает узел в указанной строке дерева.
  • ИдектификаторСтроки — идентификатор строки таблицы.
  • СПодчиненными — определяет необходимость раскрытия подчиненных узлов.
  • Получает коллекцию элементов дерева верхнего уровня.
  • Возвращаемое значение: ДанныеФормыКоллекцияЭлементовДерева .
  • Получает коллекцию дочерних элементов.
  • Возвращаемое значение: ДанныеФормыКоллекцияЭлементовДерева .
Читайте также:  Как разобрать epson cx3700

Для представления в форме объектов конфигурации (справочники, документы и т.п.) существуют специальные типы данных:

  • ДанныеФормыСтруктура — содержит набор свойств произвольного типа. Свойствами могут быть другие структуры, коллекции или структуры с коллекциями. Таким типом представляется, например, в форме СправочникОбъект .
  • ДанныеФормыКоллекция — это список типизированных значений, похожий на массив. Доступ к элементу коллекции осуществляется по индексу или по идентификатору. Доступ по идентификатору может отсутствовать в некоторых случаях. Это обусловлено типом прикладного объекта, который представлен этой коллекцией. Идентификатором может быть любое целое число. Таким типом представляется, например, в форме табличная часть.
  • ДанныеФормыСтруктураСКоллекцией — это объект, который представлен в виде структуры и коллекции одновременно. С ним можно обращаться как с любой из этих сущностей. Таким типом представляется, например, в форме набор записей.
  • ДанныеФормыДерево — объект предназначен для хранения иерархических данных.

Прикладной объект представлен либо одним, либо несколькими элементами данных формы. Например, документ, содержащий табличную часть, будет представлен объектом типа ДанныеФормыСтруктура (собственно документ), которому подчинен объект типа ДанныеФормыКоллекция (табличная часть документа).

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

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

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

  • Значение (обязательный, тип Произвольный ). Искомое значение.
  • Колонки (необязательный, тип Строка ). Список имен колонок, в которых будет осуществляться поиск, разделенных запятыми. Если параметр не указан, поиск осуществляется по всем колонкам дерева. Значение по умолчанию — Пустая строка.
  • ВключатьПодчиненные (необязательный, тип Булево ). Определяет, будут ли участвовать в поиске строки подчиненных коллекций (если таковые имеются). Если Истина — строки подчиненных коллекций участвуют в поиске. Значение по умолчанию — Ложь .

Метод осуществляет поиск значения в дереве в указанных колонках коллекции строк дерева значений. Возвращает строку (тип СтрокаДереваЗначений ), которая содержит искомое значение. Если значение не найдено, то возвращается значение Неопределено . Предназначен для поиска уникальных значений.

Читайте также:  K9n6sgm v инструкция подключения

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

Рассмотрим работу с деревом значений на примере решения следующей задачи:

Выведем в строки даты (год, месяц, число) за 2013, 2014 годы в три уровня. На первом уровне будет год, на втором месяц и на третьем день.

Для этого поместим на форму табличное поле.

Перейдем в его палитру свойств.

Укажем тип значения «ДеревоЗначений».

Укажем, что это дерево.

Теперь добавим в табличное поле колонку «Дата».

Далее перейдем в палитру свойств колонки «Дата».

Установим галку «ОтображатьИерархию».

Поместим алгоритм формирования строк дерева в процедуру обработки открытия формы.

Алгоритм примерно следующий:

Теперь разберем его.

Первое что необходимо сделать, это объявить переменную, содержащую строковое представление месяца.

Потом создадим массив, элементы которого хранят год; месяцы и дни, по которым необходимо вывести.

МассивГод = Новый Массив ; МассивГод . Добавить ( ) ; МассивГод . Добавить ( ) ;

Первый цикл будет обходить годы, содержащиеся в массиве и добавлять их в наше дерево на первый уровень строк.

Для каждого СтрокаГод Из МассивГод Цикл Дата = Дата ( "" + СтрокаГод + ) ; СтрокаДереваГод = Дерево . Строки . Добавить ( ) ; СтрокаДереваГод . Дата = Год ( Дата ) ; … КонецЦикла ;

Второй цикл обходит месяцы и заносит их на второй уровень строк, родителями которых являются строки, введенные нами выше (содержащие год).

Для Кол = По Цикл СтрокаДереваМесяц = СтрокаДереваГод . Строки . Добавить ( ) ; СтрокаДереваМесяц . Дата = ПолучитьПредставлениеМесяца ( Месяц ( Дата ) ) ; КоличествоДнейВМесяце = День ( КонецМесяца ( Дата ) ) ; … Дата = ДобавитьМесяц ( Дата , ) ; КонецЦикла ;

В этом цикле мы используем функцию « ПолучитьПредставлениеМесяца ( Месяц ) », которая возвращает строковое представление месяца по переданному номеру.

Читайте также:  Модуль работы силы трения действующей на автобус

Функция ПолучитьПредставлениеМесяца ( НомерМесяца ) ПредставлениеМесяца = СоответствиеМесяцы . Получить ( НомерМесяца ) ; Возврат ? ( ПредставлениеМесяца = Неопределено , НомерМесяца , ПредставлениеМесяца ) ; КонецФункции // ПолучитьПредставлениеМесяца()

Для перехода к следующему месяцу используем встроенную функцию « ДобавитьМесяц ( Дата , ) ».

И, наконец, третий цикл обеспечивает заполнение дней месяца, строки которого является их родителями.

Для КолДней = По КоличествоДнейВМесяце Цикл СтрокаДереваДень = СтрокаДереваМесяц . Строки . Добавить ( ) ; СтрокаДереваДень . Дата = Строка ( КолДней ) ; КонецЦикла;

Чтобы узнать сколько дней в каждом конкретном месяце мы будем использовать встроенную функцию КонецМесяца ( ) , передавая ей, обрабатываемую в текущий момент, дату.

КоличествоДнейВМесяце = День ( КонецМесяца ( Дата ) ) ;

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

СоответствиеМесяцы = Новый Соответствие ; СоответствиеМесяцы . Вставить ( , ) ; СоответствиеМесяцы . Вставить ( , ) ; СоответствиеМесяцы . Вставить ( , ) ; СоответствиеМесяцы . Вставить ( , ) ; СоответствиеМесяцы . Вставить ( , ) ; СоответствиеМесяцы . Вставить ( , ) ; СоответствиеМесяцы . Вставить ( , ) ; СоответствиеМесяцы . Вставить ( , ) ; СоответствиеМесяцы . Вставить ( , ) ; СоответствиеМесяцы . Вставить ( , ) ; СоответствиеМесяцы . Вставить ( , ) ; СоответствиеМесяцы . Вставить ( , ) ;

Готово. Теперь при открытии формы происходит формирование строк дерева в три уровня.

Скачать готовый пример Работа с деревом значений (часть 1)

Ссылка на основную публикацию
Гугл таблицы условное форматирование формулы
518583 просмотра 6 ответа 2056 Репутация автора Я использую Google Sheets для ежедневной панели. Мне нужно изменить цвет фона ячейки...
Выскакивает инструкция печать на обеих сторонах
Выполнять двустороннюю печать на принтере не только экономно в плане затрат листов, но иногда бывает очень удобно, например, при распечатке...
Вычислить арктангенс в градусах
Арктангенс — обратная тригонометрическая функция. Общепринятое обозначение арктангенса — arctg x. При этом довольно часто, особенно в зарубежной литературе можно...
Диагонали куба пересекаются под прямым углом
Куб – правильный многогранник, каждая грань которого представляет собой квадрат. Все ребра куба равны. Свойства куба: 1. В кубе $6$...
Adblock detector