База знаний Одина — Одинэсника › Форумы › ODIN — Форум по 1С Предприятию › Как получить список свойств категории номенклатуры с возможными значениями в УНФ › Ответ в теме: Как получить список свойств категории номенклатуры с возможными значениями в УНФ
Николай, в УНФ 3 для получения списка свойств категории номенклатуры с возможными значениями нужно использовать План видов характеристик «НазначенияСвойствКатегорийОбъектов». Этот план связывает свойства с категориями номенклатуры. Для каждого свойства определяется тип значения, и если тип — справочник, то можно получить список элементов этого справочника, которые и будут возможными значениями свойства.
В коде выполняется запрос к Плану видов характеристик, выбираются свойства для заданной категории, затем для свойств со справочниковым типом значения загружаются элементы справочников. В итоге возвращается массив структур, где для каждого свойства есть ссылка, тип значения и, при необходимости, список возможных значений.
Если в вашей конфигурации структура отличается, нужно смотреть конкретно в конфигураторе, но в типовом УНФ 3 именно так реализован механизм свойств категорий номенклатуры.
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 |
Процедура ПолучитьСвойстваКатегории(КатегорияНоменклатуры) Свойства = Новый Массив; Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ | Назначения.Свойство КАК Свойство, | СвойстваВид.ТипЗначения КАК ТипЗначения |ИЗ | ПланВидовХарактеристик.НазначенияСвойствКатегорийОбъектов КАК Назначения | ВНУТРЕННЕЕ СОЕДИНЕНИЕ ПланВидовХарактеристик.СвойстваОбъектов КАК СвойстваВид | ПО Назначения.Свойство = СвойстваВид.Ссылка |ГДЕ | Назначения.Объект = &Категория"; Запрос.УстановитьПараметр("Категория", КатегорияНоменклатуры); Результат = Запрос.Выполнить(); Выборка = Результат.Выбрать(); СправочникиДляЗапроса = Новый Массив; Пока Выборка.Следующий() Цикл Свойство = Новый Структура; Свойство.Ссылка = Выборка.Свойство; Свойство.ТипЗначения = Выборка.ТипЗначения; Свойства.Добавить(Свойство); Если Свойство.ТипЗначения = Тип("СправочникСсылка") Тогда Если НЕ СправочникиДляЗапроса.Содержит(Свойство.Ссылка) Тогда СправочникиДляЗапроса.Добавить(Свойство.Ссылка); КонецЕсли; КонецЕсли; КонецЦикла; Если СправочникиДляЗапроса.Количество() > 0 Тогда ЭлементыПоСправочникам = Новый Соответствие; Для Каждого Справочник Из СправочникиДляЗапроса Цикл МетаданныеСправочника = Справочник.Метаданные(); ИмяСправочника = МетаданныеСправочника.Имя; ВыборкаЭлементов = Справочники[ИмяСправочника].Выбрать(); Элементы = Новый Массив; Пока ВыборкаЭлементов.Следующий() Цикл Элементы.Добавить(Новый Структура("Ссылка, Наименование", ВыборкаЭлементов.Ссылка, ВыборкаЭлементов.Наименование)); КонецЦикла; ЭлементыПоСправочникам.Вставить(Справочник, Элементы); КонецЦикла; Для Каждого Свойство Из Свойства Цикл Если Свойство.ТипЗначения = Тип("СправочникСсылка") Тогда Если ЭлементыПоСправочникам.СодержитКлюч(Свойство.Ссылка) Тогда Свойство.Значения = ЭлементыПоСправочникам[Свойство.Ссылка]; КонецЕсли; КонецЕсли; КонецЦикла; КонецЕсли; Возврат Свойства; КонецПроцедуры |