Работа с Системой компоновки данных (СКД) часто ставит в тупик начинающих разработчиков, особенно когда дело касается визуального порядка строк в готовом отчете. Часто возникает ситуация: в дереве настроек группировка добавлена, но строки в отчете выводятся «как попало» или по алфавиту, а стандартные кнопки управления порядком (стрелочки) оказываются недоступными. Рассмотрим подробно, как работает механизм упорядочивания данных в СКД и как добиться нужной последовательности вывода.
Проанализируем типичную ошибку: попытку изменить порядок строк через вкладку Выбранные поля или просто перемещением группировок в дереве настроек. Важно понимать, что дерево на вкладке Настройки определяет структуру отчета (что вложено во что), а не физический порядок строк с данными внутри этой структуры.
Если вы видите, что стрелки перемещения на вкладках Сортировка или Поля группировки неактивны («серые»), это может происходить по нескольким причинам:
Автополе, СКД использует стандартный порядок, определенный на уровне набора данных. Пока оно не удалено или не дополнено конкретными полями, ручное управление может быть ограничено.Рассмотрим самый простой способ изменения порядка. Допустим, у нас есть группировка ИмяВидаРасчета. Чтобы строки внутри неё выводились в определенном порядке, необходимо выполнить следующие действия:
ИмяВидаРасчета).Авто, добавим поле, по которому нужно упорядочить данные (например, само поле ИмяВидаРасчета или его Код).Проанализируем ситуацию, когда нам нужен не алфавитный порядок, а специфический (например: Оклад, Премия, Штраф). В этом случае стандартной сортировки по наименованию недостаточно.
Выясним, как заставить СКД выводить строки в «ручном» порядке, не меняя данные в справочниках. В СКД на вкладке Сортировка можно использовать не только поля, но и полноценные выражения. Это мощный инструмент, позволяющий задать веса для каждого значения.
Рассмотрим пример настройки через выражение ВЫБОР:
ВЫБОР
КОГДА ИмяВидаРасчета = "Оклад" ТОГДА 1
КОГДА ИмяВидаРасчета = "Премия" ТОГДА 2
ИНАЧЕ 3
КОНЕЦ
В этом случае система сначала вычислит числовое значение для каждой строки, а затем расставит их: строки с «1» (Оклад) будут первыми, с «2» (Премия) — вторыми, а все остальные — в конце.
Если логика сортировки сложная и часто меняется, лучше всего вынести её на уровень запроса. Рассмотрим, как это реализовать в конструкторе схемы компоновки данных. Добавим в текст запроса поле, которое будет отвечать исключительно за порядок:
ВЫБРАТЬ
ВидыРасчета.Наименование КАК ИмяВидаРасчета,
ВЫБОР
КОГДА ВидыРасчета.Код = "00001" ТОГДА 10
КОГДА ВидыРасчета.Тип = ЗНАЧЕНИЕ(Перечисление.Типы.Премия) ТОГДА 20
ИНАЧЕ 100
КОНЕЦ КАК ПорядокВывода,
Данные.Сумма КАК Сумма
ИЗ
РегистрРасчета.Начисления КАК Данные
После добавления такого поля в набор данных:
ПорядокВывода и снимем для него галочку в колонке Ограничение поля (чтобы оно было доступно в настройках), но можем не включать его в Выбранные поля отчета.Преимущество этого метода в том, что пользователь не увидит лишних колонок в отчете, но данные будут выстроены именно так, как задумал программист.
Посмотрим на ситуацию со стороны пользователя. Часто бухгалтеру или аналитику нужно менять порядок строк самостоятельно, не обращаясь к программисту. В этом случае лучше всего добавить в соответствующий справочник (например, ПланыВидовРасчета) числовой реквизит Приоритет или Порядок.
Рассмотрим алгоритм настройки:
ПорядокСортировки (тип Число) к объекту.ИмяВидаРасчета.ПорядокСортировки.Теперь порядок строк в отчете будет полностью зависеть от значений, указанных пользователем в карточке вида расчета.
Проанализируем, почему настройки могут не применяться. В СКД существует строгая иерархия. Если вы задали сортировку на уровне Отчета (самый верхний корень дерева), она будет применяться ко всем детальным записям, если только в самих группировках не переопределена своя сортировка.
Совет: Если вы хотите изменить порядок внутри группы «Начисления», убедитесь, что вы выделили именно группировку «Начисления» в структуре отчета, и настраиваете вкладку Сортировка именно для неё, а не для всего отчета в целом. Часто разработчики путают эти уровни, из-за чего отчет игнорирует внесенные изменения.
Также не забывайте про Представления. Если поле является ссылочным, СКД по умолчанию сортирует по представлению (строке). Если вы измените представление поля в запросе или через выражение представления в СКД, это автоматически повлияет на алфавитный порядок вывода строк.