Application Development and Automation Discussions
Join the discussions or start your own on all things application development, including tools and APIs, programming models, and keeping your skills sharp.
cancel
Showing results for 
Search instead for 
Did you mean: 
Read only

Hi

Former Member
0 Likes
351

Hi,

I have written the most of the performance objects but my program is still taking more time can any one tell me how to improve my code performance .

below is the code

Thanks in Advance

************************************************************************

&----


REPORT Zbach NO STANDARD PAGE HEADING

LINE-SIZE 132.

INCLUDE ZBATCH_BDC.

INCLUDE ZBATCH_DAT.

START-OF-SELECTION.

  • select the deliveries that match the selection-criteria

IF P_ORI EQ 'X'. "DEVK940953

PERFORM 0100_SELECT_DATA.

ELSE. "DEVK940953

PERFORM 0110_SELECT_DATA. "DEVK940953

ENDIF. "DEVK940953

IF NOT ITAB[] IS INITIAL.

  • process the selected deliveries

LOOP AT ITAB.

CLEAR ITAB_CNT.

  • READ TABLE itab_cnt WITH KEY vbeln = itab-vbeln. "DEVK940953

READ TABLE ITAB_CNT WITH KEY VBELN = ITAB-VBELN "DEVK940953

BINARY SEARCH. "DEVK940953

IF ITAB_CNT-CNT NE 0.

PERFORM 0200_CHANGE_DELIVERY_DOC.

ENDIF.

CLEAR ITAB.

ENDLOOP.

PERFORM CLOSE_GROUP.

  • write error messages on the screen , if any

IF NOT ERRORTAB[] IS INITIAL.

LOOP AT ERRORTAB.

IF SY-TABIX EQ 1.

WRITE:/ 'Delivery', 20 'Reason for failure'.

ULINE.

ENDIF.

WRITE:/ ERRORTAB-VBELN, 20 ERRORTAB-ERROR_TEXT.

ENDLOOP.

ELSE.

LEAVE SCREEN.

ENDIF.

ENDIF.

&----


*& Form 0100_select_data

&----


  • text

----


  • --> p1 text

  • <-- p2 text

----


FORM 0100_SELECT_DATA.

CLEAR ITAB.

REFRESH ITAB.

  • select the deliveries based on selection-criteria.

  • Select POS and Offstore deliveries.

  • Exclude Return deliveries in this program

SELECT VBELN LFART INTO TABLE ITAB FROM LIKP

WHERE VBELN IN S_VBELN

AND VSTEL IN S_VSTEL

AND WADAT IN S_WADAT

AND LFART IN ('ZJO','ZJRT','ZJLF'). "DEVK929268

  • select deliveries for which Goods issue is already done

IF NOT ITAB[] IS INITIAL.

SELECT VBELN FROM VBUK INTO TABLE ITAB_DEL

FOR ALL ENTRIES IN ITAB

WHERE VBELN = ITAB-VBELN

AND WBSTK = 'C'.

ENDIF.

  • delete deliveries in ITAB for which goods issue is done

LOOP AT ITAB_DEL.

DELETE ITAB WHERE VBELN = ITAB_DEL-VBELN.

ENDLOOP.

  • select the deliveries for which batch determination has already done

CLEAR ITAB_DEL.

REFRESH ITAB_DEL.

IF NOT ITAB[] IS INITIAL.

SELECT VBELN FROM LIPS INTO TABLE ITAB_DEL

FOR ALL ENTRIES IN ITAB

WHERE VBELN = ITAB-VBELN

AND CHARG NE SPACE.

ENDIF.

  • delete deliveries in ITAB for which batch determination is done

LOOP AT ITAB_DEL.

DELETE ITAB WHERE VBELN = ITAB_DEL-VBELN.

ENDLOOP.

  • select the number of items available for these deliveries

IF NOT ITAB[] IS INITIAL.

LOOP AT ITAB.

CLEAR V_CNT.

SELECT SINGLE COUNT( * ) INTO V_CNT FROM LIPS

WHERE VBELN = ITAB-VBELN.

ITAB_CNT-VBELN = ITAB-VBELN.

ITAB_CNT-CNT = V_CNT.

APPEND ITAB_CNT.

ENDLOOP.

ELSE.

WRITE:/ 'No deliveries found for the entered selection-criteria'.

ENDIF.

ENDFORM. " 0100_select_data

&----


*& Form 0110_select_data

&----


FORM 0110_SELECT_DATA.

DATA: LOCL_TABIX TYPE SYTABIX,

LOCL_INDEX TYPE SYTABIX,

LOCL_TFILL TYPE SYTFILL,

LOCL_SUBRC TYPE SYSUBRC.

SELECT T1~VBELN

T3~POSNR

T3~CHARG

T1~LFART

FROM LIKP AS T1

INNER JOIN VBUK AS T2

ON T1VBELN EQ T2VBELN

INNER JOIN LIPS AS T3

ON T1VBELN EQ T3VBELN

INTO TABLE GTBL_CHARG

WHERE T1~VBELN IN S_VBELN

AND T1~VSTEL IN S_VSTEL

AND T1~WADAT IN S_WADAT

AND T1~LFART IN ('ZJO','ZJRT','ZJLF')

AND T2~WBSTK NE 'C'

%_HINTS ORACLE 'index(likp "Z1")'.

GTAB_CHARG[] = GTBL_CHARG[].

DELETE GTAB_CHARG WHERE CHARG EQ ' '.

LOOP AT GTBL_CHARG INTO GSTR_CHARG.

READ TABLE GTAB_CHARG INTO GSTU_CHARG

WITH KEY VBELN = GSTR_CHARG-VBELN

BINARY SEARCH.

IF SY-SUBRC EQ 0.

DELETE GTBL_CHARG.

ENDIF.

ENDLOOP.

GTAB_CHARG[] = GTBL_CHARG[].

DELETE ADJACENT DUPLICATES FROM GTBL_CHARG

COMPARING VBELN.

LOOP AT GTBL_CHARG INTO GSTR_CHARG.

CLEAR: V_CNT.

READ TABLE GTAB_CHARG INTO GSTU_CHARG

WITH KEY VBELN = GSTR_CHARG-VBELN

BINARY SEARCH.

LOCL_SUBRC = SY-SUBRC.

LOCL_INDEX = SY-TABIX.

WHILE LOCL_SUBRC EQ 0.

V_CNT = V_CNT + 1.

LOCL_INDEX = LOCL_INDEX + 1.

READ TABLE GTAB_CHARG INTO GSTU_CHARG INDEX LOCL_INDEX.

LOCL_SUBRC = SY-SUBRC.

IF SY-SUBRC EQ 0.

IF GSTR_CHARG-VBELN NE GSTU_CHARG-VBELN.

LOCL_SUBRC = 4.

ENDIF.

ENDIF.

ENDWHILE.

ITAB_CNT-VBELN = GSTR_CHARG-VBELN.

ITAB_CNT-CNT = V_CNT.

APPEND ITAB_CNT.

ENDLOOP.

LOOP AT GTBL_CHARG INTO GSTR_CHARG.

MOVE-CORRESPONDING GSTR_CHARG TO ITAB.

APPEND ITAB.

ENDLOOP.

IF ITAB[] IS INITIAL. "DEVK940953

WRITE:/ 'No deliveries found for the entered selection-criteria'.

ENDIF. "DEVK940953

ENDFORM. " 0110_select_data

&----


*& Form 0200_change_delivery_doc

&----


  • text

----


  • --> p1 text

  • <-- p2 text

----


FORM 0200_CHANGE_DELIVERY_DOC.

PERFORM 0210_PROCESS_INITIAL_SCREENS.

CLEAR CNTR.

WHILE CNTR LT ITAB_CNT-CNT.

CNTR = CNTR + 1.

CNTR_TEXT = CNTR.

PERFORM 0220_PROCESS_ITEM_DATA.

ENDWHILE.

PERFORM 0230_PROCESS_LAST_SCREENS.

ENDFORM. " 0200_change_delivery_doc

&----


*& Form 0210_process_initial_screens

&----


  • text

----


  • --> p1 text

  • <-- p2 text

----


FORM 0210_PROCESS_INITIAL_SCREENS.

PERFORM BDC_DYNPRO USING 'SAPMV50A' '0101'.

PERFORM BDC_FIELD USING 'BDC_CURSOR'

'LIKP-VBELN'.

PERFORM BDC_FIELD USING 'BDC_OKCODE'

'=UEKO'.

PERFORM BDC_FIELD USING 'LIKP-VBELN'

ITAB-VBELN.

PERFORM BDC_DYNPRO USING 'SAPMV50A' '0220'.

ENDFORM. " 0210_process_initial_screens

&----


*& Form 0220_process_item_data

&----


  • text

----


  • --> p1 text

  • <-- p2 text

----


FORM 0220_PROCESS_ITEM_DATA.

perform bdc_field using 'BDC_OKCODE'

'=POPO'.

perform bdc_field using 'BDC_CURSOR'

'LIKP-BTGEW'.

perform bdc_dynpro using 'SAPMV50A' '0111'.

perform bdc_field using 'BDC_CURSOR'

'RV50A-POSNR'.

perform bdc_field using 'BDC_OKCODE'

'=POPO'.

perform bdc_field using 'RV50A-POSNR'

CNTR_TEXT.

perform bdc_dynpro using 'SAPMV50A' '0220'.

perform bdc_field using 'BDC_CURSOR'

'LIPS-POSNR(01)'.

perform bdc_field using 'BDC_OKCODE'

'=CHSP'.

perform bdc_field using 'RV50A-LIPS_SELKZ(01)'

'X'.

perform bdc_dynpro using 'SAPMV50A' '0250'.

perform bdc_field using 'BDC_CURSOR'

'LIPS-CHARG(01)'.

perform bdc_field using 'BDC_OKCODE'

'=CHSL'.

perform bdc_dynpro using 'SAPLBATC' '0001'.

perform bdc_field using 'BDC_CURSOR'

'LBATC-MATNR'.

perform bdc_field using 'BDC_OKCODE'

'=PICK'.

perform bdc_dynpro using 'SAPMV50A' '0250'.

perform bdc_field using 'BDC_CURSOR'

'LIPS-LFIMG(01)'.

perform bdc_field using 'BDC_OKCODE'

'=BACK'.

perform bdc_dynpro using 'SAPMV50A' '0220'.

ENDFORM. " 0220_process_item_data

&----


*& Form 0230_process_last_screens

&----


  • text

----


  • --> p1 text

  • <-- p2 text

----


FORM 0230_PROCESS_LAST_SCREENS.

IF ITAB-LFART EQ 'ZJRT' OR ITAB-LFART EQ 'ZJLF'. "DEVK929268

  • For Offstore deliveries, just save the delivery document

PERFORM BDC_FIELD USING 'BDC_OKCODE'

'=SICH'.

ELSEIF ITAB-LFART EQ 'ZJO'.

  • For POS deliveries, post the goods issue document. This automatically

  • saves the delivery document

PERFORM BDC_FIELD USING 'BDC_OKCODE'

'=WABU'.

ENDIF.

PERFORM BDC_FIELD USING 'BDC_CURSOR'

'LIKP-BTGEW'.

PERFORM BDC_TRANSACTION USING 'VL02'.

ENDFORM. " 0230_process_last_screens

----


  • Start new transaction according to parameters *

----


FORM BDC_TRANSACTION USING TCODE.

DATA: L_MSTRING(480).

DATA: L_SUBRC LIKE SY-SUBRC.

REFRESH MESSTAB.

CALL TRANSACTION TCODE USING BDCDATA

MODE CTUMODE

UPDATE CUPDATE

MESSAGES INTO MESSTAB.

L_SUBRC = SY-SUBRC.

IF L_SUBRC NE 0.

CLEAR V_IND.

LOOP AT MESSTAB.

SELECT SINGLE * FROM T100 WHERE SPRSL = MESSTAB-MSGSPRA

AND ARBGB = MESSTAB-MSGID

AND MSGNR = MESSTAB-MSGNR.

IF SY-SUBRC = 0.

L_MSTRING = T100-TEXT.

IF L_MSTRING CS '&1'.

REPLACE '&1' WITH MESSTAB-MSGV1 INTO L_MSTRING.

REPLACE '&2' WITH MESSTAB-MSGV2 INTO L_MSTRING.

REPLACE '&3' WITH MESSTAB-MSGV3 INTO L_MSTRING.

REPLACE '&4' WITH MESSTAB-MSGV4 INTO L_MSTRING.

ELSE.

REPLACE '&' WITH MESSTAB-MSGV1 INTO L_MSTRING.

REPLACE '&' WITH MESSTAB-MSGV2 INTO L_MSTRING.

REPLACE '&' WITH MESSTAB-MSGV3 INTO L_MSTRING.

REPLACE '&' WITH MESSTAB-MSGV4 INTO L_MSTRING.

ENDIF.

CONDENSE L_MSTRING.

  • write: / messtab-msgtyp, l_mstring(250).

IF MESSTAB-MSGTYP = 'E'.

ERRORTAB-VBELN = ITAB-VBELN.

ERRORTAB-ERROR_TEXT = L_MSTRING.

APPEND ERRORTAB.

V_IND = 'X'.

ENDIF.

ELSE.

  • write: / messtab.

IF MESSTAB-MSGTYP = 'E'.

ERRORTAB-VBELN = ITAB-VBELN.

ERRORTAB-ERROR_TEXT = 'Unknown'.

APPEND ERRORTAB.

V_IND = 'X'.

ENDIF.

ENDIF.

ENDLOOP.

IF V_IND IS INITIAL.

ERRORTAB-VBELN = ITAB-VBELN.

ERRORTAB-ERROR_TEXT = 'Unknown'.

APPEND ERRORTAB.

ENDIF.

ELSE.

  • write:/ 'Goods issue document created successfully for ', itab-vbeln.

ENDIF.

SKIP.

    • Erzeugen fehlermappe ************************************************

IF L_SUBRC <> 0 AND E_GROUP <> SPACE.

IF E_GROUP_OPENED = ' '.

CALL FUNCTION 'BDC_OPEN_GROUP'

EXPORTING

CLIENT = SY-MANDT

GROUP = E_GROUP

USER = E_USER

KEEP = E_KEEP

HOLDDATE = E_HDATE.

E_GROUP_OPENED = 'X'.

ENDIF.

CALL FUNCTION 'BDC_INSERT'

EXPORTING

TCODE = TCODE

TABLES

DYNPROTAB = BDCDATA.

ENDIF.

REFRESH BDCDATA.

ENDFORM.

Hi,

I have written the most of the performance objects but my program is still taking more time can any one tell me how to improve my code performance .

below is the code

Thanks in Advance

************************************************************************

&----


REPORT Zbach NO STANDARD PAGE HEADING

LINE-SIZE 132.

INCLUDE ZBATCH_BDC.

INCLUDE ZBATCH_DAT.

START-OF-SELECTION.

  • select the deliveries that match the selection-criteria

IF P_ORI EQ 'X'. "DEVK940953

PERFORM 0100_SELECT_DATA.

ELSE. "DEVK940953

PERFORM 0110_SELECT_DATA. "DEVK940953

ENDIF. "DEVK940953

IF NOT ITAB[] IS INITIAL.

  • process the selected deliveries

LOOP AT ITAB.

CLEAR ITAB_CNT.

  • READ TABLE itab_cnt WITH KEY vbeln = itab-vbeln. "DEVK940953

READ TABLE ITAB_CNT WITH KEY VBELN = ITAB-VBELN "DEVK940953

BINARY SEARCH. "DEVK940953

IF ITAB_CNT-CNT NE 0.

PERFORM 0200_CHANGE_DELIVERY_DOC.

ENDIF.

CLEAR ITAB.

ENDLOOP.

PERFORM CLOSE_GROUP.

  • write error messages on the screen , if any

IF NOT ERRORTAB[] IS INITIAL.

LOOP AT ERRORTAB.

IF SY-TABIX EQ 1.

WRITE:/ 'Delivery', 20 'Reason for failure'.

ULINE.

ENDIF.

WRITE:/ ERRORTAB-VBELN, 20 ERRORTAB-ERROR_TEXT.

ENDLOOP.

ELSE.

LEAVE SCREEN.

ENDIF.

ENDIF.

&----


*& Form 0100_select_data

&----


  • text

----


  • --> p1 text

  • <-- p2 text

----


FORM 0100_SELECT_DATA.

CLEAR ITAB.

REFRESH ITAB.

  • select the deliveries based on selection-criteria.

  • Select POS and Offstore deliveries.

  • Exclude Return deliveries in this program

SELECT VBELN LFART INTO TABLE ITAB FROM LIKP

WHERE VBELN IN S_VBELN

AND VSTEL IN S_VSTEL

AND WADAT IN S_WADAT

AND LFART IN ('ZJO','ZJRT','ZJLF'). "DEVK929268

  • select deliveries for which Goods issue is already done

IF NOT ITAB[] IS INITIAL.

SELECT VBELN FROM VBUK INTO TABLE ITAB_DEL

FOR ALL ENTRIES IN ITAB

WHERE VBELN = ITAB-VBELN

AND WBSTK = 'C'.

ENDIF.

  • delete deliveries in ITAB for which goods issue is done

LOOP AT ITAB_DEL.

DELETE ITAB WHERE VBELN = ITAB_DEL-VBELN.

ENDLOOP.

  • select the deliveries for which batch determination has already done

CLEAR ITAB_DEL.

REFRESH ITAB_DEL.

IF NOT ITAB[] IS INITIAL.

SELECT VBELN FROM LIPS INTO TABLE ITAB_DEL

FOR ALL ENTRIES IN ITAB

WHERE VBELN = ITAB-VBELN

AND CHARG NE SPACE.

ENDIF.

  • delete deliveries in ITAB for which batch determination is done

LOOP AT ITAB_DEL.

DELETE ITAB WHERE VBELN = ITAB_DEL-VBELN.

ENDLOOP.

  • select the number of items available for these deliveries

IF NOT ITAB[] IS INITIAL.

LOOP AT ITAB.

CLEAR V_CNT.

SELECT SINGLE COUNT( * ) INTO V_CNT FROM LIPS

WHERE VBELN = ITAB-VBELN.

ITAB_CNT-VBELN = ITAB-VBELN.

ITAB_CNT-CNT = V_CNT.

APPEND ITAB_CNT.

ENDLOOP.

ELSE.

WRITE:/ 'No deliveries found for the entered selection-criteria'.

ENDIF.

ENDFORM. " 0100_select_data

&----


*& Form 0110_select_data

&----


FORM 0110_SELECT_DATA.

DATA: LOCL_TABIX TYPE SYTABIX,

LOCL_INDEX TYPE SYTABIX,

LOCL_TFILL TYPE SYTFILL,

LOCL_SUBRC TYPE SYSUBRC.

SELECT T1~VBELN

T3~POSNR

T3~CHARG

T1~LFART

FROM LIKP AS T1

INNER JOIN VBUK AS T2

ON T1VBELN EQ T2VBELN

INNER JOIN LIPS AS T3

ON T1VBELN EQ T3VBELN

INTO TABLE GTBL_CHARG

WHERE T1~VBELN IN S_VBELN

AND T1~VSTEL IN S_VSTEL

AND T1~WADAT IN S_WADAT

AND T1~LFART IN ('ZJO','ZJRT','ZJLF')

AND T2~WBSTK NE 'C'

%_HINTS ORACLE 'index(likp "Z1")'.

GTAB_CHARG[] = GTBL_CHARG[].

DELETE GTAB_CHARG WHERE CHARG EQ ' '.

LOOP AT GTBL_CHARG INTO GSTR_CHARG.

READ TABLE GTAB_CHARG INTO GSTU_CHARG

WITH KEY VBELN = GSTR_CHARG-VBELN

BINARY SEARCH.

IF SY-SUBRC EQ 0.

DELETE GTBL_CHARG.

ENDIF.

ENDLOOP.

GTAB_CHARG[] = GTBL_CHARG[].

DELETE ADJACENT DUPLICATES FROM GTBL_CHARG

COMPARING VBELN.

LOOP AT GTBL_CHARG INTO GSTR_CHARG.

CLEAR: V_CNT.

READ TABLE GTAB_CHARG INTO GSTU_CHARG

WITH KEY VBELN = GSTR_CHARG-VBELN

BINARY SEARCH.

LOCL_SUBRC = SY-SUBRC.

LOCL_INDEX = SY-TABIX.

WHILE LOCL_SUBRC EQ 0.

V_CNT = V_CNT + 1.

LOCL_INDEX = LOCL_INDEX + 1.

READ TABLE GTAB_CHARG INTO GSTU_CHARG INDEX LOCL_INDEX.

LOCL_SUBRC = SY-SUBRC.

IF SY-SUBRC EQ 0.

IF GSTR_CHARG-VBELN NE GSTU_CHARG-VBELN.

LOCL_SUBRC = 4.

ENDIF.

ENDIF.

ENDWHILE.

ITAB_CNT-VBELN = GSTR_CHARG-VBELN.

ITAB_CNT-CNT = V_CNT.

APPEND ITAB_CNT.

ENDLOOP.

LOOP AT GTBL_CHARG INTO GSTR_CHARG.

MOVE-CORRESPONDING GSTR_CHARG TO ITAB.

APPEND ITAB.

ENDLOOP.

IF ITAB[] IS INITIAL. "DEVK940953

WRITE:/ 'No deliveries found for the entered selection-criteria'.

ENDIF. "DEVK940953

ENDFORM. " 0110_select_data

&----


*& Form 0200_change_delivery_doc

&----


  • text

----


  • --> p1 text

  • <-- p2 text

----


FORM 0200_CHANGE_DELIVERY_DOC.

PERFORM 0210_PROCESS_INITIAL_SCREENS.

CLEAR CNTR.

WHILE CNTR LT ITAB_CNT-CNT.

CNTR = CNTR + 1.

CNTR_TEXT = CNTR.

PERFORM 0220_PROCESS_ITEM_DATA.

ENDWHILE.

PERFORM 0230_PROCESS_LAST_SCREENS.

ENDFORM. " 0200_change_delivery_doc

&----


*& Form 0210_process_initial_screens

&----


  • text

----


  • --> p1 text

  • <-- p2 text

----


FORM 0210_PROCESS_INITIAL_SCREENS.

PERFORM BDC_DYNPRO USING 'SAPMV50A' '0101'.

PERFORM BDC_FIELD USING 'BDC_CURSOR'

'LIKP-VBELN'.

PERFORM BDC_FIELD USING 'BDC_OKCODE'

'=UEKO'.

PERFORM BDC_FIELD USING 'LIKP-VBELN'

ITAB-VBELN.

PERFORM BDC_DYNPRO USING 'SAPMV50A' '0220'.

ENDFORM. " 0210_process_initial_screens

&----


*& Form 0220_process_item_data

&----


  • text

----


  • --> p1 text

  • <-- p2 text

----


FORM 0220_PROCESS_ITEM_DATA.

perform bdc_field using 'BDC_OKCODE'

'=POPO'.

perform bdc_field using 'BDC_CURSOR'

'LIKP-BTGEW'.

perform bdc_dynpro using 'SAPMV50A' '0111'.

perform bdc_field using 'BDC_CURSOR'

'RV50A-POSNR'.

perform bdc_field using 'BDC_OKCODE'

'=POPO'.

perform bdc_field using 'RV50A-POSNR'

CNTR_TEXT.

perform bdc_dynpro using 'SAPMV50A' '0220'.

perform bdc_field using 'BDC_CURSOR'

'LIPS-POSNR(01)'.

perform bdc_field using 'BDC_OKCODE'

'=CHSP'.

perform bdc_field using 'RV50A-LIPS_SELKZ(01)'

'X'.

perform bdc_dynpro using 'SAPMV50A' '0250'.

perform bdc_field using 'BDC_CURSOR'

'LIPS-CHARG(01)'.

perform bdc_field using 'BDC_OKCODE'

'=CHSL'.

perform bdc_dynpro using 'SAPLBATC' '0001'.

perform bdc_field using 'BDC_CURSOR'

'LBATC-MATNR'.

perform bdc_field using 'BDC_OKCODE'

'=PICK'.

perform bdc_dynpro using 'SAPMV50A' '0250'.

perform bdc_field using 'BDC_CURSOR'

'LIPS-LFIMG(01)'.

perform bdc_field using 'BDC_OKCODE'

'=BACK'.

perform bdc_dynpro using 'SAPMV50A' '0220'.

ENDFORM. " 0220_process_item_data

&----


*& Form 0230_process_last_screens

&----


  • text

----


  • --> p1 text

  • <-- p2 text

----


FORM 0230_PROCESS_LAST_SCREENS.

IF ITAB-LFART EQ 'ZJRT' OR ITAB-LFART EQ 'ZJLF'. "DEVK929268

  • For Offstore deliveries, just save the delivery document

PERFORM BDC_FIELD USING 'BDC_OKCODE'

'=SICH'.

ELSEIF ITAB-LFART EQ 'ZJO'.

  • For POS deliveries, post the goods issue document. This automatically

  • saves the delivery document

PERFORM BDC_FIELD USING 'BDC_OKCODE'

'=WABU'.

ENDIF.

PERFORM BDC_FIELD USING 'BDC_CURSOR'

'LIKP-BTGEW'.

PERFORM BDC_TRANSACTION USING 'VL02'.

ENDFORM. " 0230_process_last_screens

----


  • Start new transaction according to parameters *

----


FORM BDC_TRANSACTION USING TCODE.

DATA: L_MSTRING(480).

DATA: L_SUBRC LIKE SY-SUBRC.

REFRESH MESSTAB.

CALL TRANSACTION TCODE USING BDCDATA

MODE CTUMODE

UPDATE CUPDATE

MESSAGES INTO MESSTAB.

L_SUBRC = SY-SUBRC.

IF L_SUBRC NE 0.

CLEAR V_IND.

LOOP AT MESSTAB.

SELECT SINGLE * FROM T100 WHERE SPRSL = MESSTAB-MSGSPRA

AND ARBGB = MESSTAB-MSGID

AND MSGNR = MESSTAB-MSGNR.

IF SY-SUBRC = 0.

L_MSTRING = T100-TEXT.

IF L_MSTRING CS '&1'.

REPLACE '&1' WITH MESSTAB-MSGV1 INTO L_MSTRING.

REPLACE '&2' WITH MESSTAB-MSGV2 INTO L_MSTRING.

REPLACE '&3' WITH MESSTAB-MSGV3 INTO L_MSTRING.

REPLACE '&4' WITH MESSTAB-MSGV4 INTO L_MSTRING.

ELSE.

REPLACE '&' WITH MESSTAB-MSGV1 INTO L_MSTRING.

REPLACE '&' WITH MESSTAB-MSGV2 INTO L_MSTRING.

REPLACE '&' WITH MESSTAB-MSGV3 INTO L_MSTRING.

REPLACE '&' WITH MESSTAB-MSGV4 INTO L_MSTRING.

ENDIF.

CONDENSE L_MSTRING.

  • write: / messtab-msgtyp, l_mstring(250).

IF MESSTAB-MSGTYP = 'E'.

ERRORTAB-VBELN = ITAB-VBELN.

ERRORTAB-ERROR_TEXT = L_MSTRING.

APPEND ERRORTAB.

V_IND = 'X'.

ENDIF.

ELSE.

  • write: / messtab.

IF MESSTAB-MSGTYP = 'E'.

ERRORTAB-VBELN = ITAB-VBELN.

ERRORTAB-ERROR_TEXT = 'Unknown'.

APPEND ERRORTAB.

V_IND = 'X'.

ENDIF.

ENDIF.

ENDLOOP.

IF V_IND IS INITIAL.

ERRORTAB-VBELN = ITAB-VBELN.

ERRORTAB-ERROR_TEXT = 'Unknown'.

APPEND ERRORTAB.

ENDIF.

ELSE.

  • write:/ 'Goods issue document created successfully for ', itab-vbeln.

ENDIF.

SKIP.

    • Erzeugen fehlermappe ************************************************

IF L_SUBRC <> 0 AND E_GROUP <> SPACE.

IF E_GROUP_OPENED = ' '.

CALL FUNCTION 'BDC_OPEN_GROUP'

EXPORTING

CLIENT = SY-MANDT

GROUP = E_GROUP

USER = E_USER

KEEP = E_KEEP

HOLDDATE = E_HDATE.

E_GROUP_OPENED = 'X'.

ENDIF.

CALL FUNCTION 'BDC_INSERT'

EXPORTING

TCODE = TCODE

TABLES

DYNPROTAB = BDCDATA.

ENDIF.

REFRESH BDCDATA.

ENDFORM.

1 REPLY 1
Read only

Former Member
0 Likes
316

The code generally looks OK. (I especially like the way you are using binary searches and indexed reads. Where'd you hear about that;)

A few ideas - make sure s_vbeln is populated before using it in SELECTs.

You're not asking, but I don't think the following code works:


* select deliveries for which Goods issue is already done
  IF NOT itab[] IS INITIAL.
    SELECT vbeln FROM vbuk INTO TABLE itab_del
    FOR ALL ENTRIES IN itab
    WHERE vbeln = itab-vbeln
    AND wbstk = 'C'.
  ENDIF.

* delete deliveries in ITAB for which goods issue is done
  LOOP AT itab_del.
    DELETE itab WHERE vbeln = itab_del-vbeln.
  ENDLOOP.

This will only delete entries from itab where vbeln = itab_del-vbeln (the value in the header area - <b>not</b> all entries in the table).

I wouldn't be surprised if most of the time is taken up with the CALL TRANSACTION. If so, it's out of your hands.

Have you done a performance trace (ST05) to see where the bottleneck is?

Rob