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

Быстрый старт · 10 мин

Как писать дату в 1С: полное руководство

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

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

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

Ниже разобраны оба сценария: ручной ввод дат в документах и отчётах, программное создание дат во встроенном языке, преобразование строк в дату и обратно, а также типичные ошибки и способы их проверки.

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

В большинстве конфигураций (1С:Бухгалтерия, 1С:Управление торговлей, 1С:ERP) поле даты расположено в шапке документа рядом с номером. По умолчанию при создании нового документа туда автоматически подставляется текущая дата. Чтобы изменить её, установите курсор в поле и введите значение цифрами: программа понимает ввод вида «150325», «15.03.25» или «15.03.2026» и сама приводит его к полному формату.

Второй способ — кнопка календаря справа от поля. Клик по ней открывает всплывающий календарь, где можно выбрать день, переключить месяц стрелками и год — кликом по заголовку. Этот способ удобен, когда нужно выбрать дату, ориентируясь на день недели, например при оформлении отпуска или графика поставки.

Полезные приёмы при ручном вводе: клавиши со стрелками вверх/вниз в поле даты сдвигают значение на один день, а ввод короткого числа без точек (например, «0103») интерпретируется как день и месяц текущего года. После ввода всегда проверяйте, что программа распознала значение так, как вы ожидали, — особенно при вводе без точек.

Как изменить дату документа
  1. 1
    Откройте документ и найдите поле «Дата» в шапке рядом с номером
  2. 2
    Кликните в поле и введите дату цифрами в формате ДД.ММ.ГГГГ или ДДММГГ
  3. 3
    Либо нажмите кнопку календаря и выберите нужный день
  4. 4
    Нажмите Enter или Tab, чтобы поле зафиксировало значение
  5. 5
    Проверьте отображённую дату и перепроведите документ, если он уже был проведён

Ограничения при изменении даты: дата запрета и периоды

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

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

Как написать дату в коде: тип «Дата» и конструкторы

Во встроенном языке 1С дата создаётся несколькими способами. Самый явный — литеральный конструктор Дата(Год, Месяц, День) или с временем Дата(Год, Месяц, День, Час, Минута, Секунда). Например, Дата(2026, 3, 15) — это 15 марта 2026 года, время 00:00:00. Порядок аргументов — год, месяц, день, а не день-месяц-год, что часто становится источником ошибок у начинающих.

Второй вариант — литерал даты в одиночных кавычках: '20260315' или с временем '20260315143000'. Формат всегда ГГГГММДДЧЧММСС — это единственный порядок, который платформа распознаёт автоматически. Такие литералы удобны в запросах и при фиксированных значениях в коде.

Важная особенность типа «Дата»: он всегда содержит время, даже если вы его не указывали. Пустая (незаполненная) дата — это '00010101', то есть 1 января года 1, 00:00:00. Сравнение даты с пустым значением делается через Дата(1,1,1) или функцию ЗначениеЗаполнено().

bsl
НачалоПериода = Дата(2026, 3, 1);     // 01.03.2026 0:00:00
КонецПериода = КонецДня(Дата(2026, 3, 31)); // 31.03.2026 23:59:59
ТекДата    = ТекущаяДатаСеанса();     // дата и время сеанса
ПустаяДата  = Дата(1, 1, 1);        // пустое значение даты

Текущая дата: ТекущаяДата, ТекущаяДатаСеанса и их различия

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

Для получения только даты без времени применяйте функции НачалоДня(), КонецДня(), НачалоМесяца(), КонецМесяца(), НачалоКвартала(), КонецГода(). Классическая ошибка — сравнивать период «по конец месяца» через Дата(2026,3,31): в этот момент времени 00:00:00, и документы, проведённые 31 марта днём, в интервал не попадут. Правильно — КонецДня(Дата(2026,3,31)) или КонецМесяца().

Типичные ошибки с датами в коде
01
Использовать Дата(2026,3,31) как конец периода — документы за день 31 марта не попадут в выборку; нужен КонецДня() или КонецМесяца()
02
Перепутать порядок аргументов и написать Дата(15, 3, 2026) вместо Дата(2026, 3, 15) — получится ошибка или неверное значение
03
Использовать ТекущаяДата() на клиенте в клиент-серверном режиме — у пользователей с неверными часами документы датируются неправильно
04
Сравнивать дату со строкой — сравнение '15.03.2026' с типом Дата не выполняется корректно, нужна конвертация

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

Преобразование строки в дату — частая задача при загрузке данных из файлов, обменах и веб-сервисах. Если строка в формате ГГГГММДД (например, «20260315»), достаточно функции Дата("20260315"). Для строк в формате XML (ISO 8601, вида «2026-03-15T14:30:00») используется XMLЗначение(Тип("Дата"), СтрокаДаты) — это стандартный способ при обмене между системами.

Если строка приходит в произвольном формате («15.03.2026», «15/03/25»), встроенного универсального парсера нет: строку разбирают вручную функциями СтрНайти(), Сред(), Лев(), Прав(), извлекают день, месяц и год как числа и собирают через Дата(Год, Месяц, День). Перед сборкой стоит проверить, что числа попадают в допустимые диапазоны, иначе получите ошибку выполнения.

Обратное преобразование — дату в строку — делается функцией Формат(ЗначениеДаты, "ДФ=dd.MM.yyyy"). Шаблоны формата позволяют вывести дату в любом виде: ДФ=yyyy-MM-dd для обменов, ДЛФ=D для длинного локализованного представления («15 марта 2026 г.»). Для печатных форм и подписей удобен именно Формат() с явным шаблоном, чтобы результат не зависел от региональных настроек сервера.

Дата в запросах и отчётах

В языке запросов 1С дата задаётся литералом ДАТАВРЕМЯ(2026, 3, 15, 0, 0, 0) или передаётся параметром — второй способ предпочтительнее, так как исключает ошибки форматирования и ускоряет выполнение за счёт повторного использования плана запроса. В условиях по периоду используйте конструкцию МЕЖДУ &НачалоПериода И &КонецПериода, передавая конец периода уже с учётом времени (конец дня или граница).

Для виртуальных таблиц регистров (остатки, обороты) даты периода задаются параметрами виртуальной таблицы: Остатки(&НачалоПериода, ).

В отчётах на СКД период обычно выносится в параметры «НачалоПериода» и «КонецПериода» с типом «Стандартный период» — тогда пользователь выбирает интервал удобным диалогом («этот месяц», «прошлый квартал»), а отчёт сам подставляет корректные границы с учётом времени.

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

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

Дата в поле документа после ввода
Норма

Отображается полностью в формате ДД.ММ.ГГГГ и совпадает с задуманной

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

Год подставился текущий или значение сбросилось — ввод был не распознан

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

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

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

Документы за последний день отсутствуют — конец периода задан без времени

Документ сохраняется с нужной датой
Норма

Запись и проведение проходят без сообщений

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

Ошибка про дату запрета изменения данных — период закрыт

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

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

Почему 1С не даёт сохранить документ с прошлой датой?

Скорее всего, установлена дата запрета изменения данных — период закрыт после сдачи отчётности. Уточните у администратора или главного бухгалтера, до какой даты закрыт период, и запросите временное открытие, если правка действительно необходима.

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

При создании нового документа текущая дата подставляется автоматически. Если поле уже изменено, очистите его или введите сегодняшние день и месяц цифрами без года — год подставится текущий. Также можно выбрать сегодняшний день в календаре одним кликом.

Чем ТекущаяДатаСеанса() лучше ТекущаяДата()?

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

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

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

Как вывести дату словами в печатной форме, например «15 марта»?

Используйте Формат(ДатаДокумента, "ДЛФ=D") — получите длинное представление вида «15 марта 2026 г.». Если год не нужен, обрежьте строку или соберите представление вручную через День() и Месяц() с массивом названий месяцев.

Что такое пустая дата и как проверить, заполнена ли дата?

Пустая дата — это значение 01.01.0001 00:00:00, литерал '00010101'. Проверка выполняется сравнением с Дата(1,1,1) или универсальной функцией ЗначениеЗаполнено(Дата), которая вернёт Ложь для пустого значения.

Итог

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

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