Почему тормозит выгрузка в Excel из 1С 7.7 в терминальном сеансе RDP и как ускорить работу обработки?

Программист 1С v7.7 1С:Зарплата и Управление Персоналом IT и автоматизация бизнеса
← На главную

При работе в терминальном сервере (RDP) на базе Windows Server пользователи часто сталкиваются с ситуацией, когда внешняя обработка или отчет в 1С 7.7 выполняется значительно дольше, чем при локальном запуске. На первый взгляд может казаться, что проблема кроется в настройках RDP-клиента или операционной системы на клиентской машине. Однако детальный анализ показывает, что разница в скорости выполнения операций чаще всего связана с особенностями работы с внешними COM-объектами, такими как MS Excel.

Разберем по шагам, как локализовать узкое место с помощью встроенных инструментов 1С 7.7, проанализируем физические причины замедления и рассмотрим проверенные способы ускорения выгрузки данных.

Шаг 1. Локализация проблемы с помощью отладчика 1С 7.7

Прежде чем менять настройки сервера или переписывать код, необходимо измерить точное время выполнения каждого участка обработки. В платформе 1С 7.7 для этого предусмотрен специальный режим работы.

Выполним диагностику алгоритма:

  1. При запуске базы 1С вместо режима 1С:Предприятие или Конфигуратор выберем режим Отладчик.
  2. В открывшемся окне отладчика включим модуль замера производительности (иконка с изображением секундомера на панели инструментов).
  3. Запустим сеанс «1С:Предприятие» из отладчика и выполним проблемную обработку.
  4. Вернемся в отладчик и остановим замер.

Проанализируем полученный отчет замера: если более 80–90% времени выполнения уходит на строки взаимодействия с OLE-объектом Excel.Application (заполнение ячеек, форматирование, создание листов), значит, причина задержки лежит именно во взаимодействии 1С с процессом Excel через COM-интерфейс.

Шаг 2. Почему OLE-автоматизация Excel работает медленно в RDP

Выясним, почему поочередное заполнение ячеек Excel из 1С 7.7 тормозит в терминальной сессии:

Шаг 3. Оптимизация кода взаимодействия с MS Excel через OLE

Если отказаться от использования COM-объекта Excel невозможно, существенно ускорить работу обработки поможет отключение визуальных и вычислительных функций Excel на время заполнения таблицы.

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


// Создаем OLE-объект
Попытка
    Эксель = СоздатьОбъект("Excel.Application");
Исключение
    Предупреждение("Не удалось создать объект MS Excel!");
    Возврат;
КонецПопытки;

// Отключаем обновление экрана и автоматический пересчет формул
Эксель.Visible = 0;
Эксель.ScreenUpdating = 0;
Эксель.DisplayAlerts = 0;
Эксель.Calculation = -4135; // xlCalculationManual (-4135)

// Открываем или создаем рабочую книгу
Книга = Эксель.Workbooks.Open("D:\Templates\Blank.xls");
Лист = Книга.Worksheets(1);

// Выполняем заполнение ячеек в цикле...
// ...

// Возвращаем настройки в исходное состояние
Эксель.Calculation = -4105; // xlCalculationAutomatic (-4105)
Эксель.ScreenUpdating = 1;

// Сохраняем и корректно завершаем работу
Книга.SaveAs("D:\Reports\Result.xls");
Книга.Close(0);
Эксель.Quit();

// Освобождаем переменную
Эксель = ПолучитьПустоеЗначение();

Важно: Вызовы ScreenUpdating = 0 и Calculation = -4135 способны сократить время формирования печатной формы в 3–5 раз, так как Excel прекращает перерисовку графики и расчет формул до полного завершения передачи данных.

Шаг 4. Альтернативные способы формирования документов Excel без OLE

Для кардинального решения проблемы скорости рекомендуется полностью отказаться от поочередного заполнения ячеек через OLE-автоматизацию. Рассмотрим более эффективные подходы.

Способ А. Использование штатной печатной формы 1С с сохранением в XLS

Наиболее простой и быстрый метод — сформировать документ через стандартную печатную форму 1С 7.7 (объект Таблица) и затем сохранить ее в формате Excel.


Таб = СоздатьОбъект("Таблица");
Таб.ИсходнаяТаблица("Макет");

// Заполняем секции макета
Пока Выборка.ПолучитьЭлемент() = 1 Цикл
    Таб.ВывестиСекцию("Строка");
КонецЦикла;

// Сохраняем в файл Excel напрямую
Таб.Записать("D:\Reports\Result.xls", "XLS");

Обратите внимание: чтобы строки в итоговом файле Excel не съезжали и именовались корректно, в макете печатной формы 1С рекомендуется задавать фиксированную высоту строк и избегать пересечения объединений ячеек.

Способ Б. Внешние компоненты прямого экспорта (Yoksel / Ёксель)

Для создания сложных отчетов Excel с точным форматированием, границами и цветам без использования самого MS Excel применяется бесплатная внешняя компонента Yoksel (Ёксель).

Преимущества использования Yoksel:

Шаг 5. Настройка системного окружения на терминальном сервере

Для исключения задержек со стороны операционной системы Windows Server проверим следующие настройки серверной среды:

  1. Принтер по умолчанию: Установим по умолчанию для терминальных пользователей локальный виртуальный принтер (например, Microsoft XPS Document Writer). Это предотвратит задержки Excel при опросе сетевых драйверов печати.
  2. Перенаправление принтеров в RDP: В свойствах RDP-подключения отключим проброс локальных принтеров клиента, если печать отчетов из терминала не требуется.
  3. Проверка фоновых процессов: Через диспетчер задач Windows установим регулярный мониторинг и завершение «зависших» процессов EXCEL.EXE от завершенных пользователей.

Подводя итог: если обработка в 1С 7.7 долго формирует файл Excel в RDP, следует оценить время работы кода через отладчик, отключить обновление экрана OLE-объекта ScreenUpdating = 0 и предусмотреть обязательное закрытие книги методом Quit(), либо перевести формирование отчетов на использование штатной таблицы 1С или внешних компонент типа Yoksel.

← На главную