Как вывести значения пользовательских отборов в шапку и подвал отчета СКД без программирования

Программист 1С v8.3 (Управляемые формы) IT и автоматизация бизнеса
← На главную

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

Использование макетов оформления для кастомизации заголовка

Первым делом проанализируем возможности вкладки «Макеты» в схеме компоновки данных. Это мощнейший инструмент, который позволяет полностью переопределить визуальное представление любой части отчета. Вместо того чтобы полагаться на стандартный вывод, мы создадим собственный шаблон для заголовка.

Рассмотрим по шагам процесс создания такого макета:

  1. Переходим на вкладку «Макеты» в схеме СКД.
  2. Нажимаем «Добавить макет» и выбираем тип «Макет группировки» или «Макет заголовка группировки». Если нам нужно оформить самый верх отчета, выбираем «Макет заголовка отчета».
  3. В появившемся редакторе, похожем на таблицу Excel, рисуем нужную нам область. Объединяем ячейки, задаем границы, шрифты и цвета.
  4. В нужной ячейке, где должен отображаться отбор, указываем имя параметра, например, &ВыбранныйСклад.
  5. В нижней части окна настройки макета связываем этот параметр с конкретным полем или параметром СКД.

Важно помнить, что если мы хотим вывести именно значение отбора, который установил пользователь в стандартном окне фильтров, нам нужно предварительно «подготовить» это значение, сделав его доступным для макета.

Преобразование отборов в параметры данных

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

Посмотрим на алгоритм настройки:

  1. На вкладке «Параметры» создаем новый параметр, например, ПериодОтчета с типом СтандартныйПериод или Организация с типом ссылки.
  2. В колонке «Выражение» или «Включать в доступные настройки» настраиваем так, чтобы пользователь видел этот параметр на форме.
  3. В тексте запроса или на вкладке «Настройки» -> «Отбор» привязываем поле данных к этому параметру.

Теперь значение, которое введет пользователь, попадает в параметр ПараметрыДанных.Организация. В макете нам остается только прописать в ячейке выражение &Организация. Это позволяет разместить выбранное значение в любом месте — хоть в середине текстового предложения в шапке.

Вычисляемые поля для формирования сложных строк

Бывают ситуации, когда нужно вывести не просто значение, а отформатированную строку. Например: «Отчет сформирован по складу Центральный за период Январь 2024». Для этого идеально подходят Вычисляемые поля.

Разберем пример выражения для вычисляемого поля:


"Отчет за период с " + Формат(ПараметрыДанных.НачалоПериода, "ДФ=dd.MM.yyyy") + " по " + Формат(ПараметрыДанных.КонецПериода, "ДФ=dd.MM.yyyy")

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

Использование системных функций СКД в выражениях

Проанализируем ситуацию, когда нам нужно вывести представление периода в человекочитаемом виде (например, «Март 2024» вместо «01.03.2024 0:00:00»). В СКД есть встроенные функции, которые работают внутри выражений макета или вычисляемых полей:

Эти функции можно вставлять прямо в параметры макета. Например, в поле «Выражение параметра макета» мы можем написать:

"Выбранные фильтры: " + Представление(ПараметрыДанных.Магазин)

Вывод данных в подвал отчета

Для вывода значений в подвал (например, кто сформировал отчет или итоговые условия фильтрации в конце страницы), мы используем тот же механизм макетов, но выбираем «Макет подвала отчета».

Рассмотрим нюанс: если нужно вывести итоги, которые зависят от отборов, в подвале макета можно использовать агрегатные функции СКД, такие как Сумма(СуммаОборот) или Количество(Документ). СКД автоматически рассчитает их с учетом всех пользовательских настроек и выведет в те ячейки подвала, которые мы определили в макете.

Связь с общими модулями (если макета недостаточно)

Хотя в условии задачи указано отсутствие кода в модуле отчета, мы можем использовать функции Общих модулей (с флагами «Клиент», «Сервер», «Вызов сервера»). В выражениях СКД (вычисляемые поля или параметры макета) можно вызывать эти функции.

Пример использования функции общего модуля в выражении макета:


ОбщийМодульОтчетыСервер.СформироватьЗаголовокОтбора(КомпоновщикНастроек.Настройки.Отбор)

Это позволяет реализовать максимально сложную логику обработки коллекции отборов, при этом сам отчет останется «чистым» от кода, так как вся логика будет вынесена в общую библиотеку функций предприятия.

Подведем итог: для реализации «заковыристого» вывода пользовательских отборов нам необходимо комбинировать использование Параметров данных, которые связаны с полями отбора, и Собственных макетов. Это дает полную свободу в оформлении отчета, сохраняя все преимущества декларативного подхода СКД.

← На главную