Администрирование · 10 мин
Как задать текущую дату в 1С: все способы и настройки
Как задать текущую дату в 1С: функции ТекущаяДата() и ТекущаяДатаСеанса(), настройка рабочей даты пользователя, типичные ошибки и проверка результата.
Вопрос «как задать текущую дату в 1С» возникает в двух разных ситуациях. Первая — вы разработчик и вам нужно получить текущую дату и время в коде на встроенном языке. Вторая — вы пользователь или администратор, и документы в программе создаются не с той датой, которую вы ожидаете. Это разные задачи, и решаются они по-разному.
В платформе «1С:Предприятие» существует несколько понятий, которые часто путают: системная дата компьютера, дата сеанса пользователя и рабочая дата, которая подставляется в новые документы. Понимание разницы между ними избавляет от большинства проблем с «неправильной» датой в проведённых документах.
Ниже разобраны программные способы получения текущей даты, настройка рабочей даты в пользовательском режиме, типичные ошибки и способы проверить, что всё работает корректно.
Какие «даты» существуют в 1С и чем они отличаются
Прежде чем что-то настраивать, важно различить три сущности. Системная дата — это дата и время операционной системы компьютера или сервера. Дата сеанса — дата, которую платформа фиксирует для конкретного сеанса пользователя; в клиент-серверном варианте она определяется на сервере. Рабочая дата — значение, которое подставляется по умолчанию в поле «Дата» новых документов и некоторых других объектов.
Путаница возникает потому, что эти значения могут не совпадать. Например, бухгалтер работает в терминальной сессии на сервере, часы сервера идут правильно, но рабочая дата в программе вручную установлена на последний день прошлого месяца — и все новые документы создаются «старым» числом.
Ещё один нюанс — часовые пояса. Если пользователи работают из разных регионов, дата сеанса зависит от того, где установлен сервер 1С, а не от локального времени пользователя. Это критично для документов, проводимых вблизи полуночи.
Получение текущей даты в коде: ТекущаяДата() и ТекущаяДатаСеанса()
Для разработчика основной способ задать или получить текущую дату — встроенные функции платформы. Функция ТекущаяДата() возвращает дату и время того компьютера, на котором выполняется код. Если код выполняется на клиенте — это дата компьютера пользователя, если на сервере — дата сервера.
Функция ТекущаяДатаСеанса() всегда возвращает дату сеанса, то есть единое время для всех вызовов в рамках сеанса, определяемое сервером. В клиент-серверной архитектуре и при разработке под тонкий/веб-клиент рекомендуется использовать именно её: это исключает ситуацию, когда у разных пользователей «текущее» время разное из-за неверно настроенных часов на их машинах.
// Рекомендуемый способ — дата сеанса (серверное время)
ТекДата = ТекущаяДатаСеанса();
// Только дата без времени
ТолькоДата = НачалоДня(ТекущаяДатаСеанса());
// Пример: установить дату нового документа
НовыйДокумент = Документы.РеализацияТоваровУслуг.СоздатьДокумент();
НовыйДокумент.Дата = ТекущаяДатаСеанса();Полезные сопутствующие функции: НачалоДня() и КонецДня() обрезают время до границ суток, ДобавитьКДате() позволяет прибавить дни, месяцы или годы, Формат() с параметром ДФ преобразует дату в строку нужного вида. Для сравнения дат без учёта времени всегда приводите обе стороны к началу дня — иначе сравнение даст ложный результат.
При работе в обычном приложении (устаревший режим) также существовала функция РабочаяДата как глобальная переменная, которую можно было и читать, и присваивать. В управляемом приложении прямое присваивание рабочей даты из кода ограничено, и полагаться на неё в алгоритмах не стоит.
Как задать рабочую дату в пользовательском режиме
Если документы создаются с неправильной датой, чаще всего причина — зафиксированная рабочая дата. В типовых конфигурациях на платформе 8.3 настройка находится в разделе персональных настроек пользователя.
- 1Откройте главное меню программы и перейдите в раздел «Администрирование» (в некоторых конфигурациях — «Настройки»).
- 2Найдите пункт «Персональные настройки» или «Параметры работы пользователя».
- 3Найдите параметр «Рабочая дата» или «Использовать текущую дату компьютера».
- 4Выберите режим: автоматически использовать текущую дату либо зафиксировать конкретное число.
- 5Сохраните настройки и создайте тестовый документ — проверьте, какая дата подставилась.
Точное расположение настройки зависит от конфигурации. В «1С:Бухгалтерии» и «1С:Управление торговлей» путь может отличаться, но логика одна: есть переключатель между «текущая дата компьютера» и фиксированным значением. Если фиксированная дата установлена, все новые документы будут создаваться с ней, пока настройку не изменят.
Фиксированная рабочая дата бывает полезна осознанно — например, при массовом вводе документов за прошлый период. Но после завершения такой работы настройку нужно вернуть в автоматический режим, иначе ошибки в учёте гарантированы.
Дата документа и проведение: что ещё влияет на «текущую» дату
Даже при правильной рабочей дате документ может получить неожиданное время. Платформа при проведении автоматически устанавливает время документа так, чтобы он оказался последним в течение дня, если дата совпадает с уже существующими документами. Это нормальное поведение, а не ошибка.
На дату документов также влияют запреты изменения данных. Если установлена дата запрета редактирования, попытка создать или провести документ «вчерашним» числом завершится ошибкой. Проверьте настройку в разделе администрирования: «Даты запрета изменения данных».
Отдельный случай — обмены и загрузка данных из внешних систем. Документы, пришедшие по обмену, сохраняют дату источника, и текущая дата сеанса на них не влияет. Если после обмена документы «не того числа», разбираться нужно с настройками обмена, а не с рабочей датой.
Как проверить результат
Совпадает с текущей датой или с осознанно зафиксированной рабочей датой
Всегда одна и та же прошедшая дата — рабочая дата зафиксирована
Документ проводится текущим временем в рамках дня
Документ «уезжает» на другой день — проверьте часовой пояс сервера
Документ проводится без сообщений о запрете
Сообщение о дате запрета редактирования — измените дату документа или настройку запрета
Типичные ошибки и как их избежать
Отдельно предостережение для администраторов: перевод системного времени на сервере 1С «назад» ради исправления дат документов — опасная практика. Это может нарушить работу СУБД, механизмов лицензирования и фоновых заданий. Дату конкретного документа корректно менять в самом документе, а не на уровне операционной системы.
Быстрый выбор подходящего способа
Как выбрать действие
В большинстве практических ситуаций задача сводится к двум действиям: в коде — применять ТекущаяДатаСеанса(), в интерфейсе — держать рабочую дату в автоматическом режиме и фиксировать её только осознанно, на время массового ввода документов.
Что важно запомнить
Текущая дата в коде — это ТекущаяДатаСеанса(), а в пользовательском режиме — настройка рабочей даты в персональных параметрах. Сравнивайте даты через НачалоДня(), не меняйте системное время сервера и возвращайте рабочую дату в автоматический режим после ввода документов задним числом.
Частые вопросы
Чем ТекущаяДата() отличается от ТекущаяДатаСеанса()?
ТекущаяДата() возвращает время того компьютера, где выполняется код — на клиенте это часы машины пользователя, которые могут быть настроены неверно. ТекущаяДатаСеанса() возвращает единое время сеанса, определяемое сервером, поэтому в клиент-серверной работе и в регламентных операциях безопаснее использовать её.
Почему новый документ создаётся вчерашним числом?
Наиболее вероятная причина — в персональных настройках пользователя зафиксирована рабочая дата. Откройте персональные настройки в разделе администрирования и переключите рабочую дату в режим «текущая дата компьютера». Если настройка в порядке, проверьте системное время на компьютере или сервере.
Как получить только дату без времени в запросе или коде?
В коде используйте НачалоДня(ТекущаяДатаСеанса()) — время обнулится до 00:00:00. В тексте запроса аналогичную роль выполняют функции НАЧАЛОПЕРИОДА(Дата, ДЕНЬ) или КОНЕЦПЕРИОДА(Дата, ДЕНЬ) для верхней границы интервала.
Можно ли программно изменить рабочую дату пользователя?
В управляемом приложении прямого глобального присваивания рабочей даты, как в обычном приложении, нет. Изменение выполняется через настройки пользователя (в типовых конфигурациях — программно через соответствующие регистры настроек или вручную в интерфейсе). Полагаться на рабочую дату в алгоритмах не рекомендуется — используйте ТекущаяДатаСеанса().
Почему при проведении документа время отличается от текущего?
Платформа автоматически сдвигает время документа, чтобы он располагался после уже существующих документов в пределах того же дня. Это штатный механизм упорядочивания последовательности документов, а не сбой. Если документ уходит на другой день — проверяйте часовой пояс сервера.
Опасно ли менять дату документа задним числом?
Сама по себе корректировка даты в документе безопасна, если период не закрыт датой запрета редактирования. Но изменение даты проведённого документа может повлиять на остатки, последовательности и отчётность за период, поэтому после такой правки стоит перепроверить связанные отчёты.