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

ALV report

Former Member
0 Likes
679

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

4 REPLIES 4
Read only

Former Member
0 Likes
643

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

Read only

Former Member
0 Likes
643

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

Read only

Former Member
0 Likes
643

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.

Read only

venkat_o
Active Contributor
0 Likes
643

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.

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
I hope that it solves ur problem. Regards, Venkat.O