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

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

Как создать пустой файл в 1С

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

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

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

Зачем нужен пустой файл и когда это оправдано

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

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

Создание пустого файла через ТекстовыйДокумент

Самый очевидный способ — объект ТекстовыйДокумент. Если записать его на диск, не добавляя ни одной строки, получится пустой (или почти пустой) текстовый файл:

Документ = Новый ТекстовыйДокумент;

Документ.Записать("C:\Обмен\flag.txt");

Учтите нюанс: в зависимости от настроек кодировки метод Записать() может добавить в начало файла BOM — служебную метку порядка байтов. Формально файл уже не «нулевого размера», хотя для пользователя он пуст. Если требуется строго нулевая длина, этот способ не подойдёт — используйте вариант с ЗаписьТекста или запись пустых двоичных данных.

По умолчанию используется кодировка UTF-8. Если нужна другая, передайте её вторым параметром: Документ.Записать(Путь, КодировкаТекста.ANSI). Для файла-флага кодировка значения не имеет, но для последующего чтения другой системой — имеет.

Создание файла через ЗаписьТекста и ДвоичныеДанные

Объект ЗаписьТекста создаёт файл уже при открытии. Если открыть его и сразу закрыть, не записав ничего, получится пустой файл:

Запись = Новый ЗаписьТекста("C:\Обмен\flag.txt");

Запись.Закрыть();

Если нужен файл строго нулевого размера без BOM, надёжнее записать пустые двоичные данные. Для этого можно создать пустой буфер и сохранить его:

Буфер = ПолучитьБуферДвоичныхДанныхИзСтроки("");

Данные = ПолучитьДвоичныеДанныеИзБуфераДвоичныхДанных(Буфер);

Данные.Записать("C:\Обмен\flag.bin");

Такой подход гарантирует, что в файле не окажется служебных байтов. Это важно, если внешняя система проверяет размер файла или его хеш.

Сравнение способов

ТекстовыйДокумент.Записать()

Простой и читаемый код, но может добавить BOM. Подходит для файлов-флагов и заготовок текстовых выгрузок.

ЗаписьТекста без записи

Файл создаётся при открытии. Минимум кода, но поведение с BOM зависит от параметров конструктора.

Пустые двоичные данные

Гарантированно нулевой размер без служебных байтов. Чуть больше кода, подходит для строгих проверок размера.

Где выполнять код: клиент или сервер

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

Для серверного создания файла вынесите логику в серверную процедуру общего модуля с признаками «Сервер» и, при необходимости, «Вызов сервера». В файловом варианте базы разницы между клиентом и сервером нет — всё выполняется на одной машине.

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

Проверка результата и обработка ошибок

После записи стоит убедиться, что файл действительно появился. Для этого используется объект Файл и метод Существует():

Файл = Новый Файл("C:\Обмен\flag.txt");

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

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

Иначе

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

КонецЕсли;

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

Попытка

Документ = Новый ТекстовыйДокумент;

Документ.Записать(Путь);

Исключение

Сообщить("Ошибка создания файла: " + ОписаниеОшибки());

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

Отдельно проверяйте существование каталога: метод Записать() не создаёт промежуточные папки автоматически. Если каталога нет, сначала вызовите СоздатьКаталог().

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

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

Наличие файла
Норма

Файл.Существует() возвращает Истина

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

Метод возвращает Ложь — проверьте путь и сторону выполнения кода

Размер файла
Норма

Размер соответствует ожиданию (0 или несколько байт BOM)

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

Размер неожиданно большой — возможно, записалось лишнее содержимое

Видимость пользователю
Норма

Файл виден в ожидаемом каталоге

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

Файл создан на сервере, а искали на клиенте

Типичные ошибки при создании пустого файла

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

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

Типичные ошибки
01
Искать файл на клиенте, хотя он создан на сервере — файл «пропадает»
02
Использовать относительный путь — файл создаётся в неожиданном каталоге
03
Не обрабатывать исключения — обмен молча завершается без файла-флага
04
Не учитывать BOM — внешняя система отклоняет файл из-за служебных байтов
05
Перезаписывать существующий файл без проверки — теряется чужой маркер

Проверка прав и безопасный режим

Если код выполняется во внешней обработке, открытой в режиме безопасного режима, операции с файловой системой могут быть запрещены. Признак — ошибка вида «операция не разрешена в безопасном режиме». Решение — отключить безопасный режим для доверенной обработки или встроить функциональность в конфигурацию.

На сервере Linux учитывайте регистр имён файлов: Flag.txt и flag.txt — разные файлы. Также проверяйте права учётной записи сервера 1С на целевой каталог: права выдаются администратором сервера, а не изнутри 1С.

Порядок действий
  1. 1
    Определите, где должен появиться файл: на клиенте или на сервере
  2. 2
    Выберите способ: ТекстовыйДокумент, ЗаписьТекста или пустые двоичные данные
  3. 3
    Проверьте и при необходимости создайте целевой каталог
  4. 4
    Выполните запись внутри конструкции Попытка...Исключение
  5. 5
    Проверьте результат через Файл.Существует() и размер файла

FAQ

Как создать файл строго нулевого размера?

Запишите пустые двоичные данные: создайте буфер из пустой строки, преобразуйте в двоичные данные и вызовите метод Записать(). Текстовые методы могут добавить BOM, поэтому для строгого нуля подходят только двоичные данные.

Почему файл создаётся, но пользователь его не видит?

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

Можно ли создать файл на веб-клиенте?

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

Что делать, если запись падает с ошибкой доступа?

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

Как создать файл во временном каталоге?

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

Нужно ли удалять файл-флаг после использования?

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

Итог

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

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