Получить все ссылочные реквизиты выбранного справочника

1. Arkadag 14.05.24 20:46 Сейчас в теме
Приветствую, Форумчане!
ЕРП 2.5.6

Для большой задачи потребовалось получить в конкретном справочнике все его элементы, которые имеют ссылочный тип (СправочникСсылка.УпаковкиЕдиницыИзмерения и т.д.)

Тестирую на внешней обработке. Есть реквизит на форме, где выбираю конкретную номенклатуру: "СправочникРеквизиты" (тип ссылка на справочник Номенклатура)

Если взять при отладке
Объект.СправочникРеквизиты


то вижу все реквизиты (свойство), все их значения и главное типы в последней колонке

ПроизводительИмпортерКонтрагент    Торговый дом "Комплексный"    СправочникСсылка.Организации


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

Сейчас умудрился сделать только такой код:

    Для Каждого РеквизитОб Из Объект.СправочникРеквизиты.Метаданные().Реквизиты Цикл
        
        СпрДкм = Строка(ТипЗнч(Объект.СправочникРеквизиты));  
        
        
    Об = Объект.РеквизитыНайденные.Добавить();    
    Об.Наименование = РеквизитОб; 
    Если Справочники[СпрДкм].ПустаяСсылка()[РеквизитОб.Имя] <> Неопределено Тогда
    Об.ТипРеквизита    = XMLТипЗнч(Справочники[СпрДкм].ПустаяСсылка()[РеквизитОб.Имя]).TypeName;
//Ну или так    
//Об.ТипРеквизита    = Метаданные.НайтиПоТипу(РеквизитОб.Тип.Типы()[0]).ПолноеИмя();
    КонецЕсли;
    КонецЦикла;    
Показать


Получаю тип реквизита в текстовом формате и могу получить нужные мне строки с ссылочными данными.

Но проблема возникает дальше. Мне помимо того, что нужно определить тип реквизиты, нужно получить еще и его значение. Но в моем изобретении я работаю только с метаданными, а не со значениями реквизитов.

Возможно я пошел очень другой дорогой. Подскажите пожалуйста, как можно обойти все реквизиты выбранного справочника и получить их тип со значениями?
По теме из базы знаний
Найденные решения
2. starjevschik 14.05.24 20:55 Сейчас в теме
См . в хелпе
СправочникиМенеджер (CatalogsManager)
ТипВсеСсылки (AllRefsType)
Синтаксис:
ТипВсеСсылки()
4. scarl1n 12 15.05.24 08:01 Сейчас в теме
Немного не очень понял задачу, но может быть поможет:
&НаСервере
Процедура ПолучитьСсылочныеРеквизитыОбъекта()
    // Обходим циклом все реквизиты объекта (ОбъектСРеквизитами - ссылка! Если использовать "Объект" с формы, то писать Объект.Ссылка)
    Для Каждого Реквизит Из ОбъектСРеквизитами.Метаданные().Реквизиты Цикл
        ИмяРеквизита = Реквизит.Имя;
        ЗначениеРеквизита = ОбъектСРеквизитами[ИмяРеквизита];
        ТипЗначенияРеквизита = ТипЗнч(ЗначениеРеквизита);
        ЭтоСправочныйТип = Справочники.ТипВсеСсылки().СодержитТип(ТипЗначенияРеквизита);
        // Дальше по условию уже орудовать с имеющимися данными. Есть и тип реквизита, и его значение.
        // ...
    КонецЦикла;
КонецПроцедуры

Показать
Остальные ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
3. Vadim-SH 15.05.24 06:59 Сейчас в теме
(1) Посмотри методы модуля ОбщегоНазначения:
ОбщегоНазначения.ЗначенияРеквизитовОбъекта()
ОбщегоНазначения.ЗначениеСсылочногоТипа()
2. starjevschik 14.05.24 20:55 Сейчас в теме
См . в хелпе
СправочникиМенеджер (CatalogsManager)
ТипВсеСсылки (AllRefsType)
Синтаксис:
ТипВсеСсылки()
4. scarl1n 12 15.05.24 08:01 Сейчас в теме
Немного не очень понял задачу, но может быть поможет:
&НаСервере
Процедура ПолучитьСсылочныеРеквизитыОбъекта()
    // Обходим циклом все реквизиты объекта (ОбъектСРеквизитами - ссылка! Если использовать "Объект" с формы, то писать Объект.Ссылка)
    Для Каждого Реквизит Из ОбъектСРеквизитами.Метаданные().Реквизиты Цикл
        ИмяРеквизита = Реквизит.Имя;
        ЗначениеРеквизита = ОбъектСРеквизитами[ИмяРеквизита];
        ТипЗначенияРеквизита = ТипЗнч(ЗначениеРеквизита);
        ЭтоСправочныйТип = Справочники.ТипВсеСсылки().СодержитТип(ТипЗначенияРеквизита);
        // Дальше по условию уже орудовать с имеющимися данными. Есть и тип реквизита, и его значение.
        // ...
    КонецЦикла;
КонецПроцедуры

Показать
5. Arkadag 15.05.24 08:56 Сейчас в теме
Правильно поняли задачу :-)
Спасибо. Вроде получилось
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот