Как корректно читать «поврежденные» файлы Excel в регламентных заданиях 1С?

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

Разработчики часто сталкиваются с ситуацией, когда файлы, полученные от контрагентов, при открытии через ТабличныйДокумент в 1С выдают ошибки или читаются некорректно. При этом, если открыть такой файл в обычном приложении Excel, программа выдает предупреждение о повреждении, но после нажатия кнопки «ОК» успешно отображает данные. Использование COM-объекта Excel.Application на сервере — это решение, которое со временем приводит к зависаниям процесса и блокировке регламентных заданий. Рассмотрим, как решить эту задачу более надежным способом.

Почему возникают проблемы при чтении XLS-файлов?

Основная причина заключается в том, что сторонние генераторы отчетов (старые системы, самописные модули на PHP, Java) создают файлы, которые лишь имитируют формат .xls, но нарушают внутреннюю структуру BIFF. ТабличныйДокумент в 1С очень строг к форматам, поэтому он не умеет «прощать» такие огрехи, в отличие от самого Excel, который выполняет процедуру автоматического восстановления при открытии.

Решение проблемы через конвертацию в XLSX

Самый стабильный способ обработки таких «кривых» файлов — предварительная конвертация их в современный формат .xlsx с помощью сторонних инструментов перед тем, как передавать их на чтение в 1С. Поскольку формат .xlsx представляет собой набор XML-файлов в архиве, он гораздо менее чувствителен к ошибкам генерации, и платформа 1С читает его гораздо корректнее.

Для автоматизации этого процесса на сервере рекомендуется использовать консольные утилиты или внешние конвертеры, которые не требуют запуска полноценного Excel.

Пошаговый алгоритм реализации

  1. Получение файла: Загрузите файл из ХранилищеЗначения во временную папку на сервере.
  2. Конвертация: Используйте внешнюю утилиту (конвертер) для перевода файла из формата .xls в .xlsx.
  3. Чтение: Считайте полученный «здоровый» файл с помощью стандартных методов 1С.
  4. Очистка: Удалите временные файлы после завершения регламентного задания, чтобы не забивать диск сервера.

Пример запуска конвертации из 1С

Чтобы запустить утилиту для конвертации из кода 1С, воспользуйтесь методом ЗапуститьПриложение. Рассмотрим пример того, как это можно реализовать программно:


// Путь к файлам
ПутьКФайлуXLS = ПолучитьИмяВременногоФайла("xls");
ПутьКФайлуXLSX = СтрЗаменить(ПутьКФайлуXLS, ".xls", ".xlsx");

// Команда для запуска стороннего конвертера (пример)
Команда = "C:\Tools\Converter.exe " + ПутьКФайлуXLS + " " + ПутьКФайлуXLSX;

ЗапуститьПриложение(Команда, , Истина, КодВозврата);

Если КодВозврата = 0 Тогда
    // Теперь читаем исправленный файл
    ТД = Новый ТабличныйДокумент;
    ТД.Прочитать(ПутьКФайлуXLSX);
    // Дальнейшая обработка данных
КонецЕсли;

Альтернативные подходы

Если конвертация не подходит, можно рассмотреть следующие варианты:

Подводя итог, откажитесь от идеи использования Excel.Application в серверном коде. Стабильность системы 1С важнее попыток «починить» поврежденные файлы силами COM-объекта, который не предназначен для серверной среды. Предварительная конвертация — это лучший выбор для обеспечения отказоустойчивости ваших регламентных заданий.

← На главную