Каждый разработчик и администратор систем на платформе 1С:Предприятие 7.7 рано или поздно сталкивается с проблемой, когда при попытке сохранить большой отчет (объемом более 3000–5000 строк) в формате Excel система буквально «зависает». Процесс сохранения может занимать десятки минут, а иногда и часы, загружая процессор компьютера на 100%. При этом стандартный механизм часто обрезает строки, искажает цвета или выдает ошибки нехватки памяти.
В этой статье мы подробно разберем причины такого поведения платформы 1С 7.7, выясним, почему стандартный движок работает так медленно на современных операционных системах вроде Windows 7 и Windows 10, а также рассмотрим несколько эффективных способов решения этой проблемы — от простых организационных лайфхаков до интеграции профессиональных внешних компонент.
Для того чтобы эффективно бороться с проблемой, проанализируем архитектуру работы старого табличного движка 1С 7.7. За вывод и формирование печатных форм отвечает библиотека Moxel.dll. При экспорте в формат XLS (Excel) платформа использует устаревший стандарт Excel 5.0/95.
Основной «затык» производительности связан с механизмом расчета высоты строк. Если в свойствах ячеек табличного документа установлено свойство «Автовысота», движок 1С начинает циклически пересчитывать высоту каждой ячейки относительно других элементов строки. На больших массивах данных этот алгоритм приобретает квадратичную зависимость производительности от объема данных. Программа постоянно обращается к функциям отрисовки операционной системы для вычисления геометрических размеров текста, что приводит к колоссальным потерям времени.
Кроме того, формат Excel 5.0 накладывает жесткие ограничения на количество строк на одном листе (до 65 536 строк), обрезает длину текста в одной ячейке до 255 символов и существенно искажает цветовую палитру.
---
Если вам необходимо ускорить сохранение отчета «прямо сейчас» без установки сторонних библиотек и изменения конфигурации, мы можем воспользоваться простым свойством макета.
Как мы выяснили, основное время тратится на расчет автовысоты. Если мы принудительно зададим фиксированную высоту для строк, выгрузка произойдет в разы быстрее. Давайте разберем, как реализовать это по шагам:
Если печатная форма генерируется программно, мы можем принудительно установить высоту строк перед выводом или сохранением файла с помощью встроенного языка 1С 7.7:
// Пример фиксации высоты строк программным путем
Таб = СоздатьОбъект("Таблица");
// ... код заполнения таблицы данными ...
Для Ном = 1 По Таб.ВысотаТаблицы() Цикл
Таб.Область(Ном, 1, Ном, Таб.ШиринаТаблицы()).ВысотаСтроки(15);
КонецЦикла;
Таб.Записать("C:\Otchet.xls", "XLS");
После применения фиксированной высоты процесс сохранения даже очень больших документов (до 10 000 строк) сократится с десятков минут до нескольких секунд.
---
Использование компоненты Йоксель — это лучшее и наиболее стабильное решение для работы с электронными таблицами в среде 1С 7.7. Данная библиотека полностью заменяет стандартный конвертер 1С своим собственным, оптимизированным алгоритмом.
Преимущества использования «Йокселя»:
Чтобы задействовать Йоксель в конфигурации, необходимо загрузить компоненту при старте системы и переписать код выгрузки отчета. Давайте посмотрим на пример реализации:
// Загрузка внешней компоненты в Глобальном модуле или перед выгрузкой
Если ЗагрузитьВнешнююКомпоненту("ConvertorXLS.dll") = 0 Тогда
Предупреждение("Не удалось загрузить компоненту Йоксель!");
Возврат;
КонецЕсли;
// Создание объекта конвертера Йоксель
Конвертер = СоздатьОбъект("КонвертерXLS");
// Передаем стандартную таблицу 1С в конвертер и сохраняем в файл
Конвертер.ЗаписатьВФайл(Таб, "C:\MyReport.xls");
При таком подходе пользователи даже не заметят промежуточных шагов, а файлы будут сохраняться мгновенно.
---
Автор темы столкнулся с проблемой регистрации библиотеки mxl_doctor.dll от разработчика Ромикса. Данная библиотека также предназначена для ускорения работы с таблицами за счет патчинга функций в памяти процесса 1cv7.exe.
Причина ошибки регистрации кроется в разрядности операционной системы. Если вы запускаете стандартный regsvr32 из системной директории 64-битной Windows, система пытается зарегистрировать ее как 64-битную библиотеку, в то время как 1С 7.7 и ее библиотеки являются 32-битными.
Разберем по шагам правильный алгоритм регистрации:
SysWOW64. Введите следующую команду:%systemroot%\SysWoW64\regsvr32.exe "C:\ПутьКФайлу\mxl_doctor.dll"
plugin_mxl_doctor.ini, обязательно положите его в каталог исполняемых файлов 1С (папка BIN, где находится файл 1cv7.exe). Саму библиотеку также рекомендуется скопировать туда же для избежания конфликтов путей.В качестве альтернативы «доктору» в сообществе разработчиков популярна библиотека MxlBoost.dll. Она работает точечно, перехватывая вызовы расчета высоты строк, и не требует сложной регистрации в системном реестре Windows. Достаточно просто положить ее в папку BIN или каталог базы данных и прописать инициализацию в коде:
// Инициализация MxlBoost при начале работы системы
Если ЗагрузитьВнешнююКомпоненту("MxlBoost.dll") = 1 Тогда
Попытка
Буст = СоздатьОбъект("MXLBoost");
Буст.Ускорить();
Сообщить("Модуль оптимизации таблиц успешно активирован.");
Исключение
Сообщить("Не удалось запустить оптимизацию таблиц.");
КонецПопытки;
КонецЕсли;
После активации метода Ускорить() стандартное сохранение через меню «Файл — Сохранить как...» начнет работать в десятки раз быстрее без необходимости переписывать код конкретных отчетов.
---
Рассмотрим еще один интересный и элегантный обходной путь, который выручит вас, если на рабочих станциях пользователей заблокирована возможность регистрации сторонних библиотек и компонент политиками безопасности.
Этот метод заключается в сохранении табличного документа в формате HTML4 с последующим открытием в Microsoft Excel:
.html-файл. Excel прекрасно понимает разметку HTML4, корректно отобразит все цвета, шрифты, формулы отображения и ширину колонок.Этот способ позволяет пользователям самостоятельно выгружать отчеты объемом более 65 000 строк (что физически невозможно сделать напрямую в XLS средствами 1С 7.7 из-за ограничений формата Excel 5.0).
---
Мы проанализировали основные пути решения проблемы медленного сохранения документов в Excel из 1С 7.7. Подведем итоги:
SysWOW64.