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

Программист 1С v8.3 (Управляемые формы) IT и автоматизация бизнеса
← На главную

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

Выясним причину появления кавычек

Для начала проанализируем ситуацию: почему платформа 1С добавляет кавычки там, где мы их не ставили? Это не ошибка, а реализация стандарта формирования текстовых файлов с разделителями (по аналогии с CSV/TSV). Когда мы вызываем метод ТабличныйДокумент.Записать("Файл.txt", ТипФайлаТабличногоДокумента.TXT), система пытается сохранить структуру таблицы. Если внутри одной «ячейки» есть символ переноса строки, то без кавычек любая программа-обработчик воспримет такой перенос как начало новой строки данных (новой записи). Чтобы этого не произошло, 1С экранирует содержимое кавычками.

Разберем типичный пример. Если в первой ячейке текст "Товар", во второй — многострочный текст, а в третьей — "Цена", то результат в TXT будет выглядеть так:


Товар
"Текст в несколько
строк с переносами"
100

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

Способ 1: Постобработка полученного текста

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

Проанализируем пример кода для обработки строки:


// Предположим, переменная ТекстФайла содержит содержимое ячейки или всего документа
Результат = СтрЗаменить(ТекстФайла, """", "");

Однако стоит учитывать, что если в тексте должны быть легитимные кавычки (например, название организации «Ромашка»), они также будут удалены. Поэтому данный метод стоит применять с осторожностью.

Способ 2: Использование объекта ТекстовыйДокумент

Вместо того чтобы записывать весь ТабличныйДокумент целиком, мы можем программно перенести данные в объект ТекстовыйДокумент. Этот объект не накладывает ограничений формата CSV и записывает текст «как есть». Разберем этот процесс по шагам:

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

Посмотрим на пример реализации такого обхода:


ТекстовыйДок = Новый ТекстовыйДокумент;
Для НомерСтроки = 1 По ТабличныйДокумент.ВысотаТаблицы Цикл
    СтрокаДляЗаписи = "";
    Для НомерКолонки = 1 По ТабличныйДокумент.ШиринаТаблицы Цикл
        ТекстЯчейки = ТабличныйДокумент.Область(НомерСтроки, НомерКолонки).Текст;
        // Собираем строку, разделяя ячейки табуляцией
        Разделитель = ?(НомерКолонки = 1, "", Символы.Таб);
        СтрокаДляЗаписи = СтрокаДляЗаписи + Разделитель + ТекстЯчейки;
    КонецЦикла;
    ТекстовыйДок.ДобавитьСтроку(СтрокаДляЗаписи);
КонецЦикла;
ТекстовыйДок.Записать("C:\my_folder\file.txt");

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

Способ 3: Предварительная очистка спецсимволов в ячейках

Если вы все же хотите использовать стандартный метод Записать(), нам необходимо убрать причину, по которой 1С ставит кавычки — символы перевода строк. Рассмотрим подробнее, как это сделать перед сохранением.

Мы можем заменить все переносы строк в ячейках на пробелы или другой символ-разделитель. Проанализируем пример кода:


Для НомерСтроки = 1 По ТабличныйДокумент.ВысотаТаблицы Цикл
    Для НомерКолонки = 1 По ТабличныйДокумент.ШиринаТаблицы Цикл
        Область = ТабличныйДокумент.Область(НомерСтроки, НомерКолонки);
        // Заменяем символ перевода строки (ПС) на пробел
        Область.Текст = СтрЗаменить(Область.Текст, Символы.ПС, " ");
    КонецЦикла;
КонецЦикла;
// Теперь кавычки не появятся
ТабличныйДокумент.Записать("Файл.txt", ТипФайлаТабличногоДокумента.TXT);

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

Способ 4: Использование объекта ЗаписьТекста для тонкой настройки

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

Разберем по шагам работу с этим объектом:


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

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

Подведем итоги

Мы рассмотрели несколько вариантов решения проблемы появления кавычек. Выбор конкретного метода зависит от ваших целей:

Используя эти инструменты, вы сможете гибко управлять форматом выгрузки и формировать текстовые файлы, полностью соответствующие вашим требованиям.

← На главную