Работа с Системой компоновки данных (СКД) в 1С предоставляет огромные возможности, но использование собственных макетов часто вызывает трудности у начинающих разработчиков. Типичные проблемы — это бесконечно повторяющаяся шапка таблицы и невозможность корректно отфильтровать данные по дате, если отчет строится не по регистрам, а по справочникам. В этой статье мы разберем по шагам, как решить эти задачи и сделать ваш отчет профессиональным.
Рассмотрим ситуацию: вы создали макет в СКД, нарисовали красивую шапку, добавили параметры, но при формировании отчета видите, что названия колонок выводятся перед каждой новой строкой данных. Проанализируем причину: это происходит из-за неправильного назначения типов макетов в настройках компоновки.
В СКД существует строгое разделение между макетом самой группировки и макетом ее заголовка. Если вы помещаете текст заголовков колонок в область, которая назначена как Макет группировки, 1С воспринимает это как часть строки данных. Следовательно, для каждой записи из выборки система будет заново выводить всё содержимое этой области.
Чтобы решить эту проблему, выполним следующие действия:
Детальные записи) выберем тип Макет заголовка группировки для строки с названиями колонок.<Номенклатура>), создадим отдельный макет с типом Макет группировки.Таким образом, система выведет заголовок один раз в начале формирования группировки, а затем будет итерировать только область данных. Для более сложных сценариев оформления колонок по периодам подойдёт пример формирования шапки отчета по неделям и месяцам в СКД.
Выясним причину, по которой стандартные параметры НачалоПериода и КонецПериода часто не работают "из коробки" для справочников. В отличие от регистров накопления или бухгалтерии, справочники — это объектные данные, они не имеют виртуальных таблиц, которые автоматически подхватывают период. Если вы просто добавите параметр в отчет, 1С не будет знать, к какому полю его применить.
Рассмотрим подробнее, как реализовать фильтрацию по дате реквизита справочника:
Во-первых, нам необходимо вручную прописать условие в тексте запроса набора данных. Перейдите на закладку Набор данных и отредактируйте запрос. Рассмотрим пример:
ВЫБРАТЬ
СправочникОбъекты.Ссылка КАК Ссылка,
СправочникОбъекты.Дата КАК Дата,
СправочникОбъекты.Наименование КАК Наименование
ИЗ
Справочник.ВашСправочник КАК СправочникОбъекты
ГДЕ
СправочникОбъекты.Дата МЕЖДУ &НачалоПериода И &КонецПериода
Во-вторых, настроим связь с удобным для пользователя выбором периода. На закладке Параметры создадим новый параметр с именем СтандартныйПериод и типом СтандартныйПериод. Для системных параметров НачалоПериода и КонецПериода установим ограничение доступности (флажок Ограничение доступности), чтобы пользователь их не видел, а в поле Выражение пропишем:
&СтандартныйПериод.ДатаНачала&СтандартныйПериод.ДатаОкончанияТеперь при выборе периода в пользовательских настройках запрос будет получать конкретные даты и корректно фильтровать записи справочника. Для более удобной интеграции параметров в интерфейс можно использовать механизм стыковки элементов управляемой формы и пользовательских настроек СКД.
Эта ошибка часто ставит в тупик: вы добавили поле в запрос, видите его в схеме, но при попытке сформировать отчет или использовать его в макете система выдает отказ. Проанализируем ситуацию на примере поля Дата, которое является реквизитом справочника.
Причины могут быть следующими:
&Дата, а в наборе данных это поле называется, например, ДатаСоздания. Проверьте соответствие имен на закладке Набор данных и в свойствах ячейки макета.Дата добавлено в список Выбранные поля на закладке Настройки.Использование макетов в СКД — это крайняя мера. Прежде чем приступать к их созданию, мы рекомендуем убедиться, что задачу нельзя решить стандартными средствами. Стандартный вывод СКД гораздо гибче реагирует на изменения группировок пользователем.
Если же макет необходим, придерживайтесь следующих правил:
&) должны быть определены либо как поля набора данных, либо как параметры на соответствующей вкладке СКД.Разберем еще один важный момент: если отчет перестал формироваться после установки периода (выходит пустой лист), проверьте время в датах. Если в справочнике дата записана как 15.05.2023 14:00:00, а параметр КонецПериода передает 15.05.2023 00:00:00, то данные за этот день не попадут в отчет. Чтобы этого избежать, в выражении параметра КонецПериода лучше использовать функцию: КонецПериода(&СтандартныйПериод.ДатаОкончания, "ДЕНЬ").
Соблюдение этих правил и понимание механизмов работы компоновщика позволит вам создавать стабильные и понятные отчеты любой сложности.