Как ускорить сохранение больших табличных документов из 1С в Excel

Программист 1С v8.3 (Управляемые формы) 1С:ERP Управление предприятием Управленческий учет Торговля и дистрибуция
← На главную

При формировании объемных отчетов, каталогов продукции и индивидуальных прайс-листов на десятки тысяч строк разработчики часто сталкиваются с существенным падением производительности при выгрузке данных в форматы электронных таблиц. Сохранение файла объемом 20 000–30 000 строк стандартными средствами платформы может занимать от одной до нескольких минут, что блокирует интерфейс пользователя и перегружает серверные процессы. Разберем по шагам, почему происходит замедление и какими методами можно многократно ускорить экспорт табличного документа.

Переход с формата XLS на XLSX и перенос выгрузки на сервер

Выясним причину длительного формирования файла на базовом уровне. Устаревший формат XLS (Excel 97–2003) использует бинарную структуру BIFF8, для сериализации которой платформе 1С требуется производить сложные расчеты смещений и индексов. Современный формат XLSX (OpenXML) представляет собой сжатый ZIP-архив с XML-документами, запись которого оптимизирована в платформе на порядки лучше.

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

Сравним производительность различных вариантов выгрузки документа объемом около 30 000 строк:

  1. Выгрузка в формате XLS на клиенте — около 70–75 секунд.
  2. Выгрузка в формате XLSX на клиенте — около 20 секунд.
  3. Выгрузка в формате XLSX на сервере — около 4 секунд.

Посмотрим на пример правильной организации серверного сохранения файла:


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

Оптимизация макета и отключение авторасчета геометрии строк

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

Для ускорения построения и выгрузки документа рекомендуется придерживаться следующих правил оформления:

  1. Фиксированная высота строк. Выделите строки области данных и установите для них фиксированную высоту в пунктах, отключив свойство АвтоВысотаСтроки.
  2. Заголовки без изменения масштаба базовых строк. Если в шапке документа требуется крупный шрифт или высокий блок, не меняйте высоту одиночной строки макета, а объединяйте две стандартные строки одинаковой высоты.
  3. Минимизация количества уникальных стилей. Каждая новая комбинация цвета фона, шрифта, рамок и выравнивания порождает отдельный дескриптор стиля в структуре OpenXML. Сокращение числа стилей оформления ускоряет сериализацию данных.
  4. Отключение неиспользуемых визуальных параметров. Если клиенту не требуется отображение служебных сеток платформы, перед сохранением задайте свойства ТабличныйДокумент.ОтображатьСетку = Ложь и ТабличныйДокумент.ОтображатьЗаголовки = Ложь.

Оптимизация работы с графическими объектами

Когда прайс-лист содержит тысячи миниатюр номенклатуры, каждый рисунок помещается в коллекцию Рисунки табличного документа. При экспорте в XLSX платформа генерирует для каждого изображения отдельный XML-узел привязки и упаковывает бинарный файл в структуру архива, что резко увеличивает расход оперативной памяти и время работы потока rphost.

Рассмотрим комплекс мер по оптимизации выгрузки документов с графикой:

  1. Предварительное сжатие изображений. Не выводите в отчет исходные фотографии высокого разрешения. Перед вставкой в табличный документ масштабируйте картинки до целевого размера превью (например, 100х100 или 100х200 пикселей) и сохраняйте их с умеренным уровнем сжатия.
  2. Использование внешних ссылок. Если медиафайлы товаров уже размещены на корпоративном веб-сервере или CDN, вместо встраивания бинарных картинок в ячейки можно помещать гиперссылки на изображения. Это сократит размер итогового файла и время выгрузки в десятки раз.

Вынос генерации и сохранения в фоновые задания

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

Разберем организацию фонового формирования:

  1. Менеджер в форме отчета выбирает клиента, соглашение и нажимает кнопку выгрузки.
  2. Система запускает фоновое задание через ФоновыеЗадания.Выполнить(), передавая параметры формирования.
  3. Пользователь продолжает работу с программой, не ожидая окончания процесса.
  4. После завершения процедуры в фоновом задании готовый файл сохраняется в сетевую папку, прикрепляется к карточке клиента или автоматически отправляется на почту.

Посмотрим на пример кода запуска фонового сохранения:


&НаСервере
Функция ЗапуститьФормированиеПрайсаФоном(ПараметрыОтчета)
    ПараметрыЗадания = Новый Массив;
    ПараметрыЗадания.Добавить(ПараметрыОтчета);
    
    Задание = ФоновыеЗадания.Выполнить(
        "Обработки.ВыгрузкаПрайсЛистов.СформироватьИСохранитьФайл",
        ПараметрыЗадания,
        ,
        "Формирование прайс-листа для клиента"
    );
    
    Возврат Задание.УникальныйИдентификатор;
КонецФункции

Настройка серверного окружения

Процесс сохранения файла в формате XLSX активно использует каталог временных файлов сеанса (Temp) для распаковки, сборки XML-дерева и последующей упаковки в ZIP-архив. Если серверное окружение настроено неоптимально, дисковые задержки могут нивелировать оптимизацию кода.

Для устранения узких мест в инфраструктуре выполните следующие настройки:

  1. Исключения антивирусного ПО. Обязательно добавьте рабочие каталоги кластера серверов 1С и системную папку временных файлов службы 1С (профиля пользователя, от имени которого запущен сервер) в список исключений антивируса реального времени. Постоянное сканирование создаваемых XML-фрагментов замедляет выгрузку в несколько раз.
  2. Быстрый накопитель для временных файлов. Разместите системные каталоги TEMP и TMP сервера 1С на высокоскоростных NVMe-дисках или настройте RAM-диск в оперативной памяти, если сервер регулярно выполняет массовые выгрузки тяжелых отчетов.
← На главную