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

В отличие от стандартных операций чтения и записи, получение атрибута даты создания имеет свои технические особенности, зависящие от используемого объекта файловой системы. Платформа предоставляет несколько способов извлечения этих данных: через объект Файл, через работу с хранилищем файлов или посредством COM-соединения. Выбор конкретного метода зависит от версии платформы и архитектуры приложения.

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

Объект Файл и его свойства времени

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

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

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

💡

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

Пример получения времени в коде выглядит следующим образом:

ПутьКФайлу = "C:\Documents\Report.xml";

ФайлОбъект = Новый Файл(ПутьКФайлу);

Если ФайлОбъект.Существует() Тогда

ВремяСоздания = ФайлОбъект.ДатаСоздания;

Сообщить("Файл создан: " + ВремяСоздания);

Иначе

Сообщить("Файл не найден");

КонецЕсли;

Работа с хранилищем файлов и СсылкаНаФайл

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

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

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

  • 📂 Объект Файл работает только с локальной или сетевой файловой системой, доступной ОС.
  • 💾 СсылкаНаФайл извлекает метаданные из внутреннего хранилища платформы 1С.
  • ☁️ При работе с облаками время создания часто передается отдельным параметром API.
📊 Где вы чаще всего храните файлы в 1С?
В файловой системе сервера
В хранилище базы данных
В облачном сервисе (Яндекс.Диск, Google Drive)
В прикрепленных файлах документов

Нюансы работы с сетевыми ресурсами и правами доступа

Получение времени создания файла на сетевом ресурсе (UNC-путь) может столкнуться с проблемами прав доступа. Пользователь, от имени которого работает сервис 1С или клиентское приложение, должен иметь права на чтение атрибутов файла в операционной системе. Ошибка доступа приведет к тому, что свойство ДатаСоздания вернет неопределенное значение или вызовет исключение.

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

⚠️ Внимание: При работе с сетевыми путями всегда оборачивайте обращение к свойствам файла в конструкцию Попытка..Исключение. Это предотвратит падение процесса обработки при недоступности ресурса.

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

💡

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

Использование COM-объекта FileSystemObject

В устаревших конфигурациях или в специфических сценариях, где встроенные средства 1С недостаточны, разработчики могут прибегать к использованию COM-объекта Scripting.FileSystemObject. Этот подход позволяет получать расширенную информацию о файлах, доступную в среде Windows, но имеет ряд ограничений.

Объект FileSystemObject предоставляет метод GetFile, который возвращает объект файла с набором свойств. Среди них есть DateCreated, который соответствует времени создания. Однако использование COM-объектов требует наличия соответствующих библиотек на машине клиента или сервера и работает только в толстом клиенте или сервере 1С под управлением Windows.

Пример кода с использованием COM выглядит так:

Попытка

FS = Новый COMОбъект("Scripting.FileSystemObject");

ФайлCOM = FS.GetFile("C:\Data\archive.zip");

ДатаСозданияCOM = ФайлCOM.DateCreated;

Сообщить("COM Время: " + ДатаСозданияCOM);

Исключение

Сообщить("Ошибка работы с COM: " + ОписаниеОшибки());

КонецПопытки;

Данный метод считается менее предпочтительным из-за зависимости от внешней компоненты и проблем с кроссплатформенностью. Платформа 1С:Предприятие 8.3 и выше полностью покрывает потребности работы с файлами через нативный объект Файл.

Почему COM может работать медленнее?

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

Сравнение методов получения даты создания

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

Метод Кроссплатформенность Точность данных Требования к правам
Объект Файл Высокая (Win, Lin, Mac) Зависит от ФС Чтение атрибутов
СсылкаНаФайл Полная Время загрузки в 1С Доступ к базе
COM FileSystemObject Только Windows Высокая (NTFS) Доступ к COM
HTTP-запросы (API) Полная Зависит от провайдера Токен доступа

Как видно из таблицы, для большинства задач оптимальным выбором является нативный объект Файл. Он обеспечивает баланс между функциональностью и переносимостью кода. Использование COM-объектов оправдано лишь в редких случаях легаси-систем или при необходимости доступа к специфическим атрибутам NTFS, не доступным через стандартный API 1С.

Обработка временных зон и форматов

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

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

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

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

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

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

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

Почему свойство ДатаСоздания возвращает дату изменения при копировании файла?

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

Можно ли получить время создания файла, находящегося в архиве ZIP?

Нет, объект Файл в 1С работает только с развернутыми файлами на диске. Чтобы получить время создания файла внутри архива, необходимо сначала извлечь его во временную директорию, считать атрибуты, а затем удалить. Либо использовать сторонние библиотеки для работы с архивами, которые могут читать метаданные заголовков архива.

Как получить время создания файла в Linux-сервере 1С?

Механизм работы объекта Файл в Linux аналогичен Windows. Свойство ДатаСоздания доступно, если файловая система (например, ext4) поддерживает хранение этого атрибута (birth time). В некоторых старых ФС время создания может не фиксироваться, тогда будет возвращено время последнего изменения или нулевая дата.

Влияет ли права пользователя 1С на чтение даты создания?

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

Можно ли изменить время создания файла средствами 1С?

Встроенными средствами объекта Файл изменить время создания нельзя, доступно только чтение. Для изменения времени создания (например, для восстановления атрибутов после копирования) потребуется использование внешних компонентов, COM-объектов или вызов системных утилит через ЗапуститьПриложение.