Преобразование Таблицы значений в Дерево Значений, с построением уровней
По теме из базы знаний
- 1С Рекомендуемо (Система требований к продуктам 1С)
- Заметочки про 1С:Предприятие 8 (редакция 22.06.2012)
- Управляемая форма 1С 8.2(8.3) – работа с деревом значений и таблицей значений. Часть III (Реализация трехпозиционного флажка)
- Конструктор результата системы компоновки данных для работы с деревом значений в тонком клиенте.
- Обзор имеющихся библиотек OneScript
Найденные решения
Остальные ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
(1)
ДеревоЗначений = ТаблицаЗначенийВДеревоЗначений(КаталогТоваров, "Категория")
Функция ТаблицаЗначенийВДеревоЗначений(ТЗ, ПоляГруппировок)
Группировки = СтрРазделить(ПоляГруппировок, ",", Ложь);
ДеревоЗначений = Новый ДеревоЗначений;
Для Каждого Колонка Из ТЗ.Колонки Цикл
ДеревоЗначений.Колонки.Добавить(Колонка.Имя, Колонка.ТипЗначения);
КонецЦикла;
СоздатьСтрокиДереваРекурсивно(ТЗ, ДеревоЗначений.Строки, Группировки);
Возврат ДеревоЗначений;
КонецФункции
Процедура СоздатьСтрокиДереваРекурсивно(ТаблицаЗначений, СтрокиДерева, Группировки, ИндексГруппировки = 0)
Если ИндексГруппировки = Группировки.Количество() Тогда
Для Каждого Стр Из ТаблицаЗначений Цикл
НоваяСтрока = СтрокиДерева.Добавить();
ЗаполнитьЗначенияСвойств(НоваяСтрока, Стр);
КонецЦикла;
Возврат
КонецЕсли;
ИмяГруппировки = Группировки[ИндексГруппировки];
ЗначенияГруппировки = ТаблицаЗначений.Скопировать(, ИмяГруппировки);
ЗначенияГруппировки.Свернуть(ИмяГруппировки);
Для Каждого СтрГруппа Из ЗначенияГруппировки Цикл
Значение = СтрГруппа[ИмяГруппировки];
НоваяСтрокаДерева = СтрокиДерева.Добавить();
Если СтрокиДерева.Родитель <> Неопределено Тогда
ЗаполнитьЗначенияСвойств(НоваяСтрокаДерева, СтрокиДерева.Родитель);
КонецЕсли;
НоваяСтрокаДерева[ИмяГруппировки] = Значение;
СтрокиГруппы = ТаблицаЗначений.Скопировать(Новый Структура(ИмяГруппировки, Значение));
СоздатьСтрокиДереваРекурсивно(СтрокиГруппы, НоваяСтрокаДерева.Строки, Группировки, ИндексГруппировки + 1);
КонецЦикла;
КонецПроцедуры
Показать
Лень - двигатель прогресса...
ТЗ = Новый ТаблицаЗначений();
ТЗ.Колонки.Добавить("Товар", Новый ОписаниеТипов("Строка", , Новый КвалификаторыСтроки(50)));
ТЗ.Колонки.Добавить("Количество", Новый ОписаниеТипов("Число", Новый КвалификаторыЧисла(1,0)));
ТЗ.Колонки.Добавить("НаДату", Новый ОписаниеТипов("Дата"));
Для Счетчик = 1 По 5 Цикл
НовСтрока = ТЗ.Добавить();
НовСтрока.Товар = "Товар " + Счетчик;
НовСтрока.Количество = 10 * Счетчик;
НовСтрока.НаДату = ТекущаяДата();
КонецЦикла;
ДеревоМечтаний = Новый ДеревоЗначений();
Для каждого Колонка Из ТЗ.Колонки Цикл
ДеревоМечтаний.Колонки.Добавить(Колонка.Имя, Колонка.ТипЗначения)
КонецЦикла;
Для каждого Строка Из ТЗ Цикл
НовСтрока = ДеревоМечтаний.Строки.Добавить();
ЗаполнитьЗначенияСвойств(НовСтрока, Строка);
КонецЦикла;
Показать
(8) Синтаксис строк вообще ничем не отличается в зависимости от уровней. Вопрос только в том, в какой уровень ты будешь засовывать свою строку, и по какому алгоритму определять эти уровни. А это никаким синтаксисом не помочь, тут только своими мозгами по своим критериям поиска/подбора и умением пользоваться самим этим поиском по дереву.
(8) Итак...
1) Параметры не передаются
2) Заполнение колонок Дерева не из ТЗ а прямым перебором
3) Заполнение значений строки тоже по каждому полю. См. ЗаполнитьЗначенияСвойств
Вердикт: частное решение.
ЗЫ. моветон самому себе ставить решение, а еще выкладывать скринами, а не текстом.
1) Параметры не передаются
Процедура ТаблицаЗначенийВДерево()
2) Заполнение колонок Дерева не из ТЗ а прямым перебором
3) Заполнение значений строки тоже по каждому полю. См. ЗаполнитьЗначенияСвойств
Вердикт: частное решение.
ЗЫ. моветон самому себе ставить решение, а еще выкладывать скринами, а не текстом.
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот