Разработка и Конфигурация · 11 мин
Как открыть TXT файл в 1С: инструкция с примерами кода
Способы открыть TXT файл в 1С: объекты ЧтениеТекста и ТекстовыйДокумент, выбор кодировки, чтение построчно, обработка ошибок и примеры кода.
Текстовые файлы в формате TXT — один из самых распространённых способов обмена данными между 1С и внешними системами: выгрузки из банков, прайсы поставщиков, результаты работы оборудования, логи и файлы обмена. Чтобы открыть такой файл программно, встроенный язык 1С предоставляет два основных инструмента: объект «ЧтениеТекста» для потокового чтения и «ТекстовыйДокумент» для загрузки файла целиком.
Выбор способа зависит от размера файла и задачи. Если файл небольшой и его нужно просто показать пользователю или разобрать целиком, удобнее «ТекстовыйДокумент». Если файл большой (сотни мегабайт) или его нужно читать построчно с контролем кодировки, правильнее использовать «ЧтениеТекста» — оно не загружает весь файл в память.
Ниже разобраны оба подхода с готовыми примерами кода, вопросы кодировки, работа с файлами на клиенте и на сервере, типичные ошибки и способы проверки результата.
Способы открытия TXT файла: что выбрать
Во встроенном языке 1С есть два штатных механизма работы с текстовыми файлами. Они не взаимозаменяемы полностью: у каждого своя область применения, и неправильный выбор приводит либо к перерасходу памяти, либо к избыточной сложности кода.
Объект «ЧтениеТекста» открывает файл как поток и позволяет читать его построчно, блоками или целиком методом «Прочитать()». Файл при этом не загружается в память полностью, что критично для больших выгрузок. Кодировку можно указать явно при открытии.
Объект «ТекстовыйДокумент» загружает файл целиком методом «Прочитать()» и предоставляет доступ к строкам по индексам. Он удобен, когда нужно показать содержимое пользователю, выполнить поиск и замену или когда файл гарантированно небольшой.
Сравнение вариантов
Подходит для больших файлов и построчного разбора. Позволяет указать кодировку и разделитель строк. Не даёт произвольного доступа к строкам по индексу.
Подходит для небольших файлов, отображения пользователю, поиска и замены. Загружает весь файл в память, что опасно для больших выгрузок.
Подходят для бинарных данных и нестандартных сценариев. Для обычного TXT избыточны.
Открытие файла через ЧтениеТекста
Это основной и рекомендуемый способ для обработки файлов обмена. Объект создаётся конструктором «Новый ЧтениеТекста», куда передаётся путь к файлу и, при необходимости, кодировка. Затем в цикле вызывается метод «ПрочитатьСтроку()», который возвращает «Неопределено», когда файл закончился.
ЧтениеТекста = Новый ЧтениеТекста("D:\Обмен\price.txt", КодировкаТекста.UTF8);
Строка = ЧтениеТекста.ПрочитатьСтроку();
Пока Строка <> Неопределено Цикл
// Разбор строки, например по разделителю
Части = СтрРазделить(Строка, ";");
// ... обработка данных ...
Строка = ЧтениеТекста.ПрочитатьСтроку();
КонецЦикла;
ЧтениеТекста.Закрыть();Обратите внимание на обязательный вызов «Закрыть()» после завершения чтения. Пока файл открыт объектом, он может быть заблокирован для других программ, особенно на Windows. Если обработка прерывается по ошибке, стоит закрывать файл в блоке «Попытка...Исключение...КонецПопытки», чтобы не оставлять «висеть» открытый дескриптор.
Если нужно прочитать файл целиком одной строкой, используйте метод «Прочитать()» без параметров — он вернёт всё содержимое. Это удобно для небольших файлов, но лишает главного преимущества потокового чтения.
Чтение с указанием разделителя строк
В конструкторе «ЧтениеТекста» третьим и четвёртым параметрами можно задать разделитель строк и разделитель групп символов. Это полезно, когда файл приходит из системы с нестандартными переносами строк — например, только с символом возврата каретки. Если строки «слипаются» в одну, проверьте именно этот параметр.
Открытие файла через ТекстовыйДокумент
Объект «ТекстовыйДокумент» создаётся конструктором «Новый ТекстовыйДокумент», после чего метод «Прочитать()» загружает файл. Доступ к строкам осуществляется через «КоличествоСтрок()» и «ПолучитьСтроку(Номер)», нумерация строк начинается с единицы.
Документ = Новый ТекстовыйДокумент;
Документ.Прочитать("D:\Обмен\price.txt", КодировкаТекста.UTF8);
Для Номер = 1 По Документ.КоличествоСтрок() Цикл
Строка = Документ.ПолучитьСтроку(Номер);
// обработка строки
КонецЦикла;Такой подход удобен, когда нужно несколько раз проходить по строкам, обращаться к ним по номеру или показать текст пользователю через метод «Показать()». Однако весь файл помещается в память, поэтому для файлов в десятки и сотни мегабайт этот способ применять не следует — возможны замедление работы и ошибки нехватки памяти на сервере.
Кодировка: почему текст открывается «кракозябрами»
Самая частая проблема при открытии TXT — неверная кодировка. Файл, созданный в кодировке Windows-1251, при чтении как UTF-8 превращается в нечитаемые символы, и наоборот. 1С не определяет кодировку автоматически надёжно: значение по умолчанию зависит от настроек, поэтому кодировку лучше указывать явно.
Основные варианты перечисления «КодировкаТекста»: UTF8 (типично для современных систем и Linux), ANSI (Windows-1251 для русскоязычных файлов из Windows), OEM (DOS-кодировка, встречается в выгрузках старого оборудования и касс), UTF16. Если источник файла известен, уточните кодировку в его документации.
Как выбрать кодировку
Признак неверной кодировки — кириллица отображается как «РљРѕРґ», «?????» или подобные последовательности. Исправляется это не заменой символов, а повторным открытием файла с правильным значением «КодировкаТекста».
Открытие файла на клиенте и на сервере
В файловой базе и в толстом клиенте путь к файлу работает напрямую. Но в клиент-серверном режиме код, выполняемый на сервере, видит только диски сервера — путь «C:\Users\...» пользователя для сервера не существует. Это вторая по частоте причина ошибок «файл не найден».
Стандартная схема для тонкого и веб-клиента такая: на клиенте файл помещается во временное хранилище методом «НачатьПомещениеФайла», затем на сервере данные из хранилища записываются во временный файл методом «ПолучитьИмяВременногоФайла()», и уже этот файл открывается «ЧтениеТекста».
- 1На клиенте вызовите НачатьПомещениеФайла с диалогом выбора файла и получите адрес во временном хранилище
- 2Передайте адрес хранилища в серверную процедуру
- 3На сервере получите данные из хранилища и запишите их во временный файл (ПолучитьИмяВременногоФайла с расширением txt)
- 4Откройте временный файл через ЧтениеТекста и обработайте построчно
- 5Удалите временный файл после обработки и очистите хранилище
Для интерактивного выбора файла у пользователя используйте «ДиалогВыбораФайла» с режимом «Открытие» и фильтром «Текстовые файлы (.txt)|.txt». Диалог работает асинхронно через «Показать()» с описанием оповещения.
Проверка результата и обработка ошибок
Перед открытием файла полезно проверить его существование объектом «Файл» и методом «Существует()» — это позволит выдать понятное сообщение вместо системной ошибки. Также стоит проверить, что файл не пустой: чтение первой строки вернёт «Неопределено» сразу.
Файл = Новый Файл(ПутьКФайлу);
Если Не Файл.Существует() Тогда
ВызватьИсключение "Файл не найден: " + ПутьКФайлу;
КонецЕсли;Разбор данных из строк тоже требует защиты: количество колонок после «СтрРазделить» может не совпадать с ожидаемым, числа могут содержать запятую вместо точки, а даты — нестандартный формат. Преобразование значений оборачивайте в «Попытка...Исключение» и собирайте список проблемных строк, чтобы показать пользователю после загрузки, а не прерывать весь процесс на первой ошибке.
Как проверить результат
Совпадает с количеством строк в исходном файле (с учётом заголовка)
Строк меньше — возможно, оборвалось чтение или неверный разделитель строк
Текст читаемый
Кракозябры или вопросительные знаки — неверная кодировка
Значения распознаны и попали в реквизиты объектов
Нули или пустые значения там, где в файле есть данные — ошибка преобразования формата
Файл закрыт и доступен другим программам
Файл заблокирован — не вызван метод Закрыть()
Типичные ошибки и ограничения
Большинство проблем при открытии TXT в 1С сводится к нескольким повторяющимся сценариям. Знание их заранее экономит значительное время отладки.
Дополнительное ограничение: в веб-клиенте работа с файловой системой возможна только через расширение работы с файлами или асинхронные методы помещения — синхронные вызовы типа «ПоместитьФайл» без расширения могут быть недоступны. Проектируйте код сразу на асинхронных методах («НачатьПомещениеФайла»), чтобы он работал во всех клиентах.
Частые вопросы
Чем отличается ЧтениеТекста от ТекстовыйДокумент?
ЧтениеТекста — потоковый объект: читает файл последовательно, не загружая его целиком в память, и подходит для больших файлов. ТекстовыйДокумент загружает файл полностью и даёт доступ к строкам по номеру, поиск и замену, но расходует память пропорционально размеру файла.
Как открыть TXT файл, если неизвестна его кодировка?
Откройте файл в редакторе с автоопределением кодировки (например, Notepad++) и посмотрите значение в строке состояния. Затем укажите соответствующее значение КодировкаТекста при открытии в 1С. Программного надёжного автоопределения кодировки в 1С нет.
Почему серверная процедура не находит файл по указанному пути?
Сервер 1С видит только свои локальные и сетевые диски. Путь к файлу на компьютере пользователя для сервера недоступен. Передайте файл через НачатьПомещениеФайла во временное хранилище, на сервере запишите данные во временный файл и читайте уже его.
Можно ли открыть TXT файл без программирования?
Штатного универсального «открыть TXT» в типовых конфигурациях нет, но многие конфигурации содержат готовые обработки загрузки (например, «Загрузка данных из табличного документа» для табличных форматов). Для произвольного TXT нужна внешняя обработка или доработка.
Как прочитать только часть большого файла, например первые 100 строк?
Используйте ЧтениеТекста и прервите цикл после нужного количества вызовов ПрочитатьСтроку(), затем вызовите Закрыть(). Загружать файл целиком не потребуется — в этом главное преимущество потокового чтения.
Что делать, если при чтении строки слипаются в одну длинную?
Это признак нестандартного разделителя строк в файле. Укажите разделитель явно в параметрах конструктора ЧтениеТекста (третий параметр) или предварительно проверьте файл в hex-просмотре редактора, чтобы узнать, какие символы используются как перевод строки.
Что важно запомнить
Для открытия TXT в 1С используйте ЧтениеТекста для больших файлов и построчной обработки, ТекстовыйДокумент — для небольших файлов и показа пользователю. Всегда явно указывайте кодировку, закрывайте файл после чтения, а в клиент-серверном режиме передавайте файл на сервер через временное хранилище.