11. Механизмы построения отчетности
#4

Готовишься к экзамену?

Полнофункциональный тренажер @bot_1cnik_bot с полноценным обучением, режимом экзамена и подробной статистикой.

Перейти в бота

Вывод результата системы компоновки данных производится:

специальным методом объекта (в параметре которого задается поле табличного документа)
Неправильно: В СКД действительно есть удобные методы вывода (например, «Вывести» у процессора вывода), но они не означают, что существует единый «магический» метод у результата, который выводит всё целиком без разбиения. Внутренне вывод все равно выполняется по шагам - через обработку элементов результата компоновки.
путем вывода последовательно получаемых элементов результата системы компоновки
Правильно: Результат СКД представлен не «готовой таблицей», а набором элементов результата (заголовки, строки, группировки, итоги, оформление и т.п.), которые формируются последовательно. Процессор вывода берет эти элементы и по очереди переносит их в табличный документ, формируя итоговый отчет.
путем обхода объекта, содержащего результат исполнения системы компоновки
Неправильно: В СКД результат как единый самостоятельный объект «целиком» не предполагается для обхода в таком смысле - логически существуют именно элементы результата. На практике получают следующий элемент результата (например, методом «Следующий») и выводят его процессором вывода, а не обходят некий «контейнер результата» как единую структуру.

Пояснение

В СКД важно помнить принцип: результат компоновки - это поток (последовательность) элементов результата, а не заранее сформированная «готовая таблица». Поэтому вывод отчета устроен как поэлементная печать: платформа формирует очередной элемент результата (например, заголовок, строку группировки, строку данных, итог, область оформления), а процессор вывода переносит этот элемент в конкретное представление - чаще всего в ТабличныйДокумент. Типовой сценарий программного вывода выглядит так: 1) Готовят макет компоновки (на основе схемы и настроек). 2) Запускают процессор компоновки данных (он готовит элементы результата). 3) В цикле получают элементы результата и выводят их: - Элемент = ПроцессорКомпоновкиДанных.Следующий(); - пока Элемент не Неопределено: ПроцессорВывода.ВывестиЭлемент(Элемент); Даже если вы используете удобный метод «Вывести» у процессора вывода, это, по сути, «обертка», которая сама выполняет тот же поэлементный вывод (начать вывод → вывести все элементы → закончить вывод). Этот подход нужен, чтобы платформа могла формировать отчет порциями, поддерживать оформление, группировки и итоги, а также (в некоторых режимах) позволять прерывать вывод пользователем. Дополнительно: кроме вывода в табличный документ существуют процессоры вывода результата СКД в коллекции значений (таблица/дерево значений). Принцип остается тем же - вывод идет через последовательную обработку элементов результата.