Всем привет.
Имею два справочника сведенных в одну таблицу:
Через код
Получаю:
а как сделать вот так? :
Имею два справочника сведенных в одну таблицу:
![](https://i.gyazo.com/94f9f455e0d80022113578556d3ab04a.png)
Через код
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| Док1.Справочник1 КАК Справочник1,
| Док1.Справочник2 КАК Справочник2,
| Док1.Количество КАК Количество,
| Док1.Цена КАК Цена,
| Док1.Сумма КАК Сумма
|ИЗ
| Документ.Док1.ТабЧасть КАК Док1
|ГДЕ
| Док1.Ссылка = &Ссылка
|ИТОГИ
| СУММА(Количество),
| СУММА(Сумма)
|ПО
| Справочник1";
Запрос.УстановитьПараметр("Ссылка", Объект.Ссылка);
ДанныеДляДерева = Запрос.Выполнить().Выгрузить(ОбходРезультатаЗапроса.ПоГруппировкамСИерархией);
ЗначениеВРеквизитФормы(ДанныеДляДерева, "ДеревоНаФорме");
ПоказатьПолучаю:
![](https://i.gyazo.com/f0e1d6ef4931ee797d346205cb551879.png)
а как сделать вот так? :
![](https://i.gyazo.com/f952416e866c4e67c5f33200a042a9f1.png)
По теме из базы знаний
- Заметочки про 1С:Предприятие 8 (редакция 22.06.2012)
- Себестоимость продукции в виде дерева значения
- Преобразование текста JSON в дерево значений. УФ (8.3)
- Построение иерархии - дерева по справочнику Подразделения. Визуализация, изменение дерева значений УФ. Javascript и 1С
- Программное копирование узла/строки дерева значений на управляемой форме (УФ, ДанныеФормыДерево, ДанныеФормыЭлементДерева) в вариантах на клиенте и на сервере
Ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
Уточните, пожалуйста, Вас интересует любое решение или исключительно запросом? Ведь первое, что здесь напрашивается, это отказаться от использования метода "ЗначениеВРеквизитФормы" и заполнить дерево формы согласно своим предпочтениям последовательным обходом выборки.
(5) Ну вот как вариант:
ДанныеДляДерева = Запрос.Выполнить().Выгрузить(ОбходРезультатаЗапроса.ПоГруппировкам);
Для каждого Группировка Из ДанныеДляДерева.Строки Цикл
Для каждого ДетальныеЗаписи Из Группировка.Строки Цикл
ДетальныеЗаписи.Справочник1 = Неопределено;
КонецЦикла;
КонецЦикла;
ЗначениеВРеквизитФормы(ДанныеДляДерева, "ДеревоНаФорме");
Показать
(5) Либо так, как Вам больше нравится:
ДанныеДляДерева = РеквизитФормыВЗначение("ДеревоНаФорме");
ДанныеДляДерева.Строки.Очистить();
ВыборкаПоГруппировкам = Запрос.Выполнить().Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);
Пока ВыборкаПоГруппировкам.Следующий() Цикл
Группировка = ДанныеДляДерева.Строки.Добавить();
ЗаполнитьЗначенияСвойств(Группировка, ВыборкаПоГруппировкам);
ВыборкаДетальныеЗаписи = ВыборкаПоГруппировкам.Выбрать();
Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
ДетальныеЗаписи = Группировка.Строки.Добавить();
ЗаполнитьЗначенияСвойств(ДетальныеЗаписи, ВыборкаДетальныеЗаписи, , "Справочник1");
КонецЦикла;
КонецЦикла;
ЗначениеВРеквизитФормы(ДанныеДляДерева, "ДеревоНаФорме");
Показать
(9) спасибо, "перебором" получилось.
Еще вопрос добавился:
Если у элемента верхнего уровня, длинное название, можно как-то настроить, чтобы оно было по всей строке.
Ведь в первой строке у меня вообще только один элемент с типом Справочник1.
Думаю на картинке понятно, что сейчас обрезает по красной линии:
Еще вопрос добавился:
Если у элемента верхнего уровня, длинное название, можно как-то настроить, чтобы оно было по всей строке.
Ведь в первой строке у меня вообще только один элемент с типом Справочник1.
Думаю на картинке понятно, что сейчас обрезает по красной линии:
![](https://i.gyazo.com/0668dcaf2bd74fc64dbdc70668793fb3.png)
(12) Опять предлагаю Вам попробовать два пути решения:
1. Спрятать колонки справочников, добавить третью составного типа. Ее и вывести на форму. При обходе результата запроса заполнять новую колонку либо значением справочника 1, либо справочника 2 зависимости от уровня. В зависимости от уровня же при активизации строки ограничивать тип выбираемых данных в отображаемой колонке, при изменении ее значения корректно заполнять одну из скрытых колонок (если нужно, конечно).
2. Добавить скрытую колонку булево типа "ЭтоГруппа", или числового "Уровень". Заполнять ее при обходе результата запроса. Настроить условное оформление формы в зависимости от значения в новой колонке. В оформлении указать не то "Видимость=Ложь", не то "Отображать=Ложь", точно не помню.
1. Спрятать колонки справочников, добавить третью составного типа. Ее и вывести на форму. При обходе результата запроса заполнять новую колонку либо значением справочника 1, либо справочника 2 зависимости от уровня. В зависимости от уровня же при активизации строки ограничивать тип выбираемых данных в отображаемой колонке, при изменении ее значения корректно заполнять одну из скрытых колонок (если нужно, конечно).
2. Добавить скрытую колонку булево типа "ЭтоГруппа", или числового "Уровень". Заполнять ее при обходе результата запроса. Настроить условное оформление формы в зависимости от значения в новой колонке. В оформлении указать не то "Видимость=Ложь", не то "Отображать=Ложь", точно не помню.
В запросе подправьте итоги.
Скорее всего, Вам нужно:
И тогда отображение должно быть как Вы хотите.Хотя, вроде, тогда всё равно на дочернем уровне будут светиться поля и всё равно нужно тогда дерево заполнять вручную циклом)
Скорее всего, Вам нужно:
Итоги
Сумма(Количество),
Сумма(Сумма)
По
Справочник1
Сумма(Количество),
Сумма(Сумма)
По
Справочник1
И тогда отображение должно быть как Вы хотите.Хотя, вроде, тогда всё равно на дочернем уровне будут светиться поля и всё равно нужно тогда дерево заполнять вручную циклом)
1. Нужно ПоГруппировкам обходить, а не ПоГруппировкамСИерархией. Это другое. Для иерархических справочников. У вас в запросе нет иерархии
2. Не нужно ничего дообрабатывать в цикле. Всё в запросе делается. Через ISNULL в поле итогов можно назначить разное значение для итогового поля, в зависимости от уровня группировки. И вообще в итогах можно произвольные выражения делать любой сложности. Сделал в демоБазе пример. Думаю из него понятно, как это можно к другой любой задаче использовать, когда нужно дерево на форму вывести.
Примерно так:
2. Не нужно ничего дообрабатывать в цикле. Всё в запросе делается. Через ISNULL в поле итогов можно назначить разное значение для итогового поля, в зависимости от уровня группировки. И вообще в итогах можно произвольные выражения делать любой сложности. Сделал в демоБазе пример. Думаю из него понятно, как это можно к другой любой задаче использовать, когда нужно дерево на форму вывести.
Примерно так:
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| ЗаказКлиента.Ссылка КАК Заказ
|ПОМЕСТИТЬ ВтЗаказы
|ИЗ
| Документ.ЗаказКлиента КАК ЗаказКлиента
|;
|
|//////////////////////////////////////////////////////////// ////////////////////
|ВЫБРАТЬ
| ВтЗаказы.Заказ КАК Заказ,
| РеализацияТоваровУслугТовары.Ссылка КАК Реализация,
| РеализацияТоваровУслугТовары.Цена КАК Цена,
| РеализацияТоваровУслугТовары.Ссылка.Менеджер КАК Менеджер,
| РеализацияТоваровУслугТовары.Количество КАК Количество,
| РеализацияТоваровУслугТовары.Номенклатура КАК ДокументТовар,
| РеализацияТоваровУслугТовары.Сумма КАК Сумма
|ИЗ
| ВтЗаказы КАК ВтЗаказы
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ Документ.РеализацияТоваровУслуг.Товары КАК РеализацияТоваровУслугТовары
| ПО ВтЗаказы.Заказ = РеализацияТоваровУслугТовары.ЗаказКлиента
|ИТОГИ
| ВЫБОР
| КОГДА Реализация ЕСТЬ NULL
| ТОГДА ЗНАЧЕНИЕ(Справочник.Пользователи.ПустаяСсылка)
| ИНАЧЕ МАКСИМУМ(Менеджер)
| КОНЕЦ КАК Менеджер,
| СУММА(Количество),
| ЕСТЬNULL(Реализация, Заказ) КАК ДокументТовар,
| СУММА(Сумма)
|ПО
| Заказ,
| Реализация";
ЗначениеВРеквизитФормы(Запрос.Выполнить().Выгрузить(ОбходРезультатаЗапроса.ПоГруппировкам), "Дерево");
ПоказатьПрикрепленные файлы:
![](/upload/forum/upload/f60/f60ca3969d6c06a9ecdb07f5e5d0abd8.png)
![](/upload/forum/687/687ad50fd45745917264776dbfe43028.png)
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот