Разработка и Конфигурация · 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 декабря в отбор не попадут — классическая ошибка при построении отчётов.
НачалоПериода = Дата(2026, 1, 1);
КонецПериода = КонецДня(Дата(2026, 12, 31));Как получить текущую дату и время
Для получения текущего момента используются две функции с важным различием. ТекущаяДата() возвращает дату компьютера, на котором выполняется код, а ТекущаяДатаСеанса() — дату сеанса с учётом часового пояса информационной базы. В клиент-серверном режиме и при работе пользователей из разных часовых поясов корректнее использовать ТекущаяДатаСеанса().
ДатаДокумента = ТекущаяДатаСеанса();
НачалоСегодня = НачалоДня(ТекущаяДатаСеанса());
Полезные функции для работы с датами: НачалоДня(), КонецДня(), НачалоМесяца(), КонецМесяца(), ДобавитьМесяц(), а также арифметика — к дате можно прибавлять секунды. Чтобы прибавить день, прибавляют 86400 секунд (24 × 60 × 60), хотя для месяцев и лет такая арифметика не подходит из-за разной длительности периодов.
Как записать дату в запросе
В языке запросов 1С литерал даты записывается ключевым словом ДАТАВРЕМЯ с числовыми параметрами: год, месяц, день и опционально время. Кавычки и литералы встроенного языка в запросе не работают.
ВЫБРАТЬ
Реализация.Ссылка
ИЗ
Документ.РеализацияТоваровУслуг КАК Реализация
ГДЕ
Реализация.Дата >= ДАТАВРЕМЯ(2026, 1, 1)
И Реализация.Дата <= ДАТАВРЕМЯ(2026, 1, 31, 23, 59, 59)
На практике конкретные даты в текст запроса «зашивают» редко — чаще передают через параметры. Тогда в коде параметру присваивается значение типа Дата, а в тексте запроса используется имя параметра с амперсандом: Реализация.Дата МЕЖДУ &НачалоПериода И &КонецПериода. Это безопаснее и позволяет переиспользовать запрос.
Пустая дата в запросе — это ДАТАВРЕМЯ(1, 1, 1). Проверка «дата не заполнена» пишется как Реквизит = ДАТАВРЕМЯ(1, 1, 1), а не сравнение с NULL — дата в 1С не бывает NULL сама по себе, NULL появляется только при соединениях таблиц.
Способы задать дату в запросе
Подходит для фиксированных границ в типовых запросах; негибко при изменении периода
Универсальный вариант: значение передаётся из кода, запрос не меняется
Оправдана при сложных многошаговых запросах, где период участвует в нескольких выборках
Как отформатировать дату для вывода и печати
Для представления даты пользователю — в сообщении, печатной форме, заголовке — применяется функция Формат(). Она принимает значение даты и строку формата, описывающую нужный вид вывода.
СтрокаДаты = Формат(ДатаДокумента, "ДЛФ=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', а не пустая строка.