При разработке интерфейсов и формировании печатных форм часто возникает задача отображения даты в «дружелюбном» для пользователя виде. Стандартный системный формат обычно включает секунды и полный год, что не всегда удобно. В этой статье мы подробно разберем, как привести дату к виду «9 октября 12:26», проанализируем типичные ошибки и рассмотрим продвинутые способы управления форматом в системе 1С:Предприятие.
Основным инструментом для решения нашей задачи является встроенная функция Формат(). Она позволяет преобразовать значение любого типа (в нашем случае — Дата) в строку по заданным правилам. Для получения нужного результата мы будем использовать параметр ДФ (формат даты).
Рассмотрим основной пример кода, который решает поставленную задачу:
// Пример получения даты в формате "День Месяц Часы:Минуты"
НужнаяДата = ТекущаяДата();
РезультатСтрокой = Формат(НужнаяДата, "ДФ='dd MMMM HH:mm'");
// Результат: 09 октября 12:26
Давайте разберем, что означают символы в строке формата:
dd — день месяца (две цифры с лидирующим нулем);MMMM — полное название месяца в родительном падеже (если указано вместе с днем);HH — часы в 24-часовом формате;mm — минуты с лидирующим нулем.Проанализируем ситуацию, с которой часто сталкиваются начинающие разработчики. Если в функцию Формат() передать не объект типа Дата, а готовую строку, функция вернет пустой результат или ту же строку без изменений. Выясним причину: первым параметром функции Формат обязательно должно быть значение типа Дата.
Посмотрим на пример ошибочного кода:
// ОШИБКА: Передается строка вместо даты
Результат = Формат("09.10.2021 14:00:00", "ДФ='dd MMMM HH:mm'");
// Функция не сработает корректно, так как кавычки превращают дату в текст
Чтобы код заработал, дату нужно инициализировать правильно. В 1С это делается с помощью одинарных кавычек или функции Дата():
// Правильный вариант с использованием литерала даты
Результат = Формат('20211009140000', "ДФ='dd MMMM HH:mm'");
В процессе работы важно не путать два похожих параметра: ДФ и ДЛФ. Разберем их различия:
ДЛФ=DT выведет и дату, и время, но формат будет зависеть от настроек операционной системы, и убрать секунды только через ДЛФ невозможно.Если ваша информационная база может запускаться на серверах с разными языковыми настройками, полезно зафиксировать язык вывода. По умолчанию 1С берет язык системы, и «октябрь» может превратиться в «October». Чтобы гарантировать русский язык, добавим параметр Л (Локализация):
ДатаДляВывода = ТекущаяДата();
СтрокаФормата = "ДФ='dd MMMM HH:mm'; Л=ru_RU";
Результат = Формат(ДатаДляВывода, СтрокаФормата);
Интересной особенностью платформы 1С является автоматическое склонение месяца. Если маска содержит день (dd), то при использовании MMMM 1С выведет «октября». Если же мы захотим вывести только месяц маской ДФ='MMMM', платформа выведет его в именительном падеже — «Октябрь». Это важно учитывать при построении сложных интерфейсных заголовков.
Если задача стоит в выводе даты в отчете, нам совсем не обязательно писать программный код. В СКД для любого поля можно настроить оформление:
dd MMMM HH:mm.Это позволит платформе самой преобразовывать данные при выводе отчета пользователю, сохраняя при этом тип «Дата» для возможности сортировки.
При разработке алгоритмов важно помнить о проверке на заполненность. Пустая дата в 1С выглядит как '00010101000000'. Если применить к ней наш формат, мы можем получить странный результат (например, «01 января 00:00»). Проанализируем, как этого избежать:
Если ЗначениеЗаполнено(Объект.ДатаСобытия) Тогда
ТекстДаты = Формат(Объект.ДатаСобытия, "ДФ='dd MMMM HH:mm'");
Иначе
ТекстДаты = "Дата не указана";
КонецЕсли;
Мы рассмотрели, как с помощью функции Формат() и маски ДФ='dd MMMM HH:mm' гибко управлять представлением времени в 1С. Помните о важности типов данных и не забывайте про возможности локализации, чтобы ваши решения работали корректно в любой среде.