gifts2017

Выгрузка в Excel больших отчетов

Опубликовал Victor Nespyatin (victuan) в раздел Программирование - Практика программирования

1С не позволяет сохранить в Excel отчеты с большим количеством ячеек (например, 100 столбцов на 10 000 строк).
Моя обработка позволяет решить эту проблему.
НЕ использует никаких внешних компонент!!!

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

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

Наименование Файл Версия Размер Кол. Скачив.
-
.zip 14,50Kb
25.09.09
1046
.zip 14,50Kb 1046 Скачать

См. также

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

Комментарии

1. AntonRost (antonrost) 28.09.06 14:19
Что-то не скачивается. :(
Хотел сравнить со своим: http://infostart.ru/projects/download.php?id=259&file=270&ref=825
2. VasilyKushnir (vasilykushnir) 28.09.06 16:45
А все-таки зыркни на http://infostart.ru/projects/download.php?id=259&file=270&ref=440 - там тоже не хилая скорость и без изворотов с маленькими файлами.
3. Сhe Burashka (CheBurator) 29.09.06 00:06
Выкиньте эту бяку и пользуйте нормальный продукт, который позволяет делать тоже самое не заморачиваясь: всего 5 строк кода и все работает как надо и не надо ни о чем беспокоиться, для тех, кто не имеет возможности программировать здесь лежит готовое решение (в нем же даны ссылки на человека, сделавшего возможным такую чудную вещь:
http://www.infostart.ru/projects/index.php?id=323&ref=174

И, чтоб не быть голословным: отзыв юзера:
"Прикраснейшая програ! Прайс который сам создавался 7 минут на 20280 строк выгрузился за 12,7 секунды!!!!! Обалдеть!!! Стандартным способом Сохранить как.. на это уходило часов 10-11!!! Класс! Тест проходил на машине - 2 x Intel Xeon 3,2 Ггц DDR2 4 Гига....

Разработку victuan имеет смысл юзать там, где политикой запрещено использование ВК.
4. Victor Nespyatin (victuan) 29.09.06 10:46
Ну что ж. Приятно что есть реакция на мои обработки. Эта обработку я перекинул с 1c.proclub.ru. Сделал я еще до того как была написана упомянутая Che Burashka ВК. В принципе, видимо, моя обработка отыграла уже свою роль, и, если не будет возражений, я ее уберу.
5. Сhe Burashka (CheBurator) 29.09.06 12:48
Не надо! Если работает как надо - пусть будет, кому-то подойдет именно эта.
6. Victor Nespyatin (victuan) 30.09.06 10:44
7. Димыч 11.10.06 19:56
просто все клас. все нормально работает....
8. Anonymous 12.10.06 06:16
Господа комментирующие! Просьба "плюсовать" рейтинг! Для меня это будет бОльшая благодарность, чем высказываение типа "просто класс!"
9. JannyFan (JannyFan31) 24.07.07 10:57
Приятно, что есть такие обработки. Эта обработка подвигла меня на написание новых хороших отчетов в 1С. Хорошо то, что не нужно никаких доп. компонент вталкивать, перенести можно в любой момент и все. В отчете есть она и хорошо, заморочно всегда тащить гору библиотек, показывая какойе ты у..... А то, что говорят про эту вещь разные критиканы так понятно - завидуют.
10. gavrish (Gavrish) 26.02.08 13:46
А может кто решал похожие задачи:
- сохранения из 1С в excel в одной ячейке более 256 символов (символы теряются пр сохранении, хотя в самом excel такого ограничения нет), разбивать текст на части не решает вопрос
- не сохраняется вертикальный текст, хотя в обеих программах возможность вывода такого текста есть.
Спасибо за информацию
11. Ужас бухгалтера (Ужас бухгалтера) 26.02.08 13:53
(10) Я решал. Здесь: http://yoksel.net.ru/HomePage
В частности, по 256 символов на ячейку и вертикальный текст здесь: http://yoksel.net.ru/ProblemyStandartnogoMxl2Xls
12. Victor Nespyatin (victuan) 03.03.08 06:54
Вот хорошее решение описанной задачи без использования ВК: http://1c.proclub.ru/modules/mydownloads/personal.php?cid=5&lid=2188
13. Ужас бухгалтера (Ужас бухгалтера) 03.03.08 07:49
(12) Без ВК, зато с использованием Excel по OLE-automation. И за что боролись?
14. Аркадий Кучер (Abadonna) 03.03.08 08:12
(13) Целиком и полностью поддерживаю. Чтобы я на терминальный сервер пустил MS Office - да ни в жизнь ;)))
15. Сергей (Sevko) 17.03.08 15:32
У меня куча отчетов со строками под 50 - 60 тыс. Естественно записать все это в Excel - один гемморой (лично я это через 8-ку делаю, благо стоит вместе с 7-кой). Попробовал воспользоваться данной разработкой и сразу же столкнулся с глюком. Отчет в 65000 строк , 14 колонок. Сравнил одну из колонок с оригиналом и выявил 20 различий, в различных строках:
Получилось Надо
272630697. 131540.75
272630697. 131540.75
272796979. 214681.75
272682809. 157596.75
273193696.00 603585.00
272682776. 157580.25
272956554.00 326794.50
272675768. 154076.25
272748970. 190677.25
272809415. 220899.75
13157.24 1315725.00
13157.24 1315725.00
273447810.00 1175050.00
31737.28 3173730.00
31737.28 3173730.00
14674.84 1467485.00
2735151.41 1444375.00
14674.84 1467485.00
273340841.00 897875.00
273723054.00 2454900.00
16. Victor Nespyatin (victuan) 18.03.08 06:44
1С не всегда правильно сохраняет данные в Эксель.
Проверь выравнивание тескта в этих строках, оно должно быть по правому краю и текст должен быть без лишних знаков препинания. В остальных случаях, не гарантирую верную конвертацию.

Также попробуй воспользоваться альтернативными обработками:
http://infostart.ru/projects/323/
http://yoksel.net.ru/HomePage

А вообще, насколько быстро сохраняет твои отчеты моя разработка? Мне просто интересно.
17. Сергей (Sevko) 18.03.08 10:45
После исправлений http://yoksel.net.ru/Hotfixes все нормализовалось.
Таблицу в 65500 строк и 14 столбцов сохраняет за 32 сек.
Жаль что нет возможности сохранять более 65536 строк (ограничение Excel) - можно было бы разбивать, скажем, на отдельные листы.
18. Аркадий Кучер (Abadonna) 18.03.08 11:15
>перенести можно в любой момент и все.
При одном мААААААААААленьком условии - на компе должен Excel стоять
19. Сергей (Sevko) 18.03.08 11:18
Предлагаю немного дописать код обработки Быстрое сохранение mxl в xls.ert.
В результате мы получаем название файла из названия отчета. В 99% случаев - срабатывает. Помоему удобно.

Если ВсеНормально = 1 Тогда
Сервис = СоздатьОбъект ("Сервис");
Если Сервис.АктивныйКонтекст (гТаблица) = 0 Тогда
Сообщить ("Нет активного табличного документа");
ВсеНормально = 0;
Иначе
Если ТипЗначенияСтр (гТаблица) <> "Таблица" Тогда
Сообщить ("Нет активного табличного документа");
ВсеНормально = 0;
Иначе
//>>> мои строки
Для НомСтроки=1 По 7 Цикл
НомКолонки = 1;
Если ПустаяСтрока(гТаблица.Область(НомСтроки,НомКолонки).Текст)=1 Тогда
НомКолонки = 2;
КонецЕсли;
РазмерШрифта = гТаблица.Область(НомСтроки,НомКолонки).РазмерШрифта();
Если РазмерШрифта>9 Тогда
ВыбИмяФайла = ФС.ТекКаталог()+"\"+СокрЛП(гТаблица.Область(НомСтроки,НомКолонки).Текст)+".xls";
Прервать;
КонецЕсли;
КонецЦикла;
//<<< мои строки
КонецЕсли;
КонецЕсли;
КонецЕсли;
20. Victor Nespyatin (victuan) 02.09.08 13:32
(19) Моя обработка не должна использовать никаких ВК!
21. Роман Петров (PeRom) 02.09.08 15:20
17), 18),19),20) Если всё вместе собрать, то получается лучше всего не использовать ничего, кроме чистого 1с - тогда нужно сохранять в виде текста с разделителями......
22. Victor Nespyatin (victuan) 02.09.08 19:40
(21) Это все дело вкуса. Я не имею ничего против ВК. Просто раз я начал позиционировать свою обработку как "без ВК", то должен быть последовательным.
23. profik777 (profik777) 11.12.08 11:28
после установки этой обработки возникли некоторые проблемы: Если в ячейке более 255 символов - он обрезает ее значение до 255.
Как можно исправить???
24. Victor Nespyatin (victuan) 11.12.08 11:59
(23) Обработка тут не причем. Это ограничение, заложенное в платформе.
25. Сергей Изергин (serguson) 04.05.09 14:41
Спасибо за обработку !
Была задачка - выгружать в Excel отчеты размером более 600 000 строк (КУДИР для предпринимателя). После небольшой доработки первоисточника (не более 5 строк) -
- нам теперь никакие отчеты НЕ СТРАШНЫ !!!
26. assa Петренко (assa) 15.02.11 12:15
27. Светлана Даниленко (LanaSN) 23.09.11 09:44
Спасибо, очень пригодилась обработка, справочник материалов огромный, смотреть по счетам трудно на экране, выгрузить не могли в ексель, теперь все хорошо!
28. Сергей Малыхин (serezhka87) 10.10.11 15:24
Огромное спасибо автору. Есть один отчёт по задолжности по кварплате идёт на 20 тыщ строк, раньше сохраняли только в ХТМЛ, а теперь как люди может и в Экселе сохранять. =)
29. admitcom admitcom (admitcom) 24.11.11 09:29
Нужно было сохранить рабочий план счетов в ексель, пытался копировать по 5000 строк, вроде получилось, но было долго и муторно. Попробую сейчас с помощью этой обработки.
30. red eye (redeye911) 22.12.11 09:24
Спасибо - очень помогло разобраться с механизмом выгрузки.
31. Стас (Ice-Stas) 22.12.11 16:41
32. Стас (Ice-Stas) 22.12.11 16:43
Предлагаю немного дописать код обработки Быстрое сохранение mxl в xls.ert.
В результате мы получаем название файла из названия отчета. В 99% случаев - срабатывает. Помоему удобно.

Если ВсеНормально = 1 Тогда
Сервис = СоздатьОбъект ("Сервис");
Если Сервис.АктивныйКонтекст (гТаблица) = 0 Тогда
Сообщить ("Нет активного табличного документа");
ВсеНормально = 0;
Иначе
Если ТипЗначенияСтр (гТаблица) <> "Таблица" Тогда
Сообщить ("Нет активного табличного документа");
ВсеНормально = 0;
Иначе
//>>> мои строки
Для НомСтроки=1 По 7 Цикл
НомКолонки = 1;
Если ПустаяСтрока(гТаблица.Область(НомСтроки,НомКолонки).Текст)=1 Тогда
НомКолонки = 2;
КонецЕсли;
РазмерШрифта = гТаблица.Область(НомСтроки,НомКолонки).РазмерШрифта();
Если РазмерШрифта>9 Тогда
ВыбИмяФайла = ФС.ТекКаталог()+"\"+СокрЛП(гТаблица.Область(НомСтроки,НомКолонки).Текст)+".xls";
Прервать;
КонецЕсли;
КонецЦикла;
//<<< мои строки
КонецЕсли;
КонецЕсли;
КонецЕсли;

Здорово
33. Victor Nespyatin (victuan) 22.12.11 16:53
(32)Что за объект Сервис?
Он нарушает мой девиз: "НЕ использует никаких внешних компонент!!!"?
34. Леша Токтосунов (lexa_12184) 18.01.12 09:59
Нормальное универсальное решение.... да имеет свои ограничения и при очень огромных размерах отчетов все равно подтормаживает (например карточка счета за период 5 лет), однако для сохраненения за периоды квартал и месяцы работает отлично.!!!
36. Арти Шарти (Tommy1987) 11.03.12 14:19
Да, очень удобно при больших объемах данных. При выгрузках в excel теперь только этот вариант использую.
37. Елена Сув (suvorovalena) 21.03.12 15:52
А почему просто не сохранить в mxl-формате, а потом пересохранить в xls? в mxl 1c сохраняет мгновенно...
38. Victor Nespyatin (victuan) 22.03.12 04:26
(37)Пересохранение большого файла mxl в xls происходит долго.
Для написания сообщения необходимо авторизоваться
Прикрепить файл
Дополнительные параметры ответа