Performance Issue with this code
Hi Gurus,
Can anyone please help tweak the performance of this program.
REPORT ZSQ01_AUDITSALESORD4_1.
TABLES: VBAP, MATERIALID, VBAK, VBEP.
SELECTION-SCREEN: BEGIN OF BLOCK PROG WITH FRAME TITLE TEXT-F58.
SELECT-OPTIONS SPREPORT ZSQ01_AUDITSALESORD4_1.
TABLES: VBAP, MATERIALID, VBAK, VBEP.
SELECTION-SCREEN: BEGIN OF BLOCK PROG WITH FRAME TITLE TEXT-F58.
SELECT-OPTIONS SP$00001 FOR VBAK-VBELN MEMORY ID AUN.
SELECT-OPTIONS SP$00002 FOR VBAP-POSNR MEMORY ID APO.
SELECT-OPTIONS SP$00003 FOR MATERIALID-MATNR_EXT.
SELECT-OPTIONS SP$00004 FOR VBAK-ERDAT.
SELECT-OPTIONS SP$00005 FOR VBAP-KWMENG.
SELECT-OPTIONS SP$00006 FOR VBAP-UEPOS.
SELECT-OPTIONS SP$00007 FOR VBAP-MATWA MEMORY ID MAT.
SELECT-OPTIONS SP$00008 FOR VBAP-PSTYV.
SELECTION-SCREEN: END OF BLOCK PROG.
DATA: BEGIN OF ITAB2_SALESORD4 OCCURS 0,
VBELN(10),
AUART(4),
POSNR(6),
WERKS(4),
MATNR_EXT(40),
ERDAT(8),
KWMENG(19),
VRKME(3),
UEPOS(6),
MATWA(40),
PSTYV(4),
ABGRU(2),
Z_PROM_SHP_DT(8),
BSTNK(20),
KUNNR(10),
AUGRU(3),
KZTLF(1),
FILLER(12),
END OF ITAB2_SALESORD4.
CONSTANTS: C_REASON_VR LIKE VBAK-AUGRU VALUE 'VR',
C_REASON_EM LIKE VBAK-AUGRU VALUE 'EM'.
DATA: L_VBELN TYPE VBFA-VBELN,
L_POSNR TYPE VBFA-POSNN,
L_LVBELN TYPE VBFA-VBELN.
DATA: BEGIN OF ITAB_SUPER OCCURS 0,
VBELN TYPE VBAP-VBELN,
POSNR TYPE VBAP-POSNR,
END OF ITAB_SUPER.
START-OF-SELECTION.
SELECT VBAK~ERDAT VBAK~VBELN VBAP~KWMENG VBAP~MATNR VBAP~MATWA
VBAP~POSNR VBAP~PSTYV VBAP~UEPOS VBAP~VBELN VBAP~VRKME
VBAP~ABGRU MATERIALID~MATNR_EXT MATERIALID~MATNR_INT
VBAP~Z_PROM_SHP_DT VBAK~AUART VBAP~WERKS VBAK~BSTNK VBAK~KUNNR VBAK~AUGRU VBAP~KZTLF
INTO (VBAK-ERDAT , VBAK-VBELN , VBAP-KWMENG , VBAP-MATNR , VBAP-MATWA
, VBAP-POSNR , VBAP-PSTYV , VBAP-UEPOS , VBAP-VBELN , VBAP-VRKME
, VBAP-ABGRU , MATERIALID-MATNR_EXT , MATERIALID-MATNR_INT,
VBAP-Z_PROM_SHP_DT, VBAK-AUART, VBAP-WERKS, VBAK-BSTNK,
VBAK-KUNNR, VBAK-AUGRU, VBAP-KZTLF)
FROM ( VBAK
INNER JOIN VBAP
ON VBAP~VBELN = VBAK~VBELN
INNER JOIN MATERIALID
ON MATERIALID~MATNR_INT = VBAP~MATNR )
WHERE VBAK~ERDAT IN SP$00004
AND VBAK~VBELN IN SP$00001
AND VBAP~KWMENG IN SP$00005
AND VBAP~MATWA IN SP$00007
AND VBAP~POSNR IN SP$00002
AND VBAP~PSTYV IN SP$00008
AND VBAP~UEPOS IN SP$00006
AND MATERIALID~MATNR_EXT IN SP$00003.
SELECT SINGLE VBELN POSNN
FROM VBFA
INTO (L_VBELN, L_POSNR)
WHERE VBELV = VBAK-VBELN AND
POSNV = VBAP-POSNR AND
VBTYP_N = 'J'.
IF SY-SUBRC = 0 AND NOT L_VBELN IS INITIAL.
SELECT SINGLE VBELN
FROM LIPS
INTO L_LVBELN
WHERE VBELN = L_VBELN AND
POSNR = L_POSNR.
IF SY-SUBRC NE 0.
IF NOT VBAP-UEPOS IS INITIAL.
MOVE VBAP-VBELN TO ITAB_SUPER-VBELN.
MOVE VBAP-UEPOS TO ITAB_SUPER-POSNR.
APPEND ITAB_SUPER.
ENDIF.
CONTINUE.
ENDIF.
ENDIF.
MOVE VBAK-VBELN TO ITAB2_SALESORD4-VBELN.
MOVE VBAK-AUART TO ITAB2_SALESORD4-AUART.
MOVE VBAP-POSNR TO ITAB2_SALESORD4-POSNR.
MOVE VBAP-WERKS TO ITAB2_SALESORD4-WERKS.
MOVE MATERIALID-MATNR_EXT TO ITAB2_SALESORD4-MATNR_EXT.
MOVE VBAK-ERDAT TO ITAB2_SALESORD4-ERDAT.
MOVE VBAP-KWMENG TO ITAB2_SALESORD4-KWMENG.
MOVE VBAP-VRKME TO ITAB2_SALESORD4-VRKME.
MOVE VBAP-UEPOS TO ITAB2_SALESORD4-UEPOS.
MOVE VBAP-MATWA TO ITAB2_SALESORD4-MATWA.
MOVE VBAP-PSTYV TO ITAB2_SALESORD4-PSTYV.
MOVE VBAP-ABGRU TO ITAB2_SALESORD4-ABGRU.
MOVE VBAP-Z_PROM_SHP_DT TO ITAB2_SALESORD4-Z_PROM_SHP_DT.
MOVE VBAK-BSTNK TO ITAB2_SALESORD4-BSTNK.
MOVE VBAK-KUNNR TO ITAB2_SALESORD4-KUNNR.
IF VBAK-AUGRU = C_REASON_VR.
MOVE C_REASON_EM TO ITAB2_SALESORD4-AUGRU.
ELSE.
MOVE VBAK-AUGRU TO ITAB2_SALESORD4-AUGRU.
ENDIF.
MOVE VBAP-KZTLF TO ITAB2_SALESORD4-KZTLF.
ITAB2_SALESORD4-KWMENG = ITAB2_SALESORD4-KWMENG * 1000.
WRITE ITAB2_SALESORD4-KWMENG TO ITAB2_SALESORD4-KWMENG
DECIMALS 0 RIGHT-JUSTIFIED.
OVERLAY ITAB2_SALESORD4-KWMENG WITH '00000000000000000'.
APPEND ITAB2_SALESORD4.
CLEAR ITAB2_SALESORD4.
ENDSELECT.
SORT ITAB2_SALESORD4 BY VBELN POSNR Z_PROM_SHP_DT.
SORT ITAB_SUPER BY VBELN POSNR.
DATA: G_FILE LIKE RLGRAP-FILENAME,
ZDFLTVAL11(40),
ZDFLTVAL22(40).
SELECT SINGLE Z_DFLT_VAL1 Z_DFLT_VAL2 INTO
(ZDFLTVAL11,ZDFLTVAL22)
FROM ZLE_LOG_DFLT_VAL
WHERE LGNUM = ' '
AND Z_DFLT_TYP = 'IMAS_SAP_SALESORD4_G1'.
TRANSLATE ZDFLTVAL22 TO LOWER CASE.
CONCATENATE ZDFLTVAL11 ZDFLTVAL22 INTO G_FILE.
OPEN DATASET G_FILE FOR OUTPUT IN TEXT MODE.
LOOP AT ITAB2_SALESORD4.
READ TABLE ITAB_SUPER WITH KEY VBELN = ITAB2_SALESORD4-VBELN
POSNR = ITAB2_SALESORD4-POSNR
BINARY SEARCH.
IF SY-SUBRC EQ 0.
CONTINUE.
ENDIF.
TRANSFER ITAB2_SALESORD4 TO G_FILE.
ENDLOOP.
CLOSE DATASET G_FILE.
FOR VBAK-VBELN MEMORY ID AUN.
SELECT-OPTIONS SP[code]REPORT ZSQ01_AUDITSALESORD4_1.
TABLES: VBAP, MATERIALID, VBAK, VBEP.
SELECTION-SCREEN: BEGIN OF BLOCK PROG WITH FRAME TITLE TEXT-F58.
SELECT-OPTIONS SP$00001 FOR VBAK-VBELN MEMORY ID AUN.
SELECT-OPTIONS SP$00002 FOR VBAP-POSNR MEMORY ID APO.
SELECT-OPTIONS SP$00003 FOR MATERIALID-MATNR_EXT.
SELECT-OPTIONS SP$00004 FOR VBAK-ERDAT.
SELECT-OPTIONS SP$00005 FOR VBAP-KWMENG.
SELECT-OPTIONS SP$00006 FOR VBAP-UEPOS.
SELECT-OPTIONS SP$00007 FOR VBAP-MATWA MEMORY ID MAT.
SELECT-OPTIONS SP$00008 FOR VBAP-PSTYV.
SELECTION-SCREEN: END OF BLOCK PROG.
DATA: BEGIN OF ITAB2_SALESORD4 OCCURS 0,
VBELN(10),
AUART(4),
POSNR(6),
WERKS(4),
MATNR_EXT(40),
ERDAT(8),
KWMENG(19),
VRKME(3),
UEPOS(6),
MATWA(40),
PSTYV(4),
ABGRU(2),
Z_PROM_SHP_DT(8),
BSTNK(20),
KUNNR(10),
AUGRU(3),
KZTLF(1),
FILLER(12),
END OF ITAB2_SALESORD4.
CONSTANTS: C_REASON_VR LIKE VBAK-AUGRU VALUE 'VR',
C_REASON_EM LIKE VBAK-AUGRU VALUE 'EM'.
DATA: L_VBELN TYPE VBFA-VBELN,
L_POSNR TYPE VBFA-POSNN,
L_LVBELN TYPE VBFA-VBELN.
DATA: BEGIN OF ITAB_SUPER OCCURS 0,
VBELN TYPE VBAP-VBELN,
POSNR TYPE VBAP-POSNR,
END OF ITAB_SUPER.
START-OF-SELECTION.
SELECT VBAK~ERDAT VBAK~VBELN VBAP~KWMENG VBAP~MATNR VBAP~MATWA
VBAP~POSNR VBAP~PSTYV VBAP~UEPOS VBAP~VBELN VBAP~VRKME
VBAP~ABGRU MATERIALID~MATNR_EXT MATERIALID~MATNR_INT
VBAP~Z_PROM_SHP_DT VBAK~AUART VBAP~WERKS VBAK~BSTNK VBAK~KUNNR VBAK~AUGRU VBAP~KZTLF
INTO (VBAK-ERDAT , VBAK-VBELN , VBAP-KWMENG , VBAP-MATNR , VBAP-MATWA
, VBAP-POSNR , VBAP-PSTYV , VBAP-UEPOS , VBAP-VBELN , VBAP-VRKME
, VBAP-ABGRU , MATERIALID-MATNR_EXT , MATERIALID-MATNR_INT,
VBAP-Z_PROM_SHP_DT, VBAK-AUART, VBAP-WERKS, VBAK-BSTNK,
VBAK-KUNNR, VBAK-AUGRU, VBAP-KZTLF)
FROM ( VBAK
INNER JOIN VBAP
ON VBAP~VBELN = VBAK~VBELN
INNER JOIN MATERIALID
ON MATERIALID~MATNR_INT = VBAP~MATNR )
WHERE VBAK~ERDAT IN SP$00004
AND VBAK~VBELN IN SP$00001
AND VBAP~KWMENG IN SP$00005
AND VBAP~MATWA IN SP$00007
AND VBAP~POSNR IN SP$00002
AND VBAP~PSTYV IN SP$00008
AND VBAP~UEPOS IN SP$00006
AND MATERIALID~MATNR_EXT IN SP$00003.
SELECT SINGLE VBELN POSNN
FROM VBFA
INTO (L_VBELN, L_POSNR)
WHERE VBELV = VBAK-VBELN AND
POSNV = VBAP-POSNR AND
VBTYP_N = 'J'.
IF SY-SUBRC = 0 AND NOT L_VBELN IS INITIAL.
SELECT SINGLE VBELN
FROM LIPS
INTO L_LVBELN
WHERE VBELN = L_VBELN AND
POSNR = L_POSNR.
IF SY-SUBRC NE 0.
IF NOT VBAP-UEPOS IS INITIAL.
MOVE VBAP-VBELN TO ITAB_SUPER-VBELN.
MOVE VBAP-UEPOS TO ITAB_SUPER-POSNR.
APPEND ITAB_SUPER.
ENDIF.
CONTINUE.
ENDIF.
ENDIF.
MOVE VBAK-VBELN TO ITAB2_SALESORD4-VBELN.
MOVE VBAK-AUART TO ITAB2_SALESORD4-AUART.
MOVE VBAP-POSNR TO ITAB2_SALESORD4-POSNR.
MOVE VBAP-WERKS TO ITAB2_SALESORD4-WERKS.
MOVE MATERIALID-MATNR_EXT TO ITAB2_SALESORD4-MATNR_EXT.
MOVE VBAK-ERDAT TO ITAB2_SALESORD4-ERDAT.
MOVE VBAP-KWMENG TO ITAB2_SALESORD4-KWMENG.
MOVE VBAP-VRKME TO ITAB2_SALESORD4-VRKME.
MOVE VBAP-UEPOS TO ITAB2_SALESORD4-UEPOS.
MOVE VBAP-MATWA TO ITAB2_SALESORD4-MATWA.
MOVE VBAP-PSTYV TO ITAB2_SALESORD4-PSTYV.
MOVE VBAP-ABGRU TO ITAB2_SALESORD4-ABGRU.
MOVE VBAP-Z_PROM_SHP_DT TO ITAB2_SALESORD4-Z_PROM_SHP_DT.
MOVE VBAK-BSTNK TO ITAB2_SALESORD4-BSTNK.
MOVE VBAK-KUNNR TO ITAB2_SALESORD4-KUNNR.
IF VBAK-AUGRU = C_REASON_VR.
MOVE C_REASON_EM TO ITAB2_SALESORD4-AUGRU.
ELSE.
MOVE VBAK-AUGRU TO ITAB2_SALESORD4-AUGRU.
ENDIF.
MOVE VBAP-KZTLF TO ITAB2_SALESORD4-KZTLF.
ITAB2_SALESORD4-KWMENG = ITAB2_SALESORD4-KWMENG * 1000.
WRITE ITAB2_SALESORD4-KWMENG TO ITAB2_SALESORD4-KWMENG
DECIMALS 0 RIGHT-JUSTIFIED.
OVERLAY ITAB2_SALESORD4-KWMENG WITH '00000000000000000'.
APPEND ITAB2_SALESORD4.
CLEAR ITAB2_SALESORD4.
ENDSELECT.
SORT ITAB2_SALESORD4 BY VBELN POSNR Z_PROM_SHP_DT.
SORT ITAB_SUPER BY VBELN POSNR.
DATA: G_FILE LIKE RLGRAP-FILENAME,
ZDFLTVAL11(40),
ZDFLTVAL22(40).
SELECT SINGLE Z_DFLT_VAL1 Z_DFLT_VAL2 INTO
(ZDFLTVAL11,ZDFLTVAL22)
FROM ZLE_LOG_DFLT_VAL
WHERE LGNUM = ' '
AND Z_DFLT_TYP = 'IMAS_SAP_SALESORD4_G1'.
TRANSLATE ZDFLTVAL22 TO LOWER CASE.
CONCATENATE ZDFLTVAL11 ZDFLTVAL22 INTO G_FILE.
OPEN DATASET G_FILE FOR OUTPUT IN TEXT MODE.
LOOP AT ITAB2_SALESORD4.
READ TABLE ITAB_SUPER WITH KEY VBELN = ITAB2_SALESORD4-VBELN
POSNR = ITAB2_SALESORD4-POSNR
BINARY SEARCH.
IF SY-SUBRC EQ 0.
CONTINUE.
ENDIF.
TRANSFER ITAB2_SALESORD4 TO G_FILE.
ENDLOOP.
CLOSE DATASET G_FILE.
[/code]2 FOR VBAP-POSNR MEMORY ID APO.
SELECT-OPTIONS SP[code]REPORT ZSQ01_AUDITSALESORD4_1.
TABLES: VBAP, MATERIALID, VBAK, VBEP.
SELECTION-SCREEN: BEGIN OF BLOCK PROG WITH FRAME TITLE TEXT-F58.
SELECT-OPTIONS SP$00001 FOR VBAK-VBELN MEMORY ID AUN.
SELECT-OPTIONS SP$00002 FOR VBAP-POSNR MEMORY ID APO.
SELECT-OPTIONS SP$00003 FOR MATERIALID-MATNR_EXT.
SELECT-OPTIONS SP$00004 FOR VBAK-ERDAT.
SELECT-OPTIONS SP$00005 FOR VBAP-KWMENG.
SELECT-OPTIONS SP$00006 FOR VBAP-UEPOS.
SELECT-OPTIONS SP$00007 FOR VBAP-MATWA MEMORY ID MAT.
SELECT-OPTIONS SP$00008 FOR VBAP-PSTYV.
SELECTION-SCREEN: END OF BLOCK PROG.
DATA: BEGIN OF ITAB2_SALESORD4 OCCURS 0,
VBELN(10),
AUART(4),
POSNR(6),
WERKS(4),
MATNR_EXT(40),
ERDAT(8),
KWMENG(19),
VRKME(3),
UEPOS(6),
MATWA(40),
PSTYV(4),
ABGRU(2),
Z_PROM_SHP_DT(8),
BSTNK(20),
KUNNR(10),
AUGRU(3),
KZTLF(1),
FILLER(12),
END OF ITAB2_SALESORD4.
CONSTANTS: C_REASON_VR LIKE VBAK-AUGRU VALUE 'VR',
C_REASON_EM LIKE VBAK-AUGRU VALUE 'EM'.
DATA: L_VBELN TYPE VBFA-VBELN,
L_POSNR TYPE VBFA-POSNN,
L_LVBELN TYPE VBFA-VBELN.
DATA: BEGIN OF ITAB_SUPER OCCURS 0,
VBELN TYPE VBAP-VBELN,
POSNR TYPE VBAP-POSNR,
END OF ITAB_SUPER.
START-OF-SELECTION.
SELECT VBAK~ERDAT VBAK~VBELN VBAP~KWMENG VBAP~MATNR VBAP~MATWA
VBAP~POSNR VBAP~PSTYV VBAP~UEPOS VBAP~VBELN VBAP~VRKME
VBAP~ABGRU MATERIALID~MATNR_EXT MATERIALID~MATNR_INT
VBAP~Z_PROM_SHP_DT VBAK~AUART VBAP~WERKS VBAK~BSTNK VBAK~KUNNR VBAK~AUGRU VBAP~KZTLF
INTO (VBAK-ERDAT , VBAK-VBELN , VBAP-KWMENG , VBAP-MATNR , VBAP-MATWA
, VBAP-POSNR , VBAP-PSTYV , VBAP-UEPOS , VBAP-VBELN , VBAP-VRKME
, VBAP-ABGRU , MATERIALID-MATNR_EXT , MATERIALID-MATNR_INT,
VBAP-Z_PROM_SHP_DT, VBAK-AUART, VBAP-WERKS, VBAK-BSTNK,
VBAK-KUNNR, VBAK-AUGRU, VBAP-KZTLF)
FROM ( VBAK
INNER JOIN VBAP
ON VBAP~VBELN = VBAK~VBELN
INNER JOIN MATERIALID
ON MATERIALID~MATNR_INT = VBAP~MATNR )
WHERE VBAK~ERDAT IN SP$00004
AND VBAK~VBELN IN SP$00001
AND VBAP~KWMENG IN SP$00005
AND VBAP~MATWA IN SP$00007
AND VBAP~POSNR IN SP$00002
AND VBAP~PSTYV IN SP$00008
AND VBAP~UEPOS IN SP$00006
AND MATERIALID~MATNR_EXT IN SP$00003.
SELECT SINGLE VBELN POSNN
FROM VBFA
INTO (L_VBELN, L_POSNR)
WHERE VBELV = VBAK-VBELN AND
POSNV = VBAP-POSNR AND
VBTYP_N = 'J'.
IF SY-SUBRC = 0 AND NOT L_VBELN IS INITIAL.
SELECT SINGLE VBELN
FROM LIPS
INTO L_LVBELN
WHERE VBELN = L_VBELN AND
POSNR = L_POSNR.
IF SY-SUBRC NE 0.
IF NOT VBAP-UEPOS IS INITIAL.
MOVE VBAP-VBELN TO ITAB_SUPER-VBELN.
MOVE VBAP-UEPOS TO ITAB_SUPER-POSNR.
APPEND ITAB_SUPER.
ENDIF.
CONTINUE.
ENDIF.
ENDIF.
MOVE VBAK-VBELN TO ITAB2_SALESORD4-VBELN.
MOVE VBAK-AUART TO ITAB2_SALESORD4-AUART.
MOVE VBAP-POSNR TO ITAB2_SALESORD4-POSNR.
MOVE VBAP-WERKS TO ITAB2_SALESORD4-WERKS.
MOVE MATERIALID-MATNR_EXT TO ITAB2_SALESORD4-MATNR_EXT.
MOVE VBAK-ERDAT TO ITAB2_SALESORD4-ERDAT.
MOVE VBAP-KWMENG TO ITAB2_SALESORD4-KWMENG.
MOVE VBAP-VRKME TO ITAB2_SALESORD4-VRKME.
MOVE VBAP-UEPOS TO ITAB2_SALESORD4-UEPOS.
MOVE VBAP-MATWA TO ITAB2_SALESORD4-MATWA.
MOVE VBAP-PSTYV TO ITAB2_SALESORD4-PSTYV.
MOVE VBAP-ABGRU TO ITAB2_SALESORD4-ABGRU.
MOVE VBAP-Z_PROM_SHP_DT TO ITAB2_SALESORD4-Z_PROM_SHP_DT.
MOVE VBAK-BSTNK TO ITAB2_SALESORD4-BSTNK.
MOVE VBAK-KUNNR TO ITAB2_SALESORD4-KUNNR.
IF VBAK-AUGRU = C_REASON_VR.
MOVE C_REASON_EM TO ITAB2_SALESORD4-AUGRU.
ELSE.
MOVE VBAK-AUGRU TO ITAB2_SALESORD4-AUGRU.
ENDIF.
MOVE VBAP-KZTLF TO ITAB2_SALESORD4-KZTLF.
ITAB2_SALESORD4-KWMENG = ITAB2_SALESORD4-KWMENG * 1000.
WRITE ITAB2_SALESORD4-KWMENG TO ITAB2_SALESORD4-KWMENG
DECIMALS 0 RIGHT-JUSTIFIED.
OVERLAY ITAB2_SALESORD4-KWMENG WITH '00000000000000000'.
APPEND ITAB2_SALESORD4.
CLEAR ITAB2_SALESORD4.
ENDSELECT.
SORT ITAB2_SALESORD4 BY VBELN POSNR Z_PROM_SHP_DT.
SORT ITAB_SUPER BY VBELN POSNR.
DATA: G_FILE LIKE RLGRAP-FILENAME,
ZDFLTVAL11(40),
ZDFLTVAL22(40).
SELECT SINGLE Z_DFLT_VAL1 Z_DFLT_VAL2 INTO
(ZDFLTVAL11,ZDFLTVAL22)
FROM ZLE_LOG_DFLT_VAL
WHERE LGNUM = ' '
AND Z_DFLT_TYP = 'IMAS_SAP_SALESORD4_G1'.
TRANSLATE ZDFLTVAL22 TO LOWER CASE.
CONCATENATE ZDFLTVAL11 ZDFLTVAL22 INTO G_FILE.
OPEN DATASET G_FILE FOR OUTPUT IN TEXT MODE.
LOOP AT ITAB2_SALESORD4.
READ TABLE ITAB_SUPER WITH KEY VBELN = ITAB2_SALESORD4-VBELN
POSNR = ITAB2_SALESORD4-POSNR
BINARY SEARCH.
IF SY-SUBRC EQ 0.
CONTINUE.
ENDIF.
TRANSFER ITAB2_SALESORD4 TO G_FILE.
ENDLOOP.
CLOSE DATASET G_FILE.
[/code]3 FOR MATERIALID-MATNR_EXT.
SELECT-OPTIONS SP[code]REPORT ZSQ01_AUDITSALESORD4_1.
TABLES: VBAP, MATERIALID, VBAK, VBEP.
SELECTION-SCREEN: BEGIN OF BLOCK PROG WITH FRAME TITLE TEXT-F58.
SELECT-OPTIONS SP$00001 FOR VBAK-VBELN MEMORY ID AUN.
SELECT-OPTIONS SP$00002 FOR VBAP-POSNR MEMORY ID APO.
SELECT-OPTIONS SP$00003 FOR MATERIALID-MATNR_EXT.
SELECT-OPTIONS SP$00004 FOR VBAK-ERDAT.
SELECT-OPTIONS SP$00005 FOR VBAP-KWMENG.
SELECT-OPTIONS SP$00006 FOR VBAP-UEPOS.
SELECT-OPTIONS SP$00007 FOR VBAP-MATWA MEMORY ID MAT.
SELECT-OPTIONS SP$00008 FOR VBAP-PSTYV.
SELECTION-SCREEN: END OF BLOCK PROG.
DATA: BEGIN OF ITAB2_SALESORD4 OCCURS 0,
VBELN(10),
AUART(4),
POSNR(6),
WERKS(4),
MATNR_EXT(40),
ERDAT(8),
KWMENG(19),
VRKME(3),
UEPOS(6),
MATWA(40),
PSTYV(4),
ABGRU(2),
Z_PROM_SHP_DT(8),
BSTNK(20),
KUNNR(10),
AUGRU(3),
KZTLF(1),
FILLER(12),
END OF ITAB2_SALESORD4.
CONSTANTS: C_REASON_VR LIKE VBAK-AUGRU VALUE 'VR',
C_REASON_EM LIKE VBAK-AUGRU VALUE 'EM'.
DATA: L_VBELN TYPE VBFA-VBELN,
L_POSNR TYPE VBFA-POSNN,
L_LVBELN TYPE VBFA-VBELN.
DATA: BEGIN OF ITAB_SUPER OCCURS 0,
VBELN TYPE VBAP-VBELN,
POSNR TYPE VBAP-POSNR,
END OF ITAB_SUPER.
START-OF-SELECTION.
SELECT VBAK~ERDAT VBAK~VBELN VBAP~KWMENG VBAP~MATNR VBAP~MATWA
VBAP~POSNR VBAP~PSTYV VBAP~UEPOS VBAP~VBELN VBAP~VRKME
VBAP~ABGRU MATERIALID~MATNR_EXT MATERIALID~MATNR_INT
VBAP~Z_PROM_SHP_DT VBAK~AUART VBAP~WERKS VBAK~BSTNK VBAK~KUNNR VBAK~AUGRU VBAP~KZTLF
INTO (VBAK-ERDAT , VBAK-VBELN , VBAP-KWMENG , VBAP-MATNR , VBAP-MATWA
, VBAP-POSNR , VBAP-PSTYV , VBAP-UEPOS , VBAP-VBELN , VBAP-VRKME
, VBAP-ABGRU , MATERIALID-MATNR_EXT , MATERIALID-MATNR_INT,
VBAP-Z_PROM_SHP_DT, VBAK-AUART, VBAP-WERKS, VBAK-BSTNK,
VBAK-KUNNR, VBAK-AUGRU, VBAP-KZTLF)
FROM ( VBAK
INNER JOIN VBAP
ON VBAP~VBELN = VBAK~VBELN
INNER JOIN MATERIALID
ON MATERIALID~MATNR_INT = VBAP~MATNR )
WHERE VBAK~ERDAT IN SP$00004
AND VBAK~VBELN IN SP$00001
AND VBAP~KWMENG IN SP$00005
AND VBAP~MATWA IN SP$00007
AND VBAP~POSNR IN SP$00002
AND VBAP~PSTYV IN SP$00008
AND VBAP~UEPOS IN SP$00006
AND MATERIALID~MATNR_EXT IN SP$00003.
SELECT SINGLE VBELN POSNN
FROM VBFA
INTO (L_VBELN, L_POSNR)
WHERE VBELV = VBAK-VBELN AND
POSNV = VBAP-POSNR AND
VBTYP_N = 'J'.
IF SY-SUBRC = 0 AND NOT L_VBELN IS INITIAL.
SELECT SINGLE VBELN
FROM LIPS
INTO L_LVBELN
WHERE VBELN = L_VBELN AND
POSNR = L_POSNR.
IF SY-SUBRC NE 0.
IF NOT VBAP-UEPOS IS INITIAL.
MOVE VBAP-VBELN TO ITAB_SUPER-VBELN.
MOVE VBAP-UEPOS TO ITAB_SUPER-POSNR.
APPEND ITAB_SUPER.
ENDIF.
CONTINUE.
ENDIF.
ENDIF.
MOVE VBAK-VBELN TO ITAB2_SALESORD4-VBELN.
MOVE VBAK-AUART TO ITAB2_SALESORD4-AUART.
MOVE VBAP-POSNR TO ITAB2_SALESORD4-POSNR.
MOVE VBAP-WERKS TO ITAB2_SALESORD4-WERKS.
MOVE MATERIALID-MATNR_EXT TO ITAB2_SALESORD4-MATNR_EXT.
MOVE VBAK-ERDAT TO ITAB2_SALESORD4-ERDAT.
MOVE VBAP-KWMENG TO ITAB2_SALESORD4-KWMENG.
MOVE VBAP-VRKME TO ITAB2_SALESORD4-VRKME.
MOVE VBAP-UEPOS TO ITAB2_SALESORD4-UEPOS.
MOVE VBAP-MATWA TO ITAB2_SALESORD4-MATWA.
MOVE VBAP-PSTYV TO ITAB2_SALESORD4-PSTYV.
MOVE VBAP-ABGRU TO ITAB2_SALESORD4-ABGRU.
MOVE VBAP-Z_PROM_SHP_DT TO ITAB2_SALESORD4-Z_PROM_SHP_DT.
MOVE VBAK-BSTNK TO ITAB2_SALESORD4-BSTNK.
MOVE VBAK-KUNNR TO ITAB2_SALESORD4-KUNNR.
IF VBAK-AUGRU = C_REASON_VR.
MOVE C_REASON_EM TO ITAB2_SALESORD4-AUGRU.
ELSE.
MOVE VBAK-AUGRU TO ITAB2_SALESORD4-AUGRU.
ENDIF.
MOVE VBAP-KZTLF TO ITAB2_SALESORD4-KZTLF.
ITAB2_SALESORD4-KWMENG = ITAB2_SALESORD4-KWMENG * 1000.
WRITE ITAB2_SALESORD4-KWMENG TO ITAB2_SALESORD4-KWMENG
DECIMALS 0 RIGHT-JUSTIFIED.
OVERLAY ITAB2_SALESORD4-KWMENG WITH '00000000000000000'.
APPEND ITAB2_SALESORD4.
CLEAR ITAB2_SALESORD4.
ENDSELECT.
SORT ITAB2_SALESORD4 BY VBELN POSNR Z_PROM_SHP_DT.
SORT ITAB_SUPER BY VBELN POSNR.
DATA: G_FILE LIKE RLGRAP-FILENAME,
ZDFLTVAL11(40),
ZDFLTVAL22(40).
SELECT SINGLE Z_DFLT_VAL1 Z_DFLT_VAL2 INTO
(ZDFLTVAL11,ZDFLTVAL22)
FROM ZLE_LOG_DFLT_VAL
WHERE LGNUM = ' '
AND Z_DFLT_TYP = 'IMAS_SAP_SALESORD4_G1'.
TRANSLATE ZDFLTVAL22 TO LOWER CASE.
CONCATENATE ZDFLTVAL11 ZDFLTVAL22 INTO G_FILE.
OPEN DATASET G_FILE FOR OUTPUT IN TEXT MODE.
LOOP AT ITAB2_SALESORD4.
READ TABLE ITAB_SUPER WITH KEY VBELN = ITAB2_SALESORD4-VBELN
POSNR = ITAB2_SALESORD4-POSNR
BINARY SEARCH.
IF SY-SUBRC EQ 0.
CONTINUE.
ENDIF.
TRANSFER ITAB2_SALESORD4 TO G_FILE.
ENDLOOP.
CLOSE DATASET G_FILE.
[/code]4 FOR VBAK-ERDAT.
SELECT-OPTIONS SP[code]REPORT ZSQ01_AUDITSALESORD4_1.
TABLES: VBAP, MATERIALID, VBAK, VBEP.
SELECTION-SCREEN: BEGIN OF BLOCK PROG WITH FRAME TITLE TEXT-F58.
SELECT-OPTIONS SP$00001 FOR VBAK-VBELN MEMORY ID AUN.
SELECT-OPTIONS SP$00002 FOR VBAP-POSNR MEMORY ID APO.
SELECT-OPTIONS SP$00003 FOR MATERIALID-MATNR_EXT.
SELECT-OPTIONS SP$00004 FOR VBAK-ERDAT.
SELECT-OPTIONS SP$00005 FOR VBAP-KWMENG.
SELECT-OPTIONS SP$00006 FOR VBAP-UEPOS.
SELECT-OPTIONS SP$00007 FOR VBAP-MATWA MEMORY ID MAT.
SELECT-OPTIONS SP$00008 FOR VBAP-PSTYV.
SELECTION-SCREEN: END OF BLOCK PROG.
DATA: BEGIN OF ITAB2_SALESORD4 OCCURS 0,
VBELN(10),
AUART(4),
POSNR(6),
WERKS(4),
MATNR_EXT(40),
ERDAT(8),
KWMENG(19),
VRKME(3),
UEPOS(6),
MATWA(40),
PSTYV(4),
ABGRU(2),
Z_PROM_SHP_DT(8),
BSTNK(20),
KUNNR(10),
AUGRU(3),
KZTLF(1),
FILLER(12),
END OF ITAB2_SALESORD4.
CONSTANTS: C_REASON_VR LIKE VBAK-AUGRU VALUE 'VR',
C_REASON_EM LIKE VBAK-AUGRU VALUE 'EM'.
DATA: L_VBELN TYPE VBFA-VBELN,
L_POSNR TYPE VBFA-POSNN,
L_LVBELN TYPE VBFA-VBELN.
DATA: BEGIN OF ITAB_SUPER OCCURS 0,
VBELN TYPE VBAP-VBELN,
POSNR TYPE VBAP-POSNR,
END OF ITAB_SUPER.
START-OF-SELECTION.
SELECT VBAK~ERDAT VBAK~VBELN VBAP~KWMENG VBAP~MATNR VBAP~MATWA
VBAP~POSNR VBAP~PSTYV VBAP~UEPOS VBAP~VBELN VBAP~VRKME
VBAP~ABGRU MATERIALID~MATNR_EXT MATERIALID~MATNR_INT
VBAP~Z_PROM_SHP_DT VBAK~AUART VBAP~WERKS VBAK~BSTNK VBAK~KUNNR VBAK~AUGRU VBAP~KZTLF
INTO (VBAK-ERDAT , VBAK-VBELN , VBAP-KWMENG , VBAP-MATNR , VBAP-MATWA
, VBAP-POSNR , VBAP-PSTYV , VBAP-UEPOS , VBAP-VBELN , VBAP-VRKME
, VBAP-ABGRU , MATERIALID-MATNR_EXT , MATERIALID-MATNR_INT,
VBAP-Z_PROM_SHP_DT, VBAK-AUART, VBAP-WERKS, VBAK-BSTNK,
VBAK-KUNNR, VBAK-AUGRU, VBAP-KZTLF)
FROM ( VBAK
INNER JOIN VBAP
ON VBAP~VBELN = VBAK~VBELN
INNER JOIN MATERIALID
ON MATERIALID~MATNR_INT = VBAP~MATNR )
WHERE VBAK~ERDAT IN SP$00004
AND VBAK~VBELN IN SP$00001
AND VBAP~KWMENG IN SP$00005
AND VBAP~MATWA IN SP$00007
AND VBAP~POSNR IN SP$00002
AND VBAP~PSTYV IN SP$00008
AND VBAP~UEPOS IN SP$00006
AND MATERIALID~MATNR_EXT IN SP$00003.
SELECT SINGLE VBELN POSNN
FROM VBFA
INTO (L_VBELN, L_POSNR)
WHERE VBELV = VBAK-VBELN AND
POSNV = VBAP-POSNR AND
VBTYP_N = 'J'.
IF SY-SUBRC = 0 AND NOT L_VBELN IS INITIAL.
SELECT SINGLE VBELN
FROM LIPS
INTO L_LVBELN
WHERE VBELN = L_VBELN AND
POSNR = L_POSNR.
IF SY-SUBRC NE 0.
IF NOT VBAP-UEPOS IS INITIAL.
MOVE VBAP-VBELN TO ITAB_SUPER-VBELN.
MOVE VBAP-UEPOS TO ITAB_SUPER-POSNR.
APPEND ITAB_SUPER.
ENDIF.
CONTINUE.
ENDIF.
ENDIF.
MOVE VBAK-VBELN TO ITAB2_SALESORD4-VBELN.
MOVE VBAK-AUART TO ITAB2_SALESORD4-AUART.
MOVE VBAP-POSNR TO ITAB2_SALESORD4-POSNR.
MOVE VBAP-WERKS TO ITAB2_SALESORD4-WERKS.
MOVE MATERIALID-MATNR_EXT TO ITAB2_SALESORD4-MATNR_EXT.
MOVE VBAK-ERDAT TO ITAB2_SALESORD4-ERDAT.
MOVE VBAP-KWMENG TO ITAB2_SALESORD4-KWMENG.
MOVE VBAP-VRKME TO ITAB2_SALESORD4-VRKME.
MOVE VBAP-UEPOS TO ITAB2_SALESORD4-UEPOS.
MOVE VBAP-MATWA TO ITAB2_SALESORD4-MATWA.
MOVE VBAP-PSTYV TO ITAB2_SALESORD4-PSTYV.
MOVE VBAP-ABGRU TO ITAB2_SALESORD4-ABGRU.
MOVE VBAP-Z_PROM_SHP_DT TO ITAB2_SALESORD4-Z_PROM_SHP_DT.
MOVE VBAK-BSTNK TO ITAB2_SALESORD4-BSTNK.
MOVE VBAK-KUNNR TO ITAB2_SALESORD4-KUNNR.
IF VBAK-AUGRU = C_REASON_VR.
MOVE C_REASON_EM TO ITAB2_SALESORD4-AUGRU.
ELSE.
MOVE VBAK-AUGRU TO ITAB2_SALESORD4-AUGRU.
ENDIF.
MOVE VBAP-KZTLF TO ITAB2_SALESORD4-KZTLF.
ITAB2_SALESORD4-KWMENG = ITAB2_SALESORD4-KWMENG * 1000.
WRITE ITAB2_SALESORD4-KWMENG TO ITAB2_SALESORD4-KWMENG
DECIMALS 0 RIGHT-JUSTIFIED.
OVERLAY ITAB2_SALESORD4-KWMENG WITH '00000000000000000'.
APPEND ITAB2_SALESORD4.
CLEAR ITAB2_SALESORD4.
ENDSELECT.
SORT ITAB2_SALESORD4 BY VBELN POSNR Z_PROM_SHP_DT.
SORT ITAB_SUPER BY VBELN POSNR.
DATA: G_FILE LIKE RLGRAP-FILENAME,
ZDFLTVAL11(40),
ZDFLTVAL22(40).
SELECT SINGLE Z_DFLT_VAL1 Z_DFLT_VAL2 INTO
(ZDFLTVAL11,ZDFLTVAL22)
FROM ZLE_LOG_DFLT_VAL
WHERE LGNUM = ' '
AND Z_DFLT_TYP = 'IMAS_SAP_SALESORD4_G1'.
TRANSLATE ZDFLTVAL22 TO LOWER CASE.
CONCATENATE ZDFLTVAL11 ZDFLTVAL22 INTO G_FILE.
OPEN DATASET G_FILE FOR OUTPUT IN TEXT MODE.
LOOP AT ITAB2_SALESORD4.
READ TABLE ITAB_SUPER WITH KEY VBELN = ITAB2_SALESORD4-VBELN
POSNR = ITAB2_SALESORD4-POSNR
BINARY SEARCH.
IF SY-SUBRC EQ 0.
CONTINUE.
ENDIF.
TRANSFER ITAB2_SALESORD4 TO G_FILE.
ENDLOOP.
CLOSE DATASET G_FILE.
[/code]5 FOR VBAP-KWMENG.
SELECT-OPTIONS SP[code]REPORT ZSQ01_AUDITSALESORD4_1.
TABLES: VBAP, MATERIALID, VBAK, VBEP.
SELECTION-SCREEN: BEGIN OF BLOCK PROG WITH FRAME TITLE TEXT-F58.
SELECT-OPTIONS SP$00001 FOR VBAK-VBELN MEMORY ID AUN.
SELECT-OPTIONS SP$00002 FOR VBAP-POSNR MEMORY ID APO.
SELECT-OPTIONS SP$00003 FOR MATERIALID-MATNR_EXT.
SELECT-OPTIONS SP$00004 FOR VBAK-ERDAT.
SELECT-OPTIONS SP$00005 FOR VBAP-KWMENG.
SELECT-OPTIONS SP$00006 FOR VBAP-UEPOS.
SELECT-OPTIONS SP$00007 FOR VBAP-MATWA MEMORY ID MAT.
SELECT-OPTIONS SP$00008 FOR VBAP-PSTYV.
SELECTION-SCREEN: END OF BLOCK PROG.
DATA: BEGIN OF ITAB2_SALESORD4 OCCURS 0,
VBELN(10),
AUART(4),
POSNR(6),
WERKS(4),
MATNR_EXT(40),
ERDAT(8),
KWMENG(19),
VRKME(3),
UEPOS(6),
MATWA(40),
PSTYV(4),
ABGRU(2),
Z_PROM_SHP_DT(8),
BSTNK(20),
KUNNR(10),
AUGRU(3),
KZTLF(1),
FILLER(12),
END OF ITAB2_SALESORD4.
CONSTANTS: C_REASON_VR LIKE VBAK-AUGRU VALUE 'VR',
C_REASON_EM LIKE VBAK-AUGRU VALUE 'EM'.
DATA: L_VBELN TYPE VBFA-VBELN,
L_POSNR TYPE VBFA-POSNN,
L_LVBELN TYPE VBFA-VBELN.
DATA: BEGIN OF ITAB_SUPER OCCURS 0,
VBELN TYPE VBAP-VBELN,
POSNR TYPE VBAP-POSNR,
END OF ITAB_SUPER.
START-OF-SELECTION.
SELECT VBAK~ERDAT VBAK~VBELN VBAP~KWMENG VBAP~MATNR VBAP~MATWA
VBAP~POSNR VBAP~PSTYV VBAP~UEPOS VBAP~VBELN VBAP~VRKME
VBAP~ABGRU MATERIALID~MATNR_EXT MATERIALID~MATNR_INT
VBAP~Z_PROM_SHP_DT VBAK~AUART VBAP~WERKS VBAK~BSTNK VBAK~KUNNR VBAK~AUGRU VBAP~KZTLF
INTO (VBAK-ERDAT , VBAK-VBELN , VBAP-KWMENG , VBAP-MATNR , VBAP-MATWA
, VBAP-POSNR , VBAP-PSTYV , VBAP-UEPOS , VBAP-VBELN , VBAP-VRKME
, VBAP-ABGRU , MATERIALID-MATNR_EXT , MATERIALID-MATNR_INT,
VBAP-Z_PROM_SHP_DT, VBAK-AUART, VBAP-WERKS, VBAK-BSTNK,
VBAK-KUNNR, VBAK-AUGRU, VBAP-KZTLF)
FROM ( VBAK
INNER JOIN VBAP
ON VBAP~VBELN = VBAK~VBELN
INNER JOIN MATERIALID
ON MATERIALID~MATNR_INT = VBAP~MATNR )
WHERE VBAK~ERDAT IN SP$00004
AND VBAK~VBELN IN SP$00001
AND VBAP~KWMENG IN SP$00005
AND VBAP~MATWA IN SP$00007
AND VBAP~POSNR IN SP$00002
AND VBAP~PSTYV IN SP$00008
AND VBAP~UEPOS IN SP$00006
AND MATERIALID~MATNR_EXT IN SP$00003.
SELECT SINGLE VBELN POSNN
FROM VBFA
INTO (L_VBELN, L_POSNR)
WHERE VBELV = VBAK-VBELN AND
POSNV = VBAP-POSNR AND
VBTYP_N = 'J'.
IF SY-SUBRC = 0 AND NOT L_VBELN IS INITIAL.
SELECT SINGLE VBELN
FROM LIPS
INTO L_LVBELN
WHERE VBELN = L_VBELN AND
POSNR = L_POSNR.
IF SY-SUBRC NE 0.
IF NOT VBAP-UEPOS IS INITIAL.
MOVE VBAP-VBELN TO ITAB_SUPER-VBELN.
MOVE VBAP-UEPOS TO ITAB_SUPER-POSNR.
APPEND ITAB_SUPER.
ENDIF.
CONTINUE.
ENDIF.
ENDIF.
MOVE VBAK-VBELN TO ITAB2_SALESORD4-VBELN.
MOVE VBAK-AUART TO ITAB2_SALESORD4-AUART.
MOVE VBAP-POSNR TO ITAB2_SALESORD4-POSNR.
MOVE VBAP-WERKS TO ITAB2_SALESORD4-WERKS.
MOVE MATERIALID-MATNR_EXT TO ITAB2_SALESORD4-MATNR_EXT.
MOVE VBAK-ERDAT TO ITAB2_SALESORD4-ERDAT.
MOVE VBAP-KWMENG TO ITAB2_SALESORD4-KWMENG.
MOVE VBAP-VRKME TO ITAB2_SALESORD4-VRKME.
MOVE VBAP-UEPOS TO ITAB2_SALESORD4-UEPOS.
MOVE VBAP-MATWA TO ITAB2_SALESORD4-MATWA.
MOVE VBAP-PSTYV TO ITAB2_SALESORD4-PSTYV.
MOVE VBAP-ABGRU TO ITAB2_SALESORD4-ABGRU.
MOVE VBAP-Z_PROM_SHP_DT TO ITAB2_SALESORD4-Z_PROM_SHP_DT.
MOVE VBAK-BSTNK TO ITAB2_SALESORD4-BSTNK.
MOVE VBAK-KUNNR TO ITAB2_SALESORD4-KUNNR.
IF VBAK-AUGRU = C_REASON_VR.
MOVE C_REASON_EM TO ITAB2_SALESORD4-AUGRU.
ELSE.
MOVE VBAK-AUGRU TO ITAB2_SALESORD4-AUGRU.
ENDIF.
MOVE VBAP-KZTLF TO ITAB2_SALESORD4-KZTLF.
ITAB2_SALESORD4-KWMENG = ITAB2_SALESORD4-KWMENG * 1000.
WRITE ITAB2_SALESORD4-KWMENG TO ITAB2_SALESORD4-KWMENG
DECIMALS 0 RIGHT-JUSTIFIED.
OVERLAY ITAB2_SALESORD4-KWMENG WITH '00000000000000000'.
APPEND ITAB2_SALESORD4.
CLEAR ITAB2_SALESORD4.
ENDSELECT.
SORT ITAB2_SALESORD4 BY VBELN POSNR Z_PROM_SHP_DT.
SORT ITAB_SUPER BY VBELN POSNR.
DATA: G_FILE LIKE RLGRAP-FILENAME,
ZDFLTVAL11(40),
ZDFLTVAL22(40).
SELECT SINGLE Z_DFLT_VAL1 Z_DFLT_VAL2 INTO
(ZDFLTVAL11,ZDFLTVAL22)
FROM ZLE_LOG_DFLT_VAL
WHERE LGNUM = ' '
AND Z_DFLT_TYP = 'IMAS_SAP_SALESORD4_G1'.
TRANSLATE ZDFLTVAL22 TO LOWER CASE.
CONCATENATE ZDFLTVAL11 ZDFLTVAL22 INTO G_FILE.
OPEN DATASET G_FILE FOR OUTPUT IN TEXT MODE.
LOOP AT ITAB2_SALESORD4.
READ TABLE ITAB_SUPER WITH KEY VBELN = ITAB2_SALESORD4-VBELN
POSNR = ITAB2_SALESORD4-POSNR
BINARY SEARCH.
IF SY-SUBRC EQ 0.
CONTINUE.
ENDIF.
TRANSFER ITAB2_SALESORD4 TO G_FILE.
ENDLOOP.
CLOSE DATASET G_FILE.
[/code]6 FOR VBAP-UEPOS.
SELECT-OPTIONS SP[code]REPORT ZSQ01_AUDITSALESORD4_1.
TABLES: VBAP, MATERIALID, VBAK, VBEP.
SELECTION-SCREEN: BEGIN OF BLOCK PROG WITH FRAME TITLE TEXT-F58.
SELECT-OPTIONS SP$00001 FOR VBAK-VBELN MEMORY ID AUN.
SELECT-OPTIONS SP$00002 FOR VBAP-POSNR MEMORY ID APO.
SELECT-OPTIONS SP$00003 FOR MATERIALID-MATNR_EXT.
SELECT-OPTIONS SP$00004 FOR VBAK-ERDAT.
SELECT-OPTIONS SP$00005 FOR VBAP-KWMENG.
SELECT-OPTIONS SP$00006 FOR VBAP-UEPOS.
SELECT-OPTIONS SP$00007 FOR VBAP-MATWA MEMORY ID MAT.
SELECT-OPTIONS SP$00008 FOR VBAP-PSTYV.
SELECTION-SCREEN: END OF BLOCK PROG.
DATA: BEGIN OF ITAB2_SALESORD4 OCCURS 0,
VBELN(10),
AUART(4),
POSNR(6),
WERKS(4),
MATNR_EXT(40),
ERDAT(8),
KWMENG(19),
VRKME(3),
UEPOS(6),
MATWA(40),
PSTYV(4),
ABGRU(2),
Z_PROM_SHP_DT(8),
BSTNK(20),
KUNNR(10),
AUGRU(3),
KZTLF(1),
FILLER(12),
END OF ITAB2_SALESORD4.
CONSTANTS: C_REASON_VR LIKE VBAK-AUGRU VALUE 'VR',
C_REASON_EM LIKE VBAK-AUGRU VALUE 'EM'.
DATA: L_VBELN TYPE VBFA-VBELN,
L_POSNR TYPE VBFA-POSNN,
L_LVBELN TYPE VBFA-VBELN.
DATA: BEGIN OF ITAB_SUPER OCCURS 0,
VBELN TYPE VBAP-VBELN,
POSNR TYPE VBAP-POSNR,
END OF ITAB_SUPER.
START-OF-SELECTION.
SELECT VBAK~ERDAT VBAK~VBELN VBAP~KWMENG VBAP~MATNR VBAP~MATWA
VBAP~POSNR VBAP~PSTYV VBAP~UEPOS VBAP~VBELN VBAP~VRKME
VBAP~ABGRU MATERIALID~MATNR_EXT MATERIALID~MATNR_INT
VBAP~Z_PROM_SHP_DT VBAK~AUART VBAP~WERKS VBAK~BSTNK VBAK~KUNNR VBAK~AUGRU VBAP~KZTLF
INTO (VBAK-ERDAT , VBAK-VBELN , VBAP-KWMENG , VBAP-MATNR , VBAP-MATWA
, VBAP-POSNR , VBAP-PSTYV , VBAP-UEPOS , VBAP-VBELN , VBAP-VRKME
, VBAP-ABGRU , MATERIALID-MATNR_EXT , MATERIALID-MATNR_INT,
VBAP-Z_PROM_SHP_DT, VBAK-AUART, VBAP-WERKS, VBAK-BSTNK,
VBAK-KUNNR, VBAK-AUGRU, VBAP-KZTLF)
FROM ( VBAK
INNER JOIN VBAP
ON VBAP~VBELN = VBAK~VBELN
INNER JOIN MATERIALID
ON MATERIALID~MATNR_INT = VBAP~MATNR )
WHERE VBAK~ERDAT IN SP$00004
AND VBAK~VBELN IN SP$00001
AND VBAP~KWMENG IN SP$00005
AND VBAP~MATWA IN SP$00007
AND VBAP~POSNR IN SP$00002
AND VBAP~PSTYV IN SP$00008
AND VBAP~UEPOS IN SP$00006
AND MATERIALID~MATNR_EXT IN SP$00003.
SELECT SINGLE VBELN POSNN
FROM VBFA
INTO (L_VBELN, L_POSNR)
WHERE VBELV = VBAK-VBELN AND
POSNV = VBAP-POSNR AND
VBTYP_N = 'J'.
IF SY-SUBRC = 0 AND NOT L_VBELN IS INITIAL.
SELECT SINGLE VBELN
FROM LIPS
INTO L_LVBELN
WHERE VBELN = L_VBELN AND
POSNR = L_POSNR.
IF SY-SUBRC NE 0.
IF NOT VBAP-UEPOS IS INITIAL.
MOVE VBAP-VBELN TO ITAB_SUPER-VBELN.
MOVE VBAP-UEPOS TO ITAB_SUPER-POSNR.
APPEND ITAB_SUPER.
ENDIF.
CONTINUE.
ENDIF.
ENDIF.
MOVE VBAK-VBELN TO ITAB2_SALESORD4-VBELN.
MOVE VBAK-AUART TO ITAB2_SALESORD4-AUART.
MOVE VBAP-POSNR TO ITAB2_SALESORD4-POSNR.
MOVE VBAP-WERKS TO ITAB2_SALESORD4-WERKS.
MOVE MATERIALID-MATNR_EXT TO ITAB2_SALESORD4-MATNR_EXT.
MOVE VBAK-ERDAT TO ITAB2_SALESORD4-ERDAT.
MOVE VBAP-KWMENG TO ITAB2_SALESORD4-KWMENG.
MOVE VBAP-VRKME TO ITAB2_SALESORD4-VRKME.
MOVE VBAP-UEPOS TO ITAB2_SALESORD4-UEPOS.
MOVE VBAP-MATWA TO ITAB2_SALESORD4-MATWA.
MOVE VBAP-PSTYV TO ITAB2_SALESORD4-PSTYV.
MOVE VBAP-ABGRU TO ITAB2_SALESORD4-ABGRU.
MOVE VBAP-Z_PROM_SHP_DT TO ITAB2_SALESORD4-Z_PROM_SHP_DT.
MOVE VBAK-BSTNK TO ITAB2_SALESORD4-BSTNK.
MOVE VBAK-KUNNR TO ITAB2_SALESORD4-KUNNR.
IF VBAK-AUGRU = C_REASON_VR.
MOVE C_REASON_EM TO ITAB2_SALESORD4-AUGRU.
ELSE.
MOVE VBAK-AUGRU TO ITAB2_SALESORD4-AUGRU.
ENDIF.
MOVE VBAP-KZTLF TO ITAB2_SALESORD4-KZTLF.
ITAB2_SALESORD4-KWMENG = ITAB2_SALESORD4-KWMENG * 1000.
WRITE ITAB2_SALESORD4-KWMENG TO ITAB2_SALESORD4-KWMENG
DECIMALS 0 RIGHT-JUSTIFIED.
OVERLAY ITAB2_SALESORD4-KWMENG WITH '00000000000000000'.
APPEND ITAB2_SALESORD4.
CLEAR ITAB2_SALESORD4.
ENDSELECT.
SORT ITAB2_SALESORD4 BY VBELN POSNR Z_PROM_SHP_DT.
SORT ITAB_SUPER BY VBELN POSNR.
DATA: G_FILE LIKE RLGRAP-FILENAME,
ZDFLTVAL11(40),
ZDFLTVAL22(40).
SELECT SINGLE Z_DFLT_VAL1 Z_DFLT_VAL2 INTO
(ZDFLTVAL11,ZDFLTVAL22)
FROM ZLE_LOG_DFLT_VAL
WHERE LGNUM = ' '
AND Z_DFLT_TYP = 'IMAS_SAP_SALESORD4_G1'.
TRANSLATE ZDFLTVAL22 TO LOWER CASE.
CONCATENATE ZDFLTVAL11 ZDFLTVAL22 INTO G_FILE.
OPEN DATASET G_FILE FOR OUTPUT IN TEXT MODE.
LOOP AT ITAB2_SALESORD4.
READ TABLE ITAB_SUPER WITH KEY VBELN = ITAB2_SALESORD4-VBELN
POSNR = ITAB2_SALESORD4-POSNR
BINARY SEARCH.
IF SY-SUBRC EQ 0.
CONTINUE.
ENDIF.
TRANSFER ITAB2_SALESORD4 TO G_FILE.
ENDLOOP.
CLOSE DATASET G_FILE.
[/code]7 FOR VBAP-MATWA MEMORY ID MAT.
SELECT-OPTIONS SP[code]REPORT ZSQ01_AUDITSALESORD4_1.
TABLES: VBAP, MATERIALID, VBAK, VBEP.
SELECTION-SCREEN: BEGIN OF BLOCK PROG WITH FRAME TITLE TEXT-F58.
SELECT-OPTIONS SP$00001 FOR VBAK-VBELN MEMORY ID AUN.
SELECT-OPTIONS SP$00002 FOR VBAP-POSNR MEMORY ID APO.
SELECT-OPTIONS SP$00003 FOR MATERIALID-MATNR_EXT.
SELECT-OPTIONS SP$00004 FOR VBAK-ERDAT.
SELECT-OPTIONS SP$00005 FOR VBAP-KWMENG.
SELECT-OPTIONS SP$00006 FOR VBAP-UEPOS.
SELECT-OPTIONS SP$00007 FOR VBAP-MATWA MEMORY ID MAT.
SELECT-OPTIONS SP$00008 FOR VBAP-PSTYV.
SELECTION-SCREEN: END OF BLOCK PROG.
DATA: BEGIN OF ITAB2_SALESORD4 OCCURS 0,
VBELN(10),
AUART(4),
POSNR(6),
WERKS(4),
MATNR_EXT(40),
ERDAT(8),
KWMENG(19),
VRKME(3),
UEPOS(6),
MATWA(40),
PSTYV(4),
ABGRU(2),
Z_PROM_SHP_DT(8),
BSTNK(20),
KUNNR(10),
AUGRU(3),
KZTLF(1),
FILLER(12),
END OF ITAB2_SALESORD4.
CONSTANTS: C_REASON_VR LIKE VBAK-AUGRU VALUE 'VR',
C_REASON_EM LIKE VBAK-AUGRU VALUE 'EM'.
DATA: L_VBELN TYPE VBFA-VBELN,
L_POSNR TYPE VBFA-POSNN,
L_LVBELN TYPE VBFA-VBELN.
DATA: BEGIN OF ITAB_SUPER OCCURS 0,
VBELN TYPE VBAP-VBELN,
POSNR TYPE VBAP-POSNR,
END OF ITAB_SUPER.
START-OF-SELECTION.
SELECT VBAK~ERDAT VBAK~VBELN VBAP~KWMENG VBAP~MATNR VBAP~MATWA
VBAP~POSNR VBAP~PSTYV VBAP~UEPOS VBAP~VBELN VBAP~VRKME
VBAP~ABGRU MATERIALID~MATNR_EXT MATERIALID~MATNR_INT
VBAP~Z_PROM_SHP_DT VBAK~AUART VBAP~WERKS VBAK~BSTNK VBAK~KUNNR VBAK~AUGRU VBAP~KZTLF
INTO (VBAK-ERDAT , VBAK-VBELN , VBAP-KWMENG , VBAP-MATNR , VBAP-MATWA
, VBAP-POSNR , VBAP-PSTYV , VBAP-UEPOS , VBAP-VBELN , VBAP-VRKME
, VBAP-ABGRU , MATERIALID-MATNR_EXT , MATERIALID-MATNR_INT,
VBAP-Z_PROM_SHP_DT, VBAK-AUART, VBAP-WERKS, VBAK-BSTNK,
VBAK-KUNNR, VBAK-AUGRU, VBAP-KZTLF)
FROM ( VBAK
INNER JOIN VBAP
ON VBAP~VBELN = VBAK~VBELN
INNER JOIN MATERIALID
ON MATERIALID~MATNR_INT = VBAP~MATNR )
WHERE VBAK~ERDAT IN SP$00004
AND VBAK~VBELN IN SP$00001
AND VBAP~KWMENG IN SP$00005
AND VBAP~MATWA IN SP$00007
AND VBAP~POSNR IN SP$00002
AND VBAP~PSTYV IN SP$00008
AND VBAP~UEPOS IN SP$00006
AND MATERIALID~MATNR_EXT IN SP$00003.
SELECT SINGLE VBELN POSNN
FROM VBFA
INTO (L_VBELN, L_POSNR)
WHERE VBELV = VBAK-VBELN AND
POSNV = VBAP-POSNR AND
VBTYP_N = 'J'.
IF SY-SUBRC = 0 AND NOT L_VBELN IS INITIAL.
SELECT SINGLE VBELN
FROM LIPS
INTO L_LVBELN
WHERE VBELN = L_VBELN AND
POSNR = L_POSNR.
IF SY-SUBRC NE 0.
IF NOT VBAP-UEPOS IS INITIAL.
MOVE VBAP-VBELN TO ITAB_SUPER-VBELN.
MOVE VBAP-UEPOS TO ITAB_SUPER-POSNR.
APPEND ITAB_SUPER.
ENDIF.
CONTINUE.
ENDIF.
ENDIF.
MOVE VBAK-VBELN TO ITAB2_SALESORD4-VBELN.
MOVE VBAK-AUART TO ITAB2_SALESORD4-AUART.
MOVE VBAP-POSNR TO ITAB2_SALESORD4-POSNR.
MOVE VBAP-WERKS TO ITAB2_SALESORD4-WERKS.
MOVE MATERIALID-MATNR_EXT TO ITAB2_SALESORD4-MATNR_EXT.
MOVE VBAK-ERDAT TO ITAB2_SALESORD4-ERDAT.
MOVE VBAP-KWMENG TO ITAB2_SALESORD4-KWMENG.
MOVE VBAP-VRKME TO ITAB2_SALESORD4-VRKME.
MOVE VBAP-UEPOS TO ITAB2_SALESORD4-UEPOS.
MOVE VBAP-MATWA TO ITAB2_SALESORD4-MATWA.
MOVE VBAP-PSTYV TO ITAB2_SALESORD4-PSTYV.
MOVE VBAP-ABGRU TO ITAB2_SALESORD4-ABGRU.
MOVE VBAP-Z_PROM_SHP_DT TO ITAB2_SALESORD4-Z_PROM_SHP_DT.
MOVE VBAK-BSTNK TO ITAB2_SALESORD4-BSTNK.
MOVE VBAK-KUNNR TO ITAB2_SALESORD4-KUNNR.
IF VBAK-AUGRU = C_REASON_VR.
MOVE C_REASON_EM TO ITAB2_SALESORD4-AUGRU.
ELSE.
MOVE VBAK-AUGRU TO ITAB2_SALESORD4-AUGRU.
ENDIF.
MOVE VBAP-KZTLF TO ITAB2_SALESORD4-KZTLF.
ITAB2_SALESORD4-KWMENG = ITAB2_SALESORD4-KWMENG * 1000.
WRITE ITAB2_SALESORD4-KWMENG TO ITAB2_SALESORD4-KWMENG
DECIMALS 0 RIGHT-JUSTIFIED.
OVERLAY ITAB2_SALESORD4-KWMENG WITH '00000000000000000'.
APPEND ITAB2_SALESORD4.
CLEAR ITAB2_SALESORD4.
ENDSELECT.
SORT ITAB2_SALESORD4 BY VBELN POSNR Z_PROM_SHP_DT.
SORT ITAB_SUPER BY VBELN POSNR.
DATA: G_FILE LIKE RLGRAP-FILENAME,
ZDFLTVAL11(40),
ZDFLTVAL22(40).
SELECT SINGLE Z_DFLT_VAL1 Z_DFLT_VAL2 INTO
(ZDFLTVAL11,ZDFLTVAL22)
FROM ZLE_LOG_DFLT_VAL
WHERE LGNUM = ' '
AND Z_DFLT_TYP = 'IMAS_SAP_SALESORD4_G1'.
TRANSLATE ZDFLTVAL22 TO LOWER CASE.
CONCATENATE ZDFLTVAL11 ZDFLTVAL22 INTO G_FILE.
OPEN DATASET G_FILE FOR OUTPUT IN TEXT MODE.
LOOP AT ITAB2_SALESORD4.
READ TABLE ITAB_SUPER WITH KEY VBELN = ITAB2_SALESORD4-VBELN
POSNR = ITAB2_SALESORD4-POSNR
BINARY SEARCH.
IF SY-SUBRC EQ 0.
CONTINUE.
ENDIF.
TRANSFER ITAB2_SALESORD4 TO G_FILE.
ENDLOOP.
CLOSE DATASET G_FILE.
[/code]8 FOR VBAP-PSTYV.
SELECTION-SCREEN: END OF BLOCK PROG.
DATA: BEGIN OF ITAB2_SALESORD4 OCCURS 0,
VBELN(10),
AUART(4),
POSNR(6),
WERKS(4),
MATNR_EXT(40),
ERDAT(8),
KWMENG(19),
VRKME(3),
UEPOS(6),
MATWA(40),
PSTYV(4),
ABGRU(2),
Z_PROM_SHP_DT(8),
BSTNK(20),
K
The first SELECT looks a bit shaky. Have you done a performance trace (ST05) to find out where the problem is?
Rob
Similar Messages
-
Performance issue in this code
public int[][] init(int[][] a, int m, int n){
for(int j=0; j<n; j++){
for(int i=0; i<m; i++){
a[i][j] = i+j;
return a;
}Just a technical quest faced in one of the interview...
There is a performance issue in this code. Can you identify, correct and justify your answer?
Edited by: EJP on 17/10/2011 20:29mithu wrote:
public int[][] init(int[][] a, int m, int n){
for(int j=0; j<n; j++){
for(int i=0; i<m; i++){
a[i][j] = i+j;
return a;
}Just a technical quest faced in one of the interview...
There is a performance issue in this code. Can you identify, correct and justify your answer?Not a good question at all. There's no performance issue here that can be positively identified by inspection. The only potentially significant one is, as EJP pointed out, loss of locality of reference because of the order of the loops. But even that's not a guarantee, since I don't think array layouts are defined by the spec. We could only determine for sure that that's a performance problem by profiling. -
Flickr API and cflickr - performance issue with my code.
I using cflickr to access the Flickr api and display photos in a lightbox. My code is working, but incredibly slow. I'm assuming that I'm going about it in an incorrect way and hoping someone can point out a better way to do what I'm trying to accomplish. My speed issues develop when I'm trying to extract the image descriptions within a loop that is outputing the images to the page.
Here is an example of the code that I'm using:
using the following to grab the photos:
<cfset photos = cflickr.photosets_getPhotos(photoset_id=72157624340881708 , auth_token=token) />
I am then using the following to loop through the array of photos and and also retrieve the description for each image.
<div style="width:423px; margin: auto;" id="gallery">
<cfloop from="1" to="#arraylen(photos.photoset.photo)#" index="i">
<cfset p = photos.photoset.photo[i] />
<cfset img_desc = cflickr.photos_getInfo(photo_id=p.id).photo.description />
<cfset img_desc = replace(img_desc, 'TRIP', '<br />TRIP') />
<cfset title = photos.photoset.photo[i].title />
<cfset title = title & "<br />" & img_desc />
<cfoutput>
<a href="#cflickr.getPhotoUrl(p, '')#" title="#title#"><img src="#cflickr.getPhotoUrl(p, 's')#" /></a>
</cfoutput>
</cfloop>
</div>
The problem with the code is when it is making the request for img_desc inside of the loop to the Flickr api. Each instance of that call is taking on average 300 to 400ms and the array has over 300 items so it times out. Should I be retrieveing all of the image descritpions at once before the loop and if so how would I best link these with image data that they belong with? It seems like I'm going about this in a rather inefficient manner.
I was hoping that I could call a function that retrieved all of the data that I need in one call, but so far I've been unable to find that.( Grrr... this forum trashes emails better than any application I have ever seen. Here is what my previous response actually said ...)
<cfset photos = cflickr.photosets_getPhotos(photoset_id=72157624340881708 , auth_token=token)>
I cannot say I have used it. But the cfc usage seems to follow the API pretty closely. So I took a quick look at the flickr forums, and one person suggests you can grab the descriptions too by adding the "extras" parameter.
http://www.flickr.com/groups/api/discuss/72157594456853637/#comment72157623785775034
So try using:
<cflickr.photosets_getPhotos(photoset_id=72157624340881708 ,
auth_token=token, extras="description")> -
Can you help me with the WHERE clause? Any issue with this code block?
Hi,
I am looking for blogs or any document on how to implement a Lookup during data loads in BW.
The problem is that all those that I find on this site are mostly about u201CLookup in XIu201D
I have read bits and hints on different postings on this site and this is the best I could do for the scenario shown below:
I need to add the Chars: Char1, Char2, Char3 to CubeX
so that I can display the data for these 3 Chars in a report.
Char1 and Char2 are filled in ODS12 and Char3 is filled in Cube3.
Can you help me write a routine so that while loading data to CubeX, it will read Char1, Char2, Char3 from ODS12 and Cube3; and make them available in CubeX?
This is my attempt so far: continue:
u201C----
select /bic/Char1 from /bic/ODS12
select /bic/Char2 from /bic/ODS12
select /bic/Char3 from /bic/Cube3
into result
WHERE u2026u2026u2026u2026u2026u2026u2026u2026u2026u2026u2026u2026u2026u2026u2026u2026
and objvers = 'A' .
end select.
u201C----
1. What should be my WHERE clause?
2. In the select statement, by studying samples on this where should there be an u201CMu201D in front of the ODS? e.g. select /bic/Char1 from /bic/MODS12
If so, what is the significance and the other options?
3. Should this code be in the Start routing of CubeX? Or any other possible location? Also, in the start routine does it matter where within the start routine this code needs to be placed?
4. Can you please fix this code and add any lines I may be missing?
Is what I am looking to do refer to as u201Cdoing a lookupu201D?
Thanksok
-
Performance issue of this code
Hi folks,
This report is working fine.But it is taking lot of time if i enter only company code.Could any one suggest me where is the problem.
kaki
REPORT Z1F_RFKEPL00 no standard page heading
line-size 140
line-count 65
message-id Z1.
TABLES: LFA1,t005t,bsak,bseg,t001,skat.
data: begin of t_bsak occurs 0,
bukrs like bsak-bukrs, "company code
lifnr like bsak-lifnr, "Vendor acc number
augdt like bsak-augdt, "Clearing date
AUGBL like bsak-AUGBL, "Clearing Document
GJAHR like bsak-GJAHR, "year
belnr like bsak-belnr, "Document number
BUZEI like bsak-BUZEI, "Line Item
budat like bsak-budat, "Posting Date in the Document
bldat like bsak-bldat, "Document date in document
blart like bsak-blart, "Document type
BSCHL like bsak-BSCHL, "Posting key
WAERS like bsak-WAERS, "Currency key
CPUDT like bsak-cpudt, "Accounting Document Entry Date
SHKZG like bsak-shkzg, "Debit/Credit Indicator
DMBTR like bsak-dmbtr, "Amount in local currency
WRBTR like bsak-wrbtr, "Amount in document currency
SGTXT like bsak-sgtxt, "Item Text
SAKNR LIKE bsak-saknr, "G/L Account Number
hkont like bsak-hkont, "General Ledger Account
SKFBT LIKE BSAK-SKFBT, "Amount Eligible for Cash Discount
KOSTL LIKE BSEG-KOSTL, "Cost center
ktopl like t001-ktopl, "chart of accounts
txt20 like skat-txt20, "Short test for the GL acc
name1 like lfa1-name1,
land1 like lfa1-land1,
landx like t005t-landx,
end of t_bsak.
data: begin of t_header occurs 0,
bukrs like bsak-bukrs,
hkont like bsak-hkont,
lifnr like bsak-lifnr,
waers like bsak-waers,
land1 like lfa1-land1,
name1 like lfa1-name1,
landx like t005t-landx,
end of t_header.
data: begin of t_lfa1 occurs 0,
lifnr like lfa1-lifnr,
name1 like lfa1-name1,
land1 like lfa1-land1,
landx like t005t-landx,
end of t_lfa1.
data: t_bseg like t_bsak occurs 0 with header line.
data: t_data like t_bsak occurs 0 with header line.
selection-screen begin of block blk1 with frame title text-001.
select-options: s_lifnr for bsak-lifnr,
s_bukrs for bsak-bukrs.
selection-screen end of block blk1.
selection-screen begin of block blk2 with frame title text-002.
parameters s_budat like bsik-budat default sy-datum.
select-options: s_augdt for bsak-augdt.
selection-screen end of block blk2.
selection-screen begin of block blk3 with frame title text-003.
parameters: stand as checkbox default 'X',
park as checkbox.
selection-screen end of block blk3.
start-of-selection.
perform process_data.
top-of-page.
perform set_page_header.
*& Form process_data
text
form process_data.
data: line like t_bsak occurs 0 with header line.
data: l_wrbtr(10) type c.
data: l_debit type bsak-wrbtr,l_credit type bsak-wrbtr,
l_balance type bsak-wrbtr.
data:l_hkont(10) type n.
select BUKRS LIFNR AUGDT AUGBL GJAHR BELNR BUZEI BUDAT BLDAT
CPUDT WAERS BLART BSCHL SHKZG DMBTR WRBTR SGTXT HKONT SKFBT
from bsak
into corresponding fields of table t_bsak
where
lifnr in s_lifnr and
BUKRS in s_bukrs and
budat le s_budat and " Open items
augdt in s_augdt order by lifnr.
if sy-subrc ne 0.
message i016.
leave list-processing.
endif.
sort t_bsak by BUDAT.
CHECK NOT t_bsak[] IS INITIAL.
select MANDT BUKRS LIFNR AUGDT AUGBL GJAHR BELNR
SHKZG DMBTR WRBTR SGTXT SKFBT KOSTL BSCHL hkont BUZEI
into corresponding fields of table t_bseg from bseg
FOR ALL ENTRIES IN t_bsak
where belnr = t_bsak-belnr and
bukrs = t_bsak-bukrs and
gjahr = t_bsak-gjahr
ORDER BY PRIMARY KEY .
loop at t_bsak.
to get vendor name
select single * from lfa1 where lifnr = t_bsak-lifnr.
move lfa1-lifnr to t_header-lifnr.
move lfa1-name1 to t_header-name1.
move lfa1-land1 to t_header-land1.
move t_bsak-bukrs to t_header-bukrs.
move t_bsak-hkont to t_header-hkont.
move t_bsak-waers to t_header-waers.
if sy-subrc = 0.
append t_header.
clear t_header.
endif.
to get vendor country
loop at t_header.
select single * from t005t where land1 = t_header-land1 and
SPRAS = 'E'.
move t005t-landx to t_header-landx.
if sy-subrc = 0.
modify t_header.
clear t_header.
endif.
endloop.
loop at t_bseg where belnr = t_bsak-belnr and
bukrs = t_bsak-bukrs and
gjahr = t_bsak-gjahr.
l_hkont = t_bseg-hkont.
*To get chart of accounts
select single * from t001 where bukrs = t_bseg-bukrs.
move t001-ktopl to t_bseg-ktopl.
*To get short text for the chart of accounts
select single * from skat where ktopl = t_bseg-ktopl and
saknr = l_hkont and
spras = 'E'.
t_data-bukrs = t_bsak-bukrs.
t_data-lifnr = t_bsak-lifnr.
t_data-augdt = t_bseg-augdt.
t_data-AUGBL = t_bseg-AUGBL.
t_data-GJAHR = t_bseg-GJAHR.
t_data-belnr = t_bsak-belnr.
t_data-BUZEI = t_bseg-BUZEI.
t_data-budat = t_bsak-budat.
t_data-bldat = t_bsak-bldat.
t_data-blart = t_bsak-blart.
t_data-BSCHL = t_bseg-BSCHL.
t_data-WAERS = t_bsak-WAERS.
t_data-CPUDT = t_bsak-cpudt.
t_data-SHKZG = t_bseg-shkzg.
t_data-DMBTR = t_bseg-dmbtr.
t_data-WRBTR = t_bseg-wrbtr.
t_data-SGTXT = t_bsak-sgtxt.
t_data-SAKNR = t_bseg-saknr.
t_data-hkont = t_bseg-hkont.
t_data-SKFBT = t_bseg-SKFBT.
t_data-KOSTL = t_bseg-KOSTL.
t_data-ktopl = t_bseg-ktopl.
t_data-txt20 = skat-txt20.
append t_data.
clear t_data.
endloop.
endloop.
sort t_header by lifnr.
delete adjacent duplicates from t_header.
*Display----
*to display header
data: l_buzei type bseg-buzei.
loop at t_header.
write:/1(6) t_header-bukrs color 2,
7(8) t_header-hkont color 2,
18(10) t_header-lifnr color 2.
write:/30(10) t_header-name1.
write:/30(10) t_header-landx.
uline.
loop at t_data where lifnr = t_header-lifnr.
l_wrbtr = t_data-wrbtr.
if t_data-wrbtr = t_data-skfbt.
concatenate l_wrbtr '-' into l_wrbtr.
endif.
write:/15(11) t_data-BUDAT no-zero color 7,
26(5) t_data-BLART color 7,
30(12) t_data-belnr color 7,
42(16) t_data-BLDAT color 7,
58(5) t_data-buzei color 7,
63(12) t_data-BSCHL color 7,
75(9) t_data-AUGDT color 7,
84(35) t_data-AUGBL color 7,
119(7) t_data-WAERS color 7,
126(12) l_wrbtr color 7.
write:/55 t_data-sgtxt.
write:/60(10) t_data-kostl,
70(10) t_data-hkont,
80(20) t_data-txt20.
clear l_wrbtr.
endloop.
write:/1(6) t_data-bukrs color 2,
7(8) t_data-hkont color 2,
18(10) t_data-lifnr color 2.
uline.
line[] = t_data[].
loop at line where lifnr = t_header-lifnr.
if line-shkzg = 'H'.
l_debit = l_debit + line-wrbtr.
endif.
if line-shkzg = 'S'.
l_credit = l_credit + line-wrbtr.
endif.
endloop.
write:/1(6) t_data-bukrs color 3,
7(8) t_data-hkont color 3,
18(10) t_data-lifnr color 3.
write:/1(6) t_data-bukrs color 3,
7(11) t_data-hkont color 3,
18(102) t_data-lifnr color 3.
l_balance = l_debit - l_credit.
write:115(15) l_debit color 3. write:135(1) 'D' color 3.
write:/115(15) l_credit color 3. write:135(1) 'C' color 3.
for balnce
write:/90(25) 'Bal.:' color 3.
write:115(15) l_balance color 3.
write:120(15) l_debit color 3.
write:138(2) 'D' color 3.
write:/120(15) l_credit color 3.
write:138(2) 'C' color 3.
for balnce
write:/90(00) 'Bal.:' color 3.
write:120(15) l_balance color 3.
clear: l_debit,l_credit,l_balance.
uline.
endloop.
endform. "process_data
*& Form set_page_header
text
FORM set_page_header.
call function 'Z_REPORT_TITLE'
EXPORTING
line_size = sy-linsz
sy_title = 'List of Vendor Line Items'
uline = 'X'
first_page_only = ' '.
write :1(15) 'Allocation' color col_heading,
15(10) 'Pstng' color col_heading,
25(5) 'Do' color col_heading,
30(10) 'Documnet' color col_heading,
40(10) 'Doc' color col_heading,
50(8) 'BusA' color col_heading,
58(5) 'LIm' color col_heading,
63(4) 'PK' color col_heading,
67(4) 'S' color col_heading,
71(4) 'P' color col_heading,
75(7) 'Clrg' color col_heading,
82(10) 'Clearing' color col_heading,
92(20) 'D/c discount Amnt' color col_heading,
112(5) 'Rsn' color col_heading,
117(2) 'G' color col_heading,
119(7) 'Curr-' color col_heading,
126(12) 'Amount in' color col_heading,
138(2) 'T' color col_heading.
write space.
write :1(15) 'number' color col_heading,
15(10) 'date' color col_heading,
25(5) 'ty' color col_heading,
30(10) 'number' color col_heading,
40(18) 'date' color col_heading,
58(5) '' color col_heading,
63(4) '' color col_heading,
67(4) 'I' color col_heading,
71(4) 'K' color col_heading,
75(7) 'date' color col_heading,
82(24) 'doc.no' color col_heading,
105(20) 'in LC' color col_heading,
112(5) 'code' color col_heading,
117(2) 'L' color col_heading,
119(7) 'ency' color col_heading,
126(12) 'doc.curr.' color col_heading,
138(2) 'X' color col_heading.
write space.
uline.
ENDFORM. " set_page_headerit will better to optimize the below part of your code -
loop at t_bsak.
to get vendor name
select single * from lfa1 where lifnr = t_bsak-lifnr.
move lfa1-lifnr to t_header-lifnr.
move lfa1-name1 to t_header-name1.
move lfa1-land1 to t_header-land1.
move t_bsak-bukrs to t_header-bukrs.
move t_bsak-hkont to t_header-hkont.
move t_bsak-waers to t_header-waers.
if sy-subrc = 0.
append t_header.
clear t_header.
endif.
to get vendor country
loop at t_header.
select single * from t005t where land1 = t_header-land1 and
SPRAS = 'E'.
move t005t-landx to t_header-landx.
if sy-subrc = 0.
modify t_header.
clear t_header.
endif.
endloop.
loop at t_bseg where belnr = t_bsak-belnr and
bukrs = t_bsak-bukrs and
gjahr = t_bsak-gjahr.
l_hkont = t_bseg-hkont.
*To get chart of accounts
select single * from t001 where bukrs = t_bseg-bukrs.
move t001-ktopl to t_bseg-ktopl.
*To get short text for the chart of accounts
select single * from skat where ktopl = t_bseg-ktopl and
saknr = l_hkont and
spras = 'E'.
t_data-bukrs = t_bsak-bukrs.
t_data-lifnr = t_bsak-lifnr.
t_data-augdt = t_bseg-augdt.
t_data-AUGBL = t_bseg-AUGBL.
t_data-GJAHR = t_bseg-GJAHR.
t_data-belnr = t_bsak-belnr.
t_data-BUZEI = t_bseg-BUZEI.
t_data-budat = t_bsak-budat.
t_data-bldat = t_bsak-bldat.
t_data-blart = t_bsak-blart.
t_data-BSCHL = t_bseg-BSCHL.
t_data-WAERS = t_bsak-WAERS.
t_data-CPUDT = t_bsak-cpudt.
t_data-SHKZG = t_bseg-shkzg.
t_data-DMBTR = t_bseg-dmbtr.
t_data-WRBTR = t_bseg-wrbtr.
t_data-SGTXT = t_bsak-sgtxt.
t_data-SAKNR = t_bseg-saknr.
t_data-hkont = t_bseg-hkont.
t_data-SKFBT = t_bseg-SKFBT.
t_data-KOSTL = t_bseg-KOSTL.
t_data-ktopl = t_bseg-ktopl.
t_data-txt20 = skat-txt20.
append t_data.
clear t_data.
endloop.
endloop.
You are selecting data from database inside the loop and specially you are populating t_header inside the loop and again looping on the same table to get value of t005t-landx. Here you are updating even those records which are already update by initial loop pass so multiple updation for already updated records.
Thanks,
Rajeev -
Performance issue with this complex query
Please ignore this thread(post)
This query fetches a lot of data and takes more than 4 t0 5 hrs to retrieve them.
I have tried to get the explain plan the display cursor and the TKPROF for the same but then the query utilizes more than 100GB temp space and it fails to generate any.
What I have is the spool file which is pasted below along with the query.
Database version: 11g
I'm looking forward for suggestions how to improve the performance of this statement
Please ignore this thread(post)
Edited by: user13319084 on May 30, 2011 12:34 AMYou provide no information that can be used in answering your question on how to improve the query.
In absence of technical information, all that we can discuss is conceptual issues. Like why is the query that complex? A common answer is that the underlying data model lacks the intelligence and this now requires the intelligence to be build into the query.
You need to look at the data model and the query in order to address this performance problem - and make sure that the actual business requirements is clearly identified and understood. -
Performance issue with this query.
Hi Experts,
This query is fetching 500 records.
SELECT
RECIPIENT_ID ,FAX_STATUS
FROM
FAX_STAGE WHERE LOWER(FAX_STATUS) like 'moved to%'
Execution Plan
| Id | Operation | Name | Rows | Bytes | Cost (%CPU)|
| 0 | SELECT STATEMENT | | 159K| 10M| 2170 (1)|
| 1 | TABLE ACCESS BY INDEX ROWID| FAX_STAGE | 159K| 10M| 2170 (1)|
| 2 | INDEX RANGE SCAN | INDX_FAX_STATUS_RAM | 28786 | | 123 (0)|
Note
- 'PLAN_TABLE' is old version
Statistics
1 recursive calls
0 db block gets
21 consistent gets
0 physical reads
0 redo size
937 bytes sent via SQL*Net to client
375 bytes received via SQL*Net from client
3 SQL*Net roundtrips to/from client
0 sorts (memory)
0 sorts (disk)
19 rows processed
Total number of records in the table.
SELECT COUNT(*) FROM FAX_STAGE--3679418
Distinct reccords are low for this column.
SELECT DISTINCT FAX_STATUS FROM FAX_STAGE;
Completed
BROKEN
Broken - New
moved to - America
MOVED to - Australia
Moved to Canada and australia
Functional based indexe on FAX_STAGE(LOWER(FAX_STATUS))
stats are upto date.
Still the cost is high
How to improve the performance of this query.
Please help me.
Thanks in advance.With no heavy activity on your fax_stage table a bitmap index might do better - see CREATE INDEX
I would try FTS (Full Table Scan) first as 6 vs. 3679418 is low cardinality for sure so using an index is not very helpful in this case (maybe too much Exadata oriented)
There's a lot of web pages where you can read: full table scans are not always evil and indexes are not always good or vice versa Ask Tom &quot;How to avoid the full table scan&quot;
Regards
Etbin -
Performance issue with JavaFX code
Hi, I'm experienced in Java, but not in JavaFX. I wrote simple LIFE cellular automata, it has two options: randomize cells, and take a step forward in simulation. My problem is that following simulation steps are slower and slower. NetBeans profiler suggests that if I take more steps in simulation then get method's self time (get$impl$$bound$int__int method exactly) is getting slower in time -- at first it takes about 0.054 (270/5000) ms per call, but later the average jumps to 0.55 (12709/23000) ms per call. I don't really know how bind mechanism works, could this be a bind issue? Maybe I create many unneccessary objects? Here's the code:
import java.lang.Math;
import javafx.scene.input.MouseEvent;
import javafx.scene.paint.Color;
import javafx.scene.Scene;
import javafx.scene.shape.Rectangle;
import javafx.stage.Stage;
import javafx.ext.swing.SwingButton;
import java.lang.System;
var tab : CellTable = CellTable {
width: 10
height: 10
def rects =
for (i in [0..tab.width-1]) {
for (j in [0..tab.height-1]) {
Rectangle {
x: 20 * i + 1
y: 20 * j + 1
width: 17
height: 17
stroke: Color.RED
fill: bind if (tab.get(i, j)) Color.RED else Color.WHITE;
def stage = Stage {
title: "LIFE"
resizable: false
scene: Scene {
width: 200
height: 250
content: [
rects,
SwingButton {
text: "random!"
translateX: 0
translateY: 210
width: 100
action: function() {
tab.random();
SwingButton {
text: "next>"
translateX: 100
translateY: 210
width: 100
action: function() {
tab.next();
class CellTable {
postinit {
for (i in [0..width-1]) {
for (j in [0..height-1]) {
insert false into cells;
insert false into tmp;
xrange = [0..width-1];
yrange = [0..height-1];
var cells : Boolean[];
var tmp : Boolean[];
var width : Integer;
var height : Integer;
var xrange : Integer[];
var yrange : Integer[];
function random() {
for (x in [0..width-1]) {
for (y in [0..height-1]) {
set(x, y, Math.random() < 0.5);
function next() {
for (x in xrange) {
for (y in yrange) {
var ct = 0;
for (xx in [-1..1]) {
for (yy in [-1..1]) {
if (get((x + width + xx) mod width, (y + height + yy) mod height)) {
++ct;
if (get(x,y)) {
--ct;
tmp[idx(x,y)] = (ct == 2 or ct == 3);
} else {
tmp[idx(x,y)] = (ct == 3);
for (x in xrange) {
for (y in yrange) {
set(x, y, tmp[idx(x, y)]);
function idx(x : Integer, y : Integer) : Integer {
return x * height + y;
bound function get(x : Integer, y : Integer) : Boolean {
return cells[idx(x,y)];
function set(x : Integer, y : Integer, b : Boolean) {
cells[idx(x,y)] = b;
}I would be very grateful if anyone could tell me what could be the issue or at least what should I check to figure it out.I tried to solve your problem.
First, I eliminated the keyword 'bound' from the function in CellTable class. Then I rewrite the value of 'fill' attribute in the Rectangle as below :
fill: bind if (tab.cells[tab.idx(i, j)]) Color.RED else Color.WHITE;As a result, I found your code ran faster than before. But I don't know why it became so.
Could it be that the 'bound function' creates some new Boolean instances every time it was called ???
Sorry, I can not help you.
I hope anyone would tell me why the 'bound function' made the code slower. -
Performance issue with the code
hi,
i have below code.for printing it is taking enough time..
which way i can improve the performance of below piece of code and what changes i will do for improving performance??
kindly help me..
form get_komgd.
tables: kotd994. "kondd
data : tfill_auswahl type i.
data: begin of auswahl occurs 10,
kappl like kotd994-kappl ,
kschl like kotd994-kschl ,
vkorg like kotd994-vkorg ,
vtweg like kotd994-vtweg ,
spart like kotd994-spart ,
kvgr1 like kotd994-kvgr1 ,
matwa like kotd994-matwa ,
datbi like kotd994-datbi ,
datab like kotd994-datab ,
knumh like kotd994-knumh ,
smatn like kondd-smatn,
meins like kondd-meins,
sugrd like kondd-sugrd,
end of auswahl.
tables: kondd.
select * from kondd
where smatn = ltap-matnr.
select * from kotd994
where kappl = 'V'
and kschl = vbak-kschl
and vkorg = vbak-vkorg
and vtweg = vbak-vtweg
and spart = vbak-spart
and kvgr1 = vbak-kvgr1
and matwa = vbak-matwa
and datbi >= sy-datum
and datab <= sy-datum
and knumh = kondd-knumh .
endselect.
if sy-subrc = 0.
and kotd994-kvgr1(1) = 'Z'.
move-corresponding kotd994 to auswahl.
move-corresponding kondd to auswahl.
append auswahl .
endif. " sy-subrc = 0.
write: / auswahl.
endselect.
describe table auswahl lines tfill_auswahl.
if tfill_auswahl = 1.
komgd-matwa = auswahl-matwa.
else.
clear komgd-matwa.
endif. " tfill_auswahl = 1.
endform. " ZHX_GET_COSTUMER_NRHi,
Using two select statements will take more time.
Rather use this sample code:
select * from kondd in to corresponding fields of table auswahl
where smatn = ltap-matnr.
select * from kotd994 into corresponding fields of auswahl
for all entries of auswahl
where kappl = 'V'
and vkorg = vbak-vkorg
and vtweg = vbak-vtweg
and kvgr1 = vbak-kvgr1
and datbi >= sy-datum
and datab <= sy-datum
and knumh = auswahl-knumh .
however, in the structure of auswahl maintain the field of knumh as well, so that we can pass the values in the second select directly.
This will improve the performance very well.
if possible, try and use the primary key combinations in the where clause while extracting the data. -
Performance issues with Bapi BAPI_MATERIAL_AVAILABILITY...
Hello,
I have a Z program to check ATP which is working with Bapi BAPI_MATERIAL_AVAILABILITY....
As I am in the retail system we have performance issues with this bapi due the huge amount of articles in the system we need to calculate the ATP.
any way to improve the performance?
Thanks and best regards
LThe BAPI appears to execute for only one plant/material, etc., at a time, so I would have to concentrate on making data retrieval and post-bapi processing as efficient as possible. In your trace output, how much of your overall time is consumed by the BAPI? How much by the other code? You might find improvements there...
-
Hi all,
I'm facing some performance issues with Spry. I'm using it
for handling a menubar acting as a rollover menu : its color
changes under mouse cursor, and a submenu does appear at the same
time.
I have no problem when working with Firefox, but in IE6, it
renders too slowly
Is there something I've missed in the configuration or code
(or is there some tips for this kind of problem) ?
For information, I used UL and LI html tags, and I've
configured Spry to render these as a menubar (with multiple levels)
Thanks for your responseSorry, there are no public access to this application
:-( -
Performance issue with a Custom view
Hi ,
I am pretty new to performance tuning and facing a performance issue with a custom view.
Execution time for view query is good but as soon as I append a where caluse to view query ,the execution time increases.
Below is the view query:
CREATE OR REPLACE XXX_INFO_VIEW AS
SELECT csb.system_id license_id,
cst.name license_number ,
csb.system_type_code license_type ,
csb.attribute3 lac , -- license authorization code
csb.attribute6 lat , -- license admin token
csb.attribute12 ols_reg, -- OLS Registration allowed flag
l.attribute4 license_biz_type ,
NVL (( SELECT 'Y' l_supp_flag
FROM csi_item_instances cii,
okc_k_lines_b a,
okc_k_items c
WHERE c.cle_id = a.id
AND a.lse_id = 9
AND c.jtot_object1_code = 'OKX_CUSTPROD'
AND c.object1_id1 = cii.instance_id||''
AND cii.instance_status_id IN (3, 510)
AND cii.system_id = csb.system_id
AND a.sts_code IN ('SIGNED', 'ACTIVE')
AND NVL (a.date_terminated, a.end_date) > SYSDATE
AND ROWNUM < 2), 'N') active_supp_flag,
hp.party_name "Customer_Name" , -- Customer Name
hca.attribute12 FGE_FLAG,
(SELECT /*+INDEX (oklt OKC_K_LINES_TL_U1) */
nvl(max((decode(name, 'eSupport','2','Enterprise','1','Standard','1','TERM RTU','0','TERM RTS','0','Notfound'))),0) covName --TERM RTU and TERM RTS added as per Vijaya's suggestion APR302013
FROM OKC_K_LINES_B oklb1,
OKC_K_LINES_TL oklt,
OKC_K_LINES_B oklb2,
OKC_K_ITEMS oki,
CSI_item_instances cii
WHERE
OKI.JTOT_OBJECT1_CODE = 'OKX_CUSTPROD'
AND oklb1.id=oklt.id
AND OKI.OBJECT1_ID1 =cii.instance_id||''
AND Oklb1.lse_id=2
AND oklb1.dnz_chr_id=oklb2.dnz_chr_id
AND oklb2.lse_id=9
AND oki.CLE_ID=oklb2.id
AND cii.system_id=csb.system_id
AND oklt.LANGUAGE=USERENV ('LANG')) COVERAGE_TYPE
FROM csi_systems_b csb ,
csi_systems_tl cst ,
hz_cust_accounts hca,
hz_parties hp,
fnd_lookup_values l
WHERE csb.system_type_code = l.lookup_code (+)
AND csb.system_id = cst.system_id
AND hca.cust_account_id =csb.customer_id
AND hca.party_id= hp.party_id
AND cst.language = USERENV ('LANG')
AND l.lookup_type (+) = 'CSI_SYSTEM_TYPE'
AND l.language (+) = USERENV ('LANG')
AND NVL (csb.end_date_active, SYSDATE+1) > SYSDATE)
I have forced an index to avoid Full table scan on OKC_K_LINES_TL and suppressed an index on CSI_item_instances.instance id to make the view query fast.
So when i do select * from XXX_INFO_VIEWit executes in a decent time,But when I try to do
select * from XXX_INFO_VIEW where active_supp_flag='Y' and coverage_type='1'
it takes lot of time.
Execution plan is same for both queries in terms of cost but with WHERE clause Number of bytes increases.
Below are the execution plans:
View query:
SELECT STATEMENT ALL_ROWS Cost: 7,212 Bytes: 536,237 Cardinality: 3,211
10 COUNT STOPKEY
9 NESTED LOOPS
7 NESTED LOOPS Cost: 1,085 Bytes: 101 Cardinality: 1
5 NESTED LOOPS Cost: 487 Bytes: 17,043 Cardinality: 299
2 TABLE ACCESS BY INDEX ROWID TABLE CSI.CSI_ITEM_INSTANCES Cost: 22 Bytes: 2,325 Cardinality: 155
1 INDEX RANGE SCAN INDEX CSI.CSI_ITEM_INSTANCES_N07 Cost: 3 Cardinality: 315
4 TABLE ACCESS BY INDEX ROWID TABLE OKC.OKC_K_ITEMS Cost: 3 Bytes: 84 Cardinality: 2
3 INDEX RANGE SCAN INDEX OKC.OKC_K_ITEMS_N2 Cost: 2 Cardinality: 2
6 INDEX UNIQUE SCAN INDEX (UNIQUE) OKC.OKC_K_LINES_B_U1 Cost: 1 Cardinality: 1
8 TABLE ACCESS BY INDEX ROWID TABLE OKC.OKC_K_LINES_B Cost: 2 Bytes: 44 Cardinality: 1
12 TABLE ACCESS BY INDEX ROWID TABLE AR.HZ_CUST_ACCOUNTS Cost: 2 Bytes: 7 Cardinality: 1
11 INDEX UNIQUE SCAN INDEX (UNIQUE) AR.HZ_CUST_ACCOUNTS_U1 Cost: 1 Cardinality: 1
28 SORT AGGREGATE Bytes: 169 Cardinality: 1
27 NESTED LOOPS
25 NESTED LOOPS Cost: 16,549 Bytes: 974,792 Cardinality: 5,768
23 NESTED LOOPS Cost: 5,070 Bytes: 811,737 Cardinality: 5,757
20 NESTED LOOPS Cost: 2,180 Bytes: 56,066 Cardinality: 578
17 NESTED LOOPS Cost: 967 Bytes: 32,118 Cardinality: 606
14 TABLE ACCESS BY INDEX ROWID TABLE CSI.CSI_ITEM_INSTANCES Cost: 22 Bytes: 3,465 Cardinality: 315
13 INDEX RANGE SCAN INDEX CSI.CSI_ITEM_INSTANCES_N07 Cost: 3 Cardinality: 315
16 TABLE ACCESS BY INDEX ROWID TABLE OKC.OKC_K_ITEMS Cost: 3 Bytes: 84 Cardinality: 2
15 INDEX RANGE SCAN INDEX OKC.OKC_K_ITEMS_N2 Cost: 2 Cardinality: 2
19 TABLE ACCESS BY INDEX ROWID TABLE OKC.OKC_K_LINES_B Cost: 2 Bytes: 44 Cardinality: 1
18 INDEX UNIQUE SCAN INDEX (UNIQUE) OKC.OKC_K_LINES_B_U1 Cost: 1 Cardinality: 1
22 TABLE ACCESS BY INDEX ROWID TABLE OKC.OKC_K_LINES_B Cost: 5 Bytes: 440 Cardinality: 10
21 INDEX RANGE SCAN INDEX OKC.OKC_K_LINES_B_N2 Cost: 2 Cardinality: 9
24 INDEX UNIQUE SCAN INDEX (UNIQUE) OKC.OKC_K_LINES_TL_U1 Cost: 1 Cardinality: 1
26 TABLE ACCESS BY INDEX ROWID TABLE OKC.OKC_K_LINES_TL Cost: 2 Bytes: 28 Cardinality: 1
43 HASH JOIN Cost: 7,212 Bytes: 536,237 Cardinality: 3,211
41 NESTED LOOPS
39 NESTED LOOPS Cost: 7,070 Bytes: 485,792 Cardinality: 3,196
37 HASH JOIN Cost: 676 Bytes: 341,972 Cardinality: 3,196
32 HASH JOIN RIGHT OUTER Cost: 488 Bytes: 310,012 Cardinality: 3,196
30 TABLE ACCESS BY INDEX ROWID TABLE APPLSYS.FND_LOOKUP_VALUES Cost: 7 Bytes: 544 Cardinality: 17
29 INDEX RANGE SCAN INDEX (UNIQUE) APPLSYS.FND_LOOKUP_VALUES_U1 Cost: 3 Cardinality: 17
31 TABLE ACCESS FULL TABLE CSI.CSI_SYSTEMS_B Cost: 481 Bytes: 207,740 Cardinality: 3,196
36 VIEW VIEW AR.index$_join$_013 Cost: 187 Bytes: 408,870 Cardinality: 40,887
35 HASH JOIN
33 INDEX FAST FULL SCAN INDEX (UNIQUE) AR.HZ_CUST_ACCOUNTS_U1 Cost: 112 Bytes: 408,870 Cardinality: 40,887
34 INDEX FAST FULL SCAN INDEX AR.HZ_CUST_ACCOUNTS_N2 Cost: 122 Bytes: 408,870 Cardinality: 40,887
38 INDEX UNIQUE SCAN INDEX (UNIQUE) AR.HZ_PARTIES_U1 Cost: 1 Cardinality: 1
40 TABLE ACCESS BY INDEX ROWID TABLE AR.HZ_PARTIES Cost: 2 Bytes: 45 Cardinality: 1
42 TABLE ACCESS FULL TABLE CSI.CSI_SYSTEMS_TL Cost: 142 Bytes: 958,770 Cardinality: 63,918
Execution plan for view query with WHERE clause:
SELECT STATEMENT ALL_ROWS Cost: 7,212 Bytes: 2,462,837 Cardinality: 3,211
10 COUNT STOPKEY
9 NESTED LOOPS
7 NESTED LOOPS Cost: 1,085 Bytes: 101 Cardinality: 1
5 NESTED LOOPS Cost: 487 Bytes: 17,043 Cardinality: 299
2 TABLE ACCESS BY INDEX ROWID TABLE CSI.CSI_ITEM_INSTANCES Cost: 22 Bytes: 2,325 Cardinality: 155
1 INDEX RANGE SCAN INDEX CSI.CSI_ITEM_INSTANCES_N07 Cost: 3 Cardinality: 315
4 TABLE ACCESS BY INDEX ROWID TABLE OKC.OKC_K_ITEMS Cost: 3 Bytes: 84 Cardinality: 2
3 INDEX RANGE SCAN INDEX OKC.OKC_K_ITEMS_N2 Cost: 2 Cardinality: 2
6 INDEX UNIQUE SCAN INDEX (UNIQUE) OKC.OKC_K_LINES_B_U1 Cost: 1 Cardinality: 1
8 TABLE ACCESS BY INDEX ROWID TABLE OKC.OKC_K_LINES_B Cost: 2 Bytes: 44 Cardinality: 1
12 TABLE ACCESS BY INDEX ROWID TABLE AR.HZ_CUST_ACCOUNTS Cost: 2 Bytes: 7 Cardinality: 1
11 INDEX UNIQUE SCAN INDEX (UNIQUE) AR.HZ_CUST_ACCOUNTS_U1 Cost: 1 Cardinality: 1
28 SORT AGGREGATE Bytes: 169 Cardinality: 1
27 NESTED LOOPS
25 NESTED LOOPS Cost: 16,549 Bytes: 974,792 Cardinality: 5,768
23 NESTED LOOPS Cost: 5,070 Bytes: 811,737 Cardinality: 5,757
20 NESTED LOOPS Cost: 2,180 Bytes: 56,066 Cardinality: 578
17 NESTED LOOPS Cost: 967 Bytes: 32,118 Cardinality: 606
14 TABLE ACCESS BY INDEX ROWID TABLE CSI.CSI_ITEM_INSTANCES Cost: 22 Bytes: 3,465 Cardinality: 315
13 INDEX RANGE SCAN INDEX CSI.CSI_ITEM_INSTANCES_N07 Cost: 3 Cardinality: 315
16 TABLE ACCESS BY INDEX ROWID TABLE OKC.OKC_K_ITEMS Cost: 3 Bytes: 84 Cardinality: 2
15 INDEX RANGE SCAN INDEX OKC.OKC_K_ITEMS_N2 Cost: 2 Cardinality: 2
19 TABLE ACCESS BY INDEX ROWID TABLE OKC.OKC_K_LINES_B Cost: 2 Bytes: 44 Cardinality: 1
18 INDEX UNIQUE SCAN INDEX (UNIQUE) OKC.OKC_K_LINES_B_U1 Cost: 1 Cardinality: 1
22 TABLE ACCESS BY INDEX ROWID TABLE OKC.OKC_K_LINES_B Cost: 5 Bytes: 440 Cardinality: 10
21 INDEX RANGE SCAN INDEX OKC.OKC_K_LINES_B_N2 Cost: 2 Cardinality: 9
24 INDEX UNIQUE SCAN INDEX (UNIQUE) OKC.OKC_K_LINES_TL_U1 Cost: 1 Cardinality: 1
26 TABLE ACCESS BY INDEX ROWID TABLE OKC.OKC_K_LINES_TL Cost: 2 Bytes: 28 Cardinality: 1
44 VIEW VIEW APPS.WRS_LICENSE_INFO_V Cost: 7,212 Bytes: 2,462,837 Cardinality: 3,211
43 HASH JOIN Cost: 7,212 Bytes: 536,237 Cardinality: 3,211
41 NESTED LOOPS
39 NESTED LOOPS Cost: 7,070 Bytes: 485,792 Cardinality: 3,196
37 HASH JOIN Cost: 676 Bytes: 341,972 Cardinality: 3,196
32 HASH JOIN RIGHT OUTER Cost: 488 Bytes: 310,012 Cardinality: 3,196
30 TABLE ACCESS BY INDEX ROWID TABLE APPLSYS.FND_LOOKUP_VALUES Cost: 7 Bytes: 544 Cardinality: 17
29 INDEX RANGE SCAN INDEX (UNIQUE) APPLSYS.FND_LOOKUP_VALUES_U1 Cost: 3 Cardinality: 17
31 TABLE ACCESS FULL TABLE CSI.CSI_SYSTEMS_B Cost: 481 Bytes: 207,740 Cardinality: 3,196
36 VIEW VIEW AR.index$_join$_013 Cost: 187 Bytes: 408,870 Cardinality: 40,887
35 HASH JOIN
33 INDEX FAST FULL SCAN INDEX (UNIQUE) AR.HZ_CUST_ACCOUNTS_U1 Cost: 112 Bytes: 408,870 Cardinality: 40,887
34 INDEX FAST FULL SCAN INDEX AR.HZ_CUST_ACCOUNTS_N2 Cost: 122 Bytes: 408,870 Cardinality: 40,887
38 INDEX UNIQUE SCAN INDEX (UNIQUE) AR.HZ_PARTIES_U1 Cost: 1 Cardinality: 1
40 TABLE ACCESS BY INDEX ROWID TABLE AR.HZ_PARTIES Cost: 2 Bytes: 45 Cardinality: 1
42 TABLE ACCESS FULL TABLE CSI.CSI_SYSTEMS_TL Cost: 142 Bytes: 958,770 Cardinality: 63,918Hi,
You should always try using primary index fields, if not possible then secondary index fields.
Even if you cannot do anything from either of the two then try this,
Use Less distinct fields on the top.
In your case , you can use bukrs ,gjahr ,werks on the top in the where condition..then followed by less distinct values..
Even when you use secondary index if you have 4 fields in your sec index and you are using only two fields from the top then the index is useful only upto that two fields provided they are in sequence. -
Performance issue with respect to IW39
Issue with T-Code IW39
the main performance issue was with respect to view used by this T-Code VIAUFKST which joins the below mentioned tables.
Tables Entries
ILOA 5622178
AFIH 1213478
AFKO 1703628
AUFK 2202962
We have observed that our Index used are varying based on the selection criteria and on the the most used selection criteria (planner group) is not taking the right index. Any suggestions to resolve this would be highly appreciated. Thanks
Regards,
AkileshHello Rob,
Thanks for your response. Yes our table statistics are upto date and we have also applied the following notes so far to resolve this issue.
917570 -- Poor performance when refreshing in list
1081681 -- DB2-z/OS: Bad performance accessing table JEST
1061894 -- MAM: Incorrect results returned from Order get
1023923 -- F4 help uses table AFIH instead of VIAUFKST for PM orders
1052102 -- Data collection: Performance - access to tables AUFK/COBRB
1014797 -- CO summarization: Perfomance (2) - access to COBRB table
1033587 -- Order selection: Performance - Access to AUFK/COBRB table -
Hi,
I am having serious performance issue due to BSEG table .I am having a change request in which I have to solve the performance issue with regard to BSEG. The situation was that previously they had used select * on both BKPF and BSEG. I removed the select * and selected only those fields which are required as shown below. I also tried using cursors. But the problem is happening in the TEST server where BSEG is having more than 1 crore entries. I have gone through some threads but still not able to understand how to solve this problem. Please help
select bukrs belnr gjahr bldat bstat from bkpf into table T_BKPF_p
WHERE BUKRS IN sd_bukrs AND
BLDAT < s_bldat-low
and BSTAT = ' ' .
select bukrs belnr gjahr shkzg dmbtr hkont from bseg into table T_BSEG_C
FOR ALL ENTRIES IN t_BKPF_p
WHERE BUKRS = T_bkpf_p-bukrs
AND BELNR = T_bkpf_p-belnr
AND GJAHR = T_bkpf_p-gjahr
AND HKONT = SKB1-SAKNR.Hi Kunal,
Here is my take on your issue.
In your select statement on BKPF you are selecting every BKPF record for a specified company code and blank document status that was created before a specified date. If your company has implemented SAP 10 years ago, and your user enters todays date and leaves the company code field blank you will effectively be retrieving almost all the records from BKPF (excluding the ones created today or those with non-blank document status). This would effectively be a huge amount of data. After that you are looking for the corresponding BSEG records for all the records that you have selected in BKPF.
My question to you is why do you need to look at all the records before a given date? Why not ask the user to enter a smaller date range and make the document date and the company code a mandatory entry? You do not have to look at 10 years worth of data especially if you are running this online (as opposed to in the background).
Your BSEG select looks correct. There is very little that you can do except for adding BUZEI to the field list. If you use for all entries and do not include the entire primary key you could lose data.
TABLES: bkpf,
skb1.
SELECT-OPTIONS: s_bldat FOR bkpf-bldat OBLIGATORY,
sd_bukrs FOR bkpf-bukrs OBLIGATORY.
TYPES: BEGIN OF ty_bkpf,
bukrs TYPE bkpf-bukrs,
belnr TYPE bkpf-belnr,
gjahr TYPE bkpf-gjahr,
bldat TYPE bkpf-bldat,
bstat TYPE bkpf-bstat,
END OF ty_bkpf,
BEGIN OF ty_bseg,
bukrs TYPE bseg-bukrs,
belnr TYPE bseg-belnr,
gjahr TYPE bseg-gjahr,
buzei TYPE bseg-buzei,
shkzg TYPE bseg-shkzg,
dmbtr TYPE bseg-dmbtr,
hkont TYPE bseg-hkont,
END OF ty_bseg.
DATA: t_bkpf_p TYPE TABLE OF ty_bkpf,
t_bseg_c TYPE TABLE OF ty_bseg.
SELECT bukrs
belnr
gjahr
bldat
bstat
FROM bkpf
INTO TABLE t_bkpf_p
WHERE bukrs IN sd_bukrs
AND bldat IN s_bldat
AND bstat EQ space .
IF NOT t_bkpf_p[] IS INITIAL.
SELECT bukrs
belnr
gjahr
buzei
shkzg
dmbtr
hkont
FROM bseg
INTO TABLE t_bseg_c
FOR ALL ENTRIES IN t_bkpf_p
WHERE bukrs EQ t_bkpf_p-bukrs
AND belnr EQ t_bkpf_p-belnr
AND gjahr EQ t_bkpf_p-gjahr
AND hkont EQ skb1-saknr.
ENDIF. -
Performance Issue with SXMB_MONI
Hi All,
I have a typical performance issue with SXMB_MONI, when I trigger this T.code it is taking around 20-24 hrs to execute.
Here I have found some tables which actually stores these processed xml messages,
SXMSPFADDRESS
SXMSPFRAWH
RSXMB_REMOTE_SERVICE
SXMSPFAGG
SXMSCONFVL
SXMSPMAST
SXMSPEMAS, SXMSPERROR, SXMSPMAST & SXMSPVERS.
SXMSPMAST, SXMSPMAST2, SXMSCLUR, SXMSCLUR2,
SXMSCLUP, SMXSLUP2, SXMSPFRAWH,
Here I want to increase the performance of sxmb_moni, firstly I want to know from which tables does the sxmb_moni fetches data and more over is it a single table or multiple table.
And please suggest any technique which can decrease the latency time in executing sxmb_moni.
Regards,
Vijay NHi,
Periodically you need to archive the XI messages, that allows you to maintain sufficient performance level.
Create archive jobs in SXMB_ADM to archive data which is 15 days old from XI related growing tables like SXMSCLUR, SXMSPEMAS, SXMSPHIST, SXMSPMAST, SXMSPVERS, SXMSPFRAW ,SWWWIHEAD. This archive job created archive files at the OS Level
For XI tables refer
/people/gourav.khare2/blog/2007/12/12/interesting-abap-tables-in-xi-150-part-i
SXMSPMAST, SXMSCLUP, SXMSPCLUR
the last two are cluster tables
and you won't get XML messages directly from them
have a look inside them
The classes that reads this information in SXMB_MONI are abap classes,
(can be seen at SE24) it is quite difficult to use them,
you might debug SXMB_MONI or use SE30 and see all the classes
that have been used.
You can use value mapping if you are not looking at picking up values from application system.It is just like SM30 transcation.You can get the info under SAP XI->Design and Configuration->Configuration->Value Mapping.
Also see the
these tables,
/SAPDMC/LSOMAP Field Mapping
/SAPTRX/SCAOTMAP
/SAPTRX/SCCNDMAP /SAPTRX/SCEVTMAP
/SAPTRX/SCFUNMAP /SAPTRX/SCSOMAP
/people/udo.martens/blog/2006/02/16/own-logging-of-xi-messages
message-mappings: stored in which database-table?
sxmb_moni, table sxmspmast, Messages with ICON_LED_RED, report RSXMB_SELECT
http://help.sap.com/saphelp_nw04s/helpdata/en/44/a1b46c4c686341e10000000a114a6b/frameset.htm
http://help.sap.com/saphelp_nw04/helpdata/en/ef/45393c3eb3036be10000000a11402f/frameset.htm
Thanks
Swarup
Maybe you are looking for
-
How do I transfer songs from my old ipod touch to the new ipod nano?
I just got the new Ipod nano and I want to get the music i already have to transfer from my old ipod touch to the new nano, how can I do this?
-
PLEASE HELP! Installation errors with creative suite 5.5 design premium?
I recently tried to install creative suite 5.5 design premium on to my home computer with windows vista home premium and it was all going fine then right at the end of the installation this message popped up please help?? Exit Code: 7 ---------------
-
Performance of workspace manager
I have created versioned tables in Oracle 9.2. It sits in DEC Unix OS. I have experienced performance degredation after versioning the tables. The largest table has about 20 million rows. Do I need to analyze the base table generated by versioning th
-
Creating Index for PDF documents
Hello, I am trying to index a column in one of my tables that contains a BLOB object that is a PDF for each record. I want to create an index on that column so I can search through the contents of these PDFs. I have tried several times to create the
-
Help with Reference Error 1074
Can someone point me to discover what I did wrong here in this package ? package { import flash.display.Sprite; import flash.text.TextField; import flash.text.TextFormat; import flash.geom.Matrix; import flash.display.BitmapData; import flash.events.