Базомер (показывает количество записей в таблицах)


Базомер показывает количество записей во всех регистрах сведений, регистрах накопления, документах и справочниках.

Есть возможность сформировать список всех объектов метаданных и отметить нужные к замеру. Результат замера выводится в таблицу. Имеется возможность сортировки объектов по количеству записей и вывода результата в Excel. Обработка легко подключается к базе в качестве дополнительной глобальной обработки. Работает в небезопасном режиме (для чтения объектов метаданных без права администрирования).

Писалась для ERP 2.4.7.151, платформу 8.3.13.1644. Работает в ЗУП 3.1.9.159. По идее должна работать и в других конфигурациях на БСП.

 

&НаСервере
Процедура НачатьЗамерНаСервере()

УстановитьПривилегированныйРежим(Истина);

Для каждого ОбъектКЗамеру Из Объект.ВыбранныеОбъектыМетаданных Цикл
Если Не ОбъектКЗамеру.Отметка Тогда
Продолжить;
КонецЕсли;

ТипЗнчВыбранныйСтрокой  = ОбъектКЗамеру.ПолноеИмяОбъектаМетаданных;
МетаданныеКЗамеру   = Метаданные.НайтиПоПолномуИмени(ТипЗнчВыбранныйСтрокой);

Если СтрНайти(МетаданныеКЗамеру.ПолноеИмя(), "РегистрСведений") > 0 Тогда
Попытка
НаборЗаписей = РегистрыСведений[МетаданныеКЗамеру.Имя].СоздатьНаборЗаписей();
НаборЗаписей.Прочитать();
КоличествоЗаписей = НаборЗаписей.Количество();

Строка = Объект.Результат.Добавить();
Строка.ОбъектМетаданных  = ОбъектКЗамеру.ПолноеИмяОбъектаМетаданных;
Строка.КоличествоЗаписей = КоличествоЗаписей;
Исключение
Сообщить("ОшибкаОбработкиОбъекта "+МетаданныеКЗамеру.ПолноеИмя()+" "+ОписаниеОшибки());
Продолжить;
КонецПопытки;
КонецЕсли;

Если СтрНайти(МетаданныеКЗамеру.ПолноеИмя(), "РегистрНакопления") > 0 Тогда
Попытка
НаборЗаписей = РегистрыНакопления[МетаданныеКЗамеру.Имя].СоздатьНаборЗаписей();
НаборЗаписей.Прочитать();
КоличествоЗаписей = НаборЗаписей.Количество();

Строка = Объект.Результат.Добавить();
Строка.ОбъектМетаданных  = ОбъектКЗамеру.ПолноеИмяОбъектаМетаданных;
Строка.КоличествоЗаписей = КоличествоЗаписей;
Исключение
Сообщить("ОшибкаОбработкиОбъекта "+МетаданныеКЗамеру.ПолноеИмя()+" "+ОписаниеОшибки());
Продолжить;
КонецПопытки;
КонецЕсли;

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

Строка = Объект.Результат.Добавить();
Строка.ОбъектМетаданных  = ОбъектКЗамеру.ПолноеИмяОбъектаМетаданных;
Строка.КоличествоЗаписей = КоличествоЗаписей;
Исключение
Сообщить("ОшибкаОбработкиОбъекта "+МетаданныеКЗамеру.ПолноеИмя()+" "+ОписаниеОшибки());
Продолжить;
КонецПопытки;
КонецЕсли;

Если СтрНайти(МетаданныеКЗамеру.ПолноеИмя(), "Справочник") > 0 Тогда
Попытка
ВыборкаСправочников = Справочники[МетаданныеКЗамеру.Имя].Выбрать();
КоличествоЗаписей = 0;
Пока ВыборкаСправочников.Следующий() Цикл
КоличествоЗаписей = КоличествоЗаписей + 1;
КонецЦикла;

Строка = Объект.Результат.Добавить();
Строка.ОбъектМетаданных  = ОбъектКЗамеру.ПолноеИмяОбъектаМетаданных;
Строка.КоличествоЗаписей = КоличествоЗаписей;
Исключение
Сообщить("ОшибкаОбработкиОбъекта "+МетаданныеКЗамеру.ПолноеИмя()+" "+ОписаниеОшибки());
Продолжить;
КонецПопытки;
КонецЕсли;

КонецЦикла;

УстановитьПривилегированныйРежим(Ложь);
КонецПроцедуры

 

6 Comments

  1. alex-l19041

    вот это

    ВыборкаДокументов = Документы[МетаданныеКЗамеру.Имя].Выбрать();

    КоличествоЗаписей = 0;

    Пока ВыборкаДокументов.Следующий() Цикл

    КоличествоЗаписей = КоличествоЗаписей + 1;

    КонецЦикла;

    лучше заменить на Запрос который вернет количество

    «ВЫБРАТЬ
    | КОЛИЧЕСТВО(ТаблицаДанных.Ссылка) КАК Количество,
    |ИЗ
    | Документ.» + ИмяТаблицы + » КАК ТаблицаДанных
    
    Reply
  2. alex-l19041

    и для справочников можно аналогично

    «ВЫБРАТЬ
    | КОЛИЧЕСТВО(ТаблицаДанных.Ссылка) КАК Количество,
    |ИЗ
    | Справочник.» + ИмяТаблицы + » КАК ТаблицаДанных
    
    Reply
  3. cool99

    «Рука лицо» — в то время как наши кОрабли бороздят просторы вселенной, в 2019 году мы считаем количество записей в таблицах через чтение набора записей и выборки, а если там миллионов 10 записей?

    Писалась для ERP 2.4.7.151

    Бедная ERP

    Reply
  4. ВикторП

    (3) зачем ? уже написали в (1) и (2) , не на мисте .

    Reply
  5. cool99

    (4) Просто с таким уровнем представляю, что в ЕРП они нашкодили — эта мысль основная (Как говорил Штирлиц, запоминается только последняя часть разговора, а у вас наоборот :))

    С ее требованиями и подобными разработками никаких серверов не хватит. И Вас не смущает, что автор мало того, что «денюшку» просит, да еще и не отписался по комментариям 1/2? Вот зайдет какой-нибудь неокрепший ум и возьмет данный код (не читая комментов) на вооружение и пополнит ряды сами знаете кого.

    Reply
  6. ВикторП

    Подарок

    Reply

Leave a Comment

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