2008 Apr 16 6:06 AM
hi,
PO NUMBER PO DOCUMENT POITEM
475 nb 10
475 nb 20
475 nb 30
475 nb 40
this o/p is coming in my ALV report.
but i want o/p below shown. if any one knows pls help me.
PO NUMBER PO DOCUMENT POITEM
475 nb 10
20
30
40
see the below code pls give me suggestion where should i change .
&----
*& Report ZPO_RELEASE
*&
&----
*&
*&
&----
REPORT zpo_release LINE-SIZE 255 MESSAGE-ID zpo NO STANDARD PAGE HEADING.
----
TABLES *
----
TABLES : ekko, "Purchasing Document Header
ekpo, "Purchasing Document Item
cdhdr, "Change document header
cdpos . "Change document items
----
TYPE DEFINATIONS *
----
TYPE-POOLS: slis.
TYPES: BEGIN OF t_ekout,
ebeln LIKE ekko-ebeln ,
bsart LIKE ekko-bsart,
matkl LIKE ekpo-matkl,
bedat LIKE ekko-bedat,
lifnr LIKE ekko-lifnr,
waers LIKE ekko-waers,
wkurs LIKE ekko-wkurs,
ernam LIKE ekko-ernam,
ebelm LIKE ekpo-ebeln,
ebelp LIKE ekpo-ebelp,
netwr LIKE ekpo-netwr,
matnr LIKE ekpo-matnr,
menge LIKE ekpo-menge,
meins LIKE ekpo-meins,
werks LIKE ekpo-werks,
END OF t_ekout.
TYPES : BEGIN OF t_cdhdr,
objectid LIKE cdhdr-objectid, "Object value
changenr LIKE cdhdr-changenr, "Document change number
udate LIKE cdhdr-udate, "Creation date of the change document
username LIKE cdhdr-username, "User name of the person responsible in change document
END OF t_cdhdr.
TYPES: BEGIN OF t_cdpos,
objectid LIKE cdpos-objectid, "Object value
changenr LIKE cdhdr-changenr, "Document change number
value_new LIKE cdpos-value_new, "New contents of changed field
END OF t_cdpos.
TYPES: BEGIN OF t_makt,
matnr LIKE makt-matnr, "Material Number
maktx LIKE makt-maktx, "Material Description
END OF t_makt.
TYPES :BEGIN OF t_lfa1,
lifnr LIKE lfa1-lifnr, "Account Number of Vendor or Creditor
name1 LIKE lfa1-name1, "Name 1
END OF t_lfa1.
TYPES: BEGIN OF t_mara,
matnr LIKE mara-matnr, "Material Number
matkl LIKE mara-matkl, "Material Group
END OF t_mara.
TYPES: BEGIN OF t_output,
ebeln LIKE ekko-ebeln,
bsart LIKE ekko-bsart,
matkl LIKE ekpo-matkl,
bedat LIKE ekko-bedat,
lifnr LIKE ekko-lifnr,
name1 LIKE lfa1-name1,
ebelp LIKE ekpo-ebelp,
matnr LIKE ekpo-matnr,
maktx LIKE makt-maktx,
menge LIKE ekpo-menge,
meins LIKE ekpo-meins,
netwr LIKE ekpo-netwr,
wkurs LIKE ekko-wkurs,
ernam LIKE ekko-ernam,
username LIKE cdhdr-username,
udate LIKE cdhdr-udate,
werks LIKE ekpo-werks,
objectid LIKE cdhdr-objectid,
tcode LIKE cdhdr-tcode,
changenr LIKE cdhdr-changenr,
objctid LIKE cdpos-objectid,
fname LIKE cdpos-fname,
value_new LIKE cdpos-value_new,
net1 TYPE p DECIMALS 2,
net2 TYPE p DECIMALS 2,
waers LIKE ekko-waers,
END OF t_output.
TYPES: tt_ekout TYPE STANDARD TABLE OF t_ekout.
TYPES: tt_ekkout TYPE STANDARD TABLE OF t_ekout.
TYPES: tt_cdhdr TYPE STANDARD TABLE OF t_cdhdr.
TYPES: tt_cdpos TYPE STANDARD TABLE OF t_cdpos.
TYPES: tt_makt TYPE STANDARD TABLE OF t_makt.
TYPES: tt_lfa1 TYPE STANDARD TABLE OF t_lfa1.
TYPES: tt_mara TYPE STANDARD TABLE OF t_mara.
TYPES: tt_output TYPE STANDARD TABLE OF t_output.
TYPES: tt_eknetout TYPE STANDARD TABLE OF t_output.
----
DATA DECLARATION *
----
DATA: i_ekout TYPE tt_ekout,
wa_ekout TYPE t_ekout,
i_ekkout TYPE tt_ekkout,
wa_ekkout TYPE t_ekout,
i_cdhdr TYPE tt_cdhdr,
wa_cdhdr TYPE t_cdhdr,
i_cdpos TYPE tt_cdpos,
wa_cdpos TYPE t_cdpos,
i_makt TYPE tt_makt,
wa_makt TYPE t_makt,
i_lfa1 TYPE tt_lfa1,
wa_lfa1 TYPE t_lfa1,
i_mara TYPE tt_mara,
wa_mara TYPE t_mara,
i_output TYPE tt_output,
wa_output TYPE t_output,
i_eknetout TYPE tt_eknetout,
wa_eknetout TYPE t_output.
DATA: w_var_save TYPE char01,
w_var TYPE disvariant,
w_variant TYPE disvariant,
w_repid TYPE sy-repid,
i_fieldcat TYPE slis_t_fieldcat_alv,
i_commentary TYPE slis_t_listheader,
w_commentary TYPE slis_listheader.
----
SELECTION SCREEN *
----
SELECTION-SCREEN BEGIN OF BLOCK b1 WITH FRAME TITLE text-001.
SELECT-OPTIONS: s_udate FOR cdhdr-udate OBLIGATORY,
s_bsart FOR ekko-bsart ,
s_matkl FOR ekpo-matkl .
PARAMETERS: p_netwr TYPE p DECIMALS 2 OBLIGATORY,
p_layout TYPE disvariant-variant NO-DISPLAY.
SELECTION-SCREEN END OF BLOCK b1.
----
INITIALIZATION *
----
INITIALIZATION.
PERFORM variant_default.
CLEAR w_repid.
w_repid = sy-repid.
----
START-OF-SELECTION *
----
START-OF-SELECTION.
PERFORM get_data.
PERFORM populate_output.
----
END-OF-SELECTION *
----
END-OF-SELECTION.
PERFORM generate_alv.
&----
*& Form variant_default
&----
text
----
--> p1 text
<-- p2 text
----
FORM variant_default.
CLEAR: w_var, w_variant.
w_var_save = 'A'.
w_var-report = sy-repid.
w_variant = w_var.
CALL FUNCTION 'REUSE_ALV_VARIANT_DEFAULT_GET'
EXPORTING
i_save = w_var_save
CHANGING
cs_variant = w_var
EXCEPTIONS
not_found = 1
program_error = 2
OTHERS = 3.
IF sy-subrc = 0.
p_layout = w_var-variant.
ENDIF.
ENDFORM. " variant_default
&----
*& Form get_data
&----
text
----
--> p1 text
<-- p2 text
----
FORM get_data .
SELECT objectid changenr udate username FROM cdhdr
INTO TABLE i_cdhdr
WHERE udate IN s_udate
AND tcode = 'ME28'.
IF sy-subrc = 0.
SORT i_cdhdr BY objectid.
SELECT objectid changenr value_new FROM cdpos
INTO TABLE i_cdpos
FOR ALL ENTRIES IN i_cdhdr
WHERE changenr = i_cdhdr-changenr
AND fname = 'FRGKE'.
SORT i_cdpos BY objectid.
ENDIF.
SELECT eebeln ebsart pmatkl ebedat elifnr ewaers ewkurs eernam p~ebeln
pebelp pnetwr pmatnr pmenge pmeins pwerks FROM ekko
AS e INNER JOIN ekpo AS p ON eebeln = pebeln INTO TABLE i_ekout WHERE bsart IN s_bsart
AND matkl IN s_matkl.
SORT i_ekout BY ebeln bsart matkl bedat lifnr.
SELECT matnr maktx FROM makt
INTO TABLE i_makt
FOR ALL ENTRIES IN i_ekout
WHERE matnr = i_ekout-matnr
AND spras = 'E'.
SORT i_makt BY matnr.
SELECT matnr matkl FROM mara
INTO TABLE i_mara
FOR ALL ENTRIES IN i_ekout
WHERE matnr = i_ekout-matnr.
SORT i_mara BY matnr.
SELECT lifnr name1 FROM lfa1
INTO TABLE i_lfa1
FOR ALL ENTRIES IN i_ekout
WHERE lifnr = i_ekout-lifnr.
SORT i_lfa1 BY lifnr.
ENDFORM. " get_data
&----
*& Form generate_alv
&----
text
----
--> p1 text
<-- p2 text
----
FORM generate_alv .
IF NOT i_output[] IS INITIAL.
w_variant-variant = p_layout.
Create the field catelog
PERFORM field_catalag_merge USING i_fieldcat.
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
EXPORTING
i_callback_program = w_repid
i_callback_user_command = 'USER_COMMAND'
i_callback_top_of_page = 'TOP_OF_PAGE'
is_layout = p_layout
it_fieldcat = i_fieldcat
i_save = 'A'
is_variant = w_variant
TABLES
t_outtab = i_eknetout
EXCEPTIONS
OTHERS = 0.
ELSE.
MESSAGE i208 WITH 'No data found for the Selection Criteria'(049).
ENDIF.
ENDFORM. " generate_alv
&----
*& Form populate_output
&----
text
----
--> p1 text
<-- p2 text
----
FORM populate_output .
REFRESH i_output.
CLEAR wa_cdhdr.
LOOP AT i_cdhdr INTO wa_cdhdr.
CLEAR: wa_cdpos, wa_ekout, wa_output.
MOVE-CORRESPONDING wa_cdhdr TO wa_output.
READ TABLE i_cdhdr INTO wa_cdhdr WITH KEY changenr = wa_cdhdr-changenr
BINARY SEARCH.
IF sy-subrc = 0.
wa_output-objectid = wa_cdhdr-objectid.
wa_output-username = wa_cdhdr-username.
wa_output-udate = wa_cdhdr-udate.
ENDIF.
READ TABLE i_cdpos INTO wa_cdpos WITH KEY changenr = wa_cdhdr-changenr
BINARY SEARCH.
IF sy-subrc = 0.
wa_output-value_new = wa_cdpos-value_new.
IF wa_output-value_new = '2'.
wa_output-objctid = wa_cdpos-objectid.
LOOP AT i_ekout INTO wa_ekout WHERE ebeln EQ wa_output-objctid.
wa_output-ebeln = wa_ekout-ebeln.
wa_output-bsart = wa_ekout-bsart.
wa_output-matkl = wa_ekout-matkl.
wa_output-bedat = wa_ekout-bedat.
wa_output-lifnr = wa_ekout-lifnr.
wa_output-name1 = wa_lfa1-name1.
wa_output-name1 = wa_lfa1-name1.
wa_output-matnr = wa_ekout-matnr.
wa_output-ebelp = wa_ekout-ebelp.
wa_output-menge = wa_ekout-menge.
wa_output-meins = wa_ekout-meins.
wa_output-ernam = wa_ekout-ernam.
wa_output-waers = wa_ekout-waers.
wa_output-netwr = wa_ekout-netwr.
IF wa_ekout-waers = 'EUR'.
wa_output-net1 = wa_ekout-netwr + wa_output-net1.
ELSE.
wa_output-net2 = wa_ekout-netwr * wa_ekout-wkurs.
ENDIF.
READ TABLE i_makt INTO wa_makt WITH KEY matnr = wa_ekout-matnr
BINARY SEARCH.
wa_output-maktx = wa_makt-maktx.
READ TABLE i_lfa1 INTO wa_lfa1 WITH KEY lifnr = wa_ekout-lifnr
BINARY SEARCH.
IF sy-subrc = 0.
wa_output-name1 = wa_lfa1-name1.
ENDIF.
APPEND wa_output TO i_output.
SORT i_output BY ebeln bsart matkl bedat lifnr name1.
ENDLOOP.
ELSE.
CONTINUE.
ENDIF.
ELSE.
SKIP.
ENDIF.
LOOP AT i_output INTO wa_eknetout WHERE ebeln = wa_output-ebeln.
IF wa_output-net1 >= p_netwr.
APPEND wa_eknetout TO i_eknetout.
SORT i_eknetout BY ebeln bsart matkl bedat lifnr name1 ebelp.
ELSEIF wa_output-net2 >= p_netwr.
APPEND wa_eknetout TO i_eknetout.
SORT i_eknetout BY ebelp.
ELSE.
FREE wa_eknetout.
ENDIF.
ENDLOOP.
ENDLOOP.
ENDFORM. " populate_output
&----
*& Form field_catalag_merge
&----
text
----
-->P_I_FIELDCAT text
----
FORM field_catalag_merge USING p_i_fieldcat TYPE slis_t_fieldcat_alv.
DATA: la_fieldcat TYPE slis_fieldcat_alv.
REFRESH i_fieldcat.
CLEAR la_fieldcat.
la_fieldcat-tabname = 'I_EKNETOUT'.
la_fieldcat-fieldname = 'EBELN'.
la_fieldcat-seltext_l = text-003.
la_fieldcat-outputlen = 11.
APPEND la_fieldcat TO p_i_fieldcat.
CLEAR la_fieldcat.
la_fieldcat-tabname = 'I_EKNETOUT'.
la_fieldcat-fieldname = 'BSART'.
la_fieldcat-seltext_l = text-004.
la_fieldcat-outputlen = 11.
APPEND la_fieldcat TO p_i_fieldcat.
CLEAR la_fieldcat.
la_fieldcat-tabname = 'I_EKNETOUT'.
la_fieldcat-fieldname = 'MATKL'.
la_fieldcat-seltext_l = text-005.
la_fieldcat-outputlen = 11.
APPEND la_fieldcat TO p_i_fieldcat.
CLEAR la_fieldcat.
la_fieldcat-tabname = 'I_EKNETOUT'.
la_fieldcat-fieldname = 'BEDAT'.
la_fieldcat-seltext_l = text-006.
la_fieldcat-outputlen = 11.
APPEND la_fieldcat TO p_i_fieldcat.
CLEAR la_fieldcat.
la_fieldcat-tabname = 'I_EKNETOUT'.
la_fieldcat-fieldname = 'LIFNR'.
la_fieldcat-seltext_l = text-007.
la_fieldcat-outputlen = 11.
APPEND la_fieldcat TO p_i_fieldcat.
CLEAR la_fieldcat.
la_fieldcat-tabname = 'I_EKNETOUT'.
la_fieldcat-fieldname = 'NAME1'.
la_fieldcat-seltext_l = text-008.
la_fieldcat-outputlen = 11.
APPEND la_fieldcat TO p_i_fieldcat.
CLEAR la_fieldcat.
la_fieldcat-tabname = 'I_EKNETOUT'.
la_fieldcat-fieldname = 'EBELP'.
la_fieldcat-seltext_l = text-009.
la_fieldcat-outputlen = 7.
APPEND la_fieldcat TO p_i_fieldcat.
CLEAR la_fieldcat.
la_fieldcat-tabname = 'I_EKNETOUT'.
la_fieldcat-fieldname = 'MATNR'.
la_fieldcat-seltext_l = text-010.
la_fieldcat-outputlen = 15.
APPEND la_fieldcat TO p_i_fieldcat.
CLEAR la_fieldcat.
la_fieldcat-tabname = 'I_EKNETOUT'.
la_fieldcat-fieldname = 'MAKTX'.
la_fieldcat-seltext_l = text-011.
la_fieldcat-outputlen = 15.
APPEND la_fieldcat TO p_i_fieldcat.
CLEAR la_fieldcat.
la_fieldcat-tabname = 'I_EKNETOUT'.
la_fieldcat-fieldname = 'MENGE'.
la_fieldcat-seltext_l = text-012.
la_fieldcat-outputlen = 11.
APPEND la_fieldcat TO p_i_fieldcat.
CLEAR la_fieldcat.
la_fieldcat-tabname = 'I_EKNETOUT'.
la_fieldcat-fieldname = 'MEINS'.
la_fieldcat-seltext_l = text-013.
la_fieldcat-outputlen = 11.
APPEND la_fieldcat TO p_i_fieldcat.
CLEAR la_fieldcat.
la_fieldcat-tabname = 'I_EKNETOUT'.
la_fieldcat-fieldname = 'NETWR'.
la_fieldcat-seltext_l = text-015.
la_fieldcat-outputlen = 11.
APPEND la_fieldcat TO p_i_fieldcat.
CLEAR la_fieldcat.
la_fieldcat-tabname = 'I_EKNETOUT'.
la_fieldcat-fieldname = 'WAERS'.
la_fieldcat-seltext_l = text-014.
la_fieldcat-outputlen = 11.
APPEND la_fieldcat TO p_i_fieldcat.
CLEAR la_fieldcat.
la_fieldcat-tabname = 'I_EKNETOUT'.
la_fieldcat-fieldname = 'ERNAM'.
la_fieldcat-seltext_l = text-016.
la_fieldcat-outputlen = 11.
APPEND la_fieldcat TO p_i_fieldcat.
CLEAR la_fieldcat.
la_fieldcat-tabname = 'I_EKNETOUT'.
la_fieldcat-fieldname = 'UDATE'.
la_fieldcat-seltext_l = text-017.
la_fieldcat-outputlen = 11.
APPEND la_fieldcat TO p_i_fieldcat.
CLEAR la_fieldcat.
la_fieldcat-tabname = 'I_EKNETOUT'.
la_fieldcat-fieldname = 'USERNAME'.
la_fieldcat-seltext_l = text-018.
la_fieldcat-outputlen = 11.
APPEND la_fieldcat TO p_i_fieldcat.
ENDFORM. " field_catalag_merge
----
FORM top_of_page *
----
For Heading *
----
FORM top_of_page.
REFRESH i_commentary.
w_commentary-typ = 'H'.
w_commentary-info = 'Report for PO Order Released'(030).
APPEND w_commentary TO i_commentary.
CLEAR w_commentary.
CALL FUNCTION 'REUSE_ALV_COMMENTARY_WRITE'
EXPORTING
it_list_commentary = i_commentary.
ENDFORM. "top_of_page
hi,
PO NUMBER PO DOCUMENT POITEM
475 nb 10
475 nb 20
475 nb 30
475 nb 40
this o/p is coming in my ALV report.
but i want o/p below shown. if any one knows pls help me.
PO NUMBER PO DOCUMENT POITEM
475 nb 10
20
30
40
see the below code pls give me suggestion where should i change .
&----
*& Report ZPO_RELEASE
*&
&----
*&
*&
&----
REPORT zpo_release LINE-SIZE 255 MESSAGE-ID zpo NO STANDARD PAGE HEADING.
----
TABLES *
----
TABLES : ekko, "Purchasing Document Header
ekpo, "Purchasing Document Item
cdhdr, "Change document header
cdpos . "Change document items
----
TYPE DEFINATIONS *
----
TYPE-POOLS: slis.
TYPES: BEGIN OF t_ekout,
ebeln LIKE ekko-ebeln ,
bsart LIKE ekko-bsart,
matkl LIKE ekpo-matkl,
bedat LIKE ekko-bedat,
lifnr LIKE ekko-lifnr,
waers LIKE ekko-waers,
wkurs LIKE ekko-wkurs,
ernam LIKE ekko-ernam,
ebelm LIKE ekpo-ebeln,
ebelp LIKE ekpo-ebelp,
netwr LIKE ekpo-netwr,
matnr LIKE ekpo-matnr,
menge LIKE ekpo-menge,
meins LIKE ekpo-meins,
werks LIKE ekpo-werks,
END OF t_ekout.
TYPES : BEGIN OF t_cdhdr,
objectid LIKE cdhdr-objectid, "Object value
changenr LIKE cdhdr-changenr, "Document change number
udate LIKE cdhdr-udate, "Creation date of the change document
username LIKE cdhdr-username, "User name of the person responsible in change document
END OF t_cdhdr.
TYPES: BEGIN OF t_cdpos,
objectid LIKE cdpos-objectid, "Object value
changenr LIKE cdhdr-changenr, "Document change number
value_new LIKE cdpos-value_new, "New contents of changed field
END OF t_cdpos.
TYPES: BEGIN OF t_makt,
matnr LIKE makt-matnr, "Material Number
maktx LIKE makt-maktx, "Material Description
END OF t_makt.
TYPES :BEGIN OF t_lfa1,
lifnr LIKE lfa1-lifnr, "Account Number of Vendor or Creditor
name1 LIKE lfa1-name1, "Name 1
END OF t_lfa1.
TYPES: BEGIN OF t_mara,
matnr LIKE mara-matnr, "Material Number
matkl LIKE mara-matkl, "Material Group
END OF t_mara.
TYPES: BEGIN OF t_output,
ebeln LIKE ekko-ebeln,
bsart LIKE ekko-bsart,
matkl LIKE ekpo-matkl,
bedat LIKE ekko-bedat,
lifnr LIKE ekko-lifnr,
name1 LIKE lfa1-name1,
ebelp LIKE ekpo-ebelp,
matnr LIKE ekpo-matnr,
maktx LIKE makt-maktx,
menge LIKE ekpo-menge,
meins LIKE ekpo-meins,
netwr LIKE ekpo-netwr,
wkurs LIKE ekko-wkurs,
ernam LIKE ekko-ernam,
username LIKE cdhdr-username,
udate LIKE cdhdr-udate,
werks LIKE ekpo-werks,
objectid LIKE cdhdr-objectid,
tcode LIKE cdhdr-tcode,
changenr LIKE cdhdr-changenr,
objctid LIKE cdpos-objectid,
fname LIKE cdpos-fname,
value_new LIKE cdpos-value_new,
net1 TYPE p DECIMALS 2,
net2 TYPE p DECIMALS 2,
waers LIKE ekko-waers,
END OF t_output.
TYPES: tt_ekout TYPE STANDARD TABLE OF t_ekout.
TYPES: tt_ekkout TYPE STANDARD TABLE OF t_ekout.
TYPES: tt_cdhdr TYPE STANDARD TABLE OF t_cdhdr.
TYPES: tt_cdpos TYPE STANDARD TABLE OF t_cdpos.
TYPES: tt_makt TYPE STANDARD TABLE OF t_makt.
TYPES: tt_lfa1 TYPE STANDARD TABLE OF t_lfa1.
TYPES: tt_mara TYPE STANDARD TABLE OF t_mara.
TYPES: tt_output TYPE STANDARD TABLE OF t_output.
TYPES: tt_eknetout TYPE STANDARD TABLE OF t_output.
----
DATA DECLARATION *
----
DATA: i_ekout TYPE tt_ekout,
wa_ekout TYPE t_ekout,
i_ekkout TYPE tt_ekkout,
wa_ekkout TYPE t_ekout,
i_cdhdr TYPE tt_cdhdr,
wa_cdhdr TYPE t_cdhdr,
i_cdpos TYPE tt_cdpos,
wa_cdpos TYPE t_cdpos,
i_makt TYPE tt_makt,
wa_makt TYPE t_makt,
i_lfa1 TYPE tt_lfa1,
wa_lfa1 TYPE t_lfa1,
i_mara TYPE tt_mara,
wa_mara TYPE t_mara,
i_output TYPE tt_output,
wa_output TYPE t_output,
i_eknetout TYPE tt_eknetout,
wa_eknetout TYPE t_output.
DATA: w_var_save TYPE char01,
w_var TYPE disvariant,
w_variant TYPE disvariant,
w_repid TYPE sy-repid,
i_fieldcat TYPE slis_t_fieldcat_alv,
i_commentary TYPE slis_t_listheader,
w_commentary TYPE slis_listheader.
----
SELECTION SCREEN *
----
SELECTION-SCREEN BEGIN OF BLOCK b1 WITH FRAME TITLE text-001.
SELECT-OPTIONS: s_udate FOR cdhdr-udate OBLIGATORY,
s_bsart FOR ekko-bsart ,
s_matkl FOR ekpo-matkl .
PARAMETERS: p_netwr TYPE p DECIMALS 2 OBLIGATORY,
p_layout TYPE disvariant-variant NO-DISPLAY.
SELECTION-SCREEN END OF BLOCK b1.
----
INITIALIZATION *
----
INITIALIZATION.
PERFORM variant_default.
CLEAR w_repid.
w_repid = sy-repid.
----
START-OF-SELECTION *
----
START-OF-SELECTION.
PERFORM get_data.
PERFORM populate_output.
----
END-OF-SELECTION *
----
END-OF-SELECTION.
PERFORM generate_alv.
&----
*& Form variant_default
&----
text
----
--> p1 text
<-- p2 text
----
FORM variant_default.
CLEAR: w_var, w_variant.
w_var_save = 'A'.
w_var-report = sy-repid.
w_variant = w_var.
CALL FUNCTION 'REUSE_ALV_VARIANT_DEFAULT_GET'
EXPORTING
i_save = w_var_save
CHANGING
cs_variant = w_var
EXCEPTIONS
not_found = 1
program_error = 2
OTHERS = 3.
IF sy-subrc = 0.
p_layout = w_var-variant.
ENDIF.
ENDFORM. " variant_default
&----
*& Form get_data
&----
text
----
--> p1 text
<-- p2 text
----
FORM get_data .
SELECT objectid changenr udate username FROM cdhdr
INTO TABLE i_cdhdr
WHERE udate IN s_udate
AND tcode = 'ME28'.
IF sy-subrc = 0.
SORT i_cdhdr BY objectid.
SELECT objectid changenr value_new FROM cdpos
INTO TABLE i_cdpos
FOR ALL ENTRIES IN i_cdhdr
WHERE changenr = i_cdhdr-changenr
AND fname = 'FRGKE'.
SORT i_cdpos BY objectid.
ENDIF.
SELECT eebeln ebsart pmatkl ebedat elifnr ewaers ewkurs eernam p~ebeln
pebelp pnetwr pmatnr pmenge pmeins pwerks FROM ekko
AS e INNER JOIN ekpo AS p ON eebeln = pebeln INTO TABLE i_ekout WHERE bsart IN s_bsart
AND matkl IN s_matkl.
SORT i_ekout BY ebeln bsart matkl bedat lifnr.
SELECT matnr maktx FROM makt
INTO TABLE i_makt
FOR ALL ENTRIES IN i_ekout
WHERE matnr = i_ekout-matnr
AND spras = 'E'.
SORT i_makt BY matnr.
SELECT matnr matkl FROM mara
INTO TABLE i_mara
FOR ALL ENTRIES IN i_ekout
WHERE matnr = i_ekout-matnr.
SORT i_mara BY matnr.
SELECT lifnr name1 FROM lfa1
INTO TABLE i_lfa1
FOR ALL ENTRIES IN i_ekout
WHERE lifnr = i_ekout-lifnr.
SORT i_lfa1 BY lifnr.
ENDFORM. " get_data
&----
*& Form generate_alv
&----
text
----
--> p1 text
<-- p2 text
----
FORM generate_alv .
IF NOT i_output[] IS INITIAL.
w_variant-variant = p_layout.
Create the field catelog
PERFORM field_catalag_merge USING i_fieldcat.
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
EXPORTING
i_callback_program = w_repid
i_callback_user_command = 'USER_COMMAND'
i_callback_top_of_page = 'TOP_OF_PAGE'
is_layout = p_layout
it_fieldcat = i_fieldcat
i_save = 'A'
is_variant = w_variant
TABLES
t_outtab = i_eknetout
EXCEPTIONS
OTHERS = 0.
ELSE.
MESSAGE i208 WITH 'No data found for the Selection Criteria'(049).
ENDIF.
ENDFORM. " generate_alv
&----
*& Form populate_output
&----
text
----
--> p1 text
<-- p2 text
----
FORM populate_output .
REFRESH i_output.
CLEAR wa_cdhdr.
LOOP AT i_cdhdr INTO wa_cdhdr.
CLEAR: wa_cdpos, wa_ekout, wa_output.
MOVE-CORRESPONDING wa_cdhdr TO wa_output.
READ TABLE i_cdhdr INTO wa_cdhdr WITH KEY changenr = wa_cdhdr-changenr
BINARY SEARCH.
IF sy-subrc = 0.
wa_output-objectid = wa_cdhdr-objectid.
wa_output-username = wa_cdhdr-username.
wa_output-udate = wa_cdhdr-udate.
ENDIF.
READ TABLE i_cdpos INTO wa_cdpos WITH KEY changenr = wa_cdhdr-changenr
BINARY SEARCH.
IF sy-subrc = 0.
wa_output-value_new = wa_cdpos-value_new.
IF wa_output-value_new = '2'.
wa_output-objctid = wa_cdpos-objectid.
LOOP AT i_ekout INTO wa_ekout WHERE ebeln EQ wa_output-objctid.
wa_output-ebeln = wa_ekout-ebeln.
wa_output-bsart = wa_ekout-bsart.
wa_output-matkl = wa_ekout-matkl.
wa_output-bedat = wa_ekout-bedat.
wa_output-lifnr = wa_ekout-lifnr.
wa_output-name1 = wa_lfa1-name1.
wa_output-name1 = wa_lfa1-name1.
wa_output-matnr = wa_ekout-matnr.
wa_output-ebelp = wa_ekout-ebelp.
wa_output-menge = wa_ekout-menge.
wa_output-meins = wa_ekout-meins.
wa_output-ernam = wa_ekout-ernam.
wa_output-waers = wa_ekout-waers.
wa_output-netwr = wa_ekout-netwr.
IF wa_ekout-waers = 'EUR'.
wa_output-net1 = wa_ekout-netwr + wa_output-net1.
ELSE.
wa_output-net2 = wa_ekout-netwr * wa_ekout-wkurs.
ENDIF.
READ TABLE i_makt INTO wa_makt WITH KEY matnr = wa_ekout-matnr
BINARY SEARCH.
wa_output-maktx = wa_makt-maktx.
READ TABLE i_lfa1 INTO wa_lfa1 WITH KEY lifnr = wa_ekout-lifnr
BINARY SEARCH.
IF sy-subrc = 0.
wa_output-name1 = wa_lfa1-name1.
ENDIF.
APPEND wa_output TO i_output.
SORT i_output BY ebeln bsart matkl bedat lifnr name1.
ENDLOOP.
ELSE.
CONTINUE.
ENDIF.
ELSE.
SKIP.
ENDIF.
LOOP AT i_output INTO wa_eknetout WHERE ebeln = wa_output-ebeln.
IF wa_output-net1 >= p_netwr.
APPEND wa_eknetout TO i_eknetout.
SORT i_eknetout BY ebeln bsart matkl bedat lifnr name1 ebelp.
ELSEIF wa_output-net2 >= p_netwr.
APPEND wa_eknetout TO i_eknetout.
SORT i_eknetout BY ebelp.
ELSE.
FREE wa_eknetout.
ENDIF.
ENDLOOP.
ENDLOOP.
ENDFORM. " populate_output
&----
*& Form field_catalag_merge
&----
text
----
-->P_I_FIELDCAT text
----
FORM field_catalag_merge USING p_i_fieldcat TYPE slis_t_fieldcat_alv.
DATA: la_fieldcat TYPE slis_fieldcat_alv.
REFRESH i_fieldcat.
CLEAR la_fieldcat.
la_fieldcat-tabname = 'I_EKNETOUT'.
la_fieldcat-fieldname = 'EBELN'.
la_fieldcat-seltext_l = text-003.
la_fieldcat-outputlen = 11.
APPEND la_fieldcat TO p_i_fieldcat.
CLEAR la_fieldcat.
la_fieldcat-tabname = 'I_EKNETOUT'.
la_fieldcat-fieldname = 'BSART'.
la_fieldcat-seltext_l = text-004.
la_fieldcat-outputlen = 11.
APPEND la_fieldcat TO p_i_fieldcat.
CLEAR la_fieldcat.
la_fieldcat-tabname = 'I_EKNETOUT'.
la_fieldcat-fieldname = 'MATKL'.
la_fieldcat-seltext_l = text-005.
la_fieldcat-outputlen = 11.
APPEND la_fieldcat TO p_i_fieldcat.
CLEAR la_fieldcat.
la_fieldcat-tabname = 'I_EKNETOUT'.
la_fieldcat-fieldname = 'BEDAT'.
la_fieldcat-seltext_l = text-006.
la_fieldcat-outputlen = 11.
APPEND la_fieldcat TO p_i_fieldcat.
CLEAR la_fieldcat.
la_fieldcat-tabname = 'I_EKNETOUT'.
la_fieldcat-fieldname = 'LIFNR'.
la_fieldcat-seltext_l = text-007.
la_fieldcat-outputlen = 11.
APPEND la_fieldcat TO p_i_fieldcat.
CLEAR la_fieldcat.
la_fieldcat-tabname = 'I_EKNETOUT'.
la_fieldcat-fieldname = 'NAME1'.
la_fieldcat-seltext_l = text-008.
la_fieldcat-outputlen = 11.
APPEND la_fieldcat TO p_i_fieldcat.
CLEAR la_fieldcat.
la_fieldcat-tabname = 'I_EKNETOUT'.
la_fieldcat-fieldname = 'EBELP'.
la_fieldcat-seltext_l = text-009.
la_fieldcat-outputlen = 7.
APPEND la_fieldcat TO p_i_fieldcat.
CLEAR la_fieldcat.
la_fieldcat-tabname = 'I_EKNETOUT'.
la_fieldcat-fieldname = 'MATNR'.
la_fieldcat-seltext_l = text-010.
la_fieldcat-outputlen = 15.
APPEND la_fieldcat TO p_i_fieldcat.
CLEAR la_fieldcat.
la_fieldcat-tabname = 'I_EKNETOUT'.
la_fieldcat-fieldname = 'MAKTX'.
la_fieldcat-seltext_l = text-011.
la_fieldcat-outputlen = 15.
APPEND la_fieldcat TO p_i_fieldcat.
CLEAR la_fieldcat.
la_fieldcat-tabname = 'I_EKNETOUT'.
la_fieldcat-fieldname = 'MENGE'.
la_fieldcat-seltext_l = text-012.
la_fieldcat-outputlen = 11.
APPEND la_fieldcat TO p_i_fieldcat.
CLEAR la_fieldcat.
la_fieldcat-tabname = 'I_EKNETOUT'.
la_fieldcat-fieldname = 'MEINS'.
la_fieldcat-seltext_l = text-013.
la_fieldcat-outputlen = 11.
APPEND la_fieldcat TO p_i_fieldcat.
CLEAR la_fieldcat.
la_fieldcat-tabname = 'I_EKNETOUT'.
la_fieldcat-fieldname = 'NETWR'.
la_fieldcat-seltext_l = text-015.
la_fieldcat-outputlen = 11.
APPEND la_fieldcat TO p_i_fieldcat.
CLEAR la_fieldcat.
la_fieldcat-tabname = 'I_EKNETOUT'.
la_fieldcat-fieldname = 'WAERS'.
la_fieldcat-seltext_l = text-014.
la_fieldcat-outputlen = 11.
APPEND la_fieldcat TO p_i_fieldcat.
CLEAR la_fieldcat.
la_fieldcat-tabname = 'I_EKNETOUT'.
la_fieldcat-fieldname = 'ERNAM'.
la_fieldcat-seltext_l = text-016.
la_fieldcat-outputlen = 11.
APPEND la_fieldcat TO p_i_fieldcat.
CLEAR la_fieldcat.
la_fieldcat-tabname = 'I_EKNETOUT'.
la_fieldcat-fieldname = 'UDATE'.
la_fieldcat-seltext_l = text-017.
la_fieldcat-outputlen = 11.
APPEND la_fieldcat TO p_i_fieldcat.
CLEAR la_fieldcat.
la_fieldcat-tabname = 'I_EKNETOUT'.
la_fieldcat-fieldname = 'USERNAME'.
la_fieldcat-seltext_l = text-018.
la_fieldcat-outputlen = 11.
APPEND la_fieldcat TO p_i_fieldcat.
ENDFORM. " field_catalag_merge
----
FORM top_of_page *
----
For Heading *
----
FORM top_of_page.
REFRESH i_commentary.
w_commentary-typ = 'H'.
w_commentary-info = 'Report for PO Order Released'(030).
APPEND w_commentary TO i_commentary.
CLEAR w_commentary.
CALL FUNCTION 'REUSE_ALV_COMMENTARY_WRITE'
EXPORTING
it_list_commentary = i_commentary.
ENDFORM. "top_of_page
2008 Apr 16 6:15 AM
Hi,
Use the sort field catalog:
look at the followin modifield code
&----
*& Report ZPO_RELEASE
*&
&----
*&
*&
&----
REPORT zpo_release LINE-SIZE 255 MESSAGE-ID zpo NO STANDARD PAGE HEADING.
-
TABLES *
-
TABLES : ekko, "Purchasing Document Header
ekpo, "Purchasing Document Item
cdhdr, "Change document header
cdpos . "Change document items
-
TYPE DEFINATIONS *
-
TYPE-POOLS: slis.
TYPES: BEGIN OF t_ekout,
ebeln LIKE ekko-ebeln ,
bsart LIKE ekko-bsart,
matkl LIKE ekpo-matkl,
bedat LIKE ekko-bedat,
lifnr LIKE ekko-lifnr,
waers LIKE ekko-waers,
wkurs LIKE ekko-wkurs,
ernam LIKE ekko-ernam,
ebelm LIKE ekpo-ebeln,
ebelp LIKE ekpo-ebelp,
netwr LIKE ekpo-netwr,
matnr LIKE ekpo-matnr,
menge LIKE ekpo-menge,
meins LIKE ekpo-meins,
werks LIKE ekpo-werks,
END OF t_ekout.
TYPES : BEGIN OF t_cdhdr,
objectid LIKE cdhdr-objectid, "Object value
changenr LIKE cdhdr-changenr, "Document change number
udate LIKE cdhdr-udate, "Creation date of the change document
username LIKE cdhdr-username, "User name of the person responsible in change document
END OF t_cdhdr.
TYPES: BEGIN OF t_cdpos,
objectid LIKE cdpos-objectid, "Object value
changenr LIKE cdhdr-changenr, "Document change number
value_new LIKE cdpos-value_new, "New contents of changed field
END OF t_cdpos.
TYPES: BEGIN OF t_makt,
matnr LIKE makt-matnr, "Material Number
maktx LIKE makt-maktx, "Material Description
END OF t_makt.
TYPES :BEGIN OF t_lfa1,
lifnr LIKE lfa1-lifnr, "Account Number of Vendor or Creditor
name1 LIKE lfa1-name1, "Name 1
END OF t_lfa1.
TYPES: BEGIN OF t_mara,
matnr LIKE mara-matnr, "Material Number
matkl LIKE mara-matkl, "Material Group
END OF t_mara.
TYPES: BEGIN OF t_output,
ebeln LIKE ekko-ebeln,
bsart LIKE ekko-bsart,
matkl LIKE ekpo-matkl,
bedat LIKE ekko-bedat,
lifnr LIKE ekko-lifnr,
name1 LIKE lfa1-name1,
ebelp LIKE ekpo-ebelp,
matnr LIKE ekpo-matnr,
maktx LIKE makt-maktx,
menge LIKE ekpo-menge,
meins LIKE ekpo-meins,
netwr LIKE ekpo-netwr,
wkurs LIKE ekko-wkurs,
ernam LIKE ekko-ernam,
username LIKE cdhdr-username,
udate LIKE cdhdr-udate,
werks LIKE ekpo-werks,
objectid LIKE cdhdr-objectid,
tcode LIKE cdhdr-tcode,
changenr LIKE cdhdr-changenr,
objctid LIKE cdpos-objectid,
fname LIKE cdpos-fname,
value_new LIKE cdpos-value_new,
net1 TYPE p DECIMALS 2,
net2 TYPE p DECIMALS 2,
waers LIKE ekko-waers,
END OF t_output.
TYPES: tt_ekout TYPE STANDARD TABLE OF t_ekout.
TYPES: tt_ekkout TYPE STANDARD TABLE OF t_ekout.
TYPES: tt_cdhdr TYPE STANDARD TABLE OF t_cdhdr.
TYPES: tt_cdpos TYPE STANDARD TABLE OF t_cdpos.
TYPES: tt_makt TYPE STANDARD TABLE OF t_makt.
TYPES: tt_lfa1 TYPE STANDARD TABLE OF t_lfa1.
TYPES: tt_mara TYPE STANDARD TABLE OF t_mara.
TYPES: tt_output TYPE STANDARD TABLE OF t_output.
TYPES: tt_eknetout TYPE STANDARD TABLE OF t_output.
-
DATA DECLARATION *
-
DATA: i_ekout TYPE tt_ekout,
wa_ekout TYPE t_ekout,
i_ekkout TYPE tt_ekkout,
wa_ekkout TYPE t_ekout,
i_cdhdr TYPE tt_cdhdr,
wa_cdhdr TYPE t_cdhdr,
i_cdpos TYPE tt_cdpos,
wa_cdpos TYPE t_cdpos,
i_makt TYPE tt_makt,
wa_makt TYPE t_makt,
i_lfa1 TYPE tt_lfa1,
wa_lfa1 TYPE t_lfa1,
i_mara TYPE tt_mara,
wa_mara TYPE t_mara,
i_output TYPE tt_output,
wa_output TYPE t_output,
i_eknetout TYPE tt_eknetout,
wa_eknetout TYPE t_output.
DATA: w_var_save TYPE char01,
w_var TYPE disvariant,
w_variant TYPE disvariant,
w_repid TYPE sy-repid,
i_fieldcat TYPE slis_t_fieldcat_alv,
i_commentary TYPE slis_t_listheader,
w_commentary TYPE slis_listheader.
*Data: int_sort TYPE slis_t_sortinfo_alv, "SORT field
wa_sort LIKE LINE OF int_sort. *
-
SELECTION SCREEN *
-
SELECTION-SCREEN BEGIN OF BLOCK b1 WITH FRAME TITLE text-001.
SELECT-OPTIONS: s_udate FOR cdhdr-udate OBLIGATORY,
s_bsart FOR ekko-bsart ,
s_matkl FOR ekpo-matkl .
PARAMETERS: p_netwr TYPE p DECIMALS 2 OBLIGATORY,
p_layout TYPE disvariant-variant NO-DISPLAY.
SELECTION-SCREEN END OF BLOCK b1.
-
INITIALIZATION *
-
INITIALIZATION.
PERFORM variant_default.
CLEAR w_repid.
w_repid = sy-repid.
-
START-OF-SELECTION *
-
START-OF-SELECTION.
PERFORM get_data.
PERFORM populate_output.
-
END-OF-SELECTION *
-
END-OF-SELECTION.
PERFORM generate_alv.
&----
*& Form variant_default
&----
text
-
--> p1 text
<-- p2 text
-
FORM variant_default.
CLEAR: w_var, w_variant.
w_var_save = 'A'.
w_var-report = sy-repid.
w_variant = w_var.
CALL FUNCTION 'REUSE_ALV_VARIANT_DEFAULT_GET'
EXPORTING
i_save = w_var_save
CHANGING
cs_variant = w_var
EXCEPTIONS
not_found = 1
program_error = 2
OTHERS = 3.
IF sy-subrc = 0.
p_layout = w_var-variant.
ENDIF.
ENDFORM. " variant_default
&----
*& Form get_data
&----
text
-
--> p1 text
<-- p2 text
-
FORM get_data .
SELECT objectid changenr udate username FROM cdhdr
INTO TABLE i_cdhdr
WHERE udate IN s_udate
AND tcode = 'ME28'.
IF sy-subrc = 0.
SORT i_cdhdr BY objectid.
SELECT objectid changenr value_new FROM cdpos
INTO TABLE i_cdpos
FOR ALL ENTRIES IN i_cdhdr
WHERE changenr = i_cdhdr-changenr
AND fname = 'FRGKE'.
SORT i_cdpos BY objectid.
ENDIF.
SELECT eebeln ebsart pmatkl ebedat elifnr ewaers ewkurs eernam p~ebeln
pebelp pnetwr pmatnr pmenge pmeins pwerks FROM ekko
AS e INNER JOIN ekpo AS p ON eebeln = pebeln INTO TABLE i_ekout WHERE bsart IN s_bsart
AND matkl IN s_matkl.
SORT i_ekout BY ebeln bsart matkl bedat lifnr.
SELECT matnr maktx FROM makt
INTO TABLE i_makt
FOR ALL ENTRIES IN i_ekout
WHERE matnr = i_ekout-matnr
AND spras = 'E'.
SORT i_makt BY matnr.
SELECT matnr matkl FROM mara
INTO TABLE i_mara
FOR ALL ENTRIES IN i_ekout
WHERE matnr = i_ekout-matnr.
SORT i_mara BY matnr.
SELECT lifnr name1 FROM lfa1
INTO TABLE i_lfa1
FOR ALL ENTRIES IN i_ekout
WHERE lifnr = i_ekout-lifnr.
SORT i_lfa1 BY lifnr.
ENDFORM. " get_data
&----
*& Form generate_alv
&----
text
-
--> p1 text
<-- p2 text
-
FORM generate_alv .
IF NOT i_output[] IS INITIAL.
w_variant-variant = p_layout.
Create the field catelog
PERFORM field_catalag_merge USING i_fieldcat.
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
EXPORTING
i_callback_program = w_repid
i_callback_user_command = 'USER_COMMAND'
i_callback_top_of_page = 'TOP_OF_PAGE'
is_layout = p_layout
it_fieldcat = i_fieldcat
i_save = 'A'
is_variant = w_variant
TABLES
t_outtab = i_eknetout
EXCEPTIONS
OTHERS = 0.
ELSE.
MESSAGE i208 WITH 'No data found for the Selection Criteria'(049).
ENDIF.
ENDFORM. " generate_alv
&----
*& Form populate_output
&----
text
-
--> p1 text
<-- p2 text
-
FORM populate_output .
REFRESH i_output.
CLEAR wa_cdhdr.
LOOP AT i_cdhdr INTO wa_cdhdr.
CLEAR: wa_cdpos, wa_ekout, wa_output.
MOVE-CORRESPONDING wa_cdhdr TO wa_output.
READ TABLE i_cdhdr INTO wa_cdhdr WITH KEY changenr = wa_cdhdr-changenr
BINARY SEARCH.
IF sy-subrc = 0.
wa_output-objectid = wa_cdhdr-objectid.
wa_output-username = wa_cdhdr-username.
wa_output-udate = wa_cdhdr-udate.
ENDIF.
READ TABLE i_cdpos INTO wa_cdpos WITH KEY changenr = wa_cdhdr-changenr
BINARY SEARCH.
IF sy-subrc = 0.
wa_output-value_new = wa_cdpos-value_new.
IF wa_output-value_new = '2'.
wa_output-objctid = wa_cdpos-objectid.
LOOP AT i_ekout INTO wa_ekout WHERE ebeln EQ wa_output-objctid.
wa_output-ebeln = wa_ekout-ebeln.
wa_output-bsart = wa_ekout-bsart.
wa_output-matkl = wa_ekout-matkl.
wa_output-bedat = wa_ekout-bedat.
wa_output-lifnr = wa_ekout-lifnr.
wa_output-name1 = wa_lfa1-name1.
wa_output-name1 = wa_lfa1-name1.
wa_output-matnr = wa_ekout-matnr.
wa_output-ebelp = wa_ekout-ebelp.
wa_output-menge = wa_ekout-menge.
wa_output-meins = wa_ekout-meins.
wa_output-ernam = wa_ekout-ernam.
wa_output-waers = wa_ekout-waers.
wa_output-netwr = wa_ekout-netwr.
IF wa_ekout-waers = 'EUR'.
wa_output-net1 = wa_ekout-netwr + wa_output-net1.
ELSE.
wa_output-net2 = wa_ekout-netwr * wa_ekout-wkurs.
ENDIF.
READ TABLE i_makt INTO wa_makt WITH KEY matnr = wa_ekout-matnr
BINARY SEARCH.
wa_output-maktx = wa_makt-maktx.
READ TABLE i_lfa1 INTO wa_lfa1 WITH KEY lifnr = wa_ekout-lifnr
BINARY SEARCH.
IF sy-subrc = 0.
wa_output-name1 = wa_lfa1-name1.
ENDIF.
APPEND wa_output TO i_output.
SORT i_output BY ebeln bsart matkl bedat lifnr name1.
ENDLOOP.
ELSE.
CONTINUE.
ENDIF.
ELSE.
SKIP.
ENDIF.
LOOP AT i_output INTO wa_eknetout WHERE ebeln = wa_output-ebeln.
IF wa_output-net1 >= p_netwr.
APPEND wa_eknetout TO i_eknetout.
SORT i_eknetout BY ebeln bsart matkl bedat lifnr name1 ebelp.
ELSEIF wa_output-net2 >= p_netwr.
APPEND wa_eknetout TO i_eknetout.
SORT i_eknetout BY ebelp.
ELSE.
FREE wa_eknetout.
ENDIF.
ENDLOOP.
ENDLOOP.
ENDFORM. " populate_output
&----
*& Form field_catalag_merge
&----
text
-
-->P_I_FIELDCAT text
-
FORM field_catalag_merge USING p_i_fieldcat TYPE slis_t_fieldcat_alv.
DATA: la_fieldcat TYPE slis_fieldcat_alv.
REFRESH i_fieldcat.
CLEAR la_fieldcat.
la_fieldcat-tabname = 'I_EKNETOUT'.
la_fieldcat-fieldname = 'EBELN'.
la_fieldcat-seltext_l = text-003.
la_fieldcat-outputlen = 11.
APPEND la_fieldcat TO p_i_fieldcat.
CLEAR la_fieldcat.
la_fieldcat-tabname = 'I_EKNETOUT'.
la_fieldcat-fieldname = 'BSART'.
la_fieldcat-seltext_l = text-004.
la_fieldcat-outputlen = 11.
APPEND la_fieldcat TO p_i_fieldcat.
CLEAR la_fieldcat.
la_fieldcat-tabname = 'I_EKNETOUT'.
la_fieldcat-fieldname = 'MATKL'.
la_fieldcat-seltext_l = text-005.
la_fieldcat-outputlen = 11.
APPEND la_fieldcat TO p_i_fieldcat.
CLEAR la_fieldcat.
la_fieldcat-tabname = 'I_EKNETOUT'.
la_fieldcat-fieldname = 'BEDAT'.
la_fieldcat-seltext_l = text-006.
la_fieldcat-outputlen = 11.
APPEND la_fieldcat TO p_i_fieldcat.
CLEAR la_fieldcat.
la_fieldcat-tabname = 'I_EKNETOUT'.
la_fieldcat-fieldname = 'LIFNR'.
la_fieldcat-seltext_l = text-007.
la_fieldcat-outputlen = 11.
APPEND la_fieldcat TO p_i_fieldcat.
CLEAR la_fieldcat.
la_fieldcat-tabname = 'I_EKNETOUT'.
la_fieldcat-fieldname = 'NAME1'.
la_fieldcat-seltext_l = text-008.
la_fieldcat-outputlen = 11.
APPEND la_fieldcat TO p_i_fieldcat.
CLEAR la_fieldcat.
la_fieldcat-tabname = 'I_EKNETOUT'.
la_fieldcat-fieldname = 'EBELP'.
la_fieldcat-seltext_l = text-009.
la_fieldcat-outputlen = 7.
APPEND la_fieldcat TO p_i_fieldcat.
CLEAR la_fieldcat.
la_fieldcat-tabname = 'I_EKNETOUT'.
la_fieldcat-fieldname = 'MATNR'.
la_fieldcat-seltext_l = text-010.
la_fieldcat-outputlen = 15.
APPEND la_fieldcat TO p_i_fieldcat.
CLEAR la_fieldcat.
la_fieldcat-tabname = 'I_EKNETOUT'.
la_fieldcat-fieldname = 'MAKTX'.
la_fieldcat-seltext_l = text-011.
la_fieldcat-outputlen = 15.
APPEND la_fieldcat TO p_i_fieldcat.
CLEAR la_fieldcat.
la_fieldcat-tabname = 'I_EKNETOUT'.
la_fieldcat-fieldname = 'MENGE'.
la_fieldcat-seltext_l = text-012.
la_fieldcat-outputlen = 11.
APPEND la_fieldcat TO p_i_fieldcat.
CLEAR la_fieldcat.
la_fieldcat-tabname = 'I_EKNETOUT'.
la_fieldcat-fieldname = 'MEINS'.
la_fieldcat-seltext_l = text-013.
la_fieldcat-outputlen = 11.
APPEND la_fieldcat TO p_i_fieldcat.
CLEAR la_fieldcat.
la_fieldcat-tabname = 'I_EKNETOUT'.
la_fieldcat-fieldname = 'NETWR'.
la_fieldcat-seltext_l = text-015.
la_fieldcat-outputlen = 11.
APPEND la_fieldcat TO p_i_fieldcat.
CLEAR la_fieldcat.
la_fieldcat-tabname = 'I_EKNETOUT'.
la_fieldcat-fieldname = 'WAERS'.
la_fieldcat-seltext_l = text-014.
la_fieldcat-outputlen = 11.
APPEND la_fieldcat TO p_i_fieldcat.
CLEAR la_fieldcat.
la_fieldcat-tabname = 'I_EKNETOUT'.
la_fieldcat-fieldname = 'ERNAM'.
la_fieldcat-seltext_l = text-016.
la_fieldcat-outputlen = 11.
APPEND la_fieldcat TO p_i_fieldcat.
CLEAR la_fieldcat.
la_fieldcat-tabname = 'I_EKNETOUT'.
la_fieldcat-fieldname = 'UDATE'.
la_fieldcat-seltext_l = text-017.
la_fieldcat-outputlen = 11.
APPEND la_fieldcat TO p_i_fieldcat.
CLEAR la_fieldcat.
la_fieldcat-tabname = 'I_EKNETOUT'.
la_fieldcat-fieldname = 'USERNAME'.
la_fieldcat-seltext_l = text-018.
la_fieldcat-outputlen = 11.
APPEND la_fieldcat TO p_i_fieldcat.
wa_sort-fieldname= 'EBELN'.
wa_sort-tabname = 'I_EKNETOUT'.
wa_sort-group = 'X'.
APPEND wa_sort TO int_sort.*
Pass this int_sort to it sort of alv_grid_diaplay FM
ENDFORM. " field_catalag_merge
-
FORM top_of_page *
-
For Heading *
-
FORM top_of_page.
REFRESH i_commentary.
w_commentary-typ = 'H'.
w_commentary-info = 'Report for PO Order Released'(030).
APPEND w_commentary TO i_commentary.
CLEAR w_commentary.
CALL FUNCTION 'REUSE_ALV_COMMENTARY_WRITE'
EXPORTING
it_list_commentary = i_commentary.
ENDFORM. "top_of_page
2008 Apr 16 6:18 AM
Hi,
In grid i am not sure whether its possible or not..
But in ALV list it is possible.
Use event before_line_output.
Then sort your internal table with PO num and Document Type.
Remove PO and Document type fields from your field catalog.
in this event before_line_output put a write statement to write PO num and Docu typ if it changes.
Regards,
Nishant
2008 Apr 16 6:22 AM
HI,
see this code now.
TABLES : ekko, "Purchasing Document Header
ekpo, "Purchasing Document Item
cdhdr, "Change document header
cdpos . "Change document items
*----------------------------------------------------------------------
*
* * TYPE DEFINATIONS *
*
*----------------------------------------------------------------------
TYPE-POOLS: slis.
TYPES: BEGIN OF t_ekout,
ebeln LIKE ekko-ebeln ,
bsart LIKE ekko-bsart,
matkl LIKE ekpo-matkl,
bedat LIKE ekko-bedat,
lifnr LIKE ekko-lifnr,
waers LIKE ekko-waers,
wkurs LIKE ekko-wkurs,
ernam LIKE ekko-ernam,
ebelm LIKE ekpo-ebeln,
ebelp LIKE ekpo-ebelp,
netwr LIKE ekpo-netwr,
matnr LIKE ekpo-matnr,
menge LIKE ekpo-menge,
meins LIKE ekpo-meins,
werks LIKE ekpo-werks,
END OF t_ekout.
TYPES : BEGIN OF t_cdhdr,
objectid LIKE cdhdr-objectid, "Object value
changenr LIKE cdhdr-changenr, "Document change number
udate LIKE cdhdr-udate, "Creation date of the change document
username LIKE cdhdr-username, "User name of the person responsible in
*change document
END OF t_cdhdr.
TYPES: BEGIN OF t_cdpos,
objectid LIKE cdpos-objectid, "Object value
changenr LIKE cdhdr-changenr, "Document change number
value_new LIKE cdpos-value_new, "New contents of changed field
END OF t_cdpos.
TYPES: BEGIN OF t_makt,
matnr LIKE makt-matnr, "Material Number
maktx LIKE makt-maktx, "Material Description
END OF t_makt.
TYPES :BEGIN OF t_lfa1,
lifnr LIKE lfa1-lifnr, "Account Number of Vendor or Creditor
name1 LIKE lfa1-name1, "Name 1
END OF t_lfa1.
TYPES: BEGIN OF t_mara,
matnr LIKE mara-matnr, "Material Number
matkl LIKE mara-matkl, "Material Group
END OF t_mara.
TYPES: BEGIN OF t_output,
ebeln LIKE ekko-ebeln,
bsart LIKE ekko-bsart,
matkl LIKE ekpo-matkl,
bedat LIKE ekko-bedat,
lifnr LIKE ekko-lifnr,
name1 LIKE lfa1-name1,
ebelp LIKE ekpo-ebelp,
matnr LIKE ekpo-matnr,
maktx LIKE makt-maktx,
menge LIKE ekpo-menge,
meins LIKE ekpo-meins,
netwr LIKE ekpo-netwr,
wkurs LIKE ekko-wkurs,
ernam LIKE ekko-ernam,
username LIKE cdhdr-username,
udate LIKE cdhdr-udate,
werks LIKE ekpo-werks,
objectid LIKE cdhdr-objectid,
tcode LIKE cdhdr-tcode,
changenr LIKE cdhdr-changenr,
objctid LIKE cdpos-objectid,
fname LIKE cdpos-fname,
value_new LIKE cdpos-value_new,
net1 TYPE p DECIMALS 2,
net2 TYPE p DECIMALS 2,
waers LIKE ekko-waers,
END OF t_output.
TYPES: tt_ekout TYPE STANDARD TABLE OF t_ekout.
TYPES: tt_ekkout TYPE STANDARD TABLE OF t_ekout.
TYPES: tt_cdhdr TYPE STANDARD TABLE OF t_cdhdr.
TYPES: tt_cdpos TYPE STANDARD TABLE OF t_cdpos.
TYPES: tt_makt TYPE STANDARD TABLE OF t_makt.
TYPES: tt_lfa1 TYPE STANDARD TABLE OF t_lfa1.
TYPES: tt_mara TYPE STANDARD TABLE OF t_mara.
TYPES: tt_output TYPE STANDARD TABLE OF t_output.
TYPES: tt_eknetout TYPE STANDARD TABLE OF t_output.
*----------------------------------------------------------------------
*
* * DATA DECLARATION *
*
*----------------------------------------------------------------------
DATA: i_ekout TYPE tt_ekout,
wa_ekout TYPE t_ekout,
i_ekkout TYPE tt_ekkout,
wa_ekkout TYPE t_ekout,
i_cdhdr TYPE tt_cdhdr,
wa_cdhdr TYPE t_cdhdr,
i_cdpos TYPE tt_cdpos,
wa_cdpos TYPE t_cdpos,
i_makt TYPE tt_makt,
wa_makt TYPE t_makt,
i_lfa1 TYPE tt_lfa1,
wa_lfa1 TYPE t_lfa1,
i_mara TYPE tt_mara,
wa_mara TYPE t_mara,
i_output TYPE tt_output,
wa_output TYPE t_output,
i_eknetout TYPE tt_eknetout,
wa_eknetout TYPE t_output.
DATA: w_var_save TYPE char01,
w_var TYPE disvariant,
w_variant TYPE disvariant,
w_repid TYPE sy-repid,
i_fieldcat TYPE slis_t_fieldcat_alv,
lt_sort TYPE slis_t_sortinfo_alv,
ls_sort TYPE slis_sortinfo_alv,
i_commentary TYPE slis_t_listheader,
w_commentary TYPE slis_listheader,
p_layo TYPE slis_layout_alv.
*----------------------------------------------------------------------
*
* * SELECTION SCREEN *
*
*----------------------------------------------------------------------
SELECTION-SCREEN BEGIN OF BLOCK b1 WITH FRAME TITLE text-001.
SELECT-OPTIONS: s_udate FOR cdhdr-udate OBLIGATORY,
s_bsart FOR ekko-bsart ,
s_matkl FOR ekpo-matkl .
PARAMETERS: p_netwr TYPE p DECIMALS 2 OBLIGATORY,
p_layout TYPE disvariant-variant NO-DISPLAY.
SELECTION-SCREEN END OF BLOCK b1.
*----------------------------------------------------------------------
*
* * INITIALIZATION *
*
*----------------------------------------------------------------------
INITIALIZATION.
PERFORM variant_default.
CLEAR w_repid.
w_repid = sy-repid.
*----------------------------------------------------------------------
*
* * START-OF-SELECTION *
*
*----------------------------------------------------------------------
START-OF-SELECTION.
PERFORM get_data.
PERFORM populate_output.
*----------------------------------------------------------------------
*
* * END-OF-SELECTION *
*
*----------------------------------------------------------------------
END-OF-SELECTION.
PERFORM generate_alv.
*&---------------------------------------------------------------------
**& Form variant_default
*&---------------------------------------------------------------------
*
* * text
*
*----------------------------------------------------------------------
*
* * --> p1 text
* * <-- p2 text
*
*----------------------------------------------------------------------
FORM variant_default.
CLEAR: w_var, w_variant.
w_var_save = 'A'.
w_var-report = sy-repid.
w_variant = w_var.
CALL FUNCTION 'REUSE_ALV_VARIANT_DEFAULT_GET'
EXPORTING
i_save = w_var_save
CHANGING
cs_variant = w_var
EXCEPTIONS
not_found = 1
program_error = 2
OTHERS = 3.
IF sy-subrc = 0.
p_layout = w_var-variant.
ENDIF.
ENDFORM. " variant_default
*&---------------------------------------------------------------------
**& Form get_data
*&---------------------------------------------------------------------
*
* * text
*
*----------------------------------------------------------------------
*
* * --> p1 text
* * <-- p2 text
*
*----------------------------------------------------------------------
FORM get_data .
SELECT objectid changenr udate username FROM cdhdr
INTO TABLE i_cdhdr
WHERE udate IN s_udate
AND tcode = 'ME28'.
IF sy-subrc = 0.
SORT i_cdhdr BY objectid.
SELECT objectid changenr value_new FROM cdpos
INTO TABLE i_cdpos
FOR ALL ENTRIES IN i_cdhdr
WHERE changenr = i_cdhdr-changenr
AND fname = 'FRGKE'.
SORT i_cdpos BY objectid.
ENDIF.
SELECT e~ebeln e~bsart p~matkl e~bedat e~lifnr e~waers e~wkurs e~ernam
p~ebeln
p~ebelp p~netwr p~matnr p~menge p~meins p~werks FROM ekko
AS e INNER JOIN ekpo AS p ON e~ebeln = p~ebeln INTO TABLE i_ekout
WHERE bsart IN s_bsart
AND matkl IN s_matkl.
SORT i_ekout BY ebeln bsart matkl bedat lifnr.
SELECT matnr maktx FROM makt
INTO TABLE i_makt
FOR ALL ENTRIES IN i_ekout
WHERE matnr = i_ekout-matnr
AND spras = 'E'.
SORT i_makt BY matnr.
SELECT matnr matkl FROM mara
INTO TABLE i_mara
FOR ALL ENTRIES IN i_ekout
WHERE matnr = i_ekout-matnr.
SORT i_mara BY matnr.
SELECT lifnr name1 FROM lfa1
INTO TABLE i_lfa1
FOR ALL ENTRIES IN i_ekout
WHERE lifnr = i_ekout-lifnr.
SORT i_lfa1 BY lifnr.
ENDFORM. " get_data
*&---------------------------------------------------------------------
**& Form generate_alv
*&---------------------------------------------------------------------
*
* * text
*
*----------------------------------------------------------------------
*
* * --> p1 text
* * <-- p2 text
*
*----------------------------------------------------------------------
FORM generate_alv .
IF NOT i_output[] IS INITIAL.
w_variant-variant = p_layout.
* Create the field catelog
PERFORM field_catalag_merge USING i_fieldcat.
DEFINE m_sort.
add 1 to ls_sort-spos.
ls_sort-fieldname = &1.
ls_sort-up = 'X'.
ls_sort-subtot = &2.
append ls_sort to lt_sort.
END-OF-DEFINITION.
m_sort 'EBELN' 'X'.
p_layo-cell_merge = 'X'.
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
EXPORTING
i_callback_program = w_repid
i_callback_user_command = 'USER_COMMAND'
i_callback_top_of_page = 'TOP_OF_PAGE'
is_layout = p_layo
it_fieldcat = i_fieldcat
IT_SORT = lt_sort
i_save = 'A'
is_variant = w_variant
TABLES
t_outtab = i_eknetout
EXCEPTIONS
OTHERS = 0.
ELSE.
MESSAGE i208(zmsg) WITH 'No data found for the Selection Criteria'(049).
ENDIF.
ENDFORM. " generate_alv
*&---------------------------------------------------------------------
**& Form populate_output
*&---------------------------------------------------------------------
*
* * text
*
*----------------------------------------------------------------------
*
* * --> p1 text
* * <-- p2 text
*
*----------------------------------------------------------------------
FORM populate_output .
REFRESH i_output.
CLEAR wa_cdhdr.
LOOP AT i_cdhdr INTO wa_cdhdr.
CLEAR: wa_cdpos, wa_ekout, wa_output.
MOVE-CORRESPONDING wa_cdhdr TO wa_output.
READ TABLE i_cdhdr INTO wa_cdhdr WITH KEY changenr = wa_cdhdr-changenr
BINARY SEARCH.
IF sy-subrc = 0.
wa_output-objectid = wa_cdhdr-objectid.
wa_output-username = wa_cdhdr-username.
wa_output-udate = wa_cdhdr-udate.
ENDIF.
READ TABLE i_cdpos INTO wa_cdpos WITH KEY changenr = wa_cdhdr-changenr
BINARY SEARCH.
IF sy-subrc = 0.
wa_output-value_new = wa_cdpos-value_new.
IF wa_output-value_new = '2'.
wa_output-objctid = wa_cdpos-objectid.
LOOP AT i_ekout INTO wa_ekout WHERE ebeln EQ wa_output-objctid.
wa_output-ebeln = wa_ekout-ebeln.
wa_output-bsart = wa_ekout-bsart.
wa_output-matkl = wa_ekout-matkl.
wa_output-bedat = wa_ekout-bedat.
wa_output-lifnr = wa_ekout-lifnr.
wa_output-name1 = wa_lfa1-name1.
wa_output-name1 = wa_lfa1-name1.
wa_output-matnr = wa_ekout-matnr.
wa_output-ebelp = wa_ekout-ebelp.
wa_output-menge = wa_ekout-menge.
wa_output-meins = wa_ekout-meins.
wa_output-ernam = wa_ekout-ernam.
wa_output-waers = wa_ekout-waers.
wa_output-netwr = wa_ekout-netwr.
IF wa_ekout-waers = 'EUR'.
wa_output-net1 = wa_ekout-netwr + wa_output-net1.
ELSE.
wa_output-net2 = wa_ekout-netwr * wa_ekout-wkurs.
ENDIF.
READ TABLE i_makt INTO wa_makt WITH KEY matnr = wa_ekout-matnr
BINARY SEARCH.
wa_output-maktx = wa_makt-maktx.
READ TABLE i_lfa1 INTO wa_lfa1 WITH KEY lifnr = wa_ekout-lifnr
BINARY SEARCH.
IF sy-subrc = 0.
wa_output-name1 = wa_lfa1-name1.
ENDIF.
APPEND wa_output TO i_output.
SORT i_output BY ebeln bsart matkl bedat lifnr name1.
ENDLOOP.
ELSE.
CONTINUE.
ENDIF.
ELSE.
SKIP.
ENDIF.
LOOP AT i_output INTO wa_eknetout WHERE ebeln = wa_output-ebeln.
IF wa_output-net1 >= p_netwr.
APPEND wa_eknetout TO i_eknetout.
SORT i_eknetout BY ebeln bsart matkl bedat lifnr name1 ebelp.
ELSEIF wa_output-net2 >= p_netwr.
APPEND wa_eknetout TO i_eknetout.
SORT i_eknetout BY ebelp.
ELSE.
FREE wa_eknetout.
ENDIF.
ENDLOOP.
ENDLOOP.
ENDFORM. " populate_output
*&---------------------------------------------------------------------
**& Form field_catalag_merge
*&---------------------------------------------------------------------
*
* * text
*
*----------------------------------------------------------------------
*
* * -->P_I_FIELDCAT text
*
*----------------------------------------------------------------------
FORM field_catalag_merge USING p_i_fieldcat TYPE slis_t_fieldcat_alv.
DATA: la_fieldcat TYPE slis_fieldcat_alv.
REFRESH i_fieldcat.
CLEAR la_fieldcat.
la_fieldcat-tabname = 'I_EKNETOUT'.
la_fieldcat-fieldname = 'EBELN'.
la_fieldcat-seltext_l = text-003.
la_fieldcat-outputlen = 11.
APPEND la_fieldcat TO p_i_fieldcat.
CLEAR la_fieldcat.
la_fieldcat-tabname = 'I_EKNETOUT'.
la_fieldcat-fieldname = 'BSART'.
la_fieldcat-seltext_l = text-004.
la_fieldcat-outputlen = 11.
APPEND la_fieldcat TO p_i_fieldcat.
CLEAR la_fieldcat.
la_fieldcat-tabname = 'I_EKNETOUT'.
la_fieldcat-fieldname = 'MATKL'.
la_fieldcat-seltext_l = text-005.
la_fieldcat-outputlen = 11.
APPEND la_fieldcat TO p_i_fieldcat.
CLEAR la_fieldcat.
la_fieldcat-tabname = 'I_EKNETOUT'.
la_fieldcat-fieldname = 'BEDAT'.
la_fieldcat-seltext_l = text-006.
la_fieldcat-outputlen = 11.
APPEND la_fieldcat TO p_i_fieldcat.
CLEAR la_fieldcat.
la_fieldcat-tabname = 'I_EKNETOUT'.
la_fieldcat-fieldname = 'LIFNR'.
la_fieldcat-seltext_l = text-007.
la_fieldcat-outputlen = 11.
APPEND la_fieldcat TO p_i_fieldcat.
CLEAR la_fieldcat.
la_fieldcat-tabname = 'I_EKNETOUT'.
la_fieldcat-fieldname = 'NAME1'.
la_fieldcat-seltext_l = text-008.
la_fieldcat-outputlen = 11.
APPEND la_fieldcat TO p_i_fieldcat.
CLEAR la_fieldcat.
la_fieldcat-tabname = 'I_EKNETOUT'.
la_fieldcat-fieldname = 'EBELP'.
la_fieldcat-seltext_l = text-009.
la_fieldcat-outputlen = 7.
APPEND la_fieldcat TO p_i_fieldcat.
CLEAR la_fieldcat.
la_fieldcat-tabname = 'I_EKNETOUT'.
la_fieldcat-fieldname = 'MATNR'.
la_fieldcat-seltext_l = text-010.
la_fieldcat-outputlen = 15.
APPEND la_fieldcat TO p_i_fieldcat.
CLEAR la_fieldcat.
la_fieldcat-tabname = 'I_EKNETOUT'.
la_fieldcat-fieldname = 'MAKTX'.
la_fieldcat-seltext_l = text-011.
la_fieldcat-outputlen = 15.
APPEND la_fieldcat TO p_i_fieldcat.
CLEAR la_fieldcat.
la_fieldcat-tabname = 'I_EKNETOUT'.
la_fieldcat-fieldname = 'MENGE'.
la_fieldcat-seltext_l = text-012.
la_fieldcat-outputlen = 11.
APPEND la_fieldcat TO p_i_fieldcat.
CLEAR la_fieldcat.
la_fieldcat-tabname = 'I_EKNETOUT'.
la_fieldcat-fieldname = 'MEINS'.
la_fieldcat-seltext_l = text-013.
la_fieldcat-outputlen = 11.
APPEND la_fieldcat TO p_i_fieldcat.
CLEAR la_fieldcat.
la_fieldcat-tabname = 'I_EKNETOUT'.
la_fieldcat-fieldname = 'NETWR'.
la_fieldcat-seltext_l = text-015.
la_fieldcat-outputlen = 11.
APPEND la_fieldcat TO p_i_fieldcat.
CLEAR la_fieldcat.
la_fieldcat-tabname = 'I_EKNETOUT'.
la_fieldcat-fieldname = 'WAERS'.
la_fieldcat-seltext_l = text-014.
la_fieldcat-outputlen = 11.
APPEND la_fieldcat TO p_i_fieldcat.
CLEAR la_fieldcat.
la_fieldcat-tabname = 'I_EKNETOUT'.
la_fieldcat-fieldname = 'ERNAM'.
la_fieldcat-seltext_l = text-016.
la_fieldcat-outputlen = 11.
APPEND la_fieldcat TO p_i_fieldcat.
CLEAR la_fieldcat.
la_fieldcat-tabname = 'I_EKNETOUT'.
la_fieldcat-fieldname = 'UDATE'.
la_fieldcat-seltext_l = text-017.
la_fieldcat-outputlen = 11.
APPEND la_fieldcat TO p_i_fieldcat.
CLEAR la_fieldcat.
la_fieldcat-tabname = 'I_EKNETOUT'.
la_fieldcat-fieldname = 'USERNAME'.
la_fieldcat-seltext_l = text-018.
la_fieldcat-outputlen = 11.
APPEND la_fieldcat TO p_i_fieldcat.
ENDFORM. " field_catalag_merge
*---------------------------------------------------------------------
*
* * FORM top_of_page *
*
*---------------------------------------------------------------------
*
* * For Heading *
*
*---------------------------------------------------------------------
FORM top_of_page.
REFRESH i_commentary.
w_commentary-typ = 'H'.
w_commentary-info = 'Report for PO Order Released'(030).
APPEND w_commentary TO i_commentary.
CLEAR w_commentary.
CALL FUNCTION 'REUSE_ALV_COMMENTARY_WRITE'
EXPORTING
it_list_commentary = i_commentary.
ENDFORM. "top_of_page
rgds,
bharat.
2008 Apr 16 7:46 AM
Hi,
Have a look at the modified code of urs. I have added one subroutine perform build_sort_tab in side perform generate_alv subroutine to build sort table. Passed that table i_sort through REUSE_ALV_GRID_DISPLAY.
I hope that it solves ur problem.
Regards,
Venkat.O
REPORT zpo_release LINE-SIZE 255 MESSAGE-ID zpo NO STANDARD PAGE HEADING.
TABLES :
ekko, "Purchasing Document Header
ekpo, "Purchasing Document Item
cdhdr, "Change document header
cdpos . "Change document items
TYPE-POOLS: slis.
TYPES:
BEGIN OF t_ekout,
ebeln LIKE ekko-ebeln ,
bsart LIKE ekko-bsart,
matkl LIKE ekpo-matkl,
bedat LIKE ekko-bedat,
lifnr LIKE ekko-lifnr,
waers LIKE ekko-waers,
wkurs LIKE ekko-wkurs,
ernam LIKE ekko-ernam,
ebelm LIKE ekpo-ebeln,
ebelp LIKE ekpo-ebelp,
netwr LIKE ekpo-netwr,
matnr LIKE ekpo-matnr,
menge LIKE ekpo-menge,
meins LIKE ekpo-meins,
werks LIKE ekpo-werks,
END OF t_ekout.
TYPES :
BEGIN OF t_cdhdr,
objectid LIKE cdhdr-objectid, "Object value
changenr LIKE cdhdr-changenr, "Document change number
udate LIKE cdhdr-udate, "Creation date of the change document
username LIKE cdhdr-username, "User name of the person responsible in change document
END OF t_cdhdr.
TYPES:
BEGIN OF t_cdpos,
objectid LIKE cdpos-objectid, "Object value
changenr LIKE cdhdr-changenr, "Document change number
value_new LIKE cdpos-value_new, "New contents of changed field
END OF t_cdpos.
TYPES:
BEGIN OF t_makt,
matnr LIKE makt-matnr, "Material Number
maktx LIKE makt-maktx, "Material Description
END OF t_makt.
TYPES :BEGIN OF t_lfa1,
lifnr LIKE lfa1-lifnr, "Account Number of Vendor or Creditor
name1 LIKE lfa1-name1, "Name 1
END OF t_lfa1.
TYPES: BEGIN OF t_mara,
matnr LIKE mara-matnr, "Material Number
matkl LIKE mara-matkl, "Material Group
END OF t_mara.
TYPES: BEGIN OF t_output,
ebeln LIKE ekko-ebeln,
bsart LIKE ekko-bsart,
matkl LIKE ekpo-matkl,
bedat LIKE ekko-bedat,
lifnr LIKE ekko-lifnr,
name1 LIKE lfa1-name1,
ebelp LIKE ekpo-ebelp,
matnr LIKE ekpo-matnr,
maktx LIKE makt-maktx,
menge LIKE ekpo-menge,
meins LIKE ekpo-meins,
netwr LIKE ekpo-netwr,
wkurs LIKE ekko-wkurs,
ernam LIKE ekko-ernam,
username LIKE cdhdr-username,
udate LIKE cdhdr-udate,
werks LIKE ekpo-werks,
objectid LIKE cdhdr-objectid,
tcode LIKE cdhdr-tcode,
changenr LIKE cdhdr-changenr,
objctid LIKE cdpos-objectid,
fname LIKE cdpos-fname,
value_new LIKE cdpos-value_new,
net1 TYPE p DECIMALS 2,
net2 TYPE p DECIMALS 2,
waers LIKE ekko-waers,
END OF t_output.
TYPES: tt_ekout TYPE STANDARD TABLE OF t_ekout.
TYPES: tt_ekkout TYPE STANDARD TABLE OF t_ekout.
TYPES: tt_cdhdr TYPE STANDARD TABLE OF t_cdhdr.
TYPES: tt_cdpos TYPE STANDARD TABLE OF t_cdpos.
TYPES: tt_makt TYPE STANDARD TABLE OF t_makt.
TYPES: tt_lfa1 TYPE STANDARD TABLE OF t_lfa1.
TYPES: tt_mara TYPE STANDARD TABLE OF t_mara.
TYPES: tt_output TYPE STANDARD TABLE OF t_output.
TYPES: tt_eknetout TYPE STANDARD TABLE OF t_output.
DATA: i_ekout TYPE tt_ekout,
wa_ekout TYPE t_ekout,
i_ekkout TYPE tt_ekkout,
wa_ekkout TYPE t_ekout,
i_cdhdr TYPE tt_cdhdr,
wa_cdhdr TYPE t_cdhdr,
i_cdpos TYPE tt_cdpos,
wa_cdpos TYPE t_cdpos,
i_makt TYPE tt_makt,
wa_makt TYPE t_makt,
i_lfa1 TYPE tt_lfa1,
wa_lfa1 TYPE t_lfa1,
i_mara TYPE tt_mara,
wa_mara TYPE t_mara,
i_output TYPE tt_output,
wa_output TYPE t_output,
i_eknetout TYPE tt_eknetout,
wa_eknetout TYPE t_output.
DATA: w_var_save TYPE char01,
w_var TYPE disvariant,
w_variant TYPE disvariant,
w_repid TYPE sy-repid,
i_fieldcat TYPE slis_t_fieldcat_alv,
i_sort TYPE slis_t_sortinfo_alv,
w_sort LIKE LINE OF i_sort,
i_commentary TYPE slis_t_listheader,
w_commentary TYPE slis_listheader.
*Data: int_sort TYPE slis_t_sortinfo_alv, "SORT field
"wa_sort like line of int_sort.
SELECTION-SCREEN BEGIN OF BLOCK b1 WITH FRAME TITLE text-001.
SELECT-OPTIONS: s_udate FOR cdhdr-udate OBLIGATORY,
s_bsart FOR ekko-bsart ,
s_matkl FOR ekpo-matkl .
PARAMETERS: p_netwr TYPE p DECIMALS 2 OBLIGATORY,
p_layout TYPE disvariant-variant NO-DISPLAY.
SELECTION-SCREEN END OF BLOCK b1.
INITIALIZATION.
PERFORM variant_default.
CLEAR w_repid.
w_repid = sy-repid.
START-OF-SELECTION.
PERFORM get_data.
PERFORM populate_output.
END-OF-SELECTION.
PERFORM generate_alv.
*&---------------------------------------------------------------------*
*& Form variant_default
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
FORM variant_default.
CLEAR: w_var, w_variant.
w_var_save = 'A'.
w_var-report = sy-repid.
w_variant = w_var.
CALL FUNCTION 'REUSE_ALV_VARIANT_DEFAULT_GET'
EXPORTING
i_save = w_var_save
CHANGING
cs_variant = w_var
EXCEPTIONS
not_found = 1
program_error = 2
OTHERS = 3.
IF sy-subrc = 0.
p_layout = w_var-variant.
ENDIF.
ENDFORM. " variant_default
*&---------------------------------------------------------------------*
*& Form get_data
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
FORM get_data .
SELECT objectid changenr udate username FROM cdhdr
INTO TABLE i_cdhdr
WHERE udate IN s_udate
AND tcode = 'ME28'.
IF sy-subrc = 0.
SORT i_cdhdr BY objectid.
SELECT objectid changenr value_new FROM cdpos
INTO TABLE i_cdpos
FOR ALL ENTRIES IN i_cdhdr
WHERE changenr = i_cdhdr-changenr
AND fname = 'FRGKE'.
SORT i_cdpos BY objectid.
ENDIF.
SELECT e~ebeln e~bsart p~matkl e~bedat e~lifnr e~waers e~wkurs e~ernam p~ebeln
p~ebelp p~netwr p~matnr p~menge p~meins p~werks FROM ekko
AS e INNER JOIN ekpo AS p ON e~ebeln = p~ebeln INTO TABLE i_ekout WHERE bsart IN s_bsart
AND matkl IN s_matkl.
SORT i_ekout BY ebeln bsart matkl bedat lifnr.
SELECT matnr maktx FROM makt
INTO TABLE i_makt
FOR ALL ENTRIES IN i_ekout
WHERE matnr = i_ekout-matnr
AND spras = 'E'.
SORT i_makt BY matnr.
SELECT matnr matkl FROM mara
INTO TABLE i_mara
FOR ALL ENTRIES IN i_ekout
WHERE matnr = i_ekout-matnr.
SORT i_mara BY matnr.
SELECT lifnr name1 FROM lfa1
INTO TABLE i_lfa1
FOR ALL ENTRIES IN i_ekout
WHERE lifnr = i_ekout-lifnr.
SORT i_lfa1 BY lifnr.
ENDFORM. " get_data
*&---------------------------------------------------------------------*
*& Form generate_alv
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
FORM generate_alv .
IF NOT i_output[] IS INITIAL.
w_variant-variant = p_layout.
* CREATE the field catelog
PERFORM field_catalag_merge USING i_fieldcat.
PERFORM build_sort_tab.
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
EXPORTING
i_callback_program = w_repid
i_callback_user_command = 'USER_COMMAND'
i_callback_top_of_page = 'TOP_OF_PAGE'
is_layout = p_layout
it_fieldcat = i_fieldcat
it_sort = i_sort
i_save = 'A'
is_variant = w_variant
TABLES
t_outtab = i_eknetout
EXCEPTIONS
OTHERS = 0.
ELSE.
MESSAGE i208 WITH 'No data found for the Selection Criteria'(049).
ENDIF.
ENDFORM. " generate_alv
*&---------------------------------------------------------------------*
*& Form populate_output
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
FORM populate_output .
REFRESH i_output.
CLEAR wa_cdhdr.
LOOP AT i_cdhdr INTO wa_cdhdr.
CLEAR: wa_cdpos, wa_ekout, wa_output.
MOVE-CORRESPONDING wa_cdhdr TO wa_output.
READ TABLE i_cdhdr INTO wa_cdhdr WITH KEY changenr = wa_cdhdr-changenr
BINARY SEARCH.
IF sy-subrc = 0.
wa_output-objectid = wa_cdhdr-objectid.
wa_output-username = wa_cdhdr-username.
wa_output-udate = wa_cdhdr-udate.
ENDIF.
READ TABLE i_cdpos INTO wa_cdpos WITH KEY changenr = wa_cdhdr-changenr
BINARY SEARCH.
IF sy-subrc = 0.
wa_output-value_new = wa_cdpos-value_new.
IF wa_output-value_new = '2'.
wa_output-objctid = wa_cdpos-objectid.
LOOP AT i_ekout INTO wa_ekout WHERE ebeln EQ wa_output-objctid.
wa_output-ebeln = wa_ekout-ebeln.
wa_output-bsart = wa_ekout-bsart.
wa_output-matkl = wa_ekout-matkl.
wa_output-bedat = wa_ekout-bedat.
wa_output-lifnr = wa_ekout-lifnr.
wa_output-name1 = wa_lfa1-name1.
wa_output-name1 = wa_lfa1-name1.
wa_output-matnr = wa_ekout-matnr.
wa_output-ebelp = wa_ekout-ebelp.
wa_output-menge = wa_ekout-menge.
wa_output-meins = wa_ekout-meins.
wa_output-ernam = wa_ekout-ernam.
wa_output-waers = wa_ekout-waers.
wa_output-netwr = wa_ekout-netwr.
IF wa_ekout-waers = 'EUR'.
wa_output-net1 = wa_ekout-netwr + wa_output-net1.
ELSE.
wa_output-net2 = wa_ekout-netwr * wa_ekout-wkurs.
ENDIF.
READ TABLE i_makt INTO wa_makt WITH KEY matnr = wa_ekout-matnr
BINARY SEARCH.
wa_output-maktx = wa_makt-maktx.
READ TABLE i_lfa1 INTO wa_lfa1 WITH KEY lifnr = wa_ekout-lifnr
BINARY SEARCH.
IF sy-subrc = 0.
wa_output-name1 = wa_lfa1-name1.
ENDIF.
APPEND wa_output TO i_output.
SORT i_output BY ebeln bsart matkl bedat lifnr name1.
ENDLOOP.
ELSE.
CONTINUE.
ENDIF.
ELSE.
SKIP.
ENDIF.
LOOP AT i_output INTO wa_eknetout WHERE ebeln = wa_output-ebeln.
IF wa_output-net1 >= p_netwr.
APPEND wa_eknetout TO i_eknetout.
SORT i_eknetout BY ebeln bsart matkl bedat lifnr name1 ebelp.
ELSEIF wa_output-net2 >= p_netwr.
APPEND wa_eknetout TO i_eknetout.
SORT i_eknetout BY ebelp.
ELSE.
FREE wa_eknetout.
ENDIF.
ENDLOOP.
ENDLOOP.
ENDFORM. " populate_output
*&---------------------------------------------------------------------*
*& Form field_catalag_merge
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->P_I_FIELDCAT text
*----------------------------------------------------------------------*
FORM field_catalag_merge USING p_i_fieldcat TYPE slis_t_fieldcat_alv.
DATA: la_fieldcat TYPE slis_fieldcat_alv.
REFRESH i_fieldcat.
CLEAR la_fieldcat.
la_fieldcat-tabname = 'I_EKNETOUT'.
la_fieldcat-fieldname = 'EBELN'.
la_fieldcat-seltext_l = text-003.
la_fieldcat-outputlen = 11.
APPEND la_fieldcat TO p_i_fieldcat.
CLEAR la_fieldcat.
la_fieldcat-tabname = 'I_EKNETOUT'.
la_fieldcat-fieldname = 'BSART'.
la_fieldcat-seltext_l = text-004.
la_fieldcat-outputlen = 11.
APPEND la_fieldcat TO p_i_fieldcat.
CLEAR la_fieldcat.
la_fieldcat-tabname = 'I_EKNETOUT'.
la_fieldcat-fieldname = 'MATKL'.
la_fieldcat-seltext_l = text-005.
la_fieldcat-outputlen = 11.
APPEND la_fieldcat TO p_i_fieldcat.
CLEAR la_fieldcat.
la_fieldcat-tabname = 'I_EKNETOUT'.
la_fieldcat-fieldname = 'BEDAT'.
la_fieldcat-seltext_l = text-006.
la_fieldcat-outputlen = 11.
APPEND la_fieldcat TO p_i_fieldcat.
CLEAR la_fieldcat.
la_fieldcat-tabname = 'I_EKNETOUT'.
la_fieldcat-fieldname = 'LIFNR'.
la_fieldcat-seltext_l = text-007.
la_fieldcat-outputlen = 11.
APPEND la_fieldcat TO p_i_fieldcat.
CLEAR la_fieldcat.
la_fieldcat-tabname = 'I_EKNETOUT'.
la_fieldcat-fieldname = 'NAME1'.
la_fieldcat-seltext_l = text-008.
la_fieldcat-outputlen = 11.
APPEND la_fieldcat TO p_i_fieldcat.
CLEAR la_fieldcat.
la_fieldcat-tabname = 'I_EKNETOUT'.
la_fieldcat-fieldname = 'EBELP'.
la_fieldcat-seltext_l = text-009.
la_fieldcat-outputlen = 7.
APPEND la_fieldcat TO p_i_fieldcat.
CLEAR la_fieldcat.
la_fieldcat-tabname = 'I_EKNETOUT'.
la_fieldcat-fieldname = 'MATNR'.
la_fieldcat-seltext_l = text-010.
la_fieldcat-outputlen = 15.
APPEND la_fieldcat TO p_i_fieldcat.
CLEAR la_fieldcat.
la_fieldcat-tabname = 'I_EKNETOUT'.
la_fieldcat-fieldname = 'MAKTX'.
la_fieldcat-seltext_l = text-011.
la_fieldcat-outputlen = 15.
APPEND la_fieldcat TO p_i_fieldcat.
CLEAR la_fieldcat.
la_fieldcat-tabname = 'I_EKNETOUT'.
la_fieldcat-fieldname = 'MENGE'.
la_fieldcat-seltext_l = text-012.
la_fieldcat-outputlen = 11.
APPEND la_fieldcat TO p_i_fieldcat.
CLEAR la_fieldcat.
la_fieldcat-tabname = 'I_EKNETOUT'.
la_fieldcat-fieldname = 'MEINS'.
la_fieldcat-seltext_l = text-013.
la_fieldcat-outputlen = 11.
APPEND la_fieldcat TO p_i_fieldcat.
CLEAR la_fieldcat.
la_fieldcat-tabname = 'I_EKNETOUT'.
la_fieldcat-fieldname = 'NETWR'.
la_fieldcat-seltext_l = text-015.
la_fieldcat-outputlen = 11.
APPEND la_fieldcat TO p_i_fieldcat.
CLEAR la_fieldcat.
la_fieldcat-tabname = 'I_EKNETOUT'.
la_fieldcat-fieldname = 'WAERS'.
la_fieldcat-seltext_l = text-014.
la_fieldcat-outputlen = 11.
APPEND la_fieldcat TO p_i_fieldcat.
CLEAR la_fieldcat.
la_fieldcat-tabname = 'I_EKNETOUT'.
la_fieldcat-fieldname = 'ERNAM'.
la_fieldcat-seltext_l = text-016.
la_fieldcat-outputlen = 11.
APPEND la_fieldcat TO p_i_fieldcat.
CLEAR la_fieldcat.
la_fieldcat-tabname = 'I_EKNETOUT'.
la_fieldcat-fieldname = 'UDATE'.
la_fieldcat-seltext_l = text-017.
la_fieldcat-outputlen = 11.
APPEND la_fieldcat TO p_i_fieldcat.
CLEAR la_fieldcat.
la_fieldcat-tabname = 'I_EKNETOUT'.
la_fieldcat-fieldname = 'USERNAME'.
la_fieldcat-seltext_l = text-018.
la_fieldcat-outputlen = 11.
APPEND la_fieldcat TO p_i_fieldcat.
ENDFORM. " field_catalag_merge
*&---------------------------------------------------------------------*
*& Form top_of_page
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
FORM top_of_page.
REFRESH i_commentary.
w_commentary-typ = 'H'.
w_commentary-info = 'Report for PO Order Released'(030).
APPEND w_commentary TO i_commentary.
CLEAR w_commentary.
CALL FUNCTION 'REUSE_ALV_COMMENTARY_WRITE'
EXPORTING
it_list_commentary = i_commentary.
ENDFORM. "top_of_page
*&---------------------------------------------------------------------*
*& Form build_sort_tab
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM build_sort_tab .
w_sort-fieldname = 'EBELN'.
w_sort-tabname = 'I_EKNETOUT'.
w_sort-up = 'X'.
w_sort-comp = 'X'.
APPEND w_sort TO i_sort.
CLEAR w_sort.
w_sort-fieldname = 'BSART'.
w_sort-tabname = 'I_EKNETOUT'.
w_sort-comp = 'X'.
w_sort-up = 'X'.
APPEND w_sort TO i_sort.
CLEAR w_sort.
ENDFORM. " build_sort_tab