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