Состав объектов подсистем


Отчет по составу объектов, которые принадлежат соответствующей подсистеме.

Всем добра!

Возникла задача иметь под рукой отчёт по всем объектам, которые входят в существующие подсистемы конфигурации.

Погуглил и решения не нашёл.

Накидал свой вариант с использованием СКД.

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

// Получаем коллекцию корневых подсистем.
ВсеПодсистемы = Метаданные.Подсистемы;

// Обходим все корневые и вложенные подсистемы.
Для каждого ЭлементКоллекцииПодсистем из ВсеПодсистемы Цикл
//Ограничение только по своим подсистемам.
//Если СтрНайти(ЭлементКоллекцииПодсистем.Имя,"ХХ_") <> 0 Тогда
// Продолжить;
//КонецЕсли;
ПодсистемаРодитель = ЭлементКоллекцииПодсистем;
ПолучитьСоставОбъектовПодсистемы(ЭлементКоллекцииПодсистем, табВнешнийИсточник, Истина);
Если ЭлементКоллекцииПодсистем.Подсистемы.Количество() <> 0 Тогда
ВложенныеПодсистемы = ЭлементКоллекцииПодсистем.Подсистемы;
Для каждого ЭлементКоллекцииПодсистем из ВсеПодсистемы Цикл
//Ограничение только по своим подсистемам.
//Если СтрНайти(ЭлементКоллекцииПодсистем.Имя,"ХХ_") <> 0 Тогда
// Продолжить;
//КонецЕсли;
ПолучитьСоставОбъектовПодсистемы(ЭлементКоллекцииПодсистем, табВнешнийИсточник, ПодсистемаРодитель);
КонецЦикла;
КонецЕсли;
КонецЦикла;

#Область МеханизмСКД
СхемаКомпоновкиДанных = ПолучитьМакет("ОсновнаяСхемаКомпоновкиДанных");
Настройки = СхемаКомпоновкиДанных.НастройкиПоУмолчанию;
ДанныеРасшифровки = Новый ДанныеРасшифровкиКомпоновкиДанных;
КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных;
МакетКомпоновки = КомпоновщикМакета.Выполнить(СхемаКомпоновкиДанных, Настройки, ДанныеРасшифровки);
ВнешнийНаборДанных = Новый Структура("ВнешнийИсточник", табВнешнийИсточник);
ПроцессорКомпоновкиДанных = Новый ПроцессорКомпоновкиДанных;
ПроцессорКомпоновкиДанных.Инициализировать(МакетКомпоновки, ВнешнийНаборДанных, ДанныеРасшифровки);
ДокументРезультат.Очистить();
ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент;
ПроцессорВывода.УстановитьДокумент(ДокументРезультат);
ПроцессорВывода.Вывести(ПроцессорКомпоновкиДанных);
#КонецОбласти

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

Обходит один уровень вложенности подсистем, при необходимости допиливается до любого количества.

Можете добавить в коде условие на префиксацию своих подсистем, у меня добавлено и закомментировано — будет анализировать только "нетиповые". 

Пользуйтесь, вносите изменения, корректируйте под себя. Я создал вариант отчета, который интересен для меня, но можно делать кросс-таблицы, группировки по родителю.

Проверено на:

  1. Управление торговлей, редакция 11 (11.4.2.144) 
  2. Документооборот 8 КОРП, редакция 2.1 (2.1.11.5)
  3. Зарплата и управление персоналом, редакция 3.1 (3.1.5.212)
  4. Ломаться на других версиях нечему.

Возможно, сэкономит время!

1 Comment

  1. ZhokhovM

    Делал что-то похожее https://infostart.ru/public/407444/.

    Reply

Leave a Comment

Ваш адрес email не будет опубликован. Обязательные поля помечены *