Текущее время: Пт, июл 25 2025, 18:30

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


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


ВНИМАНИЕ!

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



Начать новую тему Ответить на тему  [ 1 сообщение ] 
Автор Сообщение
 Заголовок сообщения: ...по быстродействию работы DOI
СообщениеДобавлено: Пт, дек 16 2011, 16:18 
Начинающий
Начинающий

Зарегистрирован:
Вс, мар 07 2010, 11:10
Сообщения: 12
Решил попробовать вывести содержимое вн. таблицы в WORD через DOI.
Использовал для этого примеры из предыдущих тем. Все работает, но что-то не
получил ожидаемого быстродействия, хоть и выводится за меньшее время, чем OLE.
300 записей (8 столбцов) - за минуту.
Может, кто подскажет, в чем причина?
Привожу код:

Code:
FORM DOI_INTO_WORD.

  data: i_control        TYPE REF TO i_oi_container_control,
        gr_container     TYPE REF TO cl_gui_custom_container,
        i_document       TYPE REF TO i_oi_document_proxy,
        error            TYPE REF TO I_OI_ERROR,
        wp_interface     TYPE REF TO i_oi_word_processor_document,
        link_server      TYPE REF TO i_oi_link_server,
        retcode          TYPE SOI_RET_STRING,
        is_available     TYPE i,
        it_doc_uris      TYPE SBDST_URI,
        wa_doc_uris      LIKE LINE OF it_doc_uris,
        IT_DOC_SIGNATURE TYPE SBDST_SIGNATURE,
        handle           TYPE CNTL_HANDLE,
        s_appl           TYPE ole2_object,
        tableinfo        TYPE SOI_TABLEINFO_TABLE,
        col_table        TYPE SOI_COLS_TABLE,
        col_indexLine    TYPE SOI_COLS,
        count            TYPE sy-tabix.

* Creating the instance i_control * Создаем экземпляр SAP DOI ActiveX Control
  call method c_oi_container_control_creator=>get_container_control
    IMPORTING
      control = i_control.

* Initializing control * Инициализируем объект i_control
  call method i_control->init_control
    EXPORTING
      r3_application_name = 'R/3 application'
      parent              = gr_container
      inplace_enabled     = ' ' "'X'
      no_flush            = 'X'.
*      register_on_close_event  = 'X'
*      register_on_custom_event = 'X'
*      inplace_scroll_documents = 'X'
*      inplace_show_toolbar
*      inplace_resize_documents

  CALL METHOD c_oi_errors=>show_message EXPORTING type = 'E'.

  call method i_control->get_document_proxy
    EXPORTING
      document_type      = 'Word.Document' "'Excel.Sheet.8'
      register_container = 'X'
      no_flush           = 'X'
    IMPORTING
      document_proxy     = i_document
      ERROR              = ERROR
      retcode            = retcode.

  CALL METHOD c_oi_errors=>show_message EXPORTING type = 'E'.

* Получаем урл - обращается к BDS
  CALL METHOD cl_bds_document_set=>get_with_url
    EXPORTING
      classname       = 'SOFFICEINTEGRATION'  "doc_classname
      classtype       = 'OT'                  "doc_classtype
      OBJECT_KEY      = 'Z_ORDER_SPP'    "Ключ объекта
    CHANGING
      uris            = IT_DOC_URIS
      SIGNATURE       = IT_DOC_SIGNATURE
    EXCEPTIONS
      nothing_found   = 1
      error_kpro      = 2
      internal_error  = 3
      parameter_error = 4
      not_authorized  = 5
      not_allowed     = 6
      OTHERS          = 7.

  READ TABLE IT_DOC_URIS INTO WA_DOC_URIS INDEX 1.

* Открываем документ
  CALL METHOD i_document->open_document
    EXPORTING
      document_url = wa_doc_uris-uri
      no_flush     = 'X'
      open_inplace = '' "'X'
    IMPORTING
      ERROR        = ERROR
      retcode      = retcode.

  CALL METHOD i_document->get_document_handle
    EXPORTING
      no_flush = 'X' "''
    IMPORTING
      error    = error
      handle   = handle
      retcode  = retcode.

  GET PROPERTY OF handle-obj 'Application' = s_appl.

  CALL FUNCTION 'FLUSH'.
  SET PROPERTY OF s_appl 'DisplayAlerts'  = 0.
  SET PROPERTY OF s_appl 'ScreenUpdating' = 0.
  SET PROPERTY OF s_appl 'Visible'        = 0.
  CALL FUNCTION 'FLUSH'.

  CALL FUNCTION 'SAPGUI_PROGRESS_INDICATOR'
    EXPORTING
      percentage = 0
      text       = 'Подождите, формируется документ в Word...'.

*You use this method to query whether there is an application-specific interface
*for the document type of the instance document:
  CLEAR is_available.

  CALL METHOD i_document->has_wordprocessor_interface
    EXPORTING
      no_flush     = ' '   "'X'
    IMPORTING
      is_available = is_available
      error        = error
      retcode      = retcode.

  IF NOT is_available IS INITIAL.
* to create the instance wp_interface to manage the application-specific interface
* Use the method get_wordprocessor_interface on the document instance for document management
* to create the instance for the word processor interface
    CALL METHOD i_document->get_wordprocessor_interface
      EXPORTING
        no_flush     = 'X' "''
      IMPORTING
        wp_interface = wp_interface "The instance created for the application-specific interface
        error        = error
        retcode      = retcode.

    CALL METHOD c_oi_errors=>show_message
      EXPORTING
        type = 'E'.

  ELSE.
    MESSAGE e000 WITH 'Ошибка создания печатной формы!'.
  ENDIF.

  count = lines( out_table ).

  do 8 TIMES.
    CLEAR col_indexLine.
    col_indexLine-colindex = sy-index.
    APPEND col_indexLine to col_table.
  ENDDO.

  CALL METHOD WP_INTERFACE->INSERT_TABLE
    EXPORTING
      DATA_TABLE      = out_table[] " Value Table: Contains Data to be Transferred
      INFO_TABLE      = col_table " Info Table: Specifies the Columns to be Transferred
      LOWERBOUND      = 1         " First Line of Internal Table to be Transferred
      UPPERBOUND      = count     " Last Line of Intenral Table to be Transferred
      DOCTABLE_NUMBER = 1         " первая по порядку табл в файле
      CLEAROPTION     = 1         " Overwrite Behavior (for Document Table Contents)
      STARTROW        = 2         " Line in the Document Table from Which Data is to be Inserted
      VARSIZE         = 'X'       " Adjust Size of Document Table to Fit?
      NO_FLUSH        = 'X'       " Flush Behavior
*      WHOLETABLE      = 'X'       " Option: Transfer Entire Contents of Internal Table
    IMPORTING
      ERROR           = ERROR     " Error Object
      RETCODE         = RETCODE.  " Error Return Code

  CALL FUNCTION 'FLUSH'.
  SET PROPERTY OF s_appl 'Visible'        = 1.
  SET PROPERTY OF s_appl 'DisplayAlerts'  = 1.
  SET PROPERTY OF s_appl 'ScreenUpdating' = 1.
  CALL FUNCTION 'FLUSH'.

  CALL METHOD OF s_appl 'ScreenRefresh' .


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ 1 сообщение ] 

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


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

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


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

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