Сканирование объектов метаданных.

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

Это моя первая деятельность в 1С, поэтому буду рад услышать пожелания и предложения по данному отчету, однако уже на данном этапе разработки он вполне способен справиться с поставленной задачей.

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

Для передачи параметров, конкретизирующих поиск используются реквизиты формы, так они видны отовсюду.

Часть кода отчета представлена ниже.

Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка)

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

Для Каждого Справочник Из Метаданные.Справочники Цикл
ИмяСправочника = Справочник.Имя;
СинонимОбъекта = Справочник.Синоним;

ТекстЗапроса = "ВЫБРАТЬ
| Количество(Справочник.Ссылка) КАК Всего
| ИЗ
| Справочник." + ИмяСправочника + " КАК Справочник";
Если (Справочник.Иерархический и Строка(Справочник.ВидИерархии) <> "ИерархияЭлементов") Тогда //Справочник.ВидИерархии
ТекстЗапроса = ТекстЗапроса + "
| ГДЕ Справочник.ЭтоГруппа = ЛОЖЬ";
КонецЕсли;

ЗапросКоличества = Новый Запрос(ТекстЗапроса);
Результат = ЗапросКоличества.Выполнить().Выбрать();
Если Результат.Следующий()Тогда
КоличествоЗаписей = Результат.Всего;
КонецЕсли;

Стр = МетТаб.Добавить();
Если СинонимОбъекта = "" Тогда
СинонимОбъекта = ИмяСправочника;
КонецЕсли;
Стр.ОбъектМетаданных = "Справочник";
Стр.Наименование = СинонимОбъекта;
Стр.Количество = КоличествоЗаписей;
Стр.Организация = "Без привязки";
КонецЦикла;


ДанныеРасшифровки = Новый ДанныеРасшифровкиКомпоновкиДанных; // Создаем данные расшифровки
КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных; // Создаем компоновщик макета
СхемаКомпоновкиДанных = ПолучитьМакет("Макет");
МакетКомпоновки = КомпоновщикМакета.Выполнить(СхемаКомпоновкиДанных, Настройки, ДанныеРасшифровки);

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

ДокументРезультат.Очистить();

// Выводим результат в табличный документ
ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент;
ПроцессорВывода.УстановитьДокумент(ДокументРезультат);
ПроцессорВывода.Вывести(ПроцессорКомпоновки);

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

 

2 Comments

  1. necropunk

    Их на инфостарте штук 20 наверное, от обычных отчетов до обработок считающих размер таблиц на скуле…

    Reply
  2. sergei198821

    Спасибо, полезная штука

    Reply

Leave a Comment

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