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

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

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

Проблема №1: Почему шапка отчета дублируется для каждой строки

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

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

Чтобы решить эту проблему, выполним следующие действия:

  1. Перейдем на закладку Макеты в схеме компоновки данных.
  2. Разделим область в табличном документе на две части: отдельно строку с заголовками (шапку) и отдельно строку с параметрами (данные).
  3. При добавлении макета для группировки (например, для группировки Детальные записи) выберем тип Макет заголовка группировки для строки с названиями колонок.
  4. Для строки, где указаны параметры в угловых скобках (например, <Номенклатура>), создадим отдельный макет с типом Макет группировки.

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

Проблема №2: Настройка периода для справочников в СКД

Выясним причину, по которой стандартные параметры НачалоПериода и КонецПериода часто не работают "из коробки" для справочников. В отличие от регистров накопления или бухгалтерии, справочники — это объектные данные, они не имеют виртуальных таблиц, которые автоматически подхватывают период. Если вы просто добавите параметр в отчет, 1С не будет знать, к какому полю его применить.

Рассмотрим подробнее, как реализовать фильтрацию по дате реквизита справочника:

Во-первых, нам необходимо вручную прописать условие в тексте запроса набора данных. Перейдите на закладку Набор данных и отредактируйте запрос. Рассмотрим пример:


ВЫБРАТЬ
    СправочникОбъекты.Ссылка КАК Ссылка,
    СправочникОбъекты.Дата КАК Дата,
    СправочникОбъекты.Наименование КАК Наименование
ИЗ
    Справочник.ВашСправочник КАК СправочникОбъекты
ГДЕ
    СправочникОбъекты.Дата МЕЖДУ &НачалоПериода И &КонецПериода

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

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

Проблема №3: Ошибка "Поле не может быть использовано в группировке"

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

Причины могут быть следующими:

  1. Несоответствие имен: В макете вы указали параметр &Дата, а в наборе данных это поле называется, например, ДатаСоздания. Проверьте соответствие имен на закладке Набор данных и в свойствах ячейки макета.
  2. Ограничения в схеме: На закладке Наборы данных найдите ваше поле и проверьте колонку Ограничения. Если там установлен флажок в поле Ограничение группировки, вы не сможете использовать это поле в иерархии или группировках отчета.
  3. Конфликт в настройках: Если вы пытаетесь сгруппировать отчет по ссылке, а в макете этой группировки выводите дату без явного указания поля в выбранных полях компоновки, может возникнуть ошибка исполнения. Убедитесь, что поле Дата добавлено в список Выбранные поля на закладке Настройки.

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

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

Если же макет необходим, придерживайтесь следующих правил:

Разберем еще один важный момент: если отчет перестал формироваться после установки периода (выходит пустой лист), проверьте время в датах. Если в справочнике дата записана как 15.05.2023 14:00:00, а параметр КонецПериода передает 15.05.2023 00:00:00, то данные за этот день не попадут в отчет. Чтобы этого избежать, в выражении параметра КонецПериода лучше использовать функцию: КонецПериода(&СтандартныйПериод.ДатаОкончания, "ДЕНЬ").

Соблюдение этих правил и понимание механизмов работы компоновщика позволит вам создавать стабильные и понятные отчеты любой сложности.

← На главную