Как в СКД вывести месяц в формате "07" с ведущим нулем, сохранив тип "Дата"?

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

Довольно часто при разработке отчетов на базе Системы Компоновки Данных (СКД) мы сталкиваемся с задачей кастомизации внешнего вида стандартных полей дат. Одна из распространенных проблем — как заставить 1С вывести номер месяца с ведущим нулем (например, «07» вместо «7»), при этом не превращая саму дату в обычную строку, чтобы не потерять возможность правильной сортировки и выгрузки. Давайте подробно разберем ситуацию, выясним причину такого поведения системы и рассмотрим эффективные способы решения этой задачи.

Проанализируем причину проблемы

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

Посмотрим на это внимательнее: если тип в ячейке стал числовым, то стандартная форматная строка для дат на это поле больше не действует. СКД честно пытается применить форматную строку даты (например, ДФ=MM) к числу «7», терпит неудачу и выводит просто «7». Именно поэтому все стандартные дефолтные варианты формата дат не срабатывают, если вы уже изменили тип значения.

Способ 1: Настройка оформления для исходного типа «Дата» (Рекомендуемый)

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

  1. Удалите любые выражения из колонки «Выражение представления» для поля ПериодМесяц (оставьте это поле как есть).
  2. Перейдите на вкладку Наборы данных (настройки полей) или на вкладку Настройки в раздел условного оформления.
  3. Найдите колонку оформления для нужного поля.
  4. В свойстве Формат вручную пропишите строку: ДФ=MM.

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

Особенности автоформатирования: Стандартные поля периодов (такие как ПериодМесяц или ПериодНеделя), генерируемые виртуальными таблицами 1С, по умолчанию имеют встроенное автопредставление в СКД (например, выводятся как «Июль 2023 г.»). Явное задание формата ДФ=MM напрямую в настройках оформления переопределяет этот стандартный механизм 1С, сохраняя при этом исходную хронологию.

Способ 2: Использование числового формата (если тип уже преобразован)

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

Для вывода числа всегда из двух цифр с ведущим нулем используем следующую форматную строку:

ЧЦ='2'; ЧВН=''

Где:

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

Варианты форматной строки для месяца

Давайте вспомним все полезные параметры форматирования дат, если мы идем по пути сохранения типа «Дата». В 1С действуют следующие правила для форматной строки:

Вывод в Excel и нюансы сортировки

Проанализируем последствия выбранного решения при сохранении отчета в Excel — это очень важный аспект, о котором часто забывают. Использование функции преобразования в число с форматом ЧЦ=2; ЧВН= имеет существенный побочный эффект.

При выгрузке такого отчета в Excel в ячейку будет передано число «7». Ведущий ноль останется лишь визуальной маской. Если пользователь захочет построить по этим данным сводную таблицу в Excel, сортировка пойдет как для обычных чисел. А если там были текстовые названия месяцев, то сортировка будет алфавитной.

Если же мы используем оригинальное поле с типом «Дата» и форматом ДФ=MM (наш первый и рекомендуемый способ), то в Excel выгрузится полноценная дата. Пользователь сможет строить сводные таблицы с правильной хронологической сортировкой по годам и месяцам, применяя всю мощь инструментов анализа данных.

Альтернативное решение: использование функции Формат()

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

Формат(ПериодМесяц, "ДФ=MM")

Важное предупреждение: стоит учитывать, что функция Формат() всегда возвращает тип значения Строка. Это нарушит требование сохранения исходного типа «Дата», но гарантированно решит исключительно визуальную часть задачи. Использовать этот метод стоит только тогда, когда вам критически важен только внешний вид отчета на экране, а дальнейшая аналитика, сортировка и выгрузка в сторонние программы (Excel) по этому конкретному полю не планируется.

← На главную