Как динамически сортировать данные по выбранному месяцу в отчете СКД?

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

Часто при разработке сложных отчетов в Системе Компоновки Данных (СКД) мы сталкиваемся с тем, что стандартные механизмы сортировки работают не так, как ожидает пользователь. Особенно это заметно, когда отчет представлен в виде кросс-таблицы, где в строках располагаются подразделения, а в колонках — периоды. Если необходимо отсортировать данные по конкретному месяцу, стандартная сортировка по Ресурсу пытается применить правило ко всем колонкам сразу, что приводит к некорректному результату или «каше» в данных.

Разберем подробно, как реализовать гибкую сортировку, которая позволит пользователю выбирать, по какой именно колонке (месяцу) нужно отсортировать строки.

Суть проблемы

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

Решение задачи: использование параметров и вычисляемых полей

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

  1. Создание параметра управления: Перейдите в настройки СКД на вкладку Параметры. Создайте параметр МесяцСортировки. Установите тип значения Строка (или Число, если используете нумерацию периодов). В поле Доступные значения укажите список периодов (например, '01', '02', '03'). Обязательно включите этот параметр в Пользовательские настройки, чтобы пользователь мог менять его при запуске отчета.
  2. Создание вычисляемого поля: Перейдите на вкладку Вычисляемые поля. Создайте новое поле с именем Ордер (или ПолеСортировки). В выражении укажите формулу, которая будет динамически подставлять значение выручки:
    
    ВЫБОР 
        КОГДА НомерМесяцаСтрокой = &МесяцСортировки 
        ТОГДА Выручка 
        ИНАЧЕ 0 
    КОНЕЦ
    
  3. Настройка сортировки в группировке: Перейдите в Настройки, выберите группировку строк (в нашем примере это Подразделение). На вкладке Сортировка добавьте новое поле Ордер. Выберите направление сортировки — По возрастанию или По убыванию.

Важные нюансы реализации

Чтобы система работала корректно, убедитесь в соблюдении следующих условий:

Почему это работает?

Когда вы выбираете значение в параметре МесяцСортировки, выражение вычисляемого поля Ордер пересчитывается для каждой строки отчета. Для всех периодов, кроме выбранного, значение Ордер становится равным 0, а для выбранного месяца оно принимает значение реальной выручки. Таким образом, сортировка СКД фактически выполняется по одному числу для каждого подразделения, что исключает конфликты между периодами и позволяет получить нужный порядок.

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

← На главную