<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:taxo="http://purl.org/rss/1.0/modules/taxonomy/" version="2.0">
  <channel>
    <title>topic Re: Regarding CODE for ALV Variant! in Application Development and Automation Discussions</title>
    <link>https://community.sap.com/t5/application-development-and-automation-discussions/regarding-code-for-alv-variant/m-p/3310993#M793023</link>
    <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;TABLES: vbak .&lt;/P&gt;&lt;P&gt;TABLES: mara .&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;TYPES: BEGIN OF tp_vbak ,&lt;/P&gt;&lt;P&gt;vbeln TYPE vbak-vbeln,&lt;/P&gt;&lt;P&gt;erdat TYPE vbak-erdat,&lt;/P&gt;&lt;P&gt;erzet TYPE vbak-erzet,&lt;/P&gt;&lt;P&gt;ernam TYPE vbak-ernam,&lt;/P&gt;&lt;P&gt;vbtyp TYPE vbak-vbtyp,&lt;/P&gt;&lt;P&gt;trvog TYPE vbak-trvog,&lt;/P&gt;&lt;P&gt;auart TYPE vbak-auart,&lt;/P&gt;&lt;P&gt;lifsk TYPE vbak-lifsk,&lt;/P&gt;&lt;P&gt;faksk TYPE vbak-faksk,&lt;/P&gt;&lt;P&gt;waerk TYPE vbak-waerk,&lt;/P&gt;&lt;P&gt;vkorg TYPE vbak-vkorg,&lt;/P&gt;&lt;P&gt;kunnr TYPE vbak-kunnr,&lt;/P&gt;&lt;P&gt;vgbel TYPE vbak-vgbel,&lt;/P&gt;&lt;P&gt;vgtyp TYPE vbak-vgtyp,&lt;/P&gt;&lt;P&gt;END OF tp_vbak .&lt;/P&gt;&lt;P&gt;TYPES: BEGIN OF tp_mara ,&lt;/P&gt;&lt;P&gt;matnr TYPE mara-matnr,&lt;/P&gt;&lt;P&gt;END OF tp_mara .&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;TYPES: BEGIN OF tp_alv1_data.&lt;/P&gt;&lt;P&gt;INCLUDE TYPE tp_vbak .&lt;/P&gt;&lt;P&gt;TYPES: END OF tp_alv1_data.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;TYPES: BEGIN OF tp_alv2_data.&lt;/P&gt;&lt;P&gt;INCLUDE TYPE tp_mara .&lt;/P&gt;&lt;P&gt;TYPES: END OF tp_alv2_data.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;TYPE-POOLS: slis.&lt;/P&gt;&lt;P&gt;DATA: gt_vbak TYPE STANDARD TABLE OF tp_vbak WITH HEADER LINE.&lt;/P&gt;&lt;P&gt;DATA: gt_mara TYPE STANDARD TABLE OF tp_mara WITH HEADER LINE.&lt;/P&gt;&lt;P&gt;DATA: gs_variant LIKE disvariant.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;DATA: gt_alv1_data TYPE STANDARD TABLE OF tp_alv1_data WITH HEADER LINE.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;DATA: gt_alv2_data TYPE STANDARD TABLE OF tp_alv2_data WITH HEADER LINE.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;*----&lt;/P&gt;&lt;HR originaltext="----------------------------------------------------------------" /&gt;&lt;P&gt;*&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;SELECTION-SCREEN *&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;*----&lt;/P&gt;&lt;HR originaltext="----------------------------------------------------------------" /&gt;&lt;P&gt;*&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;*----&lt;/P&gt;&lt;HR originaltext="----------------------------------------------------------------" /&gt;&lt;P&gt;*&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;BLOCK b0 *&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;*----&lt;/P&gt;&lt;HR originaltext="----------------------------------------------------------------" /&gt;&lt;P&gt;*&lt;/P&gt;&lt;P&gt;SELECTION-SCREEN BEGIN OF BLOCK b0 WITH FRAME.&lt;/P&gt;&lt;P&gt;SELECT-OPTIONS: s_vbeln FOR vbak-vbeln. "&lt;/P&gt;&lt;P&gt;SELECTION-SCREEN END OF BLOCK b0.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;*----&lt;/P&gt;&lt;HR originaltext="----------------------------------------------------------------" /&gt;&lt;P&gt;*&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;BLOCK bvar *&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;*----&lt;/P&gt;&lt;HR originaltext="----------------------------------------------------------------" /&gt;&lt;P&gt;*&lt;/P&gt;&lt;P&gt;SELECTION-SCREEN BEGIN OF BLOCK bvar WITH FRAME.&lt;/P&gt;&lt;P&gt;PARAMETERS: p_vari LIKE disvariant-variant.&lt;/P&gt;&lt;P&gt;SELECTION-SCREEN END OF BLOCK bvar.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;*----&lt;/P&gt;&lt;HR originaltext="----------------------------------------------------------------" /&gt;&lt;P&gt;*&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;BLOCK bbox *&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;*----&lt;/P&gt;&lt;HR originaltext="----------------------------------------------------------------" /&gt;&lt;P&gt;*&lt;/P&gt;&lt;P&gt;SELECTION-SCREEN BEGIN OF BLOCK bbox WITH FRAME.&lt;/P&gt;&lt;P&gt;PARAMETERS: p_box_up RADIOBUTTON GROUP b1,&lt;/P&gt;&lt;P&gt;p_box_do RADIOBUTTON GROUP b1 DEFAULT 'X',&lt;/P&gt;&lt;P&gt;p_box_no RADIOBUTTON GROUP b1.&lt;/P&gt;&lt;P&gt;SELECTION-SCREEN END OF BLOCK bbox.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;*----&lt;/P&gt;&lt;HR originaltext="---------------------------------------------------------------" /&gt;&lt;P&gt;*&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;AT SELECTION-SCREEN ON P_VARI *&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;*----&lt;/P&gt;&lt;HR originaltext="---------------------------------------------------------------" /&gt;&lt;P&gt;*&lt;/P&gt;&lt;P&gt;AT SELECTION-SCREEN ON p_vari.&lt;/P&gt;&lt;P&gt;PERFORM alv_variant_existence USING p_vari&lt;/P&gt;&lt;P&gt;CHANGING gs_variant.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;*----&lt;/P&gt;&lt;HR originaltext="---------------------------------------------------------------" /&gt;&lt;P&gt;*&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;AT SELECTION-SCREEN ON VALUE REQUEST FOR P_VARI *&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;*----&lt;/P&gt;&lt;HR originaltext="---------------------------------------------------------------" /&gt;&lt;P&gt;*&lt;/P&gt;&lt;P&gt;AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_vari.&lt;/P&gt;&lt;P&gt;PERFORM alv_variant_f4 CHANGING p_vari&lt;/P&gt;&lt;P&gt;gs_variant.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;*----&lt;/P&gt;&lt;HR originaltext="----------------------------------------------------------------" /&gt;&lt;P&gt;*&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;INITIALIZATION *&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;*----&lt;/P&gt;&lt;HR originaltext="----------------------------------------------------------------" /&gt;&lt;P&gt;*&lt;/P&gt;&lt;P&gt;INITIALIZATION.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;*----&lt;/P&gt;&lt;HR originaltext="----------------------------------------------------------------" /&gt;&lt;P&gt;*&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;START-OF-SELECTION *&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;*----&lt;/P&gt;&lt;HR originaltext="----------------------------------------------------------------" /&gt;&lt;P&gt;*&lt;/P&gt;&lt;P&gt;START-OF-SELECTION.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;PERFORM authority_check.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;PERFORM get_control_data.&lt;/P&gt;&lt;P&gt;PERFORM get_transaction_data.&lt;/P&gt;&lt;P&gt;PERFORM process_transaction_data.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;*----&lt;/P&gt;&lt;HR originaltext="----------------------------------------------------------------" /&gt;&lt;P&gt;*&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;END-OF-SELECTION *&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;*----&lt;/P&gt;&lt;HR originaltext="----------------------------------------------------------------" /&gt;&lt;P&gt;*&lt;/P&gt;&lt;P&gt;END-OF-SELECTION.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;PERFORM output_data.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;*----&lt;/P&gt;&lt;HR originaltext="----------------------------------------------------------------" /&gt;&lt;P&gt;*&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;F O R M S *&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;*----&lt;/P&gt;&lt;HR originaltext="----------------------------------------------------------------" /&gt;&lt;P&gt;*&lt;/P&gt;&lt;P&gt;*----&lt;/P&gt;&lt;HR originaltext="---------------------------------------------------------------" /&gt;&lt;P&gt;*&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;FORM AUTHORITY_CHECK *&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;*----&lt;/P&gt;&lt;HR originaltext="---------------------------------------------------------------" /&gt;&lt;P&gt;*&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;Perform authority checks for the report *&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;*----&lt;/P&gt;&lt;HR originaltext="---------------------------------------------------------------" /&gt;&lt;P&gt;*&lt;/P&gt;&lt;P&gt;FORM authority_check.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;!!! Note: authorisation checks are application-dependent.&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;·	!!! Some common cases are listed below - please select one of them &lt;/P&gt;&lt;P&gt;·	!!! or add new authorisation checks. &lt;/P&gt;&lt;P&gt;·	!!! If the report is creating batch input session or using LDB &lt;/P&gt;&lt;P&gt;·	!!! it may be sufficient to use automatic SAP auth.checks. &lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;Authorisation for displaying documents in a single company code&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;·	-&lt;/P&gt;&lt;P&gt;-&lt;/P&gt;&lt;HR originaltext="-------------------------------------------------------------" /&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;·	authority-check object 'F_BKPF_BUK' &lt;/P&gt;&lt;P&gt;·	id 'BUKRS' field p_bukrs &lt;/P&gt;&lt;P&gt;·	id 'ACTVT' field '03'. &lt;/P&gt;&lt;P&gt;·	if sy-subrc 0. &lt;/P&gt;&lt;P&gt;·	message e001(z9) with 'No authorisation to display documents' &lt;/P&gt;&lt;P&gt;·	'in company code' p_bukrs. &lt;/P&gt;&lt;P&gt;·	endif. &lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;Displaying documents from a list of company codes (select-options)&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;·	-&lt;/P&gt;&lt;P&gt;-&lt;/P&gt;&lt;HR originaltext="----------------------------------------------------------------" /&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;·	call function 'Y_BUKRS_AUTHORITY_CHECK' &lt;/P&gt;&lt;P&gt;·	EXPORTING &lt;/P&gt;&lt;P&gt;·	ACTVT = '03' &lt;/P&gt;&lt;P&gt;·	NOMESSAGE = ' ' &lt;/P&gt;&lt;P&gt;·	tables &lt;/P&gt;&lt;P&gt;·	s_bukrs = s_bukrs. &lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;ENDFORM. " AUTHORITY_CHECK&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;*----&lt;/P&gt;&lt;HR originaltext="---------------------------------------------------------------" /&gt;&lt;P&gt;*&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;FORM GET_CONTROL_DATA *&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;*----&lt;/P&gt;&lt;HR originaltext="---------------------------------------------------------------" /&gt;&lt;P&gt;*&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;Read configuration etc. *&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;*----&lt;/P&gt;&lt;HR originaltext="---------------------------------------------------------------" /&gt;&lt;P&gt;*&lt;/P&gt;&lt;P&gt;FORM get_control_data.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;ENDFORM. " GET_CONTROL_DATA&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;*----&lt;/P&gt;&lt;HR originaltext="---------------------------------------------------------------" /&gt;&lt;P&gt;*&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;FORM GET_TRANSACTION_DATA *&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;*----&lt;/P&gt;&lt;HR originaltext="---------------------------------------------------------------" /&gt;&lt;P&gt;*&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;Read documents etc. *&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;*----&lt;/P&gt;&lt;HR originaltext="---------------------------------------------------------------" /&gt;&lt;P&gt;*&lt;/P&gt;&lt;P&gt;FORM get_transaction_data.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;!!! Data selection statement below has been generated automatically.&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;·	!!! Please check if it is correct and complete. &lt;/P&gt;&lt;P&gt;·	!!! Use table joins or 'SELECT FOR ALL ENTRIES' when selecting data &lt;/P&gt;&lt;P&gt;·	!!! from related tables. &lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;SELECT&lt;/P&gt;&lt;P&gt;vbeln&lt;/P&gt;&lt;P&gt;erdat&lt;/P&gt;&lt;P&gt;erzet&lt;/P&gt;&lt;P&gt;ernam&lt;/P&gt;&lt;P&gt;FROM vbak&lt;/P&gt;&lt;P&gt;INTO CORRESPONDING FIELDS OF TABLE gt_vbak&lt;/P&gt;&lt;P&gt;.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;CHECK NOT gt_vbak[] IS INITIAL.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;SELECT&lt;/P&gt;&lt;P&gt;matnr&lt;/P&gt;&lt;P&gt;FROM mara&lt;/P&gt;&lt;P&gt;INTO CORRESPONDING FIELDS OF TABLE gt_mara&lt;/P&gt;&lt;P&gt;FOR ALL ENTRIES IN gt_vbak&lt;/P&gt;&lt;P&gt;WHERE ernam = gt_vbak-ernam&lt;/P&gt;&lt;P&gt;.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;ENDFORM. " GET_TRANSACTION_DATA&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;*----&lt;/P&gt;&lt;HR originaltext="---------------------------------------------------------------" /&gt;&lt;P&gt;*&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;FORM PROCESS_TRANSACTION_DATA *&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;*----&lt;/P&gt;&lt;HR originaltext="---------------------------------------------------------------" /&gt;&lt;P&gt;*&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;........ *&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;*----&lt;/P&gt;&lt;HR originaltext="---------------------------------------------------------------" /&gt;&lt;P&gt;*&lt;/P&gt;&lt;P&gt;FORM process_transaction_data.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;LOOP AT gt_vbak .&lt;/P&gt;&lt;P&gt;MOVE-CORRESPONDING gt_vbak TO gt_alv1_data .&lt;/P&gt;&lt;P&gt;APPEND gt_alv1_data .&lt;/P&gt;&lt;P&gt;ENDLOOP.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;FREE gt_vbak .&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;LOOP AT gt_mara .&lt;/P&gt;&lt;P&gt;MOVE-CORRESPONDING gt_mara TO gt_alv2_data .&lt;/P&gt;&lt;P&gt;APPEND gt_alv2_data .&lt;/P&gt;&lt;P&gt;ENDLOOP.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;FREE gt_mara .&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;ENDFORM. " PROCESS_TRANSACTION_DATA&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;*----&lt;/P&gt;&lt;HR originaltext="---------------------------------------------------------------" /&gt;&lt;P&gt;*&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;FORM OUTPUT_DATA *&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;*----&lt;/P&gt;&lt;HR originaltext="---------------------------------------------------------------" /&gt;&lt;P&gt;*&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;........ *&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;*----&lt;/P&gt;&lt;HR originaltext="---------------------------------------------------------------" /&gt;&lt;P&gt;*&lt;/P&gt;&lt;P&gt;FORM output_data.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;PERFORM alv_list_display.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;ENDFORM. " OUTPUT_DATA&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;*----&lt;/P&gt;&lt;HR originaltext="---------------------------------------------------------------" /&gt;&lt;P&gt;*&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;FORM DISPLAY_RECORD *&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;*----&lt;/P&gt;&lt;HR originaltext="---------------------------------------------------------------" /&gt;&lt;P&gt;*&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;Display object associated with the current ALV line *&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;*----&lt;/P&gt;&lt;HR originaltext="---------------------------------------------------------------" /&gt;&lt;P&gt;*&lt;/P&gt;&lt;P&gt;FORM display_record USING is_selfield TYPE slis_selfield.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;READ TABLE gt_alv1_data INDEX is_selfield-tabindex.&lt;/P&gt;&lt;P&gt;CHECK sy-subrc = 0.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;!!! SAMPLE IMPLEMENTATION FOR DISPLAYING FI DOCUMENTS:&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;SET PARAMETER ID 'BUK' FIELD gt_alv1_data-vbeln.&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;set parameter id 'BLN' field gt_alv1_data-belnr.&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;·	set parameter id 'GJR' field gt_alv1_data-gjahr. &lt;/P&gt;&lt;P&gt;CALL TRANSACTION 'FB03' AND SKIP FIRST SCREEN.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;ENDFORM. " DISPLAY_RECORD&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;*----&lt;/P&gt;&lt;HR originaltext="---------------------------------------------------------------" /&gt;&lt;P&gt;*&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;FORM ALV_LIST_DISPLAY *&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;*----&lt;/P&gt;&lt;HR originaltext="---------------------------------------------------------------" /&gt;&lt;P&gt;*&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;Invoke main ALV function to format and show the report *&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;*----&lt;/P&gt;&lt;HR originaltext="---------------------------------------------------------------" /&gt;&lt;P&gt;*&lt;/P&gt;&lt;P&gt;FORM alv_list_display.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;DATA: ls_layout TYPE slis_layout_alv,&lt;/P&gt;&lt;P&gt;ls_print TYPE slis_print_alv,&lt;/P&gt;&lt;P&gt;ls_keyinfo TYPE slis_keyinfo_alv,&lt;/P&gt;&lt;P&gt;lt_fieldcat TYPE slis_t_fieldcat_alv,&lt;/P&gt;&lt;P&gt;lt_exctab TYPE slis_t_extab,&lt;/P&gt;&lt;P&gt;lt_sorttab TYPE slis_t_sortinfo_alv,&lt;/P&gt;&lt;P&gt;lt_events TYPE slis_t_event.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;PERFORM alv_init_report_events TABLES lt_events.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;PERFORM alv_init_report_layout TABLES lt_fieldcat&lt;/P&gt;&lt;P&gt;lt_exctab&lt;/P&gt;&lt;P&gt;lt_sorttab&lt;/P&gt;&lt;P&gt;CHANGING ls_layout&lt;/P&gt;&lt;P&gt;ls_print&lt;/P&gt;&lt;P&gt;ls_keyinfo.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;CALL FUNCTION 'REUSE_ALV_HIERSEQ_LIST_DISPLAY'&lt;/P&gt;&lt;P&gt;EXPORTING&lt;/P&gt;&lt;P&gt;i_interface_check = ' '&lt;/P&gt;&lt;P&gt;i_callback_program = sy-cprog&lt;/P&gt;&lt;P&gt;is_layout = ls_layout&lt;/P&gt;&lt;P&gt;it_fieldcat = lt_fieldcat&lt;/P&gt;&lt;P&gt;it_excluding = lt_exctab&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;IT_SPECIAL_GROUPS =&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;it_sort = lt_sorttab&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;IT_FILTER =&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;·	IS_SEL_HIDE = &lt;/P&gt;&lt;P&gt;·	I_SCREEN_START_COLUMN = 0 &lt;/P&gt;&lt;P&gt;·	I_SCREEN_START_LINE = 0 &lt;/P&gt;&lt;P&gt;·	I_SCREEN_END_COLUMN = 0 &lt;/P&gt;&lt;P&gt;·	I_SCREEN_END_LINE = 0 &lt;/P&gt;&lt;P&gt;·	I_DEFAULT = 'X' &lt;/P&gt;&lt;P&gt;i_save = 'A'&lt;/P&gt;&lt;P&gt;is_variant = gs_variant&lt;/P&gt;&lt;P&gt;it_events = lt_events&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;IT_EVENT_EXIT =&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;i_tabname_header = 'GT_ALV1_DATA'&lt;/P&gt;&lt;P&gt;i_tabname_item = 'GT_ALV2_DATA'&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;I_STRUCTURE_NAME_HEADER =&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;·	I_STRUCTURE_NAME_ITEM = &lt;/P&gt;&lt;P&gt;is_keyinfo = ls_keyinfo&lt;/P&gt;&lt;P&gt;is_print = ls_print&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;IS_REPREP_ID =&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;·	IMPORTING &lt;/P&gt;&lt;P&gt;·	E_EXIT_CAUSED_BY_CALLER = &lt;/P&gt;&lt;P&gt;·	ES_EXIT_CAUSED_BY_USER = &lt;/P&gt;&lt;P&gt;TABLES&lt;/P&gt;&lt;P&gt;t_outtab_header = gt_alv1_data&lt;/P&gt;&lt;P&gt;t_outtab_item = gt_alv2_data.&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;EXCEPTIONS&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;·	PROGRAM_ERROR = 1 &lt;/P&gt;&lt;P&gt;·	OTHERS = 2 &lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;ENDFORM. " ALV_LIST_DISPLAY&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;*----&lt;/P&gt;&lt;HR originaltext="---------------------------------------------------------------" /&gt;&lt;P&gt;*&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;FORM ALV_INIT_REPORT_LAYOUT *&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;*----&lt;/P&gt;&lt;HR originaltext="---------------------------------------------------------------" /&gt;&lt;P&gt;*&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;Set up report layout definition for ALV_LIST_DISPLAY *&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;*----&lt;/P&gt;&lt;HR originaltext="---------------------------------------------------------------" /&gt;&lt;P&gt;*&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;&amp;lt;-- OT_FIELDCAT list of fields *&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;·	&amp;lt;-- OT_EXCTAB excluded menu options * &lt;/P&gt;&lt;P&gt;·	&amp;lt;-- OT_SORTTAB sorting/grouping definition * &lt;/P&gt;&lt;P&gt;·	&amp;lt;-- OS_LAYOUT global report layout settings * &lt;/P&gt;&lt;P&gt;·	&amp;lt;-- OS_PRINT global report printout settings * &lt;/P&gt;&lt;P&gt;·	&amp;lt;-- OS_KEYINFO itab key fields (required only for hier.lists) * &lt;/P&gt;&lt;P&gt;*----&lt;/P&gt;&lt;HR originaltext="---------------------------------------------------------------" /&gt;&lt;P&gt;*&lt;/P&gt;&lt;P&gt;FORM alv_init_report_layout TABLES ot_fieldcat TYPE slis_t_fieldcat_alv&lt;/P&gt;&lt;P&gt;ot_exctab TYPE slis_t_extab&lt;/P&gt;&lt;P&gt;ot_sorttab TYPE slis_t_sortinfo_alv&lt;/P&gt;&lt;P&gt;CHANGING cs_layout TYPE slis_layout_alv&lt;/P&gt;&lt;P&gt;cs_print TYPE slis_print_alv&lt;/P&gt;&lt;P&gt;cs_keyinfo TYPE slis_keyinfo_alv.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;add menu items to be excluded to ot_exctab.&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;REFRESH ot_exctab.&lt;/P&gt;&lt;P&gt;REFRESH ot_fieldcat.&lt;/P&gt;&lt;P&gt;REFRESH ot_sorttab.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;!!!&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;·	!!! List all ALV data fields for display here: &lt;/P&gt;&lt;P&gt;·	!!! &lt;/P&gt;&lt;P&gt;·	DD-struct = data dictionary structure name &lt;/P&gt;&lt;P&gt;·	DD-field = field of data dictionary structure &lt;/P&gt;&lt;P&gt;·	itab = internal table for output data &lt;/P&gt;&lt;P&gt;·	itab-field = internal table field name &lt;/P&gt;&lt;P&gt;·	key = set to 'X' if key field &lt;/P&gt;&lt;P&gt;·	sum = set to 'X' for totals &lt;/P&gt;&lt;P&gt;·	hid = set to 'X' if field is initially hidden &lt;/P&gt;&lt;P&gt;·	row = list row number (multi-line list if &amp;gt;1) &lt;/P&gt;&lt;P&gt;*&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;DD-struct DD-field itab itab-field key sum hid row&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;·	-&lt;/P&gt;&lt;P&gt;-&lt;/P&gt;&lt;HR originaltext="----------------------------------------------------------------" /&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;PERFORM alv_build_fieldcat TABLES ot_fieldcat USING:&lt;/P&gt;&lt;P&gt;'VBAK' 'VBELN' 'GT_ALV1_DATA' 'VBELN' ' ' ' ' ' ' 1 ,&lt;/P&gt;&lt;P&gt;'VBAK' 'ERDAT' 'GT_ALV1_DATA' 'ERDAT' ' ' ' ' ' ' 1 ,&lt;/P&gt;&lt;P&gt;'VBAK' 'ERZET' 'GT_ALV1_DATA' 'ERZET' ' ' ' ' ' ' 1 ,&lt;/P&gt;&lt;P&gt;'VBAK' 'ERNAM' 'GT_ALV1_DATA' 'ERNAM' ' ' ' ' ' ' 1.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;PERFORM alv_build_fieldcat TABLES ot_fieldcat USING:&lt;/P&gt;&lt;P&gt;'MARA' 'MATNR' 'GT_ALV2_DATA' 'MATNR' ' ' ' ' ' ' 1 .&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;!!!&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;·	!!! List all ALV data fields for sorting/grouping here &lt;/P&gt;&lt;P&gt;·	!!! &lt;/P&gt;&lt;P&gt;·	itab = internal table for output data &lt;/P&gt;&lt;P&gt;·	itab-field = internal table field name &lt;/P&gt;&lt;P&gt;·	up = sort ascending &lt;/P&gt;&lt;P&gt;·	down = sort descending &lt;/P&gt;&lt;P&gt;·	grp = group by &lt;/P&gt;&lt;P&gt;·	comp = group initially compressed &lt;/P&gt;&lt;P&gt;·	pos = field position in sort sequence &lt;/P&gt;&lt;P&gt;*&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;itab field up down grp comp pos&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;·	-&lt;/P&gt;&lt;P&gt;-&lt;/P&gt;&lt;HR originaltext="-------------------------------------------------------------------" /&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;PERFORM alv_build_sorttab TABLES ot_sorttab USING:&lt;/P&gt;&lt;P&gt;'GT_ALV1_DATA' 'VBELN' 'X' ' ' ' ' ' ' 1.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;PERFORM alv_build_sorttab TABLES ot_sorttab USING:&lt;/P&gt;&lt;P&gt;'GT_ALV2_DATA' 'MATNR' 'X' ' ' ' ' ' ' 1.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;!!! key definition - required only for hierarchical display (2 itabs)&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;cs_keyinfo-header01 = 'VBELN' .&lt;/P&gt;&lt;P&gt;cs_keyinfo-item01 = 'MATNR' .&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;!!! See the declaration of type SLIS_LAYOUT_ALV and set the fields&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;·	!!! of OS_LAYOUT record to change list-level attributes &lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;os_layout-no_colhead = 'X'. " no headings&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;cs_layout-zebra = 'X'. " stripped pattern&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;os_layout-no_vline = 'X'. " columns separated by space&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;·	os_layout-totals_only = 'X'. " show only totals &lt;/P&gt;&lt;P&gt;·	os_layout-totals_text = 'Total'. " totals line label &lt;/P&gt;&lt;P&gt;·	os_layout-subtotals_text = 'Subtotal'. " subtotals line label &lt;/P&gt;&lt;P&gt;·	os_layout-subtotals_text = 'Subtotal'. " subtotals line label &lt;/P&gt;&lt;P&gt;·	os_layout-key_hotspot = 'X'. " keys as hotspot &lt;/P&gt;&lt;P&gt;·	os_layout-expand_all = 'X'. " Expand all positions &lt;/P&gt;&lt;P&gt;·	os_layout... &lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;cs_print-no_print_selinfos = 'X'. " Skip selection statistics&lt;/P&gt;&lt;P&gt;cs_print-no_print_listinfos = 'X'. " Skip list statistics&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;os_print-...&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;ENDFORM. " INIT_REPORT_LAYOUT&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;*----&lt;/P&gt;&lt;HR originaltext="---------------------------------------------------------------" /&gt;&lt;P&gt;*&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;FORM ALV_BUILD_FIELDCAT *&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;*----&lt;/P&gt;&lt;HR originaltext="---------------------------------------------------------------" /&gt;&lt;P&gt;*&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;Format a single line for ALV_INIT_REPORT_LAYOUT *&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;*----&lt;/P&gt;&lt;HR originaltext="---------------------------------------------------------------" /&gt;&lt;P&gt;*&lt;/P&gt;&lt;P&gt;FORM alv_build_fieldcat TABLES ot_fieldcat&lt;/P&gt;&lt;P&gt;USING iv_ref_tabname "ref to a table/field&lt;/P&gt;&lt;P&gt;iv_ref_fieldname&lt;/P&gt;&lt;P&gt;iv_tabname "actual table/field name&lt;/P&gt;&lt;P&gt;iv_fieldname&lt;/P&gt;&lt;P&gt;iv_key&lt;/P&gt;&lt;P&gt;iv_do_sum&lt;/P&gt;&lt;P&gt;iv_no_out&lt;/P&gt;&lt;P&gt;iv_row_pos.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;status variables for auto-numbering of field column position&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;·	(column number reset when a new table or row begins) &lt;/P&gt;&lt;P&gt;STATICS: sv_last_tabname TYPE slis_tabname,&lt;/P&gt;&lt;P&gt;sv_last_row_pos TYPE i,&lt;/P&gt;&lt;P&gt;sv_current_col TYPE i.&lt;/P&gt;&lt;P&gt;IF sv_last_tabname iv_tabname OR sv_last_row_pos iv_row_pos.&lt;/P&gt;&lt;P&gt;sv_current_col = 1.&lt;/P&gt;&lt;P&gt;ELSE.&lt;/P&gt;&lt;P&gt;ADD 1 TO sv_current_col.&lt;/P&gt;&lt;P&gt;ENDIF.&lt;/P&gt;&lt;P&gt;sv_last_tabname = iv_tabname.&lt;/P&gt;&lt;P&gt;sv_last_row_pos = iv_row_pos.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;DATA: ls_fieldcat TYPE slis_fieldcat_alv.&lt;/P&gt;&lt;P&gt;DATA: lv_fieldname TYPE slis_fieldname.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;lv_fieldname = iv_fieldname.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;!!!&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;·	!!! List all the special formatting requirements in cases below &lt;/P&gt;&lt;P&gt;·	!!! &lt;/P&gt;&lt;P&gt;·	case lv_fieldname. &lt;/P&gt;&lt;P&gt;·	when 'WRBTR'. "&amp;lt;-- link with currency required &lt;/P&gt;&lt;P&gt;·	ls_fieldcat-cfieldname = 'WAERS'. &lt;/P&gt;&lt;P&gt;·	ls_fieldcat-ctabname = iv_tabname. &lt;/P&gt;&lt;P&gt;*&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;when 'HKONT'. "&amp;lt;-- change default column header&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;·	ls_fieldcat-seltext_s = 'GL Acc.'. &lt;/P&gt;&lt;P&gt;·	ls_fieldcat-ddictxt = 'S'. " (S)hort (M)iddle (L)ong &lt;/P&gt;&lt;P&gt;*&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;when 'SOME_NUMBER' "&amp;lt;-- change number formatting&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;·	ls_fieldcat-nosign = 'X'. &lt;/P&gt;&lt;P&gt;·	ls_fieldcat-nozero = 'X'. &lt;/P&gt;&lt;P&gt;·	ls_fieldcat-just = 'L'. " (L)eft (R)ight (C)enter &lt;/P&gt;&lt;P&gt;·	endcase. &lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;ls_fieldcat-ref_tabname = iv_ref_tabname.&lt;/P&gt;&lt;P&gt;ls_fieldcat-ref_fieldname = iv_ref_fieldname.&lt;/P&gt;&lt;P&gt;ls_fieldcat-tabname = iv_tabname.&lt;/P&gt;&lt;P&gt;ls_fieldcat-fieldname = iv_fieldname.&lt;/P&gt;&lt;P&gt;ls_fieldcat-key = iv_key.&lt;/P&gt;&lt;P&gt;ls_fieldcat-do_sum = iv_do_sum.&lt;/P&gt;&lt;P&gt;ls_fieldcat-no_out = iv_no_out.&lt;/P&gt;&lt;P&gt;ls_fieldcat-row_pos = iv_row_pos.&lt;/P&gt;&lt;P&gt;ls_fieldcat-col_pos = sv_current_col.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;APPEND ls_fieldcat TO ot_fieldcat.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;ENDFORM. " ALV_BUILD_FIELDCAT&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;*----&lt;/P&gt;&lt;HR originaltext="---------------------------------------------------------------" /&gt;&lt;P&gt;*&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;FORM ALV_BUILD_SORTTAB *&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;*----&lt;/P&gt;&lt;HR originaltext="---------------------------------------------------------------" /&gt;&lt;P&gt;*&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;Set up sorting information for ALV_INIT_REPORT_LAYOUT *&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;*----&lt;/P&gt;&lt;HR originaltext="---------------------------------------------------------------" /&gt;&lt;P&gt;*&lt;/P&gt;&lt;P&gt;FORM alv_build_sorttab TABLES ot_sorttab TYPE slis_t_sortinfo_alv&lt;/P&gt;&lt;P&gt;USING iv_tabname TYPE slis_fieldname&lt;/P&gt;&lt;P&gt;iv_fieldname TYPE slis_fieldname&lt;/P&gt;&lt;P&gt;iv_up TYPE c&lt;/P&gt;&lt;P&gt;iv_down TYPE c&lt;/P&gt;&lt;P&gt;iv_subtot TYPE c&lt;/P&gt;&lt;P&gt;iv_comp TYPE c&lt;/P&gt;&lt;P&gt;iv_spos TYPE n.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;ot_sorttab-spos = iv_spos.&lt;/P&gt;&lt;P&gt;ot_sorttab-fieldname = iv_fieldname.&lt;/P&gt;&lt;P&gt;ot_sorttab-tabname = iv_tabname.&lt;/P&gt;&lt;P&gt;ot_sorttab-up = iv_up.&lt;/P&gt;&lt;P&gt;ot_sorttab-down = iv_down.&lt;/P&gt;&lt;P&gt;ot_sorttab-subtot = iv_subtot.&lt;/P&gt;&lt;P&gt;ot_sorttab-comp = iv_comp.&lt;/P&gt;&lt;P&gt;APPEND ot_sorttab.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;ENDFORM. " ALV_BUILD_SORTTAB&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;*----&lt;/P&gt;&lt;HR originaltext="---------------------------------------------------------------" /&gt;&lt;P&gt;*&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;FORM ALV_INIT_REPORT_EVENTS *&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;*----&lt;/P&gt;&lt;HR originaltext="---------------------------------------------------------------" /&gt;&lt;P&gt;*&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;Set up program events for ALV_LIST_DISPLAY *&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;*----&lt;/P&gt;&lt;HR originaltext="---------------------------------------------------------------" /&gt;&lt;P&gt;*&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;&amp;lt;-- OT_EVENTS list of events and associated report subroutines *&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;*----&lt;/P&gt;&lt;HR originaltext="---------------------------------------------------------------" /&gt;&lt;P&gt;*&lt;/P&gt;&lt;P&gt;FORM alv_init_report_events TABLES ot_events TYPE slis_t_event.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;CLEAR ot_events.&lt;/P&gt;&lt;P&gt;REFRESH ot_events.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;ot_events-name = slis_ev_user_command.&lt;/P&gt;&lt;P&gt;ot_events-form = 'USER_COMMAND'.&lt;/P&gt;&lt;P&gt;APPEND ot_events.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;ot_events-name = slis_ev_pf_status_set.&lt;/P&gt;&lt;P&gt;ot_events-form = ''. "'PF_STATUS_SET'.&lt;/P&gt;&lt;P&gt;APPEND ot_events.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;ot_events-name = slis_ev_top_of_list.&lt;/P&gt;&lt;P&gt;ot_events-form = 'TOP_OF_LIST'.&lt;/P&gt;&lt;P&gt;APPEND ot_events.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;ot_events-name = slis_ev_end_of_list.&lt;/P&gt;&lt;P&gt;ot_events-form = 'END_OF_LIST'.&lt;/P&gt;&lt;P&gt;APPEND ot_events.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;ot_events-name = slis_ev_top_of_page.&lt;/P&gt;&lt;P&gt;ot_events-form = 'TOP_OF_PAGE'.&lt;/P&gt;&lt;P&gt;APPEND ot_events.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;ot_events-name = slis_ev_end_of_page.&lt;/P&gt;&lt;P&gt;ot_events-form = 'END_OF_PAGE'.&lt;/P&gt;&lt;P&gt;APPEND ot_events.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;ot_events-name = slis_ev_foreign_top_of_page.&lt;/P&gt;&lt;P&gt;ot_events-form = ''.&lt;/P&gt;&lt;P&gt;APPEND ot_events.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;ot_events-name = slis_ev_foreign_end_of_page.&lt;/P&gt;&lt;P&gt;ot_events-form = ''.&lt;/P&gt;&lt;P&gt;APPEND ot_events.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;ot_events-name = slis_ev_top_of_coverpage.&lt;/P&gt;&lt;P&gt;ot_events-form = ''.&lt;/P&gt;&lt;P&gt;APPEND ot_events.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;ot_events-name = slis_ev_end_of_coverpage.&lt;/P&gt;&lt;P&gt;ot_events-form = ''.&lt;/P&gt;&lt;P&gt;APPEND ot_events.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;ot_events-name = slis_ev_before_line_output.&lt;/P&gt;&lt;P&gt;ot_events-form = ''.&lt;/P&gt;&lt;P&gt;APPEND ot_events.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;ot_events-name = slis_ev_after_line_output.&lt;/P&gt;&lt;P&gt;ot_events-form = ''.&lt;/P&gt;&lt;P&gt;APPEND ot_events.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;ot_events-name = slis_ev_caller_exit_at_start.&lt;/P&gt;&lt;P&gt;ot_events-form = ''.&lt;/P&gt;&lt;P&gt;APPEND ot_events.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;ot_events-name = slis_ev_list_modify.&lt;/P&gt;&lt;P&gt;ot_events-form = ''.&lt;/P&gt;&lt;P&gt;APPEND ot_events.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;ot_events-name = slis_ev_subtotal_text.&lt;/P&gt;&lt;P&gt;ot_events-form = ''.&lt;/P&gt;&lt;P&gt;APPEND ot_events.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;ENDFORM. " ALV_INIT_REPORT_EVENTS&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;*----&lt;/P&gt;&lt;HR originaltext="---------------------------------------------------------------" /&gt;&lt;P&gt;*&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;FORM USER_COMMAND *&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;*----&lt;/P&gt;&lt;HR originaltext="---------------------------------------------------------------" /&gt;&lt;P&gt;*&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;Subroutine attached as callback form to ABAP List Viewer *&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;·	--&amp;gt; UCOMM - user command code passed from ALV * &lt;/P&gt;&lt;P&gt;·	--&amp;gt; SELFIELD - information record describing current line/field * &lt;/P&gt;&lt;P&gt;*----&lt;/P&gt;&lt;HR originaltext="---------------------------------------------------------------" /&gt;&lt;P&gt;*&lt;/P&gt;&lt;P&gt;FORM user_command USING value(iv_ucomm) LIKE sy-ucomm&lt;/P&gt;&lt;P&gt;is_selfield TYPE slis_selfield.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;CASE iv_ucomm.&lt;/P&gt;&lt;P&gt;WHEN '&amp;amp;IC1'. "ALV record selection&lt;/P&gt;&lt;P&gt;PERFORM display_record USING is_selfield.&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;when ...&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;·	... &lt;/P&gt;&lt;P&gt;ENDCASE.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;ENDFORM. " USER_COMMAND&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;*----&lt;/P&gt;&lt;HR originaltext="---------------------------------------------------------------" /&gt;&lt;P&gt;*&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;FORM PF_STATUS_SET *&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;*----&lt;/P&gt;&lt;HR originaltext="---------------------------------------------------------------" /&gt;&lt;P&gt;*&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;Subroutine attached as callback form to ABAP List Viewer, *&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;·	allows setting alternative menu. If necessary: * &lt;/P&gt;&lt;P&gt;·	1. Copy 'STANDARD' menu from SAPLKKBL and modify as required, * &lt;/P&gt;&lt;P&gt;·	2. Activate callback * &lt;/P&gt;&lt;P&gt;*----&lt;/P&gt;&lt;HR originaltext="---------------------------------------------------------------" /&gt;&lt;P&gt;*&lt;/P&gt;&lt;P&gt;FORM pf_status_set USING it_exctab TYPE slis_t_extab.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;set pf-status 'STANDARD' excluding it_exctab.&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;ENDFORM. " PF_STATUS_SET&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;*----&lt;/P&gt;&lt;HR originaltext="---------------------------------------------------------------" /&gt;&lt;P&gt;*&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;FORM TOP_OF_LIST *&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;*----&lt;/P&gt;&lt;HR originaltext="---------------------------------------------------------------" /&gt;&lt;P&gt;*&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;Subroutine attached as callback form to ABAP List Viewer, *&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;·	executed once at the start of list output. * &lt;/P&gt;&lt;P&gt;*----&lt;/P&gt;&lt;HR originaltext="---------------------------------------------------------------" /&gt;&lt;P&gt;*&lt;/P&gt;&lt;P&gt;FORM top_of_list.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;DATA: lt_seltab TYPE STANDARD TABLE OF rsparams WITH HEADER LINE.&lt;/P&gt;&lt;P&gt;DATA: lv_report LIKE sy-repid.&lt;/P&gt;&lt;P&gt;lv_report = sy-repid. "do not pass sy-repid to function!&lt;/P&gt;&lt;P&gt;IF p_box_up = 'X'. "display select options at report start&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;CALL FUNCTION 'RS_REFRESH_FROM_SELECTOPTIONS'&lt;/P&gt;&lt;P&gt;EXPORTING&lt;/P&gt;&lt;P&gt;curr_report = lv_report&lt;/P&gt;&lt;P&gt;TABLES&lt;/P&gt;&lt;P&gt;selection_table = lt_seltab.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;remove 'technical' parameters with 'DELETE LT_SELTAB WHERE...'&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;·	before display, if necessary &lt;/P&gt;&lt;P&gt;CALL FUNCTION 'RS_LIST_SELECTION_TABLE'&lt;/P&gt;&lt;P&gt;EXPORTING&lt;/P&gt;&lt;P&gt;report = lv_report&lt;/P&gt;&lt;P&gt;seltext = 'X'&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;dyn_range =&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;newpage = ' '&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;screennr = 1000&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;TABLES&lt;/P&gt;&lt;P&gt;sel_tab = lt_seltab&lt;/P&gt;&lt;P&gt;EXCEPTIONS&lt;/P&gt;&lt;P&gt;sel_tab_empty = 1.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;ENDIF. "p_box_up = 'X'&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;ENDFORM. " TOP_OF_LIST&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;*----&lt;/P&gt;&lt;HR originaltext="---------------------------------------------------------------" /&gt;&lt;P&gt;*&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;FORM END_OF_LIST *&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;*----&lt;/P&gt;&lt;HR originaltext="---------------------------------------------------------------" /&gt;&lt;P&gt;*&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;Subroutine attached as callback form to ABAP List Viewer *&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;·	executed once at the end of list output. * &lt;/P&gt;&lt;P&gt;*----&lt;/P&gt;&lt;HR originaltext="---------------------------------------------------------------" /&gt;&lt;P&gt;*&lt;/P&gt;&lt;P&gt;FORM end_of_list.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;DATA: lt_seltab TYPE STANDARD TABLE OF rsparams WITH HEADER LINE.&lt;/P&gt;&lt;P&gt;DATA: lv_report LIKE sy-repid.&lt;/P&gt;&lt;P&gt;lv_report = sy-repid. "do not pass sy-repid to function!&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;IF p_box_do = 'X'. "display select options at report end&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;CALL FUNCTION 'RS_REFRESH_FROM_SELECTOPTIONS'&lt;/P&gt;&lt;P&gt;EXPORTING&lt;/P&gt;&lt;P&gt;curr_report = lv_report&lt;/P&gt;&lt;P&gt;TABLES&lt;/P&gt;&lt;P&gt;selection_table = lt_seltab.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;remove 'technical' parameters with 'DELETE LT_SELTAB WHERE...'&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;·	before display, if necessary &lt;/P&gt;&lt;P&gt;CALL FUNCTION 'RS_LIST_SELECTION_TABLE'&lt;/P&gt;&lt;P&gt;EXPORTING&lt;/P&gt;&lt;P&gt;report = lv_report&lt;/P&gt;&lt;P&gt;seltext = 'X'&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;dyn_range =&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;newpage = ' '&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;screennr = 1000&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;TABLES&lt;/P&gt;&lt;P&gt;sel_tab = lt_seltab&lt;/P&gt;&lt;P&gt;EXCEPTIONS&lt;/P&gt;&lt;P&gt;sel_tab_empty = 1.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;ENDIF. "p_box_do = 'X'&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;ENDFORM. " END_OF_LIST&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;*----&lt;/P&gt;&lt;HR originaltext="---------------------------------------------------------------" /&gt;&lt;P&gt;*&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;FORM TOP_OF_PAGE *&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;*----&lt;/P&gt;&lt;HR originaltext="---------------------------------------------------------------" /&gt;&lt;P&gt;*&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;Subroutine attached as callback form to ABAP List Viewer *&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;*----&lt;/P&gt;&lt;HR originaltext="---------------------------------------------------------------" /&gt;&lt;P&gt;*&lt;/P&gt;&lt;P&gt;FORM top_of_page.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;standard Ingram Micro report page heading&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;DATA: lv_coco_pos TYPE i, "CurPos of 'Company confidential'&lt;/P&gt;&lt;P&gt;lv_title_pos TYPE i, "CurPos of report title&lt;/P&gt;&lt;P&gt;lv_title(70) TYPE c, "Truncated report title&lt;/P&gt;&lt;P&gt;lv_page_pos TYPE i, "CurPos of page number&lt;/P&gt;&lt;P&gt;lv_date_pos TYPE i, "CurPos of date and time&lt;/P&gt;&lt;P&gt;lv_page_no(10) TYPE c,&lt;/P&gt;&lt;P&gt;lv_date(25) TYPE c,&lt;/P&gt;&lt;P&gt;lv_time(20) TYPE c,&lt;/P&gt;&lt;P&gt;lv_page(10) TYPE c.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;We may need to truncate title if the line size is &amp;lt; 81.&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;IF sy-linsz &amp;lt; 81.&lt;/P&gt;&lt;P&gt;lv_title = sy-title+0(50).&lt;/P&gt;&lt;P&gt;ELSE.&lt;/P&gt;&lt;P&gt;lv_title = sy-title.&lt;/P&gt;&lt;P&gt;ENDIF.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;Decide on positioning of text depending on width of page&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;lv_title_pos = ( sy-linsz / 2 ) - ( STRLEN( lv_title ) / 2 ).&lt;/P&gt;&lt;P&gt;lv_coco_pos = sy-linsz - 20.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;FORMAT COLOR COL_HEADING INTENSIFIED ON.&lt;/P&gt;&lt;P&gt;WRITE: / 'Ingram Micro',&lt;/P&gt;&lt;P&gt;AT lv_title_pos lv_title,&lt;/P&gt;&lt;P&gt;AT lv_coco_pos 'Company Confidential'.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;Setup data correctly in the correct format for the display fields.&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;lv_page = sy-pagno.&lt;/P&gt;&lt;P&gt;SHIFT lv_page LEFT DELETING LEADING ' '.&lt;/P&gt;&lt;P&gt;CONCATENATE sy-datum&lt;EM&gt;6(2) sy-datum&lt;/EM&gt;4(2) sy-datum+0(4)&lt;/P&gt;&lt;P&gt;INTO lv_date SEPARATED BY '.'.&lt;/P&gt;&lt;P&gt;CONCATENATE sy-uzeit&lt;EM&gt;0(2) ':' sy-uzeit&lt;/EM&gt;2(2) INTO lv_time.&lt;/P&gt;&lt;P&gt;CONCATENATE lv_date lv_time INTO lv_date SEPARATED BY ' '.&lt;/P&gt;&lt;P&gt;CONCATENATE 'Page' lv_page INTO lv_page_no SEPARATED BY ' '.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;Decide on positioning of text depending on width of page.&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;lv_page_pos = sy-linsz - ( STRLEN( lv_page_no ) ).&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;WRITE: / lv_date,&lt;/P&gt;&lt;P&gt;AT lv_page_pos lv_page_no.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;ULINE.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;ENDFORM. " TOP_OF_PAGE&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;*----&lt;/P&gt;&lt;HR originaltext="---------------------------------------------------------------" /&gt;&lt;P&gt;*&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;FORM END_OF_PAGE *&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;*----&lt;/P&gt;&lt;HR originaltext="---------------------------------------------------------------" /&gt;&lt;P&gt;*&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;Subroutine attached as callback form to ABAP List Viewer *&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;*----&lt;/P&gt;&lt;HR originaltext="---------------------------------------------------------------" /&gt;&lt;P&gt;*&lt;/P&gt;&lt;P&gt;FORM end_of_page.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;ENDFORM. " END_OF_PAGE&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;*----&lt;/P&gt;&lt;P&gt;-&lt;/P&gt;&lt;HR originaltext="----------------------------------------------------------------" /&gt;&lt;P&gt;&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;Form ALV_VARIANT_EXISTENCE&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;*----&lt;/P&gt;&lt;P&gt;-&lt;/P&gt;&lt;HR originaltext="----------------------------------------------------------------" /&gt;&lt;P&gt;&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;Reads ALV variant definition&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;*----&lt;/P&gt;&lt;P&gt;-&lt;/P&gt;&lt;HR originaltext="----------------------------------------------------------------" /&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;FORM alv_variant_existence USING iv_variant LIKE disvariant-variant&lt;/P&gt;&lt;P&gt;CHANGING os_variant LIKE disvariant.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;CHECK NOT iv_variant IS INITIAL.&lt;/P&gt;&lt;P&gt;os_variant-report = sy-repid.&lt;/P&gt;&lt;P&gt;os_variant-variant = iv_variant.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;IF iv_variant CP '/*'. "user-specific variants begin with slash&lt;/P&gt;&lt;P&gt;os_variant-username = sy-uname.&lt;/P&gt;&lt;P&gt;ENDIF.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;CALL FUNCTION 'REUSE_ALV_VARIANT_EXISTENCE'&lt;/P&gt;&lt;P&gt;EXPORTING&lt;/P&gt;&lt;P&gt;i_save = 'A'&lt;/P&gt;&lt;P&gt;CHANGING&lt;/P&gt;&lt;P&gt;cs_variant = os_variant&lt;/P&gt;&lt;P&gt;EXCEPTIONS&lt;/P&gt;&lt;P&gt;wrong_input = 1&lt;/P&gt;&lt;P&gt;not_found = 2&lt;/P&gt;&lt;P&gt;program_error = 3&lt;/P&gt;&lt;P&gt;OTHERS = 4.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;IF sy-subrc 0.&lt;/P&gt;&lt;P&gt;MESSAGE e001(z9) WITH 'Please select a valid display variant.'.&lt;/P&gt;&lt;P&gt;ENDIF.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;ENDFORM. " ALV_VARIANT_EXISTENCE&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;*----&lt;/P&gt;&lt;HR originaltext="---------------------------------------------------------------" /&gt;&lt;P&gt;*&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;FORM ALV_VARIANT_F4 *&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;*----&lt;/P&gt;&lt;HR originaltext="---------------------------------------------------------------" /&gt;&lt;P&gt;*&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;Display list of layout variants on report selection screen *&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;*----&lt;/P&gt;&lt;HR originaltext="---------------------------------------------------------------" /&gt;&lt;P&gt;*&lt;/P&gt;&lt;P&gt;FORM alv_variant_f4 CHANGING cv_varname LIKE disvariant-variant&lt;/P&gt;&lt;P&gt;cs_variant LIKE disvariant.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;DATA: lv_exit(1) TYPE c.&lt;/P&gt;&lt;P&gt;cs_variant-report = sy-repid.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;CALL FUNCTION 'REUSE_ALV_VARIANT_F4'&lt;/P&gt;&lt;P&gt;EXPORTING&lt;/P&gt;&lt;P&gt;is_variant = cs_variant&lt;/P&gt;&lt;P&gt;i_save = 'A'&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;it_default_fieldcat =&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;IMPORTING&lt;/P&gt;&lt;P&gt;e_exit = lv_exit&lt;/P&gt;&lt;P&gt;es_variant = cs_variant&lt;/P&gt;&lt;P&gt;EXCEPTIONS&lt;/P&gt;&lt;P&gt;not_found = 2.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;IF sy-subrc = 2.&lt;/P&gt;&lt;P&gt;MESSAGE ID sy-msgid TYPE 'S' NUMBER sy-msgno&lt;/P&gt;&lt;P&gt;WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.&lt;/P&gt;&lt;P&gt;ELSE.&lt;/P&gt;&lt;P&gt;IF lv_exit = space.&lt;/P&gt;&lt;P&gt;cv_varname = cs_variant-variant.&lt;/P&gt;&lt;P&gt;ENDIF.&lt;/P&gt;&lt;P&gt;ENDIF. &lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;or check this coding too&lt;/P&gt;&lt;P&gt;·	Global ALV Data Declarations &lt;/P&gt;&lt;P&gt;type-pools: slis.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;Internal Tables&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;data: begin of itab occurs 0,&lt;/P&gt;&lt;P&gt;matnr type mara-matnr,&lt;/P&gt;&lt;P&gt;maktx type makt-maktx,&lt;/P&gt;&lt;P&gt;end of itab.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;start-of-selection.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;perform get_data.&lt;/P&gt;&lt;P&gt;perform call_alv.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;*********************************************************************&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;Form GET_DATA&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;*********************************************************************&lt;/P&gt;&lt;P&gt;form get_data.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;select mara&lt;SUB&gt;matnr makt&lt;/SUB&gt;maktx&lt;/P&gt;&lt;P&gt;into corresponding fields of table itab&lt;/P&gt;&lt;P&gt;from mara&lt;/P&gt;&lt;P&gt;inner join makt&lt;/P&gt;&lt;P&gt;on mara&lt;SUB&gt;matnr = makt&lt;/SUB&gt;matnr&lt;/P&gt;&lt;P&gt;up to 20 rows.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;endform.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;************************************************************************&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;CALL_ALV&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;************************************************************************&lt;/P&gt;&lt;P&gt;form call_alv.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;data: ifc type slis_t_fieldcat_alv.&lt;/P&gt;&lt;P&gt;data: xfc type slis_fieldcat_alv.&lt;/P&gt;&lt;P&gt;data: repid type sy-repid.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;repid = sy-repid.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;clear xfc. refresh ifc.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;clear xfc.&lt;/P&gt;&lt;P&gt;xfc-reptext_ddic = 'Material Number'.&lt;/P&gt;&lt;P&gt;xfc-fieldname = 'MATNR'.&lt;/P&gt;&lt;P&gt;xfc-tabname = 'ITAB'.&lt;/P&gt;&lt;P&gt;xfc-outputlen = '18'.&lt;/P&gt;&lt;P&gt;append xfc to ifc.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;clear xfc.&lt;/P&gt;&lt;P&gt;xfc-reptext_ddic = 'Material Description'.&lt;/P&gt;&lt;P&gt;xfc-fieldname = 'MAKTX'.&lt;/P&gt;&lt;P&gt;xfc-tabname = 'ITAB'.&lt;/P&gt;&lt;P&gt;xfc-outputlen = '40'.&lt;/P&gt;&lt;P&gt;append xfc to ifc.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;Call ABAP List Viewer (ALV)&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;call function 'REUSE_ALV_GRID_DISPLAY'&lt;/P&gt;&lt;P&gt;exporting&lt;/P&gt;&lt;P&gt;i_callback_program = repid&lt;/P&gt;&lt;P&gt;i_callback_user_command = 'HANDLE_USER_COMMAND'&lt;/P&gt;&lt;P&gt;it_fieldcat = ifc&lt;/P&gt;&lt;P&gt;tables&lt;/P&gt;&lt;P&gt;t_outtab = itab.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;endform.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;***********************************************************************&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;FORM handle_User_Command *&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;***********************************************************************&lt;/P&gt;&lt;P&gt;form handle_user_command using r_ucomm like sy-ucomm&lt;/P&gt;&lt;P&gt;rs_selfield type slis_selfield.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;case r_ucomm.&lt;/P&gt;&lt;P&gt;when '&amp;amp;IC1'.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;case rs_selfield-FIELDNAME.&lt;/P&gt;&lt;P&gt;when 'MATNR'.&lt;/P&gt;&lt;P&gt;set parameter id 'MAT' field rs_selfield-value.&lt;/P&gt;&lt;P&gt;call transaction 'MD04' and skip first screen.&lt;/P&gt;&lt;P&gt;endcase.&lt;/P&gt;&lt;P&gt;endcase.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;endform.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;plz reward if useful&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;keep rockin&lt;/P&gt;&lt;P&gt;vivek&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
    <pubDate>Mon, 28 Jan 2008 15:01:49 GMT</pubDate>
    <dc:creator>Former Member</dc:creator>
    <dc:date>2008-01-28T15:01:49Z</dc:date>
    <item>
      <title>Regarding CODE for ALV Variant!</title>
      <link>https://community.sap.com/t5/application-development-and-automation-discussions/regarding-code-for-alv-variant/m-p/3310991#M793021</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Hi..&lt;/P&gt;&lt;P&gt;I need sample code for ALV Variant.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Regards&lt;/P&gt;&lt;P&gt;sandeep.&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Mon, 28 Jan 2008 14:04:33 GMT</pubDate>
      <guid>https://community.sap.com/t5/application-development-and-automation-discussions/regarding-code-for-alv-variant/m-p/3310991#M793021</guid>
      <dc:creator>Former Member</dc:creator>
      <dc:date>2008-01-28T14:04:33Z</dc:date>
    </item>
    <item>
      <title>Re: Regarding CODE for ALV Variant!</title>
      <link>https://community.sap.com/t5/application-development-and-automation-discussions/regarding-code-for-alv-variant/m-p/3310992#M793022</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;AT SELECTION-SCREEN ON VALUE-REQUEST FOR p-varian.&lt;/P&gt;&lt;P&gt;  is_variant-report = sy-repid.&lt;/P&gt;&lt;P&gt;  CALL FUNCTION 'REUSE_ALV_VARIANT_F4'&lt;/P&gt;&lt;P&gt;       EXPORTING&lt;/P&gt;&lt;P&gt;            is_variant    = is_variant&lt;/P&gt;&lt;P&gt;            i_save        = 'A'&lt;/P&gt;&lt;P&gt;       IMPORTING&lt;/P&gt;&lt;P&gt;            e_exit        = variant_exit&lt;/P&gt;&lt;P&gt;            es_variant    = is_variant&lt;/P&gt;&lt;P&gt;       EXCEPTIONS&lt;/P&gt;&lt;P&gt;            not_found     = 1&lt;/P&gt;&lt;P&gt;            program_error = 2&lt;/P&gt;&lt;P&gt;            OTHERS        = 3.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Regards&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Mon, 28 Jan 2008 14:13:46 GMT</pubDate>
      <guid>https://community.sap.com/t5/application-development-and-automation-discussions/regarding-code-for-alv-variant/m-p/3310992#M793022</guid>
      <dc:creator>RaymondGiuseppi</dc:creator>
      <dc:date>2008-01-28T14:13:46Z</dc:date>
    </item>
    <item>
      <title>Re: Regarding CODE for ALV Variant!</title>
      <link>https://community.sap.com/t5/application-development-and-automation-discussions/regarding-code-for-alv-variant/m-p/3310993#M793023</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;TABLES: vbak .&lt;/P&gt;&lt;P&gt;TABLES: mara .&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;TYPES: BEGIN OF tp_vbak ,&lt;/P&gt;&lt;P&gt;vbeln TYPE vbak-vbeln,&lt;/P&gt;&lt;P&gt;erdat TYPE vbak-erdat,&lt;/P&gt;&lt;P&gt;erzet TYPE vbak-erzet,&lt;/P&gt;&lt;P&gt;ernam TYPE vbak-ernam,&lt;/P&gt;&lt;P&gt;vbtyp TYPE vbak-vbtyp,&lt;/P&gt;&lt;P&gt;trvog TYPE vbak-trvog,&lt;/P&gt;&lt;P&gt;auart TYPE vbak-auart,&lt;/P&gt;&lt;P&gt;lifsk TYPE vbak-lifsk,&lt;/P&gt;&lt;P&gt;faksk TYPE vbak-faksk,&lt;/P&gt;&lt;P&gt;waerk TYPE vbak-waerk,&lt;/P&gt;&lt;P&gt;vkorg TYPE vbak-vkorg,&lt;/P&gt;&lt;P&gt;kunnr TYPE vbak-kunnr,&lt;/P&gt;&lt;P&gt;vgbel TYPE vbak-vgbel,&lt;/P&gt;&lt;P&gt;vgtyp TYPE vbak-vgtyp,&lt;/P&gt;&lt;P&gt;END OF tp_vbak .&lt;/P&gt;&lt;P&gt;TYPES: BEGIN OF tp_mara ,&lt;/P&gt;&lt;P&gt;matnr TYPE mara-matnr,&lt;/P&gt;&lt;P&gt;END OF tp_mara .&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;TYPES: BEGIN OF tp_alv1_data.&lt;/P&gt;&lt;P&gt;INCLUDE TYPE tp_vbak .&lt;/P&gt;&lt;P&gt;TYPES: END OF tp_alv1_data.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;TYPES: BEGIN OF tp_alv2_data.&lt;/P&gt;&lt;P&gt;INCLUDE TYPE tp_mara .&lt;/P&gt;&lt;P&gt;TYPES: END OF tp_alv2_data.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;TYPE-POOLS: slis.&lt;/P&gt;&lt;P&gt;DATA: gt_vbak TYPE STANDARD TABLE OF tp_vbak WITH HEADER LINE.&lt;/P&gt;&lt;P&gt;DATA: gt_mara TYPE STANDARD TABLE OF tp_mara WITH HEADER LINE.&lt;/P&gt;&lt;P&gt;DATA: gs_variant LIKE disvariant.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;DATA: gt_alv1_data TYPE STANDARD TABLE OF tp_alv1_data WITH HEADER LINE.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;DATA: gt_alv2_data TYPE STANDARD TABLE OF tp_alv2_data WITH HEADER LINE.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;*----&lt;/P&gt;&lt;HR originaltext="----------------------------------------------------------------" /&gt;&lt;P&gt;*&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;SELECTION-SCREEN *&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;*----&lt;/P&gt;&lt;HR originaltext="----------------------------------------------------------------" /&gt;&lt;P&gt;*&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;*----&lt;/P&gt;&lt;HR originaltext="----------------------------------------------------------------" /&gt;&lt;P&gt;*&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;BLOCK b0 *&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;*----&lt;/P&gt;&lt;HR originaltext="----------------------------------------------------------------" /&gt;&lt;P&gt;*&lt;/P&gt;&lt;P&gt;SELECTION-SCREEN BEGIN OF BLOCK b0 WITH FRAME.&lt;/P&gt;&lt;P&gt;SELECT-OPTIONS: s_vbeln FOR vbak-vbeln. "&lt;/P&gt;&lt;P&gt;SELECTION-SCREEN END OF BLOCK b0.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;*----&lt;/P&gt;&lt;HR originaltext="----------------------------------------------------------------" /&gt;&lt;P&gt;*&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;BLOCK bvar *&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;*----&lt;/P&gt;&lt;HR originaltext="----------------------------------------------------------------" /&gt;&lt;P&gt;*&lt;/P&gt;&lt;P&gt;SELECTION-SCREEN BEGIN OF BLOCK bvar WITH FRAME.&lt;/P&gt;&lt;P&gt;PARAMETERS: p_vari LIKE disvariant-variant.&lt;/P&gt;&lt;P&gt;SELECTION-SCREEN END OF BLOCK bvar.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;*----&lt;/P&gt;&lt;HR originaltext="----------------------------------------------------------------" /&gt;&lt;P&gt;*&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;BLOCK bbox *&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;*----&lt;/P&gt;&lt;HR originaltext="----------------------------------------------------------------" /&gt;&lt;P&gt;*&lt;/P&gt;&lt;P&gt;SELECTION-SCREEN BEGIN OF BLOCK bbox WITH FRAME.&lt;/P&gt;&lt;P&gt;PARAMETERS: p_box_up RADIOBUTTON GROUP b1,&lt;/P&gt;&lt;P&gt;p_box_do RADIOBUTTON GROUP b1 DEFAULT 'X',&lt;/P&gt;&lt;P&gt;p_box_no RADIOBUTTON GROUP b1.&lt;/P&gt;&lt;P&gt;SELECTION-SCREEN END OF BLOCK bbox.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;*----&lt;/P&gt;&lt;HR originaltext="---------------------------------------------------------------" /&gt;&lt;P&gt;*&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;AT SELECTION-SCREEN ON P_VARI *&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;*----&lt;/P&gt;&lt;HR originaltext="---------------------------------------------------------------" /&gt;&lt;P&gt;*&lt;/P&gt;&lt;P&gt;AT SELECTION-SCREEN ON p_vari.&lt;/P&gt;&lt;P&gt;PERFORM alv_variant_existence USING p_vari&lt;/P&gt;&lt;P&gt;CHANGING gs_variant.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;*----&lt;/P&gt;&lt;HR originaltext="---------------------------------------------------------------" /&gt;&lt;P&gt;*&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;AT SELECTION-SCREEN ON VALUE REQUEST FOR P_VARI *&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;*----&lt;/P&gt;&lt;HR originaltext="---------------------------------------------------------------" /&gt;&lt;P&gt;*&lt;/P&gt;&lt;P&gt;AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_vari.&lt;/P&gt;&lt;P&gt;PERFORM alv_variant_f4 CHANGING p_vari&lt;/P&gt;&lt;P&gt;gs_variant.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;*----&lt;/P&gt;&lt;HR originaltext="----------------------------------------------------------------" /&gt;&lt;P&gt;*&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;INITIALIZATION *&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;*----&lt;/P&gt;&lt;HR originaltext="----------------------------------------------------------------" /&gt;&lt;P&gt;*&lt;/P&gt;&lt;P&gt;INITIALIZATION.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;*----&lt;/P&gt;&lt;HR originaltext="----------------------------------------------------------------" /&gt;&lt;P&gt;*&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;START-OF-SELECTION *&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;*----&lt;/P&gt;&lt;HR originaltext="----------------------------------------------------------------" /&gt;&lt;P&gt;*&lt;/P&gt;&lt;P&gt;START-OF-SELECTION.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;PERFORM authority_check.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;PERFORM get_control_data.&lt;/P&gt;&lt;P&gt;PERFORM get_transaction_data.&lt;/P&gt;&lt;P&gt;PERFORM process_transaction_data.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;*----&lt;/P&gt;&lt;HR originaltext="----------------------------------------------------------------" /&gt;&lt;P&gt;*&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;END-OF-SELECTION *&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;*----&lt;/P&gt;&lt;HR originaltext="----------------------------------------------------------------" /&gt;&lt;P&gt;*&lt;/P&gt;&lt;P&gt;END-OF-SELECTION.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;PERFORM output_data.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;*----&lt;/P&gt;&lt;HR originaltext="----------------------------------------------------------------" /&gt;&lt;P&gt;*&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;F O R M S *&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;*----&lt;/P&gt;&lt;HR originaltext="----------------------------------------------------------------" /&gt;&lt;P&gt;*&lt;/P&gt;&lt;P&gt;*----&lt;/P&gt;&lt;HR originaltext="---------------------------------------------------------------" /&gt;&lt;P&gt;*&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;FORM AUTHORITY_CHECK *&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;*----&lt;/P&gt;&lt;HR originaltext="---------------------------------------------------------------" /&gt;&lt;P&gt;*&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;Perform authority checks for the report *&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;*----&lt;/P&gt;&lt;HR originaltext="---------------------------------------------------------------" /&gt;&lt;P&gt;*&lt;/P&gt;&lt;P&gt;FORM authority_check.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;!!! Note: authorisation checks are application-dependent.&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;·	!!! Some common cases are listed below - please select one of them &lt;/P&gt;&lt;P&gt;·	!!! or add new authorisation checks. &lt;/P&gt;&lt;P&gt;·	!!! If the report is creating batch input session or using LDB &lt;/P&gt;&lt;P&gt;·	!!! it may be sufficient to use automatic SAP auth.checks. &lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;Authorisation for displaying documents in a single company code&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;·	-&lt;/P&gt;&lt;P&gt;-&lt;/P&gt;&lt;HR originaltext="-------------------------------------------------------------" /&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;·	authority-check object 'F_BKPF_BUK' &lt;/P&gt;&lt;P&gt;·	id 'BUKRS' field p_bukrs &lt;/P&gt;&lt;P&gt;·	id 'ACTVT' field '03'. &lt;/P&gt;&lt;P&gt;·	if sy-subrc 0. &lt;/P&gt;&lt;P&gt;·	message e001(z9) with 'No authorisation to display documents' &lt;/P&gt;&lt;P&gt;·	'in company code' p_bukrs. &lt;/P&gt;&lt;P&gt;·	endif. &lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;Displaying documents from a list of company codes (select-options)&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;·	-&lt;/P&gt;&lt;P&gt;-&lt;/P&gt;&lt;HR originaltext="----------------------------------------------------------------" /&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;·	call function 'Y_BUKRS_AUTHORITY_CHECK' &lt;/P&gt;&lt;P&gt;·	EXPORTING &lt;/P&gt;&lt;P&gt;·	ACTVT = '03' &lt;/P&gt;&lt;P&gt;·	NOMESSAGE = ' ' &lt;/P&gt;&lt;P&gt;·	tables &lt;/P&gt;&lt;P&gt;·	s_bukrs = s_bukrs. &lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;ENDFORM. " AUTHORITY_CHECK&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;*----&lt;/P&gt;&lt;HR originaltext="---------------------------------------------------------------" /&gt;&lt;P&gt;*&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;FORM GET_CONTROL_DATA *&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;*----&lt;/P&gt;&lt;HR originaltext="---------------------------------------------------------------" /&gt;&lt;P&gt;*&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;Read configuration etc. *&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;*----&lt;/P&gt;&lt;HR originaltext="---------------------------------------------------------------" /&gt;&lt;P&gt;*&lt;/P&gt;&lt;P&gt;FORM get_control_data.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;ENDFORM. " GET_CONTROL_DATA&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;*----&lt;/P&gt;&lt;HR originaltext="---------------------------------------------------------------" /&gt;&lt;P&gt;*&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;FORM GET_TRANSACTION_DATA *&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;*----&lt;/P&gt;&lt;HR originaltext="---------------------------------------------------------------" /&gt;&lt;P&gt;*&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;Read documents etc. *&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;*----&lt;/P&gt;&lt;HR originaltext="---------------------------------------------------------------" /&gt;&lt;P&gt;*&lt;/P&gt;&lt;P&gt;FORM get_transaction_data.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;!!! Data selection statement below has been generated automatically.&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;·	!!! Please check if it is correct and complete. &lt;/P&gt;&lt;P&gt;·	!!! Use table joins or 'SELECT FOR ALL ENTRIES' when selecting data &lt;/P&gt;&lt;P&gt;·	!!! from related tables. &lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;SELECT&lt;/P&gt;&lt;P&gt;vbeln&lt;/P&gt;&lt;P&gt;erdat&lt;/P&gt;&lt;P&gt;erzet&lt;/P&gt;&lt;P&gt;ernam&lt;/P&gt;&lt;P&gt;FROM vbak&lt;/P&gt;&lt;P&gt;INTO CORRESPONDING FIELDS OF TABLE gt_vbak&lt;/P&gt;&lt;P&gt;.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;CHECK NOT gt_vbak[] IS INITIAL.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;SELECT&lt;/P&gt;&lt;P&gt;matnr&lt;/P&gt;&lt;P&gt;FROM mara&lt;/P&gt;&lt;P&gt;INTO CORRESPONDING FIELDS OF TABLE gt_mara&lt;/P&gt;&lt;P&gt;FOR ALL ENTRIES IN gt_vbak&lt;/P&gt;&lt;P&gt;WHERE ernam = gt_vbak-ernam&lt;/P&gt;&lt;P&gt;.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;ENDFORM. " GET_TRANSACTION_DATA&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;*----&lt;/P&gt;&lt;HR originaltext="---------------------------------------------------------------" /&gt;&lt;P&gt;*&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;FORM PROCESS_TRANSACTION_DATA *&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;*----&lt;/P&gt;&lt;HR originaltext="---------------------------------------------------------------" /&gt;&lt;P&gt;*&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;........ *&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;*----&lt;/P&gt;&lt;HR originaltext="---------------------------------------------------------------" /&gt;&lt;P&gt;*&lt;/P&gt;&lt;P&gt;FORM process_transaction_data.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;LOOP AT gt_vbak .&lt;/P&gt;&lt;P&gt;MOVE-CORRESPONDING gt_vbak TO gt_alv1_data .&lt;/P&gt;&lt;P&gt;APPEND gt_alv1_data .&lt;/P&gt;&lt;P&gt;ENDLOOP.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;FREE gt_vbak .&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;LOOP AT gt_mara .&lt;/P&gt;&lt;P&gt;MOVE-CORRESPONDING gt_mara TO gt_alv2_data .&lt;/P&gt;&lt;P&gt;APPEND gt_alv2_data .&lt;/P&gt;&lt;P&gt;ENDLOOP.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;FREE gt_mara .&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;ENDFORM. " PROCESS_TRANSACTION_DATA&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;*----&lt;/P&gt;&lt;HR originaltext="---------------------------------------------------------------" /&gt;&lt;P&gt;*&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;FORM OUTPUT_DATA *&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;*----&lt;/P&gt;&lt;HR originaltext="---------------------------------------------------------------" /&gt;&lt;P&gt;*&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;........ *&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;*----&lt;/P&gt;&lt;HR originaltext="---------------------------------------------------------------" /&gt;&lt;P&gt;*&lt;/P&gt;&lt;P&gt;FORM output_data.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;PERFORM alv_list_display.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;ENDFORM. " OUTPUT_DATA&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;*----&lt;/P&gt;&lt;HR originaltext="---------------------------------------------------------------" /&gt;&lt;P&gt;*&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;FORM DISPLAY_RECORD *&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;*----&lt;/P&gt;&lt;HR originaltext="---------------------------------------------------------------" /&gt;&lt;P&gt;*&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;Display object associated with the current ALV line *&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;*----&lt;/P&gt;&lt;HR originaltext="---------------------------------------------------------------" /&gt;&lt;P&gt;*&lt;/P&gt;&lt;P&gt;FORM display_record USING is_selfield TYPE slis_selfield.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;READ TABLE gt_alv1_data INDEX is_selfield-tabindex.&lt;/P&gt;&lt;P&gt;CHECK sy-subrc = 0.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;!!! SAMPLE IMPLEMENTATION FOR DISPLAYING FI DOCUMENTS:&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;SET PARAMETER ID 'BUK' FIELD gt_alv1_data-vbeln.&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;set parameter id 'BLN' field gt_alv1_data-belnr.&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;·	set parameter id 'GJR' field gt_alv1_data-gjahr. &lt;/P&gt;&lt;P&gt;CALL TRANSACTION 'FB03' AND SKIP FIRST SCREEN.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;ENDFORM. " DISPLAY_RECORD&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;*----&lt;/P&gt;&lt;HR originaltext="---------------------------------------------------------------" /&gt;&lt;P&gt;*&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;FORM ALV_LIST_DISPLAY *&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;*----&lt;/P&gt;&lt;HR originaltext="---------------------------------------------------------------" /&gt;&lt;P&gt;*&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;Invoke main ALV function to format and show the report *&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;*----&lt;/P&gt;&lt;HR originaltext="---------------------------------------------------------------" /&gt;&lt;P&gt;*&lt;/P&gt;&lt;P&gt;FORM alv_list_display.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;DATA: ls_layout TYPE slis_layout_alv,&lt;/P&gt;&lt;P&gt;ls_print TYPE slis_print_alv,&lt;/P&gt;&lt;P&gt;ls_keyinfo TYPE slis_keyinfo_alv,&lt;/P&gt;&lt;P&gt;lt_fieldcat TYPE slis_t_fieldcat_alv,&lt;/P&gt;&lt;P&gt;lt_exctab TYPE slis_t_extab,&lt;/P&gt;&lt;P&gt;lt_sorttab TYPE slis_t_sortinfo_alv,&lt;/P&gt;&lt;P&gt;lt_events TYPE slis_t_event.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;PERFORM alv_init_report_events TABLES lt_events.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;PERFORM alv_init_report_layout TABLES lt_fieldcat&lt;/P&gt;&lt;P&gt;lt_exctab&lt;/P&gt;&lt;P&gt;lt_sorttab&lt;/P&gt;&lt;P&gt;CHANGING ls_layout&lt;/P&gt;&lt;P&gt;ls_print&lt;/P&gt;&lt;P&gt;ls_keyinfo.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;CALL FUNCTION 'REUSE_ALV_HIERSEQ_LIST_DISPLAY'&lt;/P&gt;&lt;P&gt;EXPORTING&lt;/P&gt;&lt;P&gt;i_interface_check = ' '&lt;/P&gt;&lt;P&gt;i_callback_program = sy-cprog&lt;/P&gt;&lt;P&gt;is_layout = ls_layout&lt;/P&gt;&lt;P&gt;it_fieldcat = lt_fieldcat&lt;/P&gt;&lt;P&gt;it_excluding = lt_exctab&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;IT_SPECIAL_GROUPS =&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;it_sort = lt_sorttab&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;IT_FILTER =&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;·	IS_SEL_HIDE = &lt;/P&gt;&lt;P&gt;·	I_SCREEN_START_COLUMN = 0 &lt;/P&gt;&lt;P&gt;·	I_SCREEN_START_LINE = 0 &lt;/P&gt;&lt;P&gt;·	I_SCREEN_END_COLUMN = 0 &lt;/P&gt;&lt;P&gt;·	I_SCREEN_END_LINE = 0 &lt;/P&gt;&lt;P&gt;·	I_DEFAULT = 'X' &lt;/P&gt;&lt;P&gt;i_save = 'A'&lt;/P&gt;&lt;P&gt;is_variant = gs_variant&lt;/P&gt;&lt;P&gt;it_events = lt_events&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;IT_EVENT_EXIT =&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;i_tabname_header = 'GT_ALV1_DATA'&lt;/P&gt;&lt;P&gt;i_tabname_item = 'GT_ALV2_DATA'&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;I_STRUCTURE_NAME_HEADER =&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;·	I_STRUCTURE_NAME_ITEM = &lt;/P&gt;&lt;P&gt;is_keyinfo = ls_keyinfo&lt;/P&gt;&lt;P&gt;is_print = ls_print&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;IS_REPREP_ID =&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;·	IMPORTING &lt;/P&gt;&lt;P&gt;·	E_EXIT_CAUSED_BY_CALLER = &lt;/P&gt;&lt;P&gt;·	ES_EXIT_CAUSED_BY_USER = &lt;/P&gt;&lt;P&gt;TABLES&lt;/P&gt;&lt;P&gt;t_outtab_header = gt_alv1_data&lt;/P&gt;&lt;P&gt;t_outtab_item = gt_alv2_data.&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;EXCEPTIONS&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;·	PROGRAM_ERROR = 1 &lt;/P&gt;&lt;P&gt;·	OTHERS = 2 &lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;ENDFORM. " ALV_LIST_DISPLAY&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;*----&lt;/P&gt;&lt;HR originaltext="---------------------------------------------------------------" /&gt;&lt;P&gt;*&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;FORM ALV_INIT_REPORT_LAYOUT *&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;*----&lt;/P&gt;&lt;HR originaltext="---------------------------------------------------------------" /&gt;&lt;P&gt;*&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;Set up report layout definition for ALV_LIST_DISPLAY *&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;*----&lt;/P&gt;&lt;HR originaltext="---------------------------------------------------------------" /&gt;&lt;P&gt;*&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;&amp;lt;-- OT_FIELDCAT list of fields *&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;·	&amp;lt;-- OT_EXCTAB excluded menu options * &lt;/P&gt;&lt;P&gt;·	&amp;lt;-- OT_SORTTAB sorting/grouping definition * &lt;/P&gt;&lt;P&gt;·	&amp;lt;-- OS_LAYOUT global report layout settings * &lt;/P&gt;&lt;P&gt;·	&amp;lt;-- OS_PRINT global report printout settings * &lt;/P&gt;&lt;P&gt;·	&amp;lt;-- OS_KEYINFO itab key fields (required only for hier.lists) * &lt;/P&gt;&lt;P&gt;*----&lt;/P&gt;&lt;HR originaltext="---------------------------------------------------------------" /&gt;&lt;P&gt;*&lt;/P&gt;&lt;P&gt;FORM alv_init_report_layout TABLES ot_fieldcat TYPE slis_t_fieldcat_alv&lt;/P&gt;&lt;P&gt;ot_exctab TYPE slis_t_extab&lt;/P&gt;&lt;P&gt;ot_sorttab TYPE slis_t_sortinfo_alv&lt;/P&gt;&lt;P&gt;CHANGING cs_layout TYPE slis_layout_alv&lt;/P&gt;&lt;P&gt;cs_print TYPE slis_print_alv&lt;/P&gt;&lt;P&gt;cs_keyinfo TYPE slis_keyinfo_alv.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;add menu items to be excluded to ot_exctab.&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;REFRESH ot_exctab.&lt;/P&gt;&lt;P&gt;REFRESH ot_fieldcat.&lt;/P&gt;&lt;P&gt;REFRESH ot_sorttab.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;!!!&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;·	!!! List all ALV data fields for display here: &lt;/P&gt;&lt;P&gt;·	!!! &lt;/P&gt;&lt;P&gt;·	DD-struct = data dictionary structure name &lt;/P&gt;&lt;P&gt;·	DD-field = field of data dictionary structure &lt;/P&gt;&lt;P&gt;·	itab = internal table for output data &lt;/P&gt;&lt;P&gt;·	itab-field = internal table field name &lt;/P&gt;&lt;P&gt;·	key = set to 'X' if key field &lt;/P&gt;&lt;P&gt;·	sum = set to 'X' for totals &lt;/P&gt;&lt;P&gt;·	hid = set to 'X' if field is initially hidden &lt;/P&gt;&lt;P&gt;·	row = list row number (multi-line list if &amp;gt;1) &lt;/P&gt;&lt;P&gt;*&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;DD-struct DD-field itab itab-field key sum hid row&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;·	-&lt;/P&gt;&lt;P&gt;-&lt;/P&gt;&lt;HR originaltext="----------------------------------------------------------------" /&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;PERFORM alv_build_fieldcat TABLES ot_fieldcat USING:&lt;/P&gt;&lt;P&gt;'VBAK' 'VBELN' 'GT_ALV1_DATA' 'VBELN' ' ' ' ' ' ' 1 ,&lt;/P&gt;&lt;P&gt;'VBAK' 'ERDAT' 'GT_ALV1_DATA' 'ERDAT' ' ' ' ' ' ' 1 ,&lt;/P&gt;&lt;P&gt;'VBAK' 'ERZET' 'GT_ALV1_DATA' 'ERZET' ' ' ' ' ' ' 1 ,&lt;/P&gt;&lt;P&gt;'VBAK' 'ERNAM' 'GT_ALV1_DATA' 'ERNAM' ' ' ' ' ' ' 1.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;PERFORM alv_build_fieldcat TABLES ot_fieldcat USING:&lt;/P&gt;&lt;P&gt;'MARA' 'MATNR' 'GT_ALV2_DATA' 'MATNR' ' ' ' ' ' ' 1 .&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;!!!&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;·	!!! List all ALV data fields for sorting/grouping here &lt;/P&gt;&lt;P&gt;·	!!! &lt;/P&gt;&lt;P&gt;·	itab = internal table for output data &lt;/P&gt;&lt;P&gt;·	itab-field = internal table field name &lt;/P&gt;&lt;P&gt;·	up = sort ascending &lt;/P&gt;&lt;P&gt;·	down = sort descending &lt;/P&gt;&lt;P&gt;·	grp = group by &lt;/P&gt;&lt;P&gt;·	comp = group initially compressed &lt;/P&gt;&lt;P&gt;·	pos = field position in sort sequence &lt;/P&gt;&lt;P&gt;*&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;itab field up down grp comp pos&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;·	-&lt;/P&gt;&lt;P&gt;-&lt;/P&gt;&lt;HR originaltext="-------------------------------------------------------------------" /&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;PERFORM alv_build_sorttab TABLES ot_sorttab USING:&lt;/P&gt;&lt;P&gt;'GT_ALV1_DATA' 'VBELN' 'X' ' ' ' ' ' ' 1.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;PERFORM alv_build_sorttab TABLES ot_sorttab USING:&lt;/P&gt;&lt;P&gt;'GT_ALV2_DATA' 'MATNR' 'X' ' ' ' ' ' ' 1.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;!!! key definition - required only for hierarchical display (2 itabs)&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;cs_keyinfo-header01 = 'VBELN' .&lt;/P&gt;&lt;P&gt;cs_keyinfo-item01 = 'MATNR' .&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;!!! See the declaration of type SLIS_LAYOUT_ALV and set the fields&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;·	!!! of OS_LAYOUT record to change list-level attributes &lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;os_layout-no_colhead = 'X'. " no headings&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;cs_layout-zebra = 'X'. " stripped pattern&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;os_layout-no_vline = 'X'. " columns separated by space&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;·	os_layout-totals_only = 'X'. " show only totals &lt;/P&gt;&lt;P&gt;·	os_layout-totals_text = 'Total'. " totals line label &lt;/P&gt;&lt;P&gt;·	os_layout-subtotals_text = 'Subtotal'. " subtotals line label &lt;/P&gt;&lt;P&gt;·	os_layout-subtotals_text = 'Subtotal'. " subtotals line label &lt;/P&gt;&lt;P&gt;·	os_layout-key_hotspot = 'X'. " keys as hotspot &lt;/P&gt;&lt;P&gt;·	os_layout-expand_all = 'X'. " Expand all positions &lt;/P&gt;&lt;P&gt;·	os_layout... &lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;cs_print-no_print_selinfos = 'X'. " Skip selection statistics&lt;/P&gt;&lt;P&gt;cs_print-no_print_listinfos = 'X'. " Skip list statistics&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;os_print-...&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;ENDFORM. " INIT_REPORT_LAYOUT&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;*----&lt;/P&gt;&lt;HR originaltext="---------------------------------------------------------------" /&gt;&lt;P&gt;*&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;FORM ALV_BUILD_FIELDCAT *&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;*----&lt;/P&gt;&lt;HR originaltext="---------------------------------------------------------------" /&gt;&lt;P&gt;*&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;Format a single line for ALV_INIT_REPORT_LAYOUT *&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;*----&lt;/P&gt;&lt;HR originaltext="---------------------------------------------------------------" /&gt;&lt;P&gt;*&lt;/P&gt;&lt;P&gt;FORM alv_build_fieldcat TABLES ot_fieldcat&lt;/P&gt;&lt;P&gt;USING iv_ref_tabname "ref to a table/field&lt;/P&gt;&lt;P&gt;iv_ref_fieldname&lt;/P&gt;&lt;P&gt;iv_tabname "actual table/field name&lt;/P&gt;&lt;P&gt;iv_fieldname&lt;/P&gt;&lt;P&gt;iv_key&lt;/P&gt;&lt;P&gt;iv_do_sum&lt;/P&gt;&lt;P&gt;iv_no_out&lt;/P&gt;&lt;P&gt;iv_row_pos.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;status variables for auto-numbering of field column position&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;·	(column number reset when a new table or row begins) &lt;/P&gt;&lt;P&gt;STATICS: sv_last_tabname TYPE slis_tabname,&lt;/P&gt;&lt;P&gt;sv_last_row_pos TYPE i,&lt;/P&gt;&lt;P&gt;sv_current_col TYPE i.&lt;/P&gt;&lt;P&gt;IF sv_last_tabname iv_tabname OR sv_last_row_pos iv_row_pos.&lt;/P&gt;&lt;P&gt;sv_current_col = 1.&lt;/P&gt;&lt;P&gt;ELSE.&lt;/P&gt;&lt;P&gt;ADD 1 TO sv_current_col.&lt;/P&gt;&lt;P&gt;ENDIF.&lt;/P&gt;&lt;P&gt;sv_last_tabname = iv_tabname.&lt;/P&gt;&lt;P&gt;sv_last_row_pos = iv_row_pos.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;DATA: ls_fieldcat TYPE slis_fieldcat_alv.&lt;/P&gt;&lt;P&gt;DATA: lv_fieldname TYPE slis_fieldname.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;lv_fieldname = iv_fieldname.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;!!!&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;·	!!! List all the special formatting requirements in cases below &lt;/P&gt;&lt;P&gt;·	!!! &lt;/P&gt;&lt;P&gt;·	case lv_fieldname. &lt;/P&gt;&lt;P&gt;·	when 'WRBTR'. "&amp;lt;-- link with currency required &lt;/P&gt;&lt;P&gt;·	ls_fieldcat-cfieldname = 'WAERS'. &lt;/P&gt;&lt;P&gt;·	ls_fieldcat-ctabname = iv_tabname. &lt;/P&gt;&lt;P&gt;*&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;when 'HKONT'. "&amp;lt;-- change default column header&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;·	ls_fieldcat-seltext_s = 'GL Acc.'. &lt;/P&gt;&lt;P&gt;·	ls_fieldcat-ddictxt = 'S'. " (S)hort (M)iddle (L)ong &lt;/P&gt;&lt;P&gt;*&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;when 'SOME_NUMBER' "&amp;lt;-- change number formatting&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;·	ls_fieldcat-nosign = 'X'. &lt;/P&gt;&lt;P&gt;·	ls_fieldcat-nozero = 'X'. &lt;/P&gt;&lt;P&gt;·	ls_fieldcat-just = 'L'. " (L)eft (R)ight (C)enter &lt;/P&gt;&lt;P&gt;·	endcase. &lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;ls_fieldcat-ref_tabname = iv_ref_tabname.&lt;/P&gt;&lt;P&gt;ls_fieldcat-ref_fieldname = iv_ref_fieldname.&lt;/P&gt;&lt;P&gt;ls_fieldcat-tabname = iv_tabname.&lt;/P&gt;&lt;P&gt;ls_fieldcat-fieldname = iv_fieldname.&lt;/P&gt;&lt;P&gt;ls_fieldcat-key = iv_key.&lt;/P&gt;&lt;P&gt;ls_fieldcat-do_sum = iv_do_sum.&lt;/P&gt;&lt;P&gt;ls_fieldcat-no_out = iv_no_out.&lt;/P&gt;&lt;P&gt;ls_fieldcat-row_pos = iv_row_pos.&lt;/P&gt;&lt;P&gt;ls_fieldcat-col_pos = sv_current_col.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;APPEND ls_fieldcat TO ot_fieldcat.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;ENDFORM. " ALV_BUILD_FIELDCAT&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;*----&lt;/P&gt;&lt;HR originaltext="---------------------------------------------------------------" /&gt;&lt;P&gt;*&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;FORM ALV_BUILD_SORTTAB *&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;*----&lt;/P&gt;&lt;HR originaltext="---------------------------------------------------------------" /&gt;&lt;P&gt;*&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;Set up sorting information for ALV_INIT_REPORT_LAYOUT *&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;*----&lt;/P&gt;&lt;HR originaltext="---------------------------------------------------------------" /&gt;&lt;P&gt;*&lt;/P&gt;&lt;P&gt;FORM alv_build_sorttab TABLES ot_sorttab TYPE slis_t_sortinfo_alv&lt;/P&gt;&lt;P&gt;USING iv_tabname TYPE slis_fieldname&lt;/P&gt;&lt;P&gt;iv_fieldname TYPE slis_fieldname&lt;/P&gt;&lt;P&gt;iv_up TYPE c&lt;/P&gt;&lt;P&gt;iv_down TYPE c&lt;/P&gt;&lt;P&gt;iv_subtot TYPE c&lt;/P&gt;&lt;P&gt;iv_comp TYPE c&lt;/P&gt;&lt;P&gt;iv_spos TYPE n.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;ot_sorttab-spos = iv_spos.&lt;/P&gt;&lt;P&gt;ot_sorttab-fieldname = iv_fieldname.&lt;/P&gt;&lt;P&gt;ot_sorttab-tabname = iv_tabname.&lt;/P&gt;&lt;P&gt;ot_sorttab-up = iv_up.&lt;/P&gt;&lt;P&gt;ot_sorttab-down = iv_down.&lt;/P&gt;&lt;P&gt;ot_sorttab-subtot = iv_subtot.&lt;/P&gt;&lt;P&gt;ot_sorttab-comp = iv_comp.&lt;/P&gt;&lt;P&gt;APPEND ot_sorttab.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;ENDFORM. " ALV_BUILD_SORTTAB&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;*----&lt;/P&gt;&lt;HR originaltext="---------------------------------------------------------------" /&gt;&lt;P&gt;*&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;FORM ALV_INIT_REPORT_EVENTS *&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;*----&lt;/P&gt;&lt;HR originaltext="---------------------------------------------------------------" /&gt;&lt;P&gt;*&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;Set up program events for ALV_LIST_DISPLAY *&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;*----&lt;/P&gt;&lt;HR originaltext="---------------------------------------------------------------" /&gt;&lt;P&gt;*&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;&amp;lt;-- OT_EVENTS list of events and associated report subroutines *&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;*----&lt;/P&gt;&lt;HR originaltext="---------------------------------------------------------------" /&gt;&lt;P&gt;*&lt;/P&gt;&lt;P&gt;FORM alv_init_report_events TABLES ot_events TYPE slis_t_event.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;CLEAR ot_events.&lt;/P&gt;&lt;P&gt;REFRESH ot_events.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;ot_events-name = slis_ev_user_command.&lt;/P&gt;&lt;P&gt;ot_events-form = 'USER_COMMAND'.&lt;/P&gt;&lt;P&gt;APPEND ot_events.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;ot_events-name = slis_ev_pf_status_set.&lt;/P&gt;&lt;P&gt;ot_events-form = ''. "'PF_STATUS_SET'.&lt;/P&gt;&lt;P&gt;APPEND ot_events.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;ot_events-name = slis_ev_top_of_list.&lt;/P&gt;&lt;P&gt;ot_events-form = 'TOP_OF_LIST'.&lt;/P&gt;&lt;P&gt;APPEND ot_events.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;ot_events-name = slis_ev_end_of_list.&lt;/P&gt;&lt;P&gt;ot_events-form = 'END_OF_LIST'.&lt;/P&gt;&lt;P&gt;APPEND ot_events.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;ot_events-name = slis_ev_top_of_page.&lt;/P&gt;&lt;P&gt;ot_events-form = 'TOP_OF_PAGE'.&lt;/P&gt;&lt;P&gt;APPEND ot_events.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;ot_events-name = slis_ev_end_of_page.&lt;/P&gt;&lt;P&gt;ot_events-form = 'END_OF_PAGE'.&lt;/P&gt;&lt;P&gt;APPEND ot_events.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;ot_events-name = slis_ev_foreign_top_of_page.&lt;/P&gt;&lt;P&gt;ot_events-form = ''.&lt;/P&gt;&lt;P&gt;APPEND ot_events.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;ot_events-name = slis_ev_foreign_end_of_page.&lt;/P&gt;&lt;P&gt;ot_events-form = ''.&lt;/P&gt;&lt;P&gt;APPEND ot_events.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;ot_events-name = slis_ev_top_of_coverpage.&lt;/P&gt;&lt;P&gt;ot_events-form = ''.&lt;/P&gt;&lt;P&gt;APPEND ot_events.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;ot_events-name = slis_ev_end_of_coverpage.&lt;/P&gt;&lt;P&gt;ot_events-form = ''.&lt;/P&gt;&lt;P&gt;APPEND ot_events.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;ot_events-name = slis_ev_before_line_output.&lt;/P&gt;&lt;P&gt;ot_events-form = ''.&lt;/P&gt;&lt;P&gt;APPEND ot_events.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;ot_events-name = slis_ev_after_line_output.&lt;/P&gt;&lt;P&gt;ot_events-form = ''.&lt;/P&gt;&lt;P&gt;APPEND ot_events.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;ot_events-name = slis_ev_caller_exit_at_start.&lt;/P&gt;&lt;P&gt;ot_events-form = ''.&lt;/P&gt;&lt;P&gt;APPEND ot_events.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;ot_events-name = slis_ev_list_modify.&lt;/P&gt;&lt;P&gt;ot_events-form = ''.&lt;/P&gt;&lt;P&gt;APPEND ot_events.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;ot_events-name = slis_ev_subtotal_text.&lt;/P&gt;&lt;P&gt;ot_events-form = ''.&lt;/P&gt;&lt;P&gt;APPEND ot_events.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;ENDFORM. " ALV_INIT_REPORT_EVENTS&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;*----&lt;/P&gt;&lt;HR originaltext="---------------------------------------------------------------" /&gt;&lt;P&gt;*&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;FORM USER_COMMAND *&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;*----&lt;/P&gt;&lt;HR originaltext="---------------------------------------------------------------" /&gt;&lt;P&gt;*&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;Subroutine attached as callback form to ABAP List Viewer *&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;·	--&amp;gt; UCOMM - user command code passed from ALV * &lt;/P&gt;&lt;P&gt;·	--&amp;gt; SELFIELD - information record describing current line/field * &lt;/P&gt;&lt;P&gt;*----&lt;/P&gt;&lt;HR originaltext="---------------------------------------------------------------" /&gt;&lt;P&gt;*&lt;/P&gt;&lt;P&gt;FORM user_command USING value(iv_ucomm) LIKE sy-ucomm&lt;/P&gt;&lt;P&gt;is_selfield TYPE slis_selfield.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;CASE iv_ucomm.&lt;/P&gt;&lt;P&gt;WHEN '&amp;amp;IC1'. "ALV record selection&lt;/P&gt;&lt;P&gt;PERFORM display_record USING is_selfield.&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;when ...&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;·	... &lt;/P&gt;&lt;P&gt;ENDCASE.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;ENDFORM. " USER_COMMAND&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;*----&lt;/P&gt;&lt;HR originaltext="---------------------------------------------------------------" /&gt;&lt;P&gt;*&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;FORM PF_STATUS_SET *&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;*----&lt;/P&gt;&lt;HR originaltext="---------------------------------------------------------------" /&gt;&lt;P&gt;*&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;Subroutine attached as callback form to ABAP List Viewer, *&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;·	allows setting alternative menu. If necessary: * &lt;/P&gt;&lt;P&gt;·	1. Copy 'STANDARD' menu from SAPLKKBL and modify as required, * &lt;/P&gt;&lt;P&gt;·	2. Activate callback * &lt;/P&gt;&lt;P&gt;*----&lt;/P&gt;&lt;HR originaltext="---------------------------------------------------------------" /&gt;&lt;P&gt;*&lt;/P&gt;&lt;P&gt;FORM pf_status_set USING it_exctab TYPE slis_t_extab.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;set pf-status 'STANDARD' excluding it_exctab.&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;ENDFORM. " PF_STATUS_SET&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;*----&lt;/P&gt;&lt;HR originaltext="---------------------------------------------------------------" /&gt;&lt;P&gt;*&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;FORM TOP_OF_LIST *&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;*----&lt;/P&gt;&lt;HR originaltext="---------------------------------------------------------------" /&gt;&lt;P&gt;*&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;Subroutine attached as callback form to ABAP List Viewer, *&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;·	executed once at the start of list output. * &lt;/P&gt;&lt;P&gt;*----&lt;/P&gt;&lt;HR originaltext="---------------------------------------------------------------" /&gt;&lt;P&gt;*&lt;/P&gt;&lt;P&gt;FORM top_of_list.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;DATA: lt_seltab TYPE STANDARD TABLE OF rsparams WITH HEADER LINE.&lt;/P&gt;&lt;P&gt;DATA: lv_report LIKE sy-repid.&lt;/P&gt;&lt;P&gt;lv_report = sy-repid. "do not pass sy-repid to function!&lt;/P&gt;&lt;P&gt;IF p_box_up = 'X'. "display select options at report start&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;CALL FUNCTION 'RS_REFRESH_FROM_SELECTOPTIONS'&lt;/P&gt;&lt;P&gt;EXPORTING&lt;/P&gt;&lt;P&gt;curr_report = lv_report&lt;/P&gt;&lt;P&gt;TABLES&lt;/P&gt;&lt;P&gt;selection_table = lt_seltab.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;remove 'technical' parameters with 'DELETE LT_SELTAB WHERE...'&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;·	before display, if necessary &lt;/P&gt;&lt;P&gt;CALL FUNCTION 'RS_LIST_SELECTION_TABLE'&lt;/P&gt;&lt;P&gt;EXPORTING&lt;/P&gt;&lt;P&gt;report = lv_report&lt;/P&gt;&lt;P&gt;seltext = 'X'&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;dyn_range =&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;newpage = ' '&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;screennr = 1000&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;TABLES&lt;/P&gt;&lt;P&gt;sel_tab = lt_seltab&lt;/P&gt;&lt;P&gt;EXCEPTIONS&lt;/P&gt;&lt;P&gt;sel_tab_empty = 1.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;ENDIF. "p_box_up = 'X'&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;ENDFORM. " TOP_OF_LIST&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;*----&lt;/P&gt;&lt;HR originaltext="---------------------------------------------------------------" /&gt;&lt;P&gt;*&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;FORM END_OF_LIST *&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;*----&lt;/P&gt;&lt;HR originaltext="---------------------------------------------------------------" /&gt;&lt;P&gt;*&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;Subroutine attached as callback form to ABAP List Viewer *&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;·	executed once at the end of list output. * &lt;/P&gt;&lt;P&gt;*----&lt;/P&gt;&lt;HR originaltext="---------------------------------------------------------------" /&gt;&lt;P&gt;*&lt;/P&gt;&lt;P&gt;FORM end_of_list.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;DATA: lt_seltab TYPE STANDARD TABLE OF rsparams WITH HEADER LINE.&lt;/P&gt;&lt;P&gt;DATA: lv_report LIKE sy-repid.&lt;/P&gt;&lt;P&gt;lv_report = sy-repid. "do not pass sy-repid to function!&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;IF p_box_do = 'X'. "display select options at report end&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;CALL FUNCTION 'RS_REFRESH_FROM_SELECTOPTIONS'&lt;/P&gt;&lt;P&gt;EXPORTING&lt;/P&gt;&lt;P&gt;curr_report = lv_report&lt;/P&gt;&lt;P&gt;TABLES&lt;/P&gt;&lt;P&gt;selection_table = lt_seltab.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;remove 'technical' parameters with 'DELETE LT_SELTAB WHERE...'&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;·	before display, if necessary &lt;/P&gt;&lt;P&gt;CALL FUNCTION 'RS_LIST_SELECTION_TABLE'&lt;/P&gt;&lt;P&gt;EXPORTING&lt;/P&gt;&lt;P&gt;report = lv_report&lt;/P&gt;&lt;P&gt;seltext = 'X'&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;dyn_range =&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;newpage = ' '&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;screennr = 1000&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;TABLES&lt;/P&gt;&lt;P&gt;sel_tab = lt_seltab&lt;/P&gt;&lt;P&gt;EXCEPTIONS&lt;/P&gt;&lt;P&gt;sel_tab_empty = 1.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;ENDIF. "p_box_do = 'X'&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;ENDFORM. " END_OF_LIST&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;*----&lt;/P&gt;&lt;HR originaltext="---------------------------------------------------------------" /&gt;&lt;P&gt;*&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;FORM TOP_OF_PAGE *&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;*----&lt;/P&gt;&lt;HR originaltext="---------------------------------------------------------------" /&gt;&lt;P&gt;*&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;Subroutine attached as callback form to ABAP List Viewer *&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;*----&lt;/P&gt;&lt;HR originaltext="---------------------------------------------------------------" /&gt;&lt;P&gt;*&lt;/P&gt;&lt;P&gt;FORM top_of_page.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;standard Ingram Micro report page heading&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;DATA: lv_coco_pos TYPE i, "CurPos of 'Company confidential'&lt;/P&gt;&lt;P&gt;lv_title_pos TYPE i, "CurPos of report title&lt;/P&gt;&lt;P&gt;lv_title(70) TYPE c, "Truncated report title&lt;/P&gt;&lt;P&gt;lv_page_pos TYPE i, "CurPos of page number&lt;/P&gt;&lt;P&gt;lv_date_pos TYPE i, "CurPos of date and time&lt;/P&gt;&lt;P&gt;lv_page_no(10) TYPE c,&lt;/P&gt;&lt;P&gt;lv_date(25) TYPE c,&lt;/P&gt;&lt;P&gt;lv_time(20) TYPE c,&lt;/P&gt;&lt;P&gt;lv_page(10) TYPE c.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;We may need to truncate title if the line size is &amp;lt; 81.&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;IF sy-linsz &amp;lt; 81.&lt;/P&gt;&lt;P&gt;lv_title = sy-title+0(50).&lt;/P&gt;&lt;P&gt;ELSE.&lt;/P&gt;&lt;P&gt;lv_title = sy-title.&lt;/P&gt;&lt;P&gt;ENDIF.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;Decide on positioning of text depending on width of page&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;lv_title_pos = ( sy-linsz / 2 ) - ( STRLEN( lv_title ) / 2 ).&lt;/P&gt;&lt;P&gt;lv_coco_pos = sy-linsz - 20.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;FORMAT COLOR COL_HEADING INTENSIFIED ON.&lt;/P&gt;&lt;P&gt;WRITE: / 'Ingram Micro',&lt;/P&gt;&lt;P&gt;AT lv_title_pos lv_title,&lt;/P&gt;&lt;P&gt;AT lv_coco_pos 'Company Confidential'.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;Setup data correctly in the correct format for the display fields.&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;lv_page = sy-pagno.&lt;/P&gt;&lt;P&gt;SHIFT lv_page LEFT DELETING LEADING ' '.&lt;/P&gt;&lt;P&gt;CONCATENATE sy-datum&lt;EM&gt;6(2) sy-datum&lt;/EM&gt;4(2) sy-datum+0(4)&lt;/P&gt;&lt;P&gt;INTO lv_date SEPARATED BY '.'.&lt;/P&gt;&lt;P&gt;CONCATENATE sy-uzeit&lt;EM&gt;0(2) ':' sy-uzeit&lt;/EM&gt;2(2) INTO lv_time.&lt;/P&gt;&lt;P&gt;CONCATENATE lv_date lv_time INTO lv_date SEPARATED BY ' '.&lt;/P&gt;&lt;P&gt;CONCATENATE 'Page' lv_page INTO lv_page_no SEPARATED BY ' '.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;Decide on positioning of text depending on width of page.&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;lv_page_pos = sy-linsz - ( STRLEN( lv_page_no ) ).&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;WRITE: / lv_date,&lt;/P&gt;&lt;P&gt;AT lv_page_pos lv_page_no.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;ULINE.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;ENDFORM. " TOP_OF_PAGE&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;*----&lt;/P&gt;&lt;HR originaltext="---------------------------------------------------------------" /&gt;&lt;P&gt;*&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;FORM END_OF_PAGE *&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;*----&lt;/P&gt;&lt;HR originaltext="---------------------------------------------------------------" /&gt;&lt;P&gt;*&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;Subroutine attached as callback form to ABAP List Viewer *&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;*----&lt;/P&gt;&lt;HR originaltext="---------------------------------------------------------------" /&gt;&lt;P&gt;*&lt;/P&gt;&lt;P&gt;FORM end_of_page.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;ENDFORM. " END_OF_PAGE&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;*----&lt;/P&gt;&lt;P&gt;-&lt;/P&gt;&lt;HR originaltext="----------------------------------------------------------------" /&gt;&lt;P&gt;&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;Form ALV_VARIANT_EXISTENCE&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;*----&lt;/P&gt;&lt;P&gt;-&lt;/P&gt;&lt;HR originaltext="----------------------------------------------------------------" /&gt;&lt;P&gt;&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;Reads ALV variant definition&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;*----&lt;/P&gt;&lt;P&gt;-&lt;/P&gt;&lt;HR originaltext="----------------------------------------------------------------" /&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;FORM alv_variant_existence USING iv_variant LIKE disvariant-variant&lt;/P&gt;&lt;P&gt;CHANGING os_variant LIKE disvariant.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;CHECK NOT iv_variant IS INITIAL.&lt;/P&gt;&lt;P&gt;os_variant-report = sy-repid.&lt;/P&gt;&lt;P&gt;os_variant-variant = iv_variant.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;IF iv_variant CP '/*'. "user-specific variants begin with slash&lt;/P&gt;&lt;P&gt;os_variant-username = sy-uname.&lt;/P&gt;&lt;P&gt;ENDIF.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;CALL FUNCTION 'REUSE_ALV_VARIANT_EXISTENCE'&lt;/P&gt;&lt;P&gt;EXPORTING&lt;/P&gt;&lt;P&gt;i_save = 'A'&lt;/P&gt;&lt;P&gt;CHANGING&lt;/P&gt;&lt;P&gt;cs_variant = os_variant&lt;/P&gt;&lt;P&gt;EXCEPTIONS&lt;/P&gt;&lt;P&gt;wrong_input = 1&lt;/P&gt;&lt;P&gt;not_found = 2&lt;/P&gt;&lt;P&gt;program_error = 3&lt;/P&gt;&lt;P&gt;OTHERS = 4.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;IF sy-subrc 0.&lt;/P&gt;&lt;P&gt;MESSAGE e001(z9) WITH 'Please select a valid display variant.'.&lt;/P&gt;&lt;P&gt;ENDIF.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;ENDFORM. " ALV_VARIANT_EXISTENCE&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;*----&lt;/P&gt;&lt;HR originaltext="---------------------------------------------------------------" /&gt;&lt;P&gt;*&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;FORM ALV_VARIANT_F4 *&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;*----&lt;/P&gt;&lt;HR originaltext="---------------------------------------------------------------" /&gt;&lt;P&gt;*&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;Display list of layout variants on report selection screen *&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;*----&lt;/P&gt;&lt;HR originaltext="---------------------------------------------------------------" /&gt;&lt;P&gt;*&lt;/P&gt;&lt;P&gt;FORM alv_variant_f4 CHANGING cv_varname LIKE disvariant-variant&lt;/P&gt;&lt;P&gt;cs_variant LIKE disvariant.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;DATA: lv_exit(1) TYPE c.&lt;/P&gt;&lt;P&gt;cs_variant-report = sy-repid.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;CALL FUNCTION 'REUSE_ALV_VARIANT_F4'&lt;/P&gt;&lt;P&gt;EXPORTING&lt;/P&gt;&lt;P&gt;is_variant = cs_variant&lt;/P&gt;&lt;P&gt;i_save = 'A'&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;it_default_fieldcat =&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;IMPORTING&lt;/P&gt;&lt;P&gt;e_exit = lv_exit&lt;/P&gt;&lt;P&gt;es_variant = cs_variant&lt;/P&gt;&lt;P&gt;EXCEPTIONS&lt;/P&gt;&lt;P&gt;not_found = 2.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;IF sy-subrc = 2.&lt;/P&gt;&lt;P&gt;MESSAGE ID sy-msgid TYPE 'S' NUMBER sy-msgno&lt;/P&gt;&lt;P&gt;WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.&lt;/P&gt;&lt;P&gt;ELSE.&lt;/P&gt;&lt;P&gt;IF lv_exit = space.&lt;/P&gt;&lt;P&gt;cv_varname = cs_variant-variant.&lt;/P&gt;&lt;P&gt;ENDIF.&lt;/P&gt;&lt;P&gt;ENDIF. &lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;or check this coding too&lt;/P&gt;&lt;P&gt;·	Global ALV Data Declarations &lt;/P&gt;&lt;P&gt;type-pools: slis.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;Internal Tables&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;data: begin of itab occurs 0,&lt;/P&gt;&lt;P&gt;matnr type mara-matnr,&lt;/P&gt;&lt;P&gt;maktx type makt-maktx,&lt;/P&gt;&lt;P&gt;end of itab.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;start-of-selection.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;perform get_data.&lt;/P&gt;&lt;P&gt;perform call_alv.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;*********************************************************************&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;Form GET_DATA&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;*********************************************************************&lt;/P&gt;&lt;P&gt;form get_data.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;select mara&lt;SUB&gt;matnr makt&lt;/SUB&gt;maktx&lt;/P&gt;&lt;P&gt;into corresponding fields of table itab&lt;/P&gt;&lt;P&gt;from mara&lt;/P&gt;&lt;P&gt;inner join makt&lt;/P&gt;&lt;P&gt;on mara&lt;SUB&gt;matnr = makt&lt;/SUB&gt;matnr&lt;/P&gt;&lt;P&gt;up to 20 rows.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;endform.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;************************************************************************&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;CALL_ALV&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;************************************************************************&lt;/P&gt;&lt;P&gt;form call_alv.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;data: ifc type slis_t_fieldcat_alv.&lt;/P&gt;&lt;P&gt;data: xfc type slis_fieldcat_alv.&lt;/P&gt;&lt;P&gt;data: repid type sy-repid.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;repid = sy-repid.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;clear xfc. refresh ifc.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;clear xfc.&lt;/P&gt;&lt;P&gt;xfc-reptext_ddic = 'Material Number'.&lt;/P&gt;&lt;P&gt;xfc-fieldname = 'MATNR'.&lt;/P&gt;&lt;P&gt;xfc-tabname = 'ITAB'.&lt;/P&gt;&lt;P&gt;xfc-outputlen = '18'.&lt;/P&gt;&lt;P&gt;append xfc to ifc.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;clear xfc.&lt;/P&gt;&lt;P&gt;xfc-reptext_ddic = 'Material Description'.&lt;/P&gt;&lt;P&gt;xfc-fieldname = 'MAKTX'.&lt;/P&gt;&lt;P&gt;xfc-tabname = 'ITAB'.&lt;/P&gt;&lt;P&gt;xfc-outputlen = '40'.&lt;/P&gt;&lt;P&gt;append xfc to ifc.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;Call ABAP List Viewer (ALV)&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;call function 'REUSE_ALV_GRID_DISPLAY'&lt;/P&gt;&lt;P&gt;exporting&lt;/P&gt;&lt;P&gt;i_callback_program = repid&lt;/P&gt;&lt;P&gt;i_callback_user_command = 'HANDLE_USER_COMMAND'&lt;/P&gt;&lt;P&gt;it_fieldcat = ifc&lt;/P&gt;&lt;P&gt;tables&lt;/P&gt;&lt;P&gt;t_outtab = itab.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;endform.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;***********************************************************************&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;FORM handle_User_Command *&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;***********************************************************************&lt;/P&gt;&lt;P&gt;form handle_user_command using r_ucomm like sy-ucomm&lt;/P&gt;&lt;P&gt;rs_selfield type slis_selfield.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;case r_ucomm.&lt;/P&gt;&lt;P&gt;when '&amp;amp;IC1'.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;case rs_selfield-FIELDNAME.&lt;/P&gt;&lt;P&gt;when 'MATNR'.&lt;/P&gt;&lt;P&gt;set parameter id 'MAT' field rs_selfield-value.&lt;/P&gt;&lt;P&gt;call transaction 'MD04' and skip first screen.&lt;/P&gt;&lt;P&gt;endcase.&lt;/P&gt;&lt;P&gt;endcase.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;endform.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;plz reward if useful&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;keep rockin&lt;/P&gt;&lt;P&gt;vivek&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Mon, 28 Jan 2008 15:01:49 GMT</pubDate>
      <guid>https://community.sap.com/t5/application-development-and-automation-discussions/regarding-code-for-alv-variant/m-p/3310993#M793023</guid>
      <dc:creator>Former Member</dc:creator>
      <dc:date>2008-01-28T15:01:49Z</dc:date>
    </item>
    <item>
      <title>Re: Regarding CODE for ALV Variant!</title>
      <link>https://community.sap.com/t5/application-development-and-automation-discussions/regarding-code-for-alv-variant/m-p/3310994#M793024</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;hi sandeep,&lt;/P&gt;&lt;P&gt;refer to this simple code to understand the all the basic FM used in calling and using ALV LAYOUT VARIANTS&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;-&lt;/P&gt;&lt;HR originaltext="---------------------------------------------------------------------" /&gt;&lt;P&gt;&amp;#149;	Work Areas * &lt;/P&gt;&lt;P&gt;-&lt;/P&gt;&lt;HR originaltext="---------------------------------------------------------------------" /&gt;&lt;P&gt;DATA : wa_variant TYPE disvariant, "Work area for variant&lt;/P&gt;&lt;P&gt;wa_variant1 TYPE disvariant, "Work area for variant&lt;/P&gt;&lt;P&gt;wa_layout TYPE slis_layout_alv, "Work area for layout&lt;/P&gt;&lt;P&gt;wa_print TYPE slis_print_alv, "Work area for print&lt;/P&gt;&lt;P&gt;wa_mara TYPE t_mara, "Work area for mara&lt;/P&gt;&lt;P&gt;wa_makt TYPE t_makt, "Work area for makt&lt;/P&gt;&lt;P&gt;wa_lqua TYPE t_lqua, "Work area for lqua&lt;/P&gt;&lt;P&gt;wa_mchb TYPE t_mchb, "Work area for mchb&lt;/P&gt;&lt;P&gt;wa_mard TYPE t_mard, "Work area for mard&lt;/P&gt;&lt;P&gt;wa_marc TYPE t_marc, "Work area for marc&lt;/P&gt;&lt;P&gt;wa_t320 TYPE t_t320, "Work area for t320&lt;/P&gt;&lt;P&gt;wa_batch TYPE t_batch, "Work area for batch&lt;/P&gt;&lt;P&gt;wa_pkhd TYPE t_pkhd, "Work area for pkhd&lt;/P&gt;&lt;P&gt;wa_whouse TYPE t_whouse, "Work area for whouse&lt;/P&gt;&lt;P&gt;wa_final LIKE i_final, "Work area for final&lt;/P&gt;&lt;P&gt;wa_mbew TYPE t_mbew, "Work area for mbew&lt;/P&gt;&lt;P&gt;wa_lgort TYPE t_lgort, "WOrk area for lgort&lt;/P&gt;&lt;P&gt;wa_fieldcat TYPE slis_fieldcat_alv."Work area for fieldcatalog&lt;/P&gt;&lt;P&gt;&amp;amp;----&lt;/P&gt;&lt;HR originaltext="----------------------------------------------------------------" /&gt;&lt;P&gt;*&amp;amp; Form sub_get_default_variant *&lt;/P&gt;&lt;P&gt;&amp;amp;----&lt;/P&gt;&lt;HR originaltext="----------------------------------------------------------------" /&gt;&lt;P&gt;&amp;#149;	This form will initialize the variant * &lt;/P&gt;&lt;P&gt;-&lt;/P&gt;&lt;HR originaltext="---------------------------------------------------------------------" /&gt;&lt;P&gt;FORM sub_get_default_variant .&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;*--Clear&lt;/P&gt;&lt;P&gt;CLEAR wa_variant.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;*--Pass the report name&lt;/P&gt;&lt;P&gt;v_repid = sy-repid. "Report ID&lt;/P&gt;&lt;P&gt;wa_variant-report = v_repid.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;*--Call the function module to get the default variant&lt;/P&gt;&lt;P&gt;CALL FUNCTION 'REUSE_ALV_VARIANT_DEFAULT_GET'&lt;/P&gt;&lt;P&gt;EXPORTING&lt;/P&gt;&lt;P&gt;i_save = c_save&lt;/P&gt;&lt;P&gt;CHANGING&lt;/P&gt;&lt;P&gt;cs_variant = wa_variant1&lt;/P&gt;&lt;P&gt;EXCEPTIONS&lt;/P&gt;&lt;P&gt;wrong_input = 1&lt;/P&gt;&lt;P&gt;not_found = 2&lt;/P&gt;&lt;P&gt;program_error = 3&lt;/P&gt;&lt;P&gt;OTHERS = 4.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;*--Check Subrc&lt;/P&gt;&lt;P&gt;IF sy-subrc = 0.&lt;/P&gt;&lt;P&gt;p_varnt = wa_variant-variant.&lt;/P&gt;&lt;P&gt;ENDIF.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;ENDFORM. "sub_get_default_variant&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;amp;----&lt;/P&gt;&lt;HR originaltext="----------------------------------------------------------------" /&gt;&lt;P&gt;*&amp;amp; Form sub_create_events *&lt;/P&gt;&lt;P&gt;&amp;amp;----&lt;/P&gt;&lt;HR originaltext="----------------------------------------------------------------" /&gt;&lt;P&gt;&amp;#149;	This form will display the ALV Events * &lt;/P&gt;&lt;P&gt;-&lt;/P&gt;&lt;HR originaltext="---------------------------------------------------------------------" /&gt;&lt;P&gt;FORM sub_create_events .&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;*--Local Work Area&lt;/P&gt;&lt;P&gt;DATA: lwa_event TYPE slis_alv_event. "Work area for Events&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;*--Call Function to display the events for the ALV&lt;/P&gt;&lt;P&gt;CALL FUNCTION 'REUSE_ALV_EVENTS_GET'&lt;/P&gt;&lt;P&gt;EXPORTING&lt;/P&gt;&lt;P&gt;i_list_type = 1&lt;/P&gt;&lt;P&gt;IMPORTING&lt;/P&gt;&lt;P&gt;et_events = i_events.&lt;/P&gt;&lt;P&gt;*--Sort by Name&lt;/P&gt;&lt;P&gt;SORT i_events BY name.&lt;/P&gt;&lt;P&gt;*--Clear&lt;/P&gt;&lt;P&gt;CLEAR lwa_event.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;READ TABLE i_events INTO lwa_event WITH KEY name = slis_ev_top_of_page&lt;/P&gt;&lt;P&gt;BINARY SEARCH.&lt;/P&gt;&lt;P&gt;IF sy-subrc = 0.&lt;/P&gt;&lt;P&gt;MOVE c_top_of_page TO lwa_event-form.&lt;/P&gt;&lt;P&gt;MODIFY i_events FROM lwa_event TRANSPORTING form WHERE&lt;/P&gt;&lt;P&gt;name = slis_ev_top_of_page.&lt;/P&gt;&lt;P&gt;ENDIF.&lt;/P&gt;&lt;P&gt;CLEAR : lwa_event.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;ENDFORM. "sub_create_events&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;amp;----&lt;/P&gt;&lt;HR originaltext="----------------------------------------------------------------" /&gt;&lt;P&gt;*&amp;amp; Form sub_f4_for_variant *&lt;/P&gt;&lt;P&gt;&amp;amp;----&lt;/P&gt;&lt;HR originaltext="----------------------------------------------------------------" /&gt;&lt;P&gt;&amp;#149;	This form will display the List of Variants * &lt;/P&gt;&lt;P&gt;-&lt;/P&gt;&lt;HR originaltext="---------------------------------------------------------------------" /&gt;&lt;P&gt;FORM sub_f4_for_variant .&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;*--Local Variables&lt;/P&gt;&lt;P&gt;DATA: lv_exit(1) TYPE c. "ALV exit&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;*--Call the function module to display the list of Variants&lt;/P&gt;&lt;P&gt;CALL FUNCTION 'REUSE_ALV_VARIANT_F4'&lt;/P&gt;&lt;P&gt;EXPORTING&lt;/P&gt;&lt;P&gt;is_variant = wa_variant&lt;/P&gt;&lt;P&gt;i_save = c_save&lt;/P&gt;&lt;P&gt;IMPORTING&lt;/P&gt;&lt;P&gt;e_exit = lv_exit&lt;/P&gt;&lt;P&gt;es_variant = wa_variant1&lt;/P&gt;&lt;P&gt;EXCEPTIONS&lt;/P&gt;&lt;P&gt;not_found = 1&lt;/P&gt;&lt;P&gt;program_error = 2.&lt;/P&gt;&lt;P&gt;*--Check Subrc&lt;/P&gt;&lt;P&gt;IF sy-subrc 2 AND lv_exit IS INITIAL.&lt;/P&gt;&lt;P&gt;p_varnt = wa_variant1-variant.&lt;/P&gt;&lt;P&gt;ENDIF.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;ENDFORM. "sub_f4_for_variant&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;amp;----&lt;/P&gt;&lt;HR originaltext="----------------------------------------------------------------" /&gt;&lt;P&gt;*&amp;amp; Form sub_check_variant *&lt;/P&gt;&lt;P&gt;&amp;amp;----&lt;/P&gt;&lt;HR originaltext="----------------------------------------------------------------" /&gt;&lt;P&gt;&amp;#149;	This form will check the variant * &lt;/P&gt;&lt;P&gt;-&lt;/P&gt;&lt;HR originaltext="---------------------------------------------------------------------" /&gt;&lt;P&gt;FORM sub_check_variant .&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;IF NOT p_varnt IS INITIAL.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;CLEAR wa_variant1.&lt;/P&gt;&lt;P&gt;MOVE wa_variant TO wa_variant1.&lt;/P&gt;&lt;P&gt;MOVE p_varnt TO wa_variant1-variant.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;*--Call the function module to check the variant exist&lt;/P&gt;&lt;P&gt;CALL FUNCTION 'REUSE_ALV_VARIANT_EXISTENCE'&lt;/P&gt;&lt;P&gt;EXPORTING&lt;/P&gt;&lt;P&gt;i_save = c_save&lt;/P&gt;&lt;P&gt;CHANGING&lt;/P&gt;&lt;P&gt;cs_variant = wa_variant1.&lt;/P&gt;&lt;P&gt;wa_variant = wa_variant1.&lt;/P&gt;&lt;P&gt;ENDIF.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;ENDFORM. "sub_check_variant&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Rewards points if useful,&lt;/P&gt;&lt;P&gt;Rohan malik&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Tue, 29 Jan 2008 06:14:01 GMT</pubDate>
      <guid>https://community.sap.com/t5/application-development-and-automation-discussions/regarding-code-for-alv-variant/m-p/3310994#M793024</guid>
      <dc:creator>Former Member</dc:creator>
      <dc:date>2008-01-29T06:14:01Z</dc:date>
    </item>
  </channel>
</rss>

