Довольно часто при разработке отчетов на базе Системы Компоновки Данных (СКД) мы сталкиваемся с задачей кастомизации внешнего вида стандартных полей дат. Одна из распространенных проблем — как заставить 1С вывести номер месяца с ведущим нулем (например, «07» вместо «7»), при этом не превращая саму дату в обычную строку, чтобы не потерять возможность правильной сортировки и выгрузки. Давайте подробно разберем ситуацию, выясним причину такого поведения системы и рассмотрим эффективные способы решения этой задачи.
При настройке полей в СКД разработчики иногда пытаются использовать встроенные функции в колонке «Выражение представления». Например, применяют функцию Месяц(ПериодМесяц). В этот момент происходит скрытое, но важное преобразование: результатом работы этой функции становится значение с типом «Число».
Посмотрим на это внимательнее: если тип в ячейке стал числовым, то стандартная форматная строка для дат на это поле больше не действует. СКД честно пытается применить форматную строку даты (например, ДФ=MM) к числу «7», терпит неудачу и выводит просто «7». Именно поэтому все стандартные дефолтные варианты формата дат не срабатывают, если вы уже изменили тип значения.
Если наша главная цель — сохранить тип значения как полноценную дату (чтобы в ячейке лежало, к примеру, 01.07.2023, а отображалось просто «07»), мы должны отказаться от использования функций, меняющих тип данных. Разберем по шагам правильную настройку:
ПериодМесяц (оставьте это поле как есть).ДФ=MM.В этом случае значение в ячейке останется датой, но платформа применит маску отображения, и пользователю будет выводиться строго месяц с ведущим нулем.
Особенности автоформатирования: Стандартные поля периодов (такие как ПериодМесяц или ПериодНеделя), генерируемые виртуальными таблицами 1С, по умолчанию имеют встроенное автопредставление в СКД (например, выводятся как «Июль 2023 г.»). Явное задание формата ДФ=MM напрямую в настройках оформления переопределяет этот стандартный механизм 1С, сохраняя при этом исходную хронологию.
Рассмотрим ситуацию, когда по каким-то причинам в выражении представления уже использована функция Месяц(ПериодМесяц). Как мы выяснили ранее, тип данных стал числом. Следовательно, чтобы получить ведущий ноль, нам нужно применить форматную строку для чисел.
Для вывода числа всегда из двух цифр с ведущим нулем используем следующую форматную строку:
ЧЦ='2'; ЧВН=''
Где:
ЧЦ — число целых знаков (в нашем случае 2).ЧВН — указывает на необходимость выводить ведущие нули.Однако помните, что в данном случае происходит двойная обработка (сначала преобразование в число, затем наложение числового формата), что не всегда оптимально, если изначальная цель — просто визуально изменить дату.
Давайте вспомним все полезные параметры форматирования дат, если мы идем по пути сохранения типа «Дата». В 1С действуют следующие правила для форматной строки:
ДФ=M — выводит месяц без ведущего нуля (7).ДФ=MM — выводит месяц с ведущим нулем (07).ДФ=MMM — выводит сокращенное текстовое название месяца (Июл).ДФ=MMMM — выводит полное текстовое название месяца (Июль).Проанализируем последствия выбранного решения при сохранении отчета в Excel — это очень важный аспект, о котором часто забывают. Использование функции преобразования в число с форматом ЧЦ=2; ЧВН= имеет существенный побочный эффект.
При выгрузке такого отчета в Excel в ячейку будет передано число «7». Ведущий ноль останется лишь визуальной маской. Если пользователь захочет построить по этим данным сводную таблицу в Excel, сортировка пойдет как для обычных чисел. А если там были текстовые названия месяцев, то сортировка будет алфавитной.
Если же мы используем оригинальное поле с типом «Дата» и форматом ДФ=MM (наш первый и рекомендуемый способ), то в Excel выгрузится полноценная дата. Пользователь сможет строить сводные таблицы с правильной хронологической сортировкой по годам и месяцам, применяя всю мощь инструментов анализа данных.
Рассмотрим еще один метод на случай, если настройка через колонку «Оформление» недоступна или переопределяется другими слоями СКД. В «Выражении представления» можно использовать программную функцию форматирования.
Формат(ПериодМесяц, "ДФ=MM")
Важное предупреждение: стоит учитывать, что функция Формат() всегда возвращает тип значения Строка. Это нарушит требование сохранения исходного типа «Дата», но гарантированно решит исключительно визуальную часть задачи. Использовать этот метод стоит только тогда, когда вам критически важен только внешний вид отчета на экране, а дальнейшая аналитика, сортировка и выгрузка в сторонние программы (Excel) по этому конкретному полю не планируется.