Как правильно настроить сортировку периодов год и квартал в отчетах СКД

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

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

Выясним причину проблемы

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

Шаг 1. Настройка структуры группировок в таблице

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

Не рекомендуется добавлять поля ПериодГод и ПериодКвартал в одну и ту же группировку. Вместо этого проанализируем иерархическую структуру:

  1. Перейдем на закладку Настройки.
  2. В структуре отчета выберем Таблицу.
  3. В ветке Колонки создадим группировку по полю ПериодГод.
  4. Внутри группировки ПериодГод (как вложенную) создадим группировку по полю ПериодКвартал.

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

Шаг 2. Определение ролей полей в наборе данных

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

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

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

Шаг 3. Управление сортировкой в запросе и СКД

Проанализируем ситуацию с текстом запроса. Часто мы пишем примерно так:


ВЫБРАТЬ
    НАЧАЛОПЕРИОДА(Продажи.Период, ГОД) КАК ПериодГод,
    НАЧАЛОПЕРИОДА(Продажи.Период, КВАРТАЛ) КАК ПериодКвартал,
    Продажи.СуммаОборот КАК Сумма
ИЗ
    РегистрНакопления.Продажи.Обороты(&НачалоПериода, &КонецПериода, Авто, ) КАК Продажи
УПОРЯДОЧИТЬ ПО
    ПериодГод,
    ПериодКвартал

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

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

Шаг 4. Использование выражения упорядочивания

Если автоматическая сортировка все равно работает некорректно (например, из-за того, что тип поля в СКД определен как Число или Строка), воспользуемся свойством Выражение упорядочивания в наборе данных.

Для поля ПериодГод, которое выводится в заголовке как строка "2018 г.", в качестве выражения упорядочивания укажите реальную дату начала этого года. Это гарантирует, что 1С будет сравнивать даты, а не строковые представления. Проверьте, чтобы в колонке Тип значения для этих полей стояла Дата (или СтандартныйПериод), а не произвольный тип.

Дополнительные факторы влияния

Если вышеперечисленные шаги не помогли и отчет во внешнем файле продолжает «глючить» в рабочей базе, рассмотрим еще несколько неочевидных причин:

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

← На главную