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

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

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

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

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

Все операции с файлами в 1С выполняются программно — через встроенный язык. Пользователь в режиме «Предприятие» обычно сталкивается с созданием файла косвенно: при нажатии кнопки «Сохранить», «Выгрузить» или «Отправить» в типовых конфигурациях. Но понимание механизма полезно и администраторам, и бухгалтерам, которые настраивают обмены данными.

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

Какие объекты 1С используют для создания файлов

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

Основные объекты для работы с файлами:

  • ТекстовыйДокумент — чтение и запись текстовых файлов целиком, удобен для небольших файлов;
  • ЗаписьТекста — потоковая запись текста, подходит для больших файлов и построчного формирования;
  • ЗаписьXML — формирование XML-файлов с контролем структуры тегов;
  • ТабличныйДокумент — создание файлов в форматах MXL, XLS, XLSX, PDF, HTML;
  • ЗаписьДанных / ДвоичныеДанные — работа с произвольными бинарными файлами;
  • Файл — объект для проверки существования, атрибутов и операций с файловой системой.

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

Самый простой способ создать текстовый файл — объект ТекстовыйДокумент. Он загружает всё содержимое в память, поэтому подходит для файлов небольшого и среднего размера: выгрузок для банка, пакетных файлов, простых обменных форматов.

Типовой код выглядит так:

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

Текст.ДобавитьСтроку("1CClientBankExchange");

Текст.ДобавитьСтроку("ВерсияФормата=1.03");

Текст.ДобавитьСтроку("Отправитель=Бухгалтерия предприятия");

Текст.Записать("C:\Выгрузки\kl_to_1c.txt", КодировкаТекста.ANSI);

Метод Записать принимает путь к файлу и кодировку. Если кодировку не указать, будет использована кодировка по умолчанию, что часто приводит к нечитаемым символам при открытии файла в другой программе. Для банковских выгрузок обычно требуется ANSI (Windows-1251), для обмена с веб-сервисами — UTF-8.

bsl
Текст = Новый ТекстовыйДокумент;
Текст.ДобавитьСтроку("Строка данных");
Текст.Записать("C:\Temp\export.txt", КодировкаТекста.UTF8);

Потоковая запись больших файлов через ЗаписьТекста

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

Запись = Новый ЗаписьТекста("C:\Выгрузки\catalog.csv", КодировкаТекста.UTF8);

Пока Выборка.Следующий() Цикл

Строка = Выборка.Артикул + ";" + Выборка.Наименование + ";" + Формат(Выборка.Цена, "ЧГ=");

Запись.ЗаписатьСтроку(Строка);

КонецЦикла;

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

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

Создание XML-файла через ЗаписьXML

XML — стандартный формат обмена данными с государственными сервисами, ЭДО и внешними системами. Формировать XML конкатенацией строк — плохая практика: легко нарушить экранирование спецсимволов и структуру документа. Объект ЗаписьXML делает это корректно автоматически.

Запись = Новый ЗаписьXML;

Запись.ОткрытьФайл("C:\Выгрузки\doc.xml");

Запись.ЗаписатьОбъявлениеXML();

Запись.ЗаписатьНачалоЭлемента("Документ");

Запись.ЗаписатьАтрибут("Номер", "0001");

Запись.ЗаписатьНачалоЭлемента("Сумма");

Запись.ЗаписатьТекст("1500.00");

Запись.ЗаписатьКонецЭлемента();

Запись.ЗаписатьКонецЭлемента();

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

ЗаписьXML контролирует парность тегов и экранирует символы вроде <, >, & в тексте и атрибутах. Если пропустить ЗаписатьКонецЭлемента, при вызове Закрыть платформа сама закроет незакрытые элементы, но лучше контролировать структуру явно — так проще отлаживать.

Сохранение табличного документа в Excel, PDF и другие форматы

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

  • ТипФайлаТабличногоДокумента.XLSX — Excel;
  • ТипФайлаТабличногоДокумента.PDF — PDF-документ;
  • ТипФайлаТабличногоДокумента.MXL — внутренний формат 1С;
  • ТипФайлаТабличногоДокумента.HTML5 — веб-страница;
  • ТипФайлаТабличногоДокумента.ODS — OpenDocument.
ТабДок = Новый ТабличныйДокумент;

// ... заполнение табличного документа ...

ТабДок.Записать("C:\Выгрузки\отчет.xlsx", ТипФайлаТабличногоДокумента.XLSX);

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

Создание файла на тонком и веб-клиенте

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

Упрощённая последовательность:

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

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

Порядок действий
  1. 1
    Определите тип файла: текст, XML, табличный документ или двоичные данные
  2. 2
    Выберите объект платформы: ТекстовыйДокумент, ЗаписьТекста, ЗаписьXML или ТабличныйДокумент
  3. 3
    Укажите явную кодировку для текстовых файлов (UTF-8 или ANSI)
  4. 4
    Сформируйте содержимое и вызовите метод записи с полным путём
  5. 5
    На тонком клиенте перенесите запись в серверную процедуру и передайте файл через временное хранилище
  6. 6
    Проверьте результат: откройте созданный файл в целевой программе

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

После записи файла убедитесь, что он действительно создан и читается. Минимальная проверка — объект Файл: существует ли файл, каков его размер. Нулевой размер после записи обычно означает, что данные не были записаны или буфер не сброшен из-за отсутствия Закрыть.

ФайлНаДиске = Новый Файл("C:\Выгрузки\export.txt");

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

Сообщить("Файл создан, размер: " + ФайлНаДиске.Размер() + " байт");

Иначе

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

КонецЕсли;

Типичные ошибки
01
Не указана кодировка — кириллица превращается в нечитаемые символы при открытии файла в сторонней программе
02
Забыт вызов Закрыть у ЗаписьТекста или ЗаписьXML — файл пустой, обрезанный или заблокирован другими процессами
03
Запись в несуществующий каталог — возникает исключение; каталог нужно создать заранее через СоздатьКаталог
04
Использование синхронных методов файловой системы на тонком клиенте — ошибка модальности в современных версиях платформы
05
Формирование XML конкатенацией строк вместо ЗаписьXML — битая структура при спецсимволах в данных

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

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

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

Существование и размер файла
Норма

Файл существует, размер больше нуля

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

Файл отсутствует или размер 0 байт — запись не выполнена

Открытие в целевой программе
Норма

Файл открывается, кириллица и структура корректны

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

Крякозябры или ошибка формата — неверная кодировка или повреждённая структура

Доступность файла другим процессам
Норма

Файл можно открыть, скопировать, удалить

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

Файл заблокирован — не вызван метод Закрыть

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

Как создать файл, если каталог назначения ещё не существует?

Перед записью создайте каталог методом СоздатьКаталог("путь"). Он создаёт всю цепочку вложенных папок и не вызывает ошибку, если каталог уже есть. Удобно обернуть создание каталога и запись файла в одну попытку с обработкой исключения.

Какую кодировку выбрать для текстового файла из 1С?

Для обмена с веб-сервисами и современными системами — UTF-8. Для старых банк-клиентов и программ, ожидающих однобайтовую кодировку, — ANSI (Windows-1251). Если целевая система неизвестна, UTF-8 с BOM — наиболее совместимый вариант: Блокнот и Excel корректно распознают такой файл.

Можно ли создать файл Excel без установленного Microsoft Office?

Да. Метод Записать табличного документа с типом XLSX формирует файл средствами платформы и не требует установленного Office ни на сервере, ни на клиенте. Это стандартный способ для фоновых и серверных выгрузок.

Почему файл создаётся пустым, хотя код выполняется без ошибок?

Чаще всего не вызван метод Закрыть у ЗаписьТекста или ЗаписьXML — данные остались в буфере. Реже причина в том, что выборка данных пуста (запрос ничего не вернул) или запись идёт в другой каталог, чем тот, который проверяется.

Как дать пользователю самому выбрать, куда сохранить файл?

Используйте ДиалогВыбораФайла с режимом РежимДиалогаВыбораФайла.Сохранение. В современных версиях платформы вызов должен быть асинхронным — через метод Показать с описанием оповещения, в которое передаётся выбранный путь.

Чем отличается ТекстовыйДокумент от ЗаписьТекста?

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

Итог

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

Тип файла определяет объект платформы: ТекстовыйДокумент и ЗаписьТекста для текста, ЗаписьXML для XML, ТабличныйДокумент для Excel и PDF. Всегда указывайте кодировку, закрывайте потоки записи, проверяйте существование каталога и помните, что на тонком клиенте файл формируется на сервере и передаётся пользователю через хранилище.