<?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: Drill down ALV in Application Development and Automation Discussions</title>
    <link>https://community.sap.com/t5/application-development-and-automation-discussions/drill-down-alv/m-p/3179544#M756886</link>
    <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;&lt;STRONG&gt;REUSE_ALV_HIERSEQ_LIST_DISPLAY&lt;/STRONG&gt;*&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Hierarchical sequential list output&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Functionality :&lt;/P&gt;&lt;P&gt;This module outputs two internal tables as a formated hierarchical-sequential list.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Principle:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Pass an internal table containing the set of header information to be output.&lt;/P&gt;&lt;P&gt;Pass an internal table containing the set of item information to be output.&lt;/P&gt;&lt;P&gt;Pass a structure containing the general list layout details&lt;/P&gt;&lt;P&gt;Pass a field catalog in the form of an internal table. The field catalog describes the fields to be output in the list.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Check this thread.&lt;/P&gt;&lt;P&gt;&lt;A class="jive_macro jive_macro_thread" href="https://community.sap.com/" __jive_macro_name="thread" modifiedtitle="true" __default_attr="409762"&gt;&lt;/A&gt;&lt;/P&gt;&lt;P&gt;&lt;A class="jive_macro jive_macro_thread" href="https://community.sap.com/" __jive_macro_name="thread" modifiedtitle="true" __default_attr="414360"&gt;&lt;/A&gt;&lt;/P&gt;&lt;P&gt;&lt;A class="jive_macro jive_macro_message" href="https://community.sap.com/" __jive_macro_name="message" modifiedtitle="true" __default_attr="3728155"&gt;&lt;/A&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Regards,&lt;/P&gt;&lt;P&gt;Maha&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
    <pubDate>Tue, 18 Dec 2007 08:05:16 GMT</pubDate>
    <dc:creator>Former Member</dc:creator>
    <dc:date>2007-12-18T08:05:16Z</dc:date>
    <item>
      <title>Drill down ALV</title>
      <link>https://community.sap.com/t5/application-development-and-automation-discussions/drill-down-alv/m-p/3179543#M756885</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Hi ,&lt;/P&gt;&lt;P&gt;Could someone tell me what are the FM's to be used for drill down ALV's.&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Tue, 18 Dec 2007 08:01:45 GMT</pubDate>
      <guid>https://community.sap.com/t5/application-development-and-automation-discussions/drill-down-alv/m-p/3179543#M756885</guid>
      <dc:creator>Former Member</dc:creator>
      <dc:date>2007-12-18T08:01:45Z</dc:date>
    </item>
    <item>
      <title>Re: Drill down ALV</title>
      <link>https://community.sap.com/t5/application-development-and-automation-discussions/drill-down-alv/m-p/3179544#M756886</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;&lt;STRONG&gt;REUSE_ALV_HIERSEQ_LIST_DISPLAY&lt;/STRONG&gt;*&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Hierarchical sequential list output&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Functionality :&lt;/P&gt;&lt;P&gt;This module outputs two internal tables as a formated hierarchical-sequential list.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Principle:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Pass an internal table containing the set of header information to be output.&lt;/P&gt;&lt;P&gt;Pass an internal table containing the set of item information to be output.&lt;/P&gt;&lt;P&gt;Pass a structure containing the general list layout details&lt;/P&gt;&lt;P&gt;Pass a field catalog in the form of an internal table. The field catalog describes the fields to be output in the list.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Check this thread.&lt;/P&gt;&lt;P&gt;&lt;A class="jive_macro jive_macro_thread" href="https://community.sap.com/" __jive_macro_name="thread" modifiedtitle="true" __default_attr="409762"&gt;&lt;/A&gt;&lt;/P&gt;&lt;P&gt;&lt;A class="jive_macro jive_macro_thread" href="https://community.sap.com/" __jive_macro_name="thread" modifiedtitle="true" __default_attr="414360"&gt;&lt;/A&gt;&lt;/P&gt;&lt;P&gt;&lt;A class="jive_macro jive_macro_message" href="https://community.sap.com/" __jive_macro_name="message" modifiedtitle="true" __default_attr="3728155"&gt;&lt;/A&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Regards,&lt;/P&gt;&lt;P&gt;Maha&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Tue, 18 Dec 2007 08:05:16 GMT</pubDate>
      <guid>https://community.sap.com/t5/application-development-and-automation-discussions/drill-down-alv/m-p/3179544#M756886</guid>
      <dc:creator>Former Member</dc:creator>
      <dc:date>2007-12-18T08:05:16Z</dc:date>
    </item>
    <item>
      <title>Re: Drill down ALV</title>
      <link>https://community.sap.com/t5/application-development-and-automation-discussions/drill-down-alv/m-p/3179545#M756887</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Hi&lt;/P&gt;&lt;P&gt;&lt;/P&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; &lt;/P&gt;&lt;P&gt; &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; &lt;/P&gt;&lt;P&gt; &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;P&gt;\* SELECTION-SCREEN *&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;\*----&lt;/P&gt;&lt;HR originaltext="-----------------------------------------------------------------" /&gt;&lt;P&gt;*&lt;/P&gt;&lt;P&gt;\* BLOCK b0 *&lt;/P&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. "&amp;lt;field not defined?&amp;gt;&lt;/P&gt;&lt;P&gt;PARAMETERS: p_matnr LIKE mara-matnr. "&amp;lt;field not defined?&amp;gt;&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;P&gt;\* BLOCK bvar *&lt;/P&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;P&gt;\* BLOCK bbox *&lt;/P&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;P&gt;\* AT SELECTION-SCREEN ON P_VARI *&lt;/P&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;P&gt;\* AT SELECTION-SCREEN ON VALUE REQUEST FOR P_VARI *&lt;/P&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;P&gt;\* INITIALIZATION *&lt;/P&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;P&gt;\* START-OF-SELECTION *&lt;/P&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;P&gt;\* END-OF-SELECTION *&lt;/P&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;P&gt;\* F O R M S *&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; &lt;/P&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;HR originaltext="----------------------------------------------------------------" /&gt;&lt;P&gt;*&lt;/P&gt;&lt;P&gt;\* Perform authority checks for the report *&lt;/P&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;P&gt;\* \!!! Note: authorisation checks are application-dependent.&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;\!!! Some common cases are listed below - please select one of them&lt;/P&gt;&lt;/LI&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;\!!! or add new authorisation checks.&lt;/P&gt;&lt;/LI&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;\!!! If the report is creating batch input session or using LDB&lt;/P&gt;&lt;/LI&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;\!!! it may be sufficient to use automatic SAP auth.checks.&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;\* Authorisation for displaying documents in a single company code&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;\---------------------------------------------------------------&lt;/P&gt;&lt;/LI&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;authority-check object 'F_BKPF_BUK'&lt;/P&gt;&lt;/LI&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;id 'BUKRS' field p_bukrs&lt;/P&gt;&lt;/LI&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;id 'ACTVT' field '03'.&lt;/P&gt;&lt;/LI&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;if sy-subrc  0.&lt;/P&gt;&lt;/LI&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;message e001(z9) with 'No authorisation to display documents'&lt;/P&gt;&lt;/LI&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;'in company code' p_bukrs.&lt;/P&gt;&lt;/LI&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;endif.&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;\* Displaying documents from a list of company codes (select-options)&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;\------------------------------------------------------------------&lt;/P&gt;&lt;/LI&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;call function 'Y_BUKRS_AUTHORITY_CHECK'&lt;/P&gt;&lt;/LI&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;EXPORTING&lt;/P&gt;&lt;/LI&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;ACTVT = '03'&lt;/P&gt;&lt;/LI&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;NOMESSAGE = ' '&lt;/P&gt;&lt;/LI&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;tables&lt;/P&gt;&lt;/LI&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;s_bukrs = s_bukrs.&lt;/P&gt;&lt;/LI&gt;&lt;/UL&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;P&gt;\* FORM GET_CONTROL_DATA *&lt;/P&gt;&lt;P&gt;\*----&lt;/P&gt;&lt;HR originaltext="----------------------------------------------------------------" /&gt;&lt;P&gt;*&lt;/P&gt;&lt;P&gt;\* Read configuration etc. *&lt;/P&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;P&gt;\* FORM GET_TRANSACTION_DATA *&lt;/P&gt;&lt;P&gt;\*----&lt;/P&gt;&lt;HR originaltext="----------------------------------------------------------------" /&gt;&lt;P&gt;*&lt;/P&gt;&lt;P&gt;\* Read documents etc. *&lt;/P&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;P&gt;\* \!!! Data selection statement below has been generated automatically.&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;\!!! Please check if it is correct and complete.&lt;/P&gt;&lt;/LI&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;\!!! Use table joins or 'SELECT FOR ALL ENTRIES' when selecting data&lt;/P&gt;&lt;/LI&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;\!!! from related tables.&lt;/P&gt;&lt;/LI&gt;&lt;/UL&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;P&gt;\* FORM PROCESS_TRANSACTION_DATA *&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;\*----&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;P&gt;\* FORM OUTPUT_DATA *&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;\*----&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;P&gt;\* FORM DISPLAY_RECORD *&lt;/P&gt;&lt;P&gt;\*----&lt;/P&gt;&lt;HR originaltext="----------------------------------------------------------------" /&gt;&lt;P&gt;*&lt;/P&gt;&lt;P&gt;\* Display object associated with the current ALV line *&lt;/P&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;P&gt;\* \!!! SAMPLE IMPLEMENTATION FOR DISPLAYING FI DOCUMENTS:&lt;/P&gt;&lt;P&gt;SET PARAMETER ID 'BUK' FIELD gt_alv1_data-vbeln.&lt;/P&gt;&lt;P&gt;\* set parameter id 'BLN' field gt_alv1_data-belnr.&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;set parameter id 'GJR' field gt_alv1_data-gjahr.&lt;/P&gt;&lt;/LI&gt;&lt;/UL&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;P&gt;\* FORM ALV_LIST_DISPLAY *&lt;/P&gt;&lt;P&gt;\*----&lt;/P&gt;&lt;HR originaltext="----------------------------------------------------------------" /&gt;&lt;P&gt;*&lt;/P&gt;&lt;P&gt;\* Invoke main ALV function to format and show the report *&lt;/P&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;P&gt;\* IT_SPECIAL_GROUPS =&lt;/P&gt;&lt;P&gt;it_sort = lt_sorttab&lt;/P&gt;&lt;P&gt;\* IT_FILTER =&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;IS_SEL_HIDE =&lt;/P&gt;&lt;/LI&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;I_SCREEN_START_COLUMN = 0&lt;/P&gt;&lt;/LI&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;I_SCREEN_START_LINE = 0&lt;/P&gt;&lt;/LI&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;I_SCREEN_END_COLUMN = 0&lt;/P&gt;&lt;/LI&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;I_SCREEN_END_LINE = 0&lt;/P&gt;&lt;/LI&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;I_DEFAULT = 'X'&lt;/P&gt;&lt;/LI&gt;&lt;/UL&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;P&gt;\* IT_EVENT_EXIT =&lt;/P&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;P&gt;\* I_STRUCTURE_NAME_HEADER =&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;I_STRUCTURE_NAME_ITEM =&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;is_keyinfo = ls_keyinfo&lt;/P&gt;&lt;P&gt;is_print = ls_print&lt;/P&gt;&lt;P&gt;\* IS_REPREP_ID =&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;IMPORTING&lt;/P&gt;&lt;/LI&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;E_EXIT_CAUSED_BY_CALLER =&lt;/P&gt;&lt;/LI&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;ES_EXIT_CAUSED_BY_USER =&lt;/P&gt;&lt;/LI&gt;&lt;/UL&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;P&gt;\* EXCEPTIONS&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;PROGRAM_ERROR = 1&lt;/P&gt;&lt;/LI&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;OTHERS = 2&lt;/P&gt;&lt;/LI&gt;&lt;/UL&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;P&gt;\* FORM ALV_INIT_REPORT_LAYOUT *&lt;/P&gt;&lt;P&gt;\*----&lt;/P&gt;&lt;HR originaltext="----------------------------------------------------------------" /&gt;&lt;P&gt;*&lt;/P&gt;&lt;P&gt;\* Set up report layout definition for ALV_LIST_DISPLAY *&lt;/P&gt;&lt;P&gt;\*----&lt;/P&gt;&lt;HR originaltext="----------------------------------------------------------------" /&gt;&lt;P&gt;*&lt;/P&gt;&lt;P&gt;\* &amp;lt;-- OT_FIELDCAT list of fields *&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;&amp;lt;-- OT_EXCTAB excluded menu options *&lt;/P&gt;&lt;/LI&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;&amp;lt;-- OT_SORTTAB sorting/grouping definition *&lt;/P&gt;&lt;/LI&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;&amp;lt;-- OS_LAYOUT global report layout settings *&lt;/P&gt;&lt;/LI&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;&amp;lt;-- OS_PRINT global report printout settings *&lt;/P&gt;&lt;/LI&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;&amp;lt;-- OS_KEYINFO itab key fields (required only for hier.lists) *&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_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;P&gt;\* add menu items to be excluded to ot_exctab.&lt;/P&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;P&gt;\* \!!!&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;\!!! List all ALV data fields for display here:&lt;/P&gt;&lt;/LI&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;\!!!&lt;/P&gt;&lt;/LI&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;DD-struct = data dictionary structure name&lt;/P&gt;&lt;/LI&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;DD-field = field of data dictionary structure&lt;/P&gt;&lt;/LI&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;itab = internal table for output data&lt;/P&gt;&lt;/LI&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;itab-field = internal table field name&lt;/P&gt;&lt;/LI&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;key = set to 'X' if key field&lt;/P&gt;&lt;/LI&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;sum = set to 'X' for totals&lt;/P&gt;&lt;/LI&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;hid = set to 'X' if field is initially hidden&lt;/P&gt;&lt;/LI&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;row = list row number (multi-line list if &amp;gt;1)&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;*&lt;/P&gt;&lt;P&gt;\* DD-struct DD-field itab itab-field key sum hid row&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;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;P&gt;\* \!!!&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;\!!! List all ALV data fields for sorting/grouping here&lt;/P&gt;&lt;/LI&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;\!!!&lt;/P&gt;&lt;/LI&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;itab = internal table for output data&lt;/P&gt;&lt;/LI&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;itab-field = internal table field name&lt;/P&gt;&lt;/LI&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;up = sort ascending&lt;/P&gt;&lt;/LI&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;down = sort descending&lt;/P&gt;&lt;/LI&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;grp = group by&lt;/P&gt;&lt;/LI&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;comp = group initially compressed&lt;/P&gt;&lt;/LI&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;pos = field position in sort sequence&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;*&lt;/P&gt;&lt;P&gt;\* itab field up down grp comp pos&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;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;P&gt;\* \!!! key definition - required only for hierarchical display (2 itabs)&lt;/P&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;P&gt;\* \!!! See the declaration of type SLIS_LAYOUT_ALV and set the fields&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;\!!! of OS_LAYOUT record to change list-level attributes&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;\* os_layout-no_colhead = 'X'. " no headings&lt;/P&gt;&lt;P&gt;cs_layout-zebra = 'X'. " stripped pattern&lt;/P&gt;&lt;P&gt;\* os_layout-no_vline = 'X'. " columns separated by space&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;os_layout-totals_only = 'X'. " show only totals&lt;/P&gt;&lt;/LI&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;os_layout-totals_text = 'Total'. " totals line label&lt;/P&gt;&lt;/LI&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;os_layout-subtotals_text = 'Subtotal'. " subtotals line label&lt;/P&gt;&lt;/LI&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;os_layout-subtotals_text = 'Subtotal'. " subtotals line label&lt;/P&gt;&lt;/LI&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;os_layout-key_hotspot = 'X'. " keys as hotspot&lt;/P&gt;&lt;/LI&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;os_layout-expand_all = 'X'. " Expand all positions&lt;/P&gt;&lt;/LI&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;os_layout...&lt;/P&gt;&lt;/LI&gt;&lt;/UL&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;P&gt;\* os_print-...&lt;/P&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;P&gt;\* FORM ALV_BUILD_FIELDCAT *&lt;/P&gt;&lt;P&gt;\*----&lt;/P&gt;&lt;HR originaltext="----------------------------------------------------------------" /&gt;&lt;P&gt;*&lt;/P&gt;&lt;P&gt;\* Format a single line for ALV_INIT_REPORT_LAYOUT *&lt;/P&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;P&gt;\* status variables for auto-numbering of field column position&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;(column number reset when a new table or row begins)&lt;/P&gt;&lt;/LI&gt;&lt;/UL&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;P&gt;\* \!!!&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;\!!! List all the special formatting requirements in cases below&lt;/P&gt;&lt;/LI&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;\!!!&lt;/P&gt;&lt;/LI&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;case lv_fieldname.&lt;/P&gt;&lt;/LI&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;when 'WRBTR'. "&amp;lt;-- link with currency required&lt;/P&gt;&lt;/LI&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;ls_fieldcat-cfieldname = 'WAERS'.&lt;/P&gt;&lt;/LI&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;ls_fieldcat-ctabname = iv_tabname.&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;*&lt;/P&gt;&lt;P&gt;\* when 'HKONT'. "&amp;lt;-- change default column header&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;ls_fieldcat-seltext_s = 'GL Acc.'.&lt;/P&gt;&lt;/LI&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;ls_fieldcat-ddictxt = 'S'. " (S)hort (M)iddle (L)ong&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;*&lt;/P&gt;&lt;P&gt;\* when 'SOME_NUMBER' "&amp;lt;-- change number formatting&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;ls_fieldcat-nosign = 'X'.&lt;/P&gt;&lt;/LI&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;ls_fieldcat-nozero = 'X'.&lt;/P&gt;&lt;/LI&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;ls_fieldcat-just = 'L'. " (L)eft (R)ight (C)enter&lt;/P&gt;&lt;/LI&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;endcase.&lt;/P&gt;&lt;/LI&gt;&lt;/UL&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;P&gt;\* FORM ALV_BUILD_SORTTAB *&lt;/P&gt;&lt;P&gt;\*----&lt;/P&gt;&lt;HR originaltext="----------------------------------------------------------------" /&gt;&lt;P&gt;*&lt;/P&gt;&lt;P&gt;\* Set up sorting information for ALV_INIT_REPORT_LAYOUT *&lt;/P&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;P&gt;\* FORM ALV_INIT_REPORT_EVENTS *&lt;/P&gt;&lt;P&gt;\*----&lt;/P&gt;&lt;HR originaltext="----------------------------------------------------------------" /&gt;&lt;P&gt;*&lt;/P&gt;&lt;P&gt;\* Set up program events for ALV_LIST_DISPLAY *&lt;/P&gt;&lt;P&gt;\*----&lt;/P&gt;&lt;HR originaltext="----------------------------------------------------------------" /&gt;&lt;P&gt;*&lt;/P&gt;&lt;P&gt;\* &amp;lt;-- OT_EVENTS list of events and associated report subroutines *&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_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;P&gt;\* FORM USER_COMMAND *&lt;/P&gt;&lt;P&gt;\*----&lt;/P&gt;&lt;HR originaltext="----------------------------------------------------------------" /&gt;&lt;P&gt;*&lt;/P&gt;&lt;P&gt;\* Subroutine attached as callback form to ABAP List Viewer *&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;--&amp;gt; UCOMM - user command code passed from ALV *&lt;/P&gt;&lt;/LI&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;--&amp;gt; SELFIELD - information record describing current line/field *&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 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;P&gt;\* when ...&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;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;P&gt;\* FORM PF_STATUS_SET *&lt;/P&gt;&lt;P&gt;\*----&lt;/P&gt;&lt;HR originaltext="----------------------------------------------------------------" /&gt;&lt;P&gt;*&lt;/P&gt;&lt;P&gt;\* Subroutine attached as callback form to ABAP List Viewer, *&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;allows setting alternative menu. If necessary: *&lt;/P&gt;&lt;/LI&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;1. Copy 'STANDARD' menu from SAPLKKBL and modify as required, *&lt;/P&gt;&lt;/LI&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;2. Activate callback *&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 pf_status_set USING it_exctab TYPE slis_t_extab.&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;\* set pf-status 'STANDARD' excluding it_exctab.&lt;/P&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;P&gt;\* FORM TOP_OF_LIST *&lt;/P&gt;&lt;P&gt;\*----&lt;/P&gt;&lt;HR originaltext="----------------------------------------------------------------" /&gt;&lt;P&gt;*&lt;/P&gt;&lt;P&gt;\* Subroutine attached as callback form to ABAP List Viewer, *&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;executed once at the start of list output. *&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_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; &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;P&gt;\* remove 'technical' parameters with 'DELETE LT_SELTAB WHERE...'&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;before display, if necessary&lt;/P&gt;&lt;/LI&gt;&lt;/UL&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;P&gt;\* dyn_range =&lt;/P&gt;&lt;P&gt;newpage = ' '&lt;/P&gt;&lt;P&gt;\* screennr = 1000&lt;/P&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;P&gt;\* FORM END_OF_LIST *&lt;/P&gt;&lt;P&gt;\*----&lt;/P&gt;&lt;HR originaltext="----------------------------------------------------------------" /&gt;&lt;P&gt;*&lt;/P&gt;&lt;P&gt;\* Subroutine attached as callback form to ABAP List Viewer *&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;executed once at the end of list output. *&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_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;P&gt;\* remove 'technical' parameters with 'DELETE LT_SELTAB WHERE...'&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;before display, if necessary&lt;/P&gt;&lt;/LI&gt;&lt;/UL&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;P&gt;\* dyn_range =&lt;/P&gt;&lt;P&gt;newpage = ' '&lt;/P&gt;&lt;P&gt;\* screennr = 1000&lt;/P&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;P&gt;\* FORM TOP_OF_PAGE *&lt;/P&gt;&lt;P&gt;\*----&lt;/P&gt;&lt;HR originaltext="----------------------------------------------------------------" /&gt;&lt;P&gt;*&lt;/P&gt;&lt;P&gt;\* Subroutine attached as callback form to ABAP List Viewer *&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_page.&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;\* standard Ingram Micro report page heading&lt;/P&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;P&gt;\* We may need to truncate title if the line size is &amp;lt; 81.&lt;/P&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;P&gt;\* Decide on positioning of text depending on width of page&lt;/P&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;P&gt;\* Setup data correctly in the correct format for the display fields.&lt;/P&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+6(2) sy-datum+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+0(2) ':' sy-uzeit+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;P&gt;\* Decide on positioning of text depending on width of page.&lt;/P&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;P&gt;\* FORM END_OF_PAGE *&lt;/P&gt;&lt;P&gt;\*----&lt;/P&gt;&lt;HR originaltext="----------------------------------------------------------------" /&gt;&lt;P&gt;*&lt;/P&gt;&lt;P&gt;\* Subroutine attached as callback form to ABAP List Viewer *&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_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;HR originaltext="-----------------------------------------------------------------" /&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;\* Form 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;P&gt;\* Reads ALV variant definition&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;P&gt;\* FORM ALV_VARIANT_F4 *&lt;/P&gt;&lt;P&gt;\*----&lt;/P&gt;&lt;HR originaltext="----------------------------------------------------------------" /&gt;&lt;P&gt;*&lt;/P&gt;&lt;P&gt;\* Display list of layout variants on report selection screen *&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_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;P&gt;\* it_default_fieldcat =&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 = 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;&lt;U&gt;&lt;EM&gt;&lt;STRONG&gt;or check this coding too&lt;/STRONG&gt;&lt;/EM&gt;&lt;/U&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;Global ALV Data Declarations&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;type-pools: slis.&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;\* Internal Tables&lt;/P&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;P&gt;\*      Form  GET_DATA&lt;/P&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;P&gt;\*  CALL_ALV&lt;/P&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;P&gt;\* Call ABAP List Viewer (ALV)&lt;/P&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;P&gt;\*       FORM handle_User_Command                                      *&lt;/P&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; &lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;      endcase.&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt; &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; Regards&lt;/P&gt;&lt;P&gt;Pavan&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Tue, 18 Dec 2007 08:07:19 GMT</pubDate>
      <guid>https://community.sap.com/t5/application-development-and-automation-discussions/drill-down-alv/m-p/3179545#M756887</guid>
      <dc:creator>Former Member</dc:creator>
      <dc:date>2007-12-18T08:07:19Z</dc:date>
    </item>
  </channel>
</rss>

