Рассмотрим задачу, когда на форме нужно заполнить элемент дерева значений.
👉 Смотрите также: Заполнение реквизита формы (дерево значений) в 1С: внешняя обработка заполнения объекта
Рассмотрим на примере заполнения элемента ДеревоЦен формы документа Установка цен номенклатуры конфигурации УТ 11.0.7.21. В элемент ДеревоЦен записываются данные по номенклатуре, а в подчиненные номенклатуре строки – данные по характеристикам номенклатуры. В результате в табличной части Товары документа Установка цен номенклатуры находятся строки по Номенклатуре (без характеристики) и строки по Характеристикам номенклатуры (т.е. получается как развернутый вид дерева значений ДеревоЦен).
В рассматриваемом примере на форму документа добавлена команда пр_ЗаполнитьДеревоЦен. В процедуре описания действия команды вызывается процедура пр_ЗаполнитьДеревоЦенСервер(). Элемент ДеревоЦен заполняется товарами из ассортимента выбранного партнера, для этого в конфигурацию добавлен регистр сведений пр_АссортиментТоваров с измерениями Партнер и Характеристика; в документ Установка цен номенклатуры добавлен реквизит пр_Партнер.
Пример процедуры для заполнения элемента ДеревоЦен:
&НаСервере Процедура пр_ЗаполнитьДеревоЦенСервер() Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ | пр_АссортиментТоваров.Характеристика КАК Характеристика, | пр_АссортиментТоваров.Характеристика.Владелец КАК Номенклатура, | пр_АссортиментТоваров.Характеристика.Владелец.ЕдиницаИзмерения КАК ЕдиницаИзмерения, | пр_АссортиментТоваров.Характеристика.Владелец.ЦеноваяГруппа КАК ЦеноваяГруппа, | пр_АссортиментТоваров.Характеристика.Владелец.ВидНоменклатуры.ИспользованиеХарактеристик КАК ИспользованиеХарактеристик |ИЗ | РегистрСведений.пр_АссортиментТоваров КАК пр_АссортиментТоваров |ГДЕ | пр_АссортиментТоваров.Партнер = &Партнер |ИТОГИ | МАКСИМУМ(Характеристика), | МАКСИМУМ(ЕдиницаИзмерения), | МАКСИМУМ(ЦеноваяГруппа), | МАКСИМУМ(ИспользованиеХарактеристик) |ПО | Номенклатура"; Запрос.УстановитьПараметр("Партнер", Объект.пр_Партнер); РезультатПоНоменклатуре = Запрос.Выполнить().Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам); ДеревоЦенДЗ = РеквизитФормыВЗначение("ДеревоЦен", Тип("ДеревоЗначений")); Пока РезультатПоНоменклатуре.Следующий() Цикл СтрокаДерева = ДеревоЦенДЗ.Строки.Добавить(); СтрокаДерева.Номенклатура = РезультатПоНоменклатуре.Номенклатура; //СтрокаДерева.Характеристика = Результат.Характеристика; СтрокаДерева.ЕдиницаИзмерения = РезультатПоНоменклатуре.ЕдиницаИзмерения; СтрокаДерева.ЦеноваяГруппа = РезультатПоНоменклатуре.ЦеноваяГруппа; Если РезультатПоНоменклатуре.ИспользованиеХарактеристик = Перечисления.ВариантыВеденияДополнительныхДанныхПоНоменклатуре.НеИспользовать Тогда СтрокаДерева.ХарактеристикиИспользуются = Ложь; Иначе СтрокаДерева.ХарактеристикиИспользуются = Истина; КонецЕсли; РезультатПоХарактеристикам = РезультатПоНоменклатуре.Выбрать(); Пока РезультатПоХарактеристикам.Следующий() Цикл ПодСтрокаДерева = СтрокаДерева.Строки.Добавить(); ПодСтрокаДерева.Номенклатура = РезультатПоХарактеристикам.Номенклатура; ПодСтрокаДерева.Характеристика = РезультатПоХарактеристикам.Характеристика; ПодСтрокаДерева.ЕдиницаИзмерения = РезультатПоХарактеристикам.ЕдиницаИзмерения; ПодСтрокаДерева.ЦеноваяГруппа = РезультатПоХарактеристикам.ЦеноваяГруппа; Если РезультатПоХарактеристикам.ИспользованиеХарактеристик = Перечисления.ВариантыВеденияДополнительныхДанныхПоНоменклатуре.НеИспользовать Тогда ПодСтрокаДерева.ХарактеристикиИспользуются = Ложь; Иначе ПодСтрокаДерева.ХарактеристикиИспользуются = Истина; КонецЕсли; КонецЦикла; КонецЦикла; ЗначениеВРеквизитФормы(ДеревоЦенДЗ,"ДеревоЦен"); КонецПроцедуры