Справочник системных ошибок и решений

Windows Server, Active Directory, 1С:Предприятие, СУБД, Linux, Cisco, MikroTik, Asterisk.

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

1C_EXCEL_PARSE_FAIL 1С:Предприятие и СУБД

Организация обмена Excel/CSV в 1С с использованием табличных документов

Обновлено: 26.08.2026 · Официальная документация ↗

При загрузке/выгрузке прайс-листов и каталогов в Excel/CSV возникают ошибки:

  • Падение операций на Linux-серверах из-за попыток вызова COM-объектов Excel.Application.
  • Ошибки чтения ячеек с формулами, пробелами и сложными форматами дат.
  • Критическое замедление работы при парсинге файлов с количеством строк более 50 000.
  • Искажение кодировок (кракозябры) при чтении CSV-файлов из сторонних систем.

1. Нативный метод чтения XLSX через ТабличныйДокумент 1С

Платформа 1С умеет нативно открывать файлы .xlsx на всех операционных системах (включая Linux) без внешних библиотек и офисных пакетов с помощью объекта ТабличныйДокумент.

2. Программный код быстрой загрузки XLSX

&НаСервере
Функция ПрочитатьПрайсЛистXLSX(ИмяФайлаXLSX)
    
    ТабДок = Новый ТабличныйДокумент;
    Попытка
        // Нативное чтение файла Excel платформой
        ТабДок.Прочитать(ИмяФайлаXLSX, СпособЧтенияЗначенийТабличногоДокумента.Значение);
    Исключение
        ВызватьИсключение "Не удалось прочитать файл Excel: " + ОписаниеОшибки();
    КонецПопытки;
    
    ВсегоСтрок = ТабДок.ВысотаТаблицы;
    ВсегоКолонок = ТабДок.ШиринаТаблицы;
    
    ТаблицаРезультат = Новый ТаблицаЗначений;
    ТаблицаРезультат.Колонки.Добавить("Артикул", Новый ОписаниеТипов("Строка"));
    ТаблицаРезультат.Колонки.Добавить("Наименование", Новый ОписаниеТипов("Строка"));
    ТаблицаРезультат.Колонки.Добавить("Цена", Новый ОписаниеТипов("Число"));
    
    // Быстрый обход строк (начиная со строки 2, пропуская шапку)
    Для НомерСтроки = 2 По ВсегоСтрок Цикл
        
        Артикул = СокрЛП(ТабДок.ПолучитьОбласть(НомерСтроки, 1).Текст);
        Если ПустаяСтрока(Артикул) Тогда
            Продолжить;
        КонецЕсли;
        
        Наименование = СокрЛП(ТабДок.ПолучитьОбласть(НомерСтроки, 2).Текст);
        Цена = ТабДок.ПолучитьОбласть(НомерСтроки, 3).ТекущийОбъект; // Извлечение чистого числа
        
        НоваяСтрока = ТаблицаРезультат.Добавить();
        НоваяСтрока.Артикул = Артикул;
        НоваяСтрока.Наименование = Наименование;
        НоваяСтрока.Цена = ?(ТипЗнч(Цена) = Тип("Число"), Цена, 0);
        
    КонецЦикла;
    
    Возврат ТаблицаРезультат;
    
КонецФункции

3. Высокопроизводительное потоковое чтение больших файлов CSV

&НаСервере
Функция ПрочитатьБольшойCSV(ИмяФайлаCSV, РазделительКолонок = ";")
    
    ЧтениеТекста = Новый ЧтениеТекста(ИмяФайлаCSV, КодировкаТекста.UTF8);
    
    Таблица = Новый ТаблицаЗначений;
    Таблица.Колонки.Добавить("Код");
    Таблица.Колонки.Добавить("Количество");
    
    СтрокаТекста = ЧтениеТекста.ПрочитатьСтроку(); // Пропуск шапки
    
    СтрокаТекста = ЧтениеТекста.ПрочитатьСтроку();
    Пока СтрокаТекста <> Неопределено Цикл
        
        МассивЗначений = СтрРазделить(СтрокаТекста, РазделительКолонок, Истина);
        Если МассивЗначений.Количество() >= 2 Тогда
            СтрТаблицы = Таблица.Добавить();
            СтрТаблицы.Код = СокрЛП(МассивЗначений[0]);
            СтрТаблицы.Количество = Число(СтрЗаменить(МассивЗначений[1], " ", ""));
        КонецЕсли;
        
        СтрокаТекста = ЧтениеТекста.ПрочитатьСтроку();
    КонецЦикла;
    
    ЧтениеТекста.Закрыть();
    Возврат Таблица;
    
КонецФункции
💡 Практика специалистов: При чтении числовых колонок из ТабличногоДокумента всегда обращайтесь к свойству области Содержимое.Значение или параметру СпособЧтенияЗначенийТабличногоДокумента.Значение, чтобы не парсить отформатированные строки с неразрывными пробелами групп разрядов.

Частые вопросы (FAQ)

Почему ТабличныйДокумент лучше, чем COMОбъект('Excel.Application')?

ТабличныйДокумент работает нативно без необходимости лицензирования и установки MS Excel, функционирует в среде Linux и обрабатывает файлы в разы быстрее без риска зависания фоновых процессов excel.exe.

Как выгрузить данные в формат XLSX из ТабличногоДокумента?

Используйте метод: ТабличныйДокумент.Записать(ПутьКФайлу, ТипФайлаТабличногоДокумента.XLSX).

Что делать, если в CSV файле разделителем является запятая внутри текста?

Используйте объект ЧтениеCSV с настройкой параметров разделителей и экранирования кавычек вместо простого метода СтрРазделить().

Как определить кодировку CSV-файла (ANSI vs UTF-8)?

Проверьте наличие сигнатуры BOM (Byte Order Mark) в первых 3 байтах файла или используйте автоматическое определение через объект ЧтениеТекста без указания жесткой кодировки.

Полезные материалы
Рекомендуем