2006 Dec 12 8:32 AM
REPORT ztest .
include ZOPEN_RTRN_data.
include ZOPEN_RTRN_scr.
SELECT DISTINCT
kdauf
kdpos
kunnr
matnr
prctr
FROM mseg
*UP TO lv_rows ROWS
INTO CORRESPONDING FIELDS OF TABLE imseg
WHERE matnr IN matnr
AND prctr IN prctr
AND kunnr IN kunnr
AND kdauf IN kdauf
AND ( bwart = '651'
OR bwart = '652'
OR bwart = '901'
OR bwart = '902' ).
LOOP AT imseg ASSIGNING <f1>.
CLEAR z651.
CLEAR z652.
CLEAR z901.
CLEAR z902.
SELECT menge bwart
FROM mseg
INTO (mseg-menge , mseg-bwart )
where matnr = <f1>-matnr
and kunnr = <f1>-kunnr.
WHERE kdauf = <f1>-kdauf
AND kdpos = <f1>-kdpos.
IF sy-subrc = '0'.
CASE mseg-bwart.
WHEN '651'.
z651 = mseg-menge.
WHEN '652'.
z652 = mseg-menge.
WHEN '901'.
z901 = mseg-menge.
WHEN '902'.
z902 = mseg-menge.
WHEN OTHERS.
CONTINUE.
ENDCASE.
<f1>-recqty = z651 - z652.
<f1>-retqty = z901 - z902.
<f1>-diff = <f1>-recqty - <f1>-retqty.
ENDIF.
ENDSELECT.
ENDLOOP.
IF p_minus = 'X'.
LOOP AT imseg.
IF imseg-diff >= '0.00'.
DELETE imseg.
ENDIF.
ENDLOOP.
ENDIF.
IF p_plus = 'X'.
LOOP AT imseg.
IF imseg-diff <= '0.00'.
DELETE imseg.
ENDIF.
ENDLOOP.
ENDIF.
PERFORM alv_rep.
&----
*& ALV_REPORT *
*& *
&----
FORM alv_rep.
CLEAR i_fieldcat.
REFRESH i_fieldcat .
PERFORM e04_comment_build USING gt_list_top_of_page[].
PERFORM aufbauen_fieldcat USING 'KUNNR' 'MSEG' ' '
'' '' ''.
PERFORM aufbauen_fieldcat USING 'KDAUF' 'MSEG' '' ''
'' ''.
PERFORM aufbauen_fieldcat USING 'KDPOS' 'MSEG' '' ''
'' ''.
PERFORM aufbauen_fieldcat USING 'MATNR' 'MSEG' ' '
'' '' ''.
PERFORM aufbauen_fieldcat USING 'PRCTR' 'MSEG' ' '
'' '' ''.
PERFORM aufbauen_fieldcat USING 'BWART' 'MSEG' ' '
'' '' ''.
PERFORM aufbauen_fieldcat USING 'MENGE' 'MSEG' ' '
'' '' ''.
PERFORM aufbauen_fieldcat USING 'RECQTY' ' ' 'Recieved Qnt'
'' '' ''.
PERFORM aufbauen_fieldcat USING 'RETQTY' ' ' 'Return Qnt'
'' '' ''.
PERFORM aufbauen_fieldcat USING 'DIFF' ' ' 'Diffrence'
'' '' ''.
PERFORM aufbauen_fieldcat USING 'NAME1' 'LFA1' ' '
'' '' ''.
PERFORM aufbauen_fieldcat USING 'DMBTR' 'EKBE' ' '
*'' '' ''.
PERFORM aufbauen_fieldcat USING 'CALC' 'T_OBJECTS' 'PO Value'
'' '' ''.
PERFORM aufbauen_fieldcat USING 'WAERS' 'EKBE' ' '
'' '' ''.
*
PERFORM aufbauen_fieldcat USING 'WAERS' 'EKBE' ' '
'' '' ''.
**L_LAYOUT-info_fieldname = 'color_line'.
l_layout-colwidth_optimize = 'X'.
l_layout-info_fieldname = 'X'.
l_layout-cell_merge = 'X'.
l_layout-numc_sum = 'X'.
*
l_layout-totals_only = 'X'.
*
l_layout-totals_text = 'X'.
*
l_layout-detail_initial_lines = 'X'.
.
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
EXPORTING
i_callback_program = sy-cprog
i_callback_pf_status_set = 'STANDARD'
i_callback_user_command = 'ALV_USER_COMMAND'
is_layout = l_layout
i_callback_top_of_page = 'TOP-OF-PAGE'
it_fieldcat = i_fieldcat[]
i_save = 'A'
is_variant = is_variant
it_events = gt_events[]
TABLES
t_outtab = imseg "
EXCEPTIONS
program_error = 1
OTHERS = 2.
ENDFORM. "alv_rep
&----
*& Form AUFBAUEN_FIELDCAT
&----
FORM aufbauen_fieldcat USING p_fieldname
p_ref_tabname
p_name
p_sum
p_emp
p_out.
i_fieldcat-fieldname = p_fieldname .
i_fieldcat-ref_tabname = p_ref_tabname .
i_fieldcat-reptext_ddic = p_name .
i_fieldcat-seltext_l = p_name .
i_fieldcat-seltext_m = p_name .
i_fieldcat-seltext_s = p_name .
i_fieldcat-do_sum = p_sum .
i_fieldcat-emphasize = p_emp .
i_fieldcat-no_out = p_out .
APPEND i_fieldcat .
ENDFORM. " AUFBAUEN_FIELDCAT
----
FORM E04_COMMENT_BUILD *
----
FORM e04_comment_build USING e04_lt_top_of_page TYPE
slis_t_listheader.
DATA: ls_line TYPE slis_listheader.
CLEAR e04_lt_top_of_page .
REFRESH e04_lt_top_of_page .
ls_line-typ = 'H'.
ls_line-info = 'XXXXX'.
APPEND ls_line TO e04_lt_top_of_page.
CLEAR ls_line.
ls_line-typ = 'S'.
ls_line-key = text-002 .
ls_line-info = sy-uname .
APPEND ls_line TO e04_lt_top_of_page.
"e04_comment_build
CLEAR e04_lt_top_of_page .
REFRESH e04_lt_top_of_page .
****end
CLEAR ls_line.
ls_line-typ = 'H'.
ls_line-key = ''. "not used for this type
ls_line-info = 'Vendor Report'(001).
APPEND ls_line TO e04_lt_top_of_page.
CLEAR ls_line.
ls_line-typ = 'S'.
ls_line-key = text-011.
WRITE sy-datum TO ls_line-info.
CONCATENATE sy-datum6(2) '/' sy-datum4(2) '/' sy-datum(4)
'&&' sy-uzeit(2) ':' sy-uzeit+2(2)
INTO ls_line-info.
REPLACE '&&' WITH ' ' INTO ls_line-info.
APPEND ls_line TO e04_lt_top_of_page.
ENDFORM.
*****----
FORM alv_user_command USING r_comm TYPE sy-ucomm
rs_selfield TYPE slis_selfield.
****----
IF r_comm = '&IC1' .
IF rs_selfield-fieldname EQ 'KDAUF'.
READ TABLE imseg INDEX rs_selfield-tabindex.
SET PARAMETER ID 'AUN' FIELD imseg-kdauf.
CALL TRANSACTION 'VA03' AND SKIP FIRST SCREEN .
ENDIF.
ENDIF.
ENDFORM.
----
FORM standard USING rt_extab TYPE slis_t_extab .
SET PF-STATUS 'STANDARD' ."excluding rt_extab.
ENDFORM. "STANDARD
&----
FORM top_of_page.
DATA: header TYPE slis_t_listheader.
CALL FUNCTION 'REUSE_ALV_COMMENTARY_WRITE'
EXPORTING
it_list_commentary = header
i_logo = 'ENJOY'.
ENDFORM.
*
2006 Dec 12 8:40 AM
Hi Liat,
1) Check whther you are passing the keyfields in order and also check whether are you picking fields in the same order as in the table
2) Try to avoid Corresponding fields.
3) Dont use select statement in a loop
4) Use loop at itab where instaed of checking with if in the loop
Reward points if it is helpful
reagrds,
kiran i
REPORT ztest .
include ZOPEN_RTRN_data.
include ZOPEN_RTRN_scr.
SELECT DISTINCT
kdauf
kdpos
kunnr
matnr
prctr
FROM mseg
*UP TO lv_rows ROWS
INTO CORRESPONDING FIELDS OF TABLE imseg
WHERE matnr IN matnr
AND prctr IN prctr
AND kunnr IN kunnr
AND kdauf IN kdauf
AND ( bwart = '651'
OR bwart = '652'
OR bwart = '901'
OR bwart = '902' ).
LOOP AT imseg ASSIGNING <f1>.
CLEAR z651.
CLEAR z652.
CLEAR z901.
CLEAR z902.
SELECT menge bwart
FROM mseg
INTO (mseg-menge , mseg-bwart )
where matnr = <f1>-matnr
and kunnr = <f1>-kunnr.
WHERE kdauf = <f1>-kdauf
AND kdpos = <f1>-kdpos.
IF sy-subrc = '0'.
CASE mseg-bwart.
WHEN '651'.
z651 = mseg-menge.
WHEN '652'.
z652 = mseg-menge.
WHEN '901'.
z901 = mseg-menge.
WHEN '902'.
z902 = mseg-menge.
WHEN OTHERS.
CONTINUE.
ENDCASE.
<f1>-recqty = z651 - z652.
<f1>-retqty = z901 - z902.
<f1>-diff = <f1>-recqty - <f1>-retqty.
ENDIF.
ENDSELECT.
ENDLOOP.
IF p_minus = 'X'.
LOOP AT imseg.
IF imseg-diff >= '0.00'.
DELETE imseg.
ENDIF.
ENDLOOP.
ENDIF.
IF p_plus = 'X'.
LOOP AT imseg.
IF imseg-diff <= '0.00'.
DELETE imseg.
ENDIF.
ENDLOOP.
ENDIF.
PERFORM alv_rep.
&----
*& ALV_REPORT *
*& *
&----
FORM alv_rep.
CLEAR i_fieldcat.
REFRESH i_fieldcat .
PERFORM e04_comment_build USING gt_list_top_of_page[].
PERFORM aufbauen_fieldcat USING 'KUNNR' 'MSEG' ' '
'' '' ''.
PERFORM aufbauen_fieldcat USING 'KDAUF' 'MSEG' '' ''
'' ''.
PERFORM aufbauen_fieldcat USING 'KDPOS' 'MSEG' '' ''
'' ''.
PERFORM aufbauen_fieldcat USING 'MATNR' 'MSEG' ' '
'' '' ''.
PERFORM aufbauen_fieldcat USING 'PRCTR' 'MSEG' ' '
'' '' ''.
PERFORM aufbauen_fieldcat USING 'BWART' 'MSEG' ' '
'' '' ''.
PERFORM aufbauen_fieldcat USING 'MENGE' 'MSEG' ' '
'' '' ''.
PERFORM aufbauen_fieldcat USING 'RECQTY' ' ' 'Recieved Qnt'
'' '' ''.
PERFORM aufbauen_fieldcat USING 'RETQTY' ' ' 'Return Qnt'
'' '' ''.
PERFORM aufbauen_fieldcat USING 'DIFF' ' ' 'Diffrence'
'' '' ''.
PERFORM aufbauen_fieldcat USING 'NAME1' 'LFA1' ' '
'' '' ''.
PERFORM aufbauen_fieldcat USING 'DMBTR' 'EKBE' ' '
*'' '' ''.
PERFORM aufbauen_fieldcat USING 'CALC' 'T_OBJECTS' 'PO Value'
'' '' ''.
PERFORM aufbauen_fieldcat USING 'WAERS' 'EKBE' ' '
'' '' ''.
*
PERFORM aufbauen_fieldcat USING 'WAERS' 'EKBE' ' '
'' '' ''.
**L_LAYOUT-info_fieldname = 'color_line'.
l_layout-colwidth_optimize = 'X'.
l_layout-info_fieldname = 'X'.
l_layout-cell_merge = 'X'.
l_layout-numc_sum = 'X'.
*
l_layout-totals_only = 'X'.
*
l_layout-totals_text = 'X'.
*
l_layout-detail_initial_lines = 'X'.
.
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
EXPORTING
i_callback_program = sy-cprog
i_callback_pf_status_set = 'STANDARD'
i_callback_user_command = 'ALV_USER_COMMAND'
is_layout = l_layout
i_callback_top_of_page = 'TOP-OF-PAGE'
it_fieldcat = i_fieldcat[]
i_save = 'A'
is_variant = is_variant
it_events = gt_events[]
TABLES
t_outtab = imseg "
EXCEPTIONS
program_error = 1
OTHERS = 2.
ENDFORM. "alv_rep
&----
*& Form AUFBAUEN_FIELDCAT
&----
FORM aufbauen_fieldcat USING p_fieldname
p_ref_tabname
p_name
p_sum
p_emp
p_out.
i_fieldcat-fieldname = p_fieldname .
i_fieldcat-ref_tabname = p_ref_tabname .
i_fieldcat-reptext_ddic = p_name .
i_fieldcat-seltext_l = p_name .
i_fieldcat-seltext_m = p_name .
i_fieldcat-seltext_s = p_name .
i_fieldcat-do_sum = p_sum .
i_fieldcat-emphasize = p_emp .
i_fieldcat-no_out = p_out .
APPEND i_fieldcat .
ENDFORM. " AUFBAUEN_FIELDCAT
----
FORM E04_COMMENT_BUILD *
----
FORM e04_comment_build USING e04_lt_top_of_page TYPE
slis_t_listheader.
DATA: ls_line TYPE slis_listheader.
CLEAR e04_lt_top_of_page .
REFRESH e04_lt_top_of_page .
ls_line-typ = 'H'.
ls_line-info = 'XXXXX'.
APPEND ls_line TO e04_lt_top_of_page.
CLEAR ls_line.
ls_line-typ = 'S'.
ls_line-key = text-002 .
ls_line-info = sy-uname .
APPEND ls_line TO e04_lt_top_of_page.
"e04_comment_build
CLEAR e04_lt_top_of_page .
REFRESH e04_lt_top_of_page .
****end
CLEAR ls_line.
ls_line-typ = 'H'.
ls_line-key = ''. "not used for this type
ls_line-info = 'Vendor Report'(001).
APPEND ls_line TO e04_lt_top_of_page.
CLEAR ls_line.
ls_line-typ = 'S'.
ls_line-key = text-011.
WRITE sy-datum TO ls_line-info.
CONCATENATE sy-datum6(2) '/' sy-datum4(2) '/' sy-datum(4)
'&&' sy-uzeit(2) ':' sy-uzeit+2(2)
INTO ls_line-info.
REPLACE '&&' WITH ' ' INTO ls_line-info.
APPEND ls_line TO e04_lt_top_of_page.
ENDFORM.
*****----
FORM alv_user_command USING r_comm TYPE sy-ucomm
rs_selfield TYPE slis_selfield.
****----
IF r_comm = '&IC1' .
IF rs_selfield-fieldname EQ 'KDAUF'.
READ TABLE imseg INDEX rs_selfield-tabindex.
SET PARAMETER ID 'AUN' FIELD imseg-kdauf.
CALL TRANSACTION 'VA03' AND SKIP FIRST SCREEN .
ENDIF.
ENDIF.
ENDFORM.
----
FORM standard USING rt_extab TYPE slis_t_extab .
SET PF-STATUS 'STANDARD' ."excluding rt_extab.
ENDFORM. "STANDARD
&----
FORM top_of_page.
DATA: header TYPE slis_t_listheader.
CALL FUNCTION 'REUSE_ALV_COMMENTARY_WRITE'
EXPORTING
it_list_commentary = header
i_logo = 'ENJOY'.
ENDFORM.
*
2006 Dec 12 8:34 AM
hi Liat,
Since MSEG is a cluster table make use of Indexes while selecting the entries ..
Regards,
Santosh
2006 Dec 12 8:34 AM
Hi ,
Remove the select distinct usage in the beginning of the program.
Instead get the data into the internal table, sort it & then use delete adjacent duplicates.
Hope this helps.
Regards,
Chetan.
PS:Reward points if this helps.
2006 Dec 12 8:36 AM
hi
pls take the select statement inside the loop.
use for all entries, select into one internal table and then use the read statement in the loop.
2006 Dec 12 8:40 AM
Hi Liat,
1) Check whther you are passing the keyfields in order and also check whether are you picking fields in the same order as in the table
2) Try to avoid Corresponding fields.
3) Dont use select statement in a loop
4) Use loop at itab where instaed of checking with if in the loop
Reward points if it is helpful
reagrds,
kiran i
2006 Dec 12 8:50 AM
Hi
Dont select the MSEG table twice. Take and store temp in the Internal table and call, This is the only way we can perofrm well, bcoz, it is cluster one and it will take time to give result. Select only once in a report
| User | Count |
|---|---|
| 6 | |
| 1 | |
| 1 | |
| 1 | |
| 1 | |
| 1 | |
| 1 | |
| 1 | |
| 1 | |
| 1 |