К статье
Практический материал

Разработка и Конфигурация · 9 мин

Как записать дату в 1С: ввод, код и запросы

Как записать дату в 1С: ввод в документах, функции Дата() и ТекущаяДата(), дата в запросах и форматирование. Примеры кода и типичные ошибки.

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

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

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

Как ввести дату в поле документа или справочника

В пользовательском интерфейсе дата вводится в поле ввода с маской. Стандартный формат — ДД.ММ.ГГГГ, например 15.01.2026. Разделители можно не набирать: достаточно ввести 15012026, и система сама преобразует значение после перехода к другому полю или нажатия Enter.

Для текущего года работает сокращённый ввод: если набрать только день и месяц (1501), программа подставит текущий год автоматически. Это ускоряет заполнение документов, но требует внимательности на стыке лет — в январе при вводе декабрьской даты легко получить неверный год.

Быстрые клавиши упрощают ввод: Ctrl+F4 или кнопка календаря открывает визуальный выбор даты, а в некоторых конфигурациях работает ввод относительных значений. После ввода всегда проверяйте, какое значение реально зафиксировалось в поле — особенно год.

Как записать дату в коде на встроенном языке

Литерал даты

Самый короткий способ — литерал даты в одинарных кавычках в формате ГГГГММДД. Порядок именно такой: сначала год, затем месяц, затем день. Это единственный корректный порядок для литерала, и он не зависит от региональных настроек.

ДатаОтчета = '20260115'; // 15 января 2026 года

ДатаСоВременем = '20260115143000'; // 15.01.2026 14:30:00

Если нужно указать время, оно дописывается в формате ЧЧММСС сразу после даты. Пропущенные компоненты времени считаются нулевыми, то есть литерал '20260115' означает начало дня — 00:00:00.

Функция Дата()

Альтернатива литералу — функция Дата() с числовыми аргументами: год, месяц, день и при необходимости часы, минуты, секунды. Этот вариант удобнее, когда компоненты даты вычисляются или хранятся в переменных.

НачалоПериода = Дата(2026, 1, 1);

КонецПериода = Дата(2026, 12, 31, 23, 59, 59);

Обратите внимание: для границ периодов принято использовать либо конец дня 23:59:59, либо функцию КонецДня(). Запись Дата(2026, 12, 31) даст начало суток, и документы за 31 декабря в отбор не попадут — классическая ошибка при построении отчётов.

bsl
НачалоПериода = Дата(2026, 1, 1);
КонецПериода = КонецДня(Дата(2026, 12, 31));

Как получить текущую дату и время

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

ДатаДокумента = ТекущаяДатаСеанса();

НачалоСегодня = НачалоДня(ТекущаяДатаСеанса());

Полезные функции для работы с датами: НачалоДня(), КонецДня(), НачалоМесяца(), КонецМесяца(), ДобавитьМесяц(), а также арифметика — к дате можно прибавлять секунды. Чтобы прибавить день, прибавляют 86400 секунд (24 × 60 × 60), хотя для месяцев и лет такая арифметика не подходит из-за разной длительности периодов.

Типичные ошибки
01
Прибавление месяца через 30 дней в секундах — дата «плывёт», используйте ДобавитьМесяц()
02
Использование ТекущаяДата() на сервере в распределённой базе — пользователи получают разное время
03
Сравнение дат с точностью до секунды, когда нужна проверка только дня — сравнивайте НачалоДня() обеих дат
04
Запись литерала в формате '15.01.2026' вместо '20260115' — синтаксическая ошибка

Как записать дату в запросе

В языке запросов 1С литерал даты записывается ключевым словом ДАТАВРЕМЯ с числовыми параметрами: год, месяц, день и опционально время. Кавычки и литералы встроенного языка в запросе не работают.

ВЫБРАТЬ

Реализация.Ссылка

ИЗ

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

ГДЕ

Реализация.Дата >= ДАТАВРЕМЯ(2026, 1, 1)

И Реализация.Дата <= ДАТАВРЕМЯ(2026, 1, 31, 23, 59, 59)

На практике конкретные даты в текст запроса «зашивают» редко — чаще передают через параметры. Тогда в коде параметру присваивается значение типа Дата, а в тексте запроса используется имя параметра с амперсандом: Реализация.Дата МЕЖДУ &НачалоПериода И &КонецПериода. Это безопаснее и позволяет переиспользовать запрос.

Пустая дата в запросе — это ДАТАВРЕМЯ(1, 1, 1). Проверка «дата не заполнена» пишется как Реквизит = ДАТАВРЕМЯ(1, 1, 1), а не сравнение с NULL — дата в 1С не бывает NULL сама по себе, NULL появляется только при соединениях таблиц.

Способы задать дату в запросе

Литерал ДАТАВРЕМЯ(2026, 1, 15)

Подходит для фиксированных границ в типовых запросах; негибко при изменении периода

Параметр &Дата

Универсальный вариант: значение передаётся из кода, запрос не меняется

Временная таблица с периодом

Оправдана при сложных многошаговых запросах, где период участвует в нескольких выборках

Как отформатировать дату для вывода и печати

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

СтрокаДаты = Формат(ДатаДокумента, "ДЛФ=D");   // 15.01.2026

ДлинныйВид = Формат(ДатаДокумента, "ДЛФ=DD"); // 15 января 2026 г.

СоВременем = Формат(ДатаДокумента, "ДЛФ=DT"); // 15.01.2026 14:30:00

Параметр ДЛФ задаёт локальный формат даты: D — краткая дата, DD — длинная с названием месяца, DT — дата со временем. Через конструкцию ДФ можно собрать произвольный шаблон, например ДФ="dd.MM.yyyy 'г.'" или ДФ=ММММ для названия месяца. Полный перечень шаблонов есть в синтакс-помощнике по функции Формат().

Важно понимать: Формат() возвращает строку, а не дату. Если результат нужен для дальнейших вычислений или сравнений, форматировать значение нельзя — сравнение строк «01.02.2026» и «15.01.2026» даст неверный результат, так как строки сравниваются посимвольно.

Как проверить и преобразовать дату

При получении даты из внешних источников — файлов, обменов, ввода пользователя — значение часто приходит строкой. Для проверки типа используется ТипЗнч(), а для осторожного разбора строки — попытка преобразования через описание типов или явный разбор по разделителям с проверкой корректности.

Если ТипЗнч(Значение) = Тип("Дата") Тогда

// работаем как с датой

КонецЕсли;

Признак незаполненной даты — равенство значению '00010101' (1 января года 1). Проверка пишется так: Если Не ЗначениеЗаполнено(ДатаПроверки) Тогда — функция ЗначениеЗаполнено() корректно обрабатывает пустые даты, строки и ссылки.

Контрольные точки

Как проверить результат

Литерал даты в коде
Норма

Значение в одинарных кавычках в формате ГГГГММДД, код компилируется

Тревожный признак

Кавычки с точками или порядок ДДММГГГГ — ошибка или неверная дата

Граница периода в отчёте
Норма

В выборку попадают документы последнего дня периода

Тревожный признак

Документы последнего дня отсутствуют — задано начало дня вместо конца

Пустая дата
Норма

Сравнение с '00010101' или ЗначениеЗаполнено() даёт ожидаемый результат

Тревожный признак

Сравнение с пустой строкой или Неопределено — условие никогда не срабатывает

Частые вопросы о записи дат в 1С

Как в запросе отобрать документы только за сегодня?

Передайте в запрос два параметра: НачалоДня(ТекущаяДатаСеанса()) и КонецДня(ТекущаяДатаСеанса()), а в условии используйте Дата МЕЖДУ &Начало И &Конец. Литералом «сегодня» в запросе не задаётся — язык запросов не имеет функции текущей даты.

Почему литерал '20261301' вызывает ошибку?

Месяца с номером 13 не существует — литерал проверяется на корректность календарной даты. Проверьте, что месяц в диапазоне 01–12, а день не превышает число дней в этом месяце, включая високосные годы для февраля.

Как из даты получить только год или месяц числом?

Используйте функции Год(), Месяц() и День() — они принимают дату и возвращают число. Например, Год('20260115') вернёт 2026. В запросах аналогичные функции называются ГОД(), МЕСЯЦ(), ДЕНЬ().

Чем отличается дата документа от даты его проведения?

В 1С у документа одно поле Дата, которое одновременно определяет позицию документа в последовательности и момент времени для движений по регистрам. Отдельной «даты проведения» нет — проведение фиксируется признаком Проведен, а движения записываются на дату документа.

Как записать дату без времени, если реквизит имеет состав «дата и время»?

Дата без времени в 1С — это дата с нулевым временем (начало дня 00:00:00), отдельного типа «только дата» на уровне значений нет. Если время не нужно, используйте НачалоДня(Значение) и задайте реквизиту состав даты «Дата» в конфигураторе, чтобы время не отображалось и не хранилось.

Почему при выгрузке в Excel дата превращается в число?

Excel хранит даты как числа — количество дней от своей точки отсчёта. При выгрузке через табличный документ это норма: достаточно назначить ячейкам формат даты в Excel. Если нужна именно строка, форматируйте значение функцией Формат() перед выводом в табличный документ.

Итог

Что важно запомнить

В интерфейсе дата вводится как ДД.ММ.ГГГГ, в коде — литералом '20260115' или Дата(2026, 1, 15), в запросе — ДАТАВРЕМЯ(2026, 1, 15) или параметром. Для границ периодов используйте КонецДня(), для текущего момента — ТекущаяДатаСеанса(), для вывода — Формат(). Пустая дата — это '00010101', а не пустая строка.