Доброго дня, коллеги!
Многим мало одного примера какого-либо приема разработки, они хотят понимать, где еще на практике можно использовать разобранный способ.
Вопрос
Для чего может использоваться метод поэлементного вывода результата? В каких задачах может это потребоваться? В отладчике считываю данные “ЭлементРезультата“, но никакого смысла не понимаю.
(нажмите, чтобы увеличить картинку)
Ответ
Например, в одном из видеоуроков рассматривается вопрос программной фиксации шапки отчета. Для этого используется поэлементный вывод результата.
Программный код получился вот такой:
&НаСервереБезКонтекста Функция ВывестиОтчетНаСервере() СхемаКомпоновки = Отчеты.ОстаткиТоваровНаСкладах.ПолучитьМакет("ОсновнаяСхемаКомпоновкиДанных"); НастройкиКомпоновки = СхемаКомпоновки.НастройкиПоУмолчанию; КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных; МакетКомпоновки = КомпоновщикМакета.Выполнить(СхемаКомпоновки, НастройкиКомпоновки); ПроцессорКомпоновки = Новый ПроцессорКомпоновкиДанных; ПроцессорКомпоновки.Инициализировать(МакетКомпоновки); ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент; ТабДок = новый ТабличныйДокумент; ПроцессорВывода.УстановитьДокумент(ТабДок); ПроцессорВывода.НачатьВывод(); ПризнакФиксации = Ложь; Пока Истина Цикл ЭлементРезультата = ПроцессорКомпоновки.Следующий(); Если ЭлементРезультата = Неопределено Тогда Прервать; Иначе Если НЕ ПризнакФиксации И ЭлементРезультата.ЗначенияПараметров.Количество() > 0 Тогда ПризнакФиксации = Истина; ТабДок.ФиксацияСверху = ТабДок.ВысотаТаблицы; КонецЕсли; ПроцессорВывода.ВывестиЭлемент(ЭлементРезультата); КонецЕсли; КонецЦикла; ПроцессорВывода.ЗакончитьВывод(); Возврат ТабДок; КонецФункции
Комментарий слушателя
Комментарий тренера
Система компоновки данных выводит результирующий отчет в табличный документ не сразу за одно действие, а определенными порциями. При компоновке выполняются запросы к базе, рассчитываются итоги, учитываются макеты, происходит оформление ячеек отчета, отрисовка ячеек табличного документа и т.д. Все алгоритмы реализованы на уровне платформы, прикладному разработчику недоступны. Ему доступен только тот факт, что вывод отчета происходит порциями, шагами. Каждая порция – это и есть элемент результата компоновки данных. Фактически это специальный вспомогательный объект, при выводе этого элемента в отчет выводится отдельная ячейка, строка, заголовок, описания параметров отчета, описания отборов и т.д.
В элементе результата компоновки данных можно выделить 2 основных свойства. Это Макет (как должна выглядеть выводимая область) и ЗначенияПараметров (какие значения должны принимать параметры в этой области).
Чтобы получить представление, как всё это устроено, можно использовать консоль компоновки от ИР (инструменты разработчика). В ней есть инструмент Исследовать – Элементы результата. Можно посмотреть, как заполнены свойства каждого элемента результата.
Можно провести аналогию с формированием отчета при помощи макета – табличного документа. Сначала мы выводим секцию с заголовком, потом выводим шапку отчета, потом в цикле выводим в отчет строки данных, затем подвал с итоговыми значениями. Каждый такой этап дает нам представление об элементах результата компоновки данных.
Теперь поясним приведенный в предыдущем сообщении алгоритм. Нам нужно зафиксировать шапку отчета.
Как происходит вывод отчета? При выводе отчета сначала выводится заголовок, описание отборов отчета, шапка отчета. В этих данных нет никаких параметров, все выводимые данные находятся непосредственно в выводимом макете (это можно проверить при помощи инструмента ИР Плоский макет компоновки):
Затем нужно выводить данные самого отчета – строки с данными. И вот тут уже будут заполнены значения параметров.
Значит, у нас есть признак: как только значения параметров становятся заполнены, значит, шапку отчета мы уже вывели, приступаем к выводу строк отчета, но сами строки еще не вывели. Следовательно, это самый подходящий момент, чтобы зафиксировать шапку отчета. Получаем высоту таблицы – именно столько строк в табличном документе и нужно закрепить.
Профессиональная разработка отчетов в 1С 8.3 на СКД.
Здравствуйте, у меня вопрос поэлементному выводу результата процессором вывода. Можно ли увидеть данные строк и по условию выводить или не выводить строку?
Добрый день!
До самих значений можно добраться через свойство ЗначенияПараметров элемента результата компоновки данных.
Например, при выводе в отчет данных по справочнику Валюты можно получить такие значения:
Но сложно определить, какое значение в каком параметре будет выводиться, поэтому может оказаться сложным реализовать подобную логику обработки результата компоновки.