gifts2017

[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, и нажмите на созданную в Конфигураторе кнопку. В открывшейся форме укажите, куда следует сохранить табличный документ и нажмите кнопку "Сохранить".

Скачать файлы

Наименование Файл Версия Размер Кол. Скачив.
-
.1205122064 1,01Mb
25.09.09
819
.1205122064 1,01Mb 819 Бесплатно

См. также

Подписаться Добавить вознаграждение

Комментарии

1. MIKUKRNET (mikukrnet) 12.03.08 12:27
Вроде работает!

Но 2 вопроса
1) есть ли проверка на доступность таблицы отчета (Таб.Защита(1))?
2) не работает, когда ПФ используется с формой самого отчета
samamoiloff; Ужас бухгалтера; +2 Ответить 2
2. Ужас бухгалтера (Ужас бухгалтера) 12.03.08 12:32
(1)
1. Проверки нет. Исправлю
2. Понятно, исправлю.
samamoiloff; +1 Ответить
3. Ужас бухгалтера (Ужас бухгалтера) 17.03.08 09:45
Исправлено:
1) Если таблица защищена, то сохранение в XLS отключается.
2) Добавлено сохранение таблицы, присоединенной к форме отчета. При этом контроль защиты таблицы производится аналогично пункту 1.
samamoiloff; +1 Ответить
4. Ужас бухгалтера (Ужас бухгалтера) 17.03.08 20:35
Скачавшим обработку до 17 марта 2008 г. 20:37 по московскому времени рекомендуется загрузить обработку повторно или взять обновленную компоненту Йоксель со страницы хотфиксов: http://yoksel.net.ru/Hotfixes

Исправлена серьезная ошибка: некоторые числовые значения могли сохраняться некорректно. Например, число “131540.75” сохранялось как “272630697.”.
samamoiloff; +1 Ответить
5. Дмитрий Иванов (viddik) 17.04.08 12:52
Баг (фича): текст, являющийся формулой Excel при конвертировании не опознается как формула. По крайней мере OpenOffice-ом. При конвертации через OLE используется свойство Ячейка.FormulaR1C1, если текст начинается с "=", и все работает. Хочу, чтоб в Йокселе тоже работало!!! :)
6. Дмитрий Иванов (viddik) 17.04.08 13:06
Хотя это все-таки проблема скорее OpenOffice. Просто конвертация через мелкомягкое OLE автоматически приводит текст с ссылками в стиле R1C1 к виду A1 при необходимости, а у опена с этим проблемы.... :(
7. Тихон (tikhon) 10.06.08 11:21
Скажите подалуйста, а работает ли эта программка с 1С.8?

Спасибо.
8. Ужас бухгалтера (Ужас бухгалтера) 10.06.08 21:12
(7) Здесь: http://yoksel.net.ru/Hotfixes
можно скачать Йоксель в виде самостоятельного прилоежния (exe), которое умеет читать файлы Excel и сохранять листы из них в виде файлов mxl.
9. angro (angro) 09.08.08 14:31
10. Robert Ingil (Robert Ingil) 19.02.09 15:55
Очуметь!
Реально помогла вещица.
12. Mister-X (Andzhej) 22.03.09 02:55
Глючит. Говорит не обнаружено таблицы, хотя она есть - сформирована отчетом.
13. Mister-X (Andzhej) 22.03.09 03:07
а ее регить не нужно regsvr32?
14. Ужас бухгалтера (Ужас бухгалтера) 17.06.09 08:04
Всем заинтересовавшимся данной обработкой советую также обратить внимание на эту: http://infostart.ru/projects/3387/
Она, в принципе, тоже может использоваться для преобразования MXL->XLS, однако дополнительно еще может добавить группы строк и колонок к отчету.

Также не забывайте обновлять SpreadSheet.dll. Обновленные версии выкладываются здесь: http://yoksel.net.ru/Hotfixes
misha3010; +1 Ответить
15. Антон (triGGer) 30.10.09 12:58
16. Михаил Протас (protas) 30.11.09 20:27
Да, уж! Валялась у меня одна dll`ка, все руки не доходили полазить по интернету, разобраться как ее подключить. Хотя частенько появлялась потребность именно в таком функционале. А тут - нате вам, все готовенькое.
Спасибо !!!
17. Владимир Большов (BlueWind) 02.07.10 22:46
Натолкнулся на проблему - сохраненную как штатными средствами 1с, так и с использованием Йокселя, таблицу, в которой более 256 колонок Excel не открывает. Пишет "Невозможно прочитать файл" и далее "В книге ххх обнаружено содержимое, которое не удалось прочитать", затем предлагает восстановить, но результат никакой (Office 2003, 2007) - в сохраненной таблице присутствует 256 колонок, а за ними - пустота.
18. Ужас бухгалтера (Ужас бухгалтера) 05.07.10 00:11
(17) Йоксель сохраняет в формате Excel 97. Там поддерживается только 256 колонок. Чтобы Excel не ругался на файлы, созданные Йокселем из документов, содержащих больше 256 колонок, нужно взять более новую версию. В новой версии проверяется количество колонок и сохраняется только 256.
19. Владимир Большов (BlueWind) 05.07.10 01:42
(18) Ясно. Спасибо.

А может, есть возможность добавить в Йоксель поддержку Excel 2007 (в части большего количества колонок)?
20. Ужас бухгалтера (Ужас бухгалтера) 05.07.10 18:09
(19) Возможность-то есть, но временнЫх ресурсов нет. :) Когда-нибудь, может быть.
Пока можно сохранять в mxl и с ним посылать Yoksel stand-alone, например.
21. Владимир Большов (BlueWind) 06.07.10 02:38
(20) Такой вариант я пробовал (Yoksel stand-alone 1.1.2.0) - Excel 2007 так же сообщает "В книге ххх обнаружено содержимое, которое не удалось прочитать"...

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

Будем как-то извращаться.. и ждать появления временнЫх ресурсов..)
22. Ужас бухгалтера (Ужас бухгалтера) 06.07.10 10:32
(21) Это старая версия. Новая здесь: http://yoksel.net.ru/Hotfixes

Я имел в виду не поддержку количества столбцов. А просто отсылку контрагенту обычного mxl-файла вместе с Yoksel.exe в качестве вьюера. У mxl уже нет таких ограничений на количество колонок.
23. Вадим Комиссаренко (wad_str) 17.11.11 06:56
Работает! Только проблемка с сохранением на сетевые ресурсы, ( база на сервере, а на раб станцию не сохраняет)
24. Владимир Чуркин (VladimirV) 17.11.11 07:51
очень помогла эта обработка при выгрузки в excel отчетов с програмно объединенными ячеками. Спасибо
25. daniilvm (cargobird) 07.06.12 21:29
Сделал на её основе отправку по почте печатной формы документа в экселевском формате, спасибо!
26. Lexa О (e-lexa) 10.08.12 07:04
Работает отлично, но если сохранять на сетевые ресурсы время сохранения увеличивается с нескольких секунд до нескольких минут.
Для написания сообщения необходимо авторизоваться
Прикрепить файл
Дополнительные параметры ответа