Как в 1С записать дату в локальном формате без секунд

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

При разработке интерфейсов и формировании печатных форм часто возникает задача отображения даты в «дружелюбном» для пользователя виде. Стандартный системный формат обычно включает секунды и полный год, что не всегда удобно. В этой статье мы подробно разберем, как привести дату к виду «9 октября 12:26», проанализируем типичные ошибки и рассмотрим продвинутые способы управления форматом в системе 1С:Предприятие.

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

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

Рассмотрим основной пример кода, который решает поставленную задачу:


// Пример получения даты в формате "День Месяц Часы:Минуты"
НужнаяДата = ТекущаяДата(); 
РезультатСтрокой = Формат(НужнаяДата, "ДФ='dd MMMM HH:mm'");
// Результат: 09 октября 12:26

Давайте разберем, что означают символы в строке формата:

Разбор типичной ошибки: Строка vs Дата

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

Посмотрим на пример ошибочного кода:


// ОШИБКА: Передается строка вместо даты
Результат = Формат("09.10.2021 14:00:00", "ДФ='dd MMMM HH:mm'"); 
// Функция не сработает корректно, так как кавычки превращают дату в текст

Чтобы код заработал, дату нужно инициализировать правильно. В 1С это делается с помощью одинарных кавычек или функции Дата():


// Правильный вариант с использованием литерала даты
Результат = Формат('20211009140000', "ДФ='dd MMMM HH:mm'");

Отличие ДФ от ДЛФ

В процессе работы важно не путать два похожих параметра: ДФ и ДЛФ. Разберем их различия:

Учет региональных настроек (Локализация)

Если ваша информационная база может запускаться на серверах с разными языковыми настройками, полезно зафиксировать язык вывода. По умолчанию 1С берет язык системы, и «октябрь» может превратиться в «October». Чтобы гарантировать русский язык, добавим параметр Л (Локализация):


ДатаДляВывода = ТекущаяДата();
СтрокаФормата = "ДФ='dd MMMM HH:mm'; Л=ru_RU";
Результат = Формат(ДатаДляВывода, СтрокаФормата);

Нюансы склонения месяцев

Интересной особенностью платформы 1С является автоматическое склонение месяца. Если маска содержит день (dd), то при использовании MMMM 1С выведет «октября». Если же мы захотим вывести только месяц маской ДФ='MMMM', платформа выведет его в именительном падеже — «Октябрь». Это важно учитывать при построении сложных интерфейсных заголовков.

Настройка формата в Системе компоновки данных (СКД)

Если задача стоит в выводе даты в отчете, нам совсем не обязательно писать программный код. В СКД для любого поля можно настроить оформление:

  1. Откройте вкладку «Наборы данных» в схеме компоновки.
  2. Найдите нужное поле даты и колонку «Оформление».
  3. В появившемся окне найдите пункт «Формат».
  4. Нажмите на кнопку выбора и в конструкторе форматной строки введите dd MMMM HH:mm.

Это позволит платформе самой преобразовывать данные при выводе отчета пользователю, сохраняя при этом тип «Дата» для возможности сортировки.

Обработка пустых дат

При разработке алгоритмов важно помнить о проверке на заполненность. Пустая дата в 1С выглядит как '00010101000000'. Если применить к ней наш формат, мы можем получить странный результат (например, «01 января 00:00»). Проанализируем, как этого избежать:


Если ЗначениеЗаполнено(Объект.ДатаСобытия) Тогда
    ТекстДаты = Формат(Объект.ДатаСобытия, "ДФ='dd MMMM HH:mm'");
Иначе
    ТекстДаты = "Дата не указана";
КонецЕсли;

Заключение

Мы рассмотрели, как с помощью функции Формат() и маски ДФ='dd MMMM HH:mm' гибко управлять представлением времени в 1С. Помните о важности типов данных и не забывайте про возможности локализации, чтобы ваши решения работали корректно в любой среде.

← На главную