‎2007 Aug 02 4:27 PM
Hi Foks,
I am new to ALV. Could you please suggess me how can I use it and get me some basic documentation please.
thanks in advance.
make sure update points
sekhar
‎2007 Aug 02 4:38 PM
HI,
Find the code samples from basic to interactive reports here....
ALV ALL IN ONE
REPORT ZMK_ALLINONE_ALV .
&----
*& Program for displaying data using function modules : *
*& REUSE_ALV_LIST_DISPLAY *
*& REUSE_ALV_POPUP_TO_SELECT *
*& REUSE_ALV_GRID_DISPLAY *
*& *
&----
TABLES VBAK.
DATA it_vbak LIKE VBAK OCCURS 0 WITH HEADER LINE.
SELECTION-SCREEN uline.
PARAMETERS: ALV1 RADIOBUTTON GROUP ALV, "REUSE_ALV_LIST_DISPLAY
ALV2 RADIOBUTTON GROUP ALV, "REUSE_ALV_POPUP_TO_SELECT
ALV3 RADIOBUTTON GROUP ALV, "REUSE_ALV_GRID_DISPLAY
ALV4 RADIOBUTTON GROUP ALV. " NORMAL DISPLAY
SELECTION-SCREEN uline.
SELECT * FROM VBAK
INTO CORRESPONDING FIELDS OF TABLE it_vbak
UP TO 10 ROWS.
IF ALV1 = 'X'.
PERFORM ALV_FUNC1.
ELSEIF ALV2 = 'X'.
PERFORM ALV_FUNC2.
ELSEIF ALV3 = 'X'.
PERFORM ALV_FUNC3.
ELSEIF ALV4 = 'X'.
PERFORM NORM.
ENDIF.
&----
*& Form ALV_FUNC1
&----
text
----
--> p1 text
<-- p2 text
----
FORM ALV_FUNC1 .
CALL FUNCTION 'REUSE_ALV_LIST_DISPLAY'
EXPORTING
I_STRUCTURE_NAME = 'VBAK'
TABLES
T_OUTTAB = it_vbak
EXCEPTIONS
PROGRAM_ERROR = 1
OTHERS = 2
.
IF SY-SUBRC <> 0.
MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
ENDFORM. " ALV_FUNC1
&----
*& Form ALV_FUNC2
&----
text
----
--> p1 text
<-- p2 text
----
FORM ALV_FUNC2 .
CALL FUNCTION 'REUSE_ALV_POPUP_TO_SELECT'
EXPORTING
I_TITLE = 'SALES ORDER INFO'
I_ZEBRA = 'X'
I_TABNAME = 1
I_STRUCTURE_NAME = 'vbak'
TABLES
T_OUTTAB = it_vbak
EXCEPTIONS
PROGRAM_ERROR = 1
OTHERS = 2
.
IF SY-SUBRC <> 0.
MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
ENDFORM. " ALV_FUNC2
&----
*& Form ALV_FUNC3
&----
text
----
--> p1 text
<-- p2 text
----
FORM ALV_FUNC3 .
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
EXPORTING
I_STRUCTURE_NAME = 'vbak'
I_GRID_TITLE = 'SALES ORDER INFO'
TABLES
T_OUTTAB = it_vbak
EXCEPTIONS
PROGRAM_ERROR = 1
OTHERS = 2
.
IF SY-SUBRC <> 0.
MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
ENDFORM. " ALV_FUNC3
&----
*& Form NORM
&----
text
----
--> p1 text
<-- p2 text
----
FORM NORM .
format intensified.
skip 1.
WRITE: /'SALES DOC.',
' Created on ',
' Time',
' Created by',
' Valid from ',
' Sold-to party'.
format intensified off.
skip 2.
LOOP AT it_vbak.
write: / it_vbak-vbeln,' ',
it_vbak-erdat,' ',
it_vbak-erzet,' ',
it_vbak-ERNAM,' ',
it_vbak-ANGDT,' ',
it_vbak-KUNNR.
endloop.
ENDFORM. " NORM
REPORT ZMK_SHIPMENT_ALV
no standard page heading
line-size 105
line-count 50(5)
message-id zz.
**********************************
TABLES *
**********************************
tables : vttk, "Shipment Header
vttp, " Shipment Item
lips. " Delivary Item
**********************************
***TYPE-POOLS *
**********************************
type-pools : slis.
**********************************
*WORK AREAS *
**********************************
Work area for field catalog table
data : wa_fldcat type slis_fieldcat_alv.
Work area for Events table
data : wa_events type slis_alv_event.
Work area for layout.
data : wa_layout type slis_layout_alv.
***********************************
*INTERNAL TABLES *
***********************************
Shimpment Details
data : begin of itab occurs 0,
tknum like vttk-tknum,
shtyp like vttk-shtyp,
tpnum like vttp-tpnum,
vbeln like vttp-vbeln,
end of itab.
data : begin of itab1 occurs 0,
vbeln like lips-vbeln,
posnr like lips-posnr,
matnr like lips-matnr,
lfimg like lips-lfimg,
meins like lips-meins,
end of itab1.
For field catalog table
data : it_fldcats type slis_t_fieldcat_alv.
For Events table
data : it_event type slis_t_event.
For layout.
data : it_layout type slis_layout_alv.
For field catalog table
data : it_fldcats1 type slis_t_fieldcat_alv.
For Events table
data : it_event1 type slis_t_event.
data : v_repid like sy-repid.
*Data Declaration
******************
data: v_index type sy-index,
v_vbeln like lips-vbeln.
*SELECT-OPTIONS
****************
selection-screen begin of block b with frame title text-001.
select-options : s_tknum for vttk-tknum .
selection-screen end of block b.
*INITIALIZATION
****************
initialization.
v_repid = sy-repid.
*START-OF-SELCTION
********************
start-of-selection.
perform populate-data.
sort itab by tknum.
top-of-page.
write : 'Shipment wise Delivary Report'.
end-of-selection.
perform build-fieldcatalog.
perform modify-fieldcatalog.
perform build-events.
perform modify-events.
perform set-layout.
perform set-pfstatus.
perform list-display.
&----
*& Form populate-data
Retrives the Shipment data depending on the selection criteria *
&----
FORM populate-data.
select vttk~tknum
vttk~shtyp
vttp~tpnum
vttp~vbeln
into table itab
from vttk
join vttp
on vttptknum = vttktknum
where vttk~tknum in s_tknum.
if sy-subrc <> 0.
message e999 with 'NO DATA FOUND'.
exit.
endif.
ENDFORM. " populate-data
&----
*& Form build-fieldcatalog
&----
text
----
--> p1 text
<-- p2 text
----
form build-fieldcatalog.
call function 'REUSE_ALV_FIELDCATALOG_MERGE'
exporting
i_program_name = v_repid
i_internal_tabname = 'ITAB'
I_STRUCTURE_NAME =
I_CLIENT_NEVER_DISPLAY = 'X'
i_inclname = v_repid
I_BYPASSING_BUFFER =
I_BUFFER_ACTIVE =
changing
ct_fieldcat = it_fldcats
exceptions
inconsistent_interface = 1
program_error = 2
others = 3
.
if sy-subrc <> 0.
MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
endif.
endform. " BUILD-FIELDCATALOG
&----
*& Form build-events
&----
text
----
--> p1 text
<-- p2 text
----
FORM build-events.
CALL FUNCTION 'REUSE_ALV_EVENTS_GET'
EXPORTING
I_LIST_TYPE = 0
IMPORTING
ET_EVENTS = it_event
EXCEPTIONS
LIST_TYPE_WRONG = 1
OTHERS = 2
.
IF SY-SUBRC <> 0.
MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
ENDFORM. " build-events
&----
*& Form set-layout
&----
text
----
--> p1 text
<-- p2 text
----
FORM set-layout.
wa_layout-zebra = 'X'.
wa_layout-colwidth_optimize = 'X'.
wa_layout-no_colhead = space.
wa_layout-no_vline = space.
ENDFORM. " set-layout
&----
*& Form list-display
&----
text
----
--> p1 text
<-- p2 text
----
FORM list-display.
CALL FUNCTION 'REUSE_ALV_LIST_DISPLAY'
EXPORTING
I_INTERFACE_CHECK = ' '
I_BYPASSING_BUFFER =
I_BUFFER_ACTIVE = ' '
I_CALLBACK_PROGRAM = v_repid
I_CALLBACK_PF_STATUS_SET = ' '
I_CALLBACK_USER_COMMAND = 'USER_COMMAND'
I_STRUCTURE_NAME =
IS_LAYOUT = wa_layout
IT_FIELDCAT = it_fldcats
IT_EXCLUDING =
IT_SPECIAL_GROUPS =
IT_SORT =
IT_FILTER =
IS_SEL_HIDE =
I_DEFAULT = 'X'
I_SAVE = ' '
IS_VARIANT =
IT_EVENTS = it_event
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
IMPORTING
E_EXIT_CAUSED_BY_CALLER =
ES_EXIT_CAUSED_BY_USER =
TABLES
T_OUTTAB = itab
EXCEPTIONS
PROGRAM_ERROR = 1
OTHERS = 2
.
IF SY-SUBRC <> 0.
MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
ENDFORM. " list-display
&----
*& Form modify-fieldcatalog
&----
text
----
--> p1 text
<-- p2 text
----
FORM modify-fieldcatalog.
loop at it_fldcats into wa_fldcat.
case wa_fldcat-fieldname.
when 'TKNUM'.
wa_fldcat-seltext_l = 'Ship No.'.
wa_fldcat-col_pos = 1.
wa_fldcat-ddictxt = 'L'.
when 'SHTYP'.
wa_fldcat-seltext_l = 'Ship Type'.
wa_fldcat-col_pos = 2.
wa_fldcat-ddictxt = 'L'.
when 'TPNUM'.
wa_fldcat-seltext_l = 'Item No.'.
wa_fldcat-col_pos = 3.
wa_fldcat-ddictxt = 'L'.
when 'VBELN'.
wa_fldcat-seltext_l = 'Delivary No.'.
wa_fldcat-hotspot = 'X'.
wa_fldcat-emphasize = 'C311'.
wa_fldcat-col_pos = 4.
wa_fldcat-ddictxt = 'L'.
endcase.
modify it_fldcats from wa_fldcat.
endloop.
ENDFORM. " modify-fieldcatalog
&----
*& Form modify-events
&----
text
----
--> p1 text
<-- p2 text
----
form modify-events.
read table it_event with key name =
slis_ev_top_of_page into wa_events.
if sy-subrc = 0.
wa_events-form = 'HEADER-OF-REPORT'.
modify it_event from wa_events index sy-tabix.
clear wa_events.
endif.
read table it_event with key name =
slis_ev_end_of_page into wa_events.
if sy-subrc = 0.
wa_events-form = 'FOOTER-OF-REPORT'.
modify it_event from wa_events index sy-tabix.
clear wa_events.
endif.
endform. " modify-events
&----
*& Form HEADER-OF-REPORT
&----
text
----
--> p1 text
<-- p2 text
----
FORM HEADER-OF-REPORT.
write : 'Shipment Wise Delivary Report'.
ENDFORM. " HEADER-OF-REPORT
&----
*& Form FOOTER-OF-REPORT
&----
text
----
--> p1 text
<-- p2 text
----
FORM FOOTER-OF-REPORT.
write : 'End of Report'.
ENDFORM. " FOOTER-OF-REPORT
&----
*& Form USER_COMMAND
&----
User command for Calling Transaction VT03N, Execute and Refresh
----
FORM user_command USING p_ucomm LIKE sy-ucomm
p_selfield TYPE slis_selfield.
V_INDEX = P_SELFIELD-TABINDEX. " holds the selected table index
CASE p_ucomm.
WHEN '&IC1'.
IF p_selfield-fieldname eq 'VBELN'.
perform secondary_list.
ENDIF.
ENDCASE.
ENDFORM. " USER_COMMAND
&----
*& Form secondary_list
&----
text
----
--> p1 text
<-- p2 text
----
FORM secondary_list.
perform get_data1.
perform build-fieldcatalog1.
perform modify-fieldcatalog1.
perform build-events1.
perform modify-events1.
perform set-layout.
perform set-pfstatus.
perform list-display1.
ENDFORM. " secondary_list
&----
*& Form build-fieldcatalog1
&----
text
----
--> p1 text
<-- p2 text
----
FORM build-fieldcatalog1.
call function 'REUSE_ALV_FIELDCATALOG_MERGE'
exporting
i_program_name = v_repid
i_internal_tabname = 'ITAB1'
I_STRUCTURE_NAME =
I_CLIENT_NEVER_DISPLAY = 'X'
i_inclname = v_repid
I_BYPASSING_BUFFER =
I_BUFFER_ACTIVE =
changing
ct_fieldcat = it_fldcats1
exceptions
inconsistent_interface = 1
program_error = 2
others = 3
.
if sy-subrc <> 0.
MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
endif.
ENDFORM. " build-fieldcatalog1
&----
*& Form modify-fieldcatalog1
&----
text
----
--> p1 text
<-- p2 text
----
FORM modify-fieldcatalog1.
loop at it_fldcats into wa_fldcat.
case wa_fldcat-fieldname.
when 'VBELN'.
wa_fldcat-seltext_l = 'Delivary No.'.
wa_fldcat-col_pos = 1.
wa_fldcat-ddictxt = 'L'.
when 'POSNR'.
wa_fldcat-seltext_l = 'Item No'.
wa_fldcat-col_pos = 2.
wa_fldcat-ddictxt = 'L'.
when 'MATNR'.
wa_fldcat-seltext_l = 'Material'.
wa_fldcat-col_pos = 3.
wa_fldcat-ddictxt = 'L'.
when 'LFIMG'.
wa_fldcat-seltext_l = 'Quantity'.
wa_fldcat-col_pos = 4.
wa_fldcat-ddictxt = 'L'.
when 'MEINS'.
wa_fldcat-seltext_l = 'Unit of Measure'.
wa_fldcat-col_pos = 5.
wa_fldcat-ddictxt = 'L'.
endcase.
modify it_fldcats from wa_fldcat.
endloop.
ENDFORM. " modify-fieldcatalog1
&----
*& Form build-events1
&----
text
----
--> p1 text
<-- p2 text
----
FORM build-events1.
CALL FUNCTION 'REUSE_ALV_EVENTS_GET'
EXPORTING
I_LIST_TYPE = 0
IMPORTING
ET_EVENTS = it_event1
EXCEPTIONS
LIST_TYPE_WRONG = 1
OTHERS = 2
.
IF SY-SUBRC <> 0.
MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
ENDFORM. " build-events1
&----
*& Form modify-events1
&----
text
----
--> p1 text
<-- p2 text
----
FORM modify-events1.
read table it_event1 with key name =
slis_ev_top_of_page into wa_events.
if sy-subrc = 0.
wa_events-form = 'HEADER_OF_REPORT_2'.
modify it_event1 from wa_events index sy-tabix.
clear wa_events.
endif.
ENDFORM. " modify-events1
&----
*& Form list-display1
&----
text
----
--> p1 text
<-- p2 text
----
FORM list-display1.
*CALL FUNCTION 'REUSE_ALV_LIST_DISPLAY'
EXPORTING
I_INTERFACE_CHECK = ' '
I_BYPASSING_BUFFER =
I_BUFFER_ACTIVE = ' '
I_CALLBACK_PROGRAM = v_repid
I_CALLBACK_PF_STATUS_SET = ' '
I_CALLBACK_USER_COMMAND = 'USER_COMMAND'
I_STRUCTURE_NAME =
IS_LAYOUT = wa_layout
IT_FIELDCAT = it_fldcats1
IT_EXCLUDING =
IT_SPECIAL_GROUPS =
IT_SORT =
IT_FILTER =
IS_SEL_HIDE =
I_DEFAULT = 'X'
I_SAVE = ' '
IS_VARIANT =
IT_EVENTS = it_event1
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
IMPORTING
E_EXIT_CAUSED_BY_CALLER =
ES_EXIT_CAUSED_BY_USER =
TABLES
T_OUTTAB = itab1
EXCEPTIONS
PROGRAM_ERROR = 1
OTHERS = 2
.
*IF SY-SUBRC <> 0.
MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
*ENDIF.
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
EXPORTING
I_INTERFACE_CHECK = ' '
I_BYPASSING_BUFFER =
I_BUFFER_ACTIVE = ' '
I_CALLBACK_PROGRAM = v_repid
I_CALLBACK_PF_STATUS_SET = ' '
I_CALLBACK_USER_COMMAND = ' '
I_CALLBACK_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 = wa_layout
IT_FIELDCAT = it_fldcats1
IT_EXCLUDING =
IT_SPECIAL_GROUPS =
IT_SORT =
IT_FILTER =
IS_SEL_HIDE =
I_DEFAULT = 'X'
I_SAVE = ' '
IS_VARIANT =
IT_EVENTS = it_event1
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
IT_ALV_GRAPHICS =
IT_ADD_FIELDCAT =
IT_HYPERLINK =
I_HTML_HEIGHT_TOP =
I_HTML_HEIGHT_END =
IT_EXCEPT_QINFO =
IMPORTING
E_EXIT_CAUSED_BY_CALLER =
ES_EXIT_CAUSED_BY_USER =
TABLES
T_OUTTAB = itab1
EXCEPTIONS
PROGRAM_ERROR = 1
OTHERS = 2
.
IF SY-SUBRC <> 0.
MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
ENDFORM. " list-display1
&----
*& Form get_data1
&----
text
----
--> p1 text
<-- p2 text
----
FORM get_data1.
READ TABLE itab INDEX V_INDEX.
v_vbeln = itab-vbeln.
select vbeln
posnr
matnr
lfimg
meins
from lips
into table itab1
where vbeln eq v_vbeln.
ENDFORM. " get_data1
&----
*& Form header_of_report_2
&----
text
----
--> p1 text
<-- p2 text
----
FORM header_of_report_2.
write: 'Delivary item list'.
ENDFORM. " header_of_report_2
REPORT ZMK_PO_ALV .
*******************
TABLES *
*******************
tables : ekko,
ekpo.
********************
TYPES
********************
type-pools: slis.
********************
INTERNAL TABLES
********************
data: begin of itab occurs 0,
EBELN like ekko-ebeln, "Purchasing Document Number
BUKRS like ekko-bukrs, "Company Code
BSTYP like ekko-bstyp, "Purchasing document category
STATU like ekko-statu, "Status of purchasing document
AEDAT like ekko-aedat, "Date on which the record was created
LIFNR like ekko-lifnr, "Vendor's account number
end of itab.
data: begin of itab1 occurs 0,
EBELN like ekpo-ebeln,
EBELP like ekpo-ebelp,
MATNR like ekpo-matnr,
MATKL like ekpo-matkl,
MENGE like ekpo-menge,
end of itab1.
data: begin of itab2 occurs 0,
LIFNR like lfa1-lifnr,
NAME1 like lfa1-name1,
ADRNR like lfa1-adrnr,
ORT01 like lfa1-ort01,
ORT02 like lfa1-ort02,
PFACH like lfa1-pfach,
end of itab2.
**************************************
ALV Specific Tables and Structures
**************************************
data : v_repid like sy-repid,
v_index like sy-index,
v_eblen like ekko-ebeln,
v_lifnr like ekko-lifnr.
**************************************
ALV Specific Tables and Structures
**************************************
Work area for field catalog table
data : wa_fldcat type slis_fieldcat_alv.
data: wa_events type slis_alv_event.
data: wa_layout type slis_layout_alv.
data: it_fldcat type slis_t_fieldcat_alv.
data: it_events type slis_t_event.
data: it_fldcat1 type slis_t_fieldcat_alv.
data: it_events1 type slis_t_event.
data: it_fldcat2 type slis_t_fieldcat_alv.
data: it_events2 type slis_t_event.
*************************************
Selection Screen
***************************************
selection-screen begin of block b with frame title text-001.
select-options : s_ebeln for ekko-ebeln .
selection-screen end of block b.
**************************************
Start of Selection
*****************************************
initialization.
v_repid = sy-repid.
**************************************
Start of Selection
*****************************************
start-of-selection.
perform get_data.
**************************************
End of Selection
*****************************************
end-of-selection.
perform build_fldcatalog.
perform modify_fldcatalog.
perform build_events.
perform modify_events.
perform build_layout.
perform list_display.
&----
*& Form get_data
&----
text
----
--> p1 text
<-- p2 text
----
FORM get_data.
select
EBELN
BUKRS
BSTYP
STATU
AEDAT
LIFNR
from ekko
into table itab
where ebeln in s_ebeln.
ENDFORM. " get_data
&----
*& Form build_fldcatalog
&----
text
----
--> p1 text
<-- p2 text
----
FORM build_fldcatalog.
CALL FUNCTION 'REUSE_ALV_FIELDCATALOG_MERGE'
EXPORTING
I_PROGRAM_NAME = v_repid
I_INTERNAL_TABNAME = 'ITAB'
I_STRUCTURE_NAME =
I_CLIENT_NEVER_DISPLAY = 'X'
I_INCLNAME = v_repid
I_BYPASSING_BUFFER =
I_BUFFER_ACTIVE =
CHANGING
CT_FIELDCAT = it_fldcat
EXCEPTIONS
INCONSISTENT_INTERFACE = 1
PROGRAM_ERROR = 2
OTHERS = 3
.
IF SY-SUBRC <> 0.
MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
ENDFORM. " build_fldcatalog
&----
*& Form build_events
&----
text
----
--> p1 text
<-- p2 text
----
FORM build_events.
CALL FUNCTION 'REUSE_ALV_EVENTS_GET'
EXPORTING
I_LIST_TYPE = 0
IMPORTING
ET_EVENTS = it_events
EXCEPTIONS
LIST_TYPE_WRONG = 1
OTHERS = 2
.
IF SY-SUBRC <> 0.
MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
ENDFORM. " build_events
&----
*& Form modify_events
&----
text
----
--> p1 text
<-- p2 text
----
FORM modify_events.
read table it_events with key name =
slis_ev_top_of_page into wa_events.
if sy-subrc eq 0.
wa_events-form = 'HEADER-OF-REPORT'.
modify it_events from wa_events index sy-tabix.
endif.
ENDFORM. " modify_events
&----
*& Form build_layout
&----
text
----
--> p1 text
<-- p2 text
----
FORM build_layout.
wa_layout-zebra = 'X'.
wa_layout-colwidth_optimize = 'X'.
wa_layout-no_colhead = space.
wa_layout-no_vline = space.
.
ENDFORM. " build_layout
&----
*& Form list_display
&----
text
----
--> p1 text
<-- p2 text
----
FORM list_display.
CALL FUNCTION 'REUSE_ALV_LIST_DISPLAY'
EXPORTING
I_INTERFACE_CHECK = ' '
I_BYPASSING_BUFFER =
I_BUFFER_ACTIVE = ' '
I_CALLBACK_PROGRAM = v_repid
I_CALLBACK_PF_STATUS_SET = ' '
I_CALLBACK_USER_COMMAND = 'USER_COMMAND'
I_STRUCTURE_NAME =
IS_LAYOUT = wa_layout
IT_FIELDCAT = it_fldcat
IT_EXCLUDING =
IT_SPECIAL_GROUPS =
IT_SORT =
IT_FILTER =
IS_SEL_HIDE =
I_DEFAULT = 'X'
I_SAVE = ' '
IS_VARIANT =
IT_EVENTS = it_events
IT_EVENT_EXIT =
IS_PRINT =
IS_REPREP_ID =
I_SCREEN_START_COLUMN = 30
I_SCREEN_START_LINE = 0
I_SCREEN_END_COLUMN = 0
I_SCREEN_END_LINE = 0
IMPORTING
E_EXIT_CAUSED_BY_CALLER =
ES_EXIT_CAUSED_BY_USER =
TABLES
T_OUTTAB = itab
EXCEPTIONS
PROGRAM_ERROR = 1
OTHERS = 2
.
IF SY-SUBRC <> 0.
MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
ENDFORM. " list_display
&----
*& Form modify_fldcatalog
&----
text
----
--> p1 text
<-- p2 text
----
FORM modify_fldcatalog.
loop at it_fldcat into wa_fldcat.
case wa_fldcat-fieldname.
when 'EBELN'.
wa_fldcat-seltext_l = 'Purchase Order'.
wa_fldcat-emphasize = 'C811'.
wa_fldcat-hotspot = 'X'.
wa_fldcat-col_pos = 1.
wa_fldcat-ddictxt = 'L'.
when 'BUKRS'.
wa_fldcat-seltext_l = 'Company Code'.
wa_fldcat-col_pos = 2.
wa_fldcat-ddictxt = 'L'.
when 'BSTYP'.
wa_fldcat-seltext_l = 'PO Category'.
wa_fldcat-col_pos = 3.
wa_fldcat-ddictxt = 'L'.
when 'STATU'.
wa_fldcat-seltext_l = 'PO Status'.
wa_fldcat-col_pos = 4.
wa_fldcat-tech ='X'.
wa_fldcat-ddictxt = 'L'.
when 'AEDAT'.
wa_fldcat-seltext_l = 'Date Created'.
wa_fldcat-col_pos = 5.
wa_fldcat-ddictxt = 'L'.
when 'LIFNR'.
wa_fldcat-seltext_l = 'Vendor'.
wa_fldcat-hotspot = 'X'.
wa_fldcat-emphasize = 'C511'.
wa_fldcat-col_pos = 6.
wa_fldcat-ddictxt = 'L'.
endcase.
modify it_fldcat from wa_fldcat.
ENDLOOP.
ENDFORM. " modify_fldcatalog
&----
*& Form header-of-page
&----
text
----
--> p1 text
<-- p2 text
----
FORM header-of-report.
skip 2.
write : /20 'Purchase Order List Report'.
skip 2.
ENDFORM. " header-of-report
&----
*& Form USER_COMMAND
&----
User command for Calling Transaction VT03N, Execute and Refresh
----
FORM user_command USING p_ucomm LIKE sy-ucomm
p_selfield TYPE slis_selfield.
V_INDEX = P_SELFIELD-TABINDEX. " holds the selected table index
CASE p_ucomm.
WHEN '&IC1'.
IF p_selfield-fieldname eq 'EBELN'.
perform display_po_item.
ENDIF.
IF p_selfield-fieldname eq 'LIFNR'.
perform display_vendor_info.
endif.
ENDCASE.
ENDFORM. " USER_COMMAND
&----
*& Form secondary_list
&----
text
----
--> p1 text
<-- p2 text
----
FORM display_po_item.
read table itab index v_index.
v_eblen = itab-ebeln.
perform get_item_data.
ENDFORM. " secondary_list
&----
*& Form display_vendor_info
&----
text
----
--> p1 text
<-- p2 text
----
FORM display_vendor_info.
read table itab index v_index.
v_lifnr = itab-lifnr.
perform get_vendor_info.
ENDFORM. " display_vendor_info
&----
*& Form get_item_data
&----
text
----
--> p1 text
<-- p2 text
----
FORM get_item_data.
clear itab1.
refresh itab1.
select EBELN
EBELP
MATNR
MATKL
MENGE
from ekpo
into table itab1
where ebeln eq v_eblen.
if sy-subrc eq 0.
perform build_catalog1.
perform modify_catalog1.
perform build_events1.
perform modify_events1.
perform list_display1.
endif.
ENDFORM. " get_item_data
&----
*& Form build_catalog1
&----
text
----
--> p1 text
<-- p2 text
----
FORM build_catalog1.
CALL FUNCTION 'REUSE_ALV_FIELDCATALOG_MERGE'
EXPORTING
I_PROGRAM_NAME = v_repid
I_INTERNAL_TABNAME = 'ITAB1'
I_STRUCTURE_NAME =
I_CLIENT_NEVER_DISPLAY = 'X'
I_INCLNAME = v_repid
I_BYPASSING_BUFFER =
I_BUFFER_ACTIVE =
CHANGING
CT_FIELDCAT = it_fldcat1
EXCEPTIONS
INCONSISTENT_INTERFACE = 1
PROGRAM_ERROR = 2
OTHERS = 3
.
IF SY-SUBRC <> 0.
MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
ENDFORM. " build_catalog1
&----
*& Form modify_catalog1
&----
text
----
--> p1 text
<-- p2 text
----
FORM modify_catalog1.
ENDFORM. " modify_catalog1
&----
*& Form build_events1
&----
text
----
--> p1 text
<-- p2 text
----
FORM build_events1.
CALL FUNCTION 'REUSE_ALV_EVENTS_GET'
EXPORTING
I_LIST_TYPE = 0
IMPORTING
ET_EVENTS = it_events1
EXCEPTIONS
LIST_TYPE_WRONG = 1
OTHERS = 2
.
IF SY-SUBRC <> 0.
MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
ENDFORM. " build_events1
&----
*& Form modify_events1
&----
text
----
--> p1 text
<-- p2 text
----
FORM modify_events1.
read table it_events1 with key name =
slis_ev_top_of_page into wa_events.
if sy-subrc eq 0.
wa_events-form = 'HEADER-OF-REPORT1'.
modify it_events1 from wa_events index sy-tabix.
endif.
ENDFORM. " modify_events1
&----
*& Form list_display1
&----
text
----
--> p1 text
<-- p2 text
----
FORM list_display1.
CALL FUNCTION 'REUSE_ALV_LIST_DISPLAY'
EXPORTING
I_INTERFACE_CHECK = ' '
I_BYPASSING_BUFFER =
I_BUFFER_ACTIVE = ' '
I_CALLBACK_PROGRAM = v_repid
I_CALLBACK_PF_STATUS_SET = ' '
I_CALLBACK_USER_COMMAND = ' '
I_STRUCTURE_NAME =
IS_LAYOUT = wa_layout
IT_FIELDCAT = it_fldcat1
IT_EXCLUDING =
IT_SPECIAL_GROUPS =
IT_SORT =
IT_FILTER =
IS_SEL_HIDE =
I_DEFAULT = 'X'
I_SAVE = ' '
IS_VARIANT =
IT_EVENTS = it_events1
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
IMPORTING
E_EXIT_CAUSED_BY_CALLER =
ES_EXIT_CAUSED_BY_USER =
TABLES
T_OUTTAB = itab1
EXCEPTIONS
PROGRAM_ERROR = 1
OTHERS = 2
.
IF SY-SUBRC <> 0.
MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
ENDFORM. " list_display1
&----
*& Form header-of-report1
&----
text
----
--> p1 text
<-- p2 text
----
FORM header-of-report1.
skip 2.
write : 'ITEM WISE DEATILS OF A PURCHASE ORDER' centered.
skip 3.
ENDFORM. " header-of-report1
&----
*& Form get_vendor_info
&----
text
----
--> p1 text
<-- p2 text
----
FORM get_vendor_info.
select LIFNR
NAME1
ADRNR
ORT01
ORT02
PFACH
from lfa1
into table itab2
where lifnr eq v_lifnr.
if sy-subrc eq 0.
perform build_catalog2.
perform modify_catalog2.
perform build_events2.
perform modify_events2.
perform list_display2.
endif.
ENDFORM. " get_item_data
&----
*& Form build_catalog1
&----
text
----
--> p1 text
<-- p2 text
----
FORM build_catalog2.
CALL FUNCTION 'REUSE_ALV_FIELDCATALOG_MERGE'
EXPORTING
I_PROGRAM_NAME = v_repid
I_INTERNAL_TABNAME = 'ITAB2'
I_STRUCTURE_NAME =
I_CLIENT_NEVER_DISPLAY = 'X'
I_INCLNAME = v_repid
I_BYPASSING_BUFFER =
I_BUFFER_ACTIVE =
CHANGING
CT_FIELDCAT = it_fldcat2
EXCEPTIONS
INCONSISTENT_INTERFACE = 1
PROGRAM_ERROR = 2
OTHERS = 3
.
IF SY-SUBRC <> 0.
MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
ENDFORM. " build_catalog1
&----
*& Form modify_catalog1
&----
text
----
--> p1 text
<-- p2 text
----
FORM modify_catalog2.
ENDFORM. " modify_catalog1
&----
*& Form build_events1
&----
text
----
--> p1 text
<-- p2 text
----
FORM build_events2.
CALL FUNCTION 'REUSE_ALV_EVENTS_GET'
EXPORTING
I_LIST_TYPE = 0
IMPORTING
ET_EVENTS = it_events2
EXCEPTIONS
LIST_TYPE_WRONG = 1
OTHERS = 2
.
IF SY-SUBRC <> 0.
MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
ENDFORM. " build_events1
&----
*& Form modify_events1
&----
text
----
--> p1 text
<-- p2 text
----
FORM modify_events2.
read table it_events2 with key name =
slis_ev_top_of_page into wa_events.
if sy-subrc eq 0.
wa_events-form = 'HEADER-OF-REPORT2'.
modify it_events2 from wa_events index sy-tabix.
endif.
ENDFORM. " modify_events1
&----
*& Form list_display1
&----
text
----
--> p1 text
<-- p2 text
----
FORM list_display2.
CALL FUNCTION 'REUSE_ALV_LIST_DISPLAY'
EXPORTING
I_INTERFACE_CHECK = ' '
I_BYPASSING_BUFFER =
I_BUFFER_ACTIVE = ' '
I_CALLBACK_PROGRAM = v_repid
I_CALLBACK_PF_STATUS_SET = ' '
I_CALLBACK_USER_COMMAND = ' '
I_STRUCTURE_NAME =
IS_LAYOUT = wa_layout
IT_FIELDCAT = it_fldcat2
IT_EXCLUDING =
IT_SPECIAL_GROUPS =
IT_SORT =
IT_FILTER =
IS_SEL_HIDE =
I_DEFAULT = 'X'
I_SAVE = ' '
IS_VARIANT =
IT_EVENTS = it_events2
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
IMPORTING
E_EXIT_CAUSED_BY_CALLER =
ES_EXIT_CAUSED_BY_USER =
TABLES
T_OUTTAB = itab2
EXCEPTIONS
PROGRAM_ERROR = 1
OTHERS = 2
.
IF SY-SUBRC <> 0.
MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
ENDFORM. " list_display1
&----
*& Form header-of-report1
&----
text
----
--> p1 text
<-- p2 text
----
FORM header-of-report2.
skip 2.
write : 'VENDOR DETAILS' centered.
skip 3.
ENDFORM. " header-of-report1
<b>ALV INTERACTIVE REPORT</b>
REPORT ZMK_SHIPMENT_ALV
no standard page heading
line-size 105
line-count 50(5)
message-id zz.
**********************************
TABLES *
**********************************
tables : vttk, "Shipment Header
vttp, " Shipment Item
lips. " Delivary Item
**********************************
***TYPE-POOLS *
**********************************
type-pools : slis.
**********************************
*WORK AREAS *
**********************************
Work area for field catalog table
data : wa_fldcat type slis_fieldcat_alv.
Work area for Events table
data : wa_events type slis_alv_event.
Work area for layout.
data : wa_layout type slis_layout_alv.
***********************************
*INTERNAL TABLES *
***********************************
Shimpment Details
data : begin of itab occurs 0,
tknum like vttk-tknum,
shtyp like vttk-shtyp,
tpnum like vttp-tpnum,
vbeln like vttp-vbeln,
end of itab.
data : begin of itab1 occurs 0,
vbeln like lips-vbeln,
posnr like lips-posnr,
matnr like lips-matnr,
lfimg like lips-lfimg,
meins like lips-meins,
end of itab1.
For field catalog table
data : it_fldcats type slis_t_fieldcat_alv.
For Events table
data : it_event type slis_t_event.
For layout.
data : it_layout type slis_layout_alv.
For field catalog table
data : it_fldcats1 type slis_t_fieldcat_alv.
For Events table
data : it_event1 type slis_t_event.
data : v_repid like sy-repid.
*Data Declaration
******************
data: v_index type sy-index,
v_vbeln like lips-vbeln.
*SELECT-OPTIONS
****************
selection-screen begin of block b with frame title text-001.
select-options : s_tknum for vttk-tknum .
selection-screen end of block b.
*INITIALIZATION
****************
initialization.
v_repid = sy-repid.
*START-OF-SELCTION
********************
start-of-selection.
perform populate-data.
sort itab by tknum.
top-of-page.
write : 'Shipment wise Delivary Report'.
end-of-selection.
perform build-fieldcatalog.
perform modify-fieldcatalog.
perform build-events.
perform modify-events.
perform set-layout.
perform set-pfstatus.
perform list-display.
&----
*& Form populate-data
Retrives the Shipment data depending on the selection criteria *
&----
FORM populate-data.
select vttk~tknum
vttk~shtyp
vttp~tpnum
vttp~vbeln
into table itab
from vttk
join vttp
on vttptknum = vttktknum
where vttk~tknum in s_tknum.
if sy-subrc <> 0.
message e999 with 'NO DATA FOUND'.
exit.
endif.
ENDFORM. " populate-data
&----
*& Form build-fieldcatalog
&----
text
----
--> p1 text
<-- p2 text
----
form build-fieldcatalog.
call function 'REUSE_ALV_FIELDCATALOG_MERGE'
exporting
i_program_name = v_repid
i_internal_tabname = 'ITAB'
I_STRUCTURE_NAME =
I_CLIENT_NEVER_DISPLAY = 'X'
i_inclname = v_repid
I_BYPASSING_BUFFER =
I_BUFFER_ACTIVE =
changing
ct_fieldcat = it_fldcats
exceptions
inconsistent_interface = 1
program_error = 2
others = 3
.
if sy-subrc <> 0.
MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
endif.
endform. " BUILD-FIELDCATALOG
&----
*& Form build-events
&----
text
----
--> p1 text
<-- p2 text
----
FORM build-events.
CALL FUNCTION 'REUSE_ALV_EVENTS_GET'
EXPORTING
I_LIST_TYPE = 0
IMPORTING
ET_EVENTS = it_event
EXCEPTIONS
LIST_TYPE_WRONG = 1
OTHERS = 2
.
IF SY-SUBRC <> 0.
MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
ENDFORM. " build-events
&----
*& Form set-layout
&----
text
----
--> p1 text
<-- p2 text
----
FORM set-layout.
wa_layout-zebra = 'X'.
wa_layout-colwidth_optimize = 'X'.
wa_layout-no_colhead = space.
wa_layout-no_vline = space.
ENDFORM. " set-layout
&----
*& Form list-display
&----
text
----
--> p1 text
<-- p2 text
----
FORM list-display.
CALL FUNCTION 'REUSE_ALV_LIST_DISPLAY'
EXPORTING
I_INTERFACE_CHECK = ' '
I_BYPASSING_BUFFER =
I_BUFFER_ACTIVE = ' '
I_CALLBACK_PROGRAM = v_repid
I_CALLBACK_PF_STATUS_SET = ' '
I_CALLBACK_USER_COMMAND = 'USER_COMMAND'
I_STRUCTURE_NAME =
IS_LAYOUT = wa_layout
IT_FIELDCAT = it_fldcats
IT_EXCLUDING =
IT_SPECIAL_GROUPS =
IT_SORT =
IT_FILTER =
IS_SEL_HIDE =
I_DEFAULT = 'X'
I_SAVE = ' '
IS_VARIANT =
IT_EVENTS = it_event
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
IMPORTING
E_EXIT_CAUSED_BY_CALLER =
ES_EXIT_CAUSED_BY_USER =
TABLES
T_OUTTAB = itab
EXCEPTIONS
PROGRAM_ERROR = 1
OTHERS = 2
.
IF SY-SUBRC <> 0.
MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
ENDFORM. " list-display
&----
*& Form modify-fieldcatalog
&----
text
----
--> p1 text
<-- p2 text
----
FORM modify-fieldcatalog.
loop at it_fldcats into wa_fldcat.
case wa_fldcat-fieldname.
when 'TKNUM'.
wa_fldcat-seltext_l = 'Ship No.'.
wa_fldcat-col_pos = 1.
wa_fldcat-ddictxt = 'L'.
when 'SHTYP'.
wa_fldcat-seltext_l = 'Ship Type'.
wa_fldcat-col_pos = 2.
wa_fldcat-ddictxt = 'L'.
when 'TPNUM'.
wa_fldcat-seltext_l = 'Item No.'.
wa_fldcat-col_pos = 3.
wa_fldcat-ddictxt = 'L'.
when 'VBELN'.
wa_fldcat-seltext_l = 'Delivary No.'.
wa_fldcat-hotspot = 'X'.
wa_fldcat-col_pos = 4.
wa_fldcat-ddictxt = 'L'.
endcase.
modify it_fldcats from wa_fldcat.
endloop.
ENDFORM. " modify-fieldcatalog
&----
*& Form modify-events
&----
text
----
--> p1 text
<-- p2 text
----
form modify-events.
read table it_event with key name =
slis_ev_top_of_page into wa_events.
if sy-subrc = 0.
wa_events-form = 'HEADER-OF-REPORT'.
modify it_event from wa_events index sy-tabix.
clear wa_events.
endif.
read table it_event with key name =
slis_ev_end_of_page into wa_events.
if sy-subrc = 0.
wa_events-form = 'FOOTER-OF-REPORT'.
modify it_event from wa_events index sy-tabix.
clear wa_events.
endif.
endform. " modify-events
&----
*& Form HEADER-OF-REPORT
&----
text
----
--> p1 text
<-- p2 text
----
FORM HEADER-OF-REPORT.
write : 'Shipment Wise Delivary Report'.
ENDFORM. " HEADER-OF-REPORT
&----
*& Form FOOTER-OF-REPORT
&----
text
----
--> p1 text
<-- p2 text
----
FORM FOOTER-OF-REPORT.
write : 'End of Report'.
ENDFORM. " FOOTER-OF-REPORT
&----
*& Form USER_COMMAND
&----
User command for Calling Transaction VT03N, Execute and Refresh
----
FORM user_command USING p_ucomm LIKE sy-ucomm
p_selfield TYPE slis_selfield.
V_INDEX = P_SELFIELD-TABINDEX. " holds the selected table index
CASE p_ucomm.
WHEN '&IC1'.
IF p_selfield-fieldname eq 'VBELN'.
perform secondary_list.
ENDIF.
ENDCASE.
ENDFORM. " USER_COMMAND
&----
*& Form secondary_list
&----
text
----
--> p1 text
<-- p2 text
----
FORM secondary_list.
perform get_data1.
perform build-fieldcatalog1.
perform modify-fieldcatalog1.
perform build-events1.
perform modify-events1.
perform set-layout.
perform set-pfstatus.
perform list-display1.
ENDFORM. " secondary_list
&----
*& Form build-fieldcatalog1
&----
text
----
--> p1 text
<-- p2 text
----
FORM build-fieldcatalog1.
call function 'REUSE_ALV_FIELDCATALOG_MERGE'
exporting
i_program_name = v_repid
i_internal_tabname = 'ITAB1'
I_STRUCTURE_NAME =
I_CLIENT_NEVER_DISPLAY = 'X'
i_inclname = v_repid
I_BYPASSING_BUFFER =
I_BUFFER_ACTIVE =
changing
ct_fieldcat = it_fldcats1
exceptions
inconsistent_interface = 1
program_error = 2
others = 3
.
if sy-subrc <> 0.
MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
endif.
ENDFORM. " build-fieldcatalog1
&----
*& Form modify-fieldcatalog1
&----
text
----
--> p1 text
<-- p2 text
----
FORM modify-fieldcatalog1.
loop at it_fldcats into wa_fldcat.
case wa_fldcat-fieldname.
when 'VBELN'.
wa_fldcat-seltext_l = 'Delivary No.'.
wa_fldcat-col_pos = 1.
wa_fldcat-ddictxt = 'L'.
when 'POSNR'.
wa_fldcat-seltext_l = 'Item No'.
wa_fldcat-col_pos = 2.
wa_fldcat-ddictxt = 'L'.
when 'MATNR'.
wa_fldcat-seltext_l = 'Material'.
wa_fldcat-col_pos = 3.
wa_fldcat-ddictxt = 'L'.
when 'LFIMG'.
wa_fldcat-seltext_l = 'Quantity'.
wa_fldcat-col_pos = 4.
wa_fldcat-ddictxt = 'L'.
when 'MEINS'.
wa_fldcat-seltext_l = 'Unit of Measure'.
wa_fldcat-col_pos = 5.
wa_fldcat-ddictxt = 'L'.
endcase.
modify it_fldcats from wa_fldcat.
endloop.
ENDFORM. " modify-fieldcatalog1
&----
*& Form build-events1
&----
text
----
--> p1 text
<-- p2 text
----
FORM build-events1.
CALL FUNCTION 'REUSE_ALV_EVENTS_GET'
EXPORTING
I_LIST_TYPE = 0
IMPORTING
ET_EVENTS = it_event1
EXCEPTIONS
LIST_TYPE_WRONG = 1
OTHERS = 2
.
IF SY-SUBRC <> 0.
MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
ENDFORM. " build-events1
&----
*& Form modify-events1
&----
text
----
--> p1 text
<-- p2 text
----
FORM modify-events1.
read table it_event1 with key name =
slis_ev_top_of_page into wa_events.
if sy-subrc = 0.
wa_events-form = 'HEADER_OF_REPORT_2'.
modify it_event1 from wa_events index sy-tabix.
clear wa_events.
endif.
ENDFORM. " modify-events1
&----
*& Form list-display1
&----
text
----
--> p1 text
<-- p2 text
----
FORM list-display1.
CALL FUNCTION 'REUSE_ALV_LIST_DISPLAY'
EXPORTING
I_INTERFACE_CHECK = ' '
I_BYPASSING_BUFFER =
I_BUFFER_ACTIVE = ' '
I_CALLBACK_PROGRAM = v_repid
I_CALLBACK_PF_STATUS_SET = ' '
I_CALLBACK_USER_COMMAND = 'USER_COMMAND'
I_STRUCTURE_NAME =
IS_LAYOUT = wa_layout
IT_FIELDCAT = it_fldcats1
IT_EXCLUDING =
IT_SPECIAL_GROUPS =
IT_SORT =
IT_FILTER =
IS_SEL_HIDE =
I_DEFAULT = 'X'
I_SAVE = ' '
IS_VARIANT =
IT_EVENTS = it_event1
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
IMPORTING
E_EXIT_CAUSED_BY_CALLER =
ES_EXIT_CAUSED_BY_USER =
TABLES
T_OUTTAB = itab1
EXCEPTIONS
PROGRAM_ERROR = 1
OTHERS = 2
.
IF SY-SUBRC <> 0.
MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
ENDFORM. " list-display1
&----
*& Form get_data1
&----
text
----
--> p1 text
<-- p2 text
----
FORM get_data1.
READ TABLE itab INDEX V_INDEX.
v_vbeln = itab-vbeln.
select vbeln
posnr
matnr
lfimg
meins
from lips
into table itab1
where vbeln eq v_vbeln.
ENDFORM. " get_data1
&----
*& Form header_of_report_2
&----
text
----
--> p1 text
<-- p2 text
----
FORM header_of_report_2.
write: 'Delivary item list'.
ENDFORM. " header_of_report_2
*-- callling a transaction code by passing the initial screen value.
&----
*& Form USER_COMMAND
&----
form user_command using p_ucomm like sy-ucomm
p_selfield type slis_selfield.
data : l_index like sy-index,
l_refbn like cooi-refbn.
l_index = p_selfield-tabindex. " holds the selected table index
clear l_refbn.
case p_ucomm.
when '&IC1'.
clear l_refbn.
read table it_outtab index l_index.
if sy-subrc eq 0.
l_refbn = it_outtab-refbn.
if not l_refbn is initial.
set parameter id 'BES' field l_refbn.
call transaction 'ME23' and skip first screen.
endif.
else.
message e999 with text-014.
endif.
endcase.
endif.
<b>ALV WITH CHECK BOXES</b>
REPORT ZTESTPRG .
************************************************************************
TABLES AND DATA DECLARATION.
************************************************************************
*TABLES: mara,makt.",marc.
data syrepid like sy-repid.
data sydatum(10). " LIKE sy-datum.
data sypagno(3) type n.
WHEN USING MORE THAN ONE TABLE IN ALV WE NEEED TO DECLARE THE TYPE
GROUP (TYPE-POOLS--------->SLIS)
type-pools : slis.
************************************************************************
INTERNAL TABLE DECLARATION.
************************************************************************
INTERNAL TABLE TO HOLD THE VALUES FROM THE MARA TABLE
data: begin of t_mara occurs 0,
matnr like mara-matnr,
meins like mara-meins,
mtart like mara-mtart,
matkl like mara-matkl,
end of t_mara.
INTERNAL TABLE TO HOLD THE CONTENTS FROM THE EKKO TABLE
data : begin of t_marc occurs 0,
matnr like mara-matnr,
werks like marc-werks,
minbe like marc-minbe.
data: end of t_marc.
INTERNAL TABLE TO HOLD THE VALUES FROM MAKT TABLE.
data : begin of t_makt occurs 0,
matnr like mara-matnr,
maktx like makt-maktx,
spras like makt-spras,
end of t_makt.
INTERNAL TABLE WHICH ACTUALLY MERGES ALL THE OTHER INTERNAL TABLES.
data: begin of itab1 occurs 0,
chkbox(1) type c,
matnr like mara-matnr,
meins like mara-meins,
maktx like makt-maktx,
spras like makt-spras,
werks like marc-werks,
minbe like marc-minbe,
end of itab1.
THE FOLLOWING DECLARATION IS USED FOR DEFINING THE FIELDCAT
AND THE LAYOUT FOR THE ALV.
HERE AS slis_t_fieldcat_alv IS A INTERNAL TABLE WITHOUT A HEADER LINE
WE EXPLICITELY DEFINE AN INTERNAL TABLE OF THE SAME STRUCTURE AS THAT
OF slis_t_fieldcat_alv BUT WITH A HEADER LINE IN THE DEFINITION.
THIS IS DONE TO MAKE THE CODE SIMPLER.
OTHERWISE WE MAY HAVE TO DEFINE THE STRUCTURE AS IN THE NORMAL SAP
PROGRAMS.
IN THE FIELDCATALOG TABLE WE ACTUALLY PASS THE FIELDS FROM ONE OR
MORE TABLES AND CREATE A STRUCTURE
IN THE LAYOUT STRUCTURE WE BASICALLY DEFINE THE FORMATTING OPTIONS
LIKE DISPLAY IN THE ZEBRA PATTERN ,THE HOTSPOT OPTIONS ETC.
data: fieldcatalog type slis_t_fieldcat_alv with header line,
fieldlayout type slis_layout_alv.
DECLARING THE EVENTTABLE INTERNL TABLE FOR USING EVENTS LIKE
TOP-OF-PAGE ETC.
data : eventstab type slis_t_event with header line.
DECLARING AN INTERNAL TABLE TO HOLD THE DATA FOR THE TOP-OF-PAGE
data : heading type slis_t_listheader with header line.
data : heading1 type slis_t_listheader with header line.
data : heading2 type slis_t_listheader with header line.
data : heading3 type slis_t_listheader with header line.
data : heading4 type slis_t_listheader with header line.
data : heading5 type slis_t_listheader with header line.
data : heading6 type slis_t_listheader with header line.
data : heading7 type slis_t_listheader with header line.
data : heading8 type slis_t_listheader with header line.
STRUCTURE TO PASS THE COLOR ATTRIBUTES FOR DISPLAY.
data : colorstruct type slis_coltypes.
************************************************************************
INITIALIZATION. *
************************************************************************
initialization.
syrepid = sy-repid.
sypagno = sy-pagno.
clear fieldcatalog.
************************************************************************
START-OF-SELECTION. *
************************************************************************
start-of-selection.
SUBROUTINE TO POPULATE THE COLORSTRUCT
perform fill_colorstruct using colorstruct.
SUBROUTINE TO POPULATE THE FIELDS OF THE FIELD CATALOGUE
perform populate_fieldcatalog.
SUBROUTINE TO SELECT DATA FROM VARIOUS TABLES AND POPULATE IT IN THE
INTERNAL TABLE.
perform selectdata_and_sort.
SUBROUTINE TO POPULATE THE LAYOUT STRUCTURE.
perform populate_layout using fieldlayout.
SUBROUTINE TO CALL THE FUNCTION MERGE TO ENSURE PROPER DISPLAY.
perform merge_fieldcatalog.
SUBROUTINE TO POPULATE THE EVENTSTAB.
perform fill_eventstab tables eventstab.
SUBROUTINE TO POPULATE THE HEADING TABLES.
perform fill_headingtable tables heading using 'HEADING'.
perform fill_headingtable tables heading1 using 'HEADING1'.
perform fill_headingtable tables heading2 using 'HEADING2'.
perform fill_headingtable tables heading3 using 'HEADING3'.
perform fill_headingtable tables heading4 using 'HEADING4'.
perform fill_headingtable tables heading5 using 'HEADING5'.
perform fill_headingtable tables heading6 using 'HEADING6'.
perform fill_headingtable tables heading7 using 'HEADING7'.
perform fill_headingtable tables heading8 using 'HEADING8'.
SUBROUTINE TO DISPLAY THE LIST.
perform display_alv_list.
************************************************************************
FORMS
************************************************************************
IN THIS SUBROUTINE WE POPULATE THE FIELDCATALOG TABLE WITH THE NAMES
OF THE TABLE,FIELDNAME,WHETHER IT IS KEY FIELD OR NOT,HEADING AND
COLUMN JUSTIFICATION.
form populate_fieldcatalog.
perform fill_fields_of_fieldcatalog tables fieldcatalog
using 'ITAB1' 'MATNR' 'X' .
perform fill_fields_of_fieldcatalog tables fieldcatalog
using 'ITAB1' 'MEINS' ' '.
perform fill_fields_of_fieldcatalog tables fieldcatalog
using 'ITAB1' 'MAKTX' ' ' .
perform fill_fields_of_fieldcatalog tables fieldcatalog
using 'ITAB1' 'MTART' ' ' .
perform fill_fields_of_fieldcatalog tables fieldcatalog
using 'ITAB1' 'MATKL' ' ' .
perform fill_fields_of_fieldcatalog tables fieldcatalog
using 'ITAB1' 'SPRAS' ' ' .
perform fill_fields_of_fieldcatalog tables fieldcatalog
using 'ITAB1' 'WERKS' ' ' .
perform fill_fields_of_fieldcatalog tables fieldcatalog
using 'ITAB1' 'MINBE' ' ' .
endform. " POPULATE_FIELDCATALOG
----
FORM FILL_FIELDS_OF_FIELDCATALOG *
----
........ *
----
--> FIELDCATALOG *
--> P_TABNAME *
--> P_FIELDNAME *
--> P_KEY *
--> P_KEY *
----
form fill_fields_of_fieldcatalog tables fieldcatalog
structure fieldcatalog
using p_tabname
p_fieldname
p_key.
p_no_out.
fieldcatalog-tabname = p_tabname.
fieldcatalog-fieldname = p_fieldname.
fieldcatalog-key = p_key.
fieldcatalog-emphasize = '1234'.
*fieldcatalog-no_out = p_no_out.
append fieldcatalog.
endform. " FILL_FIELDSOFFIELDCATALOG
----
FORM POPULATE_LAYOUT *
----
........ *
----
--> FIELDLAYOUT *
----
form populate_layout using fieldlayout type slis_layout_alv.
fieldlayout-f2code = '&ETA' .
fieldlayout-zebra = 'X'.
FOR THE WINDOW TITLE.
fieldlayout-window_titlebar = 'ALV with Events'.
fieldlayout-colwidth_optimize = 'X'.
fieldlayout-no_vline = ' '.
*fieldlayout-no_input = 'X'.
fieldlayout-confirmation_prompt = ''.
fieldlayout-key_hotspot = 'X'.
This removes the column headings if the flag is set to 'X'
fieldlayout-no_colhead = ' '.
*fieldlayout-hotspot_fieldname = 'MAKTX'.
fieldlayout-detail_popup = 'X'.
fieldlayout-coltab_fieldname = 'X'.
fieldlayout-box_fieldname = 'CHKBOX'.
fieldlayout-edit_mode = 'X'.
endform. " POPULATE_LAYOUT
----
FORM SELECTDATA_AND_SORT *
----
........ *
----
form selectdata_and_sort.
select matnr meins mtart matkl from mara
into corresponding fields of t_mara
up to 500 rows .
select matnr maktx spras from makt
into corresponding fields of t_makt
where matnr = t_mara-matnr and
spras = sy-langu.
select matnr werks minbe from marc
into corresponding fields of t_marc
where matnr = t_mara-matnr.
append t_marc.
endselect.
append t_makt.
endselect.
append t_mara.
endselect.
perform populate_itab1.
sort itab1 by matnr.
endform. " SELECTDATA_AND_SORT
----
FORM MERGE_FIELDCATALOG *
----
........ *
----
form merge_fieldcatalog.
call function 'REUSE_ALV_FIELDCATALOG_MERGE'
exporting
i_program_name = syrepid
i_internal_tabname = 'ITAB1'
i_structure_name = 'COLORSTRUCT'
I_CLIENT_NEVER_DISPLAY = 'X'
i_inclname = syrepid
changing
ct_fieldcat = fieldcatalog[]
exceptions
inconsistent_interface = 1
program_error = 2
others = 3.
endform. " MERGE_FIELDCATALOG
IN THIS FUNCTION THE MINIMUM PARAMETERS THAT WE NEED TO PASS IS AS
FOLLOWS:-
i_callback_program --> CALLING PROGRAM NAME
i_structure_name --> STRUCTURE NAME.
is_layout --> LAYOUT NAME.
it_fieldcat ---> BODY OF THE FIELD CATALOGUE INTERNAL TABLE
form display_alv_list.
call function 'REUSE_ALV_LIST_DISPLAY'
exporting
I_INTERFACE_CHECK = ' '
i_callback_program = syrepid
I_CALLBACK_PF_STATUS_SET = ' '
I_CALLBACK_USER_COMMAND = ' '
i_structure_name = 'ITAB1'
is_layout = fieldlayout
it_fieldcat = fieldcatalog[]
IT_EXCLUDING =
IT_SPECIAL_GROUPS =
IT_SORT =
IT_FILTER =
IS_SEL_HIDE =
I_DEFAULT = 'X'
THE FOLLOWING PARAMETER IS SET AS 'A' INORDER TO DISPLAY THE STANDARD
TOOL BAR
i_save = 'A'
IS_VARIANT = ' '
it_events = eventstab[]
IT_EVENT_EXIT =
IS_PRINT =
I_SCREEN_START_COLUMN = 0
I_SCREEN_START_LINE = 0
I_SCREEN_END_COLUMN = 0
I_SCREEN_END_LINE = 0
IMPORTING
E_EXIT_CAUSED_BY_CALLER =
ES_EXIT_CAUSED_BY_USER =
tables
t_outtab = itab1
exceptions
program_error = 1
others = 2.
endform. " DISPLAY_ALV_LIST
&----
*& Form POPULATE_ITAB1
&----
text
----
--> p1 text
<-- p2 text
----
form populate_itab1.
loop at t_mara.
loop at t_makt where matnr = t_mara-matnr.
loop at t_marc where matnr = t_mara-matnr.
move-corresponding t_mara to itab1.
move-corresponding t_makt to itab1.
move-corresponding t_marc to itab1.
append itab1.
endloop.
endloop.
endloop.
endform. " POPULATE_ITAB1
&----
*& Form FILL_EVENTSTAB
&----
text
----
-->P_EVENTSTAB text *
----
form fill_eventstab tables p_eventstab structure eventstab.
WHEN THE FOLLOWING FUNCTION IS CALLED THE SYSTEM POPULATES THE
INTERNAL TABLE EVENTSTAB WITH A LIST OF EVENTS NAME.
AS SHOWN BELOW WHEN USING I_LIST_TYPE = 0 THE FUNCTION RETURNS 14
EVENTS NAME.
call function 'REUSE_ALV_EVENTS_GET'
exporting
i_list_type = 0
importing
et_events = p_eventstab[]
exceptions
list_type_wrong = 1
others = 2.
BY CALLING THE ABOVE FUNCTION WE FIRST POPULATE THE EVENTSTAB WITH
THE PREDEFINED EVENTS AND THEN WE MOVE THE FORM NAME AS SHOWN BELOW.
WE ASSIGN A FORM NAME TO THE EVENT AS REQUIRED BY THE USER.
FORM NAME CAN BE ANYTHING.THE PERFORM STATEMENT FOR THIS FORM
IS DYNAMICALY CALLED.
read table p_eventstab with key name = slis_ev_top_of_page.
if sy-subrc = 0 .
move 'TOP_OF_PAGE' to p_eventstab-form.
append p_eventstab.
endif.
read table p_eventstab with key name = slis_ev_top_of_coverpage.
if sy-subrc = 0 .
move 'TOP_OF_COVERPAGE' to p_eventstab-form.
append p_eventstab.
endif.
read table p_eventstab with key name = slis_ev_end_of_coverpage .
if sy-subrc = 0 .
move 'END_OF_COVERPAGE' to p_eventstab-form.
append p_eventstab.
endif.
read table p_eventstab with key name = slis_ev_foreign_top_of_page.
if sy-subrc = 0 .
move 'FOREIGN_TOP_OF_PAGE' to p_eventstab-form.
append p_eventstab.
endif.
read table p_eventstab with key name = slis_ev_foreign_end_of_page.
if sy-subrc = 0 .
move 'FOREIGN_END_OF_PAGE' to p_eventstab-form.
append p_eventstab.
endif.
read table p_eventstab with key name = slis_ev_list_modify.
if sy-subrc = 0 .
move 'LIST_MODIFY' to p_eventstab-form.
append p_eventstab.
endif.
read table p_eventstab with key name = slis_ev_top_of_list.
if sy-subrc = 0 .
move 'TOP_OF_LIST' to p_eventstab-form.
append p_eventstab.
endif.
read table p_eventstab with key name = slis_ev_end_of_page.
if sy-subrc = 0 .
move 'END_OF_PAGE' to p_eventstab-form.
append p_eventstab.
endif.
read table p_eventstab with key name = slis_ev_end_of_list .
if sy-subrc = 0 .
move 'END_OF_LIST' to p_eventstab-form.
append p_eventstab.
endif.
endform. " FILL_EVENTSTAB
&----
*& Form FILL_HEADINGTABLE
&----
text
----
-->P_HEADING text *
----
form fill_headingtable tables p_heading structure heading
using tablename.
case tablename.
when 'HEADING'.
p_heading-typ = 'H'.
concatenate
' REPORT NAME:-' syrepid
' ABB Industry Pte Ltd' into p_heading-info.
append p_heading.
write sy-datum using edit mask '__/__/____' to sydatum.
concatenate
' DATE:-' sydatum ' USER: ' sy-uname 'PAGE NO:' sypagno
into p_heading-info.
append p_heading.
when 'HEADING1'.
p_heading-typ = 'H'.
p_heading-info = 'TOP-OF-COVER-PAGE'.
append p_heading.
when 'HEADING2'.
p_heading-typ = 'H'.
p_heading-info = 'END-OF-COVER-PAGE'.
append p_heading.
when 'HEADING3'.
p_heading-typ = 'H'.
p_heading-info = 'FOREIGN-TOP-OF-PAGE'.
append p_heading.
when 'HEADING4'.
p_heading-typ = 'H'.
p_heading-info = 'FOREIGN-END-OF-PAGE'.
append p_heading.
WHEN 'HEADING5'.
P_HEADING-TYP = 'H'.
P_HEADING-INFO = 'LIST-MODIFY'.
APPEND P_HEADING.
when 'HEADING6'.
p_heading-typ = 'H'.
p_heading-info = 'END-OF-PAGE'.
append p_heading.
when 'HEADING7'.
p_heading-typ = 'H'.
p_heading-info = 'END-OF-LIST'.
append p_heading.
when 'HEADING8'.
p_heading-typ = 'H'.
p_heading-info = 'TOP-OF-LIST'.
append p_heading.
endcase.
endform. " FILL_HEADINGTABLE
----
FORM TOP_OF_PAGE *
----
........ *
----
form top_of_page.
call function 'REUSE_ALV_COMMENTARY_WRITE'
exporting
it_list_commentary = heading[]
exceptions
others = 1.
endform.
&----
*& Form FILL_COLORSTRUCT
&----
text
----
-->P_COLORSTRUCT text *
----
form fill_colorstruct using p_colorstruct type slis_coltypes .
p_colorstruct-heacolfir-col = 6.
p_colorstruct-heacolfir-int = 1.
p_colorstruct-heacolfir-inv = 1.
endform. " FILL_COLORSTRUCT
----
FORM TOP_OF_COVERPAGE *
----
........ *
----
form top_of_coverpage.
call function 'REUSE_ALV_COMMENTARY_WRITE'
exporting
it_list_commentary = heading1[]
exceptions
others = 1.
endform.
----
FORM END_OF_COVERPAGE *
----
........ *
----
form end_of_coverpage.
call function 'REUSE_ALV_COMMENTARY_WRITE'
exporting
it_list_commentary = heading2[]
exceptions
others = 1.
endform.
----
FORM FOREIGN_TOP_OF_PAGE *
----
........ *
----
form foreign_top_of_page.
call function 'REUSE_ALV_COMMENTARY_WRITE'
exporting
it_list_commentary = heading3[]
exceptions
others = 1.
endform.
----
FORM FOREIGN_END_OF_PAGE *
----
........ *
----
form foreign_end_of_page.
call function 'REUSE_ALV_COMMENTARY_WRITE'
exporting
it_list_commentary = heading4[]
exceptions
others = 1.
endform.
----
FORM LIST_MODIFY *
----
........ *
----
*FORM LIST_MODIFY.
CALL FUNCTION 'REUSE_ALV_COMMENTARY_WRITE'
EXPORTING
IT_LIST_COMMENTARY = HEADING5[]
EXCEPTIONS
OTHERS = 1.
*ENDFORM.
----
FORM END_OF_PAGE *
----
........ *
----
form end_of_page.
call function 'REUSE_ALV_COMMENTARY_WRITE'
exporting
it_list_commentary = heading6[]
exceptions
others = 1.
endform.
----
FORM END_OF_LIST *
----
........ *
----
form end_of_list.
call function 'REUSE_ALV_COMMENTARY_WRITE'
exporting
it_list_commentary = heading7[]
exceptions
others = 1.
endform.
----
FORM TOP_OF_LIST *
----
........ *
----
form top_of_list.
call function 'REUSE_ALV_COMMENTARY_WRITE'
exporting
it_list_commentary = heading8[]
exceptions
others = 1.
endform.
*--- End of Program
<b>ALV SUBTOTALS</b>
REPORT ZYFI_REPT007
NO STANDARD PAGE HEADING
LINE-SIZE 300
LINE-COUNT 50
MESSAGE-ID ZYFI.
************************************
----
MODIFICATION LOG (latest change first): *
----
Date Author Incident No Request No *
Description *
----
************************************************************************
************************************************************************
TABLES : COOI, " Commitments Management: Line Items
LFA1, " Vendor master (general section)
VBEP,
RKPLN.
************************************************************************
TABLE TYPES AND INTERNAL TABLES *
************************************************************************
DATA : BEGIN OF TYP_COOI ,
OBJNR LIKE COOI-OBJNR,
SAKTO LIKE COOI-SAKTO,
MEGBTR LIKE COOI-MEGBTR,
MEINH LIKE COOI-MEINH,
WKGBTR LIKE COOI-WKGBTR,
REFBN LIKE COOI-REFBN,
RFPOS LIKE COOI-RFPOS,
SGTXT LIKE COOI-SGTXT,
BUDAT LIKE COOI-BUDAT,
LIFNR LIKE COOI-LIFNR,
END OF TYP_COOI.
DATA : BEGIN OF TYP_LFA1 ,
LIFNR LIKE LFA1-LIFNR,
NAME1 LIKE LFA1-NAME1,
END OF TYP_LFA1.
DATA : BEGIN OF IT_OUTTAB OCCURS 0,
OBJNR LIKE COOI-OBJNR,
SAKTO LIKE COOI-SAKTO,
MEGBTR LIKE COOI-MEGBTR,
MEINH LIKE COOI-MEINH,
WKGBTR LIKE COOI-WKGBTR,
REFBN LIKE COOI-REFBN,
RFPOS LIKE COOI-RFPOS,
SGTXT LIKE COOI-SGTXT,
BUDAT LIKE COOI-BUDAT,
LIFNR LIKE COOI-LIFNR,
NAME1 LIKE LFA1-NAME1,
END OF IT_OUTTAB.
DATA : IT_COOI LIKE TYP_COOI OCCURS 0 WITH HEADER LINE,
IT_LFA1 LIKE TYP_LFA1 OCCURS 0 WITH HEADER LINE.
*-- ALV Declarations
TYPE-POOLS SLIS.
DATA: IT_EVENTS TYPE SLIS_T_EVENT,
GS_EVENT TYPE SLIS_ALV_EVENT,
wa_fldcat type slis_fieldcat_alv.
DATA: S_LAYOUT TYPE SLIS_LAYOUT_ALV,
GT_PRINT TYPE SLIS_PRINT_ALV.
DATA: IT_FLDCAT TYPE SLIS_T_FIELDCAT_ALV.
DATA: IT_SORT TYPE SLIS_T_SORTINFO_ALV.
DATA: V_REPID LIKE SY-REPID.
************************************************************************
SELECTION SCREEN *
************************************************************************
SELECTION-SCREEN BEGIN OF BLOCK B1 WITH FRAME TITLE TEXT-001.
SELECT-OPTIONS : S_KOKRS FOR COOI-KOKRS NO-EXTENSION NO INTERVALS,
" Controlling Area
S_BUKRS FOR COOI-BUKRS NO-EXTENSION NO INTERVALS,
" Company code
S_GJAHR FOR COOI-GJAHR NO-EXTENSION NO INTERVALS,
" Fiscal Year
S_OBJNR FOR RKPLN-AUFNR MATCHCODE OBJECT ORDE,
" Internal order
S_SAKTO FOR COOI-SAKTO MATCHCODE OBJECT KART,
" Cost Element
S_BUDAT FOR COOI-BUDAT, " Debit Date
S_LIFNR FOR COOI-LIFNR. " Vendor
SELECTION-SCREEN END OF BLOCK B1.
************************************************************************
S T A R T O F S E L E C T I O N *
************************************************************************
START-OF-SELECTION.
*-- Read data
PERFORM GET_DATA.
************************************************************************
E N D O F S E L E C T I O N *
************************************************************************
END-OF-SELECTION.
*-- Process the data and prepare the output data
PERFORM CALCULATE_FINAL_INFO.
*--Display Report output
PERFORM DISPLAY_REPORT.
----
FORM CALCULATE_FINAL_INFO *
----
Process the data and prepare final internal table *
----
FORM CALCULATE_FINAL_INFO.
DATA : L_OBJNR LIKE COOI-OBJNR.
SORT IT_LFA1 BY LIFNR.
DELETE ADJACENT DUPLICATES FROM IT_LFA1 COMPARING LIFNR.
LOOP AT IT_COOI.
L_OBJNR = IT_COOI-OBJNR+2(20).
SHIFT L_OBJNR LEFT DELETING LEADING '0'.
IF L_OBJNR IN S_OBJNR.
READ TABLE IT_LFA1 WITH KEY LIFNR = IT_COOI-LIFNR.
IF SY-SUBRC EQ 0.
IT_OUTTAB-NAME1 = IT_LFA1-NAME1.
ENDIF.
MOVE-CORRESPONDING IT_COOI TO IT_OUTTAB.
CLEAR IT_OUTTAB-OBJNR.
IT_OUTTAB-OBJNR = L_OBJNR.
APPEND IT_OUTTAB.
CLEAR IT_OUTTAB.
CLEAR IT_LFA1.
CLEAR L_OBJNR.
ENDIF.
ENDLOOP.
ENDFORM.
&----
*& Form GET_DATA
&----
Fetch the Data from the table COOI and LFA1
----
FORM GET_DATA.
SELECT OBJNR
SAKTO
MEGBTR
MEINH
WKGBTR
REFBN
RFPOS
SGTXT
BUDAT
LIFNR
FROM COOI
INTO TABLE IT_COOI
WHERE BUDAT IN S_BUDAT
AND LIFNR IN S_LIFNR
AND KOKRS IN S_KOKRS
AND BUKRS IN S_BUKRS
AND GJAHR IN S_GJAHR
AND SAKTO IN S_SAKTO.
IF SY-SUBRC EQ 0 .
Get the Vendor name from LFA1
SELECT LIFNR
NAME1
FROM LFA1
INTO TABLE IT_LFA1
FOR ALL ENTRIES IN IT_COOI
WHERE LIFNR EQ IT_COOI-LIFNR.
ELSE.
MESSAGE I999 WITH TEXT-013.
ENDIF.
ENDFORM. " GET_DATA
&----
*& Form DISPLAY_REPORT
&----
Display the output
----
FORM DISPLAY_REPORT.
PERFORM BUILD_CATALOG.
PERFORM FRM_PREPARE_EVENT_LIST TABLES IT_EVENTS.
IF NOT IT_OUTTAB[] IS INITIAL.
CALL FUNCTION 'REUSE_ALV_LIST_DISPLAY'
EXPORTING
I_CALLBACK_PROGRAM = V_REPID
I_CALLBACK_USER_COMMAND = 'USER_COMMAND'
IT_FIELDCAT = IT_FLDCAT
IT_SORT = IT_SORT
IT_EVENTS = IT_EVENTS
TABLES
T_OUTTAB = IT_OUTTAB
EXCEPTIONS
PROGRAM_ERROR = 1
OTHERS = 2.
ELSE.
MESSAGE I999 WITH TEXT-013.
ENDIF.
ENDFORM. " DISPLAY_REPORT
&----
*& Form BUILD_CATALOG
&----
Build the Field catalog for the ALV Report
----
FORM BUILD_CATALOG.
DATA: V_INDEX LIKE SY-TABIX.
V_REPID = SY-REPID.
DATA: LS_SORT TYPE SLIS_SORTINFO_ALV.
CALL FUNCTION 'REUSE_ALV_FIELDCATALOG_MERGE'
EXPORTING
I_PROGRAM_NAME = V_REPID
I_INTERNAL_TABNAME = 'IT_OUTTAB'
I_INCLNAME = V_REPID
CHANGING
CT_FIELDCAT = IT_FLDCAT
EXCEPTIONS
INCONSISTENT_INTERFACE = 1
PROGRAM_ERROR = 2
OTHERS = 3.
IF SY-SUBRC <> 0.
MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
READ TABLE IT_FLDCAT WITH KEY FIELDNAME = 'WKGBTR'
TABNAME = 'IT_OUTTAB' INTO WA_FLDCAT.
IF SY-SUBRC EQ 0.
WA_FLDCAT-DO_SUM = 'X'.
MODIFY IT_FLDCAT FROM WA_FLDCAT INDEX SY-TABIX.
ENDIF.
READ TABLE IT_FLDCAT WITH KEY FIELDNAME = 'OBJNR'
TABNAME = 'IT_OUTTAB' INTO WA_FLDCAT.
IF SY-SUBRC EQ 0.
WA_FLDCAT-SELTEXT_L = 'Order'.
WA_FLDCAT-COL_POS = 1.
WA_FLDCAT-DDICTXT = 'L'.
MODIFY IT_FLDCAT FROM WA_FLDCAT INDEX SY-TABIX.
ENDIF.
LS_SORT-FIELDNAME = 'OBJNR'.
LS_SORT-SPOS = 1.
LS_SORT-UP = 'X'.
LS_SORT-SUBTOT = 'X'.
APPEND LS_SORT TO IT_SORT.
ENDFORM. " BUILD_CATALOG
&----
*& Form FRM_PREPARE_EVENT_LIST
&----
Build the Events
----
FORM FRM_PREPARE_EVENT_LIST TABLES IT_EVENTS TYPE SLIS_T_EVENT.
CLEAR GS_EVENT.
GS_EVENT-NAME = SLIS_EV_TOP_OF_PAGE.
GS_EVENT-FORM = 'TOP_OF_PAGE_REPORT'.
APPEND GS_EVENT TO IT_EVENTS.
ENDFORM. " FRM_PREPARE_EVENT_LIST
************************************************************************
TOP OF PAGE
************************************************************************
FORM TOP_OF_PAGE_REPORT.
CALL FUNCTION 'Z_YREPORT_HEADER'
EXPORTING
DL_TITLE = SY-TITLE
DL_REPID = SY-CPROG
DL_LINSZ = SY-LINSZ
EXCEPTIONS
OTHERS = 1.
ENDFORM. " FRM_TOP_OF_PAGE_REPORT
&----
*& Form USER_COMMAND
&----
Drill Down Functionality to Call the Transaction ME23
----
FORM USER_COMMAND USING P_UCOMM LIKE SY-UCOMM
P_SELFIELD TYPE SLIS_SELFIELD.
DATA : L_INDEX LIKE SY-INDEX,
L_REFBN LIKE COOI-REFBN.
L_INDEX = P_SELFIELD-TABINDEX. " holds the selected table index
CLEAR L_REFBN.
CASE P_UCOMM.
*-- On Double Click
WHEN '&IC1'.
CLEAR L_REFBN.
*-- Read the Current Line
READ TABLE IT_OUTTAB INDEX L_INDEX.
IF SY-SUBRC EQ 0.
L_REFBN = IT_OUTTAB-REFBN.
IF NOT L_REFBN IS INITIAL.
*-- Set the BES Paramater Id to the Current line Purchase Order Number
SET PARAMETER ID 'BES' FIELD L_REFBN.
*-- Call the Transaction Purchase Order Display with the above PO Number
CALL TRANSACTION 'ME23' AND SKIP FIRST SCREEN.
ENDIF.
ELSE.
MESSAGE E999 WITH TEXT-014.
ENDIF.
ENDCASE.
ENDFORM. " USER_COMMAND
<b>ALV WITH F4 HELP ON OUTPUT</b>
&----
*& Report ZALV1_14797
*&
&----
*&
*&
&----
REPORT ZALV1_14797.
TYPE-POOLS: SLIS.
DATA: X_FIELDCAT TYPE SLIS_FIELDCAT_ALV,
IT_FIELDCAT TYPE SLIS_T_FIELDCAT_ALV,
L_LAYOUT TYPE SLIS_LAYOUT_ALV,
X_EVENTS TYPE SLIS_ALV_EVENT,
IT_EVENTS TYPE SLIS_T_EVENT.
DATA: BEGIN OF ITAB OCCURS 0,
VBELN(10) type c ,
POSNR LIKE VBAP-POSNR,
CHK(1),
color(4),
END OF ITAB.
SELECT VBELN
POSNR
FROM VBAP
UP TO 20 ROWS
INTO TABLE ITAB.
X_FIELDCAT-FIELDNAME = 'CHK'.
X_FIELDCAT-TABNAME = 'ITAB'.
X_FIELDCAT-COL_POS = 1.
X_FIELDCAT-INPUT = 'X'.
X_FIELDCAT-EDIT = 'X'.
X_FIELDCAT-CHECKBOX = 'X'.
APPEND X_FIELDCAT TO IT_FIELDCAT.
CLEAR X_FIELDCAT.
X_FIELDCAT-FIELDNAME = 'VBELN'.
X_FIELDCAT-SELTEXT_L = 'VBELN'.
*X_FIELDCAT-HOTSPOT = 'X'.
x_fieldcat-edit = 'X'.
X_FIELDCAT-TABNAME = 'ITAB'.
x_fieldcat-ref_fieldname = 'VBELN'.
x_fieldcat-ref_tabname = 'VBAK'.
X_FIELDCAT-COL_POS = 2.
APPEND X_FIELDCAT TO IT_FIELDCAT.
CLEAR X_FIELDCAT.
X_FIELDCAT-FIELDNAME = 'POSNR'.
X_FIELDCAT-SELTEXT_L = 'POSNR'.
X_FIELDCAT-TABNAME = 'ITAB'.
X_FIELDCAT-COL_POS = 3.
APPEND X_FIELDCAT TO IT_FIELDCAT.
CLEAR X_FIELDCAT.
L_LAYOUT-info_fieldname = 'COLOR'.
*L_LAYOUT-ZEBRA = 'X'.
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
EXPORTING
I_CALLBACK_PROGRAM = SY-REPID
IS_LAYOUT = L_LAYOUT
I_CALLBACK_PF_STATUS_SET = 'STATUS'
I_CALLBACK_USER_COMMAND = 'USER_COMMAND'
IT_FIELDCAT = IT_FIELDCAT
TABLES
T_OUTTAB = ITAB
EXCEPTIONS
PROGRAM_ERROR = 1
OTHERS = 2.
IF SY-SUBRC <> 0.
MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
&----
*& Form STATUS
&----
text
----
-->P_EXTAB text
----
FORM STATUS USING P_EXTAB TYPE SLIS_T_EXTAB.
*- Pf status
SET PF-STATUS 'STATUS'.
ENDFORM. " STATUS
&----
*& Form USER_COMMAND
&----
text
----
-->R_UCOMM text
-->RS_SELFIELD text
----
FORM USER_COMMAND USING R_UCOMM LIKE SY-UCOMM
RS_SELFIELD TYPE SLIS_SELFIELD.
DATA: GD_REPID LIKE SY-REPID, "Exists
REF_GRID TYPE REF TO CL_GUI_ALV_GRID.
IF REF_GRID IS INITIAL.
CALL FUNCTION 'GET_GLOBALS_FROM_SLVC_FULLSCR'
IMPORTING
E_GRID = REF_GRID.
ENDIF.
IF NOT REF_GRID IS INITIAL.
CALL METHOD REF_GRID->CHECK_CHANGED_DATA .
ENDIF.
loop at itab where chk = 'X'.
itab-color = 'C300'.
modify itab index sy-tabix transporting color.
endloop.
RS_SELFIELD-refresh = 'X'.endform.
<b>ALV HIERARCHICAL</b>
REPORT ZS_REPT_SD_REPORT_47
MESSAGE-ID ZSD
NO STANDARD PAGE HEADING
LINE-COUNT 65(2)
LINE-SIZE 127.
************************************************************************
Progname : ZS_REPT_SD_REPORT_47 *
Description : Service MRA Report *
----
LOGICAL DB : VERSION OF : *
----
DESCRIPTION : Service MRA Report *
----
AUTHOR : DRN Kishore *
DATE : 03/10/2005 *
----
MODIFICATION LOG (latest change first): *
Date Incident Request Author *
#30445 DRN Kishore *
Description: *
----
TYPE-POOLS: SLIS.
TABLES : VBRK, " Billing: Header Data
VBRP, " Billing: Item Data
KONV, " Conditions (Transaction Data)
KNA1, " General Data in Customer Master
TVKO, " Organizational Unit: Sales Organizations
TVTW, " Organizational Unit: Distribution Channels
TSPA, " Organizational Unit: Sales Divisions
MARA, " General Material Data
TVFK, " Billing: Document Types
TVAU. " Sales Documents: Order Reasons
&----
*& INTERNAL TABLES. *
&----
Internal table To hold the VBRK Billing data
DATA : BEGIN OF IT_VBRK OCCURS 0,
VBELN LIKE VBRK-VBELN, " Billing document
KUNAG LIKE VBRK-KUNAG, " Sold-to
FKDAT LIKE VBRK-FKDAT, " Bill Date
FKART LIKE VBRK-FKART, " Bill doc type
KNUMV LIKE VBRK-KNUMV, " doc cond number
field credit applied(TBD)
WAERK LIKE VBRK-WAERK, " SD document currency
END OF IT_VBRK.
Internal table To hold the VBRK Billing:Item data
DATA : BEGIN OF IT_VBRP OCCURS 0,
VBELN LIKE VBRP-VBELN, " Billing document
POSNR LIKE VBRP-POSNR, " Billing item
FKIMG LIKE VBRP-FKIMG, " Blled quantity
MATNR LIKE VBRP-MATNR, " Material number
AUGRU_AUFT LIKE VBRP-AUGRU_AUFT, " Order reason
NETWR LIKE VBRP-NETWR, " Net val in
END OF IT_VBRP.
Internal table To hold distinct doc condition no's and their
condition values
DATA : BEGIN OF IT_KONV OCCURS 0,
KNUMV LIKE KONV-KNUMV, " # of document condition
KPOSN LIKE KONV-KPOSN, " Condition item number
KWERT LIKE KONV-KWERT, " Condition value
END OF IT_KONV.
Internal table To hold distinct doc condition no's
DATA : BEGIN OF IT_KNUMV OCCURS 0,
KNUMV LIKE KONV-KNUMV, " # of document condition
END OF IT_KNUMV.
Final internal table for list display
DATA : BEGIN OF IT_FINAL OCCURS 0,
CUST_NO LIKE VBRK-KUNAG,
BILL_DOC LIKE VBRK-VBELN,
BILL_DATE LIKE VBRK-FKDAT,
BILL_TYPE LIKE VBRK-FKART,
MODEL LIKE VBRP-MATNR,
SHP_COST LIKE KONV-KWERT,
FLD_CR LIKE VBRP-NETWR, " vbrp-augru_auft = 'DU'
MRA_CODE LIKE VBRP-AUGRU_AUFT,
MRA_AMOUNT LIKE VBRP-NETWR,
INVOICE_AMT LIKE VBRP-NETWR,
CURRENCY LIKE VBRK-WAERK,
END OF IT_FINAL.
*--Internal table to store Document header details for display
DATA : BEGIN OF IT_HEAD OCCURS 0,
EXP,
CUST_NO LIKE VBRK-KUNAG, " Customer Number
BILL_DOC LIKE VBRK-VBELN, " Document number
BILL_DATE LIKE VBRK-FKDAT, " Billing date
BILL_TYPE LIKE VBRK-FKART, " Billing type
END OF IT_HEAD.
*--Internal table to store Document item details for display
DATA : BEGIN OF IT_ITEM OCCURS 0,
BILL_DOC LIKE VBRK-VBELN, " Document number
MODEL LIKE VBRP-MATNR, " Material Number
SHP_COST LIKE KONV-KWERT, " Doc Condition value
FLD_CR LIKE VBRP-NETWR, " IF VBRP-AUGRU_AUFT='DU'
MRA_CODE LIKE VBRP-AUGRU_AUFT, " MRA Code
MRA_AMOUNT LIKE VBRP-NETWR, " IF VBRK-FKART = 'RE'
INVOICE_AMT LIKE VBRP-NETWR, " Invoice Amount
CURRENCY LIKE VBRK-WAERK, " Currency
END OF IT_ITEM.
*--To store the second level data : Billing document, amount
DATA : BEGIN OF IT_DETAILS OCCURS 0,
CUST_NO LIKE VBRK-KUNAG, " Customer Number
BILL_DOC LIKE VBRK-VBELN, " Document number
QUANTITY TYPE I,"VBRP-FKIMG, " Qty
AMOUNT LIKE VBRP-NETWR, " Amount
END OF IT_DETAILS.
*---Structures for ALV List Display
DATA: LS_FIELDCAT TYPE SLIS_FIELDCAT_ALV,
LS_LAYOUT TYPE SLIS_LAYOUT_ALV,
LS_VARIANT TYPE DISVARIANT,
LS_EVENT TYPE SLIS_ALV_EVENT,
LS_KEYINFO TYPE SLIS_KEYINFO_ALV,
LS_SORTINFO TYPE SLIS_SORTINFO_ALV.
*---Internal Tables for ALV List Display
DATA: IT_FIELDCAT TYPE SLIS_T_FIELDCAT_ALV,
IT_EVENTS TYPE SLIS_T_EVENT,
IT_SORTINFO TYPE SLIS_T_SORTINFO_ALV.
DATA : V_REPID LIKE SY-REPID.
DATA : V_TOTAL_SALES_QTY TYPE I, " Total Sales Quantity
V_TOTAL_SALES_AMT LIKE VBRP-NETWR, " Total Sales Amount
V_TOTAL_RTRNS_QTY TYPE I, " Total Returns Qty
V_TOTAL_RTRNS_AMT LIKE VBRP-NETWR, " Total Returns Amt
V_TOTAL_FLDCR_QTY TYPE I, " Total Fld Cr Qty
V_TOTAL_FLDCR_AMT LIKE VBRP-NETWR, " Total Fld Cr Amount
V_CURRENCY LIKE VBRK-WAERK. " Currency Key
&----
*& SELECTION-SCREEN. *
&----
SELECTION-SCREEN BEGIN OF BLOCK SEL1 WITH FRAME TITLE TEXT-001.
SELECT-OPTIONS: S_VKORG FOR VBRK-VKORG " Sales Organization
OBLIGATORY,
S_VTWEG FOR VBRK-VTWEG " Distribution Channel
OBLIGATORY,
S_SPART FOR VBRK-SPART " Division
OBLIGATORY,
S_KUNAG FOR VBRK-KUNAG, " Sold-to-party
S_MATNR FOR VBRP-MATNR, " Material
S_FKDAT FOR VBRK-FKDAT " Billing Date
OBLIGATORY,
S_FKART FOR VBRK-FKART, " Billing Type
S_AUGRU FOR VBRP-AUGRU_AUFT. " MRA Code
SELECTION-SCREEN ULINE.
SELECTION-SCREEN BEGIN OF LINE.
PARAMETERS:RB_DTL RADIOBUTTON GROUP G1.
SELECTION-SCREEN COMMENT 4(35) TEXT-002 . " Detail Report
SELECTION-SCREEN END OF LINE.
*- Product class summary by customer
SELECTION-SCREEN BEGIN OF LINE.
PARAMETERS:RB_SUM RADIOBUTTON GROUP G1.
SELECTION-SCREEN COMMENT 4(35) TEXT-003. " Summary
SELECTION-SCREEN END OF LINE.
SELECTION-SCREEN END OF BLOCK SEL1.
&----
*& At Selection Screen Event *
&----
AT SELECTION-SCREEN.
*---Validate selection-screen. Check for inputs
PERFORM VALIDATE.
&----
*& TOP-OF-PAGE *
&----
TOP-OF-PAGE.
*---Display the standard top of page if summary is selected
PERFORM TOP_OF_PAGE_REPORT.
TOP-OF-PAGE DURING LINE-SELECTION.
*---Display the standard top of page if summary is selected
PERFORM TOP_OF_PAGE_REPORT.
PERFORM DISPLAY_COLUMN_HEADERS.
&----
*& START-OF-SELECTION. *
&----
START-OF-SELECTION.
*---Get the required data from tables
PERFORM GET_DATA.
&----
*& END-OF-SELECTION. *
&----
END-OF-SELECTION.
*---Display report
PERFORM DISPLAY_DATA.
&----
*& AT LINE SELECTION *
&----
AT LINE-SELECTION.
*--Display details for the quantity or the amount selected.
PERFORM DISPLAY_DETAIL.
&----
*& Form VALIDATE *
&----
Validate Billing date in the selection-screen *
----
FORM VALIDATE.
*- To Check Sales Organization
SELECT VKORG UP TO 1 ROWS
FROM TVKO
INTO TVKO-VKORG
WHERE VKORG IN S_VKORG.
ENDSELECT.
IF SY-SUBRC NE 0.
MESSAGE E001.
ENDIF.
*- To Check Distribution Channel
SELECT VTWEG UP TO 1 ROWS
FROM TVTW
INTO TVTW-VTWEG
WHERE VTWEG IN S_VTWEG.
ENDSELECT.
IF SY-SUBRC NE 0.
MESSAGE E002.
ENDIF.
*- To Check Division
SELECT SPART UP TO 1 ROWS
FROM TSPA
INTO TSPA-SPART
WHERE SPART IN S_SPART.
ENDSELECT.
IF SY-SUBRC NE 0.
MESSAGE E003.
ENDIF.
*- To Check Shipt-to
SELECT KUNNR UP TO 1 ROWS
FROM KNA1
INTO KNA1-KUNNR
WHERE KUNNR IN S_KUNAG.
ENDSELECT.
IF SY-SUBRC NE 0.
MESSAGE E030.
ENDIF.
*- To Check Model Number
SELECT MATNR UP TO 1 ROWS
FROM MARA
INTO MARA-MATNR
WHERE MATNR IN S_MATNR.
ENDSELECT.
IF SY-SUBRC NE 0.
MESSAGE E047.
ENDIF.
*- To Check Billing Date
SELECT FKDAT UP TO 1 ROWS
FROM VBRK
INTO VBRK-FKDAT
WHERE FKDAT IN S_FKDAT.
ENDSELECT.
IF SY-SUBRC NE 0.
MESSAGE E048.
ENDIF.
*- To Check Billing Type
SELECT FKART UP TO 1 ROWS
FROM TVFK
INTO TVFK-FKART
WHERE FKART IN S_FKART.
ENDSELECT.
IF SY-SUBRC NE 0.
MESSAGE E004.
ENDIF.
*- To Check MRA Code
SELECT AUGRU UP TO 1 ROWS
FROM TVAU
INTO TVAU-AUGRU
WHERE AUGRU IN S_AUGRU.
ENDSELECT.
IF SY-SUBRC NE 0.
MESSAGE E049.
ENDIF.
ENDFORM. " VALIDATE
&----
*& Form GET_DATA *
&----
Get the required data from tables *
----
FORM GET_DATA.
*--Get Billing data from VBRK and VBRP
PERFORM GET_BILLING_DATA.
*--Get Shipping Costs from KONV based on the Document Condition Number
PERFORM GET_SHIPPING_COSTS.
ENDFORM. " GET_DATA
&----
*& Form GET_BILLING_DATA *
&----
Get Billing data from VBRK and VBRP *
----
FORM GET_BILLING_DATA.
*---Get data Billing Document header details from VBRK
based on the selection criteria
SELECT VBELN " Billing Document
KUNAG " Customer
FKDAT " Billing Date
FKART " Billing Type
KNUMV " Document Condition Number
WAERK " Currency
INTO TABLE IT_VBRK
FROM VBRK
WHERE VKORG IN S_VKORG " Sales Organisation
AND VTWEG IN S_VTWEG " Distribution Channel
AND SPART IN S_SPART " Division
AND KUNAG IN S_KUNAG " Customer
AND FKDAT IN S_FKDAT " Billing Date
AND FKART IN S_FKART " Billing Type
AND VBTYP NE 'N' " Cancelled Ducuments
AND FKSTO NE 'X'. " Cancellation Indicator
SORT IT_VBRK BY VBELN.
*---Get data Billing Document item details from VBRP for all selected
from VBRP and other criteria entered in the selection criteria
IF NOT IT_VBRK[] IS INITIAL.
SELECT VBELN " Billing Document
POSNR " Item Number
FKIMG " Billed Quantity
MATNR " Material Number
AUGRU_AUFT " MRA Code
NETWR " Invoice Amount
FROM VBRP
INTO TABLE IT_VBRP
FOR ALL ENTRIES IN IT_VBRK
WHERE VBELN = IT_VBRK-VBELN " Document Number
AND MATNR IN S_MATNR " Material Number
AND AUGRU_AUFT IN S_AUGRU. " MRA Code
ENDIF.
ENDFORM. " GET_BILLING_DATA
&----
*& Form GET_SHIPPING_COSTS *
&----
*& Get Shipping Costs from KONV based on the Document Condition Number *
----
FORM GET_SHIPPING_COSTS.
*--Get all the selected Document condition numbers into internal table
IF NOT IT_VBRK[] IS INITIAL.
LOOP AT IT_VBRK.
IT_KNUMV-KNUMV = IT_VBRK-KNUMV.
APPEND IT_KNUMV.
ENDLOOP.
*---Get the Condition values for the Cundition numbers
IF NOT IT_KNUMV[] IS INITIAL.
SORT IT_KNUMV BY KNUMV.
DELETE ADJACENT DUPLICATES FROM IT_KNUMV COMPARING KNUMV.
SELECT KNUMV
KPOSN
KWERT
INTO TABLE IT_KONV
FROM KONV
FOR ALL ENTRIES IN IT_KNUMV
WHERE KNUMV = IT_KNUMV-KNUMV
AND KSCHL = 'ZFRT'.
ENDIF.
ENDIF.
ENDFORM. " GET_SHIPPING_COSTS
&----
*& Form DISPLAY_DATA *
&----
Display report *
----
FORM DISPLAY_DATA.
*--If data is selected, display the report
IF NOT IT_VBRK[] IS INITIAL AND
NOT IT_VBRP[] IS INITIAL.
V_REPID = SY-REPID.
*--If Detail report option is selected in the selection-screen
IF RB_DTL = 'X'.
*--Populate the header and item details in IT_HEAD and IT_ITEM
PERFORM POPULATE_HEAD_ITEM.
*--Build field catalog ie, display position, length, etc..of each column
PERFORM BUILD_FIELD_CATALOG.
*--Prepare the key fields info of the head and item tables
PERFORM PREPARE_KEYINFO.
*--Add events like top-of-page to events list
PERFORM PREPARE_EVENT_LIST
TABLES IT_EVENTS.
*--Prepare the layout of the report
PERFORM PREPARE_LAYOUT.
*--Prepare the sort info and subtotals condition info
PERFORM PREPARE_SORTINFO.
*--Display the report using ALV
PERFORM DISPLAY_ALV_REPORT.
*--If Summary Option is selected in the selections-screen
ELSE.
*--Display the summary report
PERFORM DISPLAY_SUMMARY.
ENDIF.
ELSE.
MESSAGE I999 WITH TEXT-004.
No Data Available for the Given Selection Criteria
ENDIF.
ENDFORM. " DISPLAY_DATA
&----
*& Form POPULATE_HEAD_ITEM *
&----
Populate the header and item details in IT_HEAD and IT_ITEM *
----
FORM POPULATE_HEAD_ITEM.
V_TABIX = SY-TABIX.
*--For each of the document header
LOOP AT IT_VBRK.
*--Get the item details and append to IT_ITEM Internal tble
LOOP AT IT_VBRP WHERE VBELN = IT_VBRK-VBELN.
IT_ITEM-BILL_DOC = IT_VBRP-VBELN.
IT_ITEM-CURRENCY = IT_VBRK-WAERK.
*--Get the condition value for the condition type
READ TABLE IT_KONV WITH KEY KNUMV = IT_VBRK-KNUMV
KPOSN = IT_VBRP-POSNR.
IF SY-SUBRC = 0.
IT_ITEM-SHP_COST = IT_KONV-KWERT.
ENDIF.
IT_ITEM-MODEL = IT_VBRP-MATNR.
IT_ITEM-MRA_CODE = IT_VBRP-AUGRU_AUFT.
*--If MRA Code is 'DU', display amount as field Credit
IF IT_VBRP-AUGRU_AUFT = 'DU'.
IT_ITEM-FLD_CR = IT_VBRP-NETWR.
ENDIF.
*--If billing type is 'RE', display amount as MRA Amount
IF IT_VBRK-FKART = 'RE'.
IT_ITEM-MRA_AMOUNT = IT_VBRP-NETWR.
ENDIF.
IT_ITEM-INVOICE_AMT = IT_VBRP-NETWR.
APPEND IT_ITEM.
CLEAR IT_ITEM.
ENDLOOP.
*--Append Header details to IT_HEAD Internal table
IF SY-SUBRC EQ 0.
IT_HEAD-CUST_NO = IT_VBRK-KUNAG.
IT_HEAD-BILL_DOC = IT_VBRK-VBELN.
IT_HEAD-BILL_DATE = IT_VBRK-FKDAT.
IT_HEAD-BILL_TYPE = IT_VBRK-FKART.
APPEND IT_HEAD.
CLEAR IT_HEAD.
ENDIF.
ENDLOOP.
ENDFORM. " POPULATE_HEAD_ITEM
&----
*& Form BUILD_FIELD_CATALOG *
&----
Build field catalog ie, display position, length, etc..of each column*
----
FORM BUILD_FIELD_CATALOG.
*--Append Field Catalog of Header Level Data for Display
PERFORM APPEND_FIELDCAT
USING 1 'CUST_NO' 'IT_HEAD' 'Customer Number' 15 ' ' 'X'.
PERFORM APPEND_FIELDCAT
USING 2 'BILL_DOC' 'IT_HEAD' 'Billing Document' 16 ' ' ' '.
PERFORM APPEND_FIELDCAT
USING 3 'BILL_DATE' 'IT_HEAD' 'Billing Date' 12 ' ' ' '.
PERFORM APPEND_FIELDCAT
USING 4 'BILL_TYPE' 'IT_HEAD' 'Billing Type' 12 ' ' ' '.
*--Append Field Catalog of Item Level Data for Display
PERFORM APPEND_FIELDCAT
USING 1 'MODEL' 'IT_ITEM' 'Model Number' 18 ' ' ' '.
PERFORM APPEND_FIELDCAT
USING 2 'SHP_COST' 'IT_ITEM' 'Shipping Cost' 18 IT_FINAL-CURRENCY 'X'.
PERFORM APPEND_FIELDCAT
USING 3 'FLD_CR' 'IT_ITEM' 'Field Credits' 21 IT_FINAL-CURRENCY 'X'.
PERFORM APPEND_FIELDCAT
USING 4 'MRA_CODE' 'IT_ITEM' 'MRA Code' 8 ' ' ' '.
PERFORM APPEND_FIELDCAT
USING 5 'MRA_AMOUNT' 'IT_ITEM' '$ Amount of MRA' 21
IT_FINAL-CURRENCY 'X'.
PERFORM APPEND_FIELDCAT
USING 6 'INVOICE_AMT' 'IT_ITEM' '$ Amount of Invoice' 21
IT_FINAL-CURRENCY 'X'.
*--Add Hotspot to Billing Document Number
LOOP AT IT_FIELDCAT INTO LS_FIELDCAT
WHERE FIELDNAME = 'BILL_DOC'.
LS_FIELDCAT-HOTSPOT = 'X'.
MODIFY IT_FIELDCAT FROM LS_FIELDCAT.
ENDLOOP.
ENDFORM. " BUILD_FIELD_CATALOG
&----
*& Form APPEND_FIELDCAT *
&----
Append Field Catalog to IT_FIELDCAT Internal Table *
----
FORM APPEND_FIELDCAT USING POS FIELDNAME TABNAME
TEXT LEN CURRENCY DOSUM.
LS_FIELDCAT-COL_POS = POS. " Position
LS_FIELDCAT-FIELDNAME = FIELDNAME. " Field Name in the internal table
LS_FIELDCAT-TABNAME = TABNAME. " Internal Table name
LS_FIELDCAT-SELTEXT_M = TEXT. " Column display text
LS_FIELDCAT-SELTEXT_L = TEXT. " Column display text
LS_FIELDCAT-OUTPUTLEN = LEN. " Display length of the column
LS_FIELDCAT-DO_SUM = DOSUM. " Set summation flag
LS_FIELDCAT-CURRENCY = CURRENCY. " Currency
APPEND LS_FIELDCAT TO IT_FIELDCAT.
CLEAR LS_FIELDCAT.
ENDFORM. " APPEND_FIELDCAT
&----
*& Form PREPARE_KEYINFO *
&----
Prepare the key fields info of the head and item tables *
----
FORM PREPARE_KEYINFO.
*--Key Fields Joining the Header and Item tables is Billing Document
LS_keyinfo-header01 = 'BILL_DOC'.
LS_keyinfo-item01 = 'BILL_DOC'.
ENDFORM. " PREPARE_KEYINFO
&----
*& Form PREPARE_EVENT_LIST *
&----
Add events like top-of-page to events list *
----
FORM PREPARE_EVENT_LIST TABLES IT_EVENTS TYPE SLIS_T_EVENT.
*--Add Top-OF-Page event to be triggered before the list is displayed
CLEAR LS_EVENT.
LS_EVENT-NAME = SLIS_EV_TOP_OF_PAGE.
LS_EVENT-FORM = 'TOP_OF_PAGE_REPORT'.
APPEND LS_EVENT TO IT_EVENTS.
ENDFORM. " PREPARE_EVENT_LIST
&----
*& Form PREPARE_LAYOUT *
&----
Prepare the layout of the report *
----
FORM PREPARE_LAYOUT.
LS_LAYOUT-expand_fieldname = 'EXP'. " Field for Exp/Col Icon
LS_LAYOUT-no_uline_hs = 'X'. " No Horizontal lines
LS_LAYOUT-subtotals_text = TEXT-015. " Text for Sub-totals
LS_LAYOUT-totals_text = TEXT-016. " Text for totals
LS_LAYOUT-no_subtotals = ' '. " Display Subtotals
ENDFORM. " PREPARE_LAYOUT
&----
*& Form PREPARE_SORTINFO *
&----
Prepare the sort info and subtotals condition info *
----
FORM PREPARE_SORTINFO.
*--Sort the output on Customer number and Billing Document Number and
display subtotals of amounts for each customer
LS_SORTINFO-SPOS = 1. " Sort Position
LS_SORTINFO-UP = 'X'. " Sort Sequence is Ascending
LS_SORTINFO-TABNAME = 'IT_HEAD'. " Table name
LS_SORTINFO-FIELDNAME = 'CUST_NO'. " field name in the table
*--Subtotals of numeric fields for each customer.
LS_SORTINFO-SUBTOT = 'X'. " Subtotals on this field
APPEND LS_SORTINFO TO IT_SORTINFO.
CLEAR LS_SORTINFO.
LS_SORTINFO-SPOS = 2. " Sort position
LS_SORTINFO-UP = 'X'. " Sort order is ascending
LS_SORTINFO-TABNAME = 'IT_HEAD'. " Table name
LS_SORTINFO-FIELDNAME = 'BILL_DOC'. " Field Name
APPEND LS_SORTINFO TO IT_SORTINFO.
CLEAR LS_SORTINFO.
ENDFORM. " PREPARE_SORTINFO
&----
*& Form DISPLAY_ALV_REPORT *
&----
Display the report using ALV *
----
FORM DISPLAY_ALV_REPORT.
SET PF-STATUS 'STATUS'.
CALL FUNCTION 'REUSE_ALV_HIERSEQ_LIST_DISPLAY'
EXPORTING
I_INTERFACE_CHECK = ' '
I_CALLBACK_PROGRAM = V_REPID
I_CALLBACK_PF_STATUS_SET = ' '
I_CALLBACK_USER_COMMAND = 'USER_COMMAND'
IS_LAYOUT = LS_LAYOUT
IT_FIELDCAT = IT_FIELDCAT
IT_EXCLUDING =
IT_SPECIAL_GROUPS =
IT_SORT = IT_SORTINFO
IT_FILTER =
IS_SEL_HIDE =
I_SCREEN_START_COLUMN = 0
I_SCREEN_START_LINE = 0
I_SCREEN_END_COLUMN = 0
I_SCREEN_END_LINE = 0
I_DEFAULT = 'X'
I_SAVE = ' '
IS_VARIANT =
IT_EVENTS = IT_EVENTS
IT_EVENT_EXIT =
I_TABNAME_HEADER = 'IT_HEAD'
I_TABNAME_ITEM = 'IT_ITEM'
I_STRUCTURE_NAME_HEADER =
I_STRUCTURE_NAME_ITEM =
IS_KEYINFO = LS_KEYINFO
IS_PRINT =
IS_REPREP_ID =
I_BUFFER_ACTIVE =
I_BYPASSING_BUFFER =
IMPORTING
E_EXIT_CAUSED_BY_CALLER =
ES_EXIT_CAUSED_BY_USER =
TABLES
T_OUTTAB_HEADER = IT_HEAD
T_OUTTAB_ITEM = IT_ITEM
EXCEPTIONS
PROGRAM_ERROR = 1
OTHERS = 2
.
IF SY-SUBRC <> 0.
MESSAGE E999 WITH TEXT-013. " Error When Displaying Report
ENDIF.
ENDFORM. " DISPLAY_ALV_REPORT
&----
*& Form TOP_OF_PAGE_REPORT *
&----
Display the standard top of page if summary is selected *
----
FORM TOP_OF_PAGE_REPORT.
*--Function module to display top of page
CALL FUNCTION 'Z_REPORT_HEADER'
EXPORTING
DL_TITLE = SY-TITLE
DL_REPID = V_REPID.
ENDFORM. " TOP_OF_PAGE_REPORT
&----
*& Form DISPLAY_COLUMN_HEADERS *
&----
Display the Column headers *
----
FORM DISPLAY_COLUMN_HEADERS.
*--Set color to I Header
PERFORM FORMAT_COLOR USING 5 'X'.
WRITE SY-ULINE(76).
WRITE : /1 SY-VLINE,
2(15) 'Customer Number' CENTERED,
17 SY-VLINE,
18(16) 'Billing Document' CENTERED,
34 SY-VLINE,
35(20) TEXT-008 CENTERED, " Quantity
55 SY-VLINE,
56(20) TEXT-009 CENTERED, " Amount
76 SY-VLINE.
WRITE SY-ULINE(76).
ENDFORM. " DISPLAY_COLUMN_HEADERS
&----
*& Form DISPLAY_SUMMARY *
&----
Display the summary report *
----
FORM DISPLAY_SUMMARY.
CLEAR : V_TOTAL_SALES_QTY,
V_TOTAL_SALES_AMT,
V_TOTAL_RTRNS_QTY,
V_TOTAL_RTRNS_AMT,
V_TOTAL_FLDCR_QTY,
V_TOTAL_FLDCR_AMT.
*--For each item record
LOOP AT IT_VBRP.
*--Check if the item record has a corresponding header record. If yes,
add the sums. Else, proceed to next record
READ TABLE IT_VBRK WITH KEY VBELN = IT_VBRP-VBELN.
IF SY-SUBRC = 0.
*--Increment Total Sales Quantity by 1 for each line item
V_TOTAL_SALES_QTY = V_TOTAL_SALES_QTY + IT_VBRP-FKIMG.
*--Add the Amount to Total Sales Amount
V_TOTAL_SALES_AMT = V_TOTAL_SALES_AMT + IT_VBRP-NETWR.
*--If Billing type is 'RE', add to Returns
IF IT_VBRK-FKART = 'RE'.
*--Increment Returns Quantity by 1
V_TOTAL_RTRNS_QTY = V_TOTAL_RTRNS_QTY + IT_VBRP-FKIMG.
*--Add Amount to Total Returns Amount
V_TOTAL_RTRNS_AMT = V_TOTAL_RTRNS_AMT + IT_VBRP-NETWR.
ENDIF.
*--If order Reason is 'DU' add to Field Credits
IF IT_VBRP-AUGRU_AUFT = 'DU'.
*--Increment Field Credit Quantity by 1
V_TOTAL_FLDCR_QTY = V_TOTAL_FLDCR_QTY + IT_VBRP-FKIMG.
*--Add Amouint to Total Field Credits Amount
V_TOTAL_FLDCR_AMT = V_TOTAL_FLDCR_AMT + IT_VBRP-NETWR.
ENDIF.
ENDIF.
ENDLOOP.
READ TABLE IT_VBRK INDEX 1.
V_CURRENCY = IT_VBRK-WAERK.
-Display Summary report
WRITE SY-ULINE(127).
*--Set color to I Header
PERFORM FORMAT_COLOR USING 5 'X'.
WRITE : /1 SY-VLINE,
2(41) TEXT-005 CENTERED, " Total Sales ( Net Sales )
43 SY-VLINE,
44(41) TEXT-006 CENTERED, " Total Returns
85 SY-VLINE,
86(41) TEXT-007 CENTERED, " Total Field Credits
127 SY-VLINE.
WRITE SY-ULINE(127).
*--Set color to II Header
PERFORM FORMAT_COLOR USING 1 'X'.
WRITE : /1 SY-VLINE,
2(20) TEXT-008 RIGHT-JUSTIFIED, " Quantity
22 SY-VLINE,
23(20) TEXT-009 RIGHT-JUSTIFIED, " Amount
43 SY-VLINE,
44(20) TEXT-008 RIGHT-JUSTIFIED, " Quantity
64 SY-VLINE,
65(20) TEXT-009 RIGHT-JUSTIFIED, " Amount
85 SY-VLINE,
86(20) TEXT-008 RIGHT-JUSTIFIED, " Quantity
106 SY-VLINE,
107(20) TEXT-009 RIGHT-JUSTIFIED, " Amount
127 SY-VLINE.
WRITE SY-ULINE(127).
*--Set color to detail
PERFORM FORMAT_COLOR USING 2 ' '.
WRITE : /1 SY-VLINE,
2(20) V_TOTAL_SALES_QTY RIGHT-JUSTIFIED HOTSPOT ON,
22 SY-VLINE,
23 V_TOTAL_SALES_AMT CURRENCY V_CURRENCY HOTSPOT ON,
43 SY-VLINE,
44(20) V_TOTAL_RTRNS_QTY RIGHT-JUSTIFIED HOTSPOT ON,
64 SY-VLINE,
65 V_TOTAL_RTRNS_AMT CURRENCY V_CURRENCY HOTSPOT ON,
85 SY-VLINE,
86(20) V_TOTAL_FLDCR_QTY RIGHT-JUSTIFIED HOTSPOT ON,
106 SY-VLINE,
107 V_TOTAL_FLDCR_AMT CURRENCY V_CURRENCY HOTSPOT ON,
127 SY-VLINE.
HIDE V_TOTAL_SALES_QTY.
HIDE V_TOTAL_SALES_AMT.
HIDE V_TOTAL_RTRNS_QTY.
HIDE V_TOTAL_RTRNS_AMT.
HIDE V_TOTAL_FLDCR_QTY.
HIDE V_TOTAL_FLDCR_AMT.
WRITE SY-ULINE(127).
ENDFORM. " DISPLAY_SUMMARY
&----
*& Form FORMAT_COLOR
&----
Format Color
----
FORM FORMAT_COLOR USING COLOR
INTENSITY.
IF INTENSITY EQ 'X'.
FORMAT INTENSIFIED ON COLOR = COLOR.
ELSE.
FORMAT INTENSIFIED OFF COLOR = COLOR.
ENDIF.
ENDFORM. " FORMAT_COLOR
&----
*& Form USER_COMMAND
&----
Call back user command
----
FORM USER_COMMAND USING P_UCOMM LIKE SY-UCOMM
P_LINE TYPE SLIS_SELFIELD.
DATA : LV_VBELN TYPE VBRK-VBELN.
*--If Billing document Is clicked
IF P_LINE-TABNAME = 'IT_HEAD' AND P_LINE-FIELDNAME = 'BILL_DOC'.
*--Move the Selected Billing Document Number to a variable
LV_VBELN = P_LINE-VALUE.
*--Set Parameter ID 'VF' with teh Selected Billing Document Number
SET PARAMETER ID 'VF' FIELD LV_VBELN.
*--Call Transaction VF03 to Display the Billing Document
CALL TRANSACTION 'VF03' AND SKIP FIRST SCREEN.
ELSE.
*--If anything other than Billing Document is Clicked,
Display an error message
MESSAGE S999 WITH TEXT-010. "Please select a Billing Document
ENDIF..
ENDFORM. " USER_COMMAND
&----
*& Form DISPLAY_DETAIL
&----
Display details for the quantity or the amount select
----
FORM DISPLAY_DETAIL.
DATA : LV_FIELD(20). " To store the field name selected
DATA : LV_VBELN TYPE VBRK-VBELN.
*--If user clicks on some record in the first screen of summary report
IF SY-LSIND = '1'.
*--Get the field that the user clicked on
GET CURSOR FIELD LV_FIELD.
*--IF User Clicks on Total Sales Amount or Quantity
IF LV_FIELD = 'V_TOTAL_SALES_QTY' OR
LV_FIELD = 'V_TOTAL_SALES_AMT'.
*--Display Total Sales Details
PERFORM GET_TOTAL_SALES_DETAILS.
*--If User Clicks on Total Returns Quantity or Amount
ELSEIF LV_FIELD = 'V_TOTAL_RTRNS_QTY' OR
LV_FIELD = 'V_TOTAL_RTRNS_AMT'.
*--Display Total Returns Details
PERFORM GET_TOTAL_RETURNS_DETAILS.
*--If User Clicks on Total Returns Quantity or Amount
ELSEIF LV_FIELD = 'V_TOTAL_FLDCR_QTY' OR
LV_FIELD = 'V_TOTAL_FLDCR_AMT'.
*--Display Total Field Credits Details
PERFORM GET_TOTAL_FLDCR_DETAILS.
ENDIF.
IF NOT IT_DETAILS[] IS INITIAL.
PERFORM DISPLAY_DETAIL_REPORT.
ENDIF.
ELSEIF SY-LSIND = '2'.
GET CURSOR FIELD LV_FIELD.
IF LV_FIELD = 'IT_DETAILS-BILL_DOC'.
IF NOT IT_DETAILS-BILL_DOC IS INITIAL.
*--Move the Selected Billing Document Number to a variable
LV_VBELN = IT_DETAILS-BILL_DOC.
*--Set Parameter ID 'VF' with teh Selected Billing Document Number
SET PARAMETER ID 'VF' FIELD LV_VBELN.
*--Call Transaction VF03 to Display the Billing Document
CALL TRANSACTION 'VF03' AND SKIP FIRST SCREEN.
ENDIF.
ELSE.
*--If anything other than Billing Document is Clicked,
Display an error message
MESSAGE S999 WITH TEXT-010. " Please select a Billing Document.
ENDIF..
ENDIF.
ENDFORM. " DISPLAY_DETAIL
&----
*& Form GET_TOTAL_SALES_DETAILS
&----
IF User Clicks on Total Sales Amount or Quantity
----
FORM GET_TOTAL_SALES_DETAILS.
Internal table To hold Net Value of Billing Document
DATA : BEGIN OF LT_VBRP OCCURS 0,
VBELN LIKE VBRP-VBELN, " Billing document
POSNR LIKE VBRP-POSNR, " Billing item
FKIMG LIKE VBRP-FKIMG, " Billed Quantity
NETWR LIKE VBRP-NETWR, " Net val in
END OF LT_VBRP.
CLEAR : IT_DETAILS, IT_DETAILS[].
LOOP AT IT_VBRK.
CLEAR : LT_VBRP,LT_VBRP[].
LOOP AT IT_VBRP WHERE VBELN = IT_VBRK-VBELN.
LT_VBRP-VBELN = IT_VBRP-VBELN.
LT_VBRP-POSNR = IT_VBRP-POSNR.
LT_VBRP-FKIMG = IT_VBRP-FKIMG.
LT_VBRP-NETWR = IT_VBRP-NETWR.
APPEND LT_VBRP.
CLEAR LT_VBRP.
ENDLOOP.
SORT LT_VBRP BY VBELN.
LOOP AT LT_VBRP.
AT NEW VBELN.
IT_DETAILS-CUST_NO = IT_VBRK-KUNAG.
IT_DETAILS-BILL_DOC = LT_VBRP-VBELN.
CLEAR : IT_DETAILS-QUANTITY,
IT_DETAILS-AMOUNT.
ENDAT.
IT_DETAILS-QUANTITY = IT_DETAILS-QUANTITY + LT_VBRP-FKIMG.
IT_DETAILS-AMOUNT = IT_DETAILS-AMOUNT + LT_VBRP-NETWR.
AT END OF VBELN.
APPEND IT_DETAILS.
CLEAR IT_DETAILS.
ENDAT.
ENDLOOP.
ENDLOOP.
ENDFORM. " GET_TOTAL_SALES_DETAILS
&----
*& Form GET_TOTAL_RETURNS_DETAILS
&----
IF User Clicks on Total Returns Amount or Quantity
----
FORM GET_TOTAL_RETURNS_DETAILS.
DATA : BEGIN OF LT_VBRP OCCURS 0,
VBELN LIKE VBRP-VBELN, " Billing document
POSNR LIKE VBRP-POSNR, " Billing item
FKIMG LIKE VBRP-FKIMG, " Billed Quantity
NETWR LIKE VBRP-NETWR, " Net val in
END OF LT_VBRP.
CLEAR : IT_DETAILS, IT_DETAILS[].
SORT IT_VBRP BY VBELN.
LOOP AT IT_VBRK WHERE FKART = 'RE'.
CLEAR : LT_VBRP,LT_VBRP[].
LOOP AT IT_VBRP WHERE VBELN = IT_VBRK-VBELN.
LT_VBRP-VBELN = IT_VBRP-VBELN.
LT_VBRP-POSNR = IT_VBRP-POSNR.
LT_VBRP-FKIMG = IT_VBRP-FKIMG.
LT_VBRP-NETWR = IT_VBRP-NETWR.
APPEND LT_VBRP.
CLEAR LT_VBRP.
ENDLOOP.
SORT LT_VBRP BY VBELN.
LOOP AT LT_VBRP.
AT NEW VBELN.
IT_DETAILS-CUST_NO = IT_VBRK-KUNAG.
IT_DETAILS-BILL_DOC = LT_VBRP-VBELN.
CLEAR : IT_DETAILS-QUANTITY,
IT_DETAILS-AMOUNT.
ENDAT.
IT_DETAILS-QUANTITY = IT_DETAILS-QUANTITY + LT_VBRP-FKIMG.
IT_DETAILS-AMOUNT = IT_DETAILS-AMOUNT + LT_VBRP-NETWR.
AT END OF VBELN.
APPEND IT_DETAILS.
CLEAR IT_DETAILS.
ENDAT.
ENDLOOP.
ENDLOOP.
ENDFORM. " GET_TOTAL_RETURNS_DETAILS
&----
*& Form GET_TOTAL_FLDCR_DETAILS
&----
IF User Clicks on Total Tield Credits Amount or Quantity
----
FORM GET_TOTAL_FLDCR_DETAILS.
DATA : BEGIN OF LT_VBRP OCCURS 0,
VBELN LIKE VBRP-VBELN, " Billing document
POSNR LIKE VBRP-POSNR, " Billing item
FKIMG LIKE VBRP-FKIMG, " Billed Quantity
NETWR LIKE VBRP-NETWR, " Net val in
END OF LT_VBRP.
CLEAR : IT_DETAILS, IT_DETAILS[].
SORT IT_VBRP BY VBELN.
LOOP AT IT_VBRK.
CLEAR : LT_VBRP,LT_VBRP[].
LOOP AT IT_VBRP WHERE VBELN = IT_VBRK-VBELN AND
AUGRU_AUFT = 'DU'.
LT_VBRP-VBELN = IT_VBRP-VBELN.
LT_VBRP-POSNR = IT_VBRP-POSNR.
LT_VBRP-FKIMG = IT_VBRP-FKIMG.
LT_VBRP-NETWR = IT_VBRP-NETWR.
APPEND LT_VBRP.
CLEAR LT_VBRP.
ENDLOOP.
SORT LT_VBRP BY VBELN.
LOOP AT LT_VBRP.
AT NEW VBELN.
IT_DETAILS-CUST_NO = IT_VBRK-KUNAG.
IT_DETAILS-BILL_DOC = LT_VBRP-VBELN.
CLEAR : IT_DETAILS-QUANTITY,
IT_DETAILS-AMOUNT.
ENDAT.
IT_DETAILS-QUANTITY = IT_DETAILS-QUANTITY + LT_VBRP-FKIMG.
IT_DETAILS-AMOUNT = IT_DETAILS-AMOUNT + LT_VBRP-NETWR.
AT END OF VBELN.
APPEND IT_DETAILS.
CLEAR IT_DETAILS.
ENDAT.
ENDLOOP.
ENDLOOP.
ENDFORM. " GET_TOTAL_FLDCR_DETAILS
&----
*& Form DISPLAY_DETAIL_REPORT.
&----
Display details for the quantity or the amount select
----
FORM DISPLAY_DETAIL_REPORT..
DATA : LV_TOTAL_AMOUNT_CUST LIKE VBRP-NETWR,
LV_TOTAL_QTY_CUST TYPE I,
LV_TOTAL_AMOUNT LIKE VBRP-NETWR,
LV_TOTAL_QTY TYPE I,
INTENSITY.
SORT IT_DETAILS BY CUST_NO BILL_DOC.
LOOP AT IT_DETAILS.
IF INTENSITY = ' '.
INTENSITY = 'X'.
ELSE.
INTENSITY = ' '.
ENDIF.
PERFORM FORMAT_COLOR USING 2 INTENSITY.
WRITE : /1 SY-VLINE.
AT NEW CUST_NO.
WRITE : 2(15) IT_DETAILS-CUST_NO.
ENDAT.
WRITE : 17 SY-VLINE,
18(16) IT_DETAILS-BILL_DOC HOTSPOT,
34 SY-VLINE,
35(20) IT_DETAILS-QUANTITY RIGHT-JUSTIFIED,
55 SY-VLINE,
56(20) IT_DETAILS-AMOUNT CURRENCY V_CURRENCY,
76 SY-VLINE.
LV_TOTAL_AMOUNT_CUST = LV_TOTAL_AMOUNT_CUST +
IT_DETAILS-AMOUNT.
LV_TOTAL_QTY_CUST = LV_TOTAL_QTY_CUST +
IT_DETAILS-QUANTITY.
LV_TOTAL_AMOUNT = LV_TOTAL_AMOUNT +
IT_DETAILS-AMOUNT.
LV_TOTAL_QTY = LV_TOTAL_QTY +
IT_DETAILS-QUANTITY.
HIDE IT_DETAILS-BILL_DOC.
AT END OF CUST_NO.
PERFORM FORMAT_COLOR USING 3 ' '.
WRITE : /1 SY-VLINE,
2 TEXT-015, " Net Total
34 SY-VLINE,
35(20) LV_TOTAL_QTY_CUST RIGHT-JUSTIFIED,
55 SY-VLINE,
56(20) LV_TOTAL_AMOUNT_CUST CURRENCY V_CURRENCY,
76 SY-VLINE.
CLEAR : LV_TOTAL_QTY_CUST, LV_TOTAL_AMOUNT_CUST.
CLEAR INTENSITY.
WRITE SY-ULINE(76).
ENDAT.
ENDLOOP.
PERFORM FORMAT_COLOR USING 3 'X'.
WRITE : /1 SY-VLINE,
2 TEXT-014, " Total
34 SY-VLINE,
35(20) LV_TOTAL_QTY RIGHT-JUSTIFIED,
55 SY-VLINE,
56(20) LV_TOTAL_AMOUNT CURRENCY V_CURRENCY,
76 SY-VLINE.
WRITE SY-ULINE(76).
ENDFORM. " DISPLAY_DETAIL_REPORT.
Thanks
Mahesh
‎2007 Aug 02 4:31 PM
Hi chandra,
1. This is a very simple program with simple alv of just one table.
2. Just copy paste to get a taste of it.
3.
report abc.
*----
TYPE-POOLS : slis.
DATA : alvfc TYPE slis_t_fieldcat_alv.
DATA : alvfcwa TYPE slis_fieldcat_alv.
*----
data : begin of itab occurs 0.
include structure usr02.
data : end of itab.
*----
START-OF-SELECTION.
select * from usr02
into table itab.
CALL FUNCTION 'REUSE_ALV_FIELDCATALOG_MERGE'
EXPORTING
i_program_name = sy-repid
i_internal_tabname = 'ITAB'
i_inclname = sy-repid
CHANGING
ct_fieldcat = alvfc
EXCEPTIONS
inconsistent_interface = 1
program_error = 2
OTHERS = 3.
*----
IMPORTANT
LOOP AT ALVFC INTO ALVFCWA.
IF ALVFCWA-FIELDNAME = 'USTYP'.
ALVFCWA-NO_CONVEXT = 'X'.
MODIFY ALVFC FROM ALVFCWA.
ENDIF.
ENDLOOP.
*----
Display
CALL FUNCTION 'REUSE_ALV_LIST_DISPLAY'
EXPORTING
it_fieldcat = alvfc
TABLES
t_outtab = itab
EXCEPTIONS
program_error = 1
OTHERS = 2.
regards,
amit m.
‎2007 Aug 02 4:37 PM
Hi,
Some important facts about ALV :
1. What is ALV ?
ALV stands for ABAP List Viewer.
The ALV Classic is a collective term for several function modules in function group SALV
The ALV Classic is a tool for the standardized output of
1 . Simple lists
2. Hierarchical/consecutive lists with two hierarchy levels
2. Why ALV ?
Until the introduction of the ABAP List Viewer (ALV), different report tools were used in the R/3 System.
Every report tool had its own function and application areas.
The ABAP List Viewer standardizes and simplifies the usage of lists in the R/3 System
Logic for presentation of data is removed from the selection of data.
Layout of the report is changeable without making a new selection or re-writing the code.
Standard Tool Functions have been enhanced with Component Specific Functions.
A standardized data interface and a standardized list layout is available for all lists.
3. Programming Steps :
Declare data areas.
Declare an internal table to store selected data.
Select data into the internal table.
Build the layout.
Build field catalogue.
Build sort catalogue.
Build event catalogue.
Start viewer.
Process call back events.
These are the facts about ALV which I have tried to highlight.
You can go through the following link for the details :
http://esnips.com/doc/ad20dca9-6182-4903-8d8f-96a66dc8590c/ALV.pdf
GO THROUGH THESE LINKS WHICH CONTAIN GOOD ALV DOCUMENTS
http://www.sapfriends.com/HelpSAP/ABAP%20List%20Viewer%20Classic%20(ALV).pdf
http://www.sap-hefte.de/download/dateien/1025/087_leseprobe.pdf
Reward if ti helps..
regards,
Omkar.
‎2007 Aug 02 4:38 PM
HI,
Find the code samples from basic to interactive reports here....
ALV ALL IN ONE
REPORT ZMK_ALLINONE_ALV .
&----
*& Program for displaying data using function modules : *
*& REUSE_ALV_LIST_DISPLAY *
*& REUSE_ALV_POPUP_TO_SELECT *
*& REUSE_ALV_GRID_DISPLAY *
*& *
&----
TABLES VBAK.
DATA it_vbak LIKE VBAK OCCURS 0 WITH HEADER LINE.
SELECTION-SCREEN uline.
PARAMETERS: ALV1 RADIOBUTTON GROUP ALV, "REUSE_ALV_LIST_DISPLAY
ALV2 RADIOBUTTON GROUP ALV, "REUSE_ALV_POPUP_TO_SELECT
ALV3 RADIOBUTTON GROUP ALV, "REUSE_ALV_GRID_DISPLAY
ALV4 RADIOBUTTON GROUP ALV. " NORMAL DISPLAY
SELECTION-SCREEN uline.
SELECT * FROM VBAK
INTO CORRESPONDING FIELDS OF TABLE it_vbak
UP TO 10 ROWS.
IF ALV1 = 'X'.
PERFORM ALV_FUNC1.
ELSEIF ALV2 = 'X'.
PERFORM ALV_FUNC2.
ELSEIF ALV3 = 'X'.
PERFORM ALV_FUNC3.
ELSEIF ALV4 = 'X'.
PERFORM NORM.
ENDIF.
&----
*& Form ALV_FUNC1
&----
text
----
--> p1 text
<-- p2 text
----
FORM ALV_FUNC1 .
CALL FUNCTION 'REUSE_ALV_LIST_DISPLAY'
EXPORTING
I_STRUCTURE_NAME = 'VBAK'
TABLES
T_OUTTAB = it_vbak
EXCEPTIONS
PROGRAM_ERROR = 1
OTHERS = 2
.
IF SY-SUBRC <> 0.
MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
ENDFORM. " ALV_FUNC1
&----
*& Form ALV_FUNC2
&----
text
----
--> p1 text
<-- p2 text
----
FORM ALV_FUNC2 .
CALL FUNCTION 'REUSE_ALV_POPUP_TO_SELECT'
EXPORTING
I_TITLE = 'SALES ORDER INFO'
I_ZEBRA = 'X'
I_TABNAME = 1
I_STRUCTURE_NAME = 'vbak'
TABLES
T_OUTTAB = it_vbak
EXCEPTIONS
PROGRAM_ERROR = 1
OTHERS = 2
.
IF SY-SUBRC <> 0.
MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
ENDFORM. " ALV_FUNC2
&----
*& Form ALV_FUNC3
&----
text
----
--> p1 text
<-- p2 text
----
FORM ALV_FUNC3 .
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
EXPORTING
I_STRUCTURE_NAME = 'vbak'
I_GRID_TITLE = 'SALES ORDER INFO'
TABLES
T_OUTTAB = it_vbak
EXCEPTIONS
PROGRAM_ERROR = 1
OTHERS = 2
.
IF SY-SUBRC <> 0.
MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
ENDFORM. " ALV_FUNC3
&----
*& Form NORM
&----
text
----
--> p1 text
<-- p2 text
----
FORM NORM .
format intensified.
skip 1.
WRITE: /'SALES DOC.',
' Created on ',
' Time',
' Created by',
' Valid from ',
' Sold-to party'.
format intensified off.
skip 2.
LOOP AT it_vbak.
write: / it_vbak-vbeln,' ',
it_vbak-erdat,' ',
it_vbak-erzet,' ',
it_vbak-ERNAM,' ',
it_vbak-ANGDT,' ',
it_vbak-KUNNR.
endloop.
ENDFORM. " NORM
REPORT ZMK_SHIPMENT_ALV
no standard page heading
line-size 105
line-count 50(5)
message-id zz.
**********************************
TABLES *
**********************************
tables : vttk, "Shipment Header
vttp, " Shipment Item
lips. " Delivary Item
**********************************
***TYPE-POOLS *
**********************************
type-pools : slis.
**********************************
*WORK AREAS *
**********************************
Work area for field catalog table
data : wa_fldcat type slis_fieldcat_alv.
Work area for Events table
data : wa_events type slis_alv_event.
Work area for layout.
data : wa_layout type slis_layout_alv.
***********************************
*INTERNAL TABLES *
***********************************
Shimpment Details
data : begin of itab occurs 0,
tknum like vttk-tknum,
shtyp like vttk-shtyp,
tpnum like vttp-tpnum,
vbeln like vttp-vbeln,
end of itab.
data : begin of itab1 occurs 0,
vbeln like lips-vbeln,
posnr like lips-posnr,
matnr like lips-matnr,
lfimg like lips-lfimg,
meins like lips-meins,
end of itab1.
For field catalog table
data : it_fldcats type slis_t_fieldcat_alv.
For Events table
data : it_event type slis_t_event.
For layout.
data : it_layout type slis_layout_alv.
For field catalog table
data : it_fldcats1 type slis_t_fieldcat_alv.
For Events table
data : it_event1 type slis_t_event.
data : v_repid like sy-repid.
*Data Declaration
******************
data: v_index type sy-index,
v_vbeln like lips-vbeln.
*SELECT-OPTIONS
****************
selection-screen begin of block b with frame title text-001.
select-options : s_tknum for vttk-tknum .
selection-screen end of block b.
*INITIALIZATION
****************
initialization.
v_repid = sy-repid.
*START-OF-SELCTION
********************
start-of-selection.
perform populate-data.
sort itab by tknum.
top-of-page.
write : 'Shipment wise Delivary Report'.
end-of-selection.
perform build-fieldcatalog.
perform modify-fieldcatalog.
perform build-events.
perform modify-events.
perform set-layout.
perform set-pfstatus.
perform list-display.
&----
*& Form populate-data
Retrives the Shipment data depending on the selection criteria *
&----
FORM populate-data.
select vttk~tknum
vttk~shtyp
vttp~tpnum
vttp~vbeln
into table itab
from vttk
join vttp
on vttptknum = vttktknum
where vttk~tknum in s_tknum.
if sy-subrc <> 0.
message e999 with 'NO DATA FOUND'.
exit.
endif.
ENDFORM. " populate-data
&----
*& Form build-fieldcatalog
&----
text
----
--> p1 text
<-- p2 text
----
form build-fieldcatalog.
call function 'REUSE_ALV_FIELDCATALOG_MERGE'
exporting
i_program_name = v_repid
i_internal_tabname = 'ITAB'
I_STRUCTURE_NAME =
I_CLIENT_NEVER_DISPLAY = 'X'
i_inclname = v_repid
I_BYPASSING_BUFFER =
I_BUFFER_ACTIVE =
changing
ct_fieldcat = it_fldcats
exceptions
inconsistent_interface = 1
program_error = 2
others = 3
.
if sy-subrc <> 0.
MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
endif.
endform. " BUILD-FIELDCATALOG
&----
*& Form build-events
&----
text
----
--> p1 text
<-- p2 text
----
FORM build-events.
CALL FUNCTION 'REUSE_ALV_EVENTS_GET'
EXPORTING
I_LIST_TYPE = 0
IMPORTING
ET_EVENTS = it_event
EXCEPTIONS
LIST_TYPE_WRONG = 1
OTHERS = 2
.
IF SY-SUBRC <> 0.
MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
ENDFORM. " build-events
&----
*& Form set-layout
&----
text
----
--> p1 text
<-- p2 text
----
FORM set-layout.
wa_layout-zebra = 'X'.
wa_layout-colwidth_optimize = 'X'.
wa_layout-no_colhead = space.
wa_layout-no_vline = space.
ENDFORM. " set-layout
&----
*& Form list-display
&----
text
----
--> p1 text
<-- p2 text
----
FORM list-display.
CALL FUNCTION 'REUSE_ALV_LIST_DISPLAY'
EXPORTING
I_INTERFACE_CHECK = ' '
I_BYPASSING_BUFFER =
I_BUFFER_ACTIVE = ' '
I_CALLBACK_PROGRAM = v_repid
I_CALLBACK_PF_STATUS_SET = ' '
I_CALLBACK_USER_COMMAND = 'USER_COMMAND'
I_STRUCTURE_NAME =
IS_LAYOUT = wa_layout
IT_FIELDCAT = it_fldcats
IT_EXCLUDING =
IT_SPECIAL_GROUPS =
IT_SORT =
IT_FILTER =
IS_SEL_HIDE =
I_DEFAULT = 'X'
I_SAVE = ' '
IS_VARIANT =
IT_EVENTS = it_event
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
IMPORTING
E_EXIT_CAUSED_BY_CALLER =
ES_EXIT_CAUSED_BY_USER =
TABLES
T_OUTTAB = itab
EXCEPTIONS
PROGRAM_ERROR = 1
OTHERS = 2
.
IF SY-SUBRC <> 0.
MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
ENDFORM. " list-display
&----
*& Form modify-fieldcatalog
&----
text
----
--> p1 text
<-- p2 text
----
FORM modify-fieldcatalog.
loop at it_fldcats into wa_fldcat.
case wa_fldcat-fieldname.
when 'TKNUM'.
wa_fldcat-seltext_l = 'Ship No.'.
wa_fldcat-col_pos = 1.
wa_fldcat-ddictxt = 'L'.
when 'SHTYP'.
wa_fldcat-seltext_l = 'Ship Type'.
wa_fldcat-col_pos = 2.
wa_fldcat-ddictxt = 'L'.
when 'TPNUM'.
wa_fldcat-seltext_l = 'Item No.'.
wa_fldcat-col_pos = 3.
wa_fldcat-ddictxt = 'L'.
when 'VBELN'.
wa_fldcat-seltext_l = 'Delivary No.'.
wa_fldcat-hotspot = 'X'.
wa_fldcat-emphasize = 'C311'.
wa_fldcat-col_pos = 4.
wa_fldcat-ddictxt = 'L'.
endcase.
modify it_fldcats from wa_fldcat.
endloop.
ENDFORM. " modify-fieldcatalog
&----
*& Form modify-events
&----
text
----
--> p1 text
<-- p2 text
----
form modify-events.
read table it_event with key name =
slis_ev_top_of_page into wa_events.
if sy-subrc = 0.
wa_events-form = 'HEADER-OF-REPORT'.
modify it_event from wa_events index sy-tabix.
clear wa_events.
endif.
read table it_event with key name =
slis_ev_end_of_page into wa_events.
if sy-subrc = 0.
wa_events-form = 'FOOTER-OF-REPORT'.
modify it_event from wa_events index sy-tabix.
clear wa_events.
endif.
endform. " modify-events
&----
*& Form HEADER-OF-REPORT
&----
text
----
--> p1 text
<-- p2 text
----
FORM HEADER-OF-REPORT.
write : 'Shipment Wise Delivary Report'.
ENDFORM. " HEADER-OF-REPORT
&----
*& Form FOOTER-OF-REPORT
&----
text
----
--> p1 text
<-- p2 text
----
FORM FOOTER-OF-REPORT.
write : 'End of Report'.
ENDFORM. " FOOTER-OF-REPORT
&----
*& Form USER_COMMAND
&----
User command for Calling Transaction VT03N, Execute and Refresh
----
FORM user_command USING p_ucomm LIKE sy-ucomm
p_selfield TYPE slis_selfield.
V_INDEX = P_SELFIELD-TABINDEX. " holds the selected table index
CASE p_ucomm.
WHEN '&IC1'.
IF p_selfield-fieldname eq 'VBELN'.
perform secondary_list.
ENDIF.
ENDCASE.
ENDFORM. " USER_COMMAND
&----
*& Form secondary_list
&----
text
----
--> p1 text
<-- p2 text
----
FORM secondary_list.
perform get_data1.
perform build-fieldcatalog1.
perform modify-fieldcatalog1.
perform build-events1.
perform modify-events1.
perform set-layout.
perform set-pfstatus.
perform list-display1.
ENDFORM. " secondary_list
&----
*& Form build-fieldcatalog1
&----
text
----
--> p1 text
<-- p2 text
----
FORM build-fieldcatalog1.
call function 'REUSE_ALV_FIELDCATALOG_MERGE'
exporting
i_program_name = v_repid
i_internal_tabname = 'ITAB1'
I_STRUCTURE_NAME =
I_CLIENT_NEVER_DISPLAY = 'X'
i_inclname = v_repid
I_BYPASSING_BUFFER =
I_BUFFER_ACTIVE =
changing
ct_fieldcat = it_fldcats1
exceptions
inconsistent_interface = 1
program_error = 2
others = 3
.
if sy-subrc <> 0.
MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
endif.
ENDFORM. " build-fieldcatalog1
&----
*& Form modify-fieldcatalog1
&----
text
----
--> p1 text
<-- p2 text
----
FORM modify-fieldcatalog1.
loop at it_fldcats into wa_fldcat.
case wa_fldcat-fieldname.
when 'VBELN'.
wa_fldcat-seltext_l = 'Delivary No.'.
wa_fldcat-col_pos = 1.
wa_fldcat-ddictxt = 'L'.
when 'POSNR'.
wa_fldcat-seltext_l = 'Item No'.
wa_fldcat-col_pos = 2.
wa_fldcat-ddictxt = 'L'.
when 'MATNR'.
wa_fldcat-seltext_l = 'Material'.
wa_fldcat-col_pos = 3.
wa_fldcat-ddictxt = 'L'.
when 'LFIMG'.
wa_fldcat-seltext_l = 'Quantity'.
wa_fldcat-col_pos = 4.
wa_fldcat-ddictxt = 'L'.
when 'MEINS'.
wa_fldcat-seltext_l = 'Unit of Measure'.
wa_fldcat-col_pos = 5.
wa_fldcat-ddictxt = 'L'.
endcase.
modify it_fldcats from wa_fldcat.
endloop.
ENDFORM. " modify-fieldcatalog1
&----
*& Form build-events1
&----
text
----
--> p1 text
<-- p2 text
----
FORM build-events1.
CALL FUNCTION 'REUSE_ALV_EVENTS_GET'
EXPORTING
I_LIST_TYPE = 0
IMPORTING
ET_EVENTS = it_event1
EXCEPTIONS
LIST_TYPE_WRONG = 1
OTHERS = 2
.
IF SY-SUBRC <> 0.
MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
ENDFORM. " build-events1
&----
*& Form modify-events1
&----
text
----
--> p1 text
<-- p2 text
----
FORM modify-events1.
read table it_event1 with key name =
slis_ev_top_of_page into wa_events.
if sy-subrc = 0.
wa_events-form = 'HEADER_OF_REPORT_2'.
modify it_event1 from wa_events index sy-tabix.
clear wa_events.
endif.
ENDFORM. " modify-events1
&----
*& Form list-display1
&----
text
----
--> p1 text
<-- p2 text
----
FORM list-display1.
*CALL FUNCTION 'REUSE_ALV_LIST_DISPLAY'
EXPORTING
I_INTERFACE_CHECK = ' '
I_BYPASSING_BUFFER =
I_BUFFER_ACTIVE = ' '
I_CALLBACK_PROGRAM = v_repid
I_CALLBACK_PF_STATUS_SET = ' '
I_CALLBACK_USER_COMMAND = 'USER_COMMAND'
I_STRUCTURE_NAME =
IS_LAYOUT = wa_layout
IT_FIELDCAT = it_fldcats1
IT_EXCLUDING =
IT_SPECIAL_GROUPS =
IT_SORT =
IT_FILTER =
IS_SEL_HIDE =
I_DEFAULT = 'X'
I_SAVE = ' '
IS_VARIANT =
IT_EVENTS = it_event1
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
IMPORTING
E_EXIT_CAUSED_BY_CALLER =
ES_EXIT_CAUSED_BY_USER =
TABLES
T_OUTTAB = itab1
EXCEPTIONS
PROGRAM_ERROR = 1
OTHERS = 2
.
*IF SY-SUBRC <> 0.
MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
*ENDIF.
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
EXPORTING
I_INTERFACE_CHECK = ' '
I_BYPASSING_BUFFER =
I_BUFFER_ACTIVE = ' '
I_CALLBACK_PROGRAM = v_repid
I_CALLBACK_PF_STATUS_SET = ' '
I_CALLBACK_USER_COMMAND = ' '
I_CALLBACK_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 = wa_layout
IT_FIELDCAT = it_fldcats1
IT_EXCLUDING =
IT_SPECIAL_GROUPS =
IT_SORT =
IT_FILTER =
IS_SEL_HIDE =
I_DEFAULT = 'X'
I_SAVE = ' '
IS_VARIANT =
IT_EVENTS = it_event1
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
IT_ALV_GRAPHICS =
IT_ADD_FIELDCAT =
IT_HYPERLINK =
I_HTML_HEIGHT_TOP =
I_HTML_HEIGHT_END =
IT_EXCEPT_QINFO =
IMPORTING
E_EXIT_CAUSED_BY_CALLER =
ES_EXIT_CAUSED_BY_USER =
TABLES
T_OUTTAB = itab1
EXCEPTIONS
PROGRAM_ERROR = 1
OTHERS = 2
.
IF SY-SUBRC <> 0.
MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
ENDFORM. " list-display1
&----
*& Form get_data1
&----
text
----
--> p1 text
<-- p2 text
----
FORM get_data1.
READ TABLE itab INDEX V_INDEX.
v_vbeln = itab-vbeln.
select vbeln
posnr
matnr
lfimg
meins
from lips
into table itab1
where vbeln eq v_vbeln.
ENDFORM. " get_data1
&----
*& Form header_of_report_2
&----
text
----
--> p1 text
<-- p2 text
----
FORM header_of_report_2.
write: 'Delivary item list'.
ENDFORM. " header_of_report_2
REPORT ZMK_PO_ALV .
*******************
TABLES *
*******************
tables : ekko,
ekpo.
********************
TYPES
********************
type-pools: slis.
********************
INTERNAL TABLES
********************
data: begin of itab occurs 0,
EBELN like ekko-ebeln, "Purchasing Document Number
BUKRS like ekko-bukrs, "Company Code
BSTYP like ekko-bstyp, "Purchasing document category
STATU like ekko-statu, "Status of purchasing document
AEDAT like ekko-aedat, "Date on which the record was created
LIFNR like ekko-lifnr, "Vendor's account number
end of itab.
data: begin of itab1 occurs 0,
EBELN like ekpo-ebeln,
EBELP like ekpo-ebelp,
MATNR like ekpo-matnr,
MATKL like ekpo-matkl,
MENGE like ekpo-menge,
end of itab1.
data: begin of itab2 occurs 0,
LIFNR like lfa1-lifnr,
NAME1 like lfa1-name1,
ADRNR like lfa1-adrnr,
ORT01 like lfa1-ort01,
ORT02 like lfa1-ort02,
PFACH like lfa1-pfach,
end of itab2.
**************************************
ALV Specific Tables and Structures
**************************************
data : v_repid like sy-repid,
v_index like sy-index,
v_eblen like ekko-ebeln,
v_lifnr like ekko-lifnr.
**************************************
ALV Specific Tables and Structures
**************************************
Work area for field catalog table
data : wa_fldcat type slis_fieldcat_alv.
data: wa_events type slis_alv_event.
data: wa_layout type slis_layout_alv.
data: it_fldcat type slis_t_fieldcat_alv.
data: it_events type slis_t_event.
data: it_fldcat1 type slis_t_fieldcat_alv.
data: it_events1 type slis_t_event.
data: it_fldcat2 type slis_t_fieldcat_alv.
data: it_events2 type slis_t_event.
*************************************
Selection Screen
***************************************
selection-screen begin of block b with frame title text-001.
select-options : s_ebeln for ekko-ebeln .
selection-screen end of block b.
**************************************
Start of Selection
*****************************************
initialization.
v_repid = sy-repid.
**************************************
Start of Selection
*****************************************
start-of-selection.
perform get_data.
**************************************
End of Selection
*****************************************
end-of-selection.
perform build_fldcatalog.
perform modify_fldcatalog.
perform build_events.
perform modify_events.
perform build_layout.
perform list_display.
&----
*& Form get_data
&----
text
----
--> p1 text
<-- p2 text
----
FORM get_data.
select
EBELN
BUKRS
BSTYP
STATU
AEDAT
LIFNR
from ekko
into table itab
where ebeln in s_ebeln.
ENDFORM. " get_data
&----
*& Form build_fldcatalog
&----
text
----
--> p1 text
<-- p2 text
----
FORM build_fldcatalog.
CALL FUNCTION 'REUSE_ALV_FIELDCATALOG_MERGE'
EXPORTING
I_PROGRAM_NAME = v_repid
I_INTERNAL_TABNAME = 'ITAB'
I_STRUCTURE_NAME =
I_CLIENT_NEVER_DISPLAY = 'X'
I_INCLNAME = v_repid
I_BYPASSING_BUFFER =
I_BUFFER_ACTIVE =
CHANGING
CT_FIELDCAT = it_fldcat
EXCEPTIONS
INCONSISTENT_INTERFACE = 1
PROGRAM_ERROR = 2
OTHERS = 3
.
IF SY-SUBRC <> 0.
MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
ENDFORM. " build_fldcatalog
&----
*& Form build_events
&----
text
----
--> p1 text
<-- p2 text
----
FORM build_events.
CALL FUNCTION 'REUSE_ALV_EVENTS_GET'
EXPORTING
I_LIST_TYPE = 0
IMPORTING
ET_EVENTS = it_events
EXCEPTIONS
LIST_TYPE_WRONG = 1
OTHERS = 2
.
IF SY-SUBRC <> 0.
MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
ENDFORM. " build_events
&----
*& Form modify_events
&----
text
----
--> p1 text
<-- p2 text
----
FORM modify_events.
read table it_events with key name =
slis_ev_top_of_page into wa_events.
if sy-subrc eq 0.
wa_events-form = 'HEADER-OF-REPORT'.
modify it_events from wa_events index sy-tabix.
endif.
ENDFORM. " modify_events
&----
*& Form build_layout
&----
text
----
--> p1 text
<-- p2 text
----
FORM build_layout.
wa_layout-zebra = 'X'.
wa_layout-colwidth_optimize = 'X'.
wa_layout-no_colhead = space.
wa_layout-no_vline = space.
.
ENDFORM. " build_layout
&----
*& Form list_display
&----
text
----
--> p1 text
<-- p2 text
----
FORM list_display.
CALL FUNCTION 'REUSE_ALV_LIST_DISPLAY'
EXPORTING
I_INTERFACE_CHECK = ' '
I_BYPASSING_BUFFER =
I_BUFFER_ACTIVE = ' '
I_CALLBACK_PROGRAM = v_repid
I_CALLBACK_PF_STATUS_SET = ' '
I_CALLBACK_USER_COMMAND = 'USER_COMMAND'
I_STRUCTURE_NAME =
IS_LAYOUT = wa_layout
IT_FIELDCAT = it_fldcat
IT_EXCLUDING =
IT_SPECIAL_GROUPS =
IT_SORT =
IT_FILTER =
IS_SEL_HIDE =
I_DEFAULT = 'X'
I_SAVE = ' '
IS_VARIANT =
IT_EVENTS = it_events
IT_EVENT_EXIT =
IS_PRINT =
IS_REPREP_ID =
I_SCREEN_START_COLUMN = 30
I_SCREEN_START_LINE = 0
I_SCREEN_END_COLUMN = 0
I_SCREEN_END_LINE = 0
IMPORTING
E_EXIT_CAUSED_BY_CALLER =
ES_EXIT_CAUSED_BY_USER =
TABLES
T_OUTTAB = itab
EXCEPTIONS
PROGRAM_ERROR = 1
OTHERS = 2
.
IF SY-SUBRC <> 0.
MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
ENDFORM. " list_display
&----
*& Form modify_fldcatalog
&----
text
----
--> p1 text
<-- p2 text
----
FORM modify_fldcatalog.
loop at it_fldcat into wa_fldcat.
case wa_fldcat-fieldname.
when 'EBELN'.
wa_fldcat-seltext_l = 'Purchase Order'.
wa_fldcat-emphasize = 'C811'.
wa_fldcat-hotspot = 'X'.
wa_fldcat-col_pos = 1.
wa_fldcat-ddictxt = 'L'.
when 'BUKRS'.
wa_fldcat-seltext_l = 'Company Code'.
wa_fldcat-col_pos = 2.
wa_fldcat-ddictxt = 'L'.
when 'BSTYP'.
wa_fldcat-seltext_l = 'PO Category'.
wa_fldcat-col_pos = 3.
wa_fldcat-ddictxt = 'L'.
when 'STATU'.
wa_fldcat-seltext_l = 'PO Status'.
wa_fldcat-col_pos = 4.
wa_fldcat-tech ='X'.
wa_fldcat-ddictxt = 'L'.
when 'AEDAT'.
wa_fldcat-seltext_l = 'Date Created'.
wa_fldcat-col_pos = 5.
wa_fldcat-ddictxt = 'L'.
when 'LIFNR'.
wa_fldcat-seltext_l = 'Vendor'.
wa_fldcat-hotspot = 'X'.
wa_fldcat-emphasize = 'C511'.
wa_fldcat-col_pos = 6.
wa_fldcat-ddictxt = 'L'.
endcase.
modify it_fldcat from wa_fldcat.
ENDLOOP.
ENDFORM. " modify_fldcatalog
&----
*& Form header-of-page
&----
text
----
--> p1 text
<-- p2 text
----
FORM header-of-report.
skip 2.
write : /20 'Purchase Order List Report'.
skip 2.
ENDFORM. " header-of-report
&----
*& Form USER_COMMAND
&----
User command for Calling Transaction VT03N, Execute and Refresh
----
FORM user_command USING p_ucomm LIKE sy-ucomm
p_selfield TYPE slis_selfield.
V_INDEX = P_SELFIELD-TABINDEX. " holds the selected table index
CASE p_ucomm.
WHEN '&IC1'.
IF p_selfield-fieldname eq 'EBELN'.
perform display_po_item.
ENDIF.
IF p_selfield-fieldname eq 'LIFNR'.
perform display_vendor_info.
endif.
ENDCASE.
ENDFORM. " USER_COMMAND
&----
*& Form secondary_list
&----
text
----
--> p1 text
<-- p2 text
----
FORM display_po_item.
read table itab index v_index.
v_eblen = itab-ebeln.
perform get_item_data.
ENDFORM. " secondary_list
&----
*& Form display_vendor_info
&----
text
----
--> p1 text
<-- p2 text
----
FORM display_vendor_info.
read table itab index v_index.
v_lifnr = itab-lifnr.
perform get_vendor_info.
ENDFORM. " display_vendor_info
&----
*& Form get_item_data
&----
text
----
--> p1 text
<-- p2 text
----
FORM get_item_data.
clear itab1.
refresh itab1.
select EBELN
EBELP
MATNR
MATKL
MENGE
from ekpo
into table itab1
where ebeln eq v_eblen.
if sy-subrc eq 0.
perform build_catalog1.
perform modify_catalog1.
perform build_events1.
perform modify_events1.
perform list_display1.
endif.
ENDFORM. " get_item_data
&----
*& Form build_catalog1
&----
text
----
--> p1 text
<-- p2 text
----
FORM build_catalog1.
CALL FUNCTION 'REUSE_ALV_FIELDCATALOG_MERGE'
EXPORTING
I_PROGRAM_NAME = v_repid
I_INTERNAL_TABNAME = 'ITAB1'
I_STRUCTURE_NAME =
I_CLIENT_NEVER_DISPLAY = 'X'
I_INCLNAME = v_repid
I_BYPASSING_BUFFER =
I_BUFFER_ACTIVE =
CHANGING
CT_FIELDCAT = it_fldcat1
EXCEPTIONS
INCONSISTENT_INTERFACE = 1
PROGRAM_ERROR = 2
OTHERS = 3
.
IF SY-SUBRC <> 0.
MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
ENDFORM. " build_catalog1
&----
*& Form modify_catalog1
&----
text
----
--> p1 text
<-- p2 text
----
FORM modify_catalog1.
ENDFORM. " modify_catalog1
&----
*& Form build_events1
&----
text
----
--> p1 text
<-- p2 text
----
FORM build_events1.
CALL FUNCTION 'REUSE_ALV_EVENTS_GET'
EXPORTING
I_LIST_TYPE = 0
IMPORTING
ET_EVENTS = it_events1
EXCEPTIONS
LIST_TYPE_WRONG = 1
OTHERS = 2
.
IF SY-SUBRC <> 0.
MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
ENDFORM. " build_events1
&----
*& Form modify_events1
&----
text
----
--> p1 text
<-- p2 text
----
FORM modify_events1.
read table it_events1 with key name =
slis_ev_top_of_page into wa_events.
if sy-subrc eq 0.
wa_events-form = 'HEADER-OF-REPORT1'.
modify it_events1 from wa_events index sy-tabix.
endif.
ENDFORM. " modify_events1
&----
*& Form list_display1
&----
text
----
--> p1 text
<-- p2 text
----
FORM list_display1.
CALL FUNCTION 'REUSE_ALV_LIST_DISPLAY'
EXPORTING
I_INTERFACE_CHECK = ' '
I_BYPASSING_BUFFER =
I_BUFFER_ACTIVE = ' '
I_CALLBACK_PROGRAM = v_repid
I_CALLBACK_PF_STATUS_SET = ' '
I_CALLBACK_USER_COMMAND = ' '
I_STRUCTURE_NAME =
IS_LAYOUT = wa_layout
IT_FIELDCAT = it_fldcat1
IT_EXCLUDING =
IT_SPECIAL_GROUPS =
IT_SORT =
IT_FILTER =
IS_SEL_HIDE =
I_DEFAULT = 'X'
I_SAVE = ' '
IS_VARIANT =
IT_EVENTS = it_events1
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
IMPORTING
E_EXIT_CAUSED_BY_CALLER =
ES_EXIT_CAUSED_BY_USER =
TABLES
T_OUTTAB = itab1
EXCEPTIONS
PROGRAM_ERROR = 1
OTHERS = 2
.
IF SY-SUBRC <> 0.
MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
ENDFORM. " list_display1
&----
*& Form header-of-report1
&----
text
----
--> p1 text
<-- p2 text
----
FORM header-of-report1.
skip 2.
write : 'ITEM WISE DEATILS OF A PURCHASE ORDER' centered.
skip 3.
ENDFORM. " header-of-report1
&----
*& Form get_vendor_info
&----
text
----
--> p1 text
<-- p2 text
----
FORM get_vendor_info.
select LIFNR
NAME1
ADRNR
ORT01
ORT02
PFACH
from lfa1
into table itab2
where lifnr eq v_lifnr.
if sy-subrc eq 0.
perform build_catalog2.
perform modify_catalog2.
perform build_events2.
perform modify_events2.
perform list_display2.
endif.
ENDFORM. " get_item_data
&----
*& Form build_catalog1
&----
text
----
--> p1 text
<-- p2 text
----
FORM build_catalog2.
CALL FUNCTION 'REUSE_ALV_FIELDCATALOG_MERGE'
EXPORTING
I_PROGRAM_NAME = v_repid
I_INTERNAL_TABNAME = 'ITAB2'
I_STRUCTURE_NAME =
I_CLIENT_NEVER_DISPLAY = 'X'
I_INCLNAME = v_repid
I_BYPASSING_BUFFER =
I_BUFFER_ACTIVE =
CHANGING
CT_FIELDCAT = it_fldcat2
EXCEPTIONS
INCONSISTENT_INTERFACE = 1
PROGRAM_ERROR = 2
OTHERS = 3
.
IF SY-SUBRC <> 0.
MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
ENDFORM. " build_catalog1
&----
*& Form modify_catalog1
&----
text
----
--> p1 text
<-- p2 text
----
FORM modify_catalog2.
ENDFORM. " modify_catalog1
&----
*& Form build_events1
&----
text
----
--> p1 text
<-- p2 text
----
FORM build_events2.
CALL FUNCTION 'REUSE_ALV_EVENTS_GET'
EXPORTING
I_LIST_TYPE = 0
IMPORTING
ET_EVENTS = it_events2
EXCEPTIONS
LIST_TYPE_WRONG = 1
OTHERS = 2
.
IF SY-SUBRC <> 0.
MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
ENDFORM. " build_events1
&----
*& Form modify_events1
&----
text
----
--> p1 text
<-- p2 text
----
FORM modify_events2.
read table it_events2 with key name =
slis_ev_top_of_page into wa_events.
if sy-subrc eq 0.
wa_events-form = 'HEADER-OF-REPORT2'.
modify it_events2 from wa_events index sy-tabix.
endif.
ENDFORM. " modify_events1
&----
*& Form list_display1
&----
text
----
--> p1 text
<-- p2 text
----
FORM list_display2.
CALL FUNCTION 'REUSE_ALV_LIST_DISPLAY'
EXPORTING
I_INTERFACE_CHECK = ' '
I_BYPASSING_BUFFER =
I_BUFFER_ACTIVE = ' '
I_CALLBACK_PROGRAM = v_repid
I_CALLBACK_PF_STATUS_SET = ' '
I_CALLBACK_USER_COMMAND = ' '
I_STRUCTURE_NAME =
IS_LAYOUT = wa_layout
IT_FIELDCAT = it_fldcat2
IT_EXCLUDING =
IT_SPECIAL_GROUPS =
IT_SORT =
IT_FILTER =
IS_SEL_HIDE =
I_DEFAULT = 'X'
I_SAVE = ' '
IS_VARIANT =
IT_EVENTS = it_events2
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
IMPORTING
E_EXIT_CAUSED_BY_CALLER =
ES_EXIT_CAUSED_BY_USER =
TABLES
T_OUTTAB = itab2
EXCEPTIONS
PROGRAM_ERROR = 1
OTHERS = 2
.
IF SY-SUBRC <> 0.
MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
ENDFORM. " list_display1
&----
*& Form header-of-report1
&----
text
----
--> p1 text
<-- p2 text
----
FORM header-of-report2.
skip 2.
write : 'VENDOR DETAILS' centered.
skip 3.
ENDFORM. " header-of-report1
<b>ALV INTERACTIVE REPORT</b>
REPORT ZMK_SHIPMENT_ALV
no standard page heading
line-size 105
line-count 50(5)
message-id zz.
**********************************
TABLES *
**********************************
tables : vttk, "Shipment Header
vttp, " Shipment Item
lips. " Delivary Item
**********************************
***TYPE-POOLS *
**********************************
type-pools : slis.
**********************************
*WORK AREAS *
**********************************
Work area for field catalog table
data : wa_fldcat type slis_fieldcat_alv.
Work area for Events table
data : wa_events type slis_alv_event.
Work area for layout.
data : wa_layout type slis_layout_alv.
***********************************
*INTERNAL TABLES *
***********************************
Shimpment Details
data : begin of itab occurs 0,
tknum like vttk-tknum,
shtyp like vttk-shtyp,
tpnum like vttp-tpnum,
vbeln like vttp-vbeln,
end of itab.
data : begin of itab1 occurs 0,
vbeln like lips-vbeln,
posnr like lips-posnr,
matnr like lips-matnr,
lfimg like lips-lfimg,
meins like lips-meins,
end of itab1.
For field catalog table
data : it_fldcats type slis_t_fieldcat_alv.
For Events table
data : it_event type slis_t_event.
For layout.
data : it_layout type slis_layout_alv.
For field catalog table
data : it_fldcats1 type slis_t_fieldcat_alv.
For Events table
data : it_event1 type slis_t_event.
data : v_repid like sy-repid.
*Data Declaration
******************
data: v_index type sy-index,
v_vbeln like lips-vbeln.
*SELECT-OPTIONS
****************
selection-screen begin of block b with frame title text-001.
select-options : s_tknum for vttk-tknum .
selection-screen end of block b.
*INITIALIZATION
****************
initialization.
v_repid = sy-repid.
*START-OF-SELCTION
********************
start-of-selection.
perform populate-data.
sort itab by tknum.
top-of-page.
write : 'Shipment wise Delivary Report'.
end-of-selection.
perform build-fieldcatalog.
perform modify-fieldcatalog.
perform build-events.
perform modify-events.
perform set-layout.
perform set-pfstatus.
perform list-display.
&----
*& Form populate-data
Retrives the Shipment data depending on the selection criteria *
&----
FORM populate-data.
select vttk~tknum
vttk~shtyp
vttp~tpnum
vttp~vbeln
into table itab
from vttk
join vttp
on vttptknum = vttktknum
where vttk~tknum in s_tknum.
if sy-subrc <> 0.
message e999 with 'NO DATA FOUND'.
exit.
endif.
ENDFORM. " populate-data
&----
*& Form build-fieldcatalog
&----
text
----
--> p1 text
<-- p2 text
----
form build-fieldcatalog.
call function 'REUSE_ALV_FIELDCATALOG_MERGE'
exporting
i_program_name = v_repid
i_internal_tabname = 'ITAB'
I_STRUCTURE_NAME =
I_CLIENT_NEVER_DISPLAY = 'X'
i_inclname = v_repid
I_BYPASSING_BUFFER =
I_BUFFER_ACTIVE =
changing
ct_fieldcat = it_fldcats
exceptions
inconsistent_interface = 1
program_error = 2
others = 3
.
if sy-subrc <> 0.
MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
endif.
endform. " BUILD-FIELDCATALOG
&----
*& Form build-events
&----
text
----
--> p1 text
<-- p2 text
----
FORM build-events.
CALL FUNCTION 'REUSE_ALV_EVENTS_GET'
EXPORTING
I_LIST_TYPE = 0
IMPORTING
ET_EVENTS = it_event
EXCEPTIONS
LIST_TYPE_WRONG = 1
OTHERS = 2
.
IF SY-SUBRC <> 0.
MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
ENDFORM. " build-events
&----
*& Form set-layout
&----
text
----
--> p1 text
<-- p2 text
----
FORM set-layout.
wa_layout-zebra = 'X'.
wa_layout-colwidth_optimize = 'X'.
wa_layout-no_colhead = space.
wa_layout-no_vline = space.
ENDFORM. " set-layout
&----
*& Form list-display
&----
text
----
--> p1 text
<-- p2 text
----
FORM list-display.
CALL FUNCTION 'REUSE_ALV_LIST_DISPLAY'
EXPORTING
I_INTERFACE_CHECK = ' '
I_BYPASSING_BUFFER =
I_BUFFER_ACTIVE = ' '
I_CALLBACK_PROGRAM = v_repid
I_CALLBACK_PF_STATUS_SET = ' '
I_CALLBACK_USER_COMMAND = 'USER_COMMAND'
I_STRUCTURE_NAME =
IS_LAYOUT = wa_layout
IT_FIELDCAT = it_fldcats
IT_EXCLUDING =
IT_SPECIAL_GROUPS =
IT_SORT =
IT_FILTER =
IS_SEL_HIDE =
I_DEFAULT = 'X'
I_SAVE = ' '
IS_VARIANT =
IT_EVENTS = it_event
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
IMPORTING
E_EXIT_CAUSED_BY_CALLER =
ES_EXIT_CAUSED_BY_USER =
TABLES
T_OUTTAB = itab
EXCEPTIONS
PROGRAM_ERROR = 1
OTHERS = 2
.
IF SY-SUBRC <> 0.
MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
ENDFORM. " list-display
&----
*& Form modify-fieldcatalog
&----
text
----
--> p1 text
<-- p2 text
----
FORM modify-fieldcatalog.
loop at it_fldcats into wa_fldcat.
case wa_fldcat-fieldname.
when 'TKNUM'.
wa_fldcat-seltext_l = 'Ship No.'.
wa_fldcat-col_pos = 1.
wa_fldcat-ddictxt = 'L'.
when 'SHTYP'.
wa_fldcat-seltext_l = 'Ship Type'.
wa_fldcat-col_pos = 2.
wa_fldcat-ddictxt = 'L'.
when 'TPNUM'.
wa_fldcat-seltext_l = 'Item No.'.
wa_fldcat-col_pos = 3.
wa_fldcat-ddictxt = 'L'.
when 'VBELN'.
wa_fldcat-seltext_l = 'Delivary No.'.
wa_fldcat-hotspot = 'X'.
wa_fldcat-col_pos = 4.
wa_fldcat-ddictxt = 'L'.
endcase.
modify it_fldcats from wa_fldcat.
endloop.
ENDFORM. " modify-fieldcatalog
&----
*& Form modify-events
&----
text
----
--> p1 text
<-- p2 text
----
form modify-events.
read table it_event with key name =
slis_ev_top_of_page into wa_events.
if sy-subrc = 0.
wa_events-form = 'HEADER-OF-REPORT'.
modify it_event from wa_events index sy-tabix.
clear wa_events.
endif.
read table it_event with key name =
slis_ev_end_of_page into wa_events.
if sy-subrc = 0.
wa_events-form = 'FOOTER-OF-REPORT'.
modify it_event from wa_events index sy-tabix.
clear wa_events.
endif.
endform. " modify-events
&----
*& Form HEADER-OF-REPORT
&----
text
----
--> p1 text
<-- p2 text
----
FORM HEADER-OF-REPORT.
write : 'Shipment Wise Delivary Report'.
ENDFORM. " HEADER-OF-REPORT
&----
*& Form FOOTER-OF-REPORT
&----
text
----
--> p1 text
<-- p2 text
----
FORM FOOTER-OF-REPORT.
write : 'End of Report'.
ENDFORM. " FOOTER-OF-REPORT
&----
*& Form USER_COMMAND
&----
User command for Calling Transaction VT03N, Execute and Refresh
----
FORM user_command USING p_ucomm LIKE sy-ucomm
p_selfield TYPE slis_selfield.
V_INDEX = P_SELFIELD-TABINDEX. " holds the selected table index
CASE p_ucomm.
WHEN '&IC1'.
IF p_selfield-fieldname eq 'VBELN'.
perform secondary_list.
ENDIF.
ENDCASE.
ENDFORM. " USER_COMMAND
&----
*& Form secondary_list
&----
text
----
--> p1 text
<-- p2 text
----
FORM secondary_list.
perform get_data1.
perform build-fieldcatalog1.
perform modify-fieldcatalog1.
perform build-events1.
perform modify-events1.
perform set-layout.
perform set-pfstatus.
perform list-display1.
ENDFORM. " secondary_list
&----
*& Form build-fieldcatalog1
&----
text
----
--> p1 text
<-- p2 text
----
FORM build-fieldcatalog1.
call function 'REUSE_ALV_FIELDCATALOG_MERGE'
exporting
i_program_name = v_repid
i_internal_tabname = 'ITAB1'
I_STRUCTURE_NAME =
I_CLIENT_NEVER_DISPLAY = 'X'
i_inclname = v_repid
I_BYPASSING_BUFFER =
I_BUFFER_ACTIVE =
changing
ct_fieldcat = it_fldcats1
exceptions
inconsistent_interface = 1
program_error = 2
others = 3
.
if sy-subrc <> 0.
MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
endif.
ENDFORM. " build-fieldcatalog1
&----
*& Form modify-fieldcatalog1
&----
text
----
--> p1 text
<-- p2 text
----
FORM modify-fieldcatalog1.
loop at it_fldcats into wa_fldcat.
case wa_fldcat-fieldname.
when 'VBELN'.
wa_fldcat-seltext_l = 'Delivary No.'.
wa_fldcat-col_pos = 1.
wa_fldcat-ddictxt = 'L'.
when 'POSNR'.
wa_fldcat-seltext_l = 'Item No'.
wa_fldcat-col_pos = 2.
wa_fldcat-ddictxt = 'L'.
when 'MATNR'.
wa_fldcat-seltext_l = 'Material'.
wa_fldcat-col_pos = 3.
wa_fldcat-ddictxt = 'L'.
when 'LFIMG'.
wa_fldcat-seltext_l = 'Quantity'.
wa_fldcat-col_pos = 4.
wa_fldcat-ddictxt = 'L'.
when 'MEINS'.
wa_fldcat-seltext_l = 'Unit of Measure'.
wa_fldcat-col_pos = 5.
wa_fldcat-ddictxt = 'L'.
endcase.
modify it_fldcats from wa_fldcat.
endloop.
ENDFORM. " modify-fieldcatalog1
&----
*& Form build-events1
&----
text
----
--> p1 text
<-- p2 text
----
FORM build-events1.
CALL FUNCTION 'REUSE_ALV_EVENTS_GET'
EXPORTING
I_LIST_TYPE = 0
IMPORTING
ET_EVENTS = it_event1
EXCEPTIONS
LIST_TYPE_WRONG = 1
OTHERS = 2
.
IF SY-SUBRC <> 0.
MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
ENDFORM. " build-events1
&----
*& Form modify-events1
&----
text
----
--> p1 text
<-- p2 text
----
FORM modify-events1.
read table it_event1 with key name =
slis_ev_top_of_page into wa_events.
if sy-subrc = 0.
wa_events-form = 'HEADER_OF_REPORT_2'.
modify it_event1 from wa_events index sy-tabix.
clear wa_events.
endif.
ENDFORM. " modify-events1
&----
*& Form list-display1
&----
text
----
--> p1 text
<-- p2 text
----
FORM list-display1.
CALL FUNCTION 'REUSE_ALV_LIST_DISPLAY'
EXPORTING
I_INTERFACE_CHECK = ' '
I_BYPASSING_BUFFER =
I_BUFFER_ACTIVE = ' '
I_CALLBACK_PROGRAM = v_repid
I_CALLBACK_PF_STATUS_SET = ' '
I_CALLBACK_USER_COMMAND = 'USER_COMMAND'
I_STRUCTURE_NAME =
IS_LAYOUT = wa_layout
IT_FIELDCAT = it_fldcats1
IT_EXCLUDING =
IT_SPECIAL_GROUPS =
IT_SORT =
IT_FILTER =
IS_SEL_HIDE =
I_DEFAULT = 'X'
I_SAVE = ' '
IS_VARIANT =
IT_EVENTS = it_event1
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
IMPORTING
E_EXIT_CAUSED_BY_CALLER =
ES_EXIT_CAUSED_BY_USER =
TABLES
T_OUTTAB = itab1
EXCEPTIONS
PROGRAM_ERROR = 1
OTHERS = 2
.
IF SY-SUBRC <> 0.
MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
ENDFORM. " list-display1
&----
*& Form get_data1
&----
text
----
--> p1 text
<-- p2 text
----
FORM get_data1.
READ TABLE itab INDEX V_INDEX.
v_vbeln = itab-vbeln.
select vbeln
posnr
matnr
lfimg
meins
from lips
into table itab1
where vbeln eq v_vbeln.
ENDFORM. " get_data1
&----
*& Form header_of_report_2
&----
text
----
--> p1 text
<-- p2 text
----
FORM header_of_report_2.
write: 'Delivary item list'.
ENDFORM. " header_of_report_2
*-- callling a transaction code by passing the initial screen value.
&----
*& Form USER_COMMAND
&----
form user_command using p_ucomm like sy-ucomm
p_selfield type slis_selfield.
data : l_index like sy-index,
l_refbn like cooi-refbn.
l_index = p_selfield-tabindex. " holds the selected table index
clear l_refbn.
case p_ucomm.
when '&IC1'.
clear l_refbn.
read table it_outtab index l_index.
if sy-subrc eq 0.
l_refbn = it_outtab-refbn.
if not l_refbn is initial.
set parameter id 'BES' field l_refbn.
call transaction 'ME23' and skip first screen.
endif.
else.
message e999 with text-014.
endif.
endcase.
endif.
<b>ALV WITH CHECK BOXES</b>
REPORT ZTESTPRG .
************************************************************************
TABLES AND DATA DECLARATION.
************************************************************************
*TABLES: mara,makt.",marc.
data syrepid like sy-repid.
data sydatum(10). " LIKE sy-datum.
data sypagno(3) type n.
WHEN USING MORE THAN ONE TABLE IN ALV WE NEEED TO DECLARE THE TYPE
GROUP (TYPE-POOLS--------->SLIS)
type-pools : slis.
************************************************************************
INTERNAL TABLE DECLARATION.
************************************************************************
INTERNAL TABLE TO HOLD THE VALUES FROM THE MARA TABLE
data: begin of t_mara occurs 0,
matnr like mara-matnr,
meins like mara-meins,
mtart like mara-mtart,
matkl like mara-matkl,
end of t_mara.
INTERNAL TABLE TO HOLD THE CONTENTS FROM THE EKKO TABLE
data : begin of t_marc occurs 0,
matnr like mara-matnr,
werks like marc-werks,
minbe like marc-minbe.
data: end of t_marc.
INTERNAL TABLE TO HOLD THE VALUES FROM MAKT TABLE.
data : begin of t_makt occurs 0,
matnr like mara-matnr,
maktx like makt-maktx,
spras like makt-spras,
end of t_makt.
INTERNAL TABLE WHICH ACTUALLY MERGES ALL THE OTHER INTERNAL TABLES.
data: begin of itab1 occurs 0,
chkbox(1) type c,
matnr like mara-matnr,
meins like mara-meins,
maktx like makt-maktx,
spras like makt-spras,
werks like marc-werks,
minbe like marc-minbe,
end of itab1.
THE FOLLOWING DECLARATION IS USED FOR DEFINING THE FIELDCAT
AND THE LAYOUT FOR THE ALV.
HERE AS slis_t_fieldcat_alv IS A INTERNAL TABLE WITHOUT A HEADER LINE
WE EXPLICITELY DEFINE AN INTERNAL TABLE OF THE SAME STRUCTURE AS THAT
OF slis_t_fieldcat_alv BUT WITH A HEADER LINE IN THE DEFINITION.
THIS IS DONE TO MAKE THE CODE SIMPLER.
OTHERWISE WE MAY HAVE TO DEFINE THE STRUCTURE AS IN THE NORMAL SAP
PROGRAMS.
IN THE FIELDCATALOG TABLE WE ACTUALLY PASS THE FIELDS FROM ONE OR
MORE TABLES AND CREATE A STRUCTURE
IN THE LAYOUT STRUCTURE WE BASICALLY DEFINE THE FORMATTING OPTIONS
LIKE DISPLAY IN THE ZEBRA PATTERN ,THE HOTSPOT OPTIONS ETC.
data: fieldcatalog type slis_t_fieldcat_alv with header line,
fieldlayout type slis_layout_alv.
DECLARING THE EVENTTABLE INTERNL TABLE FOR USING EVENTS LIKE
TOP-OF-PAGE ETC.
data : eventstab type slis_t_event with header line.
DECLARING AN INTERNAL TABLE TO HOLD THE DATA FOR THE TOP-OF-PAGE
data : heading type slis_t_listheader with header line.
data : heading1 type slis_t_listheader with header line.
data : heading2 type slis_t_listheader with header line.
data : heading3 type slis_t_listheader with header line.
data : heading4 type slis_t_listheader with header line.
data : heading5 type slis_t_listheader with header line.
data : heading6 type slis_t_listheader with header line.
data : heading7 type slis_t_listheader with header line.
data : heading8 type slis_t_listheader with header line.
STRUCTURE TO PASS THE COLOR ATTRIBUTES FOR DISPLAY.
data : colorstruct type slis_coltypes.
************************************************************************
INITIALIZATION. *
************************************************************************
initialization.
syrepid = sy-repid.
sypagno = sy-pagno.
clear fieldcatalog.
************************************************************************
START-OF-SELECTION. *
************************************************************************
start-of-selection.
SUBROUTINE TO POPULATE THE COLORSTRUCT
perform fill_colorstruct using colorstruct.
SUBROUTINE TO POPULATE THE FIELDS OF THE FIELD CATALOGUE
perform populate_fieldcatalog.
SUBROUTINE TO SELECT DATA FROM VARIOUS TABLES AND POPULATE IT IN THE
INTERNAL TABLE.
perform selectdata_and_sort.
SUBROUTINE TO POPULATE THE LAYOUT STRUCTURE.
perform populate_layout using fieldlayout.
SUBROUTINE TO CALL THE FUNCTION MERGE TO ENSURE PROPER DISPLAY.
perform merge_fieldcatalog.
SUBROUTINE TO POPULATE THE EVENTSTAB.
perform fill_eventstab tables eventstab.
SUBROUTINE TO POPULATE THE HEADING TABLES.
perform fill_headingtable tables heading using 'HEADING'.
perform fill_headingtable tables heading1 using 'HEADING1'.
perform fill_headingtable tables heading2 using 'HEADING2'.
perform fill_headingtable tables heading3 using 'HEADING3'.
perform fill_headingtable tables heading4 using 'HEADING4'.
perform fill_headingtable tables heading5 using 'HEADING5'.
perform fill_headingtable tables heading6 using 'HEADING6'.
perform fill_headingtable tables heading7 using 'HEADING7'.
perform fill_headingtable tables heading8 using 'HEADING8'.
SUBROUTINE TO DISPLAY THE LIST.
perform display_alv_list.
************************************************************************
FORMS
************************************************************************
IN THIS SUBROUTINE WE POPULATE THE FIELDCATALOG TABLE WITH THE NAMES
OF THE TABLE,FIELDNAME,WHETHER IT IS KEY FIELD OR NOT,HEADING AND
COLUMN JUSTIFICATION.
form populate_fieldcatalog.
perform fill_fields_of_fieldcatalog tables fieldcatalog
using 'ITAB1' 'MATNR' 'X' .
perform fill_fields_of_fieldcatalog tables fieldcatalog
using 'ITAB1' 'MEINS' ' '.
perform fill_fields_of_fieldcatalog tables fieldcatalog
using 'ITAB1' 'MAKTX' ' ' .
perform fill_fields_of_fieldcatalog tables fieldcatalog
using 'ITAB1' 'MTART' ' ' .
perform fill_fields_of_fieldcatalog tables fieldcatalog
using 'ITAB1' 'MATKL' ' ' .
perform fill_fields_of_fieldcatalog tables fieldcatalog
using 'ITAB1' 'SPRAS' ' ' .
perform fill_fields_of_fieldcatalog tables fieldcatalog
using 'ITAB1' 'WERKS' ' ' .
perform fill_fields_of_fieldcatalog tables fieldcatalog
using 'ITAB1' 'MINBE' ' ' .
endform. " POPULATE_FIELDCATALOG
----
FORM FILL_FIELDS_OF_FIELDCATALOG *
----
........ *
----
--> FIELDCATALOG *
--> P_TABNAME *
--> P_FIELDNAME *
--> P_KEY *
--> P_KEY *
----
form fill_fields_of_fieldcatalog tables fieldcatalog
structure fieldcatalog
using p_tabname
p_fieldname
p_key.
p_no_out.
fieldcatalog-tabname = p_tabname.
fieldcatalog-fieldname = p_fieldname.
fieldcatalog-key = p_key.
fieldcatalog-emphasize = '1234'.
*fieldcatalog-no_out = p_no_out.
append fieldcatalog.
endform. " FILL_FIELDSOFFIELDCATALOG
----
FORM POPULATE_LAYOUT *
----
........ *
----
--> FIELDLAYOUT *
----
form populate_layout using fieldlayout type slis_layout_alv.
fieldlayout-f2code = '&ETA' .
fieldlayout-zebra = 'X'.
FOR THE WINDOW TITLE.
fieldlayout-window_titlebar = 'ALV with Events'.
fieldlayout-colwidth_optimize = 'X'.
fieldlayout-no_vline = ' '.
*fieldlayout-no_input = 'X'.
fieldlayout-confirmation_prompt = ''.
fieldlayout-key_hotspot = 'X'.
This removes the column headings if the flag is set to 'X'
fieldlayout-no_colhead = ' '.
*fieldlayout-hotspot_fieldname = 'MAKTX'.
fieldlayout-detail_popup = 'X'.
fieldlayout-coltab_fieldname = 'X'.
fieldlayout-box_fieldname = 'CHKBOX'.
fieldlayout-edit_mode = 'X'.
endform. " POPULATE_LAYOUT
----
FORM SELECTDATA_AND_SORT *
----
........ *
----
form selectdata_and_sort.
select matnr meins mtart matkl from mara
into corresponding fields of t_mara
up to 500 rows .
select matnr maktx spras from makt
into corresponding fields of t_makt
where matnr = t_mara-matnr and
spras = sy-langu.
select matnr werks minbe from marc
into corresponding fields of t_marc
where matnr = t_mara-matnr.
append t_marc.
endselect.
append t_makt.
endselect.
append t_mara.
endselect.
perform populate_itab1.
sort itab1 by matnr.
endform. " SELECTDATA_AND_SORT
----
FORM MERGE_FIELDCATALOG *
----
........ *
----
form merge_fieldcatalog.
call function 'REUSE_ALV_FIELDCATALOG_MERGE'
exporting
i_program_name = syrepid
i_internal_tabname = 'ITAB1'
i_structure_name = 'COLORSTRUCT'
I_CLIENT_NEVER_DISPLAY = 'X'
i_inclname = syrepid
changing
ct_fieldcat = fieldcatalog[]
exceptions
inconsistent_interface = 1
program_error = 2
others = 3.
endform. " MERGE_FIELDCATALOG
IN THIS FUNCTION THE MINIMUM PARAMETERS THAT WE NEED TO PASS IS AS
FOLLOWS:-
i_callback_program --> CALLING PROGRAM NAME
i_structure_name --> STRUCTURE NAME.
is_layout --> LAYOUT NAME.
it_fieldcat ---> BODY OF THE FIELD CATALOGUE INTERNAL TABLE
form display_alv_list.
call function 'REUSE_ALV_LIST_DISPLAY'
exporting
I_INTERFACE_CHECK = ' '
i_callback_program = syrepid
I_CALLBACK_PF_STATUS_SET = ' '
I_CALLBACK_USER_COMMAND = ' '
i_structure_name = 'ITAB1'
is_layout = fieldlayout
it_fieldcat = fieldcatalog[]
IT_EXCLUDING =
IT_SPECIAL_GROUPS =
IT_SORT =
IT_FILTER =
IS_SEL_HIDE =
I_DEFAULT = 'X'
THE FOLLOWING PARAMETER IS SET AS 'A' INORDER TO DISPLAY THE STANDARD
TOOL BAR
i_save = 'A'
IS_VARIANT = ' '
it_events = eventstab[]
IT_EVENT_EXIT =
IS_PRINT =
I_SCREEN_START_COLUMN = 0
I_SCREEN_START_LINE = 0
I_SCREEN_END_COLUMN = 0
I_SCREEN_END_LINE = 0
IMPORTING
E_EXIT_CAUSED_BY_CALLER =
ES_EXIT_CAUSED_BY_USER =
tables
t_outtab = itab1
exceptions
program_error = 1
others = 2.
endform. " DISPLAY_ALV_LIST
&----
*& Form POPULATE_ITAB1
&----
text
----
--> p1 text
<-- p2 text
----
form populate_itab1.
loop at t_mara.
loop at t_makt where matnr = t_mara-matnr.
loop at t_marc where matnr = t_mara-matnr.
move-corresponding t_mara to itab1.
move-corresponding t_makt to itab1.
move-corresponding t_marc to itab1.
append itab1.
endloop.
endloop.
endloop.
endform. " POPULATE_ITAB1
&----
*& Form FILL_EVENTSTAB
&----
text
----
-->P_EVENTSTAB text *
----
form fill_eventstab tables p_eventstab structure eventstab.
WHEN THE FOLLOWING FUNCTION IS CALLED THE SYSTEM POPULATES THE
INTERNAL TABLE EVENTSTAB WITH A LIST OF EVENTS NAME.
AS SHOWN BELOW WHEN USING I_LIST_TYPE = 0 THE FUNCTION RETURNS 14
EVENTS NAME.
call function 'REUSE_ALV_EVENTS_GET'
exporting
i_list_type = 0
importing
et_events = p_eventstab[]
exceptions
list_type_wrong = 1
others = 2.
BY CALLING THE ABOVE FUNCTION WE FIRST POPULATE THE EVENTSTAB WITH
THE PREDEFINED EVENTS AND THEN WE MOVE THE FORM NAME AS SHOWN BELOW.
WE ASSIGN A FORM NAME TO THE EVENT AS REQUIRED BY THE USER.
FORM NAME CAN BE ANYTHING.THE PERFORM STATEMENT FOR THIS FORM
IS DYNAMICALY CALLED.
read table p_eventstab with key name = slis_ev_top_of_page.
if sy-subrc = 0 .
move 'TOP_OF_PAGE' to p_eventstab-form.
append p_eventstab.
endif.
read table p_eventstab with key name = slis_ev_top_of_coverpage.
if sy-subrc = 0 .
move 'TOP_OF_COVERPAGE' to p_eventstab-form.
append p_eventstab.
endif.
read table p_eventstab with key name = slis_ev_end_of_coverpage .
if sy-subrc = 0 .
move 'END_OF_COVERPAGE' to p_eventstab-form.
append p_eventstab.
endif.
read table p_eventstab with key name = slis_ev_foreign_top_of_page.
if sy-subrc = 0 .
move 'FOREIGN_TOP_OF_PAGE' to p_eventstab-form.
append p_eventstab.
endif.
read table p_eventstab with key name = slis_ev_foreign_end_of_page.
if sy-subrc = 0 .
move 'FOREIGN_END_OF_PAGE' to p_eventstab-form.
append p_eventstab.
endif.
read table p_eventstab with key name = slis_ev_list_modify.
if sy-subrc = 0 .
move 'LIST_MODIFY' to p_eventstab-form.
append p_eventstab.
endif.
read table p_eventstab with key name = slis_ev_top_of_list.
if sy-subrc = 0 .
move 'TOP_OF_LIST' to p_eventstab-form.
append p_eventstab.
endif.
read table p_eventstab with key name = slis_ev_end_of_page.
if sy-subrc = 0 .
move 'END_OF_PAGE' to p_eventstab-form.
append p_eventstab.
endif.
read table p_eventstab with key name = slis_ev_end_of_list .
if sy-subrc = 0 .
move 'END_OF_LIST' to p_eventstab-form.
append p_eventstab.
endif.
endform. " FILL_EVENTSTAB
&----
*& Form FILL_HEADINGTABLE
&----
text
----
-->P_HEADING text *
----
form fill_headingtable tables p_heading structure heading
using tablename.
case tablename.
when 'HEADING'.
p_heading-typ = 'H'.
concatenate
' REPORT NAME:-' syrepid
' ABB Industry Pte Ltd' into p_heading-info.
append p_heading.
write sy-datum using edit mask '__/__/____' to sydatum.
concatenate
' DATE:-' sydatum ' USER: ' sy-uname 'PAGE NO:' sypagno
into p_heading-info.
append p_heading.
when 'HEADING1'.
p_heading-typ = 'H'.
p_heading-info = 'TOP-OF-COVER-PAGE'.
append p_heading.
when 'HEADING2'.
p_heading-typ = 'H'.
p_heading-info = 'END-OF-COVER-PAGE'.
append p_heading.
when 'HEADING3'.
p_heading-typ = 'H'.
p_heading-info = 'FOREIGN-TOP-OF-PAGE'.
append p_heading.
when 'HEADING4'.
p_heading-typ = 'H'.
p_heading-info = 'FOREIGN-END-OF-PAGE'.
append p_heading.
WHEN 'HEADING5'.
P_HEADING-TYP = 'H'.
P_HEADING-INFO = 'LIST-MODIFY'.
APPEND P_HEADING.
when 'HEADING6'.
p_heading-typ = 'H'.
p_heading-info = 'END-OF-PAGE'.
append p_heading.
when 'HEADING7'.
p_heading-typ = 'H'.
p_heading-info = 'END-OF-LIST'.
append p_heading.
when 'HEADING8'.
p_heading-typ = 'H'.
p_heading-info = 'TOP-OF-LIST'.
append p_heading.
endcase.
endform. " FILL_HEADINGTABLE
----
FORM TOP_OF_PAGE *
----
........ *
----
form top_of_page.
call function 'REUSE_ALV_COMMENTARY_WRITE'
exporting
it_list_commentary = heading[]
exceptions
others = 1.
endform.
&----
*& Form FILL_COLORSTRUCT
&----
text
----
-->P_COLORSTRUCT text *
----
form fill_colorstruct using p_colorstruct type slis_coltypes .
p_colorstruct-heacolfir-col = 6.
p_colorstruct-heacolfir-int = 1.
p_colorstruct-heacolfir-inv = 1.
endform. " FILL_COLORSTRUCT
----
FORM TOP_OF_COVERPAGE *
----
........ *
----
form top_of_coverpage.
call function 'REUSE_ALV_COMMENTARY_WRITE'
exporting
it_list_commentary = heading1[]
exceptions
others = 1.
endform.
----
FORM END_OF_COVERPAGE *
----
........ *
----
form end_of_coverpage.
call function 'REUSE_ALV_COMMENTARY_WRITE'
exporting
it_list_commentary = heading2[]
exceptions
others = 1.
endform.
----
FORM FOREIGN_TOP_OF_PAGE *
----
........ *
----
form foreign_top_of_page.
call function 'REUSE_ALV_COMMENTARY_WRITE'
exporting
it_list_commentary = heading3[]
exceptions
others = 1.
endform.
----
FORM FOREIGN_END_OF_PAGE *
----
........ *
----
form foreign_end_of_page.
call function 'REUSE_ALV_COMMENTARY_WRITE'
exporting
it_list_commentary = heading4[]
exceptions
others = 1.
endform.
----
FORM LIST_MODIFY *
----
........ *
----
*FORM LIST_MODIFY.
CALL FUNCTION 'REUSE_ALV_COMMENTARY_WRITE'
EXPORTING
IT_LIST_COMMENTARY = HEADING5[]
EXCEPTIONS
OTHERS = 1.
*ENDFORM.
----
FORM END_OF_PAGE *
----
........ *
----
form end_of_page.
call function 'REUSE_ALV_COMMENTARY_WRITE'
exporting
it_list_commentary = heading6[]
exceptions
others = 1.
endform.
----
FORM END_OF_LIST *
----
........ *
----
form end_of_list.
call function 'REUSE_ALV_COMMENTARY_WRITE'
exporting
it_list_commentary = heading7[]
exceptions
others = 1.
endform.
----
FORM TOP_OF_LIST *
----
........ *
----
form top_of_list.
call function 'REUSE_ALV_COMMENTARY_WRITE'
exporting
it_list_commentary = heading8[]
exceptions
others = 1.
endform.
*--- End of Program
<b>ALV SUBTOTALS</b>
REPORT ZYFI_REPT007
NO STANDARD PAGE HEADING
LINE-SIZE 300
LINE-COUNT 50
MESSAGE-ID ZYFI.
************************************
----
MODIFICATION LOG (latest change first): *
----
Date Author Incident No Request No *
Description *
----
************************************************************************
************************************************************************
TABLES : COOI, " Commitments Management: Line Items
LFA1, " Vendor master (general section)
VBEP,
RKPLN.
************************************************************************
TABLE TYPES AND INTERNAL TABLES *
************************************************************************
DATA : BEGIN OF TYP_COOI ,
OBJNR LIKE COOI-OBJNR,
SAKTO LIKE COOI-SAKTO,
MEGBTR LIKE COOI-MEGBTR,
MEINH LIKE COOI-MEINH,
WKGBTR LIKE COOI-WKGBTR,
REFBN LIKE COOI-REFBN,
RFPOS LIKE COOI-RFPOS,
SGTXT LIKE COOI-SGTXT,
BUDAT LIKE COOI-BUDAT,
LIFNR LIKE COOI-LIFNR,
END OF TYP_COOI.
DATA : BEGIN OF TYP_LFA1 ,
LIFNR LIKE LFA1-LIFNR,
NAME1 LIKE LFA1-NAME1,
END OF TYP_LFA1.
DATA : BEGIN OF IT_OUTTAB OCCURS 0,
OBJNR LIKE COOI-OBJNR,
SAKTO LIKE COOI-SAKTO,
MEGBTR LIKE COOI-MEGBTR,
MEINH LIKE COOI-MEINH,
WKGBTR LIKE COOI-WKGBTR,
REFBN LIKE COOI-REFBN,
RFPOS LIKE COOI-RFPOS,
SGTXT LIKE COOI-SGTXT,
BUDAT LIKE COOI-BUDAT,
LIFNR LIKE COOI-LIFNR,
NAME1 LIKE LFA1-NAME1,
END OF IT_OUTTAB.
DATA : IT_COOI LIKE TYP_COOI OCCURS 0 WITH HEADER LINE,
IT_LFA1 LIKE TYP_LFA1 OCCURS 0 WITH HEADER LINE.
*-- ALV Declarations
TYPE-POOLS SLIS.
DATA: IT_EVENTS TYPE SLIS_T_EVENT,
GS_EVENT TYPE SLIS_ALV_EVENT,
wa_fldcat type slis_fieldcat_alv.
DATA: S_LAYOUT TYPE SLIS_LAYOUT_ALV,
GT_PRINT TYPE SLIS_PRINT_ALV.
DATA: IT_FLDCAT TYPE SLIS_T_FIELDCAT_ALV.
DATA: IT_SORT TYPE SLIS_T_SORTINFO_ALV.
DATA: V_REPID LIKE SY-REPID.
************************************************************************
SELECTION SCREEN *
************************************************************************
SELECTION-SCREEN BEGIN OF BLOCK B1 WITH FRAME TITLE TEXT-001.
SELECT-OPTIONS : S_KOKRS FOR COOI-KOKRS NO-EXTENSION NO INTERVALS,
" Controlling Area
S_BUKRS FOR COOI-BUKRS NO-EXTENSION NO INTERVALS,
" Company code
S_GJAHR FOR COOI-GJAHR NO-EXTENSION NO INTERVALS,
" Fiscal Year
S_OBJNR FOR RKPLN-AUFNR MATCHCODE OBJECT ORDE,
" Internal order
S_SAKTO FOR COOI-SAKTO MATCHCODE OBJECT KART,
" Cost Element
S_BUDAT FOR COOI-BUDAT, " Debit Date
S_LIFNR FOR COOI-LIFNR. " Vendor
SELECTION-SCREEN END OF BLOCK B1.
************************************************************************
S T A R T O F S E L E C T I O N *
************************************************************************
START-OF-SELECTION.
*-- Read data
PERFORM GET_DATA.
************************************************************************
E N D O F S E L E C T I O N *
************************************************************************
END-OF-SELECTION.
*-- Process the data and prepare the output data
PERFORM CALCULATE_FINAL_INFO.
*--Display Report output
PERFORM DISPLAY_REPORT.
----
FORM CALCULATE_FINAL_INFO *
----
Process the data and prepare final internal table *
----
FORM CALCULATE_FINAL_INFO.
DATA : L_OBJNR LIKE COOI-OBJNR.
SORT IT_LFA1 BY LIFNR.
DELETE ADJACENT DUPLICATES FROM IT_LFA1 COMPARING LIFNR.
LOOP AT IT_COOI.
L_OBJNR = IT_COOI-OBJNR+2(20).
SHIFT L_OBJNR LEFT DELETING LEADING '0'.
IF L_OBJNR IN S_OBJNR.
READ TABLE IT_LFA1 WITH KEY LIFNR = IT_COOI-LIFNR.
IF SY-SUBRC EQ 0.
IT_OUTTAB-NAME1 = IT_LFA1-NAME1.
ENDIF.
MOVE-CORRESPONDING IT_COOI TO IT_OUTTAB.
CLEAR IT_OUTTAB-OBJNR.
IT_OUTTAB-OBJNR = L_OBJNR.
APPEND IT_OUTTAB.
CLEAR IT_OUTTAB.
CLEAR IT_LFA1.
CLEAR L_OBJNR.
ENDIF.
ENDLOOP.
ENDFORM.
&----
*& Form GET_DATA
&----
Fetch the Data from the table COOI and LFA1
----
FORM GET_DATA.
SELECT OBJNR
SAKTO
MEGBTR
MEINH
WKGBTR
REFBN
RFPOS
SGTXT
BUDAT
LIFNR
FROM COOI
INTO TABLE IT_COOI
WHERE BUDAT IN S_BUDAT
AND LIFNR IN S_LIFNR
AND KOKRS IN S_KOKRS
AND BUKRS IN S_BUKRS
AND GJAHR IN S_GJAHR
AND SAKTO IN S_SAKTO.
IF SY-SUBRC EQ 0 .
Get the Vendor name from LFA1
SELECT LIFNR
NAME1
FROM LFA1
INTO TABLE IT_LFA1
FOR ALL ENTRIES IN IT_COOI
WHERE LIFNR EQ IT_COOI-LIFNR.
ELSE.
MESSAGE I999 WITH TEXT-013.
ENDIF.
ENDFORM. " GET_DATA
&----
*& Form DISPLAY_REPORT
&----
Display the output
----
FORM DISPLAY_REPORT.
PERFORM BUILD_CATALOG.
PERFORM FRM_PREPARE_EVENT_LIST TABLES IT_EVENTS.
IF NOT IT_OUTTAB[] IS INITIAL.
CALL FUNCTION 'REUSE_ALV_LIST_DISPLAY'
EXPORTING
I_CALLBACK_PROGRAM = V_REPID
I_CALLBACK_USER_COMMAND = 'USER_COMMAND'
IT_FIELDCAT = IT_FLDCAT
IT_SORT = IT_SORT
IT_EVENTS = IT_EVENTS
TABLES
T_OUTTAB = IT_OUTTAB
EXCEPTIONS
PROGRAM_ERROR = 1
OTHERS = 2.
ELSE.
MESSAGE I999 WITH TEXT-013.
ENDIF.
ENDFORM. " DISPLAY_REPORT
&----
*& Form BUILD_CATALOG
&----
Build the Field catalog for the ALV Report
----
FORM BUILD_CATALOG.
DATA: V_INDEX LIKE SY-TABIX.
V_REPID = SY-REPID.
DATA: LS_SORT TYPE SLIS_SORTINFO_ALV.
CALL FUNCTION 'REUSE_ALV_FIELDCATALOG_MERGE'
EXPORTING
I_PROGRAM_NAME = V_REPID
I_INTERNAL_TABNAME = 'IT_OUTTAB'
I_INCLNAME = V_REPID
CHANGING
CT_FIELDCAT = IT_FLDCAT
EXCEPTIONS
INCONSISTENT_INTERFACE = 1
PROGRAM_ERROR = 2
OTHERS = 3.
IF SY-SUBRC <> 0.
MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
READ TABLE IT_FLDCAT WITH KEY FIELDNAME = 'WKGBTR'
TABNAME = 'IT_OUTTAB' INTO WA_FLDCAT.
IF SY-SUBRC EQ 0.
WA_FLDCAT-DO_SUM = 'X'.
MODIFY IT_FLDCAT FROM WA_FLDCAT INDEX SY-TABIX.
ENDIF.
READ TABLE IT_FLDCAT WITH KEY FIELDNAME = 'OBJNR'
TABNAME = 'IT_OUTTAB' INTO WA_FLDCAT.
IF SY-SUBRC EQ 0.
WA_FLDCAT-SELTEXT_L = 'Order'.
WA_FLDCAT-COL_POS = 1.
WA_FLDCAT-DDICTXT = 'L'.
MODIFY IT_FLDCAT FROM WA_FLDCAT INDEX SY-TABIX.
ENDIF.
LS_SORT-FIELDNAME = 'OBJNR'.
LS_SORT-SPOS = 1.
LS_SORT-UP = 'X'.
LS_SORT-SUBTOT = 'X'.
APPEND LS_SORT TO IT_SORT.
ENDFORM. " BUILD_CATALOG
&----
*& Form FRM_PREPARE_EVENT_LIST
&----
Build the Events
----
FORM FRM_PREPARE_EVENT_LIST TABLES IT_EVENTS TYPE SLIS_T_EVENT.
CLEAR GS_EVENT.
GS_EVENT-NAME = SLIS_EV_TOP_OF_PAGE.
GS_EVENT-FORM = 'TOP_OF_PAGE_REPORT'.
APPEND GS_EVENT TO IT_EVENTS.
ENDFORM. " FRM_PREPARE_EVENT_LIST
************************************************************************
TOP OF PAGE
************************************************************************
FORM TOP_OF_PAGE_REPORT.
CALL FUNCTION 'Z_YREPORT_HEADER'
EXPORTING
DL_TITLE = SY-TITLE
DL_REPID = SY-CPROG
DL_LINSZ = SY-LINSZ
EXCEPTIONS
OTHERS = 1.
ENDFORM. " FRM_TOP_OF_PAGE_REPORT
&----
*& Form USER_COMMAND
&----
Drill Down Functionality to Call the Transaction ME23
----
FORM USER_COMMAND USING P_UCOMM LIKE SY-UCOMM
P_SELFIELD TYPE SLIS_SELFIELD.
DATA : L_INDEX LIKE SY-INDEX,
L_REFBN LIKE COOI-REFBN.
L_INDEX = P_SELFIELD-TABINDEX. " holds the selected table index
CLEAR L_REFBN.
CASE P_UCOMM.
*-- On Double Click
WHEN '&IC1'.
CLEAR L_REFBN.
*-- Read the Current Line
READ TABLE IT_OUTTAB INDEX L_INDEX.
IF SY-SUBRC EQ 0.
L_REFBN = IT_OUTTAB-REFBN.
IF NOT L_REFBN IS INITIAL.
*-- Set the BES Paramater Id to the Current line Purchase Order Number
SET PARAMETER ID 'BES' FIELD L_REFBN.
*-- Call the Transaction Purchase Order Display with the above PO Number
CALL TRANSACTION 'ME23' AND SKIP FIRST SCREEN.
ENDIF.
ELSE.
MESSAGE E999 WITH TEXT-014.
ENDIF.
ENDCASE.
ENDFORM. " USER_COMMAND
<b>ALV WITH F4 HELP ON OUTPUT</b>
&----
*& Report ZALV1_14797
*&
&----
*&
*&
&----
REPORT ZALV1_14797.
TYPE-POOLS: SLIS.
DATA: X_FIELDCAT TYPE SLIS_FIELDCAT_ALV,
IT_FIELDCAT TYPE SLIS_T_FIELDCAT_ALV,
L_LAYOUT TYPE SLIS_LAYOUT_ALV,
X_EVENTS TYPE SLIS_ALV_EVENT,
IT_EVENTS TYPE SLIS_T_EVENT.
DATA: BEGIN OF ITAB OCCURS 0,
VBELN(10) type c ,
POSNR LIKE VBAP-POSNR,
CHK(1),
color(4),
END OF ITAB.
SELECT VBELN
POSNR
FROM VBAP
UP TO 20 ROWS
INTO TABLE ITAB.
X_FIELDCAT-FIELDNAME = 'CHK'.
X_FIELDCAT-TABNAME = 'ITAB'.
X_FIELDCAT-COL_POS = 1.
X_FIELDCAT-INPUT = 'X'.
X_FIELDCAT-EDIT = 'X'.
X_FIELDCAT-CHECKBOX = 'X'.
APPEND X_FIELDCAT TO IT_FIELDCAT.
CLEAR X_FIELDCAT.
X_FIELDCAT-FIELDNAME = 'VBELN'.
X_FIELDCAT-SELTEXT_L = 'VBELN'.
*X_FIELDCAT-HOTSPOT = 'X'.
x_fieldcat-edit = 'X'.
X_FIELDCAT-TABNAME = 'ITAB'.
x_fieldcat-ref_fieldname = 'VBELN'.
x_fieldcat-ref_tabname = 'VBAK'.
X_FIELDCAT-COL_POS = 2.
APPEND X_FIELDCAT TO IT_FIELDCAT.
CLEAR X_FIELDCAT.
X_FIELDCAT-FIELDNAME = 'POSNR'.
X_FIELDCAT-SELTEXT_L = 'POSNR'.
X_FIELDCAT-TABNAME = 'ITAB'.
X_FIELDCAT-COL_POS = 3.
APPEND X_FIELDCAT TO IT_FIELDCAT.
CLEAR X_FIELDCAT.
L_LAYOUT-info_fieldname = 'COLOR'.
*L_LAYOUT-ZEBRA = 'X'.
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
EXPORTING
I_CALLBACK_PROGRAM = SY-REPID
IS_LAYOUT = L_LAYOUT
I_CALLBACK_PF_STATUS_SET = 'STATUS'
I_CALLBACK_USER_COMMAND = 'USER_COMMAND'
IT_FIELDCAT = IT_FIELDCAT
TABLES
T_OUTTAB = ITAB
EXCEPTIONS
PROGRAM_ERROR = 1
OTHERS = 2.
IF SY-SUBRC <> 0.
MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
&----
*& Form STATUS
&----
text
----
-->P_EXTAB text
----
FORM STATUS USING P_EXTAB TYPE SLIS_T_EXTAB.
*- Pf status
SET PF-STATUS 'STATUS'.
ENDFORM. " STATUS
&----
*& Form USER_COMMAND
&----
text
----
-->R_UCOMM text
-->RS_SELFIELD text
----
FORM USER_COMMAND USING R_UCOMM LIKE SY-UCOMM
RS_SELFIELD TYPE SLIS_SELFIELD.
DATA: GD_REPID LIKE SY-REPID, "Exists
REF_GRID TYPE REF TO CL_GUI_ALV_GRID.
IF REF_GRID IS INITIAL.
CALL FUNCTION 'GET_GLOBALS_FROM_SLVC_FULLSCR'
IMPORTING
E_GRID = REF_GRID.
ENDIF.
IF NOT REF_GRID IS INITIAL.
CALL METHOD REF_GRID->CHECK_CHANGED_DATA .
ENDIF.
loop at itab where chk = 'X'.
itab-color = 'C300'.
modify itab index sy-tabix transporting color.
endloop.
RS_SELFIELD-refresh = 'X'.endform.
<b>ALV HIERARCHICAL</b>
REPORT ZS_REPT_SD_REPORT_47
MESSAGE-ID ZSD
NO STANDARD PAGE HEADING
LINE-COUNT 65(2)
LINE-SIZE 127.
************************************************************************
Progname : ZS_REPT_SD_REPORT_47 *
Description : Service MRA Report *
----
LOGICAL DB : VERSION OF : *
----
DESCRIPTION : Service MRA Report *
----
AUTHOR : DRN Kishore *
DATE : 03/10/2005 *
----
MODIFICATION LOG (latest change first): *
Date Incident Request Author *
#30445 DRN Kishore *
Description: *
----
TYPE-POOLS: SLIS.
TABLES : VBRK, " Billing: Header Data
VBRP, " Billing: Item Data
KONV, " Conditions (Transaction Data)
KNA1, " General Data in Customer Master
TVKO, " Organizational Unit: Sales Organizations
TVTW, " Organizational Unit: Distribution Channels
TSPA, " Organizational Unit: Sales Divisions
MARA, " General Material Data
TVFK, " Billing: Document Types
TVAU. " Sales Documents: Order Reasons
&----
*& INTERNAL TABLES. *
&----
Internal table To hold the VBRK Billing data
DATA : BEGIN OF IT_VBRK OCCURS 0,
VBELN LIKE VBRK-VBELN, " Billing document
KUNAG LIKE VBRK-KUNAG, " Sold-to
FKDAT LIKE VBRK-FKDAT, " Bill Date
FKART LIKE VBRK-FKART, " Bill doc type
KNUMV LIKE VBRK-KNUMV, " doc cond number
field credit applied(TBD)
WAERK LIKE VBRK-WAERK, " SD document currency
END OF IT_VBRK.
Internal table To hold the VBRK Billing:Item data
DATA : BEGIN OF IT_VBRP OCCURS 0,
VBELN LIKE VBRP-VBELN, " Billing document
POSNR LIKE VBRP-POSNR, " Billing item
FKIMG LIKE VBRP-FKIMG, " Blled quantity
MATNR LIKE VBRP-MATNR, " Material number
AUGRU_AUFT LIKE VBRP-AUGRU_AUFT, " Order reason
NETWR LIKE VBRP-NETWR, " Net val in
END OF IT_VBRP.
Internal table To hold distinct doc condition no's and their
condition values
DATA : BEGIN OF IT_KONV OCCURS 0,
KNUMV LIKE KONV-KNUMV, " # of document condition
KPOSN LIKE KONV-KPOSN, " Condition item number
KWERT LIKE KONV-KWERT, " Condition value
END OF IT_KONV.
Internal table To hold distinct doc condition no's
DATA : BEGIN OF IT_KNUMV OCCURS 0,
KNUMV LIKE KONV-KNUMV, " # of document condition
END OF IT_KNUMV.
Final internal table for list display
DATA : BEGIN OF IT_FINAL OCCURS 0,
CUST_NO LIKE VBRK-KUNAG,
BILL_DOC LIKE VBRK-VBELN,
BILL_DATE LIKE VBRK-FKDAT,
BILL_TYPE LIKE VBRK-FKART,
MODEL LIKE VBRP-MATNR,
SHP_COST LIKE KONV-KWERT,
FLD_CR LIKE VBRP-NETWR, " vbrp-augru_auft = 'DU'
MRA_CODE LIKE VBRP-AUGRU_AUFT,
MRA_AMOUNT LIKE VBRP-NETWR,
INVOICE_AMT LIKE VBRP-NETWR,
CURRENCY LIKE VBRK-WAERK,
END OF IT_FINAL.
*--Internal table to store Document header details for display
DATA : BEGIN OF IT_HEAD OCCURS 0,
EXP,
CUST_NO LIKE VBRK-KUNAG, " Customer Number
BILL_DOC LIKE VBRK-VBELN, " Document number
BILL_DATE LIKE VBRK-FKDAT, " Billing date
BILL_TYPE LIKE VBRK-FKART, " Billing type
END OF IT_HEAD.
*--Internal table to store Document item details for display
DATA : BEGIN OF IT_ITEM OCCURS 0,
BILL_DOC LIKE VBRK-VBELN, " Document number
MODEL LIKE VBRP-MATNR, " Material Number
SHP_COST LIKE KONV-KWERT, " Doc Condition value
FLD_CR LIKE VBRP-NETWR, " IF VBRP-AUGRU_AUFT='DU'
MRA_CODE LIKE VBRP-AUGRU_AUFT, " MRA Code
MRA_AMOUNT LIKE VBRP-NETWR, " IF VBRK-FKART = 'RE'
INVOICE_AMT LIKE VBRP-NETWR, " Invoice Amount
CURRENCY LIKE VBRK-WAERK, " Currency
END OF IT_ITEM.
*--To store the second level data : Billing document, amount
DATA : BEGIN OF IT_DETAILS OCCURS 0,
CUST_NO LIKE VBRK-KUNAG, " Customer Number
BILL_DOC LIKE VBRK-VBELN, " Document number
QUANTITY TYPE I,"VBRP-FKIMG, " Qty
AMOUNT LIKE VBRP-NETWR, " Amount
END OF IT_DETAILS.
*---Structures for ALV List Display
DATA: LS_FIELDCAT TYPE SLIS_FIELDCAT_ALV,
LS_LAYOUT TYPE SLIS_LAYOUT_ALV,
LS_VARIANT TYPE DISVARIANT,
LS_EVENT TYPE SLIS_ALV_EVENT,
LS_KEYINFO TYPE SLIS_KEYINFO_ALV,
LS_SORTINFO TYPE SLIS_SORTINFO_ALV.
*---Internal Tables for ALV List Display
DATA: IT_FIELDCAT TYPE SLIS_T_FIELDCAT_ALV,
IT_EVENTS TYPE SLIS_T_EVENT,
IT_SORTINFO TYPE SLIS_T_SORTINFO_ALV.
DATA : V_REPID LIKE SY-REPID.
DATA : V_TOTAL_SALES_QTY TYPE I, " Total Sales Quantity
V_TOTAL_SALES_AMT LIKE VBRP-NETWR, " Total Sales Amount
V_TOTAL_RTRNS_QTY TYPE I, " Total Returns Qty
V_TOTAL_RTRNS_AMT LIKE VBRP-NETWR, " Total Returns Amt
V_TOTAL_FLDCR_QTY TYPE I, " Total Fld Cr Qty
V_TOTAL_FLDCR_AMT LIKE VBRP-NETWR, " Total Fld Cr Amount
V_CURRENCY LIKE VBRK-WAERK. " Currency Key
&----
*& SELECTION-SCREEN. *
&----
SELECTION-SCREEN BEGIN OF BLOCK SEL1 WITH FRAME TITLE TEXT-001.
SELECT-OPTIONS: S_VKORG FOR VBRK-VKORG " Sales Organization
OBLIGATORY,
S_VTWEG FOR VBRK-VTWEG " Distribution Channel
OBLIGATORY,
S_SPART FOR VBRK-SPART " Division
OBLIGATORY,
S_KUNAG FOR VBRK-KUNAG, " Sold-to-party
S_MATNR FOR VBRP-MATNR, " Material
S_FKDAT FOR VBRK-FKDAT " Billing Date
OBLIGATORY,
S_FKART FOR VBRK-FKART, " Billing Type
S_AUGRU FOR VBRP-AUGRU_AUFT. " MRA Code
SELECTION-SCREEN ULINE.
SELECTION-SCREEN BEGIN OF LINE.
PARAMETERS:RB_DTL RADIOBUTTON GROUP G1.
SELECTION-SCREEN COMMENT 4(35) TEXT-002 . " Detail Report
SELECTION-SCREEN END OF LINE.
*- Product class summary by customer
SELECTION-SCREEN BEGIN OF LINE.
PARAMETERS:RB_SUM RADIOBUTTON GROUP G1.
SELECTION-SCREEN COMMENT 4(35) TEXT-003. " Summary
SELECTION-SCREEN END OF LINE.
SELECTION-SCREEN END OF BLOCK SEL1.
&----
*& At Selection Screen Event *
&----
AT SELECTION-SCREEN.
*---Validate selection-screen. Check for inputs
PERFORM VALIDATE.
&----
*& TOP-OF-PAGE *
&----
TOP-OF-PAGE.
*---Display the standard top of page if summary is selected
PERFORM TOP_OF_PAGE_REPORT.
TOP-OF-PAGE DURING LINE-SELECTION.
*---Display the standard top of page if summary is selected
PERFORM TOP_OF_PAGE_REPORT.
PERFORM DISPLAY_COLUMN_HEADERS.
&----
*& START-OF-SELECTION. *
&----
START-OF-SELECTION.
*---Get the required data from tables
PERFORM GET_DATA.
&----
*& END-OF-SELECTION. *
&----
END-OF-SELECTION.
*---Display report
PERFORM DISPLAY_DATA.
&----
*& AT LINE SELECTION *
&----
AT LINE-SELECTION.
*--Display details for the quantity or the amount selected.
PERFORM DISPLAY_DETAIL.
&----
*& Form VALIDATE *
&----
Validate Billing date in the selection-screen *
----
FORM VALIDATE.
*- To Check Sales Organization
SELECT VKORG UP TO 1 ROWS
FROM TVKO
INTO TVKO-VKORG
WHERE VKORG IN S_VKORG.
ENDSELECT.
IF SY-SUBRC NE 0.
MESSAGE E001.
ENDIF.
*- To Check Distribution Channel
SELECT VTWEG UP TO 1 ROWS
FROM TVTW
INTO TVTW-VTWEG
WHERE VTWEG IN S_VTWEG.
ENDSELECT.
IF SY-SUBRC NE 0.
MESSAGE E002.
ENDIF.
*- To Check Division
SELECT SPART UP TO 1 ROWS
FROM TSPA
INTO TSPA-SPART
WHERE SPART IN S_SPART.
ENDSELECT.
IF SY-SUBRC NE 0.
MESSAGE E003.
ENDIF.
*- To Check Shipt-to
SELECT KUNNR UP TO 1 ROWS
FROM KNA1
INTO KNA1-KUNNR
WHERE KUNNR IN S_KUNAG.
ENDSELECT.
IF SY-SUBRC NE 0.
MESSAGE E030.
ENDIF.
*- To Check Model Number
SELECT MATNR UP TO 1 ROWS
FROM MARA
INTO MARA-MATNR
WHERE MATNR IN S_MATNR.
ENDSELECT.
IF SY-SUBRC NE 0.
MESSAGE E047.
ENDIF.
*- To Check Billing Date
SELECT FKDAT UP TO 1 ROWS
FROM VBRK
INTO VBRK-FKDAT
WHERE FKDAT IN S_FKDAT.
ENDSELECT.
IF SY-SUBRC NE 0.
MESSAGE E048.
ENDIF.
*- To Check Billing Type
SELECT FKART UP TO 1 ROWS
FROM TVFK
INTO TVFK-FKART
WHERE FKART IN S_FKART.
ENDSELECT.
IF SY-SUBRC NE 0.
MESSAGE E004.
ENDIF.
*- To Check MRA Code
SELECT AUGRU UP TO 1 ROWS
FROM TVAU
INTO TVAU-AUGRU
WHERE AUGRU IN S_AUGRU.
ENDSELECT.
IF SY-SUBRC NE 0.
MESSAGE E049.
ENDIF.
ENDFORM. " VALIDATE
&----
*& Form GET_DATA *
&----
Get the required data from tables *
----
FORM GET_DATA.
*--Get Billing data from VBRK and VBRP
PERFORM GET_BILLING_DATA.
*--Get Shipping Costs from KONV based on the Document Condition Number
PERFORM GET_SHIPPING_COSTS.
ENDFORM. " GET_DATA
&----
*& Form GET_BILLING_DATA *
&----
Get Billing data from VBRK and VBRP *
----
FORM GET_BILLING_DATA.
*---Get data Billing Document header details from VBRK
based on the selection criteria
SELECT VBELN " Billing Document
KUNAG " Customer
FKDAT " Billing Date
FKART " Billing Type
KNUMV " Document Condition Number
WAERK " Currency
INTO TABLE IT_VBRK
FROM VBRK
WHERE VKORG IN S_VKORG " Sales Organisation
AND VTWEG IN S_VTWEG " Distribution Channel
AND SPART IN S_SPART " Division
AND KUNAG IN S_KUNAG " Customer
AND FKDAT IN S_FKDAT " Billing Date
AND FKART IN S_FKART " Billing Type
AND VBTYP NE 'N' " Cancelled Ducuments
AND FKSTO NE 'X'. " Cancellation Indicator
SORT IT_VBRK BY VBELN.
*---Get data Billing Document item details from VBRP for all selected
from VBRP and other criteria entered in the selection criteria
IF NOT IT_VBRK[] IS INITIAL.
SELECT VBELN " Billing Document
POSNR " Item Number
FKIMG " Billed Quantity
MATNR " Material Number
AUGRU_AUFT " MRA Code
NETWR " Invoice Amount
FROM VBRP
INTO TABLE IT_VBRP
FOR ALL ENTRIES IN IT_VBRK
WHERE VBELN = IT_VBRK-VBELN " Document Number
AND MATNR IN S_MATNR " Material Number
AND AUGRU_AUFT IN S_AUGRU. " MRA Code
ENDIF.
ENDFORM. " GET_BILLING_DATA
&----
*& Form GET_SHIPPING_COSTS *
&----
*& Get Shipping Costs from KONV based on the Document Condition Number *
----
FORM GET_SHIPPING_COSTS.
*--Get all the selected Document condition numbers into internal table
IF NOT IT_VBRK[] IS INITIAL.
LOOP AT IT_VBRK.
IT_KNUMV-KNUMV = IT_VBRK-KNUMV.
APPEND IT_KNUMV.
ENDLOOP.
*---Get the Condition values for the Cundition numbers
IF NOT IT_KNUMV[] IS INITIAL.
SORT IT_KNUMV BY KNUMV.
DELETE ADJACENT DUPLICATES FROM IT_KNUMV COMPARING KNUMV.
SELECT KNUMV
KPOSN
KWERT
INTO TABLE IT_KONV
FROM KONV
FOR ALL ENTRIES IN IT_KNUMV
WHERE KNUMV = IT_KNUMV-KNUMV
AND KSCHL = 'ZFRT'.
ENDIF.
ENDIF.
ENDFORM. " GET_SHIPPING_COSTS
&----
*& Form DISPLAY_DATA *
&----
Display report *
----
FORM DISPLAY_DATA.
*--If data is selected, display the report
IF NOT IT_VBRK[] IS INITIAL AND
NOT IT_VBRP[] IS INITIAL.
V_REPID = SY-REPID.
*--If Detail report option is selected in the selection-screen
IF RB_DTL = 'X'.
*--Populate the header and item details in IT_HEAD and IT_ITEM
PERFORM POPULATE_HEAD_ITEM.
*--Build field catalog ie, display position, length, etc..of each column
PERFORM BUILD_FIELD_CATALOG.
*--Prepare the key fields info of the head and item tables
PERFORM PREPARE_KEYINFO.
*--Add events like top-of-page to events list
PERFORM PREPARE_EVENT_LIST
TABLES IT_EVENTS.
*--Prepare the layout of the report
PERFORM PREPARE_LAYOUT.
*--Prepare the sort info and subtotals condition info
PERFORM PREPARE_SORTINFO.
*--Display the report using ALV
PERFORM DISPLAY_ALV_REPORT.
*--If Summary Option is selected in the selections-screen
ELSE.
*--Display the summary report
PERFORM DISPLAY_SUMMARY.
ENDIF.
ELSE.
MESSAGE I999 WITH TEXT-004.
No Data Available for the Given Selection Criteria
ENDIF.
ENDFORM. " DISPLAY_DATA
&----
*& Form POPULATE_HEAD_ITEM *
&----
Populate the header and item details in IT_HEAD and IT_ITEM *
----
FORM POPULATE_HEAD_ITEM.
V_TABIX = SY-TABIX.
*--For each of the document header
LOOP AT IT_VBRK.
*--Get the item details and append to IT_ITEM Internal tble
LOOP AT IT_VBRP WHERE VBELN = IT_VBRK-VBELN.
IT_ITEM-BILL_DOC = IT_VBRP-VBELN.
IT_ITEM-CURRENCY = IT_VBRK-WAERK.
*--Get the condition value for the condition type
READ TABLE IT_KONV WITH KEY KNUMV = IT_VBRK-KNUMV
KPOSN = IT_VBRP-POSNR.
IF SY-SUBRC = 0.
IT_ITEM-SHP_COST = IT_KONV-KWERT.
ENDIF.
IT_ITEM-MODEL = IT_VBRP-MATNR.
IT_ITEM-MRA_CODE = IT_VBRP-AUGRU_AUFT.
*--If MRA Code is 'DU', display amount as field Credit
IF IT_VBRP-AUGRU_AUFT = 'DU'.
IT_ITEM-FLD_CR = IT_VBRP-NETWR.
ENDIF.
*--If billing type is 'RE', display amount as MRA Amount
IF IT_VBRK-FKART = 'RE'.
IT_ITEM-MRA_AMOUNT = IT_VBRP-NETWR.
ENDIF.
IT_ITEM-INVOICE_AMT = IT_VBRP-NETWR.
APPEND IT_ITEM.
CLEAR IT_ITEM.
ENDLOOP.
*--Append Header details to IT_HEAD Internal table
IF SY-SUBRC EQ 0.
IT_HEAD-CUST_NO = IT_VBRK-KUNAG.
IT_HEAD-BILL_DOC = IT_VBRK-VBELN.
IT_HEAD-BILL_DATE = IT_VBRK-FKDAT.
IT_HEAD-BILL_TYPE = IT_VBRK-FKART.
APPEND IT_HEAD.
CLEAR IT_HEAD.
ENDIF.
ENDLOOP.
ENDFORM. " POPULATE_HEAD_ITEM
&----
*& Form BUILD_FIELD_CATALOG *
&----
Build field catalog ie, display position, length, etc..of each column*
----
FORM BUILD_FIELD_CATALOG.
*--Append Field Catalog of Header Level Data for Display
PERFORM APPEND_FIELDCAT
USING 1 'CUST_NO' 'IT_HEAD' 'Customer Number' 15 ' ' 'X'.
PERFORM APPEND_FIELDCAT
USING 2 'BILL_DOC' 'IT_HEAD' 'Billing Document' 16 ' ' ' '.
PERFORM APPEND_FIELDCAT
USING 3 'BILL_DATE' 'IT_HEAD' 'Billing Date' 12 ' ' ' '.
PERFORM APPEND_FIELDCAT
USING 4 'BILL_TYPE' 'IT_HEAD' 'Billing Type' 12 ' ' ' '.
*--Append Field Catalog of Item Level Data for Display
PERFORM APPEND_FIELDCAT
USING 1 'MODEL' 'IT_ITEM' 'Model Number' 18 ' ' ' '.
PERFORM APPEND_FIELDCAT
USING 2 'SHP_COST' 'IT_ITEM' 'Shipping Cost' 18 IT_FINAL-CURRENCY 'X'.
PERFORM APPEND_FIELDCAT
USING 3 'FLD_CR' 'IT_ITEM' 'Field Credits' 21 IT_FINAL-CURRENCY 'X'.
PERFORM APPEND_FIELDCAT
USING 4 'MRA_CODE' 'IT_ITEM' 'MRA Code' 8 ' ' ' '.
PERFORM APPEND_FIELDCAT
USING 5 'MRA_AMOUNT' 'IT_ITEM' '$ Amount of MRA' 21
IT_FINAL-CURRENCY 'X'.
PERFORM APPEND_FIELDCAT
USING 6 'INVOICE_AMT' 'IT_ITEM' '$ Amount of Invoice' 21
IT_FINAL-CURRENCY 'X'.
*--Add Hotspot to Billing Document Number
LOOP AT IT_FIELDCAT INTO LS_FIELDCAT
WHERE FIELDNAME = 'BILL_DOC'.
LS_FIELDCAT-HOTSPOT = 'X'.
MODIFY IT_FIELDCAT FROM LS_FIELDCAT.
ENDLOOP.
ENDFORM. " BUILD_FIELD_CATALOG
&----
*& Form APPEND_FIELDCAT *
&----
Append Field Catalog to IT_FIELDCAT Internal Table *
----
FORM APPEND_FIELDCAT USING POS FIELDNAME TABNAME
TEXT LEN CURRENCY DOSUM.
LS_FIELDCAT-COL_POS = POS. " Position
LS_FIELDCAT-FIELDNAME = FIELDNAME. " Field Name in the internal table
LS_FIELDCAT-TABNAME = TABNAME. " Internal Table name
LS_FIELDCAT-SELTEXT_M = TEXT. " Column display text
LS_FIELDCAT-SELTEXT_L = TEXT. " Column display text
LS_FIELDCAT-OUTPUTLEN = LEN. " Display length of the column
LS_FIELDCAT-DO_SUM = DOSUM. " Set summation flag
LS_FIELDCAT-CURRENCY = CURRENCY. " Currency
APPEND LS_FIELDCAT TO IT_FIELDCAT.
CLEAR LS_FIELDCAT.
ENDFORM. " APPEND_FIELDCAT
&----
*& Form PREPARE_KEYINFO *
&----
Prepare the key fields info of the head and item tables *
----
FORM PREPARE_KEYINFO.
*--Key Fields Joining the Header and Item tables is Billing Document
LS_keyinfo-header01 = 'BILL_DOC'.
LS_keyinfo-item01 = 'BILL_DOC'.
ENDFORM. " PREPARE_KEYINFO
&----
*& Form PREPARE_EVENT_LIST *
&----
Add events like top-of-page to events list *
----
FORM PREPARE_EVENT_LIST TABLES IT_EVENTS TYPE SLIS_T_EVENT.
*--Add Top-OF-Page event to be triggered before the list is displayed
CLEAR LS_EVENT.
LS_EVENT-NAME = SLIS_EV_TOP_OF_PAGE.
LS_EVENT-FORM = 'TOP_OF_PAGE_REPORT'.
APPEND LS_EVENT TO IT_EVENTS.
ENDFORM. " PREPARE_EVENT_LIST
&----
*& Form PREPARE_LAYOUT *
&----
Prepare the layout of the report *
----
FORM PREPARE_LAYOUT.
LS_LAYOUT-expand_fieldname = 'EXP'. " Field for Exp/Col Icon
LS_LAYOUT-no_uline_hs = 'X'. " No Horizontal lines
LS_LAYOUT-subtotals_text = TEXT-015. " Text for Sub-totals
LS_LAYOUT-totals_text = TEXT-016. " Text for totals
LS_LAYOUT-no_subtotals = ' '. " Display Subtotals
ENDFORM. " PREPARE_LAYOUT
&----
*& Form PREPARE_SORTINFO *
&----
Prepare the sort info and subtotals condition info *
----
FORM PREPARE_SORTINFO.
*--Sort the output on Customer number and Billing Document Number and
display subtotals of amounts for each customer
LS_SORTINFO-SPOS = 1. " Sort Position
LS_SORTINFO-UP = 'X'. " Sort Sequence is Ascending
LS_SORTINFO-TABNAME = 'IT_HEAD'. " Table name
LS_SORTINFO-FIELDNAME = 'CUST_NO'. " field name in the table
*--Subtotals of numeric fields for each customer.
LS_SORTINFO-SUBTOT = 'X'. " Subtotals on this field
APPEND LS_SORTINFO TO IT_SORTINFO.
CLEAR LS_SORTINFO.
LS_SORTINFO-SPOS = 2. " Sort position
LS_SORTINFO-UP = 'X'. " Sort order is ascending
LS_SORTINFO-TABNAME = 'IT_HEAD'. " Table name
LS_SORTINFO-FIELDNAME = 'BILL_DOC'. " Field Name
APPEND LS_SORTINFO TO IT_SORTINFO.
CLEAR LS_SORTINFO.
ENDFORM. " PREPARE_SORTINFO
&----
*& Form DISPLAY_ALV_REPORT *
&----
Display the report using ALV *
----
FORM DISPLAY_ALV_REPORT.
SET PF-STATUS 'STATUS'.
CALL FUNCTION 'REUSE_ALV_HIERSEQ_LIST_DISPLAY'
EXPORTING
I_INTERFACE_CHECK = ' '
I_CALLBACK_PROGRAM = V_REPID
I_CALLBACK_PF_STATUS_SET = ' '
I_CALLBACK_USER_COMMAND = 'USER_COMMAND'
IS_LAYOUT = LS_LAYOUT
IT_FIELDCAT = IT_FIELDCAT
IT_EXCLUDING =
IT_SPECIAL_GROUPS =
IT_SORT = IT_SORTINFO
IT_FILTER =
IS_SEL_HIDE =
I_SCREEN_START_COLUMN = 0
I_SCREEN_START_LINE = 0
I_SCREEN_END_COLUMN = 0
I_SCREEN_END_LINE = 0
I_DEFAULT = 'X'
I_SAVE = ' '
IS_VARIANT =
IT_EVENTS = IT_EVENTS
IT_EVENT_EXIT =
I_TABNAME_HEADER = 'IT_HEAD'
I_TABNAME_ITEM = 'IT_ITEM'
I_STRUCTURE_NAME_HEADER =
I_STRUCTURE_NAME_ITEM =
IS_KEYINFO = LS_KEYINFO
IS_PRINT =
IS_REPREP_ID =
I_BUFFER_ACTIVE =
I_BYPASSING_BUFFER =
IMPORTING
E_EXIT_CAUSED_BY_CALLER =
ES_EXIT_CAUSED_BY_USER =
TABLES
T_OUTTAB_HEADER = IT_HEAD
T_OUTTAB_ITEM = IT_ITEM
EXCEPTIONS
PROGRAM_ERROR = 1
OTHERS = 2
.
IF SY-SUBRC <> 0.
MESSAGE E999 WITH TEXT-013. " Error When Displaying Report
ENDIF.
ENDFORM. " DISPLAY_ALV_REPORT
&----
*& Form TOP_OF_PAGE_REPORT *
&----
Display the standard top of page if summary is selected *
----
FORM TOP_OF_PAGE_REPORT.
*--Function module to display top of page
CALL FUNCTION 'Z_REPORT_HEADER'
EXPORTING
DL_TITLE = SY-TITLE
DL_REPID = V_REPID.
ENDFORM. " TOP_OF_PAGE_REPORT
&----
*& Form DISPLAY_COLUMN_HEADERS *
&----
Display the Column headers *
----
FORM DISPLAY_COLUMN_HEADERS.
*--Set color to I Header
PERFORM FORMAT_COLOR USING 5 'X'.
WRITE SY-ULINE(76).
WRITE : /1 SY-VLINE,
2(15) 'Customer Number' CENTERED,
17 SY-VLINE,
18(16) 'Billing Document' CENTERED,
34 SY-VLINE,
35(20) TEXT-008 CENTERED, " Quantity
55 SY-VLINE,
56(20) TEXT-009 CENTERED, " Amount
76 SY-VLINE.
WRITE SY-ULINE(76).
ENDFORM. " DISPLAY_COLUMN_HEADERS
&----
*& Form DISPLAY_SUMMARY *
&----
Display the summary report *
----
FORM DISPLAY_SUMMARY.
CLEAR : V_TOTAL_SALES_QTY,
V_TOTAL_SALES_AMT,
V_TOTAL_RTRNS_QTY,
V_TOTAL_RTRNS_AMT,
V_TOTAL_FLDCR_QTY,
V_TOTAL_FLDCR_AMT.
*--For each item record
LOOP AT IT_VBRP.
*--Check if the item record has a corresponding header record. If yes,
add the sums. Else, proceed to next record
READ TABLE IT_VBRK WITH KEY VBELN = IT_VBRP-VBELN.
IF SY-SUBRC = 0.
*--Increment Total Sales Quantity by 1 for each line item
V_TOTAL_SALES_QTY = V_TOTAL_SALES_QTY + IT_VBRP-FKIMG.
*--Add the Amount to Total Sales Amount
V_TOTAL_SALES_AMT = V_TOTAL_SALES_AMT + IT_VBRP-NETWR.
*--If Billing type is 'RE', add to Returns
IF IT_VBRK-FKART = 'RE'.
*--Increment Returns Quantity by 1
V_TOTAL_RTRNS_QTY = V_TOTAL_RTRNS_QTY + IT_VBRP-FKIMG.
*--Add Amount to Total Returns Amount
V_TOTAL_RTRNS_AMT = V_TOTAL_RTRNS_AMT + IT_VBRP-NETWR.
ENDIF.
*--If order Reason is 'DU' add to Field Credits
IF IT_VBRP-AUGRU_AUFT = 'DU'.
*--Increment Field Credit Quantity by 1
V_TOTAL_FLDCR_QTY = V_TOTAL_FLDCR_QTY + IT_VBRP-FKIMG.
*--Add Amouint to Total Field Credits Amount
V_TOTAL_FLDCR_AMT = V_TOTAL_FLDCR_AMT + IT_VBRP-NETWR.
ENDIF.
ENDIF.
ENDLOOP.
READ TABLE IT_VBRK INDEX 1.
V_CURRENCY = IT_VBRK-WAERK.
-Display Summary report
WRITE SY-ULINE(127).
*--Set color to I Header
PERFORM FORMAT_COLOR USING 5 'X'.
WRITE : /1 SY-VLINE,
2(41) TEXT-005 CENTERED, " Total Sales ( Net Sales )
43 SY-VLINE,
44(41) TEXT-006 CENTERED, " Total Returns
85 SY-VLINE,
86(41) TEXT-007 CENTERED, " Total Field Credits
127 SY-VLINE.
WRITE SY-ULINE(127).
*--Set color to II Header
PERFORM FORMAT_COLOR USING 1 'X'.
WRITE : /1 SY-VLINE,
2(20) TEXT-008 RIGHT-JUSTIFIED, " Quantity
22 SY-VLINE,
23(20) TEXT-009 RIGHT-JUSTIFIED, " Amount
43 SY-VLINE,
44(20) TEXT-008 RIGHT-JUSTIFIED, " Quantity
64 SY-VLINE,
65(20) TEXT-009 RIGHT-JUSTIFIED, " Amount
85 SY-VLINE,
86(20) TEXT-008 RIGHT-JUSTIFIED, " Quantity
106 SY-VLINE,
107(20) TEXT-009 RIGHT-JUSTIFIED, " Amount
127 SY-VLINE.
WRITE SY-ULINE(127).
*--Set color to detail
PERFORM FORMAT_COLOR USING 2 ' '.
WRITE : /1 SY-VLINE,
2(20) V_TOTAL_SALES_QTY RIGHT-JUSTIFIED HOTSPOT ON,
22 SY-VLINE,
23 V_TOTAL_SALES_AMT CURRENCY V_CURRENCY HOTSPOT ON,
43 SY-VLINE,
44(20) V_TOTAL_RTRNS_QTY RIGHT-JUSTIFIED HOTSPOT ON,
64 SY-VLINE,
65 V_TOTAL_RTRNS_AMT CURRENCY V_CURRENCY HOTSPOT ON,
85 SY-VLINE,
86(20) V_TOTAL_FLDCR_QTY RIGHT-JUSTIFIED HOTSPOT ON,
106 SY-VLINE,
107 V_TOTAL_FLDCR_AMT CURRENCY V_CURRENCY HOTSPOT ON,
127 SY-VLINE.
HIDE V_TOTAL_SALES_QTY.
HIDE V_TOTAL_SALES_AMT.
HIDE V_TOTAL_RTRNS_QTY.
HIDE V_TOTAL_RTRNS_AMT.
HIDE V_TOTAL_FLDCR_QTY.
HIDE V_TOTAL_FLDCR_AMT.
WRITE SY-ULINE(127).
ENDFORM. " DISPLAY_SUMMARY
&----
*& Form FORMAT_COLOR
&----
Format Color
----
FORM FORMAT_COLOR USING COLOR
INTENSITY.
IF INTENSITY EQ 'X'.
FORMAT INTENSIFIED ON COLOR = COLOR.
ELSE.
FORMAT INTENSIFIED OFF COLOR = COLOR.
ENDIF.
ENDFORM. " FORMAT_COLOR
&----
*& Form USER_COMMAND
&----
Call back user command
----
FORM USER_COMMAND USING P_UCOMM LIKE SY-UCOMM
P_LINE TYPE SLIS_SELFIELD.
DATA : LV_VBELN TYPE VBRK-VBELN.
*--If Billing document Is clicked
IF P_LINE-TABNAME = 'IT_HEAD' AND P_LINE-FIELDNAME = 'BILL_DOC'.
*--Move the Selected Billing Document Number to a variable
LV_VBELN = P_LINE-VALUE.
*--Set Parameter ID 'VF' with teh Selected Billing Document Number
SET PARAMETER ID 'VF' FIELD LV_VBELN.
*--Call Transaction VF03 to Display the Billing Document
CALL TRANSACTION 'VF03' AND SKIP FIRST SCREEN.
ELSE.
*--If anything other than Billing Document is Clicked,
Display an error message
MESSAGE S999 WITH TEXT-010. "Please select a Billing Document
ENDIF..
ENDFORM. " USER_COMMAND
&----
*& Form DISPLAY_DETAIL
&----
Display details for the quantity or the amount select
----
FORM DISPLAY_DETAIL.
DATA : LV_FIELD(20). " To store the field name selected
DATA : LV_VBELN TYPE VBRK-VBELN.
*--If user clicks on some record in the first screen of summary report
IF SY-LSIND = '1'.
*--Get the field that the user clicked on
GET CURSOR FIELD LV_FIELD.
*--IF User Clicks on Total Sales Amount or Quantity
IF LV_FIELD = 'V_TOTAL_SALES_QTY' OR
LV_FIELD = 'V_TOTAL_SALES_AMT'.
*--Display Total Sales Details
PERFORM GET_TOTAL_SALES_DETAILS.
*--If User Clicks on Total Returns Quantity or Amount
ELSEIF LV_FIELD = 'V_TOTAL_RTRNS_QTY' OR
LV_FIELD = 'V_TOTAL_RTRNS_AMT'.
*--Display Total Returns Details
PERFORM GET_TOTAL_RETURNS_DETAILS.
*--If User Clicks on Total Returns Quantity or Amount
ELSEIF LV_FIELD = 'V_TOTAL_FLDCR_QTY' OR
LV_FIELD = 'V_TOTAL_FLDCR_AMT'.
*--Display Total Field Credits Details
PERFORM GET_TOTAL_FLDCR_DETAILS.
ENDIF.
IF NOT IT_DETAILS[] IS INITIAL.
PERFORM DISPLAY_DETAIL_REPORT.
ENDIF.
ELSEIF SY-LSIND = '2'.
GET CURSOR FIELD LV_FIELD.
IF LV_FIELD = 'IT_DETAILS-BILL_DOC'.
IF NOT IT_DETAILS-BILL_DOC IS INITIAL.
*--Move the Selected Billing Document Number to a variable
LV_VBELN = IT_DETAILS-BILL_DOC.
*--Set Parameter ID 'VF' with teh Selected Billing Document Number
SET PARAMETER ID 'VF' FIELD LV_VBELN.
*--Call Transaction VF03 to Display the Billing Document
CALL TRANSACTION 'VF03' AND SKIP FIRST SCREEN.
ENDIF.
ELSE.
*--If anything other than Billing Document is Clicked,
Display an error message
MESSAGE S999 WITH TEXT-010. " Please select a Billing Document.
ENDIF..
ENDIF.
ENDFORM. " DISPLAY_DETAIL
&----
*& Form GET_TOTAL_SALES_DETAILS
&----
IF User Clicks on Total Sales Amount or Quantity
----
FORM GET_TOTAL_SALES_DETAILS.
Internal table To hold Net Value of Billing Document
DATA : BEGIN OF LT_VBRP OCCURS 0,
VBELN LIKE VBRP-VBELN, " Billing document
POSNR LIKE VBRP-POSNR, " Billing item
FKIMG LIKE VBRP-FKIMG, " Billed Quantity
NETWR LIKE VBRP-NETWR, " Net val in
END OF LT_VBRP.
CLEAR : IT_DETAILS, IT_DETAILS[].
LOOP AT IT_VBRK.
CLEAR : LT_VBRP,LT_VBRP[].
LOOP AT IT_VBRP WHERE VBELN = IT_VBRK-VBELN.
LT_VBRP-VBELN = IT_VBRP-VBELN.
LT_VBRP-POSNR = IT_VBRP-POSNR.
LT_VBRP-FKIMG = IT_VBRP-FKIMG.
LT_VBRP-NETWR = IT_VBRP-NETWR.
APPEND LT_VBRP.
CLEAR LT_VBRP.
ENDLOOP.
SORT LT_VBRP BY VBELN.
LOOP AT LT_VBRP.
AT NEW VBELN.
IT_DETAILS-CUST_NO = IT_VBRK-KUNAG.
IT_DETAILS-BILL_DOC = LT_VBRP-VBELN.
CLEAR : IT_DETAILS-QUANTITY,
IT_DETAILS-AMOUNT.
ENDAT.
IT_DETAILS-QUANTITY = IT_DETAILS-QUANTITY + LT_VBRP-FKIMG.
IT_DETAILS-AMOUNT = IT_DETAILS-AMOUNT + LT_VBRP-NETWR.
AT END OF VBELN.
APPEND IT_DETAILS.
CLEAR IT_DETAILS.
ENDAT.
ENDLOOP.
ENDLOOP.
ENDFORM. " GET_TOTAL_SALES_DETAILS
&----
*& Form GET_TOTAL_RETURNS_DETAILS
&----
IF User Clicks on Total Returns Amount or Quantity
----
FORM GET_TOTAL_RETURNS_DETAILS.
DATA : BEGIN OF LT_VBRP OCCURS 0,
VBELN LIKE VBRP-VBELN, " Billing document
POSNR LIKE VBRP-POSNR, " Billing item
FKIMG LIKE VBRP-FKIMG, " Billed Quantity
NETWR LIKE VBRP-NETWR, " Net val in
END OF LT_VBRP.
CLEAR : IT_DETAILS, IT_DETAILS[].
SORT IT_VBRP BY VBELN.
LOOP AT IT_VBRK WHERE FKART = 'RE'.
CLEAR : LT_VBRP,LT_VBRP[].
LOOP AT IT_VBRP WHERE VBELN = IT_VBRK-VBELN.
LT_VBRP-VBELN = IT_VBRP-VBELN.
LT_VBRP-POSNR = IT_VBRP-POSNR.
LT_VBRP-FKIMG = IT_VBRP-FKIMG.
LT_VBRP-NETWR = IT_VBRP-NETWR.
APPEND LT_VBRP.
CLEAR LT_VBRP.
ENDLOOP.
SORT LT_VBRP BY VBELN.
LOOP AT LT_VBRP.
AT NEW VBELN.
IT_DETAILS-CUST_NO = IT_VBRK-KUNAG.
IT_DETAILS-BILL_DOC = LT_VBRP-VBELN.
CLEAR : IT_DETAILS-QUANTITY,
IT_DETAILS-AMOUNT.
ENDAT.
IT_DETAILS-QUANTITY = IT_DETAILS-QUANTITY + LT_VBRP-FKIMG.
IT_DETAILS-AMOUNT = IT_DETAILS-AMOUNT + LT_VBRP-NETWR.
AT END OF VBELN.
APPEND IT_DETAILS.
CLEAR IT_DETAILS.
ENDAT.
ENDLOOP.
ENDLOOP.
ENDFORM. " GET_TOTAL_RETURNS_DETAILS
&----
*& Form GET_TOTAL_FLDCR_DETAILS
&----
IF User Clicks on Total Tield Credits Amount or Quantity
----
FORM GET_TOTAL_FLDCR_DETAILS.
DATA : BEGIN OF LT_VBRP OCCURS 0,
VBELN LIKE VBRP-VBELN, " Billing document
POSNR LIKE VBRP-POSNR, " Billing item
FKIMG LIKE VBRP-FKIMG, " Billed Quantity
NETWR LIKE VBRP-NETWR, " Net val in
END OF LT_VBRP.
CLEAR : IT_DETAILS, IT_DETAILS[].
SORT IT_VBRP BY VBELN.
LOOP AT IT_VBRK.
CLEAR : LT_VBRP,LT_VBRP[].
LOOP AT IT_VBRP WHERE VBELN = IT_VBRK-VBELN AND
AUGRU_AUFT = 'DU'.
LT_VBRP-VBELN = IT_VBRP-VBELN.
LT_VBRP-POSNR = IT_VBRP-POSNR.
LT_VBRP-FKIMG = IT_VBRP-FKIMG.
LT_VBRP-NETWR = IT_VBRP-NETWR.
APPEND LT_VBRP.
CLEAR LT_VBRP.
ENDLOOP.
SORT LT_VBRP BY VBELN.
LOOP AT LT_VBRP.
AT NEW VBELN.
IT_DETAILS-CUST_NO = IT_VBRK-KUNAG.
IT_DETAILS-BILL_DOC = LT_VBRP-VBELN.
CLEAR : IT_DETAILS-QUANTITY,
IT_DETAILS-AMOUNT.
ENDAT.
IT_DETAILS-QUANTITY = IT_DETAILS-QUANTITY + LT_VBRP-FKIMG.
IT_DETAILS-AMOUNT = IT_DETAILS-AMOUNT + LT_VBRP-NETWR.
AT END OF VBELN.
APPEND IT_DETAILS.
CLEAR IT_DETAILS.
ENDAT.
ENDLOOP.
ENDLOOP.
ENDFORM. " GET_TOTAL_FLDCR_DETAILS
&----
*& Form DISPLAY_DETAIL_REPORT.
&----
Display details for the quantity or the amount select
----
FORM DISPLAY_DETAIL_REPORT..
DATA : LV_TOTAL_AMOUNT_CUST LIKE VBRP-NETWR,
LV_TOTAL_QTY_CUST TYPE I,
LV_TOTAL_AMOUNT LIKE VBRP-NETWR,
LV_TOTAL_QTY TYPE I,
INTENSITY.
SORT IT_DETAILS BY CUST_NO BILL_DOC.
LOOP AT IT_DETAILS.
IF INTENSITY = ' '.
INTENSITY = 'X'.
ELSE.
INTENSITY = ' '.
ENDIF.
PERFORM FORMAT_COLOR USING 2 INTENSITY.
WRITE : /1 SY-VLINE.
AT NEW CUST_NO.
WRITE : 2(15) IT_DETAILS-CUST_NO.
ENDAT.
WRITE : 17 SY-VLINE,
18(16) IT_DETAILS-BILL_DOC HOTSPOT,
34 SY-VLINE,
35(20) IT_DETAILS-QUANTITY RIGHT-JUSTIFIED,
55 SY-VLINE,
56(20) IT_DETAILS-AMOUNT CURRENCY V_CURRENCY,
76 SY-VLINE.
LV_TOTAL_AMOUNT_CUST = LV_TOTAL_AMOUNT_CUST +
IT_DETAILS-AMOUNT.
LV_TOTAL_QTY_CUST = LV_TOTAL_QTY_CUST +
IT_DETAILS-QUANTITY.
LV_TOTAL_AMOUNT = LV_TOTAL_AMOUNT +
IT_DETAILS-AMOUNT.
LV_TOTAL_QTY = LV_TOTAL_QTY +
IT_DETAILS-QUANTITY.
HIDE IT_DETAILS-BILL_DOC.
AT END OF CUST_NO.
PERFORM FORMAT_COLOR USING 3 ' '.
WRITE : /1 SY-VLINE,
2 TEXT-015, " Net Total
34 SY-VLINE,
35(20) LV_TOTAL_QTY_CUST RIGHT-JUSTIFIED,
55 SY-VLINE,
56(20) LV_TOTAL_AMOUNT_CUST CURRENCY V_CURRENCY,
76 SY-VLINE.
CLEAR : LV_TOTAL_QTY_CUST, LV_TOTAL_AMOUNT_CUST.
CLEAR INTENSITY.
WRITE SY-ULINE(76).
ENDAT.
ENDLOOP.
PERFORM FORMAT_COLOR USING 3 'X'.
WRITE : /1 SY-VLINE,
2 TEXT-014, " Total
34 SY-VLINE,
35(20) LV_TOTAL_QTY RIGHT-JUSTIFIED,
55 SY-VLINE,
56(20) LV_TOTAL_AMOUNT CURRENCY V_CURRENCY,
76 SY-VLINE.
WRITE SY-ULINE(76).
ENDFORM. " DISPLAY_DETAIL_REPORT.
Thanks
Mahesh
‎2007 Aug 02 4:55 PM
Hi,
If you are new in ALV, you can try learn about NEW ALV.
Look this articles:
<a href="https://www.sdn.sap.comhttp://www.sdn.sap.comhttp://www.sdn.sap.com/irj/sdn/go/portal/prtroot/docs/library/uuid/acdefb13-0701-0010-f1a2-8eeefa7d3780">Utilizing The New ALV Object Model</a>
<a href="https://www.sdn.sap.comhttp://www.sdn.sap.comhttp://www.sdn.sap.com/irj/sdn/go/portal/prtroot/docs/library/uuid/b0f03986-046c-2910-a5aa-e5364e96ea2c">ALV Object Model - Hierarchical Sequential List - The Basics</a>
<a href="https://www.sdn.sap.comhttp://www.sdn.sap.comhttp://www.sdn.sap.com/irj/sdn/go/portal/prtroot/docs/library/uuid/cda3992d-0e01-0010-90b2-c4e1f899ac01">ALV Object Model - Simple 2D Table - Event Handling</a>
<a href="https://www.sdn.sap.comhttp://www.sdn.sap.comhttp://www.sdn.sap.com/irj/sdn/go/portal/prtroot/docs/library/uuid/eac1fa0b-0e01-0010-0990-8530de4908a6">ALV Object Model - Simple 2D Table - The Basics</a>
Regards.
Marcelo Ramos
‎2007 Aug 02 7:19 PM
SAP has some sample programs which are easy to follow. Look for programs starts with BCALV* and you will find a lot.
Also check out the following link for sample codes:
http://www.sapdevelopment.co.uk/reporting/alvhome.htm
<i>Please reward points for helpful answer.</i>