Разработка и Конфигурация · 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С, не имеет доступа к сетевому каталогу, хотя у пользователя доступ есть.
Ещё одна ошибка — неэкранированные обратные слэши в путях при передаче пути из внешних источников и использование относительных путей. Относительный путь на сервере разрешается относительно рабочего каталога серверного процесса, что почти никогда не совпадает с ожиданиями. Всегда используйте полные абсолютные пути.
Проверка прав и безопасный режим
Если код выполняется во внешней обработке, открытой в режиме безопасного режима, операции с файловой системой могут быть запрещены. Признак — ошибка вида «операция не разрешена в безопасном режиме». Решение — отключить безопасный режим для доверенной обработки или встроить функциональность в конфигурацию.
На сервере Linux учитывайте регистр имён файлов: Flag.txt и flag.txt — разные файлы. Также проверяйте права учётной записи сервера 1С на целевой каталог: права выдаются администратором сервера, а не изнутри 1С.
- 1Определите, где должен появиться файл: на клиенте или на сервере
- 2Выберите способ: ТекстовыйДокумент, ЗаписьТекста или пустые двоичные данные
- 3Проверьте и при необходимости создайте целевой каталог
- 4Выполните запись внутри конструкции Попытка...Исключение
- 5Проверьте результат через Файл.Существует() и размер файла
FAQ
Как создать файл строго нулевого размера?
Запишите пустые двоичные данные: создайте буфер из пустой строки, преобразуйте в двоичные данные и вызовите метод Записать(). Текстовые методы могут добавить BOM, поэтому для строгого нуля подходят только двоичные данные.
Почему файл создаётся, но пользователь его не видит?
Скорее всего, код выполняется на сервере, а файл ищут на клиентском компьютере. Это разные файловые системы. Либо перенесите создание файла на клиента, либо передайте содержимое клиенту через временное хранилище.
Можно ли создать файл на веб-клиенте?
Да, но только через расширение работы с файлами и асинхронные методы с описанием оповещения. Синхронная запись в произвольный путь на веб-клиенте недоступна из соображений безопасности браузера.
Что делать, если запись падает с ошибкой доступа?
Проверьте права учётной записи, под которой выполняется код: для сервера это учётная запись службы агента сервера 1С, а не пользователь сеанса. Также убедитесь, что каталог существует и файл не открыт другим процессом.
Как создать файл во временном каталоге?
Используйте функцию ПолучитьИмяВременногоФайла() — она возвращает уникальное имя во временном каталоге. Затем запишите файл по этому пути любым из описанных способов. После использования временные файлы желательно удалять.
Нужно ли удалять файл-флаг после использования?
Да, если маркер одноразовый: оставленный флаг может быть ошибочно принят за сигнал при следующем запуске обмена. Удаление выполняется методом УдалитьФайлы() или УдалитьФайл() в конце обработки.
Что важно запомнить
Пустой файл в 1С создаётся записью пустого содержимого через ТекстовыйДокумент, ЗаписьТекста или двоичные данные. Выбирайте сторону выполнения (клиент или сервер) осознанно, используйте абсолютные пути, обрабатывайте ошибки и проверяйте результат через Файл.Существует().