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

Быстрый старт · 11 мин

Как создать текстовый документ в 1С

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

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

Чаще всего потребность возникает у разработчиков и администраторов: нужно выгрузить список контрагентов, сформировать файл обмена, записать протокол обработки или передать данные в программу, которая понимает только текстовый формат. Во всех этих случаях используется объект встроенного языка ТекстовыйДокумент (в английском синтаксисе — TextDocument).

Ниже разобраны оба подхода: создание файла через меню «Файл» и работа с объектом ТекстовыйДокумент в коде — с примерами, указанием кодировок, типичными ошибками и способами проверки результата.

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

Интерактивный способ не требует знания встроенного языка и доступен в любой конфигурации, где у пользователя есть право вывода и работы с файлами. Откройте меню «Файл» в главном окне программы, выберите пункт «Новый», а затем в списке типов документов — «Текстовый документ». Откроется пустой редактор, в который можно вводить произвольный текст.

Для сохранения используйте «Файл → Сохранить как» и укажите каталог и имя файла. По умолчанию предлагается расширение TXT. Если текст предназначен для передачи в другую систему, сразу уточните требования к кодировке — при сохранении через диалог можно выбрать нужный вариант, иначе файл будет записан в кодировке по умолчанию, что иногда приводит к нечитаемым символам на стороне приёмника.

Учтите ограничение: текстовый редактор 1С не является полноценным форматтером. Он не сохраняет шрифты, цвета и таблицы — только чистый текст. Если нужно оформление, используйте табличный документ с сохранением в MXL, HTML или другой поддерживаемый формат.

Программное создание через объект ТекстовыйДокумент

Объект ТекстовыйДокумент создаётся конструктором Новый ТекстовыйДокумент. После создания документ пуст — содержимое добавляется методами ДобавитьСтроку(), УстановитьТекст() или ВставитьСтроку(). Когда текст сформирован, метод Записать() сохраняет его в файл.

Минимальный рабочий пример выглядит так:

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

Док.ДобавитьСтроку("Первая строка");

Док.ДобавитьСтроку("Вторая строка");

Док.Записать("C:\Temp\result.txt", КодировкаТекста.UTF8);

Метод ДобавитьСтроку() дописывает строку в конец документа вместе с переводом строки. Если нужно заменить содержимое целиком, используйте УстановитьТекст() — он принимает одну строку, внутри которой переводы строк задаются символами Символы.ПС или Символы.ВК + Символы.ПС.

bsl
Док = Новый ТекстовыйДокумент;
Док.ДобавитьСтроку("Наименование;ИНН");
Для Каждого Стр Из Контрагенты Цикл
    Док.ДобавитьСтроку(Стр.Наименование + ";" + Стр.ИНН);
КонецЦикла;
Док.Записать("C:\Обмен\контрагенты.txt", КодировкаТекста.UTF8);

Выбор кодировки при записи файла

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

Основные варианты и когда их применять:

  • КодировкаТекста.UTF8 — универсальный выбор для обмена с веб-сервисами, Linux-системами и современными программами;
  • КодировкаТекста.ANSI — подходит для старых Windows-приложений, ожидающих кириллицу в cp1251;
  • КодировкаТекста.UTF16 — требуется некоторым системам, явно указывающим Unicode в спецификации обмена;
  • КодировкаТекста.OEM — устаревшая DOS-кодировка, встречается в специфических интеграциях.

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

Сравнение вариантов

UTF-8

Стандарт для обмена с веб-сервисами и современными системами; ограничение — старые Windows-программы могут прочитать файл без BOM некорректно

ANSI (cp1251)

Подходит для устаревших Windows-приложений; ограничение — не поддерживает символы вне кириллической и латинской раскладок

UTF-16

Требуется системами, жёстко работающими с Unicode; ограничение — файл занимает больше места и не везде принимается

Запись файла: пути, права и тонкий клиент

Метод Записать() выполняется там, где исполняется код. Если процедура работает на сервере, путь C:\Temp\ — это диск сервера, а не компьютера пользователя. Это классическая ошибка: файл создаётся без ошибок, но пользователь не находит его у себя. Для файлов, которые должен получить пользователь, выполняйте запись на клиенте или передавайте содержимое через временное хранилище.

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

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

Чтение и доработка существующего файла

Объект ТекстовыйДокумент работает в обе стороны: метод Прочитать() загружает существующий файл, после чего строки доступны через КоличествоСтрок() и ПолучитьСтроку(Номер). Это удобно, когда нужно дописать данные в конец журнала или изменить отдельные строки.

Пример дополнения файла новой строкой:

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

Док.Прочитать("C:\Temp\log.txt", КодировкаТекста.UTF8);

Док.ДобавитьСтроку("Обработка завершена: " + ТекущаяДата());

Док.Записать("C:\Temp\log.txt", КодировкаТекста.UTF8);

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

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

Типичные ошибки и их устранение

Большинство проблем при работе с текстовыми документами сводится к нескольким повторяющимся сценариям. Файл «не создаётся» обычно означает, что он записан на сервере, а ищут его на клиенте. «Кракозябры» — несовпадение кодировки записи и чтения. Ошибка доступа — отсутствие прав у учётной записи сервера 1С на целевой каталог.

Отдельный случай — переносы строк. Если файл читается сторонней системой построчно и «слипается», проверьте тип разделителя: некоторые системы ожидают CRLF (Windows), другие — LF (Linux). Управлять этим можно через свойство РазделительСтрок или явной сборкой текста с нужными символами.

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

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

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

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

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

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

Файл на диске
Норма

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

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

Файла нет или размер 0 байт — проверьте место исполнения кода и права

Содержимое
Норма

Текст читается, кириллица отображается корректно

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

Нечитаемые символы — несовпадение кодировки записи и чтения

Структура строк
Норма

Каждая запись на отдельной строке, разделители на месте

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

Строки слиплись или разбиты лишними переносами — проверьте РазделительСтрок

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

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

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

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

Код, выполняемый в серверном контексте, работает с файловой системой сервера. Чтобы передать файл пользователю, поместите его во временное хранилище на сервере, а на клиенте получите через ПолучитьФайл() или сохраните через диалог.

Как добавить текст в конец существующего файла?

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

Какая кодировка нужна для обмена с банком или веб-сервисом?

Единого ответа нет — кодировка определяется спецификацией конкретного обмена. Чаще всего веб-сервисы ожидают UTF-8, а старые банковские форматы — ANSI (cp1251). Уточните требование в документации формата и задайте кодировку явно.

Можно ли создать текстовый файл без прав администратора?

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

Как задать перевод строки вручную при сборке текста?

Используйте системный набор Символы: Символы.ПС для перевода строки, Символы.ВК + Символы.ПС для Windows-разделителя CRLF. Например: Текст = "Строка1" + Символы.ПС + "Строка2".

Итог

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

Вручную текстовый документ создаётся через «Файл → Новый → Текстовый документ», программно — объектом ТекстовыйДокумент с методами ДобавитьСтроку() и Записать(). Всегда указывайте кодировку явно, помните, что серверный код пишет на диск сервера, а для больших файлов используйте потоковые ЧтениеТекста и ЗаписьТекста.