ABAP code:
report ZNESTINGALVRPT .tables: ekko, ekpo.
type-pools: slis.
types: begin of ty_ekko,
ebeln type ekko-ebeln,
bukrs type ekko-bukrs,
lifnr type ekko-lifnr,
end of ty_ekko,
begin of ty_out_ekko,
sel,
ebeln type ekko-ebeln,
bukrs type ekko-bukrs,
lifnr type ekko-lifnr,
end of ty_out_ekko,
begin of ty_ekpo,
ebeln type ekpo-ebeln,
ebelp type ekpo-ebelp,
matnr type ekpo-matnr,
werks type ekpo-werks,
lgort type ekpo-lgort,
menge type ekpo-menge,
meins type ekpo-meins,
end of ty_ekpo,
begin of ty_out_ekpo,
sel,
ebeln type ekko-ebeln,
ebelp type ekpo-ebelp,
matnr type ekpo-matnr,
werks type ekpo-werks,
lgort type ekpo-lgort,
menge type ekpo-menge,
meins type ekpo-meins,
end of ty_out_ekpo.
data: wa_ekko type ty_ekko,
wa_ekpo type ty_ekpo,
it_ekko type standard table of ty_ekko,
it_ekpo type standard table of ty_ekpo,
wa_out_ekko type ty_out_ekko,
wa_out_ekpo type ty_out_ekpo,
it_out_ekko type standard table of ty_out_ekko,
it_out_ekpo type standard table of ty_out_ekpo,
wa_fcat_ekko type slis_fieldcat_alv,
wa_fcat_ekpo type slis_fieldcat_alv,
it_fcat_ekko type slis_t_fieldcat_alv,
it_fcat_ekpo type slis_t_fieldcat_alv,
wa_layout type slis_layout_alv,
wa_top_ekko type slis_listheader,
wa_top_ekpo type slis_listheader,
it_top_ekko type slis_t_listheader,
it_top_ekpo type slis_t_listheader,
wa_event_ekko type slis_alv_event,
wa_event_ekpo type slis_alv_event,
it_event_ekko type slis_t_event,
it_event_ekpo type slis_t_event,
r_ucomm type sy-ucomm,
rs_selfield type slis_selfield,
v_selfield type slis_selfield-value,
v_ebeln type ekko-ebeln,
v_prog type sy-repid,
v_name type sy-uname.
initialization.
v_prog = sy-repid.
v_name = sy-uname.
selection-screen begin of block b1 with frame title text-001.
select-options s_ebeln for ekko-ebeln obligatory.
selection-screen end of block b1.
start-of-selection.
perform get_ekko.
perform fieldcat_ekko.
perform layout.
perform event_ekko.
perform grid_ekko.
perform ucomm_ekko using r_ucomm
changing rs_selfield.
top-of-page.
perform top_ekko.
top-of-page during line-selection.
perform top_ekpo.
*&---------------------------------------------------------------------*
*& Form ucomm_ekko
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->R_UCOMM text
* -->RS_ESLFIELD text
*----------------------------------------------------------------------*
form ucomm_ekko using r_ucomm_ekko type sy-ucomm
changing rs_selfield_ekko type slis_selfield.
case r_ucomm_ekko.
when '&IC1'.
if rs_selfield_ekko-fieldname = 'EBELN'.
clear v_selfield.
v_selfield = rs_selfield_ekko-value.
perform conversion_po.
perform get_ekpo.
perform fieldcat_ekpo.
perform layout.
perform event_ekpo.
perform grid_ekpo.
perform ucomm_ekpo using r_ucomm
changing rs_selfield.
else.
message 'Invalid Field' type 'S'.
endif.
endcase.
endform. "ucomm_ekko
*&---------------------------------------------------------------------*
*& Form GET_EKKO
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
form get_ekko .
refresh it_ekko.
select ebeln bukrs lifnr
from ekko into table it_ekko
where ebeln in s_ebeln.
if sy-subrc = 0.
sort it_ekko by ebeln.
refresh it_out_ekko.
loop at it_ekko into wa_ekko.
wa_out_ekko-ebeln = wa_ekko-ebeln.
wa_out_ekko-bukrs = wa_ekko-bukrs.
wa_out_ekko-lifnr = wa_ekko-lifnr.
append wa_out_ekko to it_out_ekko.
clear: wa_out_ekko, wa_ekko.
endloop.
else.
message 'Purchase Order doesn''t exist' type 'I'.
endif.
endform. " GET_EKKO
*&---------------------------------------------------------------------*
*& Form FIELDCAT_EKKO
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
form fieldcat_ekko .
clear wa_fcat_ekko.
refresh it_fcat_ekko.
if it_out_ekko is not initial.
data lv_col type i value 0.
lv_col = 1 + lv_col.
wa_fcat_ekko-col_pos = lv_col.
wa_fcat_ekko-fieldname = 'EBELN'.
wa_fcat_ekko-tabname = 'IT_OUT_EKKO'.
wa_fcat_ekko-seltext_l = 'Purchase Order'.
append wa_fcat_ekko to it_fcat_ekko.
clear wa_fcat_ekko.
lv_col = 1 + lv_col.
wa_fcat_ekko-col_pos = lv_col.
wa_fcat_ekko-fieldname = 'BUKRS'.
wa_fcat_ekko-tabname = 'IT_OUT_EKKO'.
wa_fcat_ekko-seltext_l = 'Company Code'.
append wa_fcat_ekko to it_fcat_ekko.
clear wa_fcat_ekko.
lv_col = 1 + lv_col.
wa_fcat_ekko-col_pos = lv_col.
wa_fcat_ekko-fieldname = 'LIFNR'.
wa_fcat_ekko-tabname = 'IT_OUT_EKKO'.
wa_fcat_ekko-seltext_l = 'Vendor'.
append wa_fcat_ekko to it_fcat_ekko.
clear wa_fcat_ekko.
endif.
endform. " FIELDCAT_EKKO
*&---------------------------------------------------------------------*
*& Form LAYOUT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
form layout .
wa_layout-zebra = 'X'.
wa_layout-colwidth_optimize = 'X'.
wa_layout-box_fieldname = 'SEL'.
endform. " LAYOUT
*&---------------------------------------------------------------------*
*& Form EVENT_EKKO
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
form event_ekko .
refresh it_event_ekko.
call function 'REUSE_ALV_EVENTS_GET'
* EXPORTING
* I_LIST_TYPE = 0
importing
et_events = it_event_ekko
exceptions
list_type_wrong = 1
others = 2.
if it_event_ekko is not initial.
clear wa_event_ekko.
read table it_event_ekko into wa_event_ekko
with key name = 'USER_COMMAND'.
if sy-subrc = 0.
wa_event_ekko-form = 'UCOMM_EKKO'.
modify it_event_ekko from wa_event_ekko
index sy-tabix transporting form.
endif.
clear wa_event_ekko.
read table it_event_ekko into wa_event_ekko
with key name = 'TOP_OF_PAGE'.
if sy-subrc = 0.
wa_event_ekko-form = 'TOP_EKKO'.
modify it_event_ekko from wa_event_ekko
index sy-tabix transporting form.
endif.
endif.
endform. " EVENT_EKKO
*&---------------------------------------------------------------------*
*& Form GRID_EKKO
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
form grid_ekko .
if it_out_ekko is not initial
and it_fcat_ekko is not initial.
call function 'REUSE_ALV_LIST_DISPLAY'
exporting
* I_INTERFACE_CHECK = ' '
* I_BYPASSING_BUFFER =
* I_BUFFER_ACTIVE = ' '
i_callback_program = v_prog
* i_callback_pf_status_set = ' '
i_callback_user_command = 'UCOMM_EKKO'
* I_STRUCTURE_NAME =
is_layout = wa_layout
it_fieldcat = it_fcat_ekko
* IT_EXCLUDING =
* IT_SPECIAL_GROUPS =
* IT_SORT =
* IT_FILTER =
* IS_SEL_HIDE =
* I_DEFAULT = 'X'
* I_SAVE = ' '
* IS_VARIANT =
it_events = it_event_ekko
* IT_EVENT_EXIT =
* IS_PRINT =
* IS_REPREP_ID =
* I_SCREEN_START_COLUMN = 0
* I_SCREEN_START_LINE = 0
* I_SCREEN_END_COLUMN = 0
* I_SCREEN_END_LINE = 0
* IR_SALV_LIST_ADAPTER =
* IT_EXCEPT_QINFO =
* I_SUPPRESS_EMPTY_DATA = ABAP_FALSE
* IMPORTING
* E_EXIT_CAUSED_BY_CALLER =
* ES_EXIT_CAUSED_BY_USER =
tables
t_outtab = it_out_ekko
exceptions
program_error = 1
others = 2.
endif.
endform. " GRID_EKKO
*&---------------------------------------------------------------------*
*& Form top_ekko
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
form top_ekko.
clear wa_top_ekko.
refresh it_top_ekko.
data date type char12.
call function 'CONVERT_DATE_TO_EXTERNAL'
exporting
date_internal = sy-datum
importing
date_external = date
exceptions
date_internal_is_invalid = 1
others = 2.
wa_top_ekko-typ = 'H'.
wa_top_ekko-info = 'Purchase Order Header'.
append wa_top_ekko to it_top_ekko.
clear wa_top_ekko.
wa_top_ekko-typ = 'S'.
wa_top_ekko-info = 'Report: '.
concatenate wa_top_ekko-info v_prog
into wa_top_ekko-info.
append wa_top_ekko to it_top_ekko.
clear wa_top_ekko.
wa_top_ekko-typ = 'S'.
wa_top_ekko-info = 'User Name: '.
concatenate wa_top_ekko-info v_name
into wa_top_ekko-info.
append wa_top_ekko to it_top_ekko.
clear wa_top_ekko.
wa_top_ekko-typ = 'S'.
wa_top_ekko-info = 'Date: '.
concatenate wa_top_ekko-info date
into wa_top_ekko-info.
append wa_top_ekko to it_top_ekko.
clear wa_top_ekko.
call function 'REUSE_ALV_COMMENTARY_WRITE'
exporting
it_list_commentary = it_top_ekko
* I_LOGO =
* I_END_OF_LIST_GRID =
* I_ALV_FORM =
.
endform. "top_ekko
*&---------------------------------------------------------------------*
*& Form CONVERSION_PO
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
form conversion_po .
clear v_ebeln.
call function 'CONVERSION_EXIT_ALPHA_INPUT'
exporting
input = v_selfield
importing
output = v_ebeln.
endform. " CONVERSION_PO
*&---------------------------------------------------------------------*
*& Form GET_EKPO
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
form get_ekpo .
if v_ebeln is not initial.
refresh it_ekpo.
select ebeln ebelp matnr werks lgort menge meins
from ekpo into table it_ekpo
where ebeln = v_ebeln.
if sy-subrc = 0.
sort it_ekpo by ebelp.
refresh it_out_ekpo.
loop at it_ekpo into wa_ekpo.
at new ebeln.
wa_out_ekpo-ebeln = wa_ekpo-ebeln.
endat.
wa_out_ekpo-ebelp = wa_ekpo-ebelp.
wa_out_ekpo-matnr = wa_ekpo-matnr.
wa_out_ekpo-werks = wa_ekpo-werks.
wa_out_ekpo-lgort = wa_ekpo-lgort.
wa_out_ekpo-menge = wa_ekpo-menge.
wa_out_ekpo-meins = wa_ekpo-meins.
append wa_out_ekpo to it_out_ekpo.
clear: wa_out_ekpo, wa_ekpo.
endloop.
endif.
endif.
endform. " GET_EKPO
*&---------------------------------------------------------------------*
*& Form FIELDCAT_EKPO
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
form fieldcat_ekpo .
clear wa_fcat_ekpo.
refresh it_fcat_ekpo.
if it_out_ekpo is not initial.
data lv_col type i value 0.
lv_col = 1 + lv_col.
wa_fcat_ekpo-col_pos = lv_col.
wa_fcat_ekpo-fieldname = 'EBELN'.
wa_fcat_ekpo-tabname = 'IT_OUT_EKPO'.
wa_fcat_ekpo-seltext_l = 'Purchase Order'.
append wa_fcat_ekpo to it_fcat_ekpo.
clear wa_fcat_ekpo.
lv_col = 1 + lv_col.
wa_fcat_ekpo-col_pos = lv_col.
wa_fcat_ekpo-fieldname = 'EBELP'.
wa_fcat_ekpo-tabname = 'IT_OUT_EKPO'.
wa_fcat_ekpo-seltext_l = 'PO Item'.
append wa_fcat_ekpo to it_fcat_ekpo.
clear wa_fcat_ekpo.
lv_col = 1 + lv_col.
wa_fcat_ekpo-col_pos = lv_col.
wa_fcat_ekpo-fieldname = 'MATNR'.
wa_fcat_ekpo-tabname = 'IT_OUT_EKPO'.
wa_fcat_ekpo-seltext_l = 'Material'.
append wa_fcat_ekpo to it_fcat_ekpo.
clear wa_fcat_ekpo.
lv_col = 1 + lv_col.
wa_fcat_ekpo-col_pos = lv_col.
wa_fcat_ekpo-fieldname = 'WERKS'.
wa_fcat_ekpo-tabname = 'IT_OUT_EKPO'.
wa_fcat_ekpo-seltext_l = 'Plant'.
append wa_fcat_ekpo to it_fcat_ekpo.
clear wa_fcat_ekpo.
lv_col = 1 + lv_col.
wa_fcat_ekpo-col_pos = lv_col.
wa_fcat_ekpo-fieldname = 'LGORT'.
wa_fcat_ekpo-tabname = 'IT_OUT_EKPO'.
wa_fcat_ekpo-seltext_l = 'Storage Location'.
append wa_fcat_ekpo to it_fcat_ekpo.
clear wa_fcat_ekpo.
lv_col = 1 + lv_col.
wa_fcat_ekpo-col_pos = lv_col.
wa_fcat_ekpo-fieldname = 'MENGE'.
wa_fcat_ekpo-tabname = 'IT_OUT_EKPO'.
wa_fcat_ekpo-seltext_l = 'PO Quantity'.
append wa_fcat_ekpo to it_fcat_ekpo.
clear wa_fcat_ekpo.
lv_col = 1 + lv_col.
wa_fcat_ekpo-col_pos = lv_col.
wa_fcat_ekpo-fieldname = 'MEINS'.
wa_fcat_ekpo-tabname = 'IT_OUT_EKPO'.
wa_fcat_ekpo-seltext_l = 'Unit of Measure'.
append wa_fcat_ekpo to it_fcat_ekpo.
clear wa_fcat_ekpo.
endif.
endform. " FIELDCAT_EKPO
*&---------------------------------------------------------------------*
*& Form EVENT_EKPO
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
form event_ekpo .
refresh it_event_ekpo.
call function 'REUSE_ALV_EVENTS_GET'
* EXPORTING
* I_LIST_TYPE = 0
importing
et_events = it_event_ekpo
exceptions
list_type_wrong = 1
others = 2.
if it_event_ekpo is not initial.
clear wa_event_ekpo.
read table it_event_ekpo into wa_event_ekpo
with key name = 'USER_COMMAND'.
if sy-subrc = 0.
wa_event_ekpo-form = 'UCOMM_EKPO'.
modify it_event_ekpo from wa_event_ekpo
index sy-tabix transporting form.
endif.
clear wa_event_ekpo.
read table it_event_ekpo into wa_event_ekpo
with key name = 'TOP_OF_PAGE'.
if sy-subrc = 0.
wa_event_ekpo-form = 'TOP_EKPO'.
modify it_event_ekpo from wa_event_ekpo
index sy-tabix transporting form.
endif.
endif.
endform. " EVENT_EKPO
*&---------------------------------------------------------------------*
*& Form GRID_EKPO
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
form grid_ekpo .
if it_out_ekpo is not initial
and it_fcat_ekpo is not initial.
call function 'REUSE_ALV_LIST_DISPLAY'
exporting
* I_INTERFACE_CHECK = ' '
* I_BYPASSING_BUFFER =
* I_BUFFER_ACTIVE = ' '
i_callback_program = v_prog
* I_CALLBACK_PF_STATUS_SET = ' '
i_callback_user_command = 'UCOMM_EKPO'
* I_STRUCTURE_NAME =
is_layout = wa_layout
it_fieldcat = it_fcat_ekpo
* IT_EXCLUDING =
* IT_SPECIAL_GROUPS =
* IT_SORT =
* IT_FILTER =
* IS_SEL_HIDE =
* I_DEFAULT = 'X'
* I_SAVE = ' '
* IS_VARIANT =
it_events = it_event_ekpo
* IT_EVENT_EXIT =
* IS_PRINT =
* IS_REPREP_ID =
* I_SCREEN_START_COLUMN = 0
* I_SCREEN_START_LINE = 0
* I_SCREEN_END_COLUMN = 0
* I_SCREEN_END_LINE = 0
* IR_SALV_LIST_ADAPTER =
* IT_EXCEPT_QINFO =
* I_SUPPRESS_EMPTY_DATA = ABAP_FALSE
* IMPORTING
* E_EXIT_CAUSED_BY_CALLER =
* ES_EXIT_CAUSED_BY_USER =
tables
t_outtab = it_out_ekpo
exceptions
program_error = 1
others = 2.
endif.
endform. " GRID_EKPO
*&---------------------------------------------------------------------*
*& Form top_ekpo
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
form top_ekpo.
clear wa_top_ekpo.
refresh it_top_ekpo.
wa_top_ekpo-typ = 'H'.
wa_top_ekpo-info = 'Purchase Order Item wise Display'.
append wa_top_ekpo to it_top_ekpo.
clear wa_top_ekpo.
call function 'REUSE_ALV_COMMENTARY_WRITE'
exporting
it_list_commentary = it_top_ekpo
* I_LOGO =
* I_END_OF_LIST_GRID =
* I_ALV_FORM =
.
endform. "top_ekpo
*&---------------------------------------------------------------------*
*& Form UCOMM_EKPO
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->P_R_UCOM text
* <--P_RS_SELFIELD text
*----------------------------------------------------------------------*
form ucomm_ekpo using r_ucomm_ekpo type sy-ucomm
changing rs_selfield_ekpo type slis_selfield.
case r_ucomm_ekpo.
when '&IC1'.
if rs_selfield_ekpo-fieldname = 'EBELN'.
set parameter id 'BES' field v_ebeln.
call transaction 'ME23N'.
else.
message 'Invalid Field' type 'S'.
endif.
endcase.
endform. " UCOMM_EKPO
OUTPUT:
Run the program. Get the output like below
Select and double click on PO number. You will get the
details of the selected PO number.