Как в отчете в графе "Дата" отобразить только месяц

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

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

Способ 1: Использование форматной строки в настройках поля

Это самый простой и правильный путь, если вам нужно изменить только визуальное представление данных, не меняя структуру самого запроса. Рассмотрим по шагам, как это сделать:

  1. Откроем схему компоновки данных и перейдем на закладку Наборы данных.
  2. В списке полей найдем нужное нам поле (например, Регистратор.Дата или просто Дата).
  3. В колонке Оформление нажмем на кнопку выбора (три точки).
  4. В открывшемся окне найдем параметр Формат.
  5. В конструкторе форматной строки перейдем на закладку Дата или просто введем строку формата вручную.

Для отображения месяца используются следующие коды формата ДФ (Дата-Формат):

Важный нюанс: если вы укажете просто ММММ, система применит настройки по умолчанию. Чтобы гарантировать корректность, лучше писать полную конструкцию: ДФ=ММММ.

Способ 2: Выделение месяца в запросе

Иногда требуется получить месяц не как оформление, а как отдельное данное для расчетов или группировок. В этом случае мы можем воспользоваться функциями языка запросов 1С. Проанализируем два варианта:

Вариант А: Функция МЕСЯЦ(). Эта функция возвращает число от 1 до 12. Рассмотрим пример кода:


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

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

Вариант Б: Функция НАЧАЛОПЕРИОДА(). Это более гибкий метод для СКД. Мы получаем дату, приведенную к началу месяца, и к ней применяем оформление ДФ=ММММ. Рассмотрим ситуацию: если мы просто возьмем номер месяца, то данные за январь 2023 и январь 2024 года сольются в одну строку. Использование начала периода сохраняет привязку к году:


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

Способ 3: Создание вычисляемого поля

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

В выражении вычисляемого поля достаточно указать путь к данным (например, Дата), а в колонке Оформление задать уже знакомый нам формат ДФ=ММММ.

Решение проблемы правильной сортировки

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

  1. В настройках поля набора данных найдем колонку Выражение упорядочивания.
  2. Укажем там исходное поле даты или выражение НАЧАЛОПЕРИОДА(Дата, "МЕСЯЦ").

Таким образом, визуально пользователь будет видеть "Январь", "Февраль", но система будет знать, что "Январь" идет раньше "Февраля", так как сравнивает даты, а не строки.

Дополнительные возможности оформления

Выясним, как сделать вывод еще более профессиональным, используя продвинутые параметры форматной строки и функций.

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

ВРег(Лев(Формат(Дата, "ДФ=ММММ"), 1)) + Сред(Формат(Дата, "ДФ=ММММ"), 2)

Здесь мы берем первую букву, переводим ее в верхний регистр функцией ВРег и соединяем с остальной частью строки.

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

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

Подводя итог, можно сказать, что наиболее эффективным и гибким методом является сочетание функции НАЧАЛОПЕРИОДА в запросе и настройки Формата в оформлении компоновки данных. Это обеспечивает корректную сортировку, сохранение данных о годе и эстетичный внешний вид отчета.

← На главную