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