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

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

Рассмотрим детально методы получения актуальной даты, особенности их работы в разных контекстах выполнения и нюансы, о которых часто забывают даже опытные разработчики. Мы разберем встроенные функции, работу с объектами метаданных и специфику взаимодействия с сервером и клиентом.

Функция ТекущаяДата() и её особенности

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

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

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

⚠️ Внимание: При написании кода в общих модулях убедитесь, что у модуля установлен флаг "Серверный вызов", если вам необходимо получить именно серверное время. В противном случае вы рискуете получить локальное время клиента, что недопустимо для регламентных операций.

💡

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

Различия между Датой и ДатойВременем

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

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

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


// Пример получения даты и времени

ТекущееВремя = ТекущаяДата();

ТолькоДата = НачалоДня(ТекущееВремя);

ТолькоВремя = Время(ТекущееВремя);

Технические детали хранения

Тип Дата хранится как количество дней, прошедших с некоторой начальной даты, а ДатаВремя — как количество секунд. Это влияет на скорость сравнения значений в запросах.

Форматирование даты для вывода пользователю

Получение значения даты — это лишь половина задачи. Часто требуется представить эту дату пользователю в читаемом виде, соответствующем его локальным настройкам или требованиям конкретного документа. Для этих целей в 1С используется объект Формат, который позволяет гибко настраивать отображение временных меток.

Строка формата может содержать различные спецификаторы, определяющие порядок вывода дня, месяца и года, а также наличие времени. Например, формат "ДФ=dd.MM.yyyy" выведет дату в виде 25.12.2023, а "ДФ=HH:mm:ss" покажет только время. Это особенно актуально при формировании печатных форм счетов-фактур или накладных.

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

  • 📅 ДФ=dd.MM.yyyy — стандартный российский формат даты.
  • ДФ=HH:mm — отображение только часов и минут.
  • 🗓 ДФ="d MMMM yyyy" — дата с названием месяца прописью (например, 1 Января 2026).
  • ДФ=ISO — международный стандарт формата даты и времени.
📊 Какой формат даты вы чаще всего используете в отчетах?
ДД.ММ.ГГГГ
ДД-ММ-ГГ
Месяц ДД, ГГГГ
Timestamp

Получение даты в запросах 1С

При работе с данными непосредственно в языке запросов 1С используется специальный ключевое слово &ТекущаяДата или функция ТЕКУЩАЯДАТА() в тексте запроса. Это позволяет фильтровать выборки документов, созданных сегодня, или рассчитывать остатки на текущий момент без необходимости предварительного получения даты в коде модуля.

Использование встроенных функций запроса имеет преимущество в производительности, так как фильтрация происходит на стороне СУБД. Это снижает нагрузку на сервер приложений и уменьшает объем передаваемых данных. Однако синтаксис запросов имеет свои ограничения по сравнению с полноценным языком программирования.

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

Контекст выполнения Способ получения Точность Производительность
Модуль объекта Функция ТекущаяДата() До секунды Высокая
Язык запросов Ключевое слово &ТекущаяДата До секунды Максимальная
СКД (Отчеты) Поле Период До дня/секунды Средняя
Внешние обработки V8Util.CurrentDate() До секунды Высокая

Специфика работы в веб-клиенте и мобильных приложениях

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

Для решения этой проблемы платформа предоставляет механизмы конвертации времени. Можно явно указать часовой пояс при форматировании или использовать специальные функции для преобразования времени сервера в локальное время клиента. Это особенно важно для мобильных приложений, где пользователи часто находятся в движении.

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

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

☑️ Проверка временных настроек

Выполнено: 0 / 4

Типичные ошибки и способы их предотвращения

Одной из самых распространенных ошибок является попытка сравнения даты и времени без учета временной составляющей. Разработчики часто забывают, что ТекущаяДата() возвращает время, и при сравнении с датой, у которой время установлено в 00:00:00, получают ложноотрицательный результат.

Другая частая проблема связана с изменением системного времени на сервере во время работы базы. Если администратор вручную перевел часы назад, документы могут получить даты из "прошлого", что нарушает хронологию документооборота. Платформа 1С имеет механизмы защиты, но они не всегда срабатывают при резких скачках времени.

Также стоит упомянуть проблему "високосных секунд" и перехода на летнее время (в тех регионах, где это еще актуально или исторически важно). При расчете длительности процессов разница в один час может привести к ошибкам в табеле учета рабочего времени.


// ОШИБКА: Сравнение даты и даты с временем

Если ДатаДокумента = ТекущаяДата() Тогда

// Это условие может не выполниться, даже если даты совпадают,

// из-за разницы во времени суток

КонецЕсли;

// ПРАВИЛЬНО: Использование НачалоДня

Если ДатаДокумента = НачалоДня(ТекущаяДата()) Тогда

// Корректное сравнение только по дате

КонецЕсли;

💡

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

Часто задаваемые вопросы (FAQ)

Как получить текущую дату в формате строки для вывода в сообщение?

Для этого используйте функцию Формат(). Пример кода: Сообщить(Формат(ТекущаяДата(), "ДФ=dd.MM.yyyy")). Это преобразует дату в строку вида "25.12.2023".

Почему дата в отчете отличается от даты на моем компьютере?

Скорее всего, отчет формируется на сервере, время которого отличается от вашего локального. Также проверьте настройки часового пояса в профиле пользователя 1С.

Можно ли изменить текущую дату для тестирования программы?

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

Как получить дату начала текущего месяца?

Используйте функцию НачалоМесяца(ТекущаяДата()). Она автоматически определит первый день текущего месяца независимо от того, какое сегодня число.

Влияет ли смена летнего времени на работу 1С?

Современные версии платформы 1С: Предприятие 8.3 автоматически учитывают переходы времени, если операционная система сервера настроена корректно. Проблемы могут возникнуть только на очень старых версиях платформы.