Работа с датами в 1С:Предприятие — одна из самых частых задач, с которыми сталкиваются разработчики и опытные пользователи. Неправильный формат даты в запросе может привести к ошибкам выполнения, некорректной фильтрации данных или проблемам при интеграции с внешними системами. В этой статье мы разберём все способы изменения формата даты непосредственно в тексте запроса, рассмотрим синтаксические особенности и типичные ошибки, которые допускают даже опытные специалисты.

Особенность работы с датами в заключается в том, что система хранит их в внутреннем формате, но при выводе или сравнении часто требуется привести их к удобочитаемому виду. Например, вместо стандартного 20260515 может понадобиться 15.05.2026 или даже 15 мая 2026 г.. Важно понимать, что изменение формата не влияет на внутреннее представление даты — это чисто визуальная трансформация для отчётов, интерфейсов или экспорта данных.

Статья будет полезна как начинающим разработчикам, так и тем, кто хочет систематизировать свои знания. Мы не будем ограничиваться базовыми примерами, а рассмотрим и неочевидные случаи: работу с параметрами, динамическое форматирование в зависимости от языка интерфейса, а также нюансы при обмене данными через REST или JSON.

Базовый синтаксис изменения формата даты в запросе

Самый простой способ изменить формат даты в запросе — использовать функцию ФОРМАТ. Она позволяет преобразовать значение даты в строку с заданным шаблоном. Основной синтаксис:

ВЫБРАТЬ

ФОРМАТ(ДатаДокумента,"ДФ=dd.MM.yyyy") КАК ОтформатированнаяДата

ИЗ

Документ.ЗаказКлиента

Где ДФ — это директива форматирования даты, а dd.MM.yyyy — шаблон вывода. Рассмотрим основные элементы шаблона:

  • 📅 dd — день месяца (01–31)
  • 📅 MM — месяц (01–12)
  • 📅 yyyy — год (четырёхзначный)
  • 📅 yy — год (двухзначный)
  • 📅 Q — квартал (1–4)

Пример запроса с выводом даты в формате "день.месяц.год":

ВЫБРАТЬ

ФОРМАТ(Дата,"ДФ=dd.MM.yyyy") КАК ДатаЗаказа,

Номер

ИЗ

Документ.РеализацияТоваровУслуг

ГДЕ

Дата МЕЖДУ &НачалоПериода И &КонецПериода

💡

Если вам нужно вывести название месяца прописью (например,"май" вместо"05"), используйте шаблон ДФ='dd MMMM yyyy'. Это особенно полезно для печатных форм документов.

Динамическое форматирование в зависимости от языка системы

В многопользовательских базах или при работе с международными клиентами часто требуется выводить даты в формате, соответствующем языку интерфейса. Для этого в предусмотрена возможность динамического форматирования с учётом региональных настроек.

Синтаксис использования языковых шаблонов:

ВЫБРАТЬ

ФОРМАТ(Дата,"ДЛФ=D") КАК ЛокализованнаяДата

ИЗ

Документ.ПоступлениеТоваров

Где ДЛФ — директива локализованного форматирования, а D — стандартный шаблон даты для текущего языка. Например:

  • 🌍 Для русского языка: 15.05.2026
  • 🌍 Для английского (США): 05/15/2026
  • 🌍 Для немецкого: 15.05.2026 (но с другими разделителями в некоторых версиях)

Если требуется явное указание языка, независимо от настроек пользователя, используйте конструкцию:

ФОРМАТ(Дата,"ДЛФ=D; ЯЗЫК=ru_RU")
📊 Какой формат даты вы чаще всего используете в отчётах?
ДД.ММ.ГГГГ
ММ/ДД/ГГГГ
ГГГГ-ММ-ДД
Другой

Работа с параметрами и динамические шаблоны

В реальных задачах часто требуется передавать формат даты как параметр запроса. Это позволяет гибко настраивать вывод без изменения кода. Рассмотрим, как реализовать такой подход.

Пример запроса с параметром формата:

ВЫБРАТЬ

ФОРМАТ(Дата,"ДФ=" + &ФорматДаты) КАК ОтформатированнаяДата

ИЗ

Документ.СчётНаОплату

ГДЕ

Контрагент = &Контрагент

Где &ФорматДаты — параметр типа Строка, который может принимать значения вроде "dd.MM.yyyy" или "yyyy-MM-dd".

Экранировать кавычки в шаблоне|Проверить длину строки шаблона|Убедиться в наличии директивы ДФ или ДЛФ|Тестировать с разными языками интерфейса-->

Для более сложных сценариев можно использовать вложенные функции. Например, комбинацию ФОРМАТ с ВЫРАЗИТЬ для преобразования строки в дату и обратно:

ВЫБРАТЬ

ФОРМАТ(ВЫРАЗИТЬ(&СтрокаДаты КАК ДАТА),"ДФ=dd.MM.yyyy") КАК ПреобразованнаяДата

⚠️ Внимание: При динамическом формировании шаблона следите за тем, чтобы итоговая строка не содержала недопустимых символов. Например, использование ДФ="dd/MM/yy" приведёт к ошибке, если разделитель не соответствует региональным настройкам.

Типичные ошибки и как их избегать

Даже опытные разработчики иногда сталкиваются с проблемами при форматировании дат в запросах. Рассмотрим наиболее распространённые ошибки и способы их решения.

Ошибка Причина Решение
Ошибка форматирования: неверный шаблон Опечатка в директиве (например, ДФ=dd-MM-yy вместо ДФ="dd-MM-yy") Всегда обрамляйте шаблон кавычками внутри директивы
Некорректное отображение месяца Использование MM вместо MMM для сокращённого названия Для"май" используйте MMMM, для"мая" — MMM
Ошибка приведение типов Попытка отформатировать NULL или недопустимое значение Используйте ВЫБОР КОГДА Дата ЕСТЬ NULL ТОГДА"" ИНАЧЕ ФОРМАТ(Дата,"ДФ=..")
Несоответствие языку интерфейса Жёстко заданный формат игнорирует региональные настройки Заменяйте на ДЛФ=D для автоматического подбора формата

Особого внимания заслуживает работа с пустыми датами. Если в базе есть записи с незаполненным полем даты, прямой вызов ФОРМАТ приведёт к ошибке. Всегда проверяйте значения на NULL:

ВЫБРАТЬ

ВЫБОР

КОГДА ДатаПоступления ЕСТЬ NULL ТОГДА""

ИНАЧЕ ФОРМАТ(ДатаПоступления,"ДФ=dd.MM.yyyy")

КОНЕЦ КАК ДатаПоступленияОтформатированная

Что делать если формат даты не меняется?

Если после применения ФОРМАТ дата всё равно отображается в исходном виде, проверьте:

1. Не перекрывается ли ваш формат настройками отчёта или печатной формы.

2. Не используется ли в конечном выводе функция ПРЕДСТАВЛЕНИЕ, которая может игнорировать ваш шаблон.

3. Убедитесь, что запрос выполняется в контексте, где доступны региональные настройки (например, не в фоновом задании без сеанса пользователя).

Практическое применение: примеры для разных задач

Разберём несколько реальных сценариев, где изменение формата даты критично для корректной работы системы.

1. Экспорт данных в Excel с читаемыми датами

При выгрузке данных в Excel через ЗаписьXML или ТабличныйДокумент даты по умолчанию могут экспортироваться в неудобном формате. Исправляем это прямо в запросе:

ВЫБРАТЬ

ФОРМАТ(ДатаДокумента,"ДФ=yyyy-MM-dd") КАК ДатаДляExcel,

Номер КАК НомерДокумента

ИЗ

Документ.ЗаказПокупателя

Формат yyyy-MM-dd универсально распознаётся Excel как дата, независимо от региональных настроек программы.

2. Фильтрация по диапазону дат с учётом времени

Если в базе хранятся даты с временем (тип ДатаВремя), а фильтр нужно применить только по дате, используйте:

ВЫБРАТЬ

Номер,

ФОРМАТ(Дата,"ДФ=dd.MM.yyyy") КАК ДатаБезВремени

ИЗ

Документ.Оплата

ГДЕ

ДАТАВРЕМЯ(ГОД(Дата), МЕСЯЦ(Дата), ДЕНЬ(Дата), 0, 0, 0) МЕЖДУ &НачалоДня И &КонецДня

3. Вывод даты в печатной форме с названием месяца

Для официальных документов часто требуется формат вида "15 мая 2026 года". Реализуем это:

ВЫБРАТЬ

ФОРМАТ(Дата,"ДФ='dd MMMM yyyy''года'''") КАК ДатаПрописью

ИЗ

Документ.СчётФактура

Обратите внимание на экранирование одинарных кавычек внутри шаблона — они нужны для вывода статичного текста"года".

💡

При работе с печатными формами всегда тестируйте вывод дат на разных языках интерфейса. Например, в английской версии"15th of May 2026" формируется иначе, чем в русской.

Особенности работы с датами в разных версиях 1С

Функциональность форматирования дат эволюционировала вместе с платформой 1С:Предприятие. Рассмотрим ключевые различия между версиями.

В 1С 8.2 и ранних релизах 8.3:

- Отсутствовала директива ДЛФ — приходилось вручную подставлять шаблоны в зависимости от языка.

- Функция ФОРМАТ имела ограниченную поддержку локализации.

- Для вывода названий месяцев прописью требовалось использовать сложные конструкции с ВЫБОР.

Начиная с 1С 8.3.10:

- Появилась полноценная поддержка ДЛФ (директива локализованного форматирования).

- Добавлены шаблоны для кварталов (Q) и недель (w).

- Улучшена работа с NULL-значениями в функциях форматирования.

В последних версиях (8.3.20+):

- Реализована поддержка ISO-формата дат (yyyy-MM-dd) через директиву ДФ=Д.

- Оптимизирована производительность операций форматирования в массовых выборках.

- Добавлены новые параметры для работы с временными зонами.

⚠️ Внимание: При переносе кода между разными версиями платформы всегда проверяйте совместимость используемых директив. Например, шаблон ДФ='dd MMMM yyyy' в 1С 8.2 может работать иначе, чем в 8.3.18, если не учтены региональные настройки сервера.

Интеграция с внешними системами: JSON, REST, SQL

При обмене данными с внешними системами формат даты становится критически важным. Рассмотрим типичные сценарии.

1. Экспорт дат в JSON

Для корректной передачи дат в JSON-формате используйте ISO-стандарт:

ВЫБРАТЬ

ФОРМАТ(Дата,"ДФ=yyyy-MM-ddTHH:mm:ss") КАК ДатаISO

ИЗ

Документ.Заказ

Если время не требуется, упростите до yyyy-MM-dd.

2. Импорт дат из SQL-баз

При чтении дат из внешних SQL-источников (например, PostgreSQL или MS SQL) может потребоваться преобразование строкового представления в дату :

ВЫБРАТЬ

ВЫРАЗИТЬ(ВнешняяДата КАК ДАТА) КАК Дата1С

ИЗ

ВнешнийИсточник

Где ВнешняяДата — строка в формате источника (например, "2026-05-15 14:30:00").

3. Обмен через REST API

Многие REST-сервисы ожидают даты в формате timestamp (количество секунд с 1970 года). Для преобразования:

ДатаВTimestamp = Цел(ДатаНачалоОтсчёта + Дата);

Где ДатаНачалоОтсчёта — это ДАТАВРЕМЯ(1970, 1, 1, 3, 0, 0) (с учётом временной зоны).

Как избежать проблем с временными зонами?

При обмене датами между системами всегда уточняйте:

1. В какой временной зоне хранятся даты в источнике.

2. Требуется ли конвертация во временную зону (настраивается в параметрах информационной базы).

3. Нужно ли учитывать переход на летнее/зимнее время для исторических данных.

Для критичных систем используйте ДАТАВРЕМЯСУЧЁТОМЧАСОВОГОПОЯСА.

FAQ: Частые вопросы по форматированию дат в 1С

Можно ли в одном запросе вывести дату в нескольких форматах?

Да, можно использовать несколько вызовов функции ФОРМАТ с разными шаблонами. Пример:

ВЫБРАТЬ

ФОРМАТ(Дата,"ДФ=dd.MM.yyyy") КАК КороткийФормат,

ФОРМАТ(Дата,"ДФ='dd MMMM yyyy''г.''") КАК ПолныйФормат

ИЗ Документ.Счёт

Почему функция ФОРМАТ возвращает пустую строку для корректной даты?

Наиболее вероятные причины:

  • 🔍 В шаблоне отсутствует директива ДФ= или ДЛФ=.
  • 🔍 Передано значение NULL (проверьте через ЕСТЬ NULL).
  • 🔍 Несоответствие типов (например, попытка отформатировать строку как дату).

Как вывести дату в формате"1 квартал 2026 г."?

Используйте комбинацию функций КВАРТАЛ и ФОРМАТ:

ВЫБРАТЬ

ФОРМАТ(Дата,"ДФ='''Q'Q''квартал'' yyyy''г.'''") КАК КварталПрописью

Где Q — это номер квартала (1–4).

Можно ли изменить формат даты в отчёте безфикации запроса?

Да, в большинстве стандартных отчётов формат даты настраивается через:

  • 📊 Параметры отчёта (вкладка"Дополнительно" или"Формат").
  • 📊 Настройки конкретного поля в макете (двойной клик по колонке с датой).
  • 📊 Пользовательские настройки (если отчёт поддерживает сохранение вариантов).

Однако для сложных форматов (например, с названиями месяцев) всё же потребуется корректировка запроса.

Как отформатировать дату с учётом рабочих/выходных дней?

Для этого нужно комбинировать ФОРМАТ с проверкой дня недели:

ВЫБРАТЬ

ФОРМАТ(Дата,"ДФ=dd.MM.yyyy (dddd)") КАК ДатаСДнёмНедели

ИЗ

Документ.ГрафикРаботы

Где dddd выведет полное название дня недели (например,"понедельник"). Для краткого названия используйте ddd.