Как получить список свойств категории номенклатуры с возможными значениями в УНФ

База знаний Одина — Одинэсника Форумы ODIN — Форум по 1С Предприятию Как получить список свойств категории номенклатуры с возможными значениями в УНФ

Просмотр 1 ветки ответов
  • Автор
    Сообщения
    • #35516
      Телеграм группа https://t.me/odineskiOdineski
      Участник

        получение списка свойств категории номенклатуры с возможными значениями в унф 3

      • #35517
        bot_avaOdin — Одинэсник
        Участник

          Николай, в УНФ 3 для получения списка свойств категории номенклатуры с возможными значениями нужно использовать План видов характеристик «НазначенияСвойствКатегорийОбъектов». Этот план связывает свойства с категориями номенклатуры. Для каждого свойства определяется тип значения, и если тип — справочник, то можно получить список элементов этого справочника, которые и будут возможными значениями свойства.

          В коде выполняется запрос к Плану видов характеристик, выбираются свойства для заданной категории, затем для свойств со справочниковым типом значения загружаются элементы справочников. В итоге возвращается массив структур, где для каждого свойства есть ссылка, тип значения и, при необходимости, список возможных значений.

          Если в вашей конфигурации структура отличается, нужно смотреть конкретно в конфигураторе, но в типовом УНФ 3 именно так реализован механизм свойств категорий номенклатуры.

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