Есть таблица значений с двумя реквизитами: "Клиент" и "НомерТелефона".
За клиентом может быть закреплено несколько номеров телефонов, по этому клиенты могут повторяться с разными строками.
Подскажите пожалуйста, как вывести на УФ дерево, на верхнем уровне которого будет находиться "Клиент", при открытии которого будут отображаться его номера телефонов.
За клиентом может быть закреплено несколько номеров телефонов, по этому клиенты могут повторяться с разными строками.
Подскажите пожалуйста, как вывести на УФ дерево, на верхнем уровне которого будет находиться "Клиент", при открытии которого будут отображаться его номера телефонов.
По теме из базы знаний
Найденные решения
Остальные ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
запихнуть тз в запрос. в запросе сделать группировку по колонке клиент. и на выходе получите дерево. а дальше просто его вывести на форму
или выгрузить колонку клиент из этой тз в другую. Свернуть строки. потом обходом получившейся тз искать строки в исходной тз по клиенту и построить так дерево
или выгрузить колонку клиент из этой тз в другую. Свернуть строки. потом обходом получившейся тз искать строки в исходной тз по клиенту и построить так дерево
Эммм... Просто пробегаешься по таблице значений, отсортированной по полю "Клиент". При изменении значения клиента относительно предыдущего добавляешь в дерево ветку верхнего уровня и пока он тот же самый - добиваешь по нему телефоны.
(3) А как заполнять дерево? Пытаюсь вот так, но получаю ошибку при попытки записи родителя, так как данный реквизит только для чтения...Что я делаю не так?
ДеревоЗначений=ДанныеФормыВЗначение(ДеревоЗначенийКлиенты,Тип("ДеревоЗначений"));
Запрос = Новый Запрос;
Запрос.Текст =
"
.....(вырезано)
|ВЫБРАТЬ
| .....ТорговаяТочкаПоставки КАК ТорговаяТочка,
| ......НомерТелефона
|ИЗ
| ....
|ИТОГИ ПО
| ТорговаяТочка";
Запрос.УстановитьПараметр("ДатаВыборки", НачалоДня(ДатаВыборки));
РезультатЗапроса = Запрос.Выполнить();
ПартнерМаршрут=РезультатЗапроса.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);
Пока ПартнерМаршрут.Следующий() Цикл
СтрокаДЗ=ДеревоЗначений.Строки.Добавить();
СтрокаДЗ.Партнер = ПартнерМаршрут.ТорговаяТочка;
СтрокаДЗ.НомерТелефона= "";
Номера=ПартнерМаршрут.Выбрать();
Пока Номера.Следующий() Цикл
СтрокаДЗНомер=ДеревоЗначений.Строки.Добавить();
СтрокаДЗНомер.Партнер = Номера.ТорговаяТочка;
СтрокаДЗНомер.НомерТелефона= Номера.НомерТелефона;
СтрокаДЗНомер.Родитель = СтрокаДЗ;
КонецЦикла;
КонецЦикла;
ДанныеФормыВЗначение(ДеревоЗначенийКлиенты,Тип("ДеревоЗначений"));
ЗначениеВДанныеФормы(ДеревоЗначений,ДеревоЗначенийКлиенты);
Показать
(4) Строки телефонов надо добавлять не к дереву значений, а к родительской строке:
Пока Номера.Следующий() Цикл
СтрокаДЗНомер=СтрокаДЗ.Строки.Добавить();
СтрокаДЗНомер.Партнер = Номера.ТорговаяТочка;
СтрокаДЗНомер.НомерТелефона= Номера.НомерТелефона;
КонецЦикла;
(7) Вот так все работает:
Но я не пойму как вручную заполнить дерево (код в сообщении (4)). Почему я не могу задать родителя, как мне его тогда задавать?
ПромДерево = Запрос.Выполнить().Выгрузить(ОбходРезультатаЗапроса.ПоГруппировкамСИерархией);
ЗначениеВДанныеФормы(ПромДерево, ДеревоЗначенийКлиенты);
Но я не пойму как вручную заполнить дерево (код в сообщении (4)). Почему я не могу задать родителя, как мне его тогда задавать?
(19) Для автовыгрузки ведь все равно нужно преобразовывать? Сразу в дерево значений формыне выгружает.
ДеревоЗначений=ДанныеФормыВЗначение(ДеревоЗначенийКлиенты,Тип("ДеревоЗначений"));
ДеревоЗначенийКлиенты = Запрос.Выполнить().Выгрузить(ОбходРезультатаЗапроса.ПоГруппировкамСИерархией);
ЗначениеВДанныеФормы(ПромДерево, ДеревоЗначенийКлиенты);
(20) Да. Если устраивает автовыгруженное из запроса дерево - тогда только через ДеревоЗначений. ДанныеФормыДерево "оптом" только через него загружаться умеет. А вот если поэлементное заполнение делать - тогда смысл использовать ДеревоЗначений теряется, если не нужны какие-то особые его методы. Это особенно на клиенте удобно - простые преобразования не требующие обращений к БД можно делать не переходя на сервер, экономя таким образом на серверных вызовах.
(21) В (16) перед этим нужно данные формы дерево значений преобразовать в дерево значений (на сколько я понимаю), а Вы писали, как я понял, о том, что можно заполнить дерево значений формы без преобразований туда-назад в дерево значений. Хотел разобраться как это сделать.
(22)
Вы не правильно понимаете.
Есть 2 варианта работы с деревьями.
1. обычное ДеревоЗначений - строки добавляются через МоеДерево.Строки.Добавить();
2. дерево значений на форме - строки добавляются через ДеревоНаФорме.ПолучитьЭлементы().Добавить();
Все.
В (16) перед этим нужно данные формы дерево значений преобразовать в дерево значений (на сколько я понимаю)
Вы не правильно понимаете.
Есть 2 варианта работы с деревьями.
1. обычное ДеревоЗначений - строки добавляются через МоеДерево.Строки.Добавить();
2. дерево значений на форме - строки добавляются через ДеревоНаФорме.ПолучитьЭлементы().Добавить();
Все.
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот