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

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

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

Стандартные свойства даты в объектах метаданных

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

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

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

💡

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

Доступ к дате осуществляется через точку после имени переменной, содержащей ссылку на документ. Это стандартный синтаксис встроенного языка, который работает одинаково для всех объектов справочников и документов.

Получение даты документа в коде 1С

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

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


// Получаем ссылку на документ (например, из формы)

ДокументСсылка = Объект.Ссылка;

// Читаем дату

ДатаДокумента = ДокументСсылка.Дата;

// Выводим значение

Сообщить("Дата документа: " + ДатаДокумента);

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

☑️ Проверка даты в коде

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

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

Работа с датой в запросах к базе данных

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

В тексте запроса поле даты обычно обозначается как Ссылка.Дата или просто Дата, если используется псевдоним таблицы.


ВЫБРАТЬ

РеализацияТоваровУслуг.Ссылка КАК Ссылка,

РеализацияТоваровУслуг.Дата КАК ДатаДокумента,

РеализацияТоваровУслуг.Номер КАК НомерДокумента

ИЗ

Документ.РеализацияТоваровУслуг КАК РеализацияТоваровУслуг

ГДЕ

РеализацияТоваровУслуг.Дата МЕЖДУ &НачалоПериода И &КонецПериода

Использование параметров &НачалоПериода и &КонецПериода позволяет гибко фильтровать данные. Однако, если вы передадите в параметр дату без времени (например, только день), запрос может не найти документы, созданные в этот день после 00:00:00.

Лайфхак с временем в запросах

Чтобы захватить весь день, устанавливайте конец периода на 23:59:59 или используйте функцию НачалоДня(КонецПериода) + 1, исключая границу.

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

Особенности временной части и сравнение дат

Самая распространенная ошибка при работе с датами — игнорирование временной составляющей. Тип Дата в 1С всегда хранит и число, и время. Даже если в интерфейсе пользователю отображается только "15.10.2023", внутри системы это может быть "15.10.2023 14:35:10".

При прямом сравнении двух дат на равенство, разница даже в одну секунду приведет к тому, что условие вернет Ложь. Это критично при поиске дубликатов или сверке данных между разными базами.

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

  • 📅 НачалоДня(Дата) — возвращает дату на начало указанного дня.
  • 📅 КонецДня(Дата) — возвращает дату на конец указанного дня (23:59:59).
  • 📅 Год(Дата), Месяц(Дата), День(Дата) — извлекают отдельные компоненты.

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

💡

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

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

Поиск документов по дате в интерфейсе пользователя

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

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

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

Действие пользователя Где смотреть дату Точность отображения
Список документов Колонка "Дата" До дня (обычно)
Карточка документа Шапка формы До минуты/секунды
Отчеты (Анализ счета) Табличная часть Зависит от настройки
Журнал регистрации Служебная колонка Полная (до секунды)

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

📊 Как часто вы сталкиваетесь с ошибками из-за времени в датах?
Ежедневно
Раз в неделю
Редко
Никогда не замечал

Частые ошибки и способы их устранения

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

Одной из главных проблем является "потеря" документов при переходе через полночь. Если скрипт запускается в 23:59 и выбирает данные за "сегодня", а документ создается в 00:01 следующего дня, он не попадет в выборку, хотя по логике бизнеса относится к тому же рабочему дню.

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

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


Если ДатаДокумента = Неопределено Тогда

Сообщить("Дата не установлена!");

Иначе

// Безопасная работа с датой

ДеньМесяца = День(ДатаДокумента);

КонецЕсли;

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

Проблема високосных лет

Функции 1С автоматически учитывают високосные годы. Добавление 1 года к 29.02.2026 вернет 28.02.2026, что является корректным поведением системы.

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

FAQ: Часто задаваемые вопросы по датам в 1С

Как получить только число (день) из даты документа?

Для этого используйте встроенную функцию День(Дата). Она вернет целое число от 1 до 31. Аналогично работают функции Месяц(Дата) и Год(Дата).

Почему документ не находится поиском по дате, хотя я вижу его в списке?

Скорее всего, проблема во временной части. Вы ищете дату "01.10.2023 00:00:00", а документ записан как "01.10.2023 15:30:00". Используйте функцию НачалоДня() для приведения к общему знаменателю.

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

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

Как перевести дату в строку для выгрузки в файл?

Используйте функцию Строка(Дата) или форматирование через Формат(Дата, "ДФ=dd.MM.yyyy") для получения нужного вида строкового представления.

Где хранится дата изменения документа?

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