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

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

Создал дерево значений, мне необходимо добавить Иерархический вид, например по Номенклатуре. В моем случае идет создание строк по типо родитель-поле-поле-поле, а нужно в виде родитель-поле, родитель-поле. Как можно правильно настроить дерево и где, чтобы можно было строить дерево в таком виде? Т.е. нужна группировка по определенному полю, в этой группе может быть несколько строк, но при этом можно создавать несколько групп различных

МоеДерево = Новый ДеревоЗначений; МоеДерево.Колонки.Добавить("Номенклатура"); МоеДерево.Колонки.Добавить("ИмяРеквизита"); МоеДерево.Колонки.Добавить("ЗначениеРеквизита"); Для Каждого СтрТаблЗначений Из ТаблЗначений Цикл //перебираем строки таблицы из результата запроса СтрокаРодитель = МоеДерево.Строки.Добавить(); //1-й уровень дерева СтрокаРодитель.Номенклатура = СтрТаблЗначений.Номенклатура; СтрокаПодчиненная = СтрокаРодитель.Строки.Добавить(); // 2 уровень дерева, добавляем строки подчиненные строке-родителю СтрокаПодчиненная.Номенклатура = "-"; СтрокаПодчиненная.ИмяРеквизита = СтрТаблЗначений.Код; СтрокаПодчиненная.ЗначениеРеквизита = СтрТаблЗначений.Наименование; КонецЦикла;
МоеДерево = Новый ДеревоЗначений; МоеДерево.Колонки.Добавить("Номенклатура"); МоеДерево.Колонки.Добавить("ИмяРеквизита"); МоеДерево.Колонки.Добавить("ЗначениеРеквизита"); Для Каждого СтрТаблЗначений Из ТаблЗначений Цикл //перебираем строки таблицы из результата запроса СтрокаРодитель = МоеДерево.Строки.Добавить(); //1-й уровень дерева СтрокаРодитель.Номенклатура = СтрТаблЗначений.Номенклатура; СтрокаПодчиненная = СтрокаРодитель.Строки.Добавить(); // 2 уровень дерева, добавляем строки подчиненные строке-родителю СтрокаПодчиненная.Номенклатура = "-"; СтрокаПодчиненная.ИмяРеквизита = СтрТаблЗначений.Код; СтрокаПодчиненная.ЗначениеРеквизита = СтрТаблЗначений.Наименование; КонецЦикла;

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

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

&НаСервере Процедура ПолучитьДеревоНаСервере() Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ | Номенклатура.Родитель КАК Родитель, | Номенклатура.Ссылка КАК Номенклатура |ИЗ | Справочник.Номенклатура КАК Номенклатура |ИТОГИ ПО | Родитель"; ДеревоЗнач = Запрос.Выполнить().Выгрузить(ОбходРезультатаЗапроса.ПоГруппировкамСИерархией); ЗначениеВРеквизитФормы(ДеревоЗнач, "ДЗ"); КонецПроцедуры &НаКлиенте Процедура ПолучитьДерево(Команда) ПолучитьДеревоНаСервере(); КонецПроцедуры
&НаКлиенте Процедура СформироватьДерево(Команда) СформироватьДеревоНаСервере(); КонецПроцедуры &НаСервере Процедура СформироватьДеревоНаСервере() Запрос = Новый Запрос( "ВЫБРАТЬ | Т.Ссылка КАК Ссылка, | Т.Родитель КАК Родитель |ИЗ | Справочник.Номенклатура КАК Т"); ТЗ = Запрос.Выполнить().Выгрузить(); ТЗ.Индексы.Добавить("Родитель"); ДобавитьСтрокиДереваРекурсивно(ТЗ, Дерево, Справочники.Номенклатура.ПустаяСсылка()); КонецПроцедуры &НаСервере Процедура ДобавитьСтрокиДереваРекурсивно(ТЗ, СтрокаДерева, Родитель) МассивСтрок = ТЗ.НайтиСтроки(Новый Структура("Родитель", Родитель)); Строки = СтрокаДерева.ПолучитьЭлементы(); Для Каждого Стр Из МассивСтрок Цикл НоваяСтрока = Строки.Добавить(); ЗаполнитьЗначенияСвойств(НоваяСтрока, Стр); ДобавитьСтрокиДереваРекурсивно(ТЗ, НоваяСтрока, Стр.Ссылка) КонецЦикла; КонецПроцедуры

Источник

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

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

Приветствую.
Есть таблица значений с шестью колонками, необходимо отобразить как дерево значений следующим образом:
+ Реквизит1Внешний; Реквизит1Внутренний;
++ Реквизит2Внешний; Реквизит2Внутренний;
+++ Реквизит3Внешний; Реквизит3Внутренний;

Опишу — делаю синхронизацию. Необходимо внешнему реквизиту сопоставить внутренний. Первоначально колонки «Внутренний» отобразятся пустыми. В родителе группировки присваиваю значение «Внутренний» и заполняю это значение у всех строк данной группировки.

Можно такое реализовать?
Спасибо.

(2) ну как бы объяснить. вот ТЗ:
Центральный офис; Администрация; Иванов;
Центральный офис; Администрация; Петров;
Центральный офис; Бухгалтерия; Петрова;
Филиал 1; Бухгалтерия; Маша;
Филиал 1; Бухгалтерия; Петрова;

Данные берутся из файла, эти данные нужно сопоставить с данными в БД. Я добавляю в ТЗ колнки, для сопоставления. Как видно из примера наименования могут пересекаться, поэтому нужно рассматривать как иерархию элементов.

Вопрос — как отобразить на форме такую структуру, чтобы во главе иерархии были две колонки, одна колонка заполнена данными из файла, другая пустая, заполнится в процессе.
Результат должен быть такой:
+Центральный офис; «»;
++Администрация; «»;
+++Иванов; «»;
+++Петров; «»;
++Бухгалтерия; «»;
+++Петрова; «»;
+Филиал 1; «»;
++Бухгалтерия; «»;
+++Маша; «»;
+++Петрова; «»;

Если я в группировке, например +Центральный офис; «»; в пустую колонку устанавливаю значение элемента из справочника, то я это значение автоматом проставляю на все строки подчиненной иерархии.

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

я бы делал так.
1) без СКД: получаешь таблицу значений. подсовываешь в запрос, делаешь еще 1 колонку где суммируешь коды с наименования так, чтобы получился 1 реквизит-ключ из двух полей. по нему делаешь группировку в итогах и в ресурсы ставишь МАКСИМУМ() составных полей
2) с СКД: берешь таблицу значений, подсовываешь в СКД при компоновке, делаешь группировку по двум колонкам.

Читайте также:  Деревья относятся к живым

Да просто таблицу в запрос, и итог по двум колонкам. А потом результат выгружаешь с обходом по иерархии. Вот тебе и дерево

(0) ну а если без велосипеда и чисто запросом тогда это делается так :

ВЫБРАТЬ
«Центральный офис» КАК Подразделение,
«Администрация» КАК Отдел,
«Иванов» КАК ФИО
ПОМЕСТИТЬ ВТ_НачальныеДанные

ВЫБРАТЬ
«Центральный офис»,
«Администрация»,
«Петров»

ВЫБРАТЬ
«Центральный офис»,
«Бухгалтерия»,
«Петрова»

ВЫБРАТЬ
«Филиал 1»,
«Бухгалтерия»,
«Маша»

ВЫБРАТЬ
«Филиал 1»,
«Бухгалтерия»,
«Петрова»
;

Итоги
ВЫБОР
КОГДА ВТ_НачальныеДанные.Отдел ЕСТЬ NULL
ТОГДА ВТ_НачальныеДанные.Подразделение

ИНАЧЕ ВТ_НачальныеДанные.Отдел
КОНЕЦ КАК ФИО
ПО
Подразделение,
Отдел

Источник

Дерево значений. Группировка по двум колонкам.

Приветствую.
Есть таблица значений с шестью колонками, необходимо отобразить как дерево значений следующим образом:
+ Реквизит1Внешний; Реквизит1Внутренний;
++ Реквизит2Внешний; Реквизит2Внутренний;
+++ Реквизит3Внешний; Реквизит3Внутренний;

Опишу — делаю синхронизацию. Необходимо внешнему реквизиту сопоставить внутренний. Первоначально колонки «Внутренний» отобразятся пустыми. В родителе группировки присваиваю значение «Внутренний» и заполняю это значение у всех строк данной группировки.

Можно такое реализовать?
Спасибо.

(2) ну как бы объяснить. вот ТЗ:
Центральный офис; Администрация; Иванов;
Центральный офис; Администрация; Петров;
Центральный офис; Бухгалтерия; Петрова;
Филиал 1; Бухгалтерия; Маша;
Филиал 1; Бухгалтерия; Петрова;

Данные берутся из файла, эти данные нужно сопоставить с данными в БД. Я добавляю в ТЗ колнки, для сопоставления. Как видно из примера наименования могут пересекаться, поэтому нужно рассматривать как иерархию элементов.

Вопрос — как отобразить на форме такую структуру, чтобы во главе иерархии были две колонки, одна колонка заполнена данными из файла, другая пустая, заполнится в процессе.
Результат должен быть такой:
+Центральный офис; «»;
++Администрация; «»;
+++Иванов; «»;
+++Петров; «»;
++Бухгалтерия; «»;
+++Петрова; «»;
+Филиал 1; «»;
++Бухгалтерия; «»;
+++Маша; «»;
+++Петрова; «»;

Читайте также:  Индексы баз данных деревья

Если я в группировке, например +Центральный офис; «»; в пустую колонку устанавливаю значение элемента из справочника, то я это значение автоматом проставляю на все строки подчиненной иерархии.

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

я бы делал так.
1) без СКД: получаешь таблицу значений. подсовываешь в запрос, делаешь еще 1 колонку где суммируешь коды с наименования так, чтобы получился 1 реквизит-ключ из двух полей. по нему делаешь группировку в итогах и в ресурсы ставишь МАКСИМУМ() составных полей
2) с СКД: берешь таблицу значений, подсовываешь в СКД при компоновке, делаешь группировку по двум колонкам.

Да просто таблицу в запрос, и итог по двум колонкам. А потом результат выгружаешь с обходом по иерархии. Вот тебе и дерево

(0) ну а если без велосипеда и чисто запросом тогда это делается так :

ВЫБРАТЬ
«Центральный офис» КАК Подразделение,
«Администрация» КАК Отдел,
«Иванов» КАК ФИО
ПОМЕСТИТЬ ВТ_НачальныеДанные

ВЫБРАТЬ
«Центральный офис»,
«Администрация»,
«Петров»

ВЫБРАТЬ
«Центральный офис»,
«Бухгалтерия»,
«Петрова»

ВЫБРАТЬ
«Филиал 1»,
«Бухгалтерия»,
«Маша»

ВЫБРАТЬ
«Филиал 1»,
«Бухгалтерия»,
«Петрова»
;

Итоги
ВЫБОР
КОГДА ВТ_НачальныеДанные.Отдел ЕСТЬ NULL
ТОГДА ВТ_НачальныеДанные.Подразделение

ИНАЧЕ ВТ_НачальныеДанные.Отдел
КОНЕЦ КАК ФИО
ПО
Подразделение,
Отдел

Источник

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