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