Получить все ссылочные реквизиты выбранного справочника
Приветствую, Форумчане!
ЕРП 2.5.6
Для большой задачи потребовалось получить в конкретном справочнике все его элементы, которые имеют ссылочный тип (СправочникСсылка.УпаковкиЕдиницыИзмерения и т.д.)
Тестирую на внешней обработке. Есть реквизит на форме, где выбираю конкретную номенклатуру: "СправочникРеквизиты" (тип ссылка на справочник Номенклатура)
Если взять при отладке
то вижу все реквизиты (свойство), все их значения и главное типы в последней колонке
Вот теперь нужно сделать обход по всем этим реквизитам и получить типы этих реквизитов, далее проверить условие, что тип есть справочник и насладиться этим.
Сейчас умудрился сделать только такой код:
Получаю тип реквизита в текстовом формате и могу получить нужные мне строки с ссылочными данными.
Но проблема возникает дальше. Мне помимо того, что нужно определить тип реквизиты, нужно получить еще и его значение. Но в моем изобретении я работаю только с метаданными, а не со значениями реквизитов.
Возможно я пошел очень другой дорогой. Подскажите пожалуйста, как можно обойти все реквизиты выбранного справочника и получить их тип со значениями?
ЕРП 2.5.6
Для большой задачи потребовалось получить в конкретном справочнике все его элементы, которые имеют ссылочный тип (СправочникСсылка.УпаковкиЕдиницыИзмерения и т.д.)
Тестирую на внешней обработке. Есть реквизит на форме, где выбираю конкретную номенклатуру: "СправочникРеквизиты" (тип ссылка на справочник Номенклатура)
Если взять при отладке
Объект.СправочникРеквизиты
то вижу все реквизиты (свойство), все их значения и главное типы в последней колонке
ПроизводительИмпортерКонтрагент Торговый дом "Комплексный" СправочникСсылка.Организации
Вот теперь нужно сделать обход по всем этим реквизитам и получить типы этих реквизитов, далее проверить условие, что тип есть справочник и насладиться этим.
Сейчас умудрился сделать только такой код:
Для Каждого РеквизитОб Из Объект.СправочникРеквизиты.Метаданные().Реквизиты Цикл
СпрДкм = Строка(ТипЗнч(Объект.СправочникРеквизиты));
Об = Объект.РеквизитыНайденные.Добавить();
Об.Наименование = РеквизитОб;
Если Справочники[СпрДкм].ПустаяСсылка()[РеквизитОб.Имя] <> Неопределено Тогда
Об.ТипРеквизита = XMLТипЗнч(Справочники[СпрДкм].ПустаяСсылка()[РеквизитОб.Имя]).TypeName;
//Ну или так
//Об.ТипРеквизита = Метаданные.НайтиПоТипу(РеквизитОб.Тип.Типы()[0]).ПолноеИмя();
КонецЕсли;
КонецЦикла;
ПоказатьПолучаю тип реквизита в текстовом формате и могу получить нужные мне строки с ссылочными данными.
Но проблема возникает дальше. Мне помимо того, что нужно определить тип реквизиты, нужно получить еще и его значение. Но в моем изобретении я работаю только с метаданными, а не со значениями реквизитов.
Возможно я пошел очень другой дорогой. Подскажите пожалуйста, как можно обойти все реквизиты выбранного справочника и получить их тип со значениями?
По теме из базы знаний
- Подсистема "Инструменты разработчика" v7.13.2
- Быстрый поиск дублей в 1С с четким/нечетким поиском по любому сочетанию реквизитов/реквизитов таб. частей с отбором и быстрой заменой значений в ЛЮБЫХ базах 8.1-8.3 (УТ 10.3, БП 2, ЗУП 2.5, КА 1.1, УТ 11, БП 3, УНФ 1.6/3.0, КА 2, ЗУП 3 и т.д.)
- Загрузка номенклатуры c картинками (несколько потоков одновременно) и сопутствующими данными в базу и любые документы из yml, xls, xlsx, xlsm, ods, ots, csv для УТ 10.3, УТ 11 (все), БП 3, КА 2, ERP 2, УНФ 1.6/3.0, Розница 2/3.0
- Сравнение произвольных данных баз (и РИБ, по правилам конвертаций) по контрольным суммам выбранных реквизитов, работающих на платформе 8.3
- Версионирование справочников, документов и регистров сведений на SQL-сервере
Найденные решения
Немного не очень понял задачу, но может быть поможет:
&НаСервере
Процедура ПолучитьСсылочныеРеквизитыОбъекта()
// Обходим циклом все реквизиты объекта (ОбъектСРеквизитами - ссылка! Если использовать "Объект" с формы, то писать Объект.Ссылка)
Для Каждого Реквизит Из ОбъектСРеквизитами.Метаданные().Реквизиты Цикл
ИмяРеквизита = Реквизит.Имя;
ЗначениеРеквизита = ОбъектСРеквизитами[ИмяРеквизита];
ТипЗначенияРеквизита = ТипЗнч(ЗначениеРеквизита);
ЭтоСправочныйТип = Справочники.ТипВсеСсылки().СодержитТип(ТипЗначенияРеквизита);
// Дальше по условию уже орудовать с имеющимися данными. Есть и тип реквизита, и его значение.
// ...
КонецЦикла;
КонецПроцедуры
ПоказатьОстальные ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
Немного не очень понял задачу, но может быть поможет:
&НаСервере
Процедура ПолучитьСсылочныеРеквизитыОбъекта()
// Обходим циклом все реквизиты объекта (ОбъектСРеквизитами - ссылка! Если использовать "Объект" с формы, то писать Объект.Ссылка)
Для Каждого Реквизит Из ОбъектСРеквизитами.Метаданные().Реквизиты Цикл
ИмяРеквизита = Реквизит.Имя;
ЗначениеРеквизита = ОбъектСРеквизитами[ИмяРеквизита];
ТипЗначенияРеквизита = ТипЗнч(ЗначениеРеквизита);
ЭтоСправочныйТип = Справочники.ТипВсеСсылки().СодержитТип(ТипЗначенияРеквизита);
// Дальше по условию уже орудовать с имеющимися данными. Есть и тип реквизита, и его значение.
// ...
КонецЦикла;
КонецПроцедуры
Показать
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот