Разработка и Конфигурация · 10 мин
Как отформатировать дату в 1С
Как отформатировать дату в 1С: функция Формат(), параметры ДФ и ДЛФ, шаблоны вывода, форматная строка в полях формы и типичные ошибки при работе с датами.
Задача вывести дату в нужном виде возникает в 1С постоянно: в печатных формах, отчётах, наименованиях документов, сообщениях пользователю и при обмене данными. По умолчанию платформа показывает дату в формате, заданном региональными настройками информационной базы, но на практике этого редко бывает достаточно — где-то нужен вид «01.03.2026», где-то «1 марта 2026 г.», а где-то дата с временем до секунд.
Основной инструмент форматирования — встроенная функция Формат() с параметрами ДФ (формат даты) и ДЛФ (локальный формат даты). Дополнительно формат можно задать декларативно — в свойствах полей форм, колонок таблиц и макетов, вообще без написания кода. Ниже разобраны оба подхода, готовые шаблоны и типичные ошибки.
Как работает функция Формат() для дат
Функция имеет синтаксис Формат(Значение, ФорматнаяСтрока). Первый параметр — само значение типа Дата, второй — строка с параметрами форматирования. Для дат используются два ключевых параметра: ДФ (свободный шаблон) и ДЛФ (предопределённый локальный формат).
Простейший пример:
ДатаДокумента = ТекущаяДатаСеанса();
СтрокаДаты = Формат(ДатаДокумента, "ДФ=dd.MM.yyyy");
// Результат: "01.03.2026"
Если форматная строка не указана, платформа применяет формат по умолчанию из региональных настроек. Это важно: один и тот же код может вывести «01.03.2026» на одной базе и «03/01/2026» на другой, если администратор изменил региональные установки. Поэтому в прикладном коде формат лучше указывать явно.
Функция возвращает строку, а не дату. Это значит, что результат нельзя сравнивать как дату или использовать в арифметике дат — сначала форматируйте, только потом выводите.
Шаблоны параметра ДФ: символы и готовые примеры
Параметр ДФ строится из символов-подстановок. Регистр букв значения не имеет, но количество символов определяет вид вывода: например, MM — месяц двумя цифрами, а MMMM — полное название месяца.
| Символ | Значение | Пример вывода |
|---|---|---|
d / dd | День месяца без нуля / с ведущим нулём | 1 / 01 |
MM | Месяц двумя цифрами | 03 |
MMM / MMMM | Месяц сокращённо / полностью | мар / марта |
yy / yyyy | Год двумя / четырьмя цифрами | 24 / 2026 |
HH | Часы (24-часовой формат) | 14 |
mm / ss | Минуты / секунды | 05 / 09 |
q | Квартал | 1 |
Разделители (точки, пробелы, двоеточия) вставляются в шаблон как обычные символы. Если нужно вывести слово, которое совпадает с символами шаблона, его заключают в кавычки внутри строки.
Формат(Дата, "ДФ='дд.MM.yyyy'"); // "01.03.2026"
Формат(Дата, "ДФ='yyyy-MM-dd'"); // "2026-03-01" (для обмена)
Формат(Дата, "ДФ='dd.MM.yyyy HH:mm:ss'"); // "01.03.2026 14:05:09"
Формат(Дата, "ДФ='dd MMMM yyyy'"); // "01 марта 2026"
Сообщить(Формат(ТекущаяДатаСеанса(), "ДФ='dd.MM.yyyy ЧЧ:мм:сс'"));Параметр ДЛФ: дата прописью и локальные форматы
Когда нужен «человеческий» вид даты — например, в печатной форме договора — вместо ручного шаблона удобнее параметр ДЛФ. Он использует предопределённые локальные варианты и сам подставляет правильные падежи и сокращения для текущего языка.
Основные значения:
ДЛФ=D— полная дата: «1 марта 2026 г.»;ДЛФ=DD— длинная дата с днём недели: «понедельник, 1 марта 2026 г.» (вид зависит от версии платформы и локали);ДЛФ=T— только время;ДЛФ=DT— дата со временем.
Формат(Дата, "ДЛФ=D"); // "1 марта 2026 г."
Формат(Дата, "ДЛФ=DT"); // дата и время в локальном виде
Параметры ДФ и ДЛФ можно комбинировать в одной строке через точку с запятой, но для одной даты обычно достаточно одного подхода. ДЛФ предпочтителен там, где текст должен соответствовать языку пользователя, — например, в многоязычных конфигурациях.
Форматирование даты в полях форм и отчётах без кода
Часто код писать не нужно: у полей ввода, надписей, колонок таблиц и ячеек макетов есть свойство «Формат». Оно задаётся в конфигураторе или в палитре свойств управляемой формы и содержит ту же форматную строку, что и функция Формат().
Типовой сценарий: на форме документа есть реквизит «ДатаОплаты», и его нужно показывать как «01.03.2026». Достаточно открыть свойства поля, найти строку «Формат» и ввести ДФ=dd.MM.yyyy. Платформа сама применит формат при отображении, а при вводе пользователем — распарсит значение обратно в дату.
В запросах и СКД форматирование на уровне кода обычно не требуется: в схеме компоновки данных у поля есть параметр «Оформление → Формат», где задаётся та же строка. Это правильнее, чем превращать дату в строку в запросе, — отчёт сохраняет возможность сортировки и группировки по реальной дате.
- 1Откройте форму в конфигураторе и выделите нужное поле
- 2В палитре свойств найдите свойство «Формат»
- 3Введите форматную строку, например ДФ=dd.MM.yyyy
- 4Сохраните и проверьте отображение в режиме Предприятие
- 5Проверьте ввод: убедитесь, что платформа корректно распознаёт введённую дату
Типичные сценарии: печатные формы, наименования, обмен данными
Дата в печатной форме документа
В макетах табличных документов параметры с типом Дата выводятся по формату ячейки. Если ячейке задан формат ДЛФ=D, выражение [ДатаДокумента] напечатается как «1 марта 2026 г.» без единой строки кода. Если формат не задан, применяется региональный по умолчанию — и в разных базах печатная форма может выглядеть по-разному.
Дата в строке сообщения или наименовании
При конкатенации дата автоматически преобразуется в строку в формате по умолчанию. Чтобы результат был предсказуемым, форматируйте явно:
Текст = "Акт сверки от " + Формат(ДатаАкта, "ДЛФ=D");
Дата для обмена и интеграций
При выгрузке в файлы и веб-сервисы используйте строгий машиночитаемый шаблон — обычно ISO-вид yyyy-MM-dd или yyyy-MM-ddTHH:mm:ss. Никогда не передавайте дату в «человеческом» формате ДЛФ: принимающая система не сможет надёжно её разобрать.
Что выбрать
Полный контроль над видом; подходит для обмена, файлов, сообщений. Не учитывает язык пользователя.
Локализованный вид с правильными падежами; идеален для печатных форм и интерфейса. Вид зависит от настроек сеанса.
Без кода, работает и на ввод; применимо только к элементам форм, макетов и СКД.
Проверка результата и типичные ошибки
После внедрения форматирования проверьте результат на реальных данных: пустой датой, датой с временем, датой на границе месяца (например, 1-е число, где важен ведущий нуль). Пустая дата '00010101' в большинстве шаблонов выводится как «01.01.0001» — в интерфейсе это выглядит как ошибка, поэтому перед выводом стоит проверять ЗначениеЗаполнено(Дата).
Отдельная ловушка — преобразование строки обратно в дату. Функции Дата() из строки в общем случае нет; для разбора используют Дата(Год, Месяц, День) с предварительным извлечением частей строки или стандартные механизмы обмена. Поэтому строковое представление всегда считайте «односторонним»: сначала вся логика с типом Дата, форматирование — в самом конце.
Что важно запомнить
Используйте Формат(Дата, "ДФ=dd.MM.yyyy") для точного шаблона и ДЛФ=D для даты прописью; в формах и СКД задавайте свойство «Формат» без кода; проверяйте пустые даты и не путайте MM (месяц) с mm (минуты).
Частые вопросы
Как вывести дату без времени, если в реквизите хранится дата с временем?
Примените формат, в котором нет компонентов времени: Формат(Дата, "ДФ=dd.MM.yyyy"). Само значение при этом не изменится — обрежется только отображение. Если нужно усечь и само значение, используйте НачалоДня(Дата).
Почему Формат() выводит минуты вместо месяца?
Потому что в шаблоне использованы строчные mm — это минуты. Месяц обозначается заглавными MM. Правильный шаблон: ДФ=dd.MM.yyyy.
Как вывести дату вида «1 марта 2026 г.» в печатной форме?
Используйте Формат(Дата, "ДЛФ=D") в коде либо задайте формат ДЛФ=D в свойствах ячейки макета. Платформа сама подставит название месяца в нужном падеже.
Зависит ли результат Формат() от настроек пользователя?
Шаблон ДФ с явными символами — нет, он выдаст одинаковый результат везде. А вот формат по умолчанию (без параметров) и ДЛФ зависят от региональных настроек сеанса и языка интерфейса.
Как преобразовать отформатированную строку обратно в дату?
Универсальной функции разбора строки в дату во встроенном языке нет. Обычно выделяют части строки функциями Лев(), Сред(), Прав() и собирают дату через Дата(Год, Месяц, День), либо используют форматы обмена (XML, JSON), где дата сериализуется и восстанавливается автоматически.
Можно ли задать формат даты в запросе?
Функции форматирования в языке запросов нет, и превращать дату в строку в запросе не стоит — потеряется сортировка и группировка. Вместо этого задайте формат в настройках СКД (Оформление поля) или при выводе результата.