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

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

Как загрузить TXT-файл в 1С: пошаговая инструкция

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

Загрузка данных из текстового файла — одна из самых частых задач при работе с 1С: так переносят прайсы поставщиков, выписки банков, списки номенклатуры и результаты выгрузки из сторонних систем. TXT-формат прост, но именно из-за его простоты легко столкнуться с проблемами кодировки, разделителей и структуры строк.

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

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

Определите структуру файла перед загрузкой

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

Кодировку проще всего проверить в Notepad++ или аналогичном редакторе — она отображается в строке состояния. Самые распространённые варианты: UTF-8, Windows-1251 (ANSI) и OEM-866 для старых DOS-выгрузок. Если открыть файл не в той кодировке, кириллица превратится в «кракозябры» — тот же эффект будет и при загрузке в 1С с неверно указанной кодировкой.

Обратите внимание на строки, которые не являются данными: заголовки, пустые строки в конце файла, итоговые строки вида «Всего записей: 150». Их нужно либо пропускать в коде, либо удалить из файла заранее, иначе в базу попадёт мусор.

Разделитель полейТабуляция, ; , | или фиксированная ширина

Откройте файл и посмотрите, чем отделены колонки друг от друга

КодировкаUTF-8, Windows-1251 или OEM-866

Проверьте в редакторе; неверная кодировка даёт нечитаемый текст

Служебные строкиЗаголовки, итоги, пустые строки

Их нужно пропускать или удалить, иначе загрузятся лишние записи

Способ 1. Чтение файла через ТекстовыйДокумент

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

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

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

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

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

Если ПустаяСтрока(Строка) Тогда

Продолжить;

КонецЕсли;

Поля = СтрРазделить(Строка, ";");

// Поля[0] — наименование, Поля[1] — цена и т.д.

КонецЦикла;

Обратите внимание: цикл начинается со второй строки, если первая строка файла — заголовок. Функция СтрРазделить разбивает строку по разделителю в массив; перед обращением к элементам массива убедитесь, что их количество соответствует ожидаемому, иначе получите ошибку «Индекс находится за границами массива».

Способ 2. Построчное чтение через ЧтениеТекста

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

Чтение = Новый ЧтениеТекста;

Чтение.Открыть("C:\Данные\выписка.txt", КодировкаТекста.ANSI);

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

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

Если Не ПустаяСтрока(Строка) Тогда

Поля = СтрРазделить(Строка, Символы.Таб);

// обработка полей

КонецЕсли;

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

КонецЦикла;

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

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

Запись данных в справочники и документы

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

Найденный = Справочники.Номенклатура.НайтиПоНаименованию(Поля[0]);

Если Найденный.Пустая() Тогда

НовыйЭлемент = Справочники.Номенклатура.СоздатьЭлемент();

НовыйЭлемент.Наименование = Поля[0];

Иначе

НовыйЭлемент = Найденный.ПолучитьОбъект();

КонецЕсли;

НовыйЭлемент.Записать();

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

Числа и даты из текстового файла всегда приходят строками. Преобразуйте их явно: Число(СтрЗаменить(Поля[1], ",", ".")) для цен с учётом десятичного разделителя, для дат — разбор по шаблону. Строка «не число» при прямом присвоении в числовой реквизит вызовет ошибку преобразования.

Загрузка без программирования: типовые обработки

Если нет доступа к конфигуратору или задача разовая, используйте готовые механизмы. Во многих типовых конфигурациях (Управление торговлей, ERP, Комплексная автоматизация) есть обработка «Загрузка данных из табличного документа» — она находится в разделе администрирования или подключается из дополнительных обработок.

Порядок работы с ней такой: TXT-файл сначала открывают в Excel или LibreOffice (при открытии указывают разделитель), затем копируют таблицу в табличный документ обработки, сопоставляют колонки с реквизитами объекта и запускают загрузку. Обработка умеет искать существующие элементы и создавать новые.

У этого пути есть ограничения: сложную логику (проверки, вычисляемые поля, загрузка в несколько связанных объектов) такая обработка не реализует. Для регулярных загрузок с бизнес-правилами всё равно потребуется доработка.

Сравнение способов загрузки

ЧтениеТекста / ТекстовыйДокумент

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

Обработка «Загрузка данных из табличного документа»

Не требует программирования, быстро для разовых задач; ограничена простыми сценариями без сложных проверок

Конвертация TXT в CSV/Excel + типовая загрузка

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

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

Большинство проблем при загрузке TXT сводится к нескольким повторяющимся ситуациям. Понимание их причин экономит часы отладки.

Типичные ошибки
01
Неверная кодировка — кириллица превращается в «кракозябры»; перечитайте файл с другой кодировкой (UTF8, ANSI, OEM)
02
Неверный разделитель — вся строка попадает в одно поле; проверьте, чем реально разделены колонки в файле
03
Разделитель внутри данных — например, точка с запятой в наименовании ломает разбор; используйте экранирование кавычками или другой разделитель
04
Обращение к несуществующему элементу массива — строка содержит меньше полей, чем ожидалось; проверяйте Поля.Количество() перед обращением
05
Десятичный разделитель — цена «1 250,50» не преобразуется в число напрямую; убирайте пробелы и заменяйте запятую на точку
06
Загрузка без проверки дублей — при повторном запуске создаются копии элементов; всегда ищите существующий элемент по ключу

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

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

После завершения загрузки обязательно сверьте результат с исходным файлом. Минимальный контроль: количество обработанных строк должно совпадать с количеством строк данных в файле (за вычетом заголовков и пропущенных пустых). Выводите в сообщения счётчики: сколько создано, сколько обновлено, сколько пропущено с ошибками.

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

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

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

Счётчики загрузки
Норма

Создано + обновлено + пропущено = числу строк данных в файле

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

Сумма не сходится — часть строк потеряна или обработана дважды

Кириллица в записях
Норма

Наименования читаемы, соответствуют файлу

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

«Кракозябры» — файл прочитан в неверной кодировке

Числа и даты
Норма

Значения совпадают с файлом, дробная часть на месте

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

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

Дубли
Норма

Повторный запуск не создаёт новых элементов

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

Каждый запуск плодит копии — нет поиска существующих

Итог

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

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

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

Какую кодировку указывать, если неизвестно, в какой сохранён файл?

Начните с UTF-8 — это самый распространённый вариант для современных выгрузок. Если кириллица отображается нечитаемо, попробуйте КодировкаТекста.ANSI (Windows-1251), затем OEM. Практический приём: откройте файл в Notepad++ — он показывает кодировку в строке состояния и позволяет пересохранить файл в нужной.

Как загрузить TXT, если поля имеют фиксированную ширину, а разделителя нет?

Используйте функции работы со строками: Сред(Строка, НачПозиция, Длина) для извлечения каждого поля по позициям. Позиции определите по документации на формат выгрузки или вручную, посчитав символы в образце строки. Учитывайте, что пробелы-заполнители в конце полей нужно обрезать функцией СокрЛП.

Файл очень большой, 1С зависает при загрузке. Что делать?

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

Можно ли загрузить TXT в 1С:Бухгалтерию без доработок?

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

Как пропустить первую строку файла с заголовками?

При чтении через ЧтениеТекста просто выполните ПрочитатьСтроку() один раз до начала цикла — первая строка будет считана и проигнорирована. При работе с ТекстовыйДокумент начните цикл со второй строки: Для Номер = 2 По Текст.КоличествоСтрок().

Что делать, если в данных встречается сам символ-разделитель?

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