[ Вопрос дня ] Где на практике используется поэлементный вывод результата в СКД?

Доброго дня, коллеги!

Многим мало одного примера какого-либо приема разработки, они хотят понимать, где еще на практике можно использовать разобранный способ.

Вопрос

Добрый день.

Для чего может использоваться метод поэлементного вывода результата? В каких задачах может это потребоваться? В отладчике считываю данные “ЭлементРезультата“, но никакого смысла не понимаю.

Реализация услуг и прочих активов

(нажмите, чтобы увеличить картинку)

Ответ

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

Программный код получился вот такой:

&НаСервереБезКонтекста
Функция ВывестиОтчетНаСервере()
    СхемаКомпоновки = Отчеты.ОстаткиТоваровНаСкладах.ПолучитьМакет("ОсновнаяСхемаКомпоновкиДанных");
    НастройкиКомпоновки = СхемаКомпоновки.НастройкиПоУмолчанию;
    КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных;
    МакетКомпоновки = КомпоновщикМакета.Выполнить(СхемаКомпоновки, НастройкиКомпоновки);
     ПроцессорКомпоновки = Новый ПроцессорКомпоновкиДанных;
    ПроцессорКомпоновки.Инициализировать(МакетКомпоновки);
    ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент;
    ТабДок = новый ТабличныйДокумент;
    ПроцессорВывода.УстановитьДокумент(ТабДок);
    ПроцессорВывода.НачатьВывод();
    ПризнакФиксации = Ложь;
    Пока Истина Цикл
        ЭлементРезультата = ПроцессорКомпоновки.Следующий();
        Если ЭлементРезультата = Неопределено Тогда
            Прервать;
        Иначе
            Если НЕ ПризнакФиксации И ЭлементРезультата.ЗначенияПараметров.Количество() > 0 Тогда
                   ПризнакФиксации = Истина;
                ТабДок.ФиксацияСверху = ТабДок.ВысотаТаблицы;
            КонецЕсли;
             ПроцессорВывода.ВывестиЭлемент(ЭлементРезультата);
        КонецЕсли;
    КонецЦикла;
    ПроцессорВывода.ЗакончитьВывод();
    Возврат ТабДок;
КонецФункции

Комментарий слушателя

Этот пример работает, но я не понимаю, почему он работает. Что представляет из себя ЭлементРезультата. Сколько их будет в цикле? Что конкретно выводит каждый такой элемент? Почему именно в том элементе, где количество параметров >0, мы добавляем код? Что еще можно получить из перебора этих элементов?

Комментарий тренера

Система компоновки данных выводит результирующий отчет в табличный документ не сразу за одно действие, а определенными порциями. При компоновке выполняются запросы к базе, рассчитываются итоги, учитываются макеты, происходит оформление ячеек отчета, отрисовка ячеек табличного документа и т.д. Все алгоритмы реализованы на уровне платформы, прикладному разработчику недоступны. Ему доступен только тот факт, что вывод отчета происходит порциями, шагами. Каждая порция – это и есть элемент результата компоновки данных. Фактически это специальный вспомогательный объект, при выводе этого элемента в отчет выводится отдельная ячейка, строка, заголовок, описания параметров отчета, описания отборов и т.д.

В элементе результата компоновки данных можно выделить 2 основных свойства. Это Макет (как должна выглядеть выводимая область) и ЗначенияПараметров (какие значения должны принимать параметры в этой области).

Чтобы получить представление, как всё это устроено, можно использовать консоль компоновки от ИР (инструменты разработчика). В ней есть инструмент Исследовать – Элементы результата. Можно посмотреть, как заполнены свойства каждого элемента результата.

Можно провести аналогию с формированием отчета при помощи макета – табличного документа. Сначала мы выводим секцию с заголовком, потом выводим шапку отчета, потом в цикле выводим в отчет строки данных, затем подвал с итоговыми значениями. Каждый такой этап дает нам представление об элементах результата компоновки данных.

Теперь поясним приведенный в предыдущем сообщении алгоритм. Нам нужно зафиксировать шапку отчета.

Как происходит вывод отчета? При выводе отчета сначала выводится заголовок, описание отборов отчета, шапка отчета. В этих данных нет никаких параметров, все выводимые данные находятся непосредственно в выводимом макете (это можно проверить при помощи инструмента ИР Плоский макет компоновки):

Плоский макет компоновки

Затем нужно выводить данные самого отчета – строки с данными. И вот тут уже будут заполнены значения параметров.

Значит, у нас есть признак: как только значения параметров становятся заполнены, значит, шапку отчета мы уже вывели, приступаем к выводу строк отчета, но сами строки еще не вывели. Следовательно, это самый подходящий момент, чтобы зафиксировать шапку отчета. Получаем высоту таблицы – именно столько строк в табличном документе и нужно закрепить.

Это пример разобранного вопроса из Мастер-группы курса
Профессиональная разработка отчетов в 1С 8.3 на СКД.

Описание курса и примеры видео

Комментарии / обсуждение (2):

  1. OlgaSh

    Здравствуйте, у меня вопрос поэлементному выводу результата процессором вывода. Можно ли увидеть данные строк и по условию выводить или не выводить строку?

    • Василий Ханевич

      Добрый день!
      До самих значений можно добраться через свойство ЗначенияПараметров элемента результата компоновки данных.
      Например, при выводе в отчет данных по справочнику Валюты можно получить такие значения:
      Значения параметров
      Но сложно определить, какое значение в каком параметре будет выводиться, поэтому может оказаться сложным реализовать подобную логику обработки результата компоновки.

Добавить комментарий

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

Вход на сайт

Зарегистрироваться

Подтверждение регистрации будет отправлено на указанный e-mail.

Я подтверждаю, что ознакомлен(а) с Пользовательским соглашением, принимаю его условия и даю свое согласие на обработку моих персональных данных.

Восстановить доступ

E-mail или логин

Ссылка на создание нового пароля будет отправлена на указанный e-mail.