Загрузка большого объема данных из форматов .xls или .xlsx через Excel.Application часто становится «бутылочным горлышком» в производительности 1С. Рассмотрим, почему это происходит и как мы можем оптимизировать процесс, не дожидаясь долгих минут выполнения операции.
Когда мы используем Excel.Application, 1С взаимодействует с офисным приложением через OLE/COM-интерфейс. Главная проблема заключается в том, что каждое обращение к ячейке — это отдельный запрос к внешнему процессу. Если у вас 4000 строк и 10 колонок, система выполняет 40 000 «прыжков» между процессами 1С и Excel. Каждый такой запрос требует времени на сериализацию данных, что и вызывает существенные задержки.
Вместо перебора ячеек в цикле, мы можем забрать всю область данных целиком за один вызов. Это радикально ускоряет процесс, так как данные передаются одним «пакетом». Рассмотрим пример кода для реализации этой техники:
ТаблицаДанных = Новый ТаблицаЗначений();
чМаксКолонок = 30; // Укажите актуальное количество
Для чКол = 1 По чМаксКолонок Цикл
ТаблицаДанных.Колонки.Добавить("Колонка" + СокрЛП(чКол));
КонецЦикла;
// Выделяем всю область и выгружаем ее в массив
Область = Excel.Range(Excel.Cells(1, 1), Excel.Cells(ФайлСтрок, ФайлКолонок));
Данные = Область.Value.Выгрузить();
// Загружаем полученные данные в таблицу значений
Для Счетчик = 0 По ФайлКолонок - 1 Цикл
ТаблицаДанных.ЗагрузитьКолонку(Данные[Счетчик], Счетчик);
КонецЦикла;
Этот метод позволяет нам работать с данными уже внутри оперативной памяти 1С, что в десятки раз быстрее, чем постоянное обращение к внешнему объекту.
Если производительность все еще остается низкой, стоит рассмотреть отказ от Excel.Application в пользу более современных и легковесных способов:
ТабличныйДокумент.Прочитать() — штатный инструмент 1С. Он позволяет открывать файлы без необходимости установки MS Office на сервер, что экономит ресурсы и повышает стабильность системы..csv. Чтение текстового файла средствами 1С происходит практически мгновенно, так как это потоковая операция, не требующая поддержки громоздких офисных объектов..xlsx является ZIP-архивом с XML-структурой внутри, существуют специализированные компоненты, которые читают этот XML напрямую. Это самый быстрый способ обработки файлов на сегодняшний день.Часто проблема кроется не в самом чтении файла, а в том, как мы обрабатываем данные после получения. Если внутри цикла по 4000 строкам мы выполняем поиск номенклатуры в базе данных или создание объектов, время загрузки растет экспоненциально.
Рекомендуемый алгоритм работы:
ТаблицаЗначений.ВременныеТаблицы), а не одиночными запросами в цикле.Для ускорения работы в текущей обработке в первую очередь примените чтение диапазона в массив. Если этого недостаточно, переходите к использованию ТабличныйДокумент или формату CSV. Не забывайте проводить Замер производительности перед внесением правок, чтобы убедиться, что вы оптимизируете именно «тяжелый» участок кода, а не второстепенную операцию.