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