Разработка и Конфигурация · 10 мин
Как задать формат даты в 1С в коде
Как задать формат даты в 1С в коде: функция Формат(), параметры ДЛФ и ДФ, шаблоны форматной строки, вывод даты в запросах, печатных формах и СКД.
Дата в 1С хранится как точное значение с точностью до секунды, а то, как она выглядит на экране или в печатной форме, определяется в момент вывода. За это отвечает форматная строка: её можно передать в функцию Формат(), указать в свойствах элемента формы, поля компоновки данных или параметра запроса. Разработчику важно понимать, что формат не меняет само значение — он лишь управляет представлением.
Чаще всего формат даты задают двумя способами: готовыми сокращениями вида «ДЛФ=D» (локальные форматы) или явным шаблоном вида «ДФ=dd.MM.yyyy». Первый вариант подстраивается под региональные настройки пользователя, второй даёт жёсткий, предсказуемый результат независимо от локали. Выбор зависит от задачи: для интерфейса обычно лучше локальный формат, для обмена данными и имен файлов — фиксированный шаблон.
Ниже разобраны оба подхода, работа с функцией Формат(), особенности форматирования даты в запросах, печатных формах и при преобразовании даты в строку для обменов, а также типичные ошибки, из-за которых дата выводится не так, как ожидалось.
Функция Формат(): базовый синтаксис
Основной инструмент — встроенная функция Формат(Значение, ФорматнаяСтрока). Первый параметр — само значение даты, второй — строка с описанием формата. Если форматную строку не указать, применяется формат по умолчанию, зависящий от региональных настроек информационной базы.
ДатаДокумента = ТекущаяДатаСеанса();
Строка1 = Формат(ДатаДокумента, "ДЛФ=D"); // 15.03.2026 (краткая дата)
Строка2 = Формат(ДатаДокумента, "ДЛФ=DD"); // 15 марта 2026 г.
Строка3 = Формат(ДатаДокумента, "ДФ=dd.MM.yyyy"); // явный шаблон
Строка4 = Формат(ДатаДокумента, "ДФ='дд.ММ.гггг ЧЧ:мм'");
Форматная строка может содержать несколько параметров через точку с запятой, например: "ДФ=dd.MM.yyyy; ДП='не указана'". Параметр ДП (дата пустая) задаёт текст, который будет выведен вместо пустой даты 01.01.0001 — это удобно, чтобы пользователь не видел техническое значение.
Результат функции — всегда строка. Если форматированное значение нужно записать обратно в реквизит типа «Дата», этого делать не следует: присвоение строки приведёт либо к ошибке преобразования, либо к потере данных. Формат применяют только в точке вывода.
Локальные форматы ДЛФ: когда дата подстраивается под пользователя
Параметр ДЛФ (локальный формат даты) принимает значения D (краткая дата), DD (длинная дата с названием месяца), DT (дата и время), T (только время). Конкретный вид зависит от региональных установок, поэтому один и тот же код у пользователей с разной локалью может выглядеть по-разному.
Формат(ДатаДокумента, "ДЛФ=DD"); // 15 марта 2026 г.
Формат(ДатаДокумента, "ДЛФ=DT"); // 15.03.2026 14:32:05
Формат(ДатаДокумента, "ДЛФ=T"); // 14:32:05
ДЛФ — правильный выбор для сообщений пользователю, заголовков и элементов интерфейса, потому что дата выглядит привычно для конкретного человека. Дополнительно можно управлять отображением времени параметром ДЛВ (для ДЛФ=DD): "ДЛФ=DD; ДЛВ=Нет" скроет пустое время, если оно не задано.
Ограничение подхода: результат нельзя использовать там, где нужна стабильность — в именах файлов, ключах соответствий, XML-документах обмена. На другом сервере или у другого пользователя строка получится иной, и сопоставление данных сломается.
Явные шаблоны ДФ: полный контроль над представлением
Параметр ДФ принимает шаблон из символов-подстановок. Основные: d/dd — день, M/MM — месяц, yy/yyyy — год, H/HH — часы, m/mm — минуты, s/ss — секунды, q — квартал, MMMM — название месяца. Регистр символов важен: MM — это месяц, а mm — минуты.
Формат(ДатаДокумента, "ДФ=yyyy-MM-dd"); // 2026-03-15 (ISO-стиль)
Формат(ДатаДокумента, "ДФ='год: yyyy, месяц: MM'"); // текст с литералами
Формат(ДатаДокумента, "ДФ=dd.MM.yy"); // 15.03.24
Формат(ДатаДокумента, "ДФ=HH:mm:ss"); // только время
Произвольный текст внутри шаблона заключается в одинарные кавычки, иначе символы могут быть интерпретированы как подстановки. Частая ошибка — написать "ДФ=dd MMMM yyyy г." без кавычек: буква «г» не является подстановкой и обычно выводится как есть, но полагаться на это не стоит, безопаснее писать "ДФ='dd MMMM yyyy г.'".
Фиксированные шаблоны обязательны при формировании имён файлов, выгрузок в форматы с жёсткой структурой (XML, JSON, CSV) и при сравнении строковых представлений дат. Здесь локальные форматы недопустимы.
СтрокаДляФайла = Формат(ТекущаяДатаСеанса(), "ДФ=yyyy-MM-dd_HH-mm-ss");Формат даты в формах, запросах и СКД
Элементы формы
Для поля ввода или надписи на управляемой форме формат задаётся свойством Формат — в палитре свойств или программно: Элементы.ДатаОтгрузки.Формат = "ДЛФ=D";. Это предпочтительный способ для интерфейса: реквизит остаётся типом «Дата», сортировка и редактирование работают корректно, меняется только отображение.
Запросы
В языке запросов 1С нет аналога функции Формат() — запрос возвращает значение типа «Дата» как есть. Форматирование выполняют уже после выборки, при обходе результата, либо через характеристики поля в СКД. Пытаться «отформатировать дату в запросе» — типичная ошибка новичков: вместо этого нужно форматировать при выводе.
СКД и динамические списки
В схеме компоновки данных формат поля задаётся на закладке «Наборы данных» в колонке «Оформление» или через параметры вывода: для нужного поля указывается форматная строка, например ДЛФ=D. Для динамического списка формат настраивается у колонки таблицы формы, а не в тексте запроса.
Как выбрать способ
Дата в печатных формах и строковое представление для обмена
В макетах табличных документов дату обычно выводят через параметр: Область.Параметры.ДатаДокумента = Формат(Шапка.Дата, "ДЛФ=DD");. Для официальных печатных форм чаще требуется длинный формат с названием месяца прописью — именно его даёт ДЛФ=DD при русской локали.
Для XML-обменов стандартом де-факто является представление yyyy-MM-dd или yyyy-MM-ddTHH:mm:ss. Его получают шаблоном "ДФ=yyyy-MM-dd" или, для полного соответствия ISO, функциями сериализации (ЗаписьXML сама сериализует дату корректно, если записывать значение типа «Дата», а не строку).
Обратное преобразование строки в дату выполняется функцией Дата() с жёстким форматом аргументов — Дата("20260315") или Дата(2026, 3, 15). Функция Дата() не понимает произвольные строки вида «15.03.2026», поэтому при разборе внешних данных строку приходится предварительно разбирать вручную или через XMLЗначение.
Типичные ошибки и проверка результата
Самая частая ошибка — путаница MM и mm: вместо «15.03.2026 14:32» получается «15.32.2026 14:03», где месяц и минуты поменялись местами. Вторая — забытые одинарные кавычки вокруг литералов в шаблоне. Третья — ожидание, что формат в запросе сработает: запрос всегда возвращает «сырую» дату.
Отдельная группа проблем — пустая дата. Значение '00010101' по умолчанию выводится как «01.01.0001 0:00:00», что выглядит для пользователя как мусор. Добавление параметра ДП решает вопрос: Формат(Дата, "ДЛФ=D; ДП='—'").
Проверить результат проще всего через окно «Вычислить выражение» (Shift+F9) в отладчике: введите Формат(ТекущаяДатаСеанса(), "ваш формат") и посмотрите строку. Для кода в обработках полезно временно выводить результат через Сообщить() до включения форматирования в рабочую логику.
Как проверить результат
День, месяц и время стоят на своих местах, формат читаем
Месяц равен минутам или год выводится как 24 — перепутаны символы шаблона
Формат стабилен при любых региональных настройках (yyyy-MM-dd)
Строка содержит название месяца или разделители локали
Показывается заданный текст-заменитель или пусто
Отображается 01.01.0001
Частые вопросы
Как вывести дату прописью, например «15 марта 2026 г.»?
Используйте локальный длинный формат: Формат(Дата, "ДЛФ=DD"). При русских региональных настройках результат будет именно в таком виде. Если нужен гарантированный вид независимо от локали, используйте шаблон "ДФ='dd MMMM yyyy г.'".
Как убрать время из даты при выводе?
Задайте формат без компонентов времени: Формат(Дата, "ДЛФ=D") или Формат(Дата, "ДФ=dd.MM.yyyy"). Само значение при этом не обрезается — если нужно обрезать время в данных, используйте НачалоДня(Дата).
Можно ли задать формат даты в запросе 1С?
Нет, в языке запросов нет функции форматирования. Запрос возвращает значение типа «Дата», а формат применяют при обходе выборки функцией Формат() или в настройках поля СКД через свойство оформления.
Как преобразовать строку «15.03.2026» обратно в дату?
Функция Дата() такую строку не поймёт — она принимает формат «ггггММдд» или числовые аргументы. Разберите строку через СтрРазделить() и соберите Дата(Год, Месяц, День), либо используйте XMLЗначение(Тип("Дата"), Строка) для строки вида «2026-03-15».
Почему Формат() выдаёт дату не в том виде, что у коллеги?
Если используется ДЛФ, результат зависит от региональных настроек сеанса и операционной системы. Для одинакового результата на всех машинах переходите на фиксированный шаблон ДФ.
Как вывести только месяц и год, например «март 2026»?
Шаблоном: Формат(Дата, "ДФ='MMMM yyyy'"). Четырёхбуквенное MMMM даёт название месяца, yyyy — год. Обратите внимание на одинарные кавычки вокруг всего шаблона с пробелом.
Что важно запомнить
Формат даты в 1С задаётся функцией Формат() или свойством Формат у элемента: ДЛФ — локальные форматы для интерфейса, ДФ — фиксированные шаблоны для файлов и обменов. Формат меняет только представление, не значение. В запросах дату не форматируют, пустую дату скрывают параметром ДП.