Отчет по метаданным. Количество элементов справочников, документов, регистров. Отбор по периоду


Отчет по метаданным. Количество элементов справочников, документов, регистров. Есть отбор по периоду для периодических метаданных. Можно использовать для анализа при переносе данных. 8.3.13.1644.

Отчет строится универсально по метаданным. В данный момент реализовано для справочников. документов, регистров сведений и накоплений. Возможно добавить свои. Показывается количество записей в каждом объекте метаданных. Сделано для сравнения при переносе данных и текущего объема в информационной базе. Тестировалось на 8.3.13.1644.

Сначала делается обход по метаданным. Запросом в цикле получаем количество элементов, собираем в таблицу. Полученную таблицу передаем в СКД для вывода отчета. За счет того, что таблица с данными уже загружена в СКД, можете только настроить структура под себя и нужный отчет готов. Код открытый.

Для желающих сделать все самостоятельно выкладываю код для формирования внешней таблицы, дальше программно формируете отчет на СКД и подключаете внешние данные.

 

Функция ПолучитьТаблицуМетаданных(ПериодЗапроса)

ТЗ = Новый ТаблицаЗначений;

ОписаниеЧисла = Новый ОписаниеТипов("Число");
ОписаниеСтроки = Новый ОписаниеТипов("Строка");
ОписаниеДаты = Новый ОписаниеТипов("Дата");
ОписаниеБулева = Новый ОписаниеТипов("Булево");

ТЗ.Колонки.Добавить("Тип",ОписаниеСтроки);
ТЗ.Колонки.Добавить("Вид",ОписаниеСтроки);
ТЗ.Колонки.Добавить("Периодичность",ОписаниеБулева);
ТЗ.Колонки.Добавить("Количество",ОписаниеЧисла);

ТипМД = "Справочник";
Для Каждого Эл Из Метаданные.Справочники Цикл
ВидМД = Эл.Имя;
Запрос = Новый Запрос;
Запрос.Текст = "Выбрать ЕстьNULL(Сумма(1),0) КАК Количество Из " + ТипМД + "." +ВидМД;
РезультатЗапроса = Запрос.Выполнить();
Выборка = РезультатЗапроса.Выбрать();
Выборка.Следующий();

НоваяСтрока = ТЗ.Добавить();
НоваяСтрока.Тип = ТипМД;
НоваяСтрока.Вид = Эл.Имя;
НоваяСтрока.Периодичность = Ложь;
НоваяСтрока.Количество = Выборка.Количество;
КонецЦикла;

ТипМД = "Документ";
Для Каждого Эл Из Метаданные.Документы Цикл
ВидМД = Эл.Имя;
Запрос = Новый Запрос;
Запрос.Текст = "Выбрать ЕстьNULL(Сумма(1),0) КАК Количество Из " + ТипМД + "." +ВидМД;
Если ПериодЗапроса <> Неопределено Тогда
Запрос.Текст = Запрос.Текст + " ГДЕ Дата >= &НачДата И Дата <= &КонДата";
Запрос.УстановитьПараметр("НачДата",ПериодЗапроса.ДатаНачала);
Запрос.УстановитьПараметр("КонДата",ПериодЗапроса.ДатаОкончания);
КонецЕсли;
РезультатЗапроса = Запрос.Выполнить();
Выборка = РезультатЗапроса.Выбрать();
Выборка.Следующий();

НоваяСтрока = ТЗ.Добавить();
НоваяСтрока.Тип = ТипМД;
НоваяСтрока.Вид = Эл.Имя;
НоваяСтрока.Периодичность = Истина;
НоваяСтрока.Количество = Выборка.Количество;
КонецЦикла;

ТипМД = "РегистрСведений";
Для Каждого Эл Из Метаданные.РегистрыСведений Цикл
ВидМД = Эл.Имя;
Запрос = Новый Запрос;
Запрос.Текст = "Выбрать ЕстьNULL(Сумма(1),0) КАК Количество Из " + ТипМД + "." +ВидМД;

Периодичность = Не Эл.ПериодичностьРегистраСведений = Метаданные.СвойстваОбъектов.ПериодичностьРегистраСведений.Непериодический;
Если Периодичность И ПериодЗапроса <> Неопределено Тогда
Запрос.Текст = Запрос.Текст + " ГДЕ Период >= &НачДата И Период <= &КонДата";
Запрос.УстановитьПараметр("НачДата",ПериодЗапроса.ДатаНачала);
Запрос.УстановитьПараметр("КонДата",ПериодЗапроса.ДатаОкончания);
КонецЕсли;

РезультатЗапроса = Запрос.Выполнить();
Выборка = РезультатЗапроса.Выбрать();
Выборка.Следующий();

НоваяСтрока = ТЗ.Добавить();
НоваяСтрока.Тип = ТипМД;
НоваяСтрока.Вид = Эл.Имя;
НоваяСтрока.Периодичность = Периодичность;
НоваяСтрока.Количество = Выборка.Количество;
КонецЦикла;

ТипМД = "РегистрНакопления";
Для Каждого Эл Из Метаданные.РегистрыНакопления Цикл
ВидМД = Эл.Имя;
Запрос = Новый Запрос;
Запрос.Текст = "Выбрать ЕстьNULL(Сумма(1),0) КАК Количество Из " + ТипМД + "." +ВидМД;

Если ПериодЗапроса <> Неопределено Тогда
Запрос.Текст = Запрос.Текст + " ГДЕ Период >= &НачДата И Период <= &КонДата";
Запрос.УстановитьПараметр("НачДата",ПериодЗапроса.ДатаНачала);
Запрос.УстановитьПараметр("КонДата",ПериодЗапроса.ДатаОкончания);
КонецЕсли;

РезультатЗапроса = Запрос.Выполнить();
Выборка = РезультатЗапроса.Выбрать();
Выборка.Следующий();

НоваяСтрока = ТЗ.Добавить();
НоваяСтрока.Тип = ТипМД;
НоваяСтрока.Вид = Эл.Имя;
НоваяСтрока.Периодичность = Истина;
НоваяСтрока.Количество = Выборка.Количество;
КонецЦикла;

Возврат ТЗ;

КонецФункции

 

Leave a Comment

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