Обход всех метаданных в конфигурации

1. Airlord 16.01.18 15:19 Сейчас в теме
Добрый день, форумчане!
ERP, очень сильно перепиленная, используется как управленка. Возникла задача:
Как обойти все метаданные (Справочники, Модули, Документы и т.д.), чтобы проверить длину наименования на количество больше определенного значения?
Заранее благодарю.
По теме из базы знаний
Найденные решения
8. BackinSoda 16.01.18 16:51 Сейчас в теме
(7) тут много не нужных элементов, которые не могут обойтись в виде коллекции, скажем "АвторскиеПрава" или "Версия", возьмите то, что явно есть в дереве объектов конфигурации
или ставить точку останова, смотреть на какой строке ("элем") падает, и комментировать этот элемент массива.
Остальные ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. BackinSoda 16.01.18 15:25 Сейчас в теме
(1)
 МассивОбъектов = Новый Массив;
МассивОбъектов.Добавить("Документы");
МассивОбъектов.Добавить("Константы");
//... и т.д.

Для каждого Элем из МассивОбъектов Цикл
для Каждого ТекОбъект из Метаданные[Элем] Цикл

Если СтрДлина(ТекОбъект.Имя) > 123 тогда
//что-то делаем
КонецЕсли;
КонецЦикла;
КонецЦикла;
Показать
continental; +1 Ответить
3. Airlord 16.01.18 15:34 Сейчас в теме
Спасибо огромное, попробую!
4. Airlord 16.01.18 16:15 Сейчас в теме
Выдает ошибку:

{ВнешняяОбработка.ВнешняяОбработкаМетаданных.Форма.Форма.Форма(83)}: Итератор для значения не определен
для Каждого ТекОбъект из Метаданные[Элем] Цикл

что может быть?
5. SPID 16.01.18 16:33 Сейчас в теме
(4)
У глобального свойства Метаданные вроде нет обхода по итератору. Можно попробовать так
Процедура ВыполнитьПроверкуМетаданных()
	
	ПроверитьКоллекциюМетаданных(Метаданные.Документы);
	ПроверитьКоллекциюМетаданных(Метаданные.Справочники);
	//....
	
КонецПроцедуры

Процедура ПроверитьКоллекциюМетаданных(КоллекциМетаданных)
	
	Для Каждого ОбъектМетаданных Из КоллекциМетаданных Цикл
		
		Если СтрДлина(ОбъектМетаданных.Имя) > ПредельнаяДлина Тогда // ПредельнаяДлина какое-то значение.
			// Необходимые действия...
		КонецЕсли
		
	КонецЦикла;
	
КонецПроцедуры
Показать
6. BackinSoda 16.01.18 16:43 Сейчас в теме
(4) Весь код скопировали ? У меня он работает без ошибок
(5) да вроде обходится, проверил под отладчиком, Коллекция
7. Airlord 16.01.18 16:46 Сейчас в теме
(6) скопировал весь, добавил только всю структуру построчно.
 
&НаСервере
Процедура СформироватьНаСервере()
МассивОбъектов = Новый Массив;
МассивОбъектов.Добавить("WebСервисы");
МассивОбъектов.Добавить("WSСсылки");
МассивОбъектов.Добавить("АвторскиеПрава");
МассивОбъектов.Добавить("АдресИнформацииОКонфигурации");
МассивОбъектов.Добавить("АдресИнформацииОПоставщике");
МассивОбъектов.Добавить("АдресКаталогаОбновлений");
МассивОбъектов.Добавить("БизнесПроцессы");
МассивОбъектов.Добавить("ВариантВстроенногоЯзыка");
МассивОбъектов.Добавить("Версия");
МассивОбъектов.Добавить("ВключатьСправкуВСодержание");
МассивОбъектов.Добавить("Документы");
МассивОбъектов.Добавить("ДополнительныеСловариПолнотекстовогоПоиска");
МассивОбъектов.Добавить("ЖурналыДокументов");
МассивОбъектов.Добавить("Задачи");
МассивОбъектов.Добавить("Заставка");
МассивОбъектов.Добавить("Имя");
МассивОбъектов.Добавить("Интерфейсы");
МассивОбъектов.Добавить("Комментарий");
МассивОбъектов.Добавить("Константы");
МассивОбъектов.Добавить("КраткаяИнформация");
МассивОбъектов.Добавить("КритерииОтбора");
МассивОбъектов.Добавить("Логотип");
МассивОбъектов.Добавить("МодульВнешнегоСоединения");
МассивОбъектов.Добавить("МодульПриложения");
МассивОбъектов.Добавить("МодульСеанса");
МассивОбъектов.Добавить("НумераторыДокументов");
МассивОбъектов.Добавить("Обработки");
МассивОбъектов.Добавить("ОбщиеКартинки");
МассивОбъектов.Добавить("ОбщиеМакеты");
МассивОбъектов.Добавить("ОбщиеМодули");
МассивОбъектов.Добавить("ОбщиеФормы");
МассивОбъектов.Добавить("ОсновнаяРоль");
МассивОбъектов.Добавить("ОсновнаяФормаКонстант");
МассивОбъектов.Добавить("ОсновнойИнтерфейс");
МассивОбъектов.Добавить("ОсновнойСтиль");
МассивОбъектов.Добавить("ОсновнойЯзык");
МассивОбъектов.Добавить("Отчеты");
МассивОбъектов.Добавить("ПакетыXDTO");
МассивОбъектов.Добавить("ПараметрыСеанса");
МассивОбъектов.Добавить("Перечисления");
МассивОбъектов.Добавить("ПланыВидовРасчета");
МассивОбъектов.Добавить("ПланыВидовХарактеристик");
МассивОбъектов.Добавить("ПланыОбмена");
МассивОбъектов.Добавить("ПланыСчетов");
МассивОбъектов.Добавить("ПодпискиНаСобытия");
МассивОбъектов.Добавить("ПодробнаяИнформация");
МассивОбъектов.Добавить("Подсистемы");
МассивОбъектов.Добавить("Последовательности");
МассивОбъектов.Добавить("Поставщик");
МассивОбъектов.Добавить("РегистрыБухгалтерии");
МассивОбъектов.Добавить("РегистрыНакопления");
МассивОбъектов.Добавить("РегистрыРасчета");
МассивОбъектов.Добавить("РегистрыСведений");
МассивОбъектов.Добавить("РегламентныеЗадания");
МассивОбъектов.Добавить("РежимАвтонумерацииОбъектов");
МассивОбъектов.Добавить("РежимУправленияБлокировкойДанных");
МассивОбъектов.Добавить("РодительскиеКонфигурации");
МассивОбъектов.Добавить("Роли");
МассивОбъектов.Добавить("СвойстваОбъектов");
МассивОбъектов.Добавить("Синоним");
МассивОбъектов.Добавить("Справка");
МассивОбъектов.Добавить("Справочники");
МассивОбъектов.Добавить("Стили");
МассивОбъектов.Добавить("ЭлементыСтиля");
МассивОбъектов.Добавить("Языки");

МассивОбъектов.Добавить("Константы");
//... и т.д.

Для Каждого Элем из МассивОбъектов Цикл
	для Каждого ТекОбъект из Метаданные[Элем] Цикл
		Если СтрДлина(ТекОбъект) > 80 тогда
			Сообщить(ТекОбъект);	
		//что-то делаем
		КонецЕсли;
	КонецЦикла;
КонецЦикла;




КонецПроцедуры

&НаКлиенте
Процедура Сформировать(Команда)
	СформироватьНаСервере();
КонецПроцедуры
Показать
Светлый ум; +1 Ответить
8. BackinSoda 16.01.18 16:51 Сейчас в теме
(7) тут много не нужных элементов, которые не могут обойтись в виде коллекции, скажем "АвторскиеПрава" или "Версия", возьмите то, что явно есть в дереве объектов конфигурации
или ставить точку останова, смотреть на какой строке ("элем") падает, и комментировать этот элемент массива.
9. Airlord 16.01.18 16:57 Сейчас в теме
ОК. только не пойму - почему ошибку выдает...
10. BackinSoda 16.01.18 16:59 Сейчас в теме
(9) Цикл "для Каждого " предназначен для обхода коллекций, и когда попадается Не коллекция то происходит ошибка
11. SlavaKron 16.01.18 17:00 Сейчас в теме
ПолучитьСтруктуруХраненияБазыДанных() как вариант.
mefalcon; ganz-and-roses; Airlord; +3 Ответить
12. Airlord 16.01.18 17:13 Сейчас в теме
Повыкидывал через отладчик и в результате список структуры очень сократился.
13. Airlord 16.01.18 17:16 Сейчас в теме
Походу итератор не везде нужен и поэтому получил искомое. огромное спасибо всем за обсуждение.
14. TyurinArt 91 22.11.20 11:23 Сейчас в теме
Есть ли возможность не заполнять МассивОбъектов через МассивОбъектов.Добавить("WebСервисы"), например Метаданные.ПолучитьВсеИмена()?
Оставьте свое сообщение

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