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

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

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

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

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


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

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


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

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

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


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

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

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

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