Как в СКД создать макет с заголовком, параметрами и пустой таблицей

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

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

Проблема вывода параметров отбора в пользовательский макет

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

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

  1. Перейдем на вкладку Параметры в схеме компоновки данных.
  2. Создадим новый параметр (например, ПараметрФИО) и свяжем его с соответствующим полем набора данных или оставим для заполнения пользователем.
  3. В настройках макета (вкладка Макеты) выберем ячейку, предназначенную для вывода ФИО, и в свойствах установим тип заполнения — Параметр.
  4. В поле Параметр укажем имя нашего созданного параметра ПараметрФИО.

Таким образом, значение, переданное в параметр, будет гарантированно отображено в указанной области макета, независимо от сложности структуры отчета.

Структура макетов: Разделение заголовка и тела таблицы

Для корректного отображения данных важно правильно настроить типы макетов для группировок. Выясним причину, почему иногда шапка таблицы дублируется или исчезает. В СКД существует несколько типов макетов для группировок:

Рассмотрим подробнее настройку. Чтобы заголовок таблицы (шапка) не повторялся для каждой строки, мы должны включить его именно в Макет заголовка группировки. Если мы создаем отчет только с детальными записями, нам нужно создать группировку "Детальные записи" и назначить ей два типа макета. Один — типа Заголовок (для шапки с названиями колонок), второй — типа Параметры (для вывода самих строк).

Принудительный вывод шапки при отсутствии данных

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

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

Добавление пустых строк в конец отчета

СКД не умеет "дорисовывать" таблицу до конца листа автоматически. Если вам нужно вывести, например, ровно 10 строк (даже если данных только на 3), существует два основных подхода. Рассмотрим их.

Способ 1: Объединение в запросе (UNION). Мы можем модифицировать основной запрос, добавив к нему объединение с пустыми строками. Посмотрим на пример логики запроса:


ВЫБРАТЬ
    РеальныеДанные.ФИО КАК ФИО,
    РеальныеДанные.Сумма КАК Сумма,
    1 КАК Порядок
ИЗ
    Документ.Продажи КАК РеальныеДанные

ОБЪЕДИНИТЬ ВСЕ

ВЫБРАТЬ
    "",
    0,
    2
ИЗ
    (ВЫБРАТЬ 1 КАК Ссылка ОБЪЕДИНИТЬ ВЫБРАТЬ 2 ...) КАК ПустыеСтроки

Используя служебное поле Порядок, мы обеспечим, что реальные записи будут сверху, а пустые — снизу. Однако этот метод не всегда удобен, если количество строк должно зависеть от размера страницы.

Способ 2: Программная доработка. Это самый гибкий метод. Мы перехватываем процесс вывода отчета в модуле объекта или в форме. Выясним, как это реализовать. После формирования основного табличного документа, мы можем в цикле добавить пустые строки из заранее подготовленного макета.


// Пример программного добавления строк после вывода СКД
ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент;
ПроцессорВывода.УстановитьДокумент(Результат);

ПроцессорВывода.НачатьВывод();
// ... стандартный вывод ...
ПроцессорВывода.ЗакончитьВывод();

// Досчитываем, сколько строк нужно добавить до полного листа
Макет = ПолучитьМакет("МойМакет");
ОбластьПустаяСтрока = Макет.ПолучитьОбласть("ПустаяСтрока");

Для Счетчик = 1 По (НужноеКоличествоСтрок - ТекущееКоличествоСтрок) Цикл
    Результат.Вывести(ОбластьПустаяСтрока);
КонецЦикла;

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

При настройке макета группировки часто возникает необходимость вывести номер по порядку. В макетах системное поле НомерВПорядке может вести себя непредсказуемо. Рекомендуется использовать выражение в ячейке макета. Проанализируем использование функции ВычислитьВыражение.

В ячейке макета, где должен быть номер, укажите параметр, например, НПП. В таблице Параметры макета для этого параметра пропишите выражение: ВычислитьВыражение("Количество(Ложь)", , "Группировка"). Это обеспечит сквозную нумерацию строк в рамках вашей группировки, которая будет корректно отображаться в пользовательском макете.

Итоги и рекомендации

Создание сложных печатных форм через макеты СКД — это баланс между визуальным оформлением и логикой данных. Помните:

  1. Заголовки: Всегда выносите параметры отбора в параметры схемы, если используете свои макеты.
  2. Группировки: Четко разделяйте макеты заголовка (шапка) и тела (данные).
  3. Пустые строки: Используйте программный вывод для точного заполнения печатного листа.
  4. Системные поля: Не бойтесь использовать язык выражений СКД внутри макетов для вычисления итогов или порядковых номеров.

Такой подход позволит вам создавать профессиональные и удобные для пользователя отчеты, полностью соответствующие требованиям бизнес-задач.

← На главную