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

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

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

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

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

Ключевой нюанс: встроенный язык 1С напрямую отдаёт время изменения файла, а не время его создания. Для большинства прикладных задач (поиск свежих выгрузок, контроль обменов) этого достаточно, но если нужна именно дата создания, придётся использовать дополнительные механизмы — например, Windows Script Host через COM-объект. Ниже разобраны оба подхода с готовыми примерами кода.

Почему в 1С различают время создания и время изменения

Файловая система хранит для каждого файла несколько отметок времени: создание, последнее изменение содержимого и последний доступ. Встроенный язык 1С работает только с отметкой изменения — это осознанное ограничение платформы, обеспечивающее переносимость кода между Windows и Linux.

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

Получение времени изменения через объект Файл

Стандартный способ — создать объект Файл, проверить существование файла и вызвать метод ПолучитьВремяИзменения(). Метод возвращает значение типа Дата с точностью до секунд.

bsl
ФайлНаДиске = Новый Файл("C:\Обмен\выгрузка.xml");
Если ФайлНаДиске.Существует() Тогда
    ВремяИзменения = ФайлНаДиске.ПолучитьВремяИзменения();
    Сообщить("Файл изменён: " + ВремяИзменения);
Иначе
    Сообщить("Файл не найден");
КонецЕсли;

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

Отбор файлов по времени в каталоге

Типовая задача — найти в папке файлы, изменённые за последние сутки, или выбрать самый свежий файл выгрузки. Для этого используют НайтиФайлы() и перебор результата.

bsl
МассивФайлов = НайтиФайлы("C:\Обмен\", "*.xml");
Граница = ТекущаяДатаСеанса() - 86400; // сутки назад
Для Каждого НайденныйФайл Из МассивФайлов Цикл
    Если НайденныйФайл.ПолучитьВремяИзменения() >= Граница Тогда
        Сообщить("Свежий файл: " + НайденныйФайл.Имя);
    КонецЕсли;
КонецЦикла;

Метод НайтиФайлы возвращает массив объектов Файл, поэтому дополнительно создавать объекты не нужно — у найденных элементов сразу доступны все атрибуты, включая время изменения, размер и признак каталога.

Получение именно времени создания через COM-объект

Если требуется дата создания файла, на Windows-сервере или клиенте можно использовать COM-объект Scripting.FileSystemObject. Его метод GetFile возвращает объект файла со свойствами DateCreated (дата создания), DateLastModified (изменение) и DateLastAccessed (доступ).

bsl
Попытка
    FSO = Новый COMОбъект("Scripting.FileSystemObject");
    ФайлCOM = FSO.GetFile("C:\Обмен\выгрузка.xml");
    ДатаСоздания = ФайлCOM.DateCreated;
    Сообщить("Создан: " + ДатаСоздания);
Исключение
    Сообщить("Не удалось получить дату создания: " + ОписаниеОшибки());
КонецПопытки;

Значение DateCreated приходит как COM-дата; в большинстве случаев 1С корректно преобразует её в тип Дата автоматически. Если возникают ошибки приведения типов, преобразуйте значение в строку и разберите её функцией Дата() или обработайте как строку.

Особенности работы на клиенте и сервере

Объект Файл и НайтиФайлы работают и в тонком клиенте, и на сервере, но путь интерпретируется относительно той машины, где выполняется код. Если обработка выполняется на сервере, путь C:\Обмен\ — это диск сервера, а не компьютера пользователя. Это одна из самых частых причин «файл не найден» в клиент-серверном режиме.

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

Проверка результата и типичные ошибки

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

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

Сравните полученное время со свойствами файла в проводнике Windows
Норма

Значения совпадают с точностью до секунд

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

Время отличается на целые часы — вероятно, проблема часовых поясов

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

Путь указывает на файловую систему машины, где выполняется код

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

Серверный код ищет файл на диске клиента — файл «не найден»

Убедитесь, что проверяете нужную отметку
Норма

Для свежести выгрузки используется время изменения

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

Ожидалась дата создания, а читается время изменения

Типичные ошибки
01
Вызов ПолучитьВремяИзменения() без проверки Существует() — при отсутствии файла код падает с ошибкой
02
Ожидание даты создания от встроенных методов — платформа возвращает только время изменения
03
Использование COM-объекта в кроссплатформенном решении — на Linux код не работает
04
Сравнение времени файла с клиентской датой при разных часовых поясах — смещение результатов отбора
05
Проверка файла на клиенте, когда код выполняется на сервере — путь указывает не на ту машину

Альтернативные подходы

Если встроенных средств недостаточно, а COM недоступен, рассмотрите обходные варианты. Самый надёжный — включать дату и время формирования в имя файла при выгрузке (например, orders_20260115_143000.xml) и разбирать имя строковыми функциями. Это полностью переносимо и не зависит от атрибутов файловой системы, которые могут сбрасываться при копировании по сети.

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

Маршрут решения

Как выбрать способ

Нужно отобрать свежие файлы выгрузки или проверить актуальностьИспользуйте объект Файл и ПолучитьВремяИзменения() — этого достаточно
Нужна именно дата создания на Windows-клиенте или сервереПримените COM-объект Scripting.FileSystemObject со свойством DateCreated
Решение должно работать на Linux и в веб-клиентеХраните дату в имени файла или в регистре сведений, COM не используйте
Файл приходит от внешней системы без контроля над именемФиксируйте момент получения файла в журнале обмена при его обнаружении

Частые вопросы

Можно ли получить время создания файла штатными средствами 1С без COM?

Нет. Встроенный язык платформы предоставляет только время изменения через метод ПолучитьВремяИзменения(). Дата создания и дата последнего доступа штатными объектами не читаются — только через COM на Windows или внешние утилиты.

Почему ПолучитьВремяИзменения() возвращает пустую дату?

Чаще всего файл не существует по указанному пути или у учётной записи, под которой работает сервер 1С, нет доступа к каталогу. Проверьте путь, результат метода Существует() и права учётной записи службы агента сервера.

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

Штатных средств нет. Практичные варианты — кодировать дату в имени файла при формировании выгрузки или фиксировать момент появления файла в регистре сведений при его обработке. Вызов внешних команд ОС возможен, но делает решение зависимым от окружения.

Сохраняется ли время создания при копировании файла?

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

Работает ли объект Файл в веб-клиенте?

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

Итог

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

Стандартный способ — объект Файл и метод ПолучитьВремяИзменения(): он возвращает время изменения, а не создания. Именно дату создания на Windows даёт COM-объект Scripting.FileSystemObject, но он не переносим на Linux и веб-клиент. Для кроссплатформенных решений храните дату в имени файла или в регистре, всегда проверяйте существование файла и учитывайте, на какой машине выполняется код.