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

Администрирование · 10 мин

Как задать текущую дату в 1С: все способы и настройки

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

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

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

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

Какие «даты» существуют в 1С и чем они отличаются

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

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

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

Получение текущей даты в коде: ТекущаяДата() и ТекущаяДатаСеанса()

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

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

bsl
// Рекомендуемый способ — дата сеанса (серверное время)
ТекДата = ТекущаяДатаСеанса();

// Только дата без времени
ТолькоДата = НачалоДня(ТекущаяДатаСеанса());

// Пример: установить дату нового документа
НовыйДокумент = Документы.РеализацияТоваровУслуг.СоздатьДокумент();
НовыйДокумент.Дата = ТекущаяДатаСеанса();

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

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

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

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

Порядок действий
  1. 1
    Откройте главное меню программы и перейдите в раздел «Администрирование» (в некоторых конфигурациях — «Настройки»).
  2. 2
    Найдите пункт «Персональные настройки» или «Параметры работы пользователя».
  3. 3
    Найдите параметр «Рабочая дата» или «Использовать текущую дату компьютера».
  4. 4
    Выберите режим: автоматически использовать текущую дату либо зафиксировать конкретное число.
  5. 5
    Сохраните настройки и создайте тестовый документ — проверьте, какая дата подставилась.

Точное расположение настройки зависит от конфигурации. В «1С:Бухгалтерии» и «1С:Управление торговлей» путь может отличаться, но логика одна: есть переключатель между «текущая дата компьютера» и фиксированным значением. Если фиксированная дата установлена, все новые документы будут создаваться с ней, пока настройку не изменят.

Фиксированная рабочая дата бывает полезна осознанно — например, при массовом вводе документов за прошлый период. Но после завершения такой работы настройку нужно вернуть в автоматический режим, иначе ошибки в учёте гарантированы.

Дата документа и проведение: что ещё влияет на «текущую» дату

Даже при правильной рабочей дате документ может получить неожиданное время. Платформа при проведении автоматически устанавливает время документа так, чтобы он оказался последним в течение дня, если дата совпадает с уже существующими документами. Это нормальное поведение, а не ошибка.

На дату документов также влияют запреты изменения данных. Если установлена дата запрета редактирования, попытка создать или провести документ «вчерашним» числом завершится ошибкой. Проверьте настройку в разделе администрирования: «Даты запрета изменения данных».

Отдельный случай — обмены и загрузка данных из внешних систем. Документы, пришедшие по обмену, сохраняют дату источника, и текущая дата сеанса на них не влияет. Если после обмена документы «не того числа», разбираться нужно с настройками обмена, а не с рабочей датой.

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

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

Дата нового документа
Норма

Совпадает с текущей датой или с осознанно зафиксированной рабочей датой

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

Всегда одна и та же прошедшая дата — рабочая дата зафиксирована

Время проведения
Норма

Документ проводится текущим временем в рамках дня

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

Документ «уезжает» на другой день — проверьте часовой пояс сервера

Ошибки при проведении
Норма

Документ проводится без сообщений о запрете

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

Сообщение о дате запрета редактирования — измените дату документа или настройку запрета

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

Типичные ошибки
01
Сравнение дат с учётом времени: 'Если Док.Дата = ТекущаяДата()' почти всегда ложно, потому что время отличается на секунды. Используйте НачалоДня() для обеих сторон.
02
Использование ТекущаяДата() на клиенте в критичной логике: часы на компьютере пользователя могут быть сбиты, и документ получит неверную дату.
03
Забытая фиксированная рабочая дата после ввода документов задним числом: все последующие документы создаются прошлым периодом.
04
Хранение даты как строки: сортировка и сравнение строк 'ДД.ММ.ГГГГ' дают неверный порядок. Храните значения в типе Дата.

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

Быстрый выбор подходящего способа

Маршрут решения

Как выбрать действие

Нужна текущая дата в коде на сервере или в общем модулеИспользуйте ТекущаяДатаСеанса()
Нужно только число без времениОберните значение в НачалоДня()
Новые документы создаются с неправильной датой у пользователяПроверьте персональную настройку рабочей даты и верните автоматический режим
Документы не проводятся прошлым числомПроверьте дату запрета изменения данных в разделе администрирования
У разных пользователей разное 'текущее' времяПроверьте часы и часовые пояса на сервере 1С и СУБД, в коде используйте только ТекущаяДатаСеанса()

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

Итог

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

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

Частые вопросы

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

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

Почему новый документ создаётся вчерашним числом?

Наиболее вероятная причина — в персональных настройках пользователя зафиксирована рабочая дата. Откройте персональные настройки в разделе администрирования и переключите рабочую дату в режим «текущая дата компьютера». Если настройка в порядке, проверьте системное время на компьютере или сервере.

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

В коде используйте НачалоДня(ТекущаяДатаСеанса()) — время обнулится до 00:00:00. В тексте запроса аналогичную роль выполняют функции НАЧАЛОПЕРИОДА(Дата, ДЕНЬ) или КОНЕЦПЕРИОДА(Дата, ДЕНЬ) для верхней границы интервала.

Можно ли программно изменить рабочую дату пользователя?

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

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

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

Опасно ли менять дату документа задним числом?

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