Всем добра!
Возникла задача иметь под рукой отчёт по всем объектам, которые входят в существующие подсистемы конфигурации.
Погуглил и решения не нашёл.
Накидал свой вариант с использованием СКД.
Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка)
СтандартнаяОбработка = Ложь;
// Создаем таблицу значений для дальнейшей передачи в механизм СКД.
табВнешнийИсточник = Новый ТаблицаЗначений;
табВнешнийИсточник.Колонки.Добавить("Родитель", Новый ОписаниеТипов("Строка"));
табВнешнийИсточник.Колонки.Добавить("Подсистема", Новый ОписаниеТипов("Строка"));
табВнешнийИсточник.Колонки.Добавить("ИмяОбъектаМетаданных", Новый ОписаниеТипов("Строка"));
табВнешнийИсточник.Колонки.Добавить("ИмяОбъекта", Новый ОписаниеТипов("Строка"));
табВнешнийИсточник.Колонки.Добавить("ПризнакНаличия", Новый ОписаниеТипов("Булево"));
// Получаем коллекцию корневых подсистем.
ВсеПодсистемы = Метаданные.Подсистемы;
// Обходим все корневые и вложенные подсистемы.
Для каждого ЭлементКоллекцииПодсистем из ВсеПодсистемы Цикл
//Ограничение только по своим подсистемам.
//Если СтрНайти(ЭлементКоллекцииПодсистем.Имя,"ХХ_") <> 0 Тогда
// Продолжить;
//КонецЕсли;
ПодсистемаРодитель = ЭлементКоллекцииПодсистем;
ПолучитьСоставОбъектовПодсистемы(ЭлементКоллекцииПодсистем, табВнешнийИсточник, Истина);
Если ЭлементКоллекцииПодсистем.Подсистемы.Количество() <> 0 Тогда
ВложенныеПодсистемы = ЭлементКоллекцииПодсистем.Подсистемы;
Для каждого ЭлементКоллекцииПодсистем из ВсеПодсистемы Цикл
//Ограничение только по своим подсистемам.
//Если СтрНайти(ЭлементКоллекцииПодсистем.Имя,"ХХ_") <> 0 Тогда
// Продолжить;
//КонецЕсли;
ПолучитьСоставОбъектовПодсистемы(ЭлементКоллекцииПодсистем, табВнешнийИсточник, ПодсистемаРодитель);
КонецЦикла;
КонецЕсли;
КонецЦикла;
#Область МеханизмСКД
СхемаКомпоновкиДанных = ПолучитьМакет("ОсновнаяСхемаКомпоновкиДанных");
Настройки = СхемаКомпоновкиДанных.НастройкиПоУмолчанию;
ДанныеРасшифровки = Новый ДанныеРасшифровкиКомпоновкиДанных;
КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных;
МакетКомпоновки = КомпоновщикМакета.Выполнить(СхемаКомпоновкиДанных, Настройки, ДанныеРасшифровки);
ВнешнийНаборДанных = Новый Структура("ВнешнийИсточник", табВнешнийИсточник);
ПроцессорКомпоновкиДанных = Новый ПроцессорКомпоновкиДанных;
ПроцессорКомпоновкиДанных.Инициализировать(МакетКомпоновки, ВнешнийНаборДанных, ДанныеРасшифровки);
ДокументРезультат.Очистить();
ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент;
ПроцессорВывода.УстановитьДокумент(ДокументРезультат);
ПроцессорВывода.Вывести(ПроцессорКомпоновкиДанных);
#КонецОбласти
КонецПроцедуры
Обходит один уровень вложенности подсистем, при необходимости допиливается до любого количества.
Можете добавить в коде условие на префиксацию своих подсистем, у меня добавлено и закомментировано - будет анализировать только "нетиповые".
Пользуйтесь, вносите изменения, корректируйте под себя. Я создал вариант отчета, который интересен для меня, но можно делать кросс-таблицы, группировки по родителю.
Проверено на:
- Управление торговлей, редакция 11 (11.4.2.144)
- Документооборот 8 КОРП, редакция 2.1 (2.1.11.5)
- Зарплата и управление персоналом, редакция 3.1 (3.1.5.212)
- Ломаться на других версиях нечему.
Возможно, сэкономит время!