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

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

При построении отчетов в Системе Компоновки Данных (СКД) часто возникает задача сделать заголовки колонок более информативными и читаемыми. Стандартно, при группировке по периоду (например, по неделям или месяцам), СКД выводит в заголовок дату начала этого периода в полном формате, например, "22.01.2024 0:00:00". Это не всегда удобно для анализа. Разберем, как заменить такой заголовок на более понятный, например, "4 неделя (22.01.2024)" для еженедельной группировки или "Январь 2024" для ежемесячной.

Проанализируем по шагам, как настроить такое представление в отчете СКД, используя СКД: пример формирования шапки отчета по неделям, месяцам.

Способ 1: Настройка представления для одного типа периода

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

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

Пример для группировки по неделям

Чтобы получить заголовок вида "4 неделя (22.01.2024)", используем комбинацию функций НеделяГода(), Формат() и Строка().

В поле "Выражение представления" вставьте следующий код:

Строка(НеделяГода(Период)) + " неделя (" + Формат(Период, "ДФ=dd.MM.yyyy") + ")"

Рассмотрим, что делает эта строка:

Пример для группировки по месяцам

Если отчет сгруппирован по месяцам, и вы хотите видеть заголовок "Январь 2024", выражение будет еще проще. Здесь достаточно одной функции Формат().

В поле "Выражение представления" вставьте следующий код:

Формат(Период, "ДФ='MMMM yyyy'")

Разберем параметры функции Формат:

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

Способ 2: Динамическое переименование в зависимости от выбора пользователя

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

Вариант А: Создание нескольких вариантов отчета (самый простой)

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

  1. Настройте отчет с группировкой по неделям. Укажите для поля "Период" выражение представления для недель, как описано в первом способе.
  2. Сохраните этот вариант отчета под понятным именем, например, "Отчет по неделям".
  3. Теперь измените настройки этого же отчета: установите группировку по месяцам и поменяйте выражение представления на месячное.
  4. Сохраните этот новый вариант под именем "Отчет по месяцам".

В результате пользователь сможет просто выбирать нужный вариант из списка, и каждый будет иметь корректные заголовки колонок (также полезно изучить решение, когда нет данных — нет столбцов).

Вариант Б: Использование параметра и конструкции ВЫБОР в запросе (продвинутый)

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

  1. Добавляем параметр. На вкладке "Параметры" схемы компоновки данных создайте новый параметр, например, с именем Периодичность. Задайте для него список доступных значений: "Неделя", "Месяц". Включите его в состав быстрых пользовательских настроек.
  2. Модифицируем запрос. Перейдите на вкладку "Наборы данных" и откройте текст запроса. Добавьте в список выбираемых полей новое вычисляемое поле с помощью конструкции ВЫБОР КОГДА ... КОНЕЦ. Это поле будет формировать текстовое представление в зависимости от значения нашего параметра.

Пример кода для запроса:


ВЫБОР
    КОГДА &Периодичность = "Неделя"
        ТОГДА ВЫРАЗИТЬ(НомерНеделиГода(Таблица.Период) КАК СТРОКА(10)) + " неделя (" + ФОРМАТ(Таблица.Период, "ДФ=dd.MM.yyyy") + ")"
    КОГДА &Периодичность = "Месяц"
        ТОГДА ФОРМАТ(Таблица.Период, "ДФ='MMMM yyyy'")
    ИНАЧЕ ФОРМАТ(Таблица.Период, "ДФ=dd.MM.yyyy")
КОНЕЦ КАК ПредставлениеПериода

Важно: в языке запросов для конкатенации строк также используется "+", а для преобразования числа в строку — функция ВЫРАЗИТЬ(... КАК СТРОКА(...)).

  1. Настраиваем представление. Теперь в настройках отчета (на вкладке "Настройки") для группировки по полю "Период" в качестве "Выражения представления" укажите наше новое поле из запроса: ПредставлениеПериода.

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

Вариант В: Программная доработка (самый сложный)

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

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

← На главную