Содержание:
Файлы материала
Периодически возникают задачи, когда нужно собрать по базе некоторые данные и упаковать в таблицу значений, например для передаче сторонней программе (в моем случаи это шина данных реализованная на RabbitMQ). Часто бывает, что такие данные уже есть в некотором отчете, который был проверен аналитиком, заказчиком и нам остается только получить их в необходимом виде. Давайте рассмотрим один из вариантов решения этой задачи на примере.
Реализация
Для примера, возьмем простой внешний отчет 1С ЗУП, который выводит информацию по полу и возрасту сотрудников. Предварительно добавим его в базу (Администрирование -> Печатные формы, отчеты и обработки -> Дополнительные отчеты и обработки).

При желании можно скачать и посмотреть код отчета по ссылке.
Далее из общего модуля конфигурации обратимся к этому отчету и получим результат в таблицу значений следующим образом:
Листинг кода получения данных из внешнего отчета
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 |
Функция ДанныеПоказателяПолоВозрастнойСостав(ДатаОтчета) Экспорт Результат = Новый ТаблицаЗначений; ОтчетСсылка = Справочники.ДополнительныеОтчетыИОбработки.НайтиПоРеквизиту("ИмяОбъекта", "ПолоВозрастнойСостав"); ОтчетОбъект = ДополнительныеОтчетыИОбработки.ОбъектВнешнейОбработки(ОтчетСсылка); ОтчетОбъект.ИнициализироватьОтчет(); // при необходимости, экспортный метод должен быть прописан в отчете // Установка параметра отчета НастройкиОтчета = ОтчетОбъект.КомпоновщикНастроек.Настройки; Если ЗначениеЗаполнено(ДатаОтчета) Тогда НастройкиОтчета.ПараметрыДанных.УстановитьЗначениеПараметра("ДатаОтчета", ДатаОтчета); КонецЕсли; //Макет компоновки КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных; МакетКомпоновкиДанных = КомпоновщикМакета.Выполнить(ОтчетОбъект.СхемаКомпоновкиДанных, НастройкиОтчета, , , Тип("ГенераторМакетаКомпоновкиДанныхДляКоллекцииЗначений")); //Компоновка данных ПроцессорКомпоновкиДанных = Новый ПроцессорКомпоновкиДанных; ПроцессорКомпоновкиДанных.Инициализировать(МакетКомпоновкиДанных); //Вывод результата ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВКоллекциюЗначений; ПроцессорВывода.УстановитьОбъект(Результат); ПроцессорВывода.Вывести(ПроцессорКомпоновкиДанных); Возврат Результат; КонецФункции |
Получим в переменную Результат данные формирования отчета в виде таблицы значений. Кстати Тип(«ГенераторМакетаКомпоновкиДанныхДляКоллекцииЗначений») подойдет и для коллекции «Дерево значений».

Огромное спасибо!