Добавление группы в дерево значений
Есть дерево значений. Одна из колонок "Номенклатура" - Ссылка на иерархический справочник.
Добавляю новую строку в ДЗ. Если это группа, тогда в дерево добавляю все группы и элементы из выбранной группы. Запрос сформировал, а вот добавить в ДЗ иерархию не могу.
В примерах есть только выгрузка результата запроса, а вот добавления нет.
Добавляю новую строку в ДЗ. Если это группа, тогда в дерево добавляю все группы и элементы из выбранной группы. Запрос сформировал, а вот добавить в ДЗ иерархию не могу.
В примерах есть только выгрузка результата запроса, а вот добавления нет.
Если Ссылка.ЭтоГруппа Тогда
Запрос = Новый Запрос;
Запрос.Текст = "ВЫБРАТЬ
| 1 КАК Пометка,
| СпрНоменклатура.Ссылка КАК Ссылка,
| УпаковкиЕдиницыИзмерения.Ссылка КАК Упаковка,
| НЕОПРЕДЕЛЕНО КАК IDТовар,
| НЕОПРЕДЕЛЕНО КАК IDУпаковка
|ИЗ
| Справочник.Номенклатура КАК СпрНоменклатура
| ЛЕВОЕ СОЕДИНЕНИЕ Справочник.УпаковкиЕдиницыИзмерения КАК УпаковкиЕдиницыИзмерения
| ПО СпрНоменклатура.ЕдиницаДляОтчетов = УпаковкиЕдиницыИзмерения.Ссылка
|ГДЕ
| СпрНоменклатура.Ссылка В ИЕРАРХИИ(&Группа)
| И СпрНоменклатура.ПометкаУдаления = ЛОЖЬ
|
|УПОРЯДОЧИТЬ ПО
| Ссылка ИЕРАРХИЯ";
Запрос.УстановитьПараметр("Группа", Ссылка);
Дерево = РеквизитФормыВЗначение("ДеревоНоменклатура");
Выборка = Запрос.Выполнить().Выбрать(ОбходРезультатаЗапроса.ПоГруппировкамСИерархией);
Пока Выборка.Следующий() Цикл
НоваяСтрока = Дерево.Строки.Добавить();
ЗаполнитьЗначенияСвойств(НоваяСтрока, Выборка);
КонецЦикла;
ЗначениеВРеквизитФормы(Дерево, "ДеревоНоменклатура");
КонецЕсли;
ПоказатьПо теме из базы знаний
- Простые радости жизни программиста 1С: выбор типа значения
- Вывод Таблицы Значений или Дерева Значений на экран управляемой формы без объявления колонок в реквизитах формы
- Добавление иерархии в типовой неиерархический справочник
- Картинки в строках дерева значений по условию (8.3)
- Программное добавление колонки в дерево значений на управляемой форме в расширении
Ответы
В избранное
Подписаться на ответы
Сортировка:
Древо развёрнутое
Свернуть все
Дерево.Строки.Добавить() - это добавление новых элементов в корень.
Чтобы добавить дочерние элементы для конкретной строки дерева, нужно вызывать метод Добавить() для свойства "Строки" для ЭТОЙ СТРОКИ, а не для Дерева.
Т.е. у каждой строки есть собственное свойство "строки" (как у корня) и оно содержит ссылки на дочерние элементы.
Чтобы добавить дочерние элементы для конкретной строки дерева, нужно вызывать метод Добавить() для свойства "Строки" для ЭТОЙ СТРОКИ, а не для Дерева.
Т.е. у каждой строки есть собственное свойство "строки" (как у корня) и оно содержит ссылки на дочерние элементы.
(2) Это я понимаю. Добавление второго уровня происходит еще одной выборкой. А если уровней много, как тогда быть?
Если Ссылка.ЭтоГруппа Тогда
Запрос = Новый Запрос;
Запрос.Текст = "ВЫБРАТЬ
| 1 КАК Пометка,
| СпрНоменклатура.Ссылка КАК Ссылка,
| УпаковкиЕдиницыИзмерения.Ссылка КАК Упаковка,
| НЕОПРЕДЕЛЕНО КАК IDТовар,
| НЕОПРЕДЕЛЕНО КАК IDУпаковка
|ИЗ
| Справочник.Номенклатура КАК СпрНоменклатура
| ЛЕВОЕ СОЕДИНЕНИЕ Справочник.УпаковкиЕдиницыИзмерения КАК УпаковкиЕдиницыИзмерения
| ПО СпрНоменклатура.ЕдиницаДляОтчетов = УпаковкиЕдиницыИзмерения.Ссылка
|ГДЕ
| СпрНоменклатура.Ссылка В ИЕРАРХИИ(&Группа)
| И СпрНоменклатура.ПометкаУдаления = ЛОЖЬ
|
|УПОРЯДОЧИТЬ ПО
| Ссылка ИЕРАРХИЯ";
Запрос.УстановитьПараметр("Группа", Ссылка);
Дерево = РеквизитФормыВЗначение("ДеревоНоменклатура");
Выборка = Запрос.Выполнить().Выбрать(ОбходРезультатаЗапроса.ПоГруппировкамСИерархией);
Пока Выборка.Следующий() Цикл
НоваяСтрока = Дерево.Строки.Добавить();
ЗаполнитьЗначенияСвойств(НоваяСтрока, Выборка);
ДетальнаяВыборка = Выборка.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкамСИерархией);
Пока ДетальнаяВыборка.Следующий() Цикл
НоваяПодСтрока = НоваяСтрока.Строки.Добавить();
ЗаполнитьЗначенияСвойств(НоваяПодстрока, ДетальнаяВыборка);
КонецЦикла;
КонецЦикла;
ЗначениеВРеквизитФормы(Дерево, "ДеревоНоменклатура");
КонецЕсли;
Показать
(5)Ты прав. Большое спасибо.
&НаСервере
Процедура ДеревоНоменклатураСсылкаОбработкаВыбораНаСервере(Ссылка)
Если Ссылка.ЭтоГруппа Тогда
Запрос = Новый Запрос;
Запрос.Текст = "ВЫБРАТЬ
| 1 КАК Пометка,
| СпрНоменклатура.Ссылка КАК Ссылка,
| УпаковкиЕдиницыИзмерения.Ссылка КАК Упаковка,
| НЕОПРЕДЕЛЕНО КАК IDТовар,
| НЕОПРЕДЕЛЕНО КАК IDУпаковка
|ИЗ
| Справочник.Номенклатура КАК СпрНоменклатура
| ЛЕВОЕ СОЕДИНЕНИЕ Справочник.УпаковкиЕдиницыИзмерения КАК УпаковкиЕдиницыИзмерения
| ПО СпрНоменклатура.ЕдиницаДляОтчетов = УпаковкиЕдиницыИзмерения.Ссылка
|ГДЕ
| СпрНоменклатура.Ссылка В ИЕРАРХИИ(&Группа)
| И СпрНоменклатура.ПометкаУдаления = ЛОЖЬ
|
|УПОРЯДОЧИТЬ ПО
| Ссылка ИЕРАРХИЯ";
Запрос.УстановитьПараметр("Группа", Ссылка);
Дерево = РеквизитФормыВЗначение("ДеревоНоменклатура");
Выборка = Запрос.Выполнить().Выбрать(ОбходРезультатаЗапроса.ПоГруппировкамСИерархией);
ЗаполнениеДерева(Выборка, Дерево.Строки);
ЗначениеВРеквизитФормы(Дерево, "ДеревоНоменклатура");
КонецЕсли;
КонецПроцедуры
Процедура ЗаполнениеДерева(Выборка = Неопределено, СтрокиДерева)
Пока Выборка.Следующий() Цикл
СтрокаДерева = СтрокиДерева.Добавить();
ЗаполнитьЗначенияСвойств(СтрокаДерева, Выборка);
ЗаполнениеДерева(Выборка.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкамСИерархией), СтрокаДерева.Строки);
КонецЦикла;
КонецПроцедуры
Показать
Вакансии
Аналитик 1С / Бизнес-аналитик
Нижний Новгород
зарплата от 100 000 руб. до 250 000 руб.
Временный (на проект)
Нижний Новгород
зарплата от 100 000 руб. до 250 000 руб.
Временный (на проект)