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

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

Как открыть текстовый файл в 1С 8: способы, код и нюансы

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

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

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

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

Способы открытия текстового файла в 1С 8

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

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

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

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

ЧтениеТекста

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

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

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

ЧтениеДанных / ДвоичныеДанные

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

Открытие файла через объект ЧтениеТекста

Объект создаётся конструктором Новый ЧтениеТекста, куда передаются путь к файлу и кодировка. После этого файл можно читать построчно в цикле.

Чтение = Новый ЧтениеТекста("D:\Обмен\выписка.txt", КодировкаТекста.UTF8);

Строка = Чтение.ПрочитатьСтроку();

Пока Строка <> Неопределено Цикл

// обработка строки

Строка = Чтение.ПрочитатьСтроку();

КонецЦикла;

Чтение.Закрыть();

Метод ПрочитатьСтроку() возвращает очередную строку, а по достижении конца файла — Неопределено. Это стандартный признак завершения цикла. Если нужно получить весь текст одной строкой, используйте Прочитать() без аргументов.

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

bsl
Чтение = Новый ЧтениеТекста("D:\Обмен\data.txt", КодировкаТекста.UTF8);
ТекстЦеликом = Чтение.Прочитать();
Чтение.Закрыть();

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

Объект ТекстовыйДокумент удобен, когда нужен доступ к произвольной строке по её номеру или требуется подсчитать количество строк до обработки.

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

Документ.Прочитать("D:\Обмен\прайс.txt", КодировкаТекста.ANSI);

Для Ном = 1 По Документ.КоличествоСтрок() Цикл

ТекСтрока = Документ.ПолучитьСтроку(Ном);

// обработка строки

КонецЦикла;

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

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

Кодировка: почему вместо текста отображаются иероглифы

Наиболее частая проблема при открытии текстовых файлов — неверная кодировка. Если при чтении вы видите «кракозябры» или знаки вопроса, файл сохранён в одной кодировке, а читается в другой.

В 1С кодировка задаётся через системное перечисление КодировкаТекста: UTF8, ANSI (Windows-1251 для русской локали), OEM (DOS, CP866), UTF16 и другие. Если кодировку не указать, платформа использует значение по умолчанию, которое может не совпасть с фактической кодировкой файла.

Файл из банка или DOS-программыЧасто OEM (CP866)

Откройте файл в Notepad++ и посмотрите кодировку в строке состояния

Файл из современных систем и веб-сервисовОбычно UTF-8

Проверьте наличие BOM — первых байтов файла

Файл из старых Windows-программОбычно ANSI (Windows-1251)

Русские буквы читаются корректно только при ANSI

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

Открытие файла в управляемых формах и на сервере

В тонком и веб-клиенте код, выполняющийся на сервере, не имеет доступа к диску пользователя. Путь вида C:\Users\...\файл.txt на сервере укажет на файловую систему сервера 1С, а не клиентского компьютера. Это типичная причина ошибки «Файл не найден» в управляемых приложениях.

Правильная схема: сначала файл помещается во временное хранилище на клиенте, затем на сервере извлекается и обрабатывается.

&НаКлиенте

Процедура ЗагрузитьФайл(Команда)

НачатьПомещениеФайлаВоВременноеХранилище(

Новый ОписаниеОповещения("ПослеПомещения", ЭтотОбъект),

Неопределено, , Истина, УникальныйИдентификатор);

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

В обработчике оповещения адрес хранилища передаётся в серверную процедуру, где файл извлекается через ПолучитьИзВременногоХранилища() как двоичные данные, сохраняется во временный файл методом Записать() и далее читается стандартно через ЧтениеТекста.

Порядок действий для управляемой формы
  1. 1
    На клиенте вызовите НачатьПомещениеФайлаВоВременноеХранилище с диалогом выбора файла
  2. 2
    В обработчике оповещения получите адрес хранилища и передайте его в серверную процедуру
  3. 3
    На сервере извлеките ДвоичныеДанные и запишите их во временный файл через ПолучитьИмяВременногоФайла
  4. 4
    Откройте временный файл объектом ЧтениеТекста с нужной кодировкой и обработайте построчно
  5. 5
    Удалите временный файл и данные из хранилища после обработки

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

Ошибка «Файл не обнаружен» возникает не только из-за неверного пути, но и из-за контекста исполнения: путь клиента используется в серверном коде. Проверяйте существование файла через объект Файл и метод Существует() перед открытием.

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

Ещё одна группа проблем — пустой результат чтения. Если Прочитать() возвращает пустую строку, проверьте, что файл действительно содержит данные и что кодировка указана верно: при несовпадении UTF-16 и ANSI файл может прочитаться как пустой или битый.

Типичные ошибки
01
Чтение файла клиентского пути в серверном коде — ошибка «Файл не найден»; используйте временное хранилище
02
Отсутствие Чтение.Закрыть() — файл остаётся заблокированным для других процессов
03
Чтение большого файла через ТекстовыйДокумент — избыточный расход памяти и падение производительности
04
Игнорирование кодировки — кракозябры вместо русского текста; всегда указывайте КодировкаТекста явно
05
Отсутствие проверки существования файла — необработанное исключение вместо понятного сообщения пользователю

Проверка результата и безопасная обработка

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

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

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

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

Содержимое прочитанных строк
Норма

Русский текст читается, числа и даты распознаются

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

Кракозябры, знаки вопроса, слипшиеся строки

Завершение цикла чтения
Норма

Цикл завершился по Неопределено, обработаны все строки

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

Цикл оборвался исключением или обработана только часть файла

Состояние файла после работы
Норма

Файл закрыт и доступен другим программам

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

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

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

Как открыть текстовый файл в 1С без программирования?

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

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

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

Почему вместо русского текста отображаются иероглифы?

Кодировка, указанная при открытии, не совпадает с фактической кодировкой файла. Определите кодировку в стороннем редакторе (например, Notepad++) и укажите соответствующее значение КодировкаТекста: UTF8, ANSI или OEM. Файлы из DOS-программ и старых банковских систем чаще всего в OEM (CP866).

Как прочитать файл с диска пользователя в тонком клиенте?

Напрямую с сервера — никак: сервер не видит диск клиента. Используйте НачатьПомещениеФайлаВоВременноеХранилище на клиенте, передайте адрес хранилища в серверную процедуру, там извлеките двоичные данные, сохраните во временный файл и прочитайте через ЧтениеТекста.

Можно ли открыть файл по сети или по UNC-пути?

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

Что делать, если файл очень большой и 1С зависает?

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

Итог

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

Для чтения текстовых файлов в 1С 8 используйте ЧтениеТекста для больших файлов и ТекстовыйДокумент для небольших, всегда указывайте кодировку явно, закрывайте файл после чтения, а в управляемых формах передавайте файл на сервер через временное хранилище.