Имя: Пароль:
1C
 
Как перебрать все метаданные в конфигурации?
0 miron16
 
03.09.09
16:18
Как перебрать все метаданные в конфигурации?
1 Mitriy
 
03.09.09
16:19
перечислить
2 miron16
 
03.09.09
16:20
нужно перебрать все реквизиты... и найти реквизит с типом Справочник.Ссылка
3 Serg_1960
 
03.09.09
16:22
Перебором. Смешно звучит - но другого пути нет.
4 Serg_1960
 
03.09.09
16:27
Если есть ссылка - то к метаданным ссылки можно обратиться через Ссылка.Метаданные()...
5 Mitriy
 
03.09.09
16:29
ПолучитьСтруктуруХраненияБазыДанных можно попытать...
6 miron16
 
03.09.09
16:31
тут дело в том что никакой ссылки нет...надо проверить обсалютно все реквизиты...в том числе табличные части
7 Mitriy
 
03.09.09
16:33
(6) а во конфигураторе ручками недостаточно?
8 miron16
 
03.09.09
16:36
нет
9 Mitriy
 
03.09.09
16:42
(8) тогда ручками... на самом деле их немного... Справочники, документы, регистры... а внутри них уже спокойно можно пользоваться Для Каждого...
10 GedKo
 
03.09.09
16:45
только нужно не забыть про реквизиты с неявным типом.
11 NAlex
 
03.09.09
17:15
(2) Решал подобную задачку. Нужно было сделать обработку, которая работала бы быстрее чем НайтиПоСсылкам(). Идея была такова:
на первом проходе перебираем метаданные и ищем в реквизитах и в реквизитах табличных частей (при помощи Напр. Реквизит.Тип.СодержитТип(НужныйТип)) метаданные, где потенциально может быть нужный нам тип данных и динамически строим запрос по реквизитам этих метаданных, т.е. при запросе будем лопатить не всю базу, а только регистры, справочники, где потенциально может содержаться нужный тип данных;
на втором этапе выполняем полученных запрос и получаем уже конкретные ссылки на объекты. Практика показала, что на больших БД действительно работает побыстрее.
Вот кусочек кода где перебираются регистры:

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

   Для Каждого Стр Из Регистры Цикл
   //...
       КонецЦикла;