Быстрый старт · 10 мин
Как писать дату в 1С: полное руководство
Как правильно писать дату в 1С: форматы ввода в документах, функции ТекущаяДата и Дата в коде, конвертация строки в дату, настройки и типичные ошибки.
Дата в 1С — один из самых часто используемых типов данных: она есть в каждом документе, справочнике, регистре и отчёте. При этом работа с датой сильно отличается в зависимости от того, кто её пишет: пользователь вводит дату в форму документа, а разработчик формирует её программно во встроенном языке. Ошибки в обоих случаях приводят к некорректному учёту: документ попадает не в тот период, отчёт показывает неверные цифры, а проведение может быть заблокировано датой запрета изменения данных.
В пользовательском режиме дата вводится в поле документа либо вручную с клавиатуры, либо через календарь. Встроенный язык 1С использует тип «Дата», который хранит одновременно дату и время с точностью до секунды, и предоставляет набор функций для создания, разбора и преобразования значений. Понимание этих двух контекстов — ключ к тому, чтобы писать дату правильно.
Ниже разобраны оба сценария: ручной ввод дат в документах и отчётах, программное создание дат во встроенном языке, преобразование строк в дату и обратно, а также типичные ошибки и способы их проверки.
Как ввести дату в документе в пользовательском режиме
В большинстве конфигураций (1С:Бухгалтерия, 1С:Управление торговлей, 1С:ERP) поле даты расположено в шапке документа рядом с номером. По умолчанию при создании нового документа туда автоматически подставляется текущая дата. Чтобы изменить её, установите курсор в поле и введите значение цифрами: программа понимает ввод вида «150325», «15.03.25» или «15.03.2026» и сама приводит его к полному формату.
Второй способ — кнопка календаря справа от поля. Клик по ней открывает всплывающий календарь, где можно выбрать день, переключить месяц стрелками и год — кликом по заголовку. Этот способ удобен, когда нужно выбрать дату, ориентируясь на день недели, например при оформлении отпуска или графика поставки.
Полезные приёмы при ручном вводе: клавиши со стрелками вверх/вниз в поле даты сдвигают значение на один день, а ввод короткого числа без точек (например, «0103») интерпретируется как день и месяц текущего года. После ввода всегда проверяйте, что программа распознала значение так, как вы ожидали, — особенно при вводе без точек.
- 1Откройте документ и найдите поле «Дата» в шапке рядом с номером
- 2Кликните в поле и введите дату цифрами в формате ДД.ММ.ГГГГ или ДДММГГ
- 3Либо нажмите кнопку календаря и выберите нужный день
- 4Нажмите Enter или Tab, чтобы поле зафиксировало значение
- 5Проверьте отображённую дату и перепроведите документ, если он уже был проведён
Ограничения при изменении даты: дата запрета и периоды
Далеко не всегда дату можно поставить произвольно. В учётных конфигурациях администратор может установить дату запрета изменения данных: документы раньше этой даты нельзя создавать, изменять или перепроводить обычному пользователю. При попытке сохранить документ с датой из закрытого периода программа выдаст сообщение об ошибке и не даст записать объект.
Ещё одно ограничение — последовательность проведения. Если вы изменили дату проведённого документа на более раннюю, документы, проведённые после него, могут стать неактуальными: например, остатки по складу или взаиморасчёты будут рассчитаны неверно. В таких случаях требуется восстановить последовательность или перепровести документы за затронутый период.
Как написать дату в коде: тип «Дата» и конструкторы
Во встроенном языке 1С дата создаётся несколькими способами. Самый явный — литеральный конструктор Дата(Год, Месяц, День) или с временем Дата(Год, Месяц, День, Час, Минута, Секунда). Например, Дата(2026, 3, 15) — это 15 марта 2026 года, время 00:00:00. Порядок аргументов — год, месяц, день, а не день-месяц-год, что часто становится источником ошибок у начинающих.
Второй вариант — литерал даты в одиночных кавычках: '20260315' или с временем '20260315143000'. Формат всегда ГГГГММДДЧЧММСС — это единственный порядок, который платформа распознаёт автоматически. Такие литералы удобны в запросах и при фиксированных значениях в коде.
Важная особенность типа «Дата»: он всегда содержит время, даже если вы его не указывали. Пустая (незаполненная) дата — это '00010101', то есть 1 января года 1, 00:00:00. Сравнение даты с пустым значением делается через Дата(1,1,1) или функцию ЗначениеЗаполнено().
НачалоПериода = Дата(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)) или КонецМесяца().
Как преобразовать строку в дату и дату в строку
Преобразование строки в дату — частая задача при загрузке данных из файлов, обменах и веб-сервисах. Если строка в формате ГГГГММДД (например, «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С всегда содержит время, поэтому сравнения и интервалы строят с этой особенностью в уме.