Быстрый старт · 11 мин
Как создать текстовый документ в 1С
Как создать текстовый документ в 1С: интерактивно через меню и программно объектом ТекстовыйДокумент. Примеры кода, кодировки, ошибки и проверка результата.
Текстовый документ в 1С — это обычный файл с расширением TXT, который можно создать двумя способами: вручную через интерфейс программы или программно с помощью встроенного языка. Первый вариант подходит для заметок, служебных комментариев и быстрого экспорта небольших фрагментов данных. Второй — для выгрузки данных в файл, формирования логов, обмена с внешними системами и пакетной обработки.
Чаще всего потребность возникает у разработчиков и администраторов: нужно выгрузить список контрагентов, сформировать файл обмена, записать протокол обработки или передать данные в программу, которая понимает только текстовый формат. Во всех этих случаях используется объект встроенного языка ТекстовыйДокумент (в английском синтаксисе — TextDocument).
Ниже разобраны оба подхода: создание файла через меню «Файл» и работа с объектом ТекстовыйДокумент в коде — с примерами, указанием кодировок, типичными ошибками и способами проверки результата.
Создание текстового документа через интерфейс
Интерактивный способ не требует знания встроенного языка и доступен в любой конфигурации, где у пользователя есть право вывода и работы с файлами. Откройте меню «Файл» в главном окне программы, выберите пункт «Новый», а затем в списке типов документов — «Текстовый документ». Откроется пустой редактор, в который можно вводить произвольный текст.
Для сохранения используйте «Файл → Сохранить как» и укажите каталог и имя файла. По умолчанию предлагается расширение TXT. Если текст предназначен для передачи в другую систему, сразу уточните требования к кодировке — при сохранении через диалог можно выбрать нужный вариант, иначе файл будет записан в кодировке по умолчанию, что иногда приводит к нечитаемым символам на стороне приёмника.
Учтите ограничение: текстовый редактор 1С не является полноценным форматтером. Он не сохраняет шрифты, цвета и таблицы — только чистый текст. Если нужно оформление, используйте табличный документ с сохранением в MXL, HTML или другой поддерживаемый формат.
Программное создание через объект ТекстовыйДокумент
Объект ТекстовыйДокумент создаётся конструктором Новый ТекстовыйДокумент. После создания документ пуст — содержимое добавляется методами ДобавитьСтроку(), УстановитьТекст() или ВставитьСтроку(). Когда текст сформирован, метод Записать() сохраняет его в файл.
Минимальный рабочий пример выглядит так:
Док = Новый ТекстовыйДокумент;
Док.ДобавитьСтроку("Первая строка");
Док.ДобавитьСтроку("Вторая строка");
Док.Записать("C:\Temp\result.txt", КодировкаТекста.UTF8);
Метод ДобавитьСтроку() дописывает строку в конец документа вместе с переводом строки. Если нужно заменить содержимое целиком, используйте УстановитьТекст() — он принимает одну строку, внутри которой переводы строк задаются символами Символы.ПС или Символы.ВК + Символы.ПС.
Док = Новый ТекстовыйДокумент;
Док.ДобавитьСтроку("Наименование;ИНН");
Для Каждого Стр Из Контрагенты Цикл
Док.ДобавитьСтроку(Стр.Наименование + ";" + Стр.ИНН);
КонецЦикла;
Док.Записать("C:\Обмен\контрагенты.txt", КодировкаТекста.UTF8);Выбор кодировки при записи файла
Кодировка — самая частая причина «кракозябр» у принимающей стороны. Вторым параметром метода Записать() передаётся значение перечисления КодировкаТекста. Если параметр не указан, используется системная кодировка по умолчанию, что на разных компьютерах может дать разный результат.
Основные варианты и когда их применять:
КодировкаТекста.UTF8— универсальный выбор для обмена с веб-сервисами, Linux-системами и современными программами;КодировкаТекста.ANSI— подходит для старых Windows-приложений, ожидающих кириллицу в cp1251;КодировкаТекста.UTF16— требуется некоторым системам, явно указывающим Unicode в спецификации обмена;КодировкаТекста.OEM— устаревшая DOS-кодировка, встречается в специфических интеграциях.
Правило простое: кодировку определяет не отправитель, а требования принимающей системы. Перед настройкой обмена уточните в документации контрагента, какой формат ожидается, и зафиксируйте его явно в коде, а не полагайтесь на значение по умолчанию.
Сравнение вариантов
Стандарт для обмена с веб-сервисами и современными системами; ограничение — старые Windows-программы могут прочитать файл без BOM некорректно
Подходит для устаревших Windows-приложений; ограничение — не поддерживает символы вне кириллической и латинской раскладок
Требуется системами, жёстко работающими с Unicode; ограничение — файл занимает больше места и не везде принимается
Запись файла: пути, права и тонкий клиент
Метод Записать() выполняется там, где исполняется код. Если процедура работает на сервере, путь C:\Temp\ — это диск сервера, а не компьютера пользователя. Это классическая ошибка: файл создаётся без ошибок, но пользователь не находит его у себя. Для файлов, которые должен получить пользователь, выполняйте запись на клиенте или передавайте содержимое через временное хранилище.
В тонком и веб-клиенте прямой доступ к файловой системе ограничен. Для интерактивного сохранения используйте ПолучитьФайл() или диалог выбора файла с предварительным подключением расширения работы с файлами. Без него попытка записи завершится предупреждением или ошибкой.
Проверяйте права на каталог перед записью: у учётной записи, под которой работает сервер 1С, должно быть право записи в целевую папку. Сетевые пути вида \\server\share дополнительно требуют, чтобы служба сервера 1С имела доступ к сетевому ресурсу — локальные права администратора здесь не помогают.
Чтение и доработка существующего файла
Объект ТекстовыйДокумент работает в обе стороны: метод Прочитать() загружает существующий файл, после чего строки доступны через КоличествоСтрок() и ПолучитьСтроку(Номер). Это удобно, когда нужно дописать данные в конец журнала или изменить отдельные строки.
Пример дополнения файла новой строкой:
Док = Новый ТекстовыйДокумент;
Док.Прочитать("C:\Temp\log.txt", КодировкаТекста.UTF8);
Док.ДобавитьСтроку("Обработка завершена: " + ТекущаяДата());
Док.Записать("C:\Temp\log.txt", КодировкаТекста.UTF8);
При чтении важно указать ту же кодировку, в которой файл был записан. Если кодировка не совпадёт, текст загрузится с искажёнными символами, а повторная запись необратимо испортит файл. Для потоковой обработки очень больших файлов вместо ТекстовыйДокумент лучше подходят объекты ЧтениеТекста и ЗаписьТекста — они не загружают файл в память целиком.
- 1Создайте объект: Док = Новый ТекстовыйДокумент
- 2Добавьте содержимое методами ДобавитьСтроку() или УстановитьТекст()
- 3Определите требуемую кодировку по спецификации принимающей системы
- 4Запишите файл методом Записать() с явным указанием кодировки
- 5Откройте файл в стороннем редакторе и убедитесь, что текст читается корректно
Типичные ошибки и их устранение
Большинство проблем при работе с текстовыми документами сводится к нескольким повторяющимся сценариям. Файл «не создаётся» обычно означает, что он записан на сервере, а ищут его на клиенте. «Кракозябры» — несовпадение кодировки записи и чтения. Ошибка доступа — отсутствие прав у учётной записи сервера 1С на целевой каталог.
Отдельный случай — переносы строк. Если файл читается сторонней системой построчно и «слипается», проверьте тип разделителя: некоторые системы ожидают CRLF (Windows), другие — LF (Linux). Управлять этим можно через свойство РазделительСтрок или явной сборкой текста с нужными символами.
Проверка результата
После записи убедитесь, что файл действительно соответствует ожиданиям. Откройте его в редакторе, который показывает кодировку (например, Notepad++), и сверьте: текст читается, количество строк совпадает с выгруженными данными, разделители строк корректны для принимающей системы.
Программно факт существования файла проверяется объектом Файл с методом Существует(). Для регламентных выгрузок полезно записывать в журнал регистрации имя файла, его размер и время создания — это упрощает разбор ситуаций, когда принимающая сторона заявляет, что файл не пришёл или пришёл пустым.
Как проверить результат
Файл существует по ожидаемому пути, размер больше нуля
Файла нет или размер 0 байт — проверьте место исполнения кода и права
Текст читается, кириллица отображается корректно
Нечитаемые символы — несовпадение кодировки записи и чтения
Каждая запись на отдельной строке, разделители на месте
Строки слиплись или разбиты лишними переносами — проверьте РазделительСтрок
Частые вопросы
Чем ТекстовыйДокумент отличается от ЗаписьТекста?
ТекстовыйДокумент загружает весь файл в память и удобен для небольших и средних текстов, где нужен произвольный доступ к строкам. ЗаписьТекста и ЧтениеТекста работают потоково, построчно, и подходят для больших файлов, где загрузка целиком нежелательна.
Почему файл создался на сервере, а не у пользователя?
Код, выполняемый в серверном контексте, работает с файловой системой сервера. Чтобы передать файл пользователю, поместите его во временное хранилище на сервере, а на клиенте получите через ПолучитьФайл() или сохраните через диалог.
Как добавить текст в конец существующего файла?
Прочитайте файл методом Прочитать() в той же кодировке, добавьте строки методом ДобавитьСтроку() и запишите обратно. Либо используйте ЗаписьТекста с режимом открытия, допускающим дозапись.
Какая кодировка нужна для обмена с банком или веб-сервисом?
Единого ответа нет — кодировка определяется спецификацией конкретного обмена. Чаще всего веб-сервисы ожидают UTF-8, а старые банковские форматы — ANSI (cp1251). Уточните требование в документации формата и задайте кодировку явно.
Можно ли создать текстовый файл без прав администратора?
Да, если у учётной записи есть право записи в целевой каталог. Права администратора не требуются — достаточно обычных разрешений на рабочую папку. Проблемы возникают только при записи в защищённые системные каталоги.
Как задать перевод строки вручную при сборке текста?
Используйте системный набор Символы: Символы.ПС для перевода строки, Символы.ВК + Символы.ПС для Windows-разделителя CRLF. Например: Текст = "Строка1" + Символы.ПС + "Строка2".
Что важно запомнить
Вручную текстовый документ создаётся через «Файл → Новый → Текстовый документ», программно — объектом ТекстовыйДокумент с методами ДобавитьСтроку() и Записать(). Всегда указывайте кодировку явно, помните, что серверный код пишет на диск сервера, а для больших файлов используйте потоковые ЧтениеТекста и ЗаписьТекста.