Обработка читает метаданные и строит дерево объектов конфигурации, а по кнопке считает у каждого объекта количество записей и вес данных. Встанете на строку — внизу появится состав объекта: стандартные и собственные реквизиты, табличные части, измерения и ресурсы с типами. Двойной щелчок открывает форму списка самого объекта. В шапке — имя и версия конфигурации и версия платформы. Работает она на любой конфигурации, файловой и клиент-серверной, и ничего не меняет — только читает.

Количество записей
Обработка обходит коллекции Метаданные[ИмяКоллекции] и у каждого объекта берёт ПолноеИмя(). Выглядит оно как Справочник.Товары и подставляется прямо в текст запроса:
&НаСервере
Функция ПосчитатьЗаписи(ПолноеИмяОбъекта)
Запрос = Новый Запрос("ВЫБРАТЬ КОЛИЧЕСТВО(*) КАК Кол ИЗ " + ПолноеИмяОбъекта);
Попытка
Выборка = Запрос.Выполнить().Выбрать();
Исключение
Возврат Неопределено;
КонецПопытки;
Выборка.Следующий();
Возврат Выборка.Кол;
КонецФункции
У отчётов и обработок таблиц нет, поэтому запрос по ним падает. Функция ловит исключение и возвращает Неопределено, а в колонке появляется прочерк.
У констант, перечислений и журналов документов запрос тоже отработает, только толку от результата не будет: у константы в таблице всегда одна строка, перечисление вернёт число своих значений, то есть метаданных, а журнал отдаст документы, которые уже посчитаны в строке «Документы». Поэтому обработка считает записи только у тех видов, которые их действительно хранят: справочники, документы, планы, регистры, последовательности, бизнес-процессы и задачи — без такого отбора итог завышен.
Вес данных объекта
ПолучитьСтруктуруХраненияБазыДанных() отдаёт имена таблиц, поля и индексы, но размера в ней нет. Размер возвращает другой метод — ПолучитьРазмерДанныхБазыДанных(<ОбластьПоиска>, <ВключитьОбъекты>, <ИсключитьОбъекты>). Задуман он для разделённых данных: при ОбластьПоиска = Неопределено платформа считает всю базу. Чтобы получить вес одного объекта, обработка кладёт в область пустой массив, а сам объект передаёт вторым параметром:
&НаСервере
Функция РазмерОбъекта(ОбъектМД)
Область = Новый Массив;
Объекты = Новый Массив;
Объекты.Добавить(ОбъектМД);
Попытка
Возврат ПолучитьРазмерДанныхБазыДанных(Область, Объекты);
Исключение
Возврат Неопределено;
КонецПопытки;
КонецФункции
Метод возвращает байты и к СУБД не обращается, поэтому файловая база считается наравне с серверной. Обработка вызывает его по каждому объекту, и один вызов стоит доли миллисекунды.
История данных и расширения конфигурации в этот размер не входят. Сумма по объектам всегда меньше файла базы: остальное занимают индексы, служебные структуры и незанятое место.
Расчёт по кнопке
Оба замера обработка делает по каждому объекту отдельно: сколько объектов, столько запросов и столько вызовов. На паре сотен это десятая доля секунды. Объектов на порядок больше — и время растёт во столько же раз, а форма виснет прямо на открытии. Поэтому при открытии она читает только описание конфигурации: дерево видов и объектов появляется сразу, колонки «Размер» и «Записей» пока пустые, отборы по ним недоступны.
Расчёт запускают две кнопки. «Рассчитать всё» проходит по всей базе, «Рассчитать вид» — только по тому виду, на строке которого стоит курсор. Вторая правит кэш выборочно, через ДанныеФормыВЗначение, поэтому посчитанное раньше по другим видам остаётся на месте.
Виды накапливаются, и пока посчитаны не все, итог показывает, по скольким объектам он сложен. Пустая колонка и прочерк значат разное: прочерк стоит там, где считать нечего, а пустота — там, где ещё не считали.

Дерево и состав объекта
Реквизит формы объявлен как ДеревоЗначений, а колонки — подчинённые ему реквизиты. Иерархию таблица рисует сама, свойство Отображение задавать не требуется. Готовое дерево обработка кладёт целиком: ЗначениеВРеквизитФормы(Дерево, "ОбъектыМетаданных") заменяет прежнее содержимое, так что чистить реквизит заранее не нужно.
Состав обработка читает по текущей строке:
ОбъектМД = Метаданные.НайтиПоПолномуИмени(ПолноеИмяОбъекта);
Попытка
ДобавитьРаздел(Состав, ОбъектМД.Реквизиты, "реквизиты");
Исключение
КонецПопытки;
Так же она забирает СтандартныеРеквизиты, Измерения, Ресурсы и ТабличныеЧасти — по одному вызову на коллекцию. Обращаться к объекту метаданных по имени свойства нельзя: Метаданные["Справочники"] работает, а ОбъектМД["Реквизиты"] — нет, только через точку. Попытка вокруг каждой коллекции здесь не перестраховка: у справочника нет измерений, у регистра — табличных частей.
В СтандартныеРеквизиты попадает и то, что реквизитом не является: Ссылка, ВерсияДанных, Предопределенный и ИмяПредопределенныхДанных — эти четыре обработка отсеивает.
Строка(Тип) даёт синоним — «Контрагент». Чтобы получить имя из конфигурации, обработка спрашивает НайтиПоТипу:
Имена = Новый Массив;
Для Каждого Тип Из Элемент.Тип.Типы() Цикл
ОбъектТипа = Метаданные.НайтиПоТипу(Тип);
Если ОбъектТипа = Неопределено Тогда
Имена.Добавить(Строка(Тип));
Иначе
Имена.Добавить(ОбъектТипа.ПолноеИмя());
КонецЕсли;
КонецЦикла;
Возврат СтрСоединить(Имена, ", ");
У примитивных типов НайтиПоТипу возвращает Неопределено, и тогда в колонку идёт синоним. Составной тип обработка собирает целиком, через запятую.
Состав выбранного объекта: разделы, имена и типы; ссылочный тип показан именем из конфигурацииДвойной щелчок по объекту открывает его форму списка. Событие таблицы — Выбор, имя формы собирается из полного имени метаданных:
Если НЕ ЕстьФормаСписка(Данные.Вид) Тогда
Сообщить("У вида «" + Данные.Вид + "» формы списка нет: показывать нечего.");
Возврат;
КонецЕсли;
ОткрытьФорму(Данные.ПолноеИмя + ".ФормаСписка", , ЭтотОбъект);
Вид проверяется заранее, и это не перестраховка. Форма списка есть у справочников, документов, журналов, перечислений, планов, регистров, бизнес-процессов и задач; у константы форма значения, у отчёта и обработки — форма объекта. С несуществующим именем формы ОткрытьФорму не выбрасывает исключение, а молча ничего не делает: Попытка здесь бесполезна, обработчик отрабатывает вхолостую, и человек не понимает, нажал он или нет.
Сценарии
- Отбор «Размер больше» с порогом оставляет в дереве только тяжёлые объекты — сразу видно, на что ушло место.
- Поиск по синониму или имени открывает состав чужой конфигурации без конфигуратора и без монопольного режима.
- Отбор «Записей больше 0» даёт список объектов с данными — перед переносом или свёрткой.
- Двойной щелчок по найденному объекту открывает его список: нашли тяжёлый справочник — сразу смотрите, что в нём лежит.
Поставка
ОбследованиеБазы.epf — внешняя обработка; расширений и внешних компонент она не требует. Форму собирает программно, код открыт и лежит в модуле формы.
Проверено на следующих конфигурациях и релизах:
- Управление нашей фирмой, редакция 3.0, релизы 3.0.14.143
Вступайте в нашу телеграмм-группу Инфостарт