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

Разработка и Конфигурация · 10 мин

Как получить дату документа в 1С

Как получить дату документа в 1С: через свойство Дата в коде 8.3, в запросе, на форме и в СКД. Примеры кода, типичные ошибки и проверка результата.

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

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

Что представляет собой дата документа в 1С

У каждого документа в 1С есть стандартный реквизит Дата — системное поле, которое нельзя удалить или переименовать. Тип значения — «Дата» с составом «Дата и время», поэтому внутри хранится не только календарный день, но и время с точностью до секунды.

Дата участвует в позиционировании документа: сортировка в журналах, порядок проведения, расчёт итогов регистров накопления и бухгалтерии выполняются именно по дате. Если документ проводится «задним числом», платформа автоматически сдвигает границу последовательности, и итоги могут потребовать пересчёта.

Новый незаписанный документ по умолчанию получает текущую дату сеанса. Это поведение можно изменить в конфигураторе через свойство документа «Установка даты» (автоматически, не устанавливать) или программно в обработчике ПриСозданииНаСервере.

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

Самый частый случай — дата нужна в модуле объекта, модуле формы или внешней обработке. Если у вас есть объект документа (например, в обработчике ОбработкаПроведения), дата доступна напрямую:

Процедура ОбработкаПроведения(Отказ, РежимПроведения)

ДатаДокумента = ЭтотОбъект.Дата;

Сообщить("Документ датирован: " + Формат(ДатаДокумента, "ДЛФ=D"));

КонецПроцедуры

Если есть только ссылка на документ, дату можно получить через точку — платформа сама выполнит обращение к базе:

ДатаДокумента = ДокументСсылка.Дата; // ДокументСсылка — тип ДокументСсылка.РеализацияТоваровУслуг

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

Получение даты без времени

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

ТолькоДата = НачалоДня(ДокументСсылка.Дата); // время обнуляется до 00:00:00

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

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

Запрос = Новый Запрос;

Запрос.Текст =

"ВЫБРАТЬ

| Реализация.Ссылка КАК Ссылка,

| Реализация.Дата КАК ДатаДокумента

|ИЗ

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

|ГДЕ

| Реализация.Дата МЕЖДУ &НачалоПериода И &КонецПериода";

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

bsl
Запрос.УстановитьПараметр("НачалоПериода", НачалоДня(ДатаНачала));
Запрос.УстановитьПараметр("КонецПериода", КонецДня(ДатаОкончания));

Как получить дату документа на форме

В управляемой форме документа объект доступен через основной реквизит формы (обычно Объект). Код на клиенте или на сервере выглядит так:

&НаКлиенте

Процедура ПоказатьДату(Команда)

ДатаДокумента = Объект.Дата;

ПоказатьПредупреждение(, "Дата документа: " + Формат(ДатаДокумента, "ДЛФ=DT"));

КонецПроцедуры

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

Для формата вывода используйте функцию Формат(): ДЛФ=D — только дата, ДЛФ=DT — дата и время, ДФ="дд.ММ.гггг" — произвольный шаблон. Это удобно, когда дату нужно показать пользователю в привычном виде.

Как получить дату документа в СКД и отчётах

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

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

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

Как узнать дату документа без программирования

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

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

Как узнать дату документа в пользовательском режиме
  1. 1
    Откройте журнал нужного вида документов
  2. 2
    Найдите документ по номеру или отбору
  3. 3
    Посмотрите колонку «Дата» в списке или откройте документ — дата в шапке рядом с номером
  4. 4
    Если колонки нет — добавьте её через «Ещё → Изменить форму»

Типичные ошибки при работе с датой документа

Чаще всего проблемы возникают не с самим получением даты, а с контекстом и типами данных. Разберём типовые ситуации.

Сравнение даты со строкой. Конструкция Если Объект.Дата = "01.01.2026" не сработает — дату нужно сравнивать с датой: Если Объект.Дата = Дата(2026, 1, 1) Тогда. Строковые литералы платформа не преобразует автоматически.

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

Игнорирование времени. Два документа в один день, но в разное время имеют разные значения даты. Сравнение на равенство без приведения к началу дня может дать ложное «не равно».

Типичные ошибки
01
Сравнение даты со строкой — сравнение всегда ложно, используйте Дата(год, месяц, день)
02
Обращение Ссылка.Дата в цикле по тысячам документов — резкое падение производительности, замените запросом
03
Отбор по периоду без КонецДня — документы последнего дня не попадают в выборку
04
Попытка вызвать ПолучитьОбъект() на клиенте — ошибка исполнения, переносите в серверную процедуру

Как проверить, что дата получена правильно

После написания кода проверьте результат на контрольном примере. Создайте тестовый документ с известной датой, выполните код и сопоставьте выведенное значение с датой в карточке документа.

Для запросов удобна консоль запросов (внешняя обработка): выполните запрос с теми же параметрами и сверьте колонку «Дата» с журналом документов. Если в выборке пусто, хотя документы за период есть, почти наверняка проблема в границах периода или в том, что документы не проведены (а в запросе стоит отбор по Проведен = Истина).

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

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

Выведенная дата
Норма

Совпадает с датой в карточке документа

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

Пустая дата 01.01.0001 или другой день

Выборка запроса
Норма

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

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

Пропали документы последнего дня — проверьте КонецДня

Формат вывода
Норма

Дата в привычном виде дд.мм.гггг

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

Выводится в формате по умолчанию с лишним временем

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

Как получить дату документа, если есть только его номер?

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

Почему дата документа выводится с временем 00:00:00?

Документ, созданный копированием или с отключённым временем, может иметь нулевое время. На отображение влияет формат: укажите Формат(Дата, "ДЛФ=D"), чтобы показать только дату, либо измените свойство «Формат» у поля формы.

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

Используйте запрос с упорядочиванием: выберите Дата и Ссылку из таблицы документа с отбором Проведен = Истина и периодом, отсортируйте по убыванию даты и возьмите первую строку (конструкция ПЕРВЫЕ 1 в запросе).

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

Можно: получите объект через Ссылка.ПолучитьОбъект(), присвойте новое значение свойству Дата и запишите с режимом проведения. Учтите риски: перенос проведённого документа на другую дату сдвигает последовательности и может потребовать перепроведения зависимых документов и восстановления итогов.

Чем отличается Дата документа от даты записи в базу?

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

Как сравнить даты двух документов без учёта времени?

Приведите обе даты к началу дня: НачалоДня(Дата1) = НачалоДня(Дата2). В запросе для той же цели используйте выражения НАЧАЛОПЕРИОДА(Дата, ДЕНЬ) в условии сравнения.

Итог

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

Дата документа — стандартный реквизит, доступный через свойство Дата у объекта или ссылки, поле Дата в запросе и СКД, либо визуально в журнале и карточке документа. Для массовых выборок применяйте запрос, при отборах по периоду не забывайте про КонецДня, а перед использованием проверяйте, что дата заполнена.