[MXL to XLS]

Решаем две существующие проблемы 1С:Предприятия:

    * медленное сохранение табличных документов в формате Microsoft Excel.
    * некачественное сохранение табличных документов в формате Microsoft Excel.

Проблема 1: Медленное сохранение.
=================================
Суть состоит в том, что время, которое нужно 1С для сохранения, резко возрастает при увеличении объема сохраняемого документа. Если небольшие документы объемом до 1-2 тыс. строк 1С сохраняет еще за приемлемое время, то документы объемом выше 10 тыс. строк могут сохраняться несколько часов (или даже суток).

Проблема 2: Некачественное сохранение.
======================================
Штатный конвертер 1С не отличается высоким качеством. Например, конвертер не поддерживает текст в ячейках длиной более 255 символов: при сохранении более длинный текст будет усекаться. Также не поддерживаются ячейки с поворотом текста, часто ячейки с многострочным текстом имеют высоту в одну строку, часто не переносятся многострочные объединения ячеек и другое. Подробнее можно посмотреть на этой странице: http://yoksel.net.ru/ProblemyStandartnogoMxl2Xls

Данная обработка решает эти проблемы.

Скоростные характеристики.
==========================
Отчет «Анализ продаж», 18 тыс. строк: 4,46 сек.
Отчет «Анализ продаж», 78 тыс. строк: 17,23 сек.
Отчет «Анализ продаж», 184 тыс. строк: 24,44 сек.

(Для таблиц объемом больше 65536 строк сохраняется только 65536 строк — поэтому разница между временем 78 тыс. и 184 тыс. строк невелика)

Тестовая таблица 10 тыс. строк x 256 столбцов (2,5 млн. ячеек): 57,32 сек.

Преимущества программы по сравнению с другими решениями
=======================================================

Для ускорения сохранения часто используется решение, известное под названием «патч Ромикса». Решение связано с модификацией кода 1С (патчем).
Отсюда вытекают основные проблемы решения:
— Проблемы при смене релиза 1С — при изменении релиза патч может перестать работать или вообще приведет к нестабильной работе 1С (аварийные завершения и возможность потери данных).

— Потенциальная ненадежность: т.к. исходных кодов 1С в открытом доступе нет, то и нет стопроцентной уверенности в корректности произведенной модификации.

Используемая в данной обработке внешняя компонента Йоксель не производит каких-либо модификаций исполняемого кода 1С, поэтому в ней отсутствуют указанные выше проблемы.

Другая проблема патча — «все равно медленно». В случае использования табличных документов со сложным форматирование сохранение все равно производится достаточно медленно. Компонента Йоксель сохраняет таблицы со сложным форматирование быстро.

Для решения проблем некачественного сохранения табличных документов в Excel часто применяют различные обработки, которые работает с Excel по технологии OLE-Automation и либо выполняют конвертирование документов полностью самостоятельно, либо сначала конвертируют документ стандартным конвертером, а потом исправляют допущенные конвертером ошибки.

Основной недостаток подобного решения: медленно. Обработки написаны на встроенном языке 1С:Предприятия и, значит, работают медленно, т.к. программный код интерпретируется. Далее, тормоза вносит использование OLE-Automation — данная технология никогда не предназначалась для обмена большими объемами данных.

Другой недостаток: необходимость наличия Excel. В связи с ужесточением ситуации с нелицензионным ПО, предприятия часто отказываются от использования Microsoft Office и переходят на свободное программное обеспечение (OpenOffice). Поэтому Excel может и отсутствовать. Также бывают ситуации, когда наличие Excel на компьютере нежелательно — например, в случае терминального сервера.

Компонента Йоксель не требует наличия Excel, поэтому может использоваться там, где Excel отсутствует. Также Йоксель написан на компилируемом языке — поэтому работает быстро.

Установка
=========
Для установки нужно следующее:

1) Если у вас еще не установлена FormEx или 1С++ версии 2.0, скопируйте компоненту FormEx (файл FormEx.dll) в каталог с программными файлами 1С (например, в каталог C:/Program Files/1Cv77/BIN).

2) Если у вас еще не установлена компонента Йоксель, скопируйте файл «SpreadSheet.dll» в каталог с программными файлами 1С (например, в каталог C:/Program Files/1Cv77/BIN).

(если нет возможности разместить внешние компоненты в каталоге программных файлов, то можно поместить компоненты в каталог информационной базы)

3) Скопируйте файл «Быстрое сохранение mxl в xls.ert» в подкаталог «ExtForms» каталога информационной базы.

4) В «Конфигураторе» добавьте на какую-нибудь панель инструментов кнопку следующего вида:
— Объект: «Задача».
— Команда: «Задача.Выполнить».
— Подсказка и короткая подсказка: «Сохранение таблицы в Excel»
— Параметры — Формула: «ОткрытьФорму («Отчет»,,КаталогИБ () + «ExtForms/Быстрое сохранение mxl в xls.ert»)»

Использование
=============
Переключитесь на табличный документ 1С, который требуется сохранить в Excel, и нажмите на созданную в Конфигураторе кнопку. В открывшейся форме укажите, куда следует сохранить табличный документ и нажмите кнопку «Сохранить».

28 Comments

  1. mikukrnet

    Вроде работает!

    Но 2 вопроса

    1) есть ли проверка на доступность таблицы отчета (Таб.Защита(1))?

    2) не работает, когда ПФ используется с формой самого отчета

    Reply
  2. Ужас бухгалтера

    (1)

    1. Проверки нет. Исправлю

    2. Понятно, исправлю.

    Reply
  3. Ужас бухгалтера

    Исправлено:

    1) Если таблица защищена, то сохранение в XLS отключается.

    2) Добавлено сохранение таблицы, присоединенной к форме отчета. При этом контроль защиты таблицы производится аналогично пункту 1.

    Reply
  4. Ужас бухгалтера

    Скачавшим обработку до 17 марта 2008 г. 20:37 по московскому времени рекомендуется загрузить обработку повторно или взять обновленную компоненту Йоксель со страницы хотфиксов: http://yoksel.net.ru/Hotfixes

    Исправлена серьезная ошибка: некоторые числовые значения могли сохраняться некорректно. Например, число “131540.75” сохранялось как “272630697.”.

    Reply
  5. viddik

    Баг (фича): текст, являющийся формулой Excel при конвертировании не опознается как формула. По крайней мере OpenOffice-ом. При конвертации через OLE используется свойство Ячейка.FormulaR1C1, если текст начинается с «=», и все работает. Хочу, чтоб в Йокселе тоже работало!!! 🙂

    Reply
  6. viddik

    Хотя это все-таки проблема скорее OpenOffice. Просто конвертация через мелкомягкое OLE автоматически приводит текст с ссылками в стиле R1C1 к виду A1 при необходимости, а у опена с этим проблемы…. 🙁

    Reply
  7. tikhon

    Скажите подалуйста, а работает ли эта программка с 1С.8?

    Спасибо.

    Reply
  8. Ужас бухгалтера

    (7) Здесь: http://yoksel.net.ru/Hotfixes

    можно скачать Йоксель в виде самостоятельного прилоежния (exe), которое умеет читать файлы Excel и сохранять листы из них в виде файлов mxl.

    Reply
  9. angro

    thank’s — пригодилось

    Reply
  10. Robert Ingil

    Очуметь!

    Реально помогла вещица.

    Reply
  11. Andzhej

    Вещь!

    Reply
  12. Andzhej

    Глючит. Говорит не обнаружено таблицы, хотя она есть — сформирована отчетом.

    Reply
  13. Andzhej

    а ее регить не нужно regsvr32?

    Reply
  14. Ужас бухгалтера

    Всем заинтересовавшимся данной обработкой советую также обратить внимание на эту: http://infostart.ru/projects/3387/

    Она, в принципе, тоже может использоваться для преобразования MXL->XLS, однако дополнительно еще может добавить группы строк и колонок к отчету.

    Также не забывайте обновлять SpreadSheet.dll. Обновленные версии выкладываются здесь: http://yoksel.net.ru/Hotfixes

    Reply
  15. triGGer

    Супер! То, что надо!

    Reply
  16. protas

    Да, уж! Валялась у меня одна dll`ка, все руки не доходили полазить по интернету, разобраться как ее подключить. Хотя частенько появлялась потребность именно в таком функционале. А тут — нате вам, все готовенькое.

    Спасибо !!!

    Reply
  17. BlueWind

    Натолкнулся на проблему — сохраненную как штатными средствами 1с, так и с использованием Йокселя, таблицу, в которой более 256 колонок Excel не открывает. Пишет «Невозможно прочитать файл» и далее «В книге ххх обнаружено содержимое, которое не удалось прочитать», затем предлагает восстановить, но результат никакой (Office 2003, 2007) — в сохраненной таблице присутствует 256 колонок, а за ними — пустота.

    Reply
  18. Ужас бухгалтера

    (17) Йоксель сохраняет в формате Excel 97. Там поддерживается только 256 колонок. Чтобы Excel не ругался на файлы, созданные Йокселем из документов, содержащих больше 256 колонок, нужно взять более новую версию. В новой версии проверяется количество колонок и сохраняется только 256.

    Reply
  19. BlueWind

    (18) Ясно. Спасибо.

    А может, есть возможность добавить в Йоксель поддержку Excel 2007 (в части большего количества колонок)?

    Reply
  20. Ужас бухгалтера

    (19) Возможность-то есть, но временнЫх ресурсов нет. 🙂 Когда-нибудь, может быть.

    Пока можно сохранять в mxl и с ним посылать Yoksel stand-alone, например.

    Reply
  21. BlueWind

    (20) Такой вариант я пробовал (Yoksel stand-alone 1.1.2.0) — Excel 2007 так же сообщает «В книге ххх обнаружено содержимое, которое не удалось прочитать»…

    Пока что проходит единственный вариант — это сохранение в HTML и переименование файла в xls. Excel 2007 файл принимает, но нужно перенастраивать разделители, что добавляет в схему еще один минус (первый — собственно Excel 2007, но без него уж никак в этой ситуации не обойтись)…

    Будем как-то извращаться.. и ждать появления временнЫх ресурсов..)

    Reply
  22. Ужас бухгалтера

    (21) Это старая версия. Новая здесь: http://yoksel.net.ru/Hotfixes

    Я имел в виду не поддержку количества столбцов. А просто отсылку контрагенту обычного mxl-файла вместе с Yoksel.exe в качестве вьюера. У mxl уже нет таких ограничений на количество колонок.

    Reply
  23. wad_str

    Работает! Только проблемка с сохранением на сетевые ресурсы, ( база на сервере, а на раб станцию не сохраняет)

    Reply
  24. VladimirV

    очень помогла эта обработка при выгрузки в excel отчетов с програмно объединенными ячеками. Спасибо

    Reply
  25. cargobird

    Сделал на её основе отправку по почте печатной формы документа в экселевском формате, спасибо!

    Reply
  26. e-lexa

    Работает отлично, но если сохранять на сетевые ресурсы время сохранения увеличивается с нескольких секунд до нескольких минут.

    Reply
  27. Solikamsk

    Долгое время пользовались этой обработкой, пока не появились диаграммы — она с диаграммами не работает.. Я попробовал 1cv8fv.exe от 1С, но там сетку не выводит, плюс другие ошибки формата.. Какие-то есть обходные варианты? Сохранить внешними компонентами график в файл, вставить как картинку?…

    Reply
  28. CheBurator

    Посмотри обработку Маляева по расширению возможности графики

    Reply

Leave a Comment

Ваш адрес email не будет опубликован. Обязательные поля помечены *