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

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

Мы рассмотрим оба сценария подробно. Особое внимание уделим кодировкам, так как именно несовпадение кодировок (например, Windows-1251 и UTF-8) чаще всего приводит к тому, что вместо читаемого текста вы получаете набор непонятных символов.

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

В стандартных конфигурациях, таких как 1С Бухгалтерия или 1С Управление торговлей, создание файла обычно скрыто за кнопкой «Выгрузить» или «Сохранить». Однако иногда требуется сохранить произвольный отчет или список в формате .txt. Для этого в режиме предприятия часто используется стандартный диалог сохранения.

Когда вы нажимаете кнопку выгрузки, система предлагает выбрать тип файла. Если вам нужен именно текстовый документ, убедитесь, что в поле «Тип файла» выбрано значение Текстовый документ. После этого укажите путь на диске. Система автоматически создаст файл с расширением .txt и запишет в него сформированный отчет.

Если стандартный интерфейс не позволяет выбрать формат, можно воспользоваться хитростью: выгрузите данные в MXL или HTML, откройте их в браузере или редакторе и сохраните как текст. Но это лишний шаг. Гораздо эффективнее настроить выгрузку правильно.

  • 📂 Всегда проверяйте расширение файла перед сохранением, чтобы не получить сюрприз в виде .xml вместо .txt.
  • 💾 Убедитесь, что у вас есть права на запись в выбранную папку, иначе система выдаст ошибку доступа.
  • 🔤 Обратите внимание на кодировку в окне сохранения, если она доступна для выбора пользователю.

⚠️ Внимание: При сохранении файлов в сетевые папки убедитесь, что сетевой диск подключен корректно. Попытка сохранить файл по пути, который виден только локально на сервере 1С, приведет к ошибке «Файл не найден».

📊 Какой способ создания файла вы используете чаще всего?
Через кнопку в интерфейсе 1С
С помощью внешней обработки
Программно через код
Импортирую из Excel

Программное создание файла: объект ФайлМенеджер

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

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

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

Процедура СоздатьТекстовыйФайл()

ИмяФайла = "C:\Reports\log.txt";

Файл = Новый Файл(ИмяФайла);

// Проверка существования не обязательна для создания, но полезна для логики

КонецПроцедуры

💡

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

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

Запись данных: ТекстовыйДокумент и ЗаписьТекста

Самый современный и рекомендуемый способ записи текста — использование объекта ЗаписьТекста. Он пришел на смену устаревшему ТекстовыйДокумент и обеспечивает лучшую работу с кодировками и буферизацией. Этот объект позволяет писать данные строка за строкой или большими блоками.

Для инициализации записи вам понадобится поток. Вы создаете поток для записи в файл, а затем передаете его в конструктор ЗаписьТекста. Здесь же можно указать нужную кодировку, например, UTF-8 или Windows-1251, что критически важно для корректного отображения кириллицы.

Метод ЗаписатьСтроку() автоматически добавляет символ перевода строки в конце. Если вам нужно записать данные без перехода на новую строку, используйте метод Записать(). Это полезно при формировании CSV-файлов, где разделители стоят в одной строке.

  • 📝 Используйте ЗаписьТекста для любых новых разработок, это стандарт платформы.
  • 🔥 Не забывайте вызывать метод Закрыть() или использовать конструкцию Пока...Цикл с автоматическим закрытием потока.
  • 🛡️ Всегда указывайте кодировку явно, не полагайтесь на настройки по умолчанию.
Поток = Новый ПотокВПамяти();

Запись = Новый ЗаписьТекста(Поток, КодировкаТекста.UTF8);

Запись.ЗаписатьСтроку("Привет, мир!");

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

⚠️ Внимание: Если вы не закроете объект ЗаписьТекста или поток, файл может остаться заблокированным операционной системой. Другие процессы не смогут прочитать его до перезапуска 1С.

☑️ Чек-лист правильной записи файла

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

Работа с кодировками и спецсимволами

Проблема «кракозябр» в текстовых файлах — классика жанра в 1С. Она возникает, когда файл, созданный в одной кодировке (например, UTF-8 без BOM), открывается в программе, ожидающей другую (например, ANSI). Для корректного создания txt файла с русским текстом необходимо явно управлять этим параметром.

Объект ЗаписьТекста позволяет передать параметр КодировкаТекста. Наиболее универсальным вариантом сегодня является UTF8. Однако, если файл предназначен для открытия в старом Блокноте Windows или импорта в старую бухгалтерскую программу, может потребоваться Win1251.

Особое внимание уделите символу BOM (Byte Order Mark). Это специальная метка в начале файла, указывающая на кодировку. Некоторые системы не умеют читать файлы с BOM, считая первые три байта мусором. В 1С можно управлять добавлением BOM через параметр конструктора.

Кодировка Описание Рекомендация
UTF8 Универсальная, поддерживает все языки Использовать по умолчанию для веба и новых систем
Win1251 Стандартная для Windows (кириллица) Для совместимости со старым ПО и Excel
UTF8NoBOM UTF-8 без метки порядка байт Для скриптов и конфигов, чувствительных к заголовку
Что такое BOM и почему он мешает?

BOM (Byte Order Mark) — это последовательность байтов в начале файла, которая сообщает программе о кодировке текста. В UTF-8 это байты EF BB BF. Некоторые парсеры (например, в PHP или старые импортеры 1С) не ожидают эти байты и воспринимают их как часть текста, из-за чего первая строка файла «ломается» или отображается некорректно.

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

Особенности работы в файловом и клиент-серверном варианте

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

В клиент-серверном варианте (SQL) код часто выполняется на стороне сервера 1С. Сервер не имеет доступа к диску вашего локального компьютера. Попытка сохранить файл по пути C:\Temp\file.txt приведет к созданию файла на диске сервера, а не клиента. Пользователь этого файла не увидит.

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

⚠️ Внимание: Никогда не используйте жестко заданные локальные пути (например, D:\Export\) в коде, который выполняется на сервере. Используйте переменные окружения или настройки констант для определения путей.

💡

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

Частые ошибки и методы отладки

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

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

Также стоит помнить о лимитах на длину строки. Хотя текстовый формат гибкий, некоторые внешние системы имеют ограничения на количество символов в строке (например, 255 или 32767 символов). При формировании выгрузок для сторонних сервисов уточняйте эти требования в документации.

  • 🚫 Ошибка «Файл занят» решается закрытием файла во всех других приложениях.
  • 📁 Ошибка «Отказано в доступе» требует проверки прав пользователя Windows.
  • 📉 Ошибка переполнения буфера возникает при попытке записать гигантский массив данных одной строкой.

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

📊 С какой ошибкой при работе с файлами вы сталкивались чаще?
Файл занят другой программой
Неверная кодировка (кракозябры)
Отказано в доступе
Файл не найден
Можно ли создать txt файл без использования кода?

Да, если в вашей конфигурации есть обработка «Универсальный обмен данными» или аналогичные инструменты. Также можно использовать внешние обработки, скачанные из сообщества ИТС, которые позволяют выгружать произвольные выборки в текст.

Как открыть txt файл, созданный в 1С, в Excel?

В Excel выберите «Данные» → «Получить данные» → «Из текста/CSV». При импорте обязательно укажите ту же кодировку, которая использовалась при создании файла в 1С, и выберите правильный разделитель (точка с запятой или табуляция).

Почему файл создается пустым?

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

Как добавить дату в имя создаваемого файла?

Используйте функцию Формат() для текущей даты. Пример кода: ИмяФайла = "Отчет_" + Формат(ТекущаяДата(), "ДФ=ddMMyyyy") + ".txt". Это позволит создавать уникальные файлы для каждого дня.

В чем разница между ТекстовыйДокумент и ЗаписьТекста?

ТекстовыйДокумент — это устаревший объект, который менее гибок в работе с кодировками и потоками. ЗаписьТекста — современный объект, работающий напрямую с потоками, поддерживающий асинхронность и более точный контроль над байтовым представлением данных.