Текущее время: Ср, июл 30 2025, 21:49

Часовой пояс: UTC + 3 часа


Правила форума


ВНИМАНИЕ!

Вопросы по SAP Query и Quick View - сюда



Начать новую тему Ответить на тему  [ Сообщений: 19 ]  На страницу 1, 2  След.
Автор Сообщение
 Заголовок сообщения: Увеличить скорость выгрузки в Excel через ' CREATE OBJECT h_excel 'EXCEL.APPLICATION' '
СообщениеДобавлено: Вт, сен 01 2009, 08:44 
Старший специалист
Старший специалист
Аватара пользователя

Зарегистрирован:
Пн, авг 03 2009, 15:37
Сообщения: 292
Откуда: Алматы
Пол: Мужской
Привет абаперам.

При выгрузке данных в Excel,
Code:
  CREATE OBJECT h_excel 'EXCEL.APPLICATION'.
  PERFORM sy_subrc.
  SET PROPERTY OF h_excel  'Visible' = 0.
  PERFORM sy_subrc.
...

сталкнулся с такой бедой, данные выгружаются очень долго, и конечно же это не соответствует требованию заказчика. Подскажите, как можно увеличить скорость выгрузки?

_________________
Все в этом мире стоит под сомнением, над сомнением – только google...


Пометить тему как нерешенную
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Увеличить скорость выгрузки в Excel через ' CREATE OBJECT h_excel 'EXCEL.APPLICATION' '
СообщениеДобавлено: Вт, сен 01 2009, 08:53 
Гуру-эксперт
Гуру-эксперт
Аватара пользователя

Зарегистрирован:
Чт, ноя 11 2004, 16:25
Сообщения: 3109
Пол: Мужской
FeBO-Sh написал:
Привет абаперам.

При выгрузке данных в Excel,
Code:
  CREATE OBJECT h_excel 'EXCEL.APPLICATION'.
  PERFORM sy_subrc.
  SET PROPERTY OF h_excel  'Visible' = 0.
  PERFORM sy_subrc.
...

сталкнулся с такой бедой, данные выгружаются очень долго, и конечно же это не соответствует требованию заказчика. Подскажите, как можно увеличить скорость выгрузки?

Можно использовать технологию DOI, можно написать макрос, который например закидывает в Эксель целую строчку и внутри парсит по ячейкам, получается меньше обращений к ОЛЕ объекту, можно посмотреть саму выгрузку, возможно там требуется оптимизация.


Пометить тему как нерешенную
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Увеличить скорость выгрузки в Excel через ' CREATE OBJECT h_excel 'EXCEL.APPLICATION' '
СообщениеДобавлено: Вт, сен 01 2009, 09:28 
Старший специалист
Старший специалист
Аватара пользователя

Зарегистрирован:
Пн, авг 03 2009, 15:37
Сообщения: 292
Откуда: Алматы
Пол: Мужской
Конечно.
Code:
*----------------------------------------------------------------------*
* запуск Excel
  CREATE OBJECT h_excel 'EXCEL.APPLICATION'.
  PERFORM sy_subrc.
  SET PROPERTY OF h_excel  'Visible' = 0.
  PERFORM sy_subrc.

  ...                                                    " Формирую заголовок документа

  LOOP AT itab WHERE sel = '1'.                          " Выгружаются основные данные
    h = h + 1.
    PERFORM fill_cell USING h 1 0 itab-ser_num.
    PERFORM fill_cell USING h 2 0 itab-ean11.
    PERFORM fill_cell USING h 3 0 itab-menge_3.
    PERFORM fill_cell USING h 4 0 itab-menge_4.
    PERFORM fill_cell USING h 5 0 itab-menge_5.
    PERFORM fill_cell USING h 6 0 itab-menge_6.
    PERFORM fill_cell USING h 7 0 itab-menge_7.
    PERFORM fill_cell USING h 8 0 itab-menge_8.
    PERFORM fill_cell USING h 9 0 itab-menge_9.
    PERFORM fill_cell USING h 10 0 itab-menge_10.
    PERFORM fill_cell USING h 11 0 itab-menge_11.
    PERFORM fill_cell USING h 12 0 itab-menge_12.
    PERFORM fill_cell USING h 13 0 itab-menge_13.
    PERFORM fill_cell USING h 14 0 itab-menge_14.
    PERFORM fill_cell USING h 15 0 itab-menge_15.
    PERFORM fill_cell USING h 16 0 itab-menge_16.
    PERFORM fill_cell USING h 17 0 itab-menge_17.
    PERFORM fill_cell USING h 18 0 itab-menge_18.
    PERFORM fill_cell USING h 19 0 itab-menge_19.
    PERFORM fill_cell USING h 20 0 itab-menge_20.
  ENDLOOP.

  ...  " Суммы по полям

  ...  " Дальше повторяется по другим таблицам

*----------------------------------------------------------------------*
* Запуск видимости
  SET PROPERTY OF h_excel  'Visible' = 1.
  PERFORM sy_subrc.

*----------------------------------------------------------------------*
* Отключаемся от Excel
  FREE OBJECT h_excel.
  PERFORM sy_subrc.


_________________
Все в этом мире стоит под сомнением, над сомнением – только google...


Пометить тему как нерешенную
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Увеличить скорость выгрузки в Excel через ' CREATE OBJECT h_excel 'EXCEL.APPLICATION' '
СообщениеДобавлено: Вт, сен 01 2009, 09:30 
Гуру-эксперт
Гуру-эксперт
Аватара пользователя

Зарегистрирован:
Ср, ноя 03 2004, 14:51
Сообщения: 1912
Откуда: КраснАдар
Пол: Мужской
Пример DOI - http://sapboard.ru/forum/viewtopic.php?f=13&t=51469&p=330234&hilit=doi#p330234


Пометить тему как нерешенную
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Увеличить скорость выгрузки в Excel через ' CREATE OBJECT h_excel 'EXCEL.APPLICATION' '
СообщениеДобавлено: Вт, сен 01 2009, 09:40 
Гуру-эксперт
Гуру-эксперт
Аватара пользователя

Зарегистрирован:
Чт, ноя 11 2004, 16:25
Сообщения: 3109
Пол: Мужской
FeBO-Sh написал:
Конечно.

Что конечно?


Пометить тему как нерешенную
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Увеличить скорость выгрузки в Excel через ' CREATE OBJECT h_excel 'EXCEL.APPLICATION' '
СообщениеДобавлено: Вт, сен 01 2009, 09:41 
Почетный гуру
Почетный гуру
Аватара пользователя

Зарегистрирован:
Чт, авг 19 2004, 17:37
Сообщения: 1962
Откуда: Москва
Пол: Мужской
FeBO-Sh написал:
При выгрузке данных в Excel, ...сталкнулся с такой бедой, данные выгружаются очень долго, и конечно же это не соответствует требованию заказчика. Подскажите, как можно увеличить скорость выгрузки?

Это общая проблема OLE. Мне приходилось заниматься синхронизацией данных через OLE (1С, SAP, внешние системы клиент-банк), и во всех случаях я приходил к выводу, что сами данные быстрее передавать через файлы (txt, dbf, xml), а через OLE передавать только управляющие команды.
В своей выгрузке в Excel и Word я реализовал оба метода.
Передача через файлы требует использования макроса на принимающей стороне, чтобы "потрошить" файлы. На случай, если вдруг макросы почему-либо не будут работать (хотя до сих пор проблем не было), реализована передача втупую через OLE, но разница во времени вывода различается на порядок.
Для некоторого ускорения еще можно использовать передачу больших блоков данных (строка, таблица) за один вызов OLE-команды, но это годится для несколько упрощенных отчетов типа простого вывода большой таблицы без особых красивостей. Эти способы я тоже реализовал в своей выгрузке. Есть простые примеры использования ФМ. Так что можете использовать как идеи, так и всю разработку целиком.

_________________
"For all entries" не в SAP-ах, "for all entries" в головах! :)


Пометить тему как нерешенную
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Увеличить скорость выгрузки в Excel через ' CREATE OBJECT h_excel 'EXCEL.APPLICATION' '
СообщениеДобавлено: Ср, сен 02 2009, 10:27 
Младший специалист
Младший специалист

Зарегистрирован:
Пт, июн 15 2007, 16:24
Сообщения: 98
У меня была идея формировать экселевкий xml-документ на сервере (это быстро), а потом открывать на клиенте. Правда там вроде есть какие-то ограничения по форматированию. Ну и необходимо сделать прилично работы, чтобы создать удобные тулзы для формирования документа.


Пометить тему как нерешенную
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Увеличить скорость выгрузки в Excel через ' CREATE OBJECT h_excel 'EXCEL.APPLICATION' '
СообщениеДобавлено: Ср, сен 02 2009, 11:08 
Гуру-модератор
Гуру-модератор
Аватара пользователя

Зарегистрирован:
Пн, окт 11 2004, 13:16
Сообщения: 1790
Если вопрос исключительно в выгрузке, то обмен через буфер обмена (две операции: Copy + Paste) получается на порядок быстрее, чем заполнение ячеек по отдельности.

_________________
/nex


Пометить тему как нерешенную
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Увеличить скорость выгрузки в Excel через ' CREATE OBJECT h_excel 'EXCEL.APPLICATION' '
СообщениеДобавлено: Чт, сен 03 2009, 13:10 
Старший специалист
Старший специалист
Аватара пользователя

Зарегистрирован:
Пн, авг 03 2009, 15:37
Сообщения: 292
Откуда: Алматы
Пол: Мужской
Цитата:
Если вопрос исключительно в выгрузке, то обмен через буфер обмена (две операции: Copy + Paste) получается на порядок быстрее, чем заполнение ячеек по отдельности.


В буфер обмена это хорошо. Может скинете пример кода, какой-нибудь.

_________________
Все в этом мире стоит под сомнением, над сомнением – только google...


Пометить тему как нерешенную
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Увеличить скорость выгрузки в Excel через ' CREATE OBJECT h_excel 'EXCEL.APPLICATION' '
СообщениеДобавлено: Чт, сен 03 2009, 14:24 
Гуру-модератор
Гуру-модератор
Аватара пользователя

Зарегистрирован:
Пн, окт 11 2004, 13:16
Сообщения: 1790
FeBO-Sh написал:
В буфер обмена это хорошо. Может скинете пример кода, какой-нибудь.

Концептуально, это выглядит так:
Code:

* Подготовка данных для буфера обмена. Поля таблицы разделяются знаком табуляции:
  LOOP AT tab.
    CONCATENATE
         tab-field1
         tab-field2
         tab-field3
         tab-field4
    INTO tab_xls
    SEPARATED BY cl_abap_char_utilities=>horizontal_tab.

    APPEND tab_xls.
  ENDLOOP.

* Экспорт подготовленных данных в буфер обмена:
  CALL METHOD cl_gui_frontend_services=>clipboard_export
    IMPORTING
      data       = tab_xls[]
    CHANGING
      rc         = ld_rc
    EXCEPTIONS
      cntl_error = 1
      OTHERS     = 4.

* Вызов Excel->Paste:
...

_________________
/nex


Пометить тему как нерешенную
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Увеличить скорость выгрузки в Excel через ' CREATE OBJECT h_excel 'EXCEL.APPLICATION' '
СообщениеДобавлено: Чт, сен 03 2009, 14:35 
Старший специалист
Старший специалист
Аватара пользователя

Зарегистрирован:
Пн, авг 03 2009, 15:37
Сообщения: 292
Откуда: Алматы
Пол: Мужской
Спасибо будем разбираться...

_________________
Все в этом мире стоит под сомнением, над сомнением – только google...


Пометить тему как нерешенную
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Увеличить скорость выгрузки в Excel через ' CREATE OBJECT h_excel 'EXCEL.APPLICATION' '
СообщениеДобавлено: Чт, сен 03 2009, 16:07 
Начинающий
Начинающий

Зарегистрирован:
Пн, авг 31 2009, 11:26
Сообщения: 11
Пол: Мужской
Значительно ускорит процесс передачи данных удаленному OLE использование параметра NO FLUSH в вызове методов.


Пометить тему как нерешенную
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Увеличить скорость выгрузки в Excel через ' CREATE OBJECT h_excel 'EXCEL.APPLICATION' '
СообщениеДобавлено: Пт, сен 04 2009, 08:56 
Старший специалист
Старший специалист
Аватара пользователя

Зарегистрирован:
Пн, авг 03 2009, 15:37
Сообщения: 292
Откуда: Алматы
Пол: Мужской
Еще вопрос: Как через АБАП сделать определенную ячейку активной? Понимаю что нужно писать макрос (ActiveSheet), но не знаю как?

_________________
Все в этом мире стоит под сомнением, над сомнением – только google...


Пометить тему как нерешенную
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Увеличить скорость выгрузки в Excel через ' CREATE OBJECT h_excel 'EXCEL.APPLICATION' '
СообщениеДобавлено: Пт, сен 04 2009, 09:41 
Гуру-модератор
Гуру-модератор
Аватара пользователя

Зарегистрирован:
Пн, окт 11 2004, 13:16
Сообщения: 1790
FeBO-Sh написал:
Еще вопрос: Как через АБАП сделать определенную ячейку активной? Понимаю что нужно писать макрос (ActiveSheet), но не знаю как?

Здесь уже смотрели?

_________________
/nex


Пометить тему как нерешенную
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Увеличить скорость выгрузки в Excel через ' CREATE OBJECT h_excel 'EXCEL.APPLICATION' '
СообщениеДобавлено: Пт, сен 04 2009, 10:27 
Старший специалист
Старший специалист
Аватара пользователя

Зарегистрирован:
Пн, авг 03 2009, 15:37
Сообщения: 292
Откуда: Алматы
Пол: Мужской
С активацией ячейки разобрался. Теперь не получается CTRL+V из буфера обмена. Посмотрите пж что не правильно?
Code:
CALL METHOD OF h_excel 'Cells' = sheet NO FLUSH
    EXPORTING
    #1 = h
    #2 = 1
    .
CALL METHOD OF sheet 'SELECT'.  " Сделал активным

CALL METHOD OF sheet 'PASTE'.    " Хочу вставить из буфера

_________________
Все в этом мире стоит под сомнением, над сомнением – только google...


Пометить тему как нерешенную
Вернуться к началу
 Профиль Отправить email  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 19 ]  На страницу 1, 2  След.

Часовой пояс: UTC + 3 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
cron
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB