При разработке пользовательских интерфейсов на управляемых формах часто возникает необходимость представить дату в компактном или нестандартном виде. Например, в списках периодических регистров сведений, графиках или аналитических отчетах требуется скрыть конкретное число месяца и оставить только наименование месяца прописью и год. Разберем типичные ошибки при решении этой задачи и выясним, как правильно составить форматную строку.
Рассмотрим распространенную ситуацию: разработчик пытается вывести месяц и год через условное оформление или свойства элемента, указав выражение вида ДЛФ='MMMMyyyy', однако платформа не применяет такое оформление. При этом конструкция ДЛФ=DD срабатывает, но выводит дату полностью, включая день месяца.
Проанализируем причину такого поведения платформы. Параметр ДЛФ расшифровывается как Длина локального формата. Он предназначен исключительно для выбора одного из стандартных системных вариантов представления даты и времени, заданных в настройках операционной системы. Параметр ДЛФ строго зафиксирован на уровне платформы и принимает только ограниченный набор служебных значений:
D — краткая дата (например, 01.12.2024);DD — длинная дата с полным текстовым названием месяца и днем (например, 1 декабря 2024 г.);T — отображение только времени;DT — совместное отображение даты и времени.Использовать внутри ДЛФ произвольные шаблоны символов нельзя: платформа просто проигнорирует нераспознанное значение. Для произвольного шаблона отображения даты в платформе 1С предусмотрен совершенно другой параметр — ДФ (Формат даты).
Выясним, как составить корректную маску. Параметр ДФ позволяет гибко комбинировать специальные символы для форматирования чисел, месяцев и лет. Для отображения полного наименования месяца прописью и четырех цифр года используется комбинация символов MMMM (полное наименование месяца) и yyyy (четыре цифры года).
Посмотрим на пример правильной форматной строки:
"ДФ='MMMM yyyy'"
Если между месяцем и годом требуется установить разделитель в виде точки, дефиса или другого знака, его можно включить прямо в строку маски:
"ДФ=MMMM.yyyy"
Обратим внимание на кавычки: если внутри формата присутствуют пробелы или спецсимволы, сам шаблон внутри параметра ДФ необходимо заключать в одинарные кавычки, например: ДФ='MMMM yyyy'.
Разберем важный нюанс платформы при работе с русской локализацией. При указании маски MMMM платформа по умолчанию ориентируется на совместный вывод дня и месяца, поэтому название месяца подставляется в родительном падеже (например, «января 2024», «марта 2024»).
Штатными средствами одного лишь формата ДФ перевести наименование месяца в именительный падеж («Январь 2024») невозможно, так как в платформе 1С отсутствует отдельный спецификатор для именительного падежа изолированного месяца.
Кроме того, представление месяца напрямую зависит от языка интерфейса пользователя или операционной системы. Если на компьютере установлена иная локаль, месяц может отобразиться на английском или другом языке. Чтобы гарантировать вывод на русском языке независимо от системных настроек клиента, рекомендуется явно фиксировать локализацию через параметр Л:
"ДФ='MMMM yyyy'; Л=ru_RU"
Рассмотрим, каким способом правильнее применить полученную форматную строку к динамическому списку регистра сведений. Существует два пути:
Иногда разработчики пытаются обойти проблему родительного падежа, формируя строковое представление даты прямо в запросе динамического списка через конструкции условий или строковые функции. Проанализируем, к чему это приводит.
Если колонка динамического списка становится строковым полем (тип Строка), то при нажатии пользователем на заголовок колонки сортировка будет происходить по алфавиту («Август», «Апрель», «Декабрь», «Май»), а не в хронологическом порядке. Чтобы в динамическом списке сохранялось корректное упорядочивание по времени, исходное поле обязательно должно оставаться типом Дата, а любые изменения внешнего вида следует выполнять только на визуальном уровне с помощью свойства Формат.