Имя: Пароль:
1C
1С v8
Как программно получить названия всех объектов конфигурации?
,
0 luzik
 
29.09.11
12:20
Конфигурация на платформе 1С 8.2.
Нужно программно, например, в цикле, получить все объекты метаданных.
Пыталась сделать через свойство глобального контекста Метаданные, но заранее я не знаю название объекта и через точку (например, Метаданные.Документы) обратиться не могу. Можно ли как-то получить названия всех объектов конфигурации. Заранее спасибо
1 evgen2011
 
29.09.11
12:21
Для каждого Элемент Из метаданные Цикл
Сообщить(Элемент.Имя);
конецЦикла;
2 Alexandr Puzakov
 
29.09.11
12:30
МассивКлассовМетаданных = Новый Массив;
МассивКлассовМетаданных.Добавить("Справочники");
МассивКлассовМетаданных.Добавить("Документы");
МассивКлассовМетаданных.Добавить("Отчеты");
МассивКлассовМетаданных.Добавить("Обработки");
...
Для каждого КлассМетаданных Из МассивКлассовМетаданных Цикл
    Для Каждого ОбъектМетаданных Из Метаданные[КлассМетаданных] Цикл
         Сообщить(ОбъектМетаданных.Имя);
    КонецЦикла;
КонецЦикла;
3 evgen2011
 
29.09.11
12:33
(2) а перечесления? а регистры?
4 luzik
 
29.09.11
12:33
Если в синтаксисе открываешь Метаданные, то там все объекты видны. Мне хотелось бы получить все их названия, не забивая ручками в массив...
5 evgen2011
 
29.09.11
12:35
Для каждого Элемент Из метаданные Цикл
Для Каждого ОбъектМетаданных Из Метаданные[Элемент] Цикл
         Сообщить(ОбъектМетаданных.Имя);
    КонецЦикла;
конецЦикла;
6 luzik
 
29.09.11
12:37
Для Каждого ОбъектМетаданных Из Метаданные[Элемент] Цикл
- дает ошибку: "Получение элемента по индексу для значения не определено".....
7 hhhh
 
29.09.11
12:37
(4) а зачем вбивать ручками. Ведь можете скопировать из (2) в свою программу. Это у вас займет 4 секунды.
8 luzik
 
29.09.11
12:39
Для каждого Элемент Из метаданные Цикл
- дает ошибку "итератор для значения не определен"...
9 Alexandr Puzakov
 
29.09.11
12:40
(3) ну я же пример только привел. Фигачим в массив еще элементов и будут там все метаданные...
10 luzik
 
29.09.11
12:42
скопировать названия можно, но неужели нельзя их получить в массив программно?
11 Inform
 
29.09.11
12:43
(10) смотри (2), не всегда получается в 2 строки сделать то, что хочется...
Список свойств объекта "ОбъектМетаданныхКонфигурация" для заполнения массива можно посмотреть в синтакс-помощнике
12 evgen2011
 
29.09.11
12:46
(6)Для каждого Элемент Из метаданные Цикл
Для Каждого ОбъектМетаданных Из Метаданные[Элемент.Имя] Цикл
         Сообщить(ОбъектМетаданных.Имя);
    КонецЦикла;
конецЦикла;
13 luzik
 
29.09.11
13:12
Увы, ребята, это все не то. может непонятно пишу...
Пример для цикла по документам:
"Для Каждого Док Из Метаданные.Документ Цикл" - здесь я заранее не знаю какие документы есть, аналогично мне хотелось бы перебрать все объекты метаданных, не зная заранее какие они. Возможно ли это в 1С 8?
14 Alexandr Puzakov
 
29.09.11
14:16
(13) чет совсем не понятно. Нужно узнать есть ли те или иные объекты метаданных? Или что?
15 evgen2011
 
29.09.11
14:33
(13) для чего?
16 Alexandr Puzakov
 
29.09.11
18:09
Возможно нужна такая штуковина:

http://zalil.ru/31780815

?
17 Tapo4ek
 
29.09.11
18:26
МассивКлассовМетаданных = Новый Массив;
МассивКлассовМетаданных.Добавить("Справочники");
МассивКлассовМетаданных.Добавить("Документы");
МассивКлассовМетаданных.Добавить("Отчеты");
МассивКлассовМетаданных.Добавить("Обработки");
...

Для каждого КлассМетаданных Из МассивКлассовМетаданных Цикл

    Для Каждого ОбъектМетаданных Из Метаданные[КлассМетаданных] Цикл
         Сообщить(ОбъектМетаданных.Имя);
    КонецЦикла;
КонецЦикла;

- Реально решение, неужели сложно написать формирование массива из 16 строк?
18 Reset
 
29.09.11
18:52
(13) Что значит "не зная какие они" ? Они известны и их список жесткий и постоянный.
Ответ уже дан в (2) и он правильный.

Минимальные различия могут быть только при сильно разных версиях платформы (8.1 vs 8.2)