Как изменить порядок строк в таблице СКД и настроить произвольную сортировку

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

Работа с Системой компоновки данных (СКД) часто ставит в тупик начинающих разработчиков, особенно когда дело касается визуального порядка строк в готовом отчете. Часто возникает ситуация: в дереве настроек группировка добавлена, но строки в отчете выводятся «как попало» или по алфавиту, а стандартные кнопки управления порядком (стрелочки) оказываются недоступными. Рассмотрим подробно, как работает механизм упорядочивания данных в СКД и как добиться нужной последовательности вывода.

Разбираемся в причинах: почему стрелки перемещения неактивны

Проанализируем типичную ошибку: попытку изменить порядок строк через вкладку Выбранные поля или просто перемещением группировок в дереве настроек. Важно понимать, что дерево на вкладке Настройки определяет структуру отчета (что вложено во что), а не физический порядок строк с данными внутри этой структуры.

Если вы видите, что стрелки перемещения на вкладках Сортировка или Поля группировки неактивны («серые»), это может происходить по нескольким причинам:

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

Метод 1: Настройка стандартной сортировки в группировке

Рассмотрим самый простой способ изменения порядка. Допустим, у нас есть группировка ИмяВидаРасчета. Чтобы строки внутри неё выводились в определенном порядке, необходимо выполнить следующие действия:

  1. Выделим в дереве настроек конкретную группировку (например, ИмяВидаРасчета).
  2. В нижней части окна настроек перейдем на закладку Сортировка.
  3. Если там пусто или стоит Авто, добавим поле, по которому нужно упорядочить данные (например, само поле ИмяВидаРасчета или его Код).
  4. Укажем направление: По возрастанию или По убыванию.

Проанализируем ситуацию, когда нам нужен не алфавитный порядок, а специфический (например: Оклад, Премия, Штраф). В этом случае стандартной сортировки по наименованию недостаточно.

Метод 2: Использование выражений в настройках сортировки

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

Рассмотрим пример настройки через выражение ВЫБОР:

  1. На вкладке Сортировка нажмем кнопку добавления и выберем пункт Детальные записи (или нажмем кнопку выбора в поле).
  2. В окне редактирования выражения напишем логику весов:
    
    ВЫБОР 
        КОГДА ИмяВидаРасчета = "Оклад" ТОГДА 1 
        КОГДА ИмяВидаРасчета = "Премия" ТОГДА 2 
        ИНАЧЕ 3 
    КОНЕЦ
    
  3. Установим порядок По возрастанию.

В этом случае система сначала вычислит числовое значение для каждой строки, а затем расставит их: строки с «1» (Оклад) будут первыми, с «2» (Премия) — вторыми, а все остальные — в конце.

Метод 3: Добавление служебного поля в запрос (DataSet)

Если логика сортировки сложная и часто меняется, лучше всего вынести её на уровень запроса. Рассмотрим, как это реализовать в конструкторе схемы компоновки данных. Добавим в текст запроса поле, которое будет отвечать исключительно за порядок:


ВЫБРАТЬ
    ВидыРасчета.Наименование КАК ИмяВидаРасчета,
    ВЫБОР
        КОГДА ВидыРасчета.Код = "00001" ТОГДА 10
        КОГДА ВидыРасчета.Тип = ЗНАЧЕНИЕ(Перечисление.Типы.Премия) ТОГДА 20
        ИНАЧЕ 100
    КОНЕЦ КАК ПорядокВывода,
    Данные.Сумма КАК Сумма
ИЗ
    РегистрРасчета.Начисления КАК Данные

После добавления такого поля в набор данных:

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

Преимущество этого метода в том, что пользователь не увидит лишних колонок в отчете, но данные будут выстроены именно так, как задумал программист.

Метод 4: Сортировка по дополнительным реквизитам объектов

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

Рассмотрим алгоритм настройки:

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

Теперь порядок строк в отчете будет полностью зависеть от значений, указанных пользователем в карточке вида расчета.

Важные нюансы и иерархия настроек

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

Совет: Если вы хотите изменить порядок внутри группы «Начисления», убедитесь, что вы выделили именно группировку «Начисления» в структуре отчета, и настраиваете вкладку Сортировка именно для неё, а не для всего отчета в целом. Часто разработчики путают эти уровни, из-за чего отчет игнорирует внесенные изменения.

Также не забывайте про Представления. Если поле является ссылочным, СКД по умолчанию сортирует по представлению (строке). Если вы измените представление поля в запросе или через выражение представления в СКД, это автоматически повлияет на алфавитный порядок вывода строк.

← На главную