Performance ECatt Parameter ist Tabelle

Getting started ... Alles für einen gelungenen Start.

Performance ECatt Parameter ist Tabelle

Postby Patrick2729 » Thu Jan 29, 2015 12:14 pm

Hallo,

habe bezüglich ECatt aktuell massive Performanceprobleme. :?:
Die Logik ist eigentlich überschaubar. Ich lese eine Datei ein und will alles nach dem Header an die ECatt gehaltene Tabelle übergeben um Sie im 2.Inlinestep zu verarbeiten.

Aktueller Code:
Code: [Select all] [Expand/Collapse] [Download] (Untitled.txt)
  1. V_ABSTIMMSCHL = I_ABSTIMMSCHL.
  2.  
  3. ABAP.
  4.     CONSTANTS: c_x(01) TYPE C VALUE 'X' .
  5.  
  6.     DATA: v_fikey type FIKEY_KK value ''.
  7.  
  8.     SELECT SINGLE fikey
  9.         FROM dfkksumc
  10.         INTO v_fikey
  11.         WHERE fikey = v_abstimmschl.
  12.  
  13.     IF sy-subrc NE 0.
  14.         V_ACTIVE = c_x.
  15.     ENDIF.
  16. ENDABAP.
  17.  
  18. *------------------------------------------------*.
  19. ABAP.
  20.     CONSTANTS: c_x(01) TYPE c VALUE 'X' ,
  21.                c_file  TYPE dynpread-fieldname VALUE 'FILE'.
  22.  
  23.     DATA: lv_tot  TYPE i VALUE 0,
  24.           lv_file TYPE string.
  25.  
  26.     DATA: lt_sollstellung  type yty_ecatt_cdataimport,
  27.           ls_sollstellung  type yst_ecatt_cdataimport,
  28.           ls_sollstellung2 type yst_ecatt_dataimport.
  29.  
  30.     CALL FUNCTION 'F4_FILENAME'
  31.       EXPORTING
  32.         program_name  = syst-cprog
  33.         dynpro_number = syst-dynnr
  34.         field_name    = c_file
  35.       IMPORTING
  36.         file_name     = v_file_path.
  37.  
  38.     lv_file = v_file_path.
  39.  
  40.     CALL FUNCTION 'GUI_UPLOAD'
  41.       EXPORTING
  42.         filename            = lv_file
  43.         has_field_separator = c_x
  44.       TABLES
  45.         data_tab            = lt_sollstellung.
  46.  
  47.     IF sy-subrc NE 0.
  48.       v_fehler = sy-subrc.
  49.       EXIT.
  50.     ENDIF.
  51.  
  52.     DESCRIBE TABLE lt_sollstellung LINES lv_tot.
  53.  
  54.     v_count = lv_tot - 1.
  55.     v_exit  = v_count.
  56.  
  57.     LOOP AT lt_sollstellung INTO ls_sollstellung.
  58.       CHECK sy-tabix > 1.
  59.       MOVE-CORRESPONDING ls_sollstellung TO ls_sollstellung2.
  60.       APPEND ls_sollstellung2 TO v_secatt.
  61.     ENDLOOP.
  62.  
  63.     FREE lt_sollstellung.
  64.  
  65. ENDABAP.
  66. *------------------------------------------------*.
  67.  
  68. EXIT ( V_COUNT = 0 ).
  69.  
  70. DO ( V_EXIT ).
  71.  
  72.   SAPGUI ( FPE1_3_1 ).
  73.  
  74.   DO ( V_COUNT ).
  75.  
  76. *------------------------------------------------*.
  77.     ABAP.
  78.         DATA: v_readindx TYPE i VALUE 0.
  79.  
  80.         DATA: ls_sollstellung type yst_ecatt_dataimport.
  81.  
  82.         CONSTANTS: c_x(01) TYPE c VALUE 'X'.
  83.  
  84.         v_readindx = v_index.
  85.  
  86.         READ TABLE v_secatt INDEX v_readindx INTO ls_sollstellung.
  87.  
  88.         v_gpnr         = ls_sollstellung-gpnr.
  89.         v_vertrag      = ls_sollstellung-vertrag.
  90.         v_buchkreis    = ls_sollstellung-buchkreis.
  91.         v_vtrgkonto    = ls_sollstellung-vtrgkonto.
  92.         v_hauptvorgang = ls_sollstellung-hauptvorgang.
  93.         v_teilvorgang  = ls_sollstellung-teilvorgang.
  94.         v_betrag       = ls_sollstellung-betrag.
  95.         v_vkt          = ls_sollstellung-vkt.
  96.  
  97.         CALL FUNCTION 'CONVERT_DATE_TO_INTERNAL'
  98.           EXPORTING
  99.             date_external = ls_sollstellung-skontofaelldat
  100.           IMPORTING
  101.             date_internal = v_skontofaelldat.
  102.  
  103.         CALL FUNCTION 'CONVERT_DATE_TO_INTERNAL'
  104.           EXPORTING
  105.             date_external = ls_sollstellung-abrechvondat
  106.           IMPORTING
  107.             date_internal = v_abrechvondat.
  108.  
  109.         CALL FUNCTION 'CONVERT_DATE_TO_INTERNAL'
  110.           EXPORTING
  111.             date_external = ls_sollstellung-abrechbisdat
  112.           IMPORTING
  113.             date_internal = v_abrechbisdat.
  114.  
  115.         CLEAR ls_sollstellung.
  116.  
  117.         v_readindx = v_index + 1.
  118.  
  119.         READ TABLE v_secatt INDEX v_readindx INTO ls_sollstellung.
  120.         IF sy-subrc EQ 0.
  121.           v_gpnr_next = ls_sollstellung-gpnr.
  122.         ELSE.
  123.           v_gpnr_next = 0.
  124.           v_exit = 0.
  125.         ENDIF.
  126.     ENDABAP.
  127. *------------------------------------------------*.
  128.  
  129.  
  130.     IF ( V_GPNR_NEXT <> 0 ).
  131.  
  132.       SAPGUI ( FPE1_3_2_1_1_3 ).
  133.  
  134.       IF ( V_INDEX >= 9 ) .
  135.         V_SCROLL = V_INDEX.
  136.       ENDIF.
  137.  
  138.       SAPGUI ( FPE1_3_2_1_1_4 ).
  139.  
  140.       V_INDEX = V_INDEX + 1.
  141.  
  142.       IF ( V_GPNR_NEXT = V_GPNR ).
  143.           V_LI_ROW = V_LI_ROW + 1.
  144.       ELSE.
  145.           V_LI_ROW = 0.
  146.       ENDIF.
  147.  
  148.       EXIT ( V_GPNR_NEXT <> V_GPNR ) .
  149.     ELSE.
  150. *     EOF
  151.       EXIT ( V_EXIT = 0 ) .
  152.     ENDIF.
  153.  
  154.   ENDDO.
  155.  
  156.   SAPGUI ( FPE1_3_2_1_2 ).
  157.   SAPGUI ( FPE1_3_2_2 ).
  158.  
  159. * finish
  160.   EXIT ( V_EXIT = 0 ) .
  161.  
  162.  
  163.  
  164. LOG ( V_FEHLER ).
  165.  
GeSHi ©



V_SECATT ist als Parameter mit Sicht V und Bezug des Parameters mit "yty_ecatt_dataimport" definiert.

Hat jemand ein Hinweis, wo ich hier die Performance verliere?

Danke soweit
Patrick2729
..
..
 
Posts: 16
Joined: Wed Jul 30, 2008 4:21 pm

Re: Performance ECatt Parameter ist Tabelle

Postby Patrick2729 » Fri Jan 30, 2015 2:22 pm

Habe das Skript so abgeändert, das eine DDIC Tabelle als Puffer dient.

Code: [Select all] [Expand/Collapse] [Download] (Untitled.txt)
  1. *  Does value exist - Abstimmschlüsselübersicht.
  2. V_ABSTIMMSCHL = I_ABSTIMMSCHL.
  3.  
  4. *------------------------------------------------*.
  5. * Step 1: Read Abstimmschlüssel, set Flag when doesn't exists
  6. *------------------------------------------------*.
  7. ABAP.
  8.     CONSTANTS: c_x(01) TYPE C VALUE 'X' .
  9.  
  10.     DATA: v_fikey type FIKEY_KK value ''.
  11.  
  12.     SELECT SINGLE fikey
  13.         FROM dfkksumc
  14.         INTO v_fikey
  15.         WHERE fikey = v_abstimmschl.
  16.  
  17.     IF sy-subrc NE 0.
  18. * If already exists, create a new one (FLAG)
  19.         V_ACTIVE = c_x.
  20.     ENDIF.
  21. ENDABAP.
  22.  
  23. *------------------------------------------------*.
  24. * Step 2: Read Sollstellungsfile and save in ECatt Table
  25. *------------------------------------------------*.
  26. ABAP.
  27.     CONSTANTS: c_x(01) TYPE c VALUE 'X' ,
  28.                c_file  TYPE dynpread-fieldname VALUE 'FILE'.
  29.  
  30. *    lv_tot : holds lv_total number of records
  31.     DATA: lv_tot  TYPE i VALUE 0,
  32.           lv_file TYPE string.
  33.  
  34. *    INTERNAL TABLE AND WORK AREA TO PROCESS
  35.     DATA: lt_sollstellung  type yty_ecatt_cdataimport,
  36.           lt_sollstellung2 type yty_ecatt_dataimport,
  37.           ls_sollstellung  type yst_ecatt_cdataimport,
  38.           ls_sollstellung2 type yst_ecatt_dataimport.
  39.  
  40. *   Alte Einträge in DB löschen
  41.     DELETE FROM YTT_ECATT_SOLL WHERE GPNR NE 0.
  42.  
  43. *   Persistent machen
  44.     COMMIT WORK AND WAIT.
  45.  
  46. *   TO OPEN lv_file DIALOG FOR TEST DATA lv_file
  47.     CALL FUNCTION 'F4_FILENAME'
  48.       EXPORTING
  49.         program_name  = syst-cprog
  50.         dynpro_number = syst-dynnr
  51.         field_name    = c_file
  52.       IMPORTING
  53.         file_name     = v_file_path.
  54.  
  55. *   NOW THE V_FILE_PATH CONSISTS OF THE lv_file PATH
  56. *   PUT THAT PATH IN TO OUR STRING VARIABLE lv_file (CONVERTER)
  57.     lv_file = v_file_path.
  58.  
  59. *   LOADING DATA FROM THE lv_file
  60.     CALL FUNCTION 'GUI_UPLOAD'
  61.       EXPORTING
  62.         filename            = lv_file
  63.         has_field_separator = c_x
  64.       TABLES
  65.         data_tab            = lt_sollstellung.
  66.  
  67.     IF sy-subrc NE 0.
  68.       v_fehler = sy-subrc.
  69.       CONCATENATE 'Datei konnte nicht geladen werden. Fehlercode: ' v_fehler INTO v_fehler.
  70.       EXIT.
  71.     ENDIF.
  72.  
  73. *   GETTING NUMBER OF RECORDS IN THE TABLE
  74.     DESCRIBE TABLE lt_sollstellung LINES lv_tot.
  75.  
  76. *   STORING NUMBER OF RECORDS IN LOCAL VARIABLE minus headerline
  77.     v_count = lv_tot - 1.
  78.     v_exit  = v_count.
  79.  
  80. *   READING STRING VERSION OF ITAB, IGNORE HEADER AND PUSH THE REST
  81.     LOOP AT lt_sollstellung INTO ls_sollstellung.
  82.       CHECK sy-tabix > 1.
  83.       MOVE-CORRESPONDING ls_sollstellung TO ls_sollstellung2.
  84.  
  85. *       Date converter
  86.         CALL FUNCTION 'CONVERT_DATE_TO_INTERNAL'
  87.           EXPORTING
  88.             date_external = ls_sollstellung-skontofaelldat
  89.           IMPORTING
  90.             date_internal = ls_sollstellung2-skontofaelldat.
  91.  
  92.         CALL FUNCTION 'CONVERT_DATE_TO_INTERNAL'
  93.           EXPORTING
  94.             date_external = ls_sollstellung-abrechvondat
  95.           IMPORTING
  96.             date_internal = ls_sollstellung2-abrechvondat.
  97.  
  98.         CALL FUNCTION 'CONVERT_DATE_TO_INTERNAL'
  99.           EXPORTING
  100.             date_external = ls_sollstellung-abrechbisdat
  101.           IMPORTING
  102.             date_internal = ls_sollstellung2-abrechbisdat.
  103.  
  104.       APPEND ls_sollstellung2 TO lt_sollstellung2.
  105.     ENDLOOP.
  106.  
  107.     INSERT YTT_ECATT_SOLL FROM TABLE lt_sollstellung2.
  108.  
  109. *   Persistent machen
  110.     COMMIT WORK AND WAIT.
  111.  
  112. *   CLEARING INTERNAL TABLE
  113.     FREE lt_sollstellung.
  114.     FREE lt_sollstellung2.
  115.  
  116. ENDABAP.
  117. *------------------------------------------------*.
  118. * No datas were found
  119. EXIT ( V_COUNT = 0 ).
  120.  
  121. * LOOPING THROUGH (COUNT) NUMBER OF RECORDS
  122. DO ( V_EXIT ).
  123.  
  124. * fill out the header information
  125.   SAPGUI ( FPE1_3_1 ).
  126.  
  127. * LOOPING THROUGH (COUNT) NUMBER OF RECORDS
  128.   DO ( V_COUNT ).
  129.  
  130. *------------------------------------------------*.
  131. * Step 3: For each GP with all Sollstellungen make a new Beleg
  132. *------------------------------------------------*.
  133.     ABAP.
  134. *       V_READINDX : holds index number to read the internal table
  135.         DATA: v_readindx TYPE i VALUE 0.
  136.  
  137. *       INTERNAL TABLE AND WORK AREA TO PROCESS
  138.         DATA: lt_sollstellung type yty_ecatt_dataimport,
  139.               ls_sollstellung type yst_ecatt_dataimport.
  140.  
  141.         CONSTANTS: c_x(01) TYPE c VALUE 'X'.
  142.  
  143.         SELECT *
  144.             FROM ytt_ecatt_soll
  145.             INTO TABLE lt_sollstellung
  146.             WHERE gpnr NE 0
  147.             ORDER BY gpnr vertrag ASCENDING.
  148.  
  149. *       V_INDEX : is a local variable hold the current index to read (starts
  150. *       with 2 - ignores headerline)
  151.         v_readindx = v_index.
  152.  
  153. *       READING lt_sollstellung UGING ITS INDEX
  154.         READ TABLE lt_sollstellung INDEX v_readindx INTO ls_sollstellung.
  155.  
  156. *       Assigning work area values to the screen field values
  157.         v_gpnr           = ls_sollstellung-gpnr.
  158.         v_vertrag        = ls_sollstellung-vertrag.
  159.         v_buchkreis      = ls_sollstellung-buchkreis.
  160.         v_vtrgkonto      = ls_sollstellung-vtrgkonto.
  161.         v_hauptvorgang   = ls_sollstellung-hauptvorgang.
  162.         v_teilvorgang    = ls_sollstellung-teilvorgang.
  163.         v_skontofaelldat = ls_sollstellung-skontofaelldat.
  164.         v_betrag         = ls_sollstellung-betrag.
  165.         v_abrechvondat   = ls_sollstellung-abrechvondat.
  166.         v_abrechbisdat   = ls_sollstellung-abrechbisdat.
  167.         v_vkt            = ls_sollstellung-vkt.
  168.  
  169. *       READING NEXT GP TO DECIDE, if it's New OR Same
  170.         CLEAR ls_sollstellung.
  171.  
  172.         v_readindx = v_index + 1.
  173.  
  174.         IF v_readindx LE v_count.
  175.             READ TABLE lt_sollstellung INDEX v_readindx INTO ls_sollstellung.
  176.             IF sy-subrc EQ 0.
  177.               v_gpnr_next = ls_sollstellung-gpnr.
  178.             ELSE.
  179.               v_exit = 0.
  180.             ENDIF.
  181.          ELSE.
  182.             v_exit = 0.
  183.         ENDIF.
  184.     ENDABAP.
  185. *------------------------------------------------*.
  186.  
  187.     V_SCROLL = 0.
  188.  
  189. *    fill out the sollstellungen values
  190.     SAPGUI ( FPE1_3_2_1_1_3 ).
  191.  
  192.     IF ( V_LI_ROW >= 9 ) .
  193.     V_SCROLL = V_LI_ROW.
  194.     ENDIF.
  195.  
  196.     SAPGUI ( FPE1_3_2_1_1_4 ).
  197.  
  198.     V_INDEX = V_INDEX + 1.
  199.  
  200. *    Scroll parameter
  201.     IF ( V_GPNR_NEXT = V_GPNR ).
  202.       V_LI_ROW = V_LI_ROW + 1.
  203.     ELSE.
  204.       V_LI_ROW = 0.
  205.     ENDIF.
  206.  
  207.     EXIT ( V_GPNR_NEXT <> V_GPNR ).
  208.   ENDDO.
  209.  
  210. * save beleg
  211.   SAPGUI ( FPE1_3_2_1_2 ).
  212.   SAPGUI ( FPE1_3_2_2 ).
  213.  
  214. * finish
  215.   EXIT ( V_EXIT = 0 ) .
  216.  
  217.  
  218. LOG ( V_FEHLER ).
  219.  
GeSHi ©
Patrick2729
..
..
 
Posts: 16
Joined: Wed Jul 30, 2008 4:21 pm


Return to ABAP® für Anfänger

Who is online

Users browsing this forum: No registered users and 12 guests