*&---------------------------------------------------------------------*
*& Report ZDEMO_PO_REPORT
*&---------------------------------------------------------------------*
*&
*&---------------------------------------------------------------------*
REPORT z120_demo_po_report.
TABLES : ekko, ekpo.
TYPES : BEGIN OF tp_list,
sel,
*from header table ekko
ebeln TYPE ebeln,
bsart TYPE ekko-bsart,
aedat TYPE erdat,
ernam TYPE ernam,
lifnr TYPE elifn,
"vendor name lfa1
name1 TYPE name1_gp,
"from item table ekpo
ebelp TYPE ebelp,
txz01 TYPE txz01,
matnr TYPE matnr,
menge TYPE bstmg,
meins TYPE bstme,
netpr TYPE bprei,
netwr TYPE bwert,
END OF tp_list,
begin of tp_ernam,
ernam type ekko-ernam,
end of tp_ernam.
data : gt_list type STANDARD TABLE OF tp_list,
gs_list type tp_list,
gt_lfa1 type STANDARD TABLE OF lfa1,
gs_lfa1 type lfa1,
gt_ernam type STANDARD TABLE OF tp_ernam,
gs_ernam type tp_ernam.
data : it_return like ddshretval occurs 0 WITH HEADER LINE.
CONSTANTS : c_bstyp type ekko-bstyp VALUE 'F'.
"alv fieldcatalog
data : gt_fcat type lvc_t_fcat,
gs_fcat like LINE OF gt_fcat,
gs_layout type lvc_s_layo,
gs_variant type disvariant,
gs_grid type lvc_s_glay,
gv_cnt type i.
data : t_header type slis_t_listheader,
wa_header type slis_listheader,
todays_dt(10),
todays_time(10).
SELECTION-SCREEN begin of BLOCK b1 WITH FRAME TITLE text-001.
select-OPTIONS : s_ebeln for ekko-ebeln,
s_aedat for ekko-aedat,
s_bsart for ekko-bsart MODIF ID DIS,
s_ernam for ekko-ernam NO INTERVALS NO-EXTENSION,
s_matnr for ekpo-matnr.
SELECTION-SCREEN skip.
PARAMETERS : r_r1 RADIOBUTTON GROUP grp USER-COMMAND cmd,
r_r2 RADIOBUTTON GROUP grp,
r_r3 RADIOBUTTON GROUP grp.
SELECTION-SCREEN end of BLOCK b1.
INITIALIZATION.
s_aedat-sign = 'I'.
s_aedat-option = 'BT'.
s_aedat-low = sy-datum - 365.
s_aedat-high = sy-datum.
append s_aedat.
if r_r1 is INITIAL and r_r2 is INITIAL and r_r3 is INITIAL.
r_r1 = 'X'.
endif.
AT SELECTION-SCREEN.
* if s_ernam-low is INITIAL.
* MESSAGE 'Enter the created By' TYPE 'E'.
* endif.
at SELECTION-SCREEN OUTPUT.
if r_r1 is NOT INITIAL.
clear : s_bsart[].
elseif r_r2 is NOT INITIAL.
clear : s_bsart[].
s_bsart-sign = 'I'.
s_bsart-option = 'EQ'.
s_bsart-low = 'NB'.
APPEND s_bsart.
elseif r_r3 is NOT INITIAL.
clear : s_bsart[].
s_bsart-sign = 'I'.
s_bsart-option = 'EQ'.
s_bsart-low = 'FO'.
APPEND s_bsart.
s_bsart-sign = 'I'.
s_bsart-option = 'EQ'.
s_bsart-low = 'UB'.
APPEND s_bsart.
endif.
loop at SCREEN.
if r_r1 is INITIAL and screen-group1 = 'DIS'.
screen-input = 0.
MODIFY SCREEN.
endif.
endloop.
at SELECTION-SCREEN ON VALUE-REQUEST FOR s_ernam-low.
perform get_users.
START-OF-SELECTION .
perform get_data.
perform build_data.
perform display_data.
end-of-SELECTION.
*&---------------------------------------------------------------------*
*& Form get_data
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& --> p1 text
*& <-- p2 text
*&---------------------------------------------------------------------*
FORM get_data .
select a~ebeln a~bsart a~aedat a~ernam a~lifnr
b~ebelp b~txz01 b~matnr b~menge b~meins b~netpr b~netwr
from ekko as a INNER JOIN ekpo as b on a~ebeln = b~ebeln
into CORRESPONDING FIELDS OF TABLE gt_list
WHERE a~ebeln in s_ebeln
and a~bsart in s_bsart
and a~aedat in s_aedat
and a~bstyp = c_bstyp
and a~ernam in s_ernam
and b~matnr in s_matnr.
sort gt_list by lifnr.
if gt_list[] is NOT INITIAL.
select * from lfa1 into TABLE gt_lfa1
FOR ALL ENTRIES IN gt_list WHERE lifnr = gt_list-lifnr.
ENDIF.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form build_data
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& --> p1 text
*& <-- p2 text
*&---------------------------------------------------------------------*
FORM build_data .
loop at gt_list into gs_list.
clear : gs_lfa1.
read TABLE gt_lfa1 into gs_lfa1 with key lifnr = gs_list-lifnr.
if sy-subrc = 0.
gs_list-name1 = gs_lfa1-name1.
modify gt_list from gs_list TRANSPORTING name1.
endif.
clear : gs_list.
endloop.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form display_data
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& --> p1 text
*& <-- p2 text
*&---------------------------------------------------------------------*
FORM display_data .
clear : gv_cnt, gt_fcat[], gs_fcat.
gs_layout-col_opt = 'X'.
gs_layout-box_fname = 'SEL'.
gs_variant-report = sy-repid.
gv_cnt = gv_cnt + 1.
gs_fcat-col_pos = gv_cnt.
gs_fcat-fieldname = 'EBELN'.
gs_fcat-coltext = 'PO Number'.
append gs_fcat to gt_fcat.
clear : gs_fcat.
gv_cnt = gv_cnt + 1.
gs_fcat-col_pos = gv_cnt.
gs_fcat-fieldname = 'AEDAT'.
gs_fcat-coltext = 'PO Date'.
append gs_fcat to gt_fcat.
clear : gs_fcat.
gv_cnt = gv_cnt + 1.
gs_fcat-col_pos = gv_cnt.
gs_fcat-fieldname = 'ERNAM'.
gs_fcat-coltext = 'Created By'.
append gs_fcat to gt_fcat.
clear : gs_fcat.
gv_cnt = gv_cnt + 1.
gs_fcat-col_pos = gv_cnt.
gs_fcat-fieldname = 'BSART'.
gs_fcat-coltext = 'Doc. Type'.
append gs_fcat to gt_fcat.
clear : gs_fcat.
gv_cnt = gv_cnt + 1.
gs_fcat-col_pos = gv_cnt.
gs_fcat-fieldname = 'LIFNR'.
gs_fcat-coltext = 'Vendor ID'.
gs_fcat-no_zero = 'X'.
append gs_fcat to gt_fcat.
clear : gs_fcat.
gv_cnt = gv_cnt + 1.
gs_fcat-col_pos = gv_cnt.
gs_fcat-fieldname = 'NAME1'.
gs_fcat-coltext = 'Vendor Name'.
append gs_fcat to gt_fcat.
clear : gs_fcat.
gv_cnt = gv_cnt + 1.
gs_fcat-col_pos = gv_cnt.
gs_fcat-fieldname = 'EBELP'.
gs_fcat-coltext = 'Line item'.
append gs_fcat to gt_fcat.
clear : gs_fcat.
gv_cnt = gv_cnt + 1.
gs_fcat-col_pos = gv_cnt.
gs_fcat-fieldname = 'TXZ01'.
gs_fcat-coltext = 'Material text'.
append gs_fcat to gt_fcat.
clear : gs_fcat.
gv_cnt = gv_cnt + 1.
gs_fcat-col_pos = gv_cnt.
gs_fcat-fieldname = 'MATNR'.
gs_fcat-coltext = 'Material'.
gs_fcat-no_zero = 'X'.
append gs_fcat to gt_fcat.
clear : gs_fcat.
gv_cnt = gv_cnt + 1.
gs_fcat-col_pos = gv_cnt.
gs_fcat-fieldname = 'MENGE'.
gs_fcat-coltext = 'Quantity'.
append gs_fcat to gt_fcat.
clear : gs_fcat.
gv_cnt = gv_cnt + 1.
gs_fcat-col_pos = gv_cnt.
gs_fcat-fieldname = 'MEINS'.
gs_fcat-coltext = 'UOM'.
append gs_fcat to gt_fcat.
clear : gs_fcat.
gv_cnt = gv_cnt + 1.
gs_fcat-col_pos = gv_cnt.
gs_fcat-fieldname = 'NETPR'.
gs_fcat-coltext = 'Net Price'.
append gs_fcat to gt_fcat.
clear : gs_fcat.
gv_cnt = gv_cnt + 1.
gs_fcat-col_pos = gv_cnt.
gs_fcat-fieldname = 'NETWR'.
gs_fcat-coltext = 'Total Amount'.
append gs_fcat to gt_fcat.
clear : gs_fcat.
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY_LVC'
EXPORTING
* I_INTERFACE_CHECK = ' '
* I_BYPASSING_BUFFER =
* I_BUFFER_ACTIVE =
I_CALLBACK_PROGRAM = sy-repid
* I_CALLBACK_PF_STATUS_SET = ' '
* I_CALLBACK_USER_COMMAND = ' '
I_CALLBACK_TOP_OF_PAGE = 'TOP-OF-PAGE'
* I_CALLBACK_HTML_TOP_OF_PAGE = ' '
* I_CALLBACK_HTML_END_OF_LIST = ' '
* I_STRUCTURE_NAME =
* I_BACKGROUND_ID = ' '
* I_GRID_TITLE =
* I_GRID_SETTINGS =
IS_LAYOUT_LVC = gs_layout
IT_FIELDCAT_LVC = gt_fcat[]
* IT_EXCLUDING =
* IT_SPECIAL_GROUPS_LVC =
* IT_SORT_LVC =
* IT_FILTER_LVC =
* IT_HYPERLINK =
* IS_SEL_HIDE =
I_DEFAULT = 'X'
I_SAVE = 'A'
IS_VARIANT = gs_variant
* IT_EVENTS =
* IT_EVENT_EXIT =
* IS_PRINT_LVC =
* IS_REPREP_ID_LVC =
* I_SCREEN_START_COLUMN = 0
* I_SCREEN_START_LINE = 0
* I_SCREEN_END_COLUMN = 0
* I_SCREEN_END_LINE = 0
* I_HTML_HEIGHT_TOP =
* I_HTML_HEIGHT_END =
* IT_ALV_GRAPHICS =
* IT_EXCEPT_QINFO_LVC =
* IR_SALV_FULLSCREEN_ADAPTER =
* IMPORTING
* E_EXIT_CAUSED_BY_CALLER =
* ES_EXIT_CAUSED_BY_USER =
TABLES
t_outtab = gt_list[]
EXCEPTIONS
PROGRAM_ERROR = 1
OTHERS = 2
.
IF sy-subrc <> 0.
* Implement suitable error handling here
ENDIF.
ENDFORM.
form TOP-OF-PAGE.
write : sy-datum to todays_dt.
write : sy-uzeit to todays_time.
clear : t_header[].
wa_header-typ = 'H'.
wa_header-info = 'Purchase order details'.
append wa_header to t_header.
clear : wa_header.
wa_header-typ = 'S'.
wa_header-key = 'Report run date'.
wa_header-info = todays_dt.
append wa_header to t_header.
clear : wa_header.
wa_header-typ = 'S'.
wa_header-key = 'Report run time'.
wa_header-info = todays_time.
append wa_header to t_header.
clear : wa_header.
CALL FUNCTION 'REUSE_ALV_COMMENTARY_WRITE'
EXPORTING
it_list_commentary = t_header
* I_LOGO = 'ENJOYSAP_LOGO'
I_LOGO = 'ZKALVLOGO'
* I_END_OF_LIST_GRID =
* I_ALV_FORM =
.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form get_users
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& --> p1 text
*& <-- p2 text
*&---------------------------------------------------------------------*
FORM get_users .
clear : gt_ernam[].
gs_ernam-ernam = 'ZAFARK'.
append gs_ernam to gt_ernam.
clear : gs_ernam.
gs_ernam-ernam = 'DEVELOPER'.
append gs_ernam to gt_ernam.
clear : gs_ernam.
gs_ernam-ernam = 'INTEGRATION'.
append gs_ernam to gt_ernam.
clear : gs_ernam.
CALL FUNCTION 'F4IF_INT_TABLE_VALUE_REQUEST'
EXPORTING
* DDIC_STRUCTURE = ' '
retfield = 'ERNAM'
* PVALKEY = ' '
* DYNPPROG = sy-repid
* DYNPNR = ' '
* DYNPROFIELD = ' '
* STEPL = 0
* WINDOW_TITLE =
* VALUE = ' '
VALUE_ORG = 'S'
* MULTIPLE_CHOICE = ' '
* DISPLAY = ' '
* CALLBACK_PROGRAM = ' '
* CALLBACK_FORM = ' '
* CALLBACK_METHOD =
* MARK_TAB =
* IMPORTING
* USER_RESET =
tables
value_tab = gt_ernam
* FIELD_TAB =
RETURN_TAB = it_return
* DYNPFLD_MAPPING =
EXCEPTIONS
PARAMETER_ERROR = 1
NO_VALUES_FOUND = 2
OTHERS = 3
.
IF sy-subrc <> 0.
* Implement suitable error handling here
ENDIF.
WRITE it_return-fieldval to s_ernam-low.
refresh gt_ernam.
ENDFORM.