![]() |
![]() |
![]() |
|
Как перебрать все метаданные в конфигурации? | ☑ | ||
---|---|---|---|---|
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) Решал подобную задачку. Нужно было сделать обработку, которая работала бы быстрее чем НайтиПоСсылкам(). Идея была такова:
на первом проходе перебираем метаданные и ищем в реквизитах и в реквизитах табличных частей (при помощи Напр. Реквизит.Тип.СодержитТип(НужныйТип)) метаданные, где потенциально может быть нужный нам тип данных и динамически строим запрос по реквизитам этих метаданных, т.е. при запросе будем лопатить не всю базу, а только регистры, справочники, где потенциально может содержаться нужный тип данных; на втором этапе выполняем полученных запрос и получаем уже конкретные ссылки на объекты. Практика показала, что на больших БД действительно работает побыстрее. Вот кусочек кода где перебираются регистры: НужныйТип = ТипЗнч(Выбор); Регистры = Новый ТаблицаЗначений; Регистры.Колонки.Добавить("Тип"); Регистры.Колонки.Добавить("Значение"); МассРег = Новый Массив; //Где ищем МассРег.Добавить("РегистрыСведений"); МассРег.Добавить("РегистрыНакопления"); МассРег.Добавить("РегистрыБухгалтерии"); МассРег.Добавить("РегистрыРасчета"); Для Каждого Имя Из МассРег Цикл Регистр = Метаданные[Имя]; Для Каждого Рег Из Регистр Цикл Если Имя = "РегистрыСведений" И Рег.РежимЗаписи = Метаданные.СвойстваОбъектов.РежимЗаписиРегистра.Независимый Тогда Продолжить; КонецЕсли; Строка = Регистры.Добавить(); Строка.Тип = Имя; Строка.Значение = Рег; КонецЦикла; КонецЦикла; Для Каждого Стр Из Регистры Цикл //... КонецЦикла; |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |