Это моя первая деятельность в 1С, поэтому буду рад услышать пожелания и предложения по данному отчету, однако уже на данном этапе разработки он вполне способен справиться с поставленной задачей.
Перебор объектов осуществляется циклом, в котором присутствует запрос для определения количества по каждому объекту. Данные заносятся в таблицу значений с последующей передачей е в отчет.
Для передачи параметров, конкретизирующих поиск используются реквизиты формы, так они видны отовсюду.
Часть кода отчета представлена ниже.
Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка)
СтандартнаяОбработка = Ложь;
Настройки = КомпоновщикНастроек.ПолучитьНастройки();
МетТаб = Новый ТаблицаЗначений;
ОтборМетаданных = Новый Структура;
МетТаб.Колонки.Добавить("ОбъектМетаданных");
МетТаб.Колонки.Добавить("Наименование");
МетТаб.Колонки.Добавить("Количество");
МетТаб.Колонки.Добавить("Организация");
Для Каждого Справочник Из Метаданные.Справочники Цикл
ИмяСправочника = Справочник.Имя;
СинонимОбъекта = Справочник.Синоним;
ТекстЗапроса = "ВЫБРАТЬ
| Количество(Справочник.Ссылка) КАК Всего
| ИЗ
| Справочник." + ИмяСправочника + " КАК Справочник";
Если (Справочник.Иерархический и Строка(Справочник.ВидИерархии) <> "ИерархияЭлементов") Тогда //Справочник.ВидИерархии
ТекстЗапроса = ТекстЗапроса + "
| ГДЕ Справочник.ЭтоГруппа = ЛОЖЬ";
КонецЕсли;
ЗапросКоличества = Новый Запрос(ТекстЗапроса);
Результат = ЗапросКоличества.Выполнить().Выбрать();
Если Результат.Следующий()Тогда
КоличествоЗаписей = Результат.Всего;
КонецЕсли;
Стр = МетТаб.Добавить();
Если СинонимОбъекта = "" Тогда
СинонимОбъекта = ИмяСправочника;
КонецЕсли;
Стр.ОбъектМетаданных = "Справочник";
Стр.Наименование = СинонимОбъекта;
Стр.Количество = КоличествоЗаписей;
Стр.Организация = "Без привязки";
КонецЦикла;
ДанныеРасшифровки = Новый ДанныеРасшифровкиКомпоновкиДанных; // Создаем данные расшифровки
КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных; // Создаем компоновщик макета
СхемаКомпоновкиДанных = ПолучитьМакет("Макет");
МакетКомпоновки = КомпоновщикМакета.Выполнить(СхемаКомпоновкиДанных, Настройки, ДанныеРасшифровки);
ПроцессорКомпоновки = Новый ПроцессорКомпоновкиДанных;
ПроцессорКомпоновки.Инициализировать(МакетКомпоновки, Новый Структура("ОтборМетаданных", МетТаб), ДанныеРасшифровки);
ДокументРезультат.Очистить();
// Выводим результат в табличный документ
ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент;
ПроцессорВывода.УстановитьДокумент(ДокументРезультат);
ПроцессорВывода.Вывести(ПроцессорКомпоновки);
КонецПроцедуры