Почему возникает ошибка «Метод объекта не обнаружен (ПолучитьСтроку)» при чтении CSV и как правильно загружать данные?

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

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

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

Проанализируем ситуацию: программист использует объект ТекстовыйДокумент, загружает в него файл методом Прочитать(), но при попытке обращения к строке через ПолучитьСтроку() система выдает ошибку. Выясним причину: чаще всего это происходит из-за копирования кода из интернета. В тексте метода могут содержаться символы из другой раскладки (например, латинская «C» вместо кириллической «С» или некорректно закодированная буква «о»).

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

Работа с CSV через объект «ТекстовыйДокумент»

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


ИмяФайла = "C:\ВыгрузкаНаСайт\data.csv";
ЗагружаемыйФайл = Новый ТекстовыйДокумент;
Попытка
    ЗагружаемыйФайл.Прочитать(ИмяФайла, КодировкаТекста.UTF8);
Исключение
    Сообщить("Ошибка при чтении файла: " + ОписаниеОшибки());
    Возврат;
КонецПопытки;

КоличествоСтрок = ЗагружаемыйФайл.КоличествоСтрок();
Для НомерСтроки = 1 По КоличествоСтрок Цикл
    ТекущаяСтрока = ЗагружаемыйФайл.ПолучитьСтроку(НомерСтроки);
    // Обработка строки...
КонецЦикла;

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

Оптимальный способ: использование «ЧтениеТекста» и «СтрРазделить»

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

Разберем по шагам алгоритм эффективной обработки:

  1. Используем ЧтениеТекста для последовательного доступа к строкам.
  2. Для разделения строки на колонки применяем встроенную функцию СтрРазделить (доступна с версии 8.3.6).
  3. Очищаем полученные значения от лишних пробелов с помощью СокрЛП.

Разделитель = ";";
Чтение = Новый ЧтениеТекста(ИмяФайла, КодировкаТекста.UTF8);
СтрокаДанных = Чтение.ПрочитатьСтроку(); // Читаем шапку, если нужно

СтрокаДанных = Чтение.ПрочитатьСтроку();
Пока СтрокаДанных <> Неопределено Цикл
    МассивКолонок = СтрРазделить(СтрокаДанных, Разделитель, Истина);
    
    Если МассивКолонок.Количество() > 0 Тогда
        Значение1 = СокрЛП(МассивКолонок[0]);
        // Обработка данных...
    КонецЕсли;
    
    СтрокаДанных = Чтение.ПрочитатьСтроку();
КонецЦикла;
Чтение.Закрыть();

Альтернатива: Чтение через «ТабличныйДокумент»

Посмотрим на еще один быстрый способ — использование ТабличныйДокумент. Платформа 1С умеет автоматически разбирать структуру CSV, если указать правильный тип файла при чтении. Это избавляет от необходимости вручную парсить строки и разделители.


ТабДок = Новый ТабличныйДокумент;
Попытка
    ТабДок.Прочитать(ИмяФайла, СпособЧтенияЗначенийТабличногоДокумента.Значение);
Исключение
    Сообщить("Не удалось прочитать файл как таблицу.");
    Возврат;
КонецПопытки;

Для Сч = 1 По ТабДок.ВысотаТаблицы Цикл
    Артикул = ТабДок.Область(Сч, 1).Текст;
    Цена = ТабДок.Область(Сч, 2).Текст;
КонецЦикла;

Технические нюансы и ограничения

Проанализируем дополнительные сложности, которые могут возникнуть при работе с CSV:

Для максимально надежной работы в современных версиях платформы (8.3.9+) рекомендуется также обратить внимание на ЧтениеДанных (Stream API), которое обеспечивает наиболее высокую производительность при работе с потоками данных.

← На главную