Datum automtisch im Report

Hallo,
ich würde gerne Im Report in einer Kopfzeile das Datum einfügen, möchte das aber nicht manuel machen. Gibt es eine Möglichkeit in ein Textfeld eine Art Formel einzufügen und das Datum aus einer Kanal zu Laden?
Ausserdem wird mir auf der X-Achse bei der beschriftung zwar die Uhrzeit angezeit, und auch der Tag , aber leider nicht Monat und Jahr, kann man da etwas in den einstellungen ändern?
Danek schon mal
Gruß Flens

Hallo!
Sie können den Speicherdatum des Datensatzes im Datenportal im Report automatisch auslesen, falls Sie schreiben:
@RootPropGet("datestring")@
Sie können das aktuelles Datum auslesen mit @currdate@
Sonst, wenn Sie einem Datumskanal im Datenportal haben und das erste Wert des Kanals im Report auslesen wollen:
@str(chd(1,1), "#dd.mm.yyyy")@
Das "#dd.mm.yyyy" sagt, dass Sie einem Formatierung von Tag, Monat und Jahr haben wollen.
Das gleiches können Sie für das X-Achse machen. Machen Sie einem
Doppelclick auf dem X-Achse und geben als Format #dd.mm.yyyy hh:nn:ss
Schönes Wochenende
Ken Tobler

Similar Messages

  • About  Interactve Reports

    Hi Falks,
      If any one knows about interactive report transaction code than plz give reply as well as send  me one step by step example how to create interactive reports.
    mail me on "[email protected]".
    Thanx and regards,
    Rahul Talele

    Hi,
    There is separate Tcode for interactive reports ..
    you can create a basic list report for one table data, and use the commands of intercative reports, like At line-selection, At user-command and write the code to display the another table records .
    see the sample code:
    report zf_rept_debtor_ageing
           no standard page heading
           message-id fb
           line-count 65
           line-size 230.
    Purpose : This ABAP program will fetch the Account Receivables for
               a Customer for the given period and display the due days.
    tables: t001,       " Company Codes
            t005,       " Countries
            skb1,       " GL Master
            kna1.       " Customer Master
    Internal Tables
    Internal table for BSID (Open Items) data
    data: begin of it_bsid occurs 0,
            kunnr like bsid-kunnr,         " Customer Number
            gjahr like bsid-gjahr,         " Fiscal Year
            belnr like bsid-belnr,         " Acc.Document
            buzei like bsid-buzei,         " Item
            budat like bsid-budat,         " Posting Date
            shkzg like bsid-shkzg,         " Dr/Cr Indicator
            dmbtr like bsid-dmbtr,         " Amount(Local Curr)
            wrbtr like bsid-wrbtr,         " Amount(Doc Curr)
            dmbe2 like bsid-dmbe2,         " Amount(USD)
            waers like bsid-waers,         " Currency
            zterm like bsid-zterm,         " Payment Terms
            vbeln like bsid-vbeln,         " Billing Doc
            zfbdt like bsid-zfbdt,         " Baseline Date
            zbd1t like bsid-zbd1t,         " No of days
            hkont like bsid-hkont,         " GL Account
            name1 like kna1-name1,         " Customer Name
            land1 like kna1-land1,         " Country
          end of it_bsid.
    Internal table for BSAD (Closed Items) data
    data: begin of it_bsad occurs 0,
            kunnr like bsad-kunnr,         " Customer Number
            gjahr like bsad-gjahr,         " Fiscal Year
            belnr like bsad-belnr,         " Acc.Document
            buzei like bsad-buzei,         " Item
            budat like bsad-budat,         " Posting Date
            shkzg like bsad-shkzg,         " Dr/Cr Indicator
            dmbtr like bsad-dmbtr,         " Amount(Local Curr)
            wrbtr like bsid-wrbtr,         " Amount(Doc Curr)
            dmbe2 like bsad-dmbe2,         " Amount(USD)
            waers like bsad-waers,         " Currency
            zterm like bsid-zterm,         " Payment Terms
            vbeln like bsid-vbeln,         " Billing Doc
            zfbdt like bsid-zfbdt,         " Baseline Date
            zbd1t like bsid-zbd1t,         " No of days
            hkont like bsid-hkont,         " GL Account
            name1 like kna1-name1,         " Customer Name
            land1 like kna1-land1,         " Country
          end of it_bsad.
    Internal table for Report Output
    data: begin of it_report occurs 0,
            kunnr like bsid-kunnr,         " Customer Number
            belnr like bsid-belnr,         " Acc.Document
            name1 like kna1-name1,         " Customer Name
            land1 like kna1-land1,         " Country
            shkzg like bsid-shkzg,         " Dr/Cr Indicator
            budat like bsid-budat,         " Posting Date
            dmbtr like bsid-dmbtr,         " Amount(Local Curr)
            wrbtr like bsid-wrbtr,         " Amount(Doc Curr)
            dmbe2 like bsid-dmbe2,         " Amount(USD)
            waers like bsid-waers,         " Currency
            due_amnt like bsid-dmbtr,      " Amount(Over Due)
            d_amnt1  like bsid-dmbtr,      " Amount(0-30 Future Due)
            d_amnt2  like bsid-dmbtr,      " Amount(31-60 Future Due)
            d_amnt3  like bsid-dmbtr,      " Amount(61-90 Future Due)
            d_amnt4  like bsid-dmbtr,      " Amount(91-120 Future Due)
            d_amnt5  like bsid-dmbtr,      " Amount(more than 120)
            due_date like bsid-budat,      " Due date
            zterm    like bsid-zterm,      " Payment Terms
            vbeln    like bsid-vbeln,      " Billing Doc
          end of it_report.
           Declaration of Data and Variables
    data: v_days  type i,            " Difference days
          v_waers like t001-waers,   " Co.Code Currency
          v_sum1  like bsid-dmbtr,                              " Totals 1
          v_sum2  like bsid-dmbtr,                              " Totals 2
          v_sum3  like bsid-dmbtr,                              " Totals 3
          v_sum4  like bsid-dmbtr,                              " Totals 4
          v_sum5  like bsid-dmbtr,                              " Totals 5
          v_sum6  like bsid-dmbtr,                              " Totals 6
          v_sum7  like bsid-dmbtr,                              " Totals 7
          v_sum8  like bsid-dmbe2.                              " Totals 8
    Constants
    constants: c_doc_waers(3) value 'USD',
               c_mitkz type c value 'D'.
                       Selection Screen
    selection-screen : begin of block b1 with frame title text-001.
    parameters: p_bukrs like t001-bukrs obligatory.      " Company Code
    select-options:s_kunnr for kna1-kunnr,               " Customer Number
                   s_land1 for t005-land1,               " Country
                   s_hkont for skb1-saknr.               " G/L Account
    parameters: p_date  like sy-datum obligatory.        " Report Date
    selection-screen: end of block b1.
    selection-screen : begin of block b2 with frame title text-002.
    selection-screen begin of line.
    selection-screen comment 2(30) text-003 for field p_rb1.
    parameters: p_rb1 radiobutton group rb.
    selection-screen end of line.
    selection-screen begin of line.
    selection-screen comment 2(30) text-004 for field p_rb2.
    parameters: p_rb2 radiobutton group rb.
    selection-screen end of line.
    selection-screen: end of block b2.
    selection-screen : begin of block b4 with frame.
    selection-screen begin of line.
    selection-screen comment 2(29) text-038 for field p_chk1.
    parameters: p_chk1 as checkbox.
    selection-screen end of line.
    selection-screen: end of block b4.
    selection-screen : begin of block b3 with frame title text-030.
    selection-screen begin of line.
    selection-screen comment 2(30) text-031 for field p_rb3.
    parameters: p_rb3 radiobutton group rb1.
    selection-screen end of line.
    selection-screen begin of line.
    selection-screen comment 2(30) text-032 for field p_rb4.
    parameters: p_rb4 radiobutton group rb1.
    selection-screen end of line.
    selection-screen: end of block b3.
    *********Initialization**********************************************
    initialization.
    At Selection Screen
    at selection-screen.
    Checking for the input values of selection screen.
      perform screen_check.
    Top-Of-Page
    top-of-page.
      if p_rb3 = 'X'.
        if p_chk1 = 'X'.
    Write the Column Headings for detailed report(in Doc Currency)
          perform col_heading2.
        else.
    Write the Column Headings for detailed report
          perform col_heading.
        endif.
      else.
    Write the Column Headings for summary report
        perform col_heading1.
      endif.
    Start-Of-Selection
    start-of-selection.
    Get the Customer Open Items from BSID
      perform get_open_data.
    Get the Customer Closed Items from BSAD
      perform get_close_data.
    Get the data from BSID,BSAD and KNA1 into one int.table
      perform process_data.
    End-Of-Selection
    end-of-selection.
      if it_report[] is initial.
        write : 'No Documents found'(005).
      else.
        if p_rb3 = 'X'.
    Write the Detailed Report
          perform write_report.
        else.
    Write the Summary Report
          perform write_report1.
        endif.
      endif.
    At Line-Selection
    at line-selection.
    When double clicked on BELNR leave to transaction FB03
      perform line_sel.
    *&      Form  SCREEN_CHECK
    Checking for the input values of selection screen
    form screen_check.
    Validation of Company Code
      clear t001.
      if not p_bukrs is initial.
        select bukrs from t001 up to 1 rows
               into t001-bukrs
               where bukrs = p_bukrs.
        endselect.
        if sy-subrc ne 0.
          message e000 with 'Invalid Company Code'(006).
        endif.
      endif.
    Validation of Customer Number
      clear kna1.
      if not s_kunnr is initial.
        select kunnr from kna1 up to 1 rows
               into kna1-kunnr
               where kunnr in s_kunnr.
        endselect.
        if sy-subrc ne 0.
          message e000 with 'Invalid Customer Number'(007).
        endif.
      endif.
    Validation of Country
      clear t005.
      if not s_land1 is initial.
        select land1 from t005 up to 1 rows
               into t005-land1
               where land1 in s_land1.
        endselect.
        if sy-subrc ne 0.
          message e000 with 'Invalid Country'(036).
        endif.
      endif.
    Validation of GL Account
      clear skb1.
      if not s_hkont is initial.
        select saknr from skb1 up to 1 rows
               into skb1-saknr
               where saknr in s_hkont and
                     mitkz = c_mitkz.
        endselect.
        if sy-subrc ne 0.
          message e000 with 'Invalid GL Reconciliation Account'(037).
        endif.
      endif.
    endform.                    " SCREEN_CHECK
    *&      Form  COL_HEADING
    Write the Column Headings for detailed report
    form col_heading.
      skip .
      write: /88 'DEBTOR AGEING REPORT AS AT:'(019) centered,
             116  p_date  centered, 198 sy-pagno.
      skip .
      write: /2 'CoCode:'(016),13(4) p_bukrs color 3.
      if not s_kunnr is initial.
        if not s_kunnr-high is initial.
          write: 20 'Customer:'(041),33 s_kunnr-low color 3,
                    '-', s_kunnr-high color 3.
        else.
          write: 20 'Customer:'(041),33 s_kunnr-low color 3.
        endif.
      endif.
      if not s_land1 is initial.
        if not s_land1-high is initial.
          write: /2 'Country:'(042),13(4) s_land1-low color 3,
                  '-', s_land1-high color 3.
        else.
          write: /2 'Country:'(042),13(4) s_land1-low color 3.
        endif.
        if not s_hkont is initial.
          if not s_hkont-high is initial.
            write: 20 'GL Account:'(043),33 s_hkont-low color 3,
                      '-', s_hkont-high color 3.
          else.
            write: 20 'GL Account:'(043),33 s_hkont-low color 3.
          endif.
        endif.
      else.
        if not s_hkont is initial.
          if not s_hkont-high is initial.
            write: /2 'GL Account:'(043),14 s_hkont-low color 3,
                      '-', s_hkont-high color 3.
          else.
            write: /2 'GL Account:'(043),14 s_hkont-low color 3.
          endif.
        endif.
      endif.
      write: 183 'Run Date:'(029), sy-datum.
      format color col_heading.
      write at /1(203) sy-uline .
      write: / sy-vline,  2(10) 'Customer'(008) centered,
            12 sy-vline, 13(30) 'Customer Name'(009),
            43 sy-vline, 44(3)  'Cty'(014) centered,
            47 sy-vline, 48(15) 'Amount'(013) right-justified,
            63 sy-vline, 64(4)  'Curr'(011) centered,
            68 sy-vline, 69(15) 'Overdue'(012) centered,
            84 sy-vline, 85(15) '0 - 30 Days'(010) centered,
           100 sy-vline,101(15) '31 - 60 Days'(028) centered,
           116 sy-vline,117(15) '61 - 90 Days'(021) centered,
           132 sy-vline,133(15) '91 - 120 Days'(022) centered,
           148 sy-vline,149(15) 'Above 120 Days'(023) centered,
           164 sy-vline,165(10) 'Due Date'(024) centered,
           175 sy-vline,176(5)  'PayT'(025) centered,
           181 sy-vline,182(10) 'Bill.Doc.'(026) centered,
           192 sy-vline,193(10) 'Doc.No.'(027) centered,
           203 sy-vline.
      write at /1(203) sy-uline.
      format color off.
    endform.                    " COL_HEADING
    *&      Form  COL_HEADING1
    Write the Column Headings for summary report
    form col_heading1.
      skip .
      write: /54 'DEBTOR AGEING REPORT (SUMMARY) AS AT:'(033) centered,
              92  p_date  centered, 158 sy-pagno.
      skip .
      write: /2 'CoCode:'(016), 13(4) p_bukrs color 3.
      if not s_kunnr is initial.
        if not s_kunnr-high is initial.
          write: 20 'Customer:'(041),33 s_kunnr-low color 3,
                    '-', s_kunnr-high color 3.
        else.
          write: 20 'Customer:'(041),33 s_kunnr-low color 3.
        endif.
      endif.
      if not s_land1 is initial.
        if not s_land1-high is initial.
          write: /2 'Country:'(042),13(4) s_land1-low color 3,
                  '-', s_land1-high color 3.
        else.
          write: /2 'Country:'(042),13(4) s_land1-low color 3.
        endif.
        if not s_hkont is initial.
          if not s_hkont-high is initial.
            write: 20 'GL Account:'(043),33 s_hkont-low color 3,
                      '-', s_hkont-high color 3.
          else.
            write: 20 'GL Account:'(043),33 s_hkont-low color 3.
          endif.
        endif.
      else.
        if not s_hkont is initial.
          if not s_hkont-high is initial.
            write: /2 'GL Account:'(043),14 s_hkont-low color 3,
                      '-', s_hkont-high color 3.
          else.
            write: /2 'GL Account:'(043),14 s_hkont-low color 3.
          endif.
        endif.
      endif.
      write: 144 'Run Date:'(029), sy-datum.
      format color col_heading.
      write at /1(164) sy-uline .
      write: / sy-vline,  2(10) 'Customer'(008) centered,
            12 sy-vline, 13(30) 'Customer Name'(009),
            43 sy-vline, 44(3)  'Cty'(014) centered,
            47 sy-vline, 48(15) 'Amount'(013) right-justified,
            63 sy-vline, 64(4)  'Curr'(011) centered,
            68 sy-vline, 69(15) 'Overdue'(012) centered,
            84 sy-vline, 85(15) '0 - 30 Days'(010) centered,
           100 sy-vline,101(15) '31 - 60 Days'(028) centered,
           116 sy-vline,117(15) '61 - 90 Days'(021) centered,
           132 sy-vline,133(15) '91 - 120 Days'(022) centered,
           148 sy-vline,149(15) 'Above 120 Days'(023) centered,
           164 sy-vline.
      write at /1(164) sy-uline.
      format color off.
    endform.                    " COL_HEADING1
    *&      Form  COL_HEADING2
    Write the Column Headings for summary report(in Doc Curr)
    form col_heading2.
      skip .
      write: /99 'DEBTOR AGEING REPORT AS AT:'(019) centered,
             127  p_date  centered, 220 sy-pagno.
      skip .
      write: /2 'CoCode:'(016),13(4) p_bukrs color 3.
      if not s_kunnr is initial.
        if not s_kunnr-high is initial.
          write: 20 'Customer:'(041),33 s_kunnr-low color 3,
                    '-', s_kunnr-high color 3.
        else.
          write: 20 'Customer:'(041),33 s_kunnr-low color 3.
        endif.
      endif.
      if not s_land1 is initial.
        if not s_land1-high is initial.
          write: /2 'Country:'(042),13(4) s_land1-low color 3,
                  '-', s_land1-high color 3.
        else.
          write: /2 'Country:'(042),13(4) s_land1-low color 3.
        endif.
        if not s_hkont is initial.
          if not s_hkont-high is initial.
            write: 20 'GL Account:'(043),33 s_hkont-low color 3,
                      '-', s_hkont-high color 3.
          else.
            write: 20 'GL Account:'(043),33 s_hkont-low color 3.
          endif.
        endif.
      else.
        if not s_hkont is initial.
          if not s_hkont-high is initial.
            write: /2 'GL Account:'(043),14 s_hkont-low color 3,
                      '-', s_hkont-high color 3.
          else.
            write: /2 'GL Account:'(043),14 s_hkont-low color 3.
          endif.
        endif.
      endif.
      write: 204 'Run Date:'(029), sy-datum.
      format color col_heading.
      write at /1(225) sy-uline .
      write: / sy-vline,  2(10) 'Customer'(008) centered,
            12 sy-vline, 13(30) 'Customer Name'(009),
            43 sy-vline, 44(3)  'Cty'(014) centered,
            47 sy-vline, 48(15) 'Amount'(013) right-justified,
            63 sy-vline, 64(4)  'Curr'(011) centered,
            68 sy-vline, 69(15) 'Overdue'(012) centered,
            84 sy-vline, 85(15) '0 - 30 Days'(010) centered,
           100 sy-vline,101(15) '31 - 60 Days'(028) centered,
           116 sy-vline,117(15) '61 - 90 Days'(021) centered,
           132 sy-vline,133(15) '91 - 120 Days'(022) centered,
           148 sy-vline,149(15) 'Above 120 Days'(023) centered,
           164 sy-vline,165(10) 'Due Date'(024) centered,
           175 sy-vline,176(5)  'PayT'(025) centered,
           181 sy-vline,182(10) 'Bill.Doc.'(026) centered,
           192 sy-vline,193(10) 'Doc.No.'(027) centered,
           203 sy-vline,204(16) 'Amount(Doc.Curr)'(039),
           220 sy-vline,221(4)  'Curr'(040),
           225 sy-vline.
      write at /1(225) sy-uline.
      format color off.
    endform.                    " COL_HEADING2
    *&      Form  GET_OPEN_DATA
    Get the Customer Open Items from BSID
    form get_open_data.
      select a~kunnr          " Customer Number
             a~gjahr          " Fiscal Year
             a~belnr          " Acc.Document
             a~buzei          " Item
             a~budat          " Posting Date
             a~shkzg          " Dr/Cr Indicator
             a~dmbtr          " Amount(Local Curr)
             a~wrbtr          " Amount(Doc Curr)
             a~dmbe2          " Amount(USD)
             a~waers          " Currency
             a~zterm          " Payment Terms
             a~vbeln          " Billing Doc
             a~zfbdt          " Baseline Date
             a~zbd1t          " No of days
             a~hkont          " GL account
             b~name1          " Customer Name
             b~land1          " Country
         into table it_bsid
         from bsid as a join kna1 as b
         on akunnr = bkunnr
         where a~bukrs = p_bukrs  and
               a~kunnr in s_kunnr and
               a~hkont in s_hkont and
               b~land1 in s_land1 and
               a~budat le p_date.
      sort it_bsid by kunnr gjahr belnr buzei budat.
    endform.                    " GET_OPEN_DATA
    *&      Form  GET_CLOSE_DATA
    Get the Customer closed Items from BSID
    form get_close_data.
      select a~kunnr          " Customer Number
             a~gjahr          " Fiscal Year
             a~belnr          " Acc.Document
             a~buzei          " Item
             a~budat          " Posting Date
             a~shkzg          " Dr/Cr Indicator
             a~dmbtr          " Amount(Local Curr)
             a~wrbtr          " Amount(Doc Curr)
             a~dmbe2          " Amount(USD)
             a~waers          " Currency
             a~zterm          " Payment Terms
             a~vbeln          " Billing Doc
             a~zfbdt          " Baseline Date
             a~zbd1t          " No of days
             a~hkont          " GL account
             b~name1          " Customer Name
             b~land1          " Country
        into table it_bsad
        from bsad as a join kna1 as b
        on akunnr = bkunnr
        where a~bukrs = p_bukrs  and
              a~kunnr in s_kunnr and
              a~hkont in s_hkont and
              b~land1 in s_land1 and
              a~augdt > p_date   and
              a~budat le p_date.
      sort it_bsad by kunnr gjahr belnr buzei budat.
    endform.                    " GET_CLOSE_DATA
    *&      Form  PROCESS_DATA
    Get the data from BSID,BSAD and KNA1 into one int.table
    form process_data.
    *Move the data from BSID to final output int table
      loop at it_bsid.
        move-corresponding it_bsid to it_report.
        it_report-due_date = it_bsid-zfbdt + it_bsid-zbd1t.
        append it_report.
        clear it_report.
      endloop.
    *Move the data from BSAD to final output int table
      loop at it_bsad.
        move-corresponding it_bsad to it_report.
        it_report-due_date = it_bsad-zfbdt + it_bsad-zbd1t.
        append it_report.
        clear it_report.
      endloop.
      sort it_report by kunnr belnr.
      loop at it_report.
        if it_report-shkzg = 'H'.    " Credit
          it_report-dmbtr = it_report-dmbtr * -1.
          it_report-dmbe2 = it_report-dmbe2 * -1.
        endif.
        v_days = it_report-due_date - p_date.
    For Company Code Currency
        if p_rb1 = 'X'.
          if v_days le 0.
            it_report-due_amnt = it_report-dmbtr.
          elseif v_days between 1 and 30.
            it_report-d_amnt1 = it_report-dmbtr.
          elseif v_days between 31 and 60.
            it_report-d_amnt2 = it_report-dmbtr.
          elseif v_days between 61 and 90.
            it_report-d_amnt3 = it_report-dmbtr.
          elseif v_days between 91 and 120.
            it_report-d_amnt4 = it_report-dmbtr.
          elseif v_days > 120.
            it_report-d_amnt5 = it_report-dmbtr.
          endif.
    For Group Currency
        else.
          if v_days le 0.
            it_report-due_amnt = it_report-dmbe2.
          elseif v_days between 1 and 30.
            it_report-d_amnt1 = it_report-dmbe2.
          elseif v_days between 31 and 60.
            it_report-d_amnt2 = it_report-dmbe2.
          elseif v_days between 61 and 90.
            it_report-d_amnt3 = it_report-dmbe2.
          elseif v_days between 91 and 120.
            it_report-d_amnt4 = it_report-dmbe2.
          elseif v_days > 120.
            it_report-d_amnt5 = it_report-dmbe2.
          endif.
        endif.
        modify it_report index sy-tabix.
      endloop.
    endform.                    " PROCESS_DATA
    *&      Form  WRITE_REPORT
    Write the Detailed Report Output
    form write_report.
      clear: v_sum1,v_sum2,v_sum3,v_sum4,v_waers,
             v_sum5,v_sum6,v_sum7,v_sum8.
      loop at it_report.
       at new kunnr.
          read table it_report index sy-tabix.
          write: / sy-vline,  2(10) it_report-kunnr,
                12 sy-vline, 13(30) it_report-name1,
                43 sy-vline, 44(3)  it_report-land1,
                47 sy-vline.
       endat.
        if p_rb1 = 'X'.
          select single waers from t001
               into v_waers where bukrs = p_bukrs.
          write:   1 sy-vline, 12 sy-vline,
                  43 sy-vline,
                  47 sy-vline,
                  48(15) it_report-dmbtr currency it_report-waers,
                  63 sy-vline, 64(4) v_waers,
                  68 sy-vline.
        else.
          write:   1 sy-vline, 12 sy-vline,
                  43 sy-vline,
                  47 sy-vline,
                  48(15) it_report-dmbe2 currency it_report-waers,
                  63 sy-vline,64(4) c_doc_waers,
                  68 sy-vline.
        endif.
        write:  69(15) it_report-due_amnt currency it_report-waers,
                84 sy-vline,
                85(15) it_report-d_amnt1 currency it_report-waers,
               100 sy-vline,
               101(15) it_report-d_amnt2 currency it_report-waers,
               116 sy-vline,
               117(15) it_report-d_amnt3 currency it_report-waers,
               132 sy-vline,
               133(15) it_report-d_amnt4 currency it_report-waers,
               148 sy-vline,
               149(15) it_report-d_amnt5 currency it_report-waers,
               164 sy-vline,165(10) it_report-due_date,
               175 sy-vline,176(5)  it_report-zterm,
               181 sy-vline,182(10) it_report-vbeln,
               192 sy-vline,193(10) it_report-belnr,
               203 sy-vline.
        if p_chk1 = 'X'.
          write: 204(16) it_report-wrbtr currency it_report-waers,
               220 sy-vline, 221(4) it_report-waers,
               225 sy-vline.
        endif.
       new-line.
    Totals for end of each Customer
        at end of kunnr.
          if p_chk1 = 'X'.
            write at /1(225) sy-uline.
          else.
            write at /1(203) sy-uline.
          endif.
          sum.
          format color 4.
          if p_rb1 = 'X'.
            write: /1 sy-vline, 2 'Total:'(015),
                 12 sy-vline,
                 13(10) it_report-kunnr,
                 43 sy-vline,47 sy-vline,
                 48(15) it_report-dmbtr currency it_report-waers,
                 63 sy-vline, 64(3) v_waers,
                 68 sy-vline,
                 69(15) it_report-due_amnt currency it_report-waers,
                 84 sy-vline,
                 85(15) it_report-d_amnt1 currency it_report-waers,
                100 sy-vline,
                101(15) it_report-d_amnt2 currency it_report-waers,
                116 sy-vline,
                117(15) it_report-d_amnt3 currency it_report-waers,
                132 sy-vline,
                133(15) it_report-d_amnt4 currency it_report-waers,
                148 sy-vline,
                149(15) it_report-d_amnt5 currency it_report-waers,
                164 sy-vline, 175 sy-vline,
                181 sy-vline, 192 sy-vline,
                203 sy-vline.
            if p_chk1 = 'X'.
              write: 220 sy-vline, 225 sy-vline.
            endif.
          else.
            write: /1 sy-vline, 2 'Total:'(015),
                   12 sy-vline,
                 13(10) it_report-kunnr,
                 43 sy-vline,
                 47 sy-vline,
                 48(15) it_report-dmbe2 currency it_report-waers,
                 63 sy-vline, 64(3) c_doc_waers,
                 68 sy-vline,
                 69(15) it_report-due_amnt currency it_report-waers,
                 84 sy-vline,
                 85(15) it_report-d_amnt1 currency it_report-waers,
                100 sy-vline,
                101(15) it_report-d_amnt2 currency it_report-waers,
                116 sy-vline,
                117(15) it_report-d_amnt3 currency it_report-waers,
                132 sy-vline,
                133(15) it_report-d_amnt4 currency it_report-waers,
                148 sy-vline,
                149(15) it_report-d_amnt5 currency it_report-waers,
                164 sy-vline, 175 sy-vline,
                181 sy-vline, 192 sy-vline,
                203 sy-vline.
            if p_chk1 = 'X'.
              write: 220 sy-vline, 225 sy-vline.
            endif.
          endif.
          format color off.
          if p_chk1 = 'X'.
            write at /1(225) sy-uline.
          else.
            write at /1(203) sy-uline.
          endif.
        endat.
        v_sum1 = v_sum1 + it_report-dmbtr.
        v_sum2 = v_sum2 + it_report-due_amnt.
        v_sum3 = v_sum3 + it_report-d_amnt1.
        v_sum4 = v_sum4 + it_report-d_amnt2.
        v_sum5 = v_sum5 + it_report-d_amnt3.
        v_sum6 = v_sum6 + it_report-d_amnt4.
        v_sum7 = v_sum7 + it_report-d_amnt5.
        v_sum8 = v_sum8 + it_report-dmbe2.
    Hiding the Acc doc no for interactic screen.
        hide it_report-belnr.
        hide it_report-budat.
        clear:it_report-belnr, it_report-budat.
      endloop.
    Grand Totals for all customers
      format color 3.
      write: /1 sy-vline, 2 'Gr.Total'(034),
                 12 sy-vline,13 'As At:'(035),p_date,
                 43 sy-vline,
                 47 sy-vline.
    For Company Code Currency
      if p_rb1 = 'X'.
        write:  48(15) v_sum1 currency it_report-waers,
                63 sy-vline, 64(4) v_waers,
                68 sy-vline.
    For Group Currency (USD)
      else.
        write:   48(15) v_sum8 currency it_report-waers,
                 63 sy-vline, 64(3) c_doc_waers,
                 68 sy-vline.
      endif.
      write:     69(15) v_sum2 currency it_report-waers,
                 84 sy-vline,
                 85(15) v_sum3 currency it_report-waers,
                100 sy-vline,
                101(15) v_sum4 currency it_report-waers,
                116 sy-vline,
                117(15) v_sum5 currency it_report-waers,
                132 sy-vline,
                133(15) v_sum6 currency it_report-waers,
                148 sy-vline,
                149(15) v_sum7 currency it_report-waers,
                164 sy-vline, 175 sy-vline,
                181 sy-vline, 192 sy-vline,
                203 sy-vline.
      if p_chk1 = 'X'.
        write: 220 sy-vline, 225 sy-vline.
      endif.
      format color off.
      if p_chk1 = 'X'.
        write at /1(225) sy-uline.
      else.
        write at /1(203) sy-uline.
      endif.
    endform.                    " WRITE_REPORT
    *&      Form  WRITE_REPORT1
    Write the Summary Report Output
    form write_report1.
      clear: v_sum1,v_sum2,v_sum3,v_sum4,v_waers,
             v_sum5,v_sum6,v_sum7,v_sum8.
      loop at it_report.
        at new kunnr.
          read table it_report index sy-tabix.
          write: / sy-vline,  2(10) it_report-kunnr,
                12 sy-vline, 13(30) it_report-name1,
                43 sy-vline, 44(3)  it_report-land1,
                47 sy-vline.
        endat.
        at end of kunnr.
          sum.
          if p_rb1 = 'X'.
            select single waers from t001
              into v_waers where bukrs = p_bukrs.
            write: 1 sy-vline, 12 sy-vline,
                 43 sy-vline,  47 sy-vline,
                 48(15) it_report-dmbtr currency it_report-waers,
                 63 sy-vline, 64(4) v_waers,
                 68 sy-vline,
                 69(15) it_report-due_amnt currency it_report-waers,
                 84 sy-vline,
                 85(15) it_report-d_amnt1 currency it_report-waers,
                100 sy-vline,
                101(15) it_report-d_amnt2 currency it_report-waers,
                116 sy-vline,
                117(15) it_report-d_amnt3 currency it_report-waers,
                132 sy-vline,
                133(15) it_report-d_amnt4 currency it_report-waers,
                148 sy-vline,
                149(15) it_report-d_amnt5 currency it_report-waers,
                164 sy-vline.
          else.
            write: 1 sy-vline, 12 sy-vline,
                 43 sy-vline,  47 sy-vline,
                 48(15) it_report-dmbe2 currency it_report-waers,
                 63 sy-vline, 64(4) c_doc_waers,
                 68 sy-vline,
                 69(15) it_report-due_amnt currency it_report-waers,
                 84 sy-vline,
                 85(15) it_report-d_amnt1 currency it_report-waers,
                100 sy-vline,
                101(15) it_report-d_amnt2 currency it_report-waers,
                116 sy-vline,
                117(15) it_report-d_amnt3 currency it_report-waers,
                132 sy-vline,
                133(15) it_report-d_amnt4 currency it_report-waers,
                148 sy-vline,
                149(15) it_report-d_amnt5 currency it_report-waers,
                164 sy-vline.
          endif.
          write at /1(164) sy-uline.
        endat.
    Totals
        v_sum1 = v_sum1 + it_report-dmbtr.
        v_sum2 = v_sum2 + it_report-due_amnt.
        v_sum3 = v_sum3 + it_report-d_amnt1.
        v_sum4 = v_sum4 + it_report-d_amnt2.
        v_sum5 = v_sum5 + it_report-d_amnt3.
        v_sum6 = v_sum6 + it_report-d_amnt4.
        v_sum7 = v_sum7 + it_report-d_amnt5.
        v_sum8 = v_sum8 + it_report-dmbe2.
    Hiding the Acc doc no for interactic screen.
        hide it_report-belnr.
        hide it_report-budat.
        clear: it_report-belnr,
               it_report-budat.
      endloop.
    Calculation of Grand Totals
      format color 3.
      write: /1 sy-vline, 2 'Gr.Total'(034),
                 12 sy-vline,13 'As At:'(035),p_date,
                 43 sy-vline,
                 47 sy-vline.
    For Company Code Currency
      if p_rb1 = 'X'.
        write:  48(15) v_sum1 currency it_report-waers,
                63 sy-vline, 64(4) v_waers,
                68 sy-vline.
    For Group Currency (USD)
      else.
        write:   48(15) v_sum8 currency it_report-waers,
                 63 sy-vline, 64(3) c_doc_waers,
                 68 sy-vline.
      endif.
      write:     69(15) v_sum2 currency it_report-waers,
                 84 sy-vline,
                 85(15) v_sum3 currency it_report-waers,
                100 sy-vline,
                101(15) v_sum4 currency it_report-waers,
                116 sy-vline,
                117(15) v_sum5 currency it_report-waers,
                132 sy-vline,
                133(15) v_sum6 currency it_report-waers,
                148 sy-vline,
                149(15) v_sum7 currency it_report-waers,
                164 sy-vline.
      format color off.
      write at /1(164) sy-uline.
    endform.                    " WRITE_REPORT1
    *&      Form  LINE_SEL
    When double clicked on BELNR leave to transaction FB03
    form line_sel.
      data: lv_field(20),
            lv_value(10),
            lv_date(10),
            lv_gjahr like bsad-gjahr.
      get cursor field lv_field value lv_value.
      if lv_field = 'IT_REPORT-BELNR'.
        if not lv_value is initial.
          read current line field value it_report-budat into lv_date.
          lv_gjahr = lv_date+6(4).
          set parameter id 'BUK' field p_bukrs.
          set parameter id 'GJR' field lv_gjahr.
          set parameter id 'BLN' field lv_value.
          call transaction 'FB03' and skip first screen.
        endif.
      endif.
    endform.                    " LINE_SEL
    reward points if useful
    regards,
    Anji

  • Import export for hr report

    hi,
    i have a reqiurement in which i need to take pernr and enddate(sy-datum) from
    another report i m using import and export to get them tranfered export is
    working fine(sy-subrc = 0) but import is not getting data it is getting all the pernr
    value
    submit also i used but it is also giving same result it is not pummping the pernr value to called report
    can any one help me
    thanks in advance

    HI,
    it works fine for me
    REPORT  Ztestprg.
    DATA : LV_FIRST(10) TYPE C,
           LV_LAST(20) TYPE C.
    LV_FIRST = 'First'.
    LV_LAST = 'Last'.
    EXPORT LV_FIRST TO MEMORY ID 'FIRST'.
    EXPORT LV_LAST TO MEMORY ID 'LAST'.
    submit  ZTESTPRG1 .
    REPORT  Z_XIT_XML_DOM_CREATE.
    DATA : LV_FIRST(10) TYPE C,
           LV_LAST(20) TYPE C.
    CLEAR LV_FIRST.
    CLEAR LV_LAST.
    import LV_FIRST FROM MEMORY ID 'FIRST'.
    import LV_LAST FROM MEMORY ID 'LAST'.
    WRITE: LV_FIRST,LV_LAST.
    Thanks
    Mahesh

  • Customer Open Items in FI

    Hi All,
       I have to make a report in FI, which should show the below given Customer open Invoice details for a given customer in selection screen.
    Invoice No | Invoice date |  Invoice Amount  |   Payment    |    Balance | Currency |
    1.  I have selected all open item details (BELNR, BUDAT, WRBTR, WAERS ) from BSID for the given customer.
    2. Selected the cleared items from BSAD for the above accounting documents..and updated the BSAD-WRBTR in payment column.
      When there is no payment made against a Invoice its coming up, but when there is partial/ full payment made as this is no more open item this invoice number not coming up in the report.. Hope I have explianed my problem clearly..
       Please suggest me how should I finish this report. Thanks in advances..its very urgent..
    Regards
    Jaker.

    Hi,
    See the attached report for the Customer AR's (Open Items) and write accrodingly.
    report zf_rept_debtor_ageing
           no standard page heading
           message-id fb
           line-count 65
           line-size 230.
    Purpose : This ABAP program will fetch the Account Receivables for
               a Customer for the given period and display the due days.
    tables: t001,       " Company Codes
            t005,       " Countries
            skb1,       " GL Master
            kna1.       " Customer Master
    Internal Tables
    Internal table for BSID (Open Items) data
    data: begin of it_bsid occurs 0,
            kunnr like bsid-kunnr,         " Customer Number
            gjahr like bsid-gjahr,         " Fiscal Year
            belnr like bsid-belnr,         " Acc.Document
            buzei like bsid-buzei,         " Item
            budat like bsid-budat,         " Posting Date
            shkzg like bsid-shkzg,         " Dr/Cr Indicator
            dmbtr like bsid-dmbtr,         " Amount(Local Curr)
            wrbtr like bsid-wrbtr,         " Amount(Doc Curr)
            dmbe2 like bsid-dmbe2,         " Amount(USD)
            waers like bsid-waers,         " Currency
            zterm like bsid-zterm,         " Payment Terms
            vbeln like bsid-vbeln,         " Billing Doc
            zfbdt like bsid-zfbdt,         " Baseline Date
            zbd1t like bsid-zbd1t,         " No of days
            hkont like bsid-hkont,         " GL Account
            name1 like kna1-name1,         " Customer Name
            land1 like kna1-land1,         " Country
          end of it_bsid.
    Internal table for BSAD (Closed Items) data
    data: begin of it_bsad occurs 0,
            kunnr like bsad-kunnr,         " Customer Number
            gjahr like bsad-gjahr,         " Fiscal Year
            belnr like bsad-belnr,         " Acc.Document
            buzei like bsad-buzei,         " Item
            budat like bsad-budat,         " Posting Date
            shkzg like bsad-shkzg,         " Dr/Cr Indicator
            dmbtr like bsad-dmbtr,         " Amount(Local Curr)
            wrbtr like bsid-wrbtr,         " Amount(Doc Curr)
            dmbe2 like bsad-dmbe2,         " Amount(USD)
            waers like bsad-waers,         " Currency
            zterm like bsid-zterm,         " Payment Terms
            vbeln like bsid-vbeln,         " Billing Doc
            zfbdt like bsid-zfbdt,         " Baseline Date
            zbd1t like bsid-zbd1t,         " No of days
            hkont like bsid-hkont,         " GL Account
            name1 like kna1-name1,         " Customer Name
            land1 like kna1-land1,         " Country
          end of it_bsad.
    Internal table for Report Output
    data: begin of it_report occurs 0,
            kunnr like bsid-kunnr,         " Customer Number
            belnr like bsid-belnr,         " Acc.Document
            name1 like kna1-name1,         " Customer Name
            land1 like kna1-land1,         " Country
            shkzg like bsid-shkzg,         " Dr/Cr Indicator
            budat like bsid-budat,         " Posting Date
            dmbtr like bsid-dmbtr,         " Amount(Local Curr)
            wrbtr like bsid-wrbtr,         " Amount(Doc Curr)
            dmbe2 like bsid-dmbe2,         " Amount(USD)
            waers like bsid-waers,         " Currency
            due_amnt like bsid-dmbtr,      " Amount(Over Due)
            d_amnt1  like bsid-dmbtr,      " Amount(0-30 Future Due)
            d_amnt2  like bsid-dmbtr,      " Amount(31-60 Future Due)
            d_amnt3  like bsid-dmbtr,      " Amount(61-90 Future Due)
            d_amnt4  like bsid-dmbtr,      " Amount(91-120 Future Due)
            d_amnt5  like bsid-dmbtr,      " Amount(more than 120)
            due_date like bsid-budat,      " Due date
            zterm    like bsid-zterm,      " Payment Terms
            vbeln    like bsid-vbeln,      " Billing Doc
          end of it_report.
           Declaration of Data and Variables
    data: v_days  type i,            " Difference days
          v_waers like t001-waers,   " Co.Code Currency
          v_sum1  like bsid-dmbtr,                              " Totals 1
          v_sum2  like bsid-dmbtr,                              " Totals 2
          v_sum3  like bsid-dmbtr,                              " Totals 3
          v_sum4  like bsid-dmbtr,                              " Totals 4
          v_sum5  like bsid-dmbtr,                              " Totals 5
          v_sum6  like bsid-dmbtr,                              " Totals 6
          v_sum7  like bsid-dmbtr,                              " Totals 7
          v_sum8  like bsid-dmbe2.                              " Totals 8
    Constants
    constants: c_doc_waers(3) value 'USD',
               c_mitkz type c value 'D'.
                       Selection Screen
    selection-screen : begin of block b1 with frame title text-001.
    parameters: p_bukrs like t001-bukrs obligatory.      " Company Code
    select-options:s_kunnr for kna1-kunnr,               " Customer Number
                   s_land1 for t005-land1,               " Country
                   s_hkont for skb1-saknr.               " G/L Account
    parameters: p_date  like sy-datum obligatory.        " Report Date
    selection-screen: end of block b1.
    selection-screen : begin of block b2 with frame title text-002.
    selection-screen begin of line.
    selection-screen comment 2(30) text-003 for field p_rb1.
    parameters: p_rb1 radiobutton group rb.
    selection-screen end of line.
    selection-screen begin of line.
    selection-screen comment 2(30) text-004 for field p_rb2.
    parameters: p_rb2 radiobutton group rb.
    selection-screen end of line.
    selection-screen: end of block b2.
    selection-screen : begin of block b4 with frame.
    selection-screen begin of line.
    selection-screen comment 2(29) text-038 for field p_chk1.
    parameters: p_chk1 as checkbox.
    selection-screen end of line.
    selection-screen: end of block b4.
    selection-screen : begin of block b3 with frame title text-030.
    selection-screen begin of line.
    selection-screen comment 2(30) text-031 for field p_rb3.
    parameters: p_rb3 radiobutton group rb1.
    selection-screen end of line.
    selection-screen begin of line.
    selection-screen comment 2(30) text-032 for field p_rb4.
    parameters: p_rb4 radiobutton group rb1.
    selection-screen end of line.
    selection-screen: end of block b3.
    *********Initialization**********************************************
    initialization.
    At Selection Screen
    at selection-screen.
    Checking for the input values of selection screen.
      perform screen_check.
    Top-Of-Page
    top-of-page.
      if p_rb3 = 'X'.
        if p_chk1 = 'X'.
    Write the Column Headings for detailed report(in Doc Currency)
          perform col_heading2.
        else.
    Write the Column Headings for detailed report
          perform col_heading.
        endif.
      else.
    Write the Column Headings for summary report
        perform col_heading1.
      endif.
    Start-Of-Selection
    start-of-selection.
    Get the Customer Open Items from BSID
      perform get_open_data.
    Get the Customer Closed Items from BSAD
      perform get_close_data.
    Get the data from BSID,BSAD and KNA1 into one int.table
      perform process_data.
    End-Of-Selection
    end-of-selection.
      if it_report[] is initial.
        write : 'No Documents found'(005).
      else.
        if p_rb3 = 'X'.
    Write the Detailed Report
          perform write_report.
        else.
    Write the Summary Report
          perform write_report1.
        endif.
      endif.
    At Line-Selection
    at line-selection.
    When double clicked on BELNR leave to transaction FB03
      perform line_sel.
    *&      Form  SCREEN_CHECK
    Checking for the input values of selection screen
    form screen_check.
    Validation of Company Code
      clear t001.
      if not p_bukrs is initial.
        select bukrs from t001 up to 1 rows
               into t001-bukrs
               where bukrs = p_bukrs.
        endselect.
        if sy-subrc ne 0.
          message e000 with 'Invalid Company Code'(006).
        endif.
      endif.
    Validation of Customer Number
      clear kna1.
      if not s_kunnr is initial.
        select kunnr from kna1 up to 1 rows
               into kna1-kunnr
               where kunnr in s_kunnr.
        endselect.
        if sy-subrc ne 0.
          message e000 with 'Invalid Customer Number'(007).
        endif.
      endif.
    Validation of Country
      clear t005.
      if not s_land1 is initial.
        select land1 from t005 up to 1 rows
               into t005-land1
               where land1 in s_land1.
        endselect.
        if sy-subrc ne 0.
          message e000 with 'Invalid Country'(036).
        endif.
      endif.
    Validation of GL Account
      clear skb1.
      if not s_hkont is initial.
        select saknr from skb1 up to 1 rows
               into skb1-saknr
               where saknr in s_hkont and
                     mitkz = c_mitkz.
        endselect.
        if sy-subrc ne 0.
          message e000 with 'Invalid GL Reconciliation Account'(037).
        endif.
      endif.
    endform.                    " SCREEN_CHECK
    *&      Form  COL_HEADING
    Write the Column Headings for detailed report
    form col_heading.
      skip .
      write: /88 'DEBTOR AGEING REPORT AS AT:'(019) centered,
             116  p_date  centered, 198 sy-pagno.
      skip .
      write: /2 'CoCode:'(016),13(4) p_bukrs color 3.
      if not s_kunnr is initial.
        if not s_kunnr-high is initial.
          write: 20 'Customer:'(041),33 s_kunnr-low color 3,
                    '-', s_kunnr-high color 3.
        else.
          write: 20 'Customer:'(041),33 s_kunnr-low color 3.
        endif.
      endif.
      if not s_land1 is initial.
        if not s_land1-high is initial.
          write: /2 'Country:'(042),13(4) s_land1-low color 3,
                  '-', s_land1-high color 3.
        else.
          write: /2 'Country:'(042),13(4) s_land1-low color 3.
        endif.
        if not s_hkont is initial.
          if not s_hkont-high is initial.
            write: 20 'GL Account:'(043),33 s_hkont-low color 3,
                      '-', s_hkont-high color 3.
          else.
            write: 20 'GL Account:'(043),33 s_hkont-low color 3.
          endif.
        endif.
      else.
        if not s_hkont is initial.
          if not s_hkont-high is initial.
            write: /2 'GL Account:'(043),14 s_hkont-low color 3,
                      '-', s_hkont-high color 3.
          else.
            write: /2 'GL Account:'(043),14 s_hkont-low color 3.
          endif.
        endif.
      endif.
      write: 183 'Run Date:'(029), sy-datum.
      format color col_heading.
      write at /1(203) sy-uline .
      write: / sy-vline,  2(10) 'Customer'(008) centered,
            12 sy-vline, 13(30) 'Customer Name'(009),
            43 sy-vline, 44(3)  'Cty'(014) centered,
            47 sy-vline, 48(15) 'Amount'(013) right-justified,
            63 sy-vline, 64(4)  'Curr'(011) centered,
            68 sy-vline, 69(15) 'Overdue'(012) centered,
            84 sy-vline, 85(15) '0 - 30 Days'(010) centered,
           100 sy-vline,101(15) '31 - 60 Days'(028) centered,
           116 sy-vline,117(15) '61 - 90 Days'(021) centered,
           132 sy-vline,133(15) '91 - 120 Days'(022) centered,
           148 sy-vline,149(15) 'Above 120 Days'(023) centered,
           164 sy-vline,165(10) 'Due Date'(024) centered,
           175 sy-vline,176(5)  'PayT'(025) centered,
           181 sy-vline,182(10) 'Bill.Doc.'(026) centered,
           192 sy-vline,193(10) 'Doc.No.'(027) centered,
           203 sy-vline.
      write at /1(203) sy-uline.
      format color off.
    endform.                    " COL_HEADING
    *&      Form  COL_HEADING1
    Write the Column Headings for summary report
    form col_heading1.
      skip .
      write: /54 'DEBTOR AGEING REPORT (SUMMARY) AS AT:'(033) centered,
              92  p_date  centered, 158 sy-pagno.
      skip .
      write: /2 'CoCode:'(016), 13(4) p_bukrs color 3.
      if not s_kunnr is initial.
        if not s_kunnr-high is initial.
          write: 20 'Customer:'(041),33 s_kunnr-low color 3,
                    '-', s_kunnr-high color 3.
        else.
          write: 20 'Customer:'(041),33 s_kunnr-low color 3.
        endif.
      endif.
      if not s_land1 is initial.
        if not s_land1-high is initial.
          write: /2 'Country:'(042),13(4) s_land1-low color 3,
                  '-', s_land1-high color 3.
        else.
          write: /2 'Country:'(042),13(4) s_land1-low color 3.
        endif.
        if not s_hkont is initial.
          if not s_hkont-high is initial.
            write: 20 'GL Account:'(043),33 s_hkont-low color 3,
                      '-', s_hkont-high color 3.
          else.
            write: 20 'GL Account:'(043),33 s_hkont-low color 3.
          endif.
        endif.
      else.
        if not s_hkont is initial.
          if not s_hkont-high is initial.
            write: /2 'GL Account:'(043),14 s_hkont-low color 3,
                      '-', s_hkont-high color 3.
          else.
            write: /2 'GL Account:'(043),14 s_hkont-low color 3.
          endif.
        endif.
      endif.
      write: 144 'Run Date:'(029), sy-datum.
      format color col_heading.
      write at /1(164) sy-uline .
      write: / sy-vline,  2(10) 'Customer'(008) centered,
            12 sy-vline, 13(30) 'Customer Name'(009),
            43 sy-vline, 44(3)  'Cty'(014) centered,
            47 sy-vline, 48(15) 'Amount'(013) right-justified,
            63 sy-vline, 64(4)  'Curr'(011) centered,
            68 sy-vline, 69(15) 'Overdue'(012) centered,
            84 sy-vline, 85(15) '0 - 30 Days'(010) centered,
           100 sy-vline,101(15) '31 - 60 Days'(028) centered,
           116 sy-vline,117(15) '61 - 90 Days'(021) centered,
           132 sy-vline,133(15) '91 - 120 Days'(022) centered,
           148 sy-vline,149(15) 'Above 120 Days'(023) centered,
           164 sy-vline.
      write at /1(164) sy-uline.
      format color off.
    endform.                    " COL_HEADING1
    *&      Form  COL_HEADING2
    Write the Column Headings for summary report(in Doc Curr)
    form col_heading2.
      skip .
      write: /99 'DEBTOR AGEING REPORT AS AT:'(019) centered,
             127  p_date  centered, 220 sy-pagno.
      skip .
      write: /2 'CoCode:'(016),13(4) p_bukrs color 3.
      if not s_kunnr is initial.
        if not s_kunnr-high is initial.
          write: 20 'Customer:'(041),33 s_kunnr-low color 3,
                    '-', s_kunnr-high color 3.
        else.
          write: 20 'Customer:'(041),33 s_kunnr-low color 3.
        endif.
      endif.
      if not s_land1 is initial.
        if not s_land1-high is initial.
          write: /2 'Country:'(042),13(4) s_land1-low color 3,
                  '-', s_land1-high color 3.
        else.
          write: /2 'Country:'(042),13(4) s_land1-low color 3.
        endif.
        if not s_hkont is initial.
          if not s_hkont-high is initial.
            write: 20 'GL Account:'(043),33 s_hkont-low color 3,
                      '-', s_hkont-high color 3.
          else.
            write: 20 'GL Account:'(043),33 s_hkont-low color 3.
          endif.
        endif.
      else.
        if not s_hkont is initial.
          if not s_hkont-high is initial.
            write: /2 'GL Account:'(043),14 s_hkont-low color 3,
                      '-', s_hkont-high color 3.
          else.
            write: /2 'GL Account:'(043),14 s_hkont-low color 3.
          endif.
        endif.
      endif.
      write: 204 'Run Date:'(029), sy-datum.
      format color col_heading.
      write at /1(225) sy-uline .
      write: / sy-vline,  2(10) 'Customer'(008) centered,
            12 sy-vline, 13(30) 'Customer Name'(009),
            43 sy-vline, 44(3)  'Cty'(014) centered,
            47 sy-vline, 48(15) 'Amount'(013) right-justified,
            63 sy-vline, 64(4)  'Curr'(011) centered,
            68 sy-vline, 69(15) 'Overdue'(012) centered,
            84 sy-vline, 85(15) '0 - 30 Days'(010) centered,
           100 sy-vline,101(15) '31 - 60 Days'(028) centered,
           116 sy-vline,117(15) '61 - 90 Days'(021) centered,
           132 sy-vline,133(15) '91 - 120 Days'(022) centered,
           148 sy-vline,149(15) 'Above 120 Days'(023) centered,
           164 sy-vline,165(10) 'Due Date'(024) centered,
           175 sy-vline,176(5)  'PayT'(025) centered,
           181 sy-vline,182(10) 'Bill.Doc.'(026) centered,
           192 sy-vline,193(10) 'Doc.No.'(027) centered,
           203 sy-vline,204(16) 'Amount(Doc.Curr)'(039),
           220 sy-vline,221(4)  'Curr'(040),
           225 sy-vline.
      write at /1(225) sy-uline.
      format color off.
    endform.                    " COL_HEADING2
    *&      Form  GET_OPEN_DATA
    Get the Customer Open Items from BSID
    form get_open_data.
      select a~kunnr          " Customer Number
             a~gjahr          " Fiscal Year
             a~belnr          " Acc.Document
             a~buzei          " Item
             a~budat          " Posting Date
             a~shkzg          " Dr/Cr Indicator
             a~dmbtr          " Amount(Local Curr)
             a~wrbtr          " Amount(Doc Curr)
             a~dmbe2          " Amount(USD)
             a~waers          " Currency
             a~zterm          " Payment Terms
             a~vbeln          " Billing Doc
             a~zfbdt          " Baseline Date
             a~zbd1t          " No of days
             a~hkont          " GL account
             b~name1          " Customer Name
             b~land1          " Country
         into table it_bsid
         from bsid as a join kna1 as b
         on akunnr = bkunnr
         where a~bukrs = p_bukrs  and
               a~kunnr in s_kunnr and
               a~hkont in s_hkont and
               b~land1 in s_land1 and
               a~budat le p_date.
      sort it_bsid by kunnr gjahr belnr buzei budat.
    endform.                    " GET_OPEN_DATA
    *&      Form  GET_CLOSE_DATA
    Get the Customer closed Items from BSID
    form get_close_data.
      select a~kunnr          " Customer Number
             a~gjahr          " Fiscal Year
             a~belnr          " Acc.Document
             a~buzei          " Item
             a~budat          " Posting Date
             a~shkzg          " Dr/Cr Indicator
             a~dmbtr          " Amount(Local Curr)
             a~wrbtr          " Amount(Doc Curr)
             a~dmbe2          " Amount(USD)
             a~waers          " Currency
             a~zterm          " Payment Terms
             a~vbeln          " Billing Doc
             a~zfbdt          " Baseline Date
             a~zbd1t          " No of days
             a~hkont          " GL account
             b~name1          " Customer Name
             b~land1          " Country
        into table it_bsad
        from bsad as a join kna1 as b
        on akunnr = bkunnr
        where a~bukrs = p_bukrs  and
              a~kunnr in s_kunnr and
              a~hkont in s_hkont and
              b~land1 in s_land1 and
              a~augdt > p_date   and
              a~budat le p_date.
      sort it_bsad by kunnr gjahr belnr buzei budat.
    endform.                    " GET_CLOSE_DATA
    *&      Form  PROCESS_DATA
    Get the data from BSID,BSAD and KNA1 into one int.table
    form process_data.
    *Move the data from BSID to final output int table
      loop at it_bsid.
        move-corresponding it_bsid to it_report.
        it_report-due_date = it_bsid-zfbdt + it_bsid-zbd1t.
        append it_report.
        clear it_report.
      endloop.
    *Move the data from BSAD to final output int table
      loop at it_bsad.
        move-corresponding it_bsad to it_report.
        it_report-due_date = it_bsad-zfbdt + it_bsad-zbd1t.
        append it_report.
        clear it_report.
      endloop.
      sort it_report by kunnr belnr.
      loop at it_report.
        if it_report-shkzg = 'H'.    " Credit
          it_report-dmbtr = it_report-dmbtr * -1.
          it_report-dmbe2 = it_report-dmbe2 * -1.
        endif.
        v_days = it_report-due_date - p_date.
    For Company Code Currency
        if p_rb1 = 'X'.
          if v_days le 0.
            it_report-due_amnt = it_report-dmbtr.
          elseif v_days between 1 and 30.
            it_report-d_amnt1 = it_report-dmbtr.
          elseif v_days between 31 and 60.
            it_report-d_amnt2 = it_report-dmbtr.
          elseif v_days between 61 and 90.
            it_report-d_amnt3 = it_report-dmbtr.
          elseif v_days between 91 and 120.
            it_report-d_amnt4 = it_report-dmbtr.
          elseif v_days > 120.
            it_report-d_amnt5 = it_report-dmbtr.
          endif.
    For Group Currency
        else.
          if v_days le 0.
            it_report-due_amnt = it_report-dmbe2.
          elseif v_days between 1 and 30.
            it_report-d_amnt1 = it_report-dmbe2.
          elseif v_days between 31 and 60.
            it_report-d_amnt2 = it_report-dmbe2.
          elseif v_days between 61 and 90.
            it_report-d_amnt3 = it_report-dmbe2.
          elseif v_days between 91 and 120.
            it_report-d_amnt4 = it_report-dmbe2.
          elseif v_days > 120.
            it_report-d_amnt5 = it_report-dmbe2.
          endif.
        endif.
        modify it_report index sy-tabix.
      endloop.
    endform.                    " PROCESS_DATA
    *&      Form  WRITE_REPORT
    Write the Detailed Report Output
    form write_report.
      clear: v_sum1,v_sum2,v_sum3,v_sum4,v_waers,
             v_sum5,v_sum6,v_sum7,v_sum8.
      loop at it_report.
       at new kunnr.
          read table it_report index sy-tabix.
          write: / sy-vline,  2(10) it_report-kunnr,
                12 sy-vline, 13(30) it_report-name1,
                43 sy-vline, 44(3)  it_report-land1,
                47 sy-vline.
       endat.
        if p_rb1 = 'X'.
          select single waers from t001
               into v_waers where bukrs = p_bukrs.
          write:   1 sy-vline, 12 sy-vline,
                  43 sy-vline,
                  47 sy-vline,
                  48(15) it_report-dmbtr currency it_report-waers,
                  63 sy-vline, 64(4) v_waers,
                  68 sy-vline.
        else.
          write:   1 sy-vline, 12 sy-vline,
                  43 sy-vline,
                  47 sy-vline,
                  48(15) it_report-dmbe2 currency it_report-waers,
                  63 sy-vline,64(4) c_doc_waers,
                  68 sy-vline.
        endif.
        write:  69(15) it_report-due_amnt currency it_report-waers,
                84 sy-vline,
                85(15) it_report-d_amnt1 currency it_report-waers,
               100 sy-vline,
               101(15) it_report-d_amnt2 currency it_report-waers,
               116 sy-vline,
               117(15) it_report-d_amnt3 currency it_report-waers,
               132 sy-vline,
               133(15) it_report-d_amnt4 currency it_report-waers,
               148 sy-vline,
               149(15) it_report-d_amnt5 currency it_report-waers,
               164 sy-vline,165(10) it_report-due_date,
               175 sy-vline,176(5)  it_report-zterm,
               181 sy-vline,182(10) it_report-vbeln,
               192 sy-vline,193(10) it_report-belnr,
               203 sy-vline.
        if p_chk1 = 'X'.
          write: 204(16) it_report-wrbtr currency it_report-waers,
               220 sy-vline, 221(4) it_report-waers,
               225 sy-vline.
        endif.
       new-line.
    Totals for end of each Customer
        at end of kunnr.
          if p_chk1 = 'X'.
            write at /1(225) sy-uline.
          else.
            write at /1(203) sy-uline.
          endif.
          sum.
          format color 4.
          if p_rb1 = 'X'.
            write: /1 sy-vline, 2 'Total:'(015),
                 12 sy-vline,
                 13(10) it_report-kunnr,
                 43 sy-vline,47 sy-vline,
                 48(15) it_report-dmbtr currency it_report-waers,
                 63 sy-vline, 64(3) v_waers,
                 68 sy-vline,
                 69(15) it_report-due_amnt currency it_report-waers,
                 84 sy-vline,
                 85(15) it_report-d_amnt1 currency it_report-waers,
                100 sy-vline,
                101(15) it_report-d_amnt2 currency it_report-waers,
                116 sy-vline,
                117(15) it_report-d_amnt3 currency it_report-waers,
                132 sy-vline,
                133(15) it_report-d_amnt4 currency it_report-waers,
                148 sy-vline,
                149(15) it_report-d_amnt5 currency it_report-waers,
                164 sy-vline, 175 sy-vline,
                181 sy-vline, 192 sy-vline,
                203 sy-vline.
            if p_chk1 = 'X'.
              write: 220 sy-vline, 225 sy-vline.
            endif.
          else.
            write: /1 sy-vline, 2 'Total:'(015),
                   12 sy-vline,
                 13(10) it_report-kunnr,
                 43 sy-vline,
                 47 sy-vline,
                 48(15) it_report-dmbe2 currency it_report-waers,
                 63 sy-vline, 64(3) c_doc_waers,
                 68 sy-vline,
                 69(15) it_report-due_amnt currency it_report-waers,
                 84 sy-vline,
                 85(15) it_report-d_amnt1 currency it_report-waers,
                100 sy-vline,
                101(15) it_report-d_amnt2 currency it_report-waers,
                116 sy-vline,
                117(15) it_report-d_amnt3 currency it_report-waers,
                132 sy-vline,
                133(15) it_report-d_amnt4 currency it_report-waers,
                148 sy-vline,
                149(15) it_report-d_amnt5 currency it_report-waers,
                164 sy-vline, 175 sy-vline,
                181 sy-vline, 192 sy-vline,
                203 sy-vline.
            if p_chk1 = 'X'.
              write: 220 sy-vline, 225 sy-vline.
            endif.
          endif.
          format color off.
          if p_chk1 = 'X'.
            write at /1(225) sy-uline.
          else.
            write at /1(203) sy-uline.
          endif.
        endat.
        v_sum1 = v_sum1 + it_report-dmbtr.
        v_sum2 = v_sum2 + it_report-due_amnt.
        v_sum3 = v_sum3 + it_report-d_amnt1.
        v_sum4 = v_sum4 + it_report-d_amnt2.
        v_sum5 = v_sum5 + it_report-d_amnt3.
        v_sum6 = v_sum6 + it_report-d_amnt4.
        v_sum7 = v_sum7 + it_report-d_amnt5.
        v_sum8 = v_sum8 + it_report-dmbe2.
    Hiding the Acc doc no for interactic screen.
        hide it_report-belnr.
        hide it_report-budat.
        clear:it_report-belnr, it_report-budat.
      endloop.
    Grand Totals for all customers
      format color 3.
      write: /1 sy-vline, 2 'Gr.Total'(034),
                 12 sy-vline,13 'As At:'(035),p_date,
                 43 sy-vline,
                 47 sy-vline.
    For Company Code Currency
      if p_rb1 = 'X'.
        write:  48(15) v_sum1 currency it_report-waers,
                63 sy-vline, 64(4) v_waers,
                68 sy-vline.
    For Group Currency (USD)
      else.
        write:   48(15) v_sum8 currency it_report-waers,
                 63 sy-vline, 64(3) c_doc_waers,
                 68 sy-vline.
      endif.
      write:     69(15) v_sum2 currency it_report-waers,
                 84 sy-vline,
                 85(15) v_sum3 currency it_report-waers,
                100 sy-vline,
                101(15) v_sum4 currency it_report-waers,
                116 sy-vline,
                117(15) v_sum5 currency it_report-waers,
                132 sy-vline,
                133(15) v_sum6 currency it_report-waers,
                148 sy-vline,
                149(15) v_sum7 currency it_report-waers,
                164 sy-vline, 175 sy-vline,
                181 sy-vline, 192 sy-vline,
                203 sy-vline.
      if p_chk1 = 'X'.
        write: 220 sy-vline, 225 sy-vline.
      endif.
      format color off.
      if p_chk1 = 'X'.
        write at /1(225) sy-uline.
      else.
        write at /1(203) sy-uline.
      endif.
    endform.                    " WRITE_REPORT
    *&      Form  WRITE_REPORT1
    Write the Summary Report Output
    form write_report1.
      clear: v_sum1,v_sum2,v_sum3,v_sum4,v_waers,
             v_sum5,v_sum6,v_sum7,v_sum8.
      loop at it_report.
        at new kunnr.
          read table it_report index sy-tabix.
          write: / sy-vline,  2(10) it_report-kunnr,
                12 sy-vline, 13(30) it_report-name1,
                43 sy-vline, 44(3)  it_report-land1,
                47 sy-vline.
        endat.
        at end of kunnr.
          sum.
          if p_rb1 = 'X'.
            select single waers from t001
              into v_waers where bukrs = p_bukrs.
            write: 1 sy-vline, 12 sy-vline,
                 43 sy-vline,  47 sy-vline,
                 48(15) it_report-dmbtr currency it_report-waers,
                 63 sy-vline, 64(4) v_waers,
                 68 sy-vline,
                 69(15) it_report-due_amnt currency it_report-waers,
                 84 sy-vline,
                 85(15) it_report-d_amnt1 currency it_report-waers,
                100 sy-vline,
                101(15) it_report-d_amnt2 currency it_report-waers,
                116 sy-vline,
                117(15) it_report-d_amnt3 currency it_report-waers,
                132 sy-vline,
                133(15) it_report-d_amnt4 currency it_report-waers,
                148 sy-vline,
                149(15) it_report-d_amnt5 currency it_report-waers,
                164 sy-vline.
          else.
            write: 1 sy-vline, 12 sy-vline,
                 43 sy-vline,  47 sy-vline,
                 48(15) it_report-dmbe2 currency it_report-waers,
                 63 sy-vline, 64(4) c_doc_waers,
                 68 sy-vline,
                 69(15) it_report-due_amnt currency it_report-waers,
                 84 sy-vline,
                 85(15) it_report-d_amnt1 currency it_report-waers,
                100 sy-vline,
                101(15) it_report-d_amnt2 currency it_report-waers,
                116 sy-vline,
                117(15) it_report-d_amnt3 currency it_report-waers,
                132 sy-vline,
                133(15) it_report-d_amnt4 currency it_report-waers,
                148 sy-vline,
                149(15) it_report-d_amnt5 currency it_report-waers,
                164 sy-vline.
          endif.
          write at /1(164) sy-uline.
        endat.
    Totals
        v_sum1 = v_sum1 + it_report-dmbtr.
        v_sum2 = v_sum2 + it_report-due_amnt.
        v_sum3 = v_sum3 + it_report-d_amnt1.
        v_sum4 = v_sum4 + it_report-d_amnt2.
        v_sum5 = v_sum5 + it_report-d_amnt3.
        v_sum6 = v_sum6 + it_report-d_amnt4.
        v_sum7 = v_sum7 + it_report-d_amnt5.
        v_sum8 = v_sum8 + it_report-dmbe2.
    Hiding the Acc doc no for interactic screen.
        hide it_report-belnr.
        hide it_report-budat.
        clear: it_report-belnr,
               it_report-budat.
      endloop.
    Calculation of Grand Totals
      format color 3.
      write: /1 sy-vline, 2 'Gr.Total'(034),
                 12 sy-vline,13 'As At:'(035),p_date,
                 43 sy-vline,
                 47 sy-vline.
    For Company Code Currency
      if p_rb1 = 'X'.
        write:  48(15) v_sum1 currency it_report-waers,
                63 sy-vline, 64(4) v_waers,
                68 sy-vline.
    For Group Currency (USD)
      else.
        write:   48(15) v_sum8 currency it_report-waers,
                 63 sy-vline, 64(3) c_doc_waers,
                 68 sy-vline.
      endif.
      write:     69(15) v_sum2 currency it_report-waers,
                 84 sy-vline,
                 85(15) v_sum3 currency it_report-waers,
                100 sy-vline,
                101(15) v_sum4 currency it_report-waers,
                116 sy-vline,
                117(15) v_sum5 currency it_report-waers,
                132 sy-vline,
                133(15) v_sum6 currency it_report-waers,
                148 sy-vline,
                149(15) v_sum7 currency it_report-waers,
                164 sy-vline.
      format color off.
      write at /1(164) sy-uline.
    endform.                    " WRITE_REPORT1
    *&      Form  LINE_SEL
    When double clicked on BELNR leave to transaction FB03
    form line_sel.
      data: lv_field(20),
            lv_value(10),
            lv_date(10),
            lv_gjahr like bsad-gjahr.
      get cursor field lv_field value lv_value.
      if lv_field = 'IT_REPORT-BELNR'.
        if not lv_value is initial.
          read current line field value it_report-budat into lv_date.
          lv_gjahr = lv_date+6(4).
          set parameter id 'BUK' field p_bukrs.
          set parameter id 'GJR' field lv_gjahr.
          set parameter id 'BLN' field lv_value.
          call transaction 'FB03' and skip first screen.
        endif.
      endif.
    endform.                    " LINE_SEL
    Regards,
    Anji

  • ALV Totals , Subtotals for a particular field in ALV Grid report

    Hi,
    I have an issue in ALV totals and subtotals.
    Scenario is like this.
    i have a vendor data to be pulled out of SAP and to be shown in the form of report.
    i am populating all the data and doing do_sum based on Vendor ( has expansin & collapse option ) and display the number of reports .
    Vendor -
    100
    Vendor1 -
    1
    Vendor2----
    2.
    Vendor100----
    100.
    but my problem is in the same report i have a date field .
    if i have a five vendors created on 03/03/2008. in the same report for the date field having ( expansion & collapse ) , when i expand based on that date can i be able to sum up all the vendors created on 03/03/2008 and display in the same report along with the vendor count.
    Let me know . Thank you in advance
    Regards,
    Ry

    Hi Roby,
    Have a look at this sample code
    It will help u,
    REPORT ZIN_FI_AGEING
           message-id zbdc
           no standard page heading.
    Title                   : For Ageing Details
    Author                  :
    Date                    : 22/11/2004
    Transport/Correction Id :
    Clarify case ID         :
    Application             : FI
    Program Type            :
    Frequency               :
    Purpose                 :
    Comments                :
    Request No              :
      TABLES DELCARATIONS
    Tables: zzgeinz9a,    "Actual line item table
            t001.         "Plants/Branches
      ALV TTPE DELCARATIONS
    type-pools: slis.
    *Type Declarations for Field Catalog
    data : i_fldcat_head type slis_t_fieldcat_alv,
           wa_fldcat_head type slis_fieldcat_alv.
    *Type Declarations for ALV Events
    data : i_events type slis_t_event,
           wa_event like line of i_events.
    *Type Declarations for Layout Design
    data : wa_layout type slis_layout_alv.
    *Type Declarations for Sorting Fields
    data:  it_sort type slis_sortinfo_alv occurs 0 with header line.
    *Type Declarations for Displaying Images on Grid
    data : i_comment type slis_t_listheader,
           wa_comment type slis_listheader.
    *Type Declarations for Grouping fields
    data : wa_group type slis_sp_group_alv,
           i_group type slis_t_sp_group_alv.
      DATA DELCARATIONS
    data: v_flag,                 "Status Flag
          v_repid like sy-repid,  "Program Name
          p_year(4) type c,       "Year
          v_due_days type i.      "To hold the due days
      CONSTANTS DELCARATIONS
    constants: c_x type c value 'X',
               c_bukrs(4) type c value '0373'.
      INTERNAL TABLES DELCARATIONS
    *--Internal table to hold the required data
    data: begin of it_final_vendor occurs 0,
            rzzlifnr    like zzgeinz9a-rzzlifnr,  "Vendor
            name1       like lfa1-name1,          "Vendor Name
            docnr       like zzgeinz9a-DOCNR,     "Accounting Doc No
            refdocnr    like zzgeinz9a-REFDOCNR,  "Reference document no
            belnr       like bkpf-belnr,          "FI Doc No
            doc_date    like bkpf-awkey,          "Document Date
            zbd1t       like bsik-zbd1t,          "Cash discount days 1
            bldat       like bkpf-bldat,          "Document Date
            due_date    like bkpf-bldat,          "Due Date
            due_days    type i,                   "Due Days
            rzz_ebeln   like zzgeinz9a-rzz_ebeln, "P.O. Ref No
            not_due     like zzgeinz9a-hsl,       "Not Yet Due
            hsl         like zzgeinz9a-hsl,       "local currency
            found       type c,                   "Existance Flag
          end of it_final_vendor.
    data: begin of it_final_vendor_temp occurs 0,
            rzzlifnr    like zzgeinz9a-rzzlifnr,  "Vendor
            name1       like lfa1-name1,          "Vendor Name
            belnr       like bkpf-belnr,          "FI Doc No
            bldat       like bkpf-bldat,          "Document Date
            rzz_ebeln   like zzgeinz9a-rzz_ebeln, "P.O. Ref No
            hsl        like zzgeinz9a-hsl,        "local currency
            due_date    like bkpf-bldat,          "Due Date
            due_days    type i,                   "Due Days
            not_due     like zzgeinz9a-hsl,       "Not Yet Due
            buck_0_30   like zzgeinz9a-hsl,       "Invoiceamt in localcurr
            buck_31_60  like zzgeinz9a-hsl,       "Invoiceamt in localcurr
            buck_61_90  like zzgeinz9a-hsl,       "Invoiceamt in localcurr
            buck_91_180 like zzgeinz9a-hsl,       "Invoiceamt in localcurr
            buck_180    like zzgeinz9a-hsl,       "Invoiceamt in localcurr
            docnr       like zzgeinz9a-DOCNR,     "Accounting Doc No
            refdocnr    like zzgeinz9a-REFDOCNR,  "Reference document no
            doc_date    like bkpf-awkey,          "Document Date
            found       type c,                   "Existance Flag
          end of it_final_vendor_temp.
    data: begin of it_final_customer occurs 0,
            rzzkunnr    like zzgeinz9a-rzzkunnr,  "Customer
            name1       like kna1-name1,          "Customer Name
            docnr       like zzgeinz9a-DOCNR,     "Accounting Doc No
            refdocnr    like zzgeinz9a-REFDOCNR,  "Reference document no
            belnr       like bkpf-belnr,          "FI Doc No
            doc_date    like bkpf-awkey,          "Document Date
            zbd1t       like bsik-zbd1t,          "Cash discount days 1
            bldat       like bkpf-bldat,          "Document Date
            due_date    like bkpf-bldat,          "Due Date
            due_days    type i,                   "Due Days
            rzz_ebeln   like zzgeinz9a-rzz_ebeln, "P.O. Ref No
            not_due     like zzgeinz9a-hsl,       "Not Yet Due
            hsl         like zzgeinz9a-hsl,       "local currency
            found       type c,                   "Existance Flag
          end of it_final_customer.
    data: begin of it_final_customer_temp occurs 0,
            rzzkunnr    like zzgeinz9a-rzzkunnr,  "Customer
            name1       like kna1-name1,          "Customer Name
            belnr       like bkpf-belnr,          "FI Doc No
            bldat       like bkpf-bldat,          "Document Date
            rzz_ebeln   like zzgeinz9a-rzz_ebeln, "P.O. Ref No
            hsl        like zzgeinz9a-hsl,        "local currency
            due_date    like bkpf-bldat,          "Due Date
            due_days    type i,                   "Due Days
            not_due     like zzgeinz9a-hsl,       "Not Yet Due
            buck_0_30   like zzgeinz9a-hsl,       "Invoiceamt in localcurr
            buck_31_60  like zzgeinz9a-hsl,       "Invoiceamt in localcurr
            buck_61_90  like zzgeinz9a-hsl,       "Invoiceamt in localcurr
            buck_91_180 like zzgeinz9a-hsl,       "Invoiceamt in localcurr
            buck_180    like zzgeinz9a-hsl,       "Invoiceamt in localcurr
            docnr       like zzgeinz9a-DOCNR,     "Accounting Doc No
            refdocnr    like zzgeinz9a-REFDOCNR,  "Reference document no
            doc_date    like bkpf-awkey,          "Document Date
            found       type c,                   "Existance Flag
          end of it_final_customer_temp.
    *--Internal Table to hold the Cash discount days 1 for Vendors
    data: begin of it_final_bsik occurs 0,
            belnr like bsik-belnr,
            zbd1t like bsik-zbd1t,
          end of it_final_bsik.
    *--Internal Table to hold the Cash discount days 1 for Customers
    data: begin of it_final_bsid occurs 0,
            belnr like bsid-belnr,
            zbd1t like bsid-zbd1t,
          end of it_final_bsid.
      INITIALIZATION
    v_repid = sy-repid.
      SELECTION SCREEN
    selection-screen: begin of block b1 with frame title text-h01.
    selection-screen skip.
    select-options: s_vendor for zzgeinz9a-rzzlifnr modif id ven.
    parameters: p_comp1 like t001-bukrs modif id ven.
    parameters: p_rundt1 like bkpf-bldat modif id ven.
    select-options: s_cust for zzgeinz9a-rzzkunnr modif id cst.
    parameters: p_comp2 like t001-bukrs modif id cst.
    parameters: p_rundt2 like bkpf-bldat modif id cst.
    selection-screen skip.
    selection-screen: begin of block b2 with frame title text-h02.
    parameters : p_vendor radiobutton group gr1 default 'X'
                                      user-command test,
                 p_cust  radiobutton group gr1.
    selection-screen: end of block b2.
    selection-screen: end of block b1.
    **************************AT Selection Screen OutPut ******************
    at selection-screen output.
      loop at screen.
        if p_cust = 'X'.
          if screen-group1 = 'VEN'.
            screen-active = '0'.
            screen-input = '0'.
            screen-output = '0'.
            screen-invisible = '0'.
          endif.
        elseif p_vendor = 'X'.
          if screen-group1 = 'CST'.
            screen-active = '0'.
            screen-input = '0'.
            screen-output = '0'.
            screen-invisible = '0'.
          endif.
        endif.
        modify screen.
      endloop.
      SELECTION SCREEN ON
    at selection-screen on s_vendor.
    *--Validating Vendor
      if not s_vendor[] is initial.
        perform validate_s_vendor.
      endif.
    at selection-screen on s_cust.
    *--Validating Customer
      if not s_cust[] is initial.
        perform validate_s_cust.
      endif.
    at selection-screen on p_comp1.
    *--Validating Company Code.
      if not p_comp1 is initial.
        perform validate_p_comp1.
      endif.
    at selection-screen on p_comp2.
    *--Validating Company Code.
      if not p_comp2 is initial.
        perform validate_p_comp2.
      endif.
      START OF SELECTION
    start-of-selection.
    if p_vendor = 'X'.
       perform get_vendor_data.
    elseif p_cust = 'X'.
       perform get_customer_data.
    endif.
      END OF SELECTION
    end-of-selection.
    if p_vendor = 'X'.
    *--Generating the output for vendor
      perform generate_field_catalog_vendor.
      perform get_events_vendor.
      perform generate_layout_vendor.
      perform generate_sort_vendor.
      perform generate_group_vendor.
      perform disp_alv_grid_vendor.
    elseif p_cust = 'X'.
    *--Generating the output for customer
      perform generate_field_catalog_cust.
      perform get_events_customer.
      perform generate_layout_customer.
      perform generate_sort_customer.
      perform generate_group_customer.
      perform disp_alv_grid_customer.
    endif.
    *&      Form  validate_s_vendor
          Validating the Vendor
    form validate_s_vendor.
      select rzzlifnr up to 1 rows
      into (zzgeinz9a-rzzlifnr)
      from zzgeinz9a
      where rzzlifnr in s_vendor.
      endselect.
      if sy-subrc ne 0.
        message e004 with 'Invalid Range of Vendor'(002)
    s_vendor-low 'To'(006) s_vendor-high.
      endif.
    endform.                    " validate_s_vendor
    *&      Form  validate_s_cust
          Validating the Customer
    form validate_s_cust.
       select rzzkunnr up to 1 rows
       into (zzgeinz9a-rzzkunnr)
       from zzgeinz9a
       where rzzkunnr in s_cust.
       endselect.
       if sy-subrc ne 0.
         message e004 with 'Invalid Range of Customer'(005)
    s_cust-low 'To'(006) s_cust-high.
      endif.
    endform.                    " validate_s_cust
    *&      Form  validate_p_comp1
          Validating the Company Code
    form validate_p_comp1.
      select single bukrs
             into   (t001-bukrs)
             from   t001
             where  bukrs eq p_comp1.
      if sy-subrc ne 0.
        message e004 with 'Company Code'(004) p_comp1 'Does not Exists'(003)
      endif.
    endform.                    " validate_p_comp1
    *&      Form  validate_p_comp2
          Validating the Company Code
    form validate_p_comp2.
      select single bukrs
             into   (t001-bukrs)
             from   t001
             where  bukrs eq p_comp2.
      if sy-subrc ne 0.
        message e004 with 'Company Code'(004) p_comp2 'Does not Exists'(003)
      endif.
    endform.                    " validate_p_comp2
    *&      Form  get_vendor_data
          Getting the Vendor Related Docs
    form get_vendor_data.
    select a~rzzlifnr
            b~name1
            a~docnr
            a~refdocnr
            a~rzz_ebeln
            a~hsl
        into corresponding fields of table it_final_vendor
        from zzgeinz9a as a
        inner join lfa1 as b
        on arzzlifnr = blifnr
        where rzzlifnr in s_vendor
        and   rbukrs   eq p_comp1.
        if sy-subrc eq 0.
          v_flag = 'X'.
          p_year = sy-datum+0(4).
          perform get_doc_date using p_comp1
                                     p_year.
          perform move_records.
          sort it_final_vendor by rzzlifnr.
          perform generate_data.
        else.
          v_flag = space.
        endif.
    endform.                    " get_vendor_data
    *&      Form  get_customer_data
          Getting the Customer Related Docs
    form get_customer_data.
    select a~rzzkunnr
            b~name1
            a~docnr
            a~refdocnr
            a~rzz_ebeln
            a~hsl
        into corresponding fields of table it_final_customer
        from zzgeinz9a as a
        inner join kna1 as b
        on arzzkunnr = bkunnr
        where rzzkunnr in s_cust
        and   rbukrs   eq p_comp2.
        if sy-subrc eq 0.
          v_flag = 'X'.
          p_year = sy-datum+0(4).
          perform get_doc_date_cust using p_comp2
                                          p_year.
          perform move_records_cust.
          sort it_final_customer by rzzkunnr.
          perform generate_data_cust.
        else.
          v_flag = space.
        endif.
    endform.                    " get_customer_data
    *&      Form  get_doc_date
          Getting the Document Date and FI Doc No
         -->P_P_COMP1 Company Code
         -->P_P_YEAR  Fiscal Year
    form get_doc_date using    p_p_comp1
                               p_p_year.
      loop at it_final_vendor.
        concatenate it_final_vendor-refdocnr '*' into
    it_final_vendor-doc_date.
        modify it_final_vendor index sy-tabix.
    endloop.
    clear it_final_vendor.
    data: v_doc_date(11) type c,
          v_belnr like bkpf-belnr,
          v_bldat like bkpf-bldat.
          loop at it_final_vendor.
           concatenate it_final_vendor-refdocnr '%' into v_doc_date.
            select single belnr
                          bldat
                   into corresponding fields of it_final_vendor
                   from bkpf
                   where bukrs eq p_p_comp1
                   and   gjahr eq p_p_year
                   and   awkey like v_doc_date.
                   modify it_final_vendor.
           endloop.
        clear:it_final_vendor.
    endform.                    " get_doc_date
    *&      Form  move_records
          Moving records to final internal table
    form move_records.
    *--Checking the existance of belnr in bsik
    clear it_final_vendor.
      select belnr
             zbd1t
             into table it_final_bsik
             from bsik
             for all entries in it_final_vendor
             where belnr eq it_final_vendor-belnr
             and   bukrs eq c_bukrs.
    clear it_final_bsik.
      loop at it_final_vendor.
        read table it_final_bsik with key belnr = it_final_vendor-belnr.
        if sy-subrc eq 0.
          it_final_vendor-zbd1t = it_final_bsik-zbd1t.
          it_final_vendor-due_date = it_final_vendor-bldat +
    it_final_bsik-zbd1t.
          it_final_vendor-found    = 'X'.
          modify it_final_vendor.
        endif.
      endloop.
    endform.                    " move_records
    *&      Form  generate_data
          Segregating the records based on due_date
    form generate_data.
      delete it_final_vendor[] where found ne 'X'.
      sort it_final_vendor by belnr.
      loop at it_final_vendor.
        if it_final_vendor-due_date > p_rundt1.
          move-corresponding it_final_vendor to it_final_vendor_temp.
          move it_final_vendor-hsl to it_final_vendor_temp-not_due.
        elseif it_final_vendor-due_date < p_rundt1.
          it_final_vendor-due_days = p_rundt1 - it_final_vendor-DUE_DATE.
        endif.
    *--filling 0-30 bucket.
        if it_final_vendor-due_days ge 0 AND it_final_vendor-due_days le 30.
          move-corresponding it_final_vendor to it_final_vendor_temp.
          move it_final_vendor-hsl to it_final_vendor_temp-buck_0_30.
    *--filling 31-60 bucket.
    elseif it_final_vendor-due_days ge 31 AND it_final_vendor-due_days le 60
          move-corresponding it_final_vendor to it_final_vendor_temp.
          move it_final_vendor-hsl to it_final_vendor_temp-buck_31_60.
    *--filling 61-90 bucket.
    elseif it_final_vendor-due_days ge 61 AND it_final_vendor-due_days le 90
          move-corresponding it_final_vendor to it_final_vendor_temp.
          move it_final_vendor-hsl to it_final_vendor_temp-buck_61_90.
    *--filling 91-180 bucket.
        elseif it_final_vendor-due_days ge 91 AND it_final_vendor-due_days
    le 180.
          move-corresponding it_final_vendor to it_final_vendor_temp.
          move it_final_vendor-hsl to it_final_vendor_temp-buck_91_180.
    *--filling 180 bucket.
        elseif it_final_vendor-due_days gt 180.
          move-corresponding it_final_vendor to it_final_vendor_temp.
          move it_final_vendor-hsl to it_final_vendor_temp-buck_180.
        endif.
         append it_final_vendor_temp.
         clear it_final_vendor_temp.
      endloop.
    endform.                    " generate_data
    *&      Form  DISP_ALV_GRID_VENDOR
          Displaying the output in grid For Vendor
    form DISP_ALV_GRID_VENDOR.
    *--Generating the OUTPUT GRID FOR VENDOR
      call function 'REUSE_ALV_GRID_DISPLAY'
       EXPORTING
        I_INTERFACE_CHECK                 = ' '
        I_BYPASSING_BUFFER                =
        I_BUFFER_ACTIVE                   = ' '
          I_CALLBACK_PROGRAM                = v_repid
        I_CALLBACK_PF_STATUS_SET          = ' '
        I_CALLBACK_USER_COMMAND           = ' '
        I_CALLBACK_TOP_OF_PAGE            = ' '
        I_CALLBACK_HTML_TOP_OF_PAGE       = ' '
        I_CALLBACK_HTML_END_OF_LIST       = ' '
        I_STRUCTURE_NAME                  =
        I_BACKGROUND_ID                   = ' '
        I_GRID_TITLE                      =
        I_GRID_SETTINGS                   =
          IS_LAYOUT                         = wa_layout
          IT_FIELDCAT                       = i_fldcat_head
        IT_EXCLUDING                      =
          IT_SPECIAL_GROUPS                 = i_group
          IT_SORT                           = it_sort[]
        IT_FILTER                         =
        IS_SEL_HIDE                       =
        I_DEFAULT                         = 'X'
        I_SAVE                            = ' '
        IS_VARIANT                        =
          IT_EVENTS                         = i_events
        IT_EVENT_EXIT                     =
        IS_PRINT                          =
        IS_REPREP_ID                      =
        I_SCREEN_START_COLUMN             = 0
        I_SCREEN_START_LINE               = 0
        I_SCREEN_END_COLUMN               = 0
        I_SCREEN_END_LINE                 = 0
        IT_ALV_GRAPHICS                   =
        IT_ADD_FIELDCAT                   =
        IT_HYPERLINK                      =
        I_HTML_HEIGHT_TOP                 =
        I_HTML_HEIGHT_END                 =
        IT_EXCEPT_QINFO                   =
      IMPORTING
        E_EXIT_CAUSED_BY_CALLER           =
        ES_EXIT_CAUSED_BY_USER            =
        tables
          t_outtab                          = it_final_vendor_temp
       EXCEPTIONS
         PROGRAM_ERROR                     = 1
         OTHERS                            = 2
      if sy-subrc <> 0.
    MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
            WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
      endif.
    endform.                    " DISP_ALV_GRID
    *&      Form  get_doc_date_cust
          text
         -->P_P_COMP2 Company Code
         -->P_P_YEAR  Fiscal Year
    form get_doc_date_cust using    p_p_comp2
                                    p_p_year.
      loop at it_final_customer.
        concatenate it_final_customer-refdocnr '*' into
    it_final_customer-doc_date.
        modify it_final_customer index sy-tabix.
    endloop.
    clear it_final_customer.
    data: v_doc_date(11) type c,
          v_belnr like bkpf-belnr,
          v_bldat like bkpf-bldat.
          loop at it_final_customer.
           concatenate it_final_customer-refdocnr '%' into v_doc_date.
            select single belnr
                          bldat
                   into corresponding fields of it_final_customer
                   from bkpf
                   where bukrs eq p_p_comp2
                   and   gjahr eq p_p_year
                   and   awkey like v_doc_date.
                   modify it_final_customer.
           endloop.
        clear:it_final_customer.
    endform.                    " get_doc_date_cust
    *&      Form  move_records_cust
          Moving Customer Data to Final Internal Table
    form move_records_cust.
    *--Checking the existance of belnr in bsid
      select belnr
             zbd1t
             into table it_final_bsid
             from bsid
             for all entries in it_final_customer
             where belnr eq it_final_customer-belnr
             and   bukrs eq c_bukrs.
    clear it_final_bsid.
      loop at it_final_customer.
        read table it_final_bsid with key belnr = it_final_customer-belnr.
        if sy-subrc eq 0.
          it_final_customer-zbd1t    = it_final_bsid-zbd1t.
          it_final_customer-due_date = it_final_customer-bldat +
    it_final_bsid-zbd1t.
          it_final_customer-found    = 'X'.
          modify it_final_customer.
        endif.
      endloop.
    endform.                    " move_records_cust
    *&      Form  generate_data_cust
          Generating the Customer Output
    form generate_data_cust.
      delete it_final_customer[] where found ne 'X'.
      sort it_final_customer by belnr.
      loop at it_final_customer.
        if it_final_customer-due_date > p_rundt2.
         move-corresponding it_final_customer to it_final_customer_temp.
         move it_final_customer-hsl to it_final_customer_temp-not_due.
        elseif it_final_customer-due_date < p_rundt2.
         it_final_customer-due_days = p_rundt2 - it_final_customer-DUE_DATE.
        endif.
    *--filling 0-30 bucket.
    if it_final_customer-due_days ge 0 AND it_final_customer-due_days le 30
          move-corresponding it_final_customer to it_final_customer_temp.
          move it_final_customer-hsl to it_final_customer_temp-buck_0_30.
    *--filling 31-60 bucket.
    elseif it_final_customer-due_days ge 31 AND it_final_customer-due_days
    le 60
          move-corresponding it_final_customer to it_final_customer_temp.
          move it_final_customer-hsl to it_final_customer_temp-buck_31_60.
    *--filling 61-90 bucket.
    elseif it_final_customer-due_days ge 61 AND it_final_customer-due_days
    le 90
          move-corresponding it_final_customer to it_final_customer_temp.
          move it_final_customer-hsl to it_final_customer_temp-buck_61_90.
    *--filling 91-180 bucket.
        elseif it_final_customer-due_days ge 91 AND
    it_final_customer-due_days
    le 180.
          move-corresponding it_final_customer to it_final_customer_temp.
          move it_final_customer-hsl to it_final_customer_temp-buck_91_180.
    *--filling 180 bucket.
        elseif it_final_customer-due_days gt 180.
          move-corresponding it_final_customer to it_final_customer_temp.
          move it_final_customer-hsl to it_final_customer_temp-buck_180.
        endif.
         append it_final_customer_temp.
         clear it_final_customer_temp.
      endloop.
    endform.                    " generate_data_cust
    *&      Form  generate_field_catalog_vendor
          Generating the Field Catalog for Vendor
    form generate_field_catalog_vendor.
      call function 'REUSE_ALV_FIELDCATALOG_MERGE'
       EXPORTING
          I_PROGRAM_NAME               = v_repid
          I_INTERNAL_TABNAME           = 'IT_FINAL_VENDOR_TEMP'
        I_STRUCTURE_NAME             =
        I_CLIENT_NEVER_DISPLAY       = 'X'
          I_INCLNAME                   = v_repid
        I_BYPASSING_BUFFER           =
        I_BUFFER_ACTIVE              =
        changing
          ct_fieldcat                  = i_fldcat_head
       EXCEPTIONS
         INCONSISTENT_INTERFACE       = 1
         PROGRAM_ERROR                = 2
         OTHERS                       = 3
      if sy-subrc <> 0.
    MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
            WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
      endif.
      if not i_fldcat_head[] is initial.
        loop at i_fldcat_head into wa_fldcat_head.
        case wa_fldcat_head-fieldname.
         when 'RZZLIFNR'.
            wa_fldcat_head-col_pos = '1'.
            wa_fldcat_head-ref_tabname = ' '.
            wa_fldcat_head-seltext_m  = 'Vendor No'(001).
            wa_fldcat_head-ddictxt = 'M'.
            wa_fldcat_head-outputlen = '12'.
         when 'NAME1'.
            wa_fldcat_head-col_pos = '2'.
            wa_fldcat_head-seltext_m  = 'Vendor Name'(007).
            wa_fldcat_head-ddictxt = 'M'.
            wa_fldcat_head-outputlen = '35'.
         when 'BELNR'.
            wa_fldcat_head-col_pos = '3'.
            wa_fldcat_head-seltext_m  = 'Invoice No'(008).
            wa_fldcat_head-ddictxt = 'M'.
            wa_fldcat_head-outputlen = '12'.
            wa_fldcat_head-KEY       = ' '.
         when 'BLDAT'.
            wa_fldcat_head-col_pos = '4'.
            wa_fldcat_head-seltext_m  = 'Document Date'(009).
            wa_fldcat_head-ddictxt = 'M'.
            wa_fldcat_head-outputlen = '13'.
            wa_fldcat_head-ref_tabname = ' '.
         when 'RZZ_EBELN'.
            wa_fldcat_head-col_pos = '5'.
            wa_fldcat_head-seltext_m  = 'PO.Ref.No'(010).
            wa_fldcat_head-ddictxt = 'M'.
            wa_fldcat_head-outputlen = '13'.
            wa_fldcat_head-ref_tabname = ' '.
         when 'HSL'.
            wa_fldcat_head-col_pos = '6'.
            wa_fldcat_head-seltext_m  = 'Invoice Amount'(011).
            wa_fldcat_head-ddictxt = 'M'.
            wa_fldcat_head-outputlen = '16'.
            wa_fldcat_head-do_sum = 'X'.
         when 'DUE_DATE'.
            wa_fldcat_head-col_pos = '7'.
            wa_fldcat_head-seltext_m  = 'Due Date'(012).
            wa_fldcat_head-ddictxt = 'M'.
            wa_fldcat_head-outputlen = '12'.
            wa_fldcat_head-ref_tabname = ' '.
         when 'DUE_DAYS'.
            wa_fldcat_head-col_pos = '8'.
            wa_fldcat_head-seltext_m  = 'Due Days'(013).
            wa_fldcat_head-ddictxt = 'M'.
            wa_fldcat_head-outputlen = '9'.
         when 'NOT_DUE'.
            wa_fldcat_head-col_pos = '9'.
            wa_fldcat_head-seltext_m  = 'Not Due'(014).
            wa_fldcat_head-ddictxt = 'M'.
            wa_fldcat_head-outputlen = '16'.
            wa_fldcat_head-do_sum = 'X'.
         when 'BUCK_0_30'.
            wa_fldcat_head-col_pos = '10'.
            wa_fldcat_head-seltext_m  = '0 To 30'(015).
            wa_fldcat_head-ddictxt = 'M'.
            wa_fldcat_head-outputlen = '16'.
            wa_fldcat_head-do_sum = 'X'.
         when 'BUCK_31_60'.
            wa_fldcat_head-col_pos = '11'.
            wa_fldcat_head-seltext_m  = '31 To 60'(016).
            wa_fldcat_head-ddictxt = 'M'.
            wa_fldcat_head-outputlen = '16'.
            wa_fldcat_head-do_sum = 'X'.
         when 'BUCK_61_90'.
            wa_fldcat_head-col_pos = '12'.
            wa_fldcat_head-seltext_m  = '61 To 90'(017).
            wa_fldcat_head-ddictxt = 'M'.
            wa_fldcat_head-outputlen = '16'.
            wa_fldcat_head-do_sum = 'X'.
         when 'BUCK_91_180'.
            wa_fldcat_head-col_pos = '13'.
            wa_fldcat_head-seltext_m  = '91 To 180'(018).
            wa_fldcat_head-ddictxt = 'M'.
            wa_fldcat_head-outputlen = '16'.
            wa_fldcat_head-do_sum = 'X'.
         when 'BUCK_180'.
            wa_fldcat_head-col_pos = '14'.
            wa_fldcat_head-seltext_m  = 'Beyond 180'(019).
            wa_fldcat_head-ddictxt = 'M'.
            wa_fldcat_head-outputlen = '16'.
            wa_fldcat_head-do_sum = 'X'.
        when 'DOCNR'.
            wa_fldcat_head-no_out = 'X'.
        when 'REFDOCNR'.
            wa_fldcat_head-no_out = 'X'.
        when 'DOC_DATE'.
            wa_fldcat_head-no_out = 'X'.
        when 'FOUND'.
            wa_fldcat_head-no_out = 'X'.
         endcase.
         modify i_fldcat_head from wa_fldcat_head index sy-tabix.
        endloop.
      endif.
    endform.                    " generate_field_catalog_vendor
    *&      Form  get_events_vendor
          Getting ALV Events
    form get_events_vendor.
        call function 'REUSE_ALV_EVENTS_GET'
      EXPORTING
        I_LIST_TYPE           = 0
       importing
         et_events             = i_events
      exceptions
        list_type_wrong       = 1
        others                = 2
      if sy-subrc <> 0.
    MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
            WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
      endif.
      if not i_events[] is initial.
       read table i_events into wa_event with key name = 'TOP_OF_PAGE'(024)
       wa_event-form = 'GENERATE_USERCOMMAND'.
       modify i_events from wa_event index sy-tabix.
       read table i_events into wa_event with key name = 'END_OF_LIST'(025)
       wa_event-form = 'GENERATE_USERCOMMAND_FOOTER'.
       modify i_events from wa_event index sy-tabix.
      endif.
    endform.                    " get_events_vendor
    *&      Form  GENERATE_USERCOMMAND
          Displaying Header-Text and Logo on Grid
    form generate_usercommand .
      clear i_comment[].
      wa_comment-typ = 'H'.
      wa_comment-info = 'Vendor Ageing Report'(026).
      append wa_comment to i_comment.
      call function 'REUSE_ALV_COMMENTARY_WRITE'
        exporting
          it_list_commentary = i_comment
          i_logo             = 'ENJOYSAP_LOGO'
        I_END_OF_LIST_GRID       = 'X'
    endform.                    " GENERATE_USERCOMMAND
    *&      Form  GENERATE_USERCOMMAND_FOOTER
          Displaying Footer-Text on Grid
    form generate_usercommand_footer.
      clear i_comment[].
      clear wa_comment.
      wa_comment-typ = 'S'.
      wa_comment-key = 'GE-Betz'(027).
      append wa_comment to i_comment.
      call function 'REUSE_ALV_COMMENTARY_WRITE'
        exporting
          it_list_commentary       = i_comment
        I_LOGO                  = ''
          i_end_of_list_grid       = 'X'.
    endform.                    " GENERATE_USERCOMMAND_FOOTER
    *&      Form  generate_layout_vendor
          Generating the ALV Layout
    form generate_layout_vendor.
      WA_LAYOUT-COLWIDTH_OPTIMIZE = 'X'.     "OPTIMIZING FIELD WIDTH
      wa_layout-zebra = 'X'.                  "PUTTING ZEBRA COLORS
      wa_layout-confirmation_prompt = 'X'.    "DISPLAYS CONFIRMATION DIALOG
      wa_layout-totals_text = 'Totals'(028).       "DISPLAYS TOTALS TEXT
      wa_layout-subtotals_text = 'Sub Totals'(029)."DISPLAYS SUBTOTALS TEXT
    endform.                    " generate_layout_vendor
    *&      Form  generate_sort_vendor
          Sorting the Internal Table by Vendor
    form generate_sort_vendor.
      it_sort-fieldname = 'RZZLIFNR'.
      it_sort-tabname = 'IT_FINAL_VENDOR_TEMP'.
      it_sort-up = 'X'.
      it_sort-subtot = 'X'.
      append it_sort.
    endform.                    " generate_sort_vendor
    *&      Form  generate_group_vendor
          Grouping the Data
    form generate_group_vendor.
      clear i_group.
      wa_group-sp_group = 'A'.
      wa_group-text  = 'RZZLIFNR'.
      append wa_group to i_group.
    endform.                    " generate_group_vendor
    *&      Form  GENERATE_FIELD_CATALOG_CUST
          Generating Field Catalog for Customer
    form GENERATE_FIELD_CATALOG_CUST.
      call function 'REUSE_ALV_FIELDCATALOG_MERGE'
       EXPORTING
          I_PROGRAM_NAME               = v_repid
          I_INTERNAL_TABNAME           = 'IT_FINAL_CUSTOMER_TEMP'
        I_STRUCTURE_NAME             =
        I_CLIENT_NEVER_DISPLAY       = 'X'
          I_INCLNAME                   = v_repid
        I_BYPASSING_BUFFER           =
        I_BUFFER_ACTIVE              =
        changing
          ct_fieldcat                  = i_fldcat_head
       EXCEPTIONS
         INCONSISTENT_INTERFACE       = 1
         PROGRAM_ERROR                = 2
         OTHERS                       = 3
      if sy-subrc <> 0.
    MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
            WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
      endif.
      if not i_fldcat_head[] is initial.
        loop at i_fldcat_head into wa_fldcat_head.
        case wa_fldcat_head-fieldname.
         when 'RZZKUNNR'.
            wa_fldcat_head-col_pos = '1'.
            wa_fldcat_head-ref_tabname = ' '.
            wa_fldcat_head-seltext_m  = 'Customer No'(020).
            wa_fldcat_head-ddictxt = 'M'.
            wa_fldcat_head-outputlen = '12'.
         when 'NAME1'.
            wa_fldcat_head-col_pos = '2'.
            wa_fldcat_head-seltext_m  = 'Customer Name'(021).
            wa_fldcat_head-ddictxt = 'M'.
            wa_fldcat_head-outputlen = '35'.
         when 'BELNR'.
            wa_fldcat_head-col_pos = '3'.
            wa_fldcat_head-seltext_m  = 'Invoice No'(008).
            wa_fldcat_head-ddictxt = 'M'.
            wa_fldcat_head-outputlen = '12'.
            wa_fldcat_head-KEY       = ' '.
         when 'BLDAT'.
            wa_fldcat_head-col_pos = '4'.
            wa_fldcat_head-seltext_m  = 'Document Date'(009).
            wa_fldcat_head-ddictxt = 'M'.
            wa_fldcat_head-outputlen = '13'.
            wa_fldcat_head-ref_tabname = ' '.
         when 'RZZ_EBELN'.
            wa_fldcat_head-col_pos = '5'.
            wa_fldcat_head-seltext_m  = 'PO.Ref.No'(010).
            wa_fldcat_head-ddictxt = 'M'.
            wa_fldcat_head-outputlen = '13'.
            wa_fldcat_head-ref_tabname = ' '.
         when 'HSL'.
            wa_fldcat_head-col_pos = '6'.
            wa_fldcat_head-seltext_m  = 'Invoice Amount'(011).
            wa_fldcat_head-ddictxt = 'M'.
            wa_fldcat_head-outputlen = '16'.
            wa_fldcat_head-do_sum = 'X'.
         when 'DUE_DATE'.
            wa_fldcat_head-col_pos = '7'.
            wa_fldcat_head-seltext_m  = 'Due Date'(012).
            wa_fldcat_head-ddictxt = 'M'.
            wa_fldcat_head-outputlen = '12'.
            wa_fldcat_head-ref_tabname = ' '.
         when 'DUE_DAYS'.
            wa_fldcat_head-col_pos = '8'.
            wa_fldcat_head-seltext_m  = 'Due Days'(013).
            wa_fldcat_head-ddictxt = 'M'.
            wa_fldcat_head-outputlen = '9'.
         when 'NOT_DUE'.
            wa_fldcat_head-col_pos = '9'.
            wa_fldcat_head-seltext_m  = 'Not Due'(014).
            wa_fldcat_head-ddictxt = 'M'.
            wa_fldcat_head-outputlen = '16'.
            wa_fldcat_head-do_sum = 'X'.
         when 'BUCK_0_30'.
            wa_fldcat_head-col_pos = '10'.
            wa_fldcat_head-seltext_m  = '0 To 30'(015).
            wa_fldcat_head-ddictxt = 'M'.
            wa_fldcat_head-outputlen = '16'.
            wa_fldcat_head-do_sum = 'X'.
         when 'BUCK_31_60'.
            wa_fldcat_head-col_pos = '11'.
            wa_fldcat_head-seltext_m  = '31 To 60'(016).
            wa_fldcat_head-ddictxt = 'M'.
            wa_fldcat_head-outputlen = '16'.
            wa_fldcat_head-do_sum = 'X'.
         when 'BUCK_61_90'.
            wa_fldcat_head-col_pos = '12'.
            wa_fldcat_head-seltext_m  = '61 To 90'(017).
            wa_fldcat_head-ddictxt = 'M'.
            wa_fldcat_head-outputlen = '16'.
            wa_fldcat_head-do_sum = 'X'.
         when 'BUCK_91_180'.
            wa_fldcat_head-col_pos = '13'.
            wa_fldcat_head-seltext_m  = '91 To 180'(018).
            wa_fldcat_head-ddictxt = 'M'.
            wa_fldcat_head-outputlen = '16'.
            wa_fldcat_head-do_sum = 'X'.
         when 'BUCK_180'.
            wa_fldcat_head-col_pos = '14'.
            wa_fldcat_head-seltext_m  = 'Beyond 180'(019).
            wa_fldcat_head-ddictxt = 'M'.
            wa_fldcat_head-outputlen = '16'.
            wa_fldcat_head-do_sum = 'X'.
        when 'DOCNR'.
            wa_fldcat_head-no_out = 'X'.
        when 'REFDOCNR'.
            wa_fldcat_head-no_out = 'X'.
        when 'DOC_DATE'.
            wa_fldcat_head-no_out = 'X'.
        when 'FOUND'.
            wa_fldcat_head-no_out = 'X'.
         endcase.
         modify i_fldcat_head from wa_fldcat_head index sy-tabix.
        endloop.
      endif.
    endform.                    " GENERATE_FIELD_CATALOG_CUST
    *&      Form  get_events_customer
          Getting ALV Events
    form get_events_customer.
        call function 'REUSE_ALV_EVENTS_GET'
      EXPORTING
        I_LIST_TYPE           = 0
       importing
         et_events             = i_events
      exceptions
        list_type_wrong       = 1
        others                = 2
      if sy-subrc <> 0.
    MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
            WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
      endif.
      if not i_events[] is initial.
       read table i_events into wa_event with key name = 'TOP_OF_PAGE'(024)
       wa_event-form = 'GENERATE_USERCOMMAND_CUST'.
       modify i_events from wa_event index sy-tabix.
       read table i_events into wa_event with key na

  • Field width in ALV report

    Hi,
    How to increase the field width of a field in ALV report.
    I mean, in a ALV report, the field description of a field is not showing correctly. IF i try to extend the field width by the mouse/coursor, it displays the correct description.
    IS there any way where for displaying the  field description correctly?
    Thanks,
    Kumar

    Hi,
    Go through the sample code,
    *& Report ZDEMO_ALVLIST *
    *& Example of a simple ALV List Report *
    *& The basic requirement for this demo is to display a number of *
    *& fields from the EKKO table. *
    REPORT zdemo_alvlist .
    TABLES: ekko.
    type-pools: slis. "ALV Declarations
    *Data Declaration
    TYPES: BEGIN OF t_ekko,
    ebeln TYPE ekpo-ebeln,
    ebelp TYPE ekpo-ebelp,
    statu TYPE ekpo-statu,
    aedat TYPE ekpo-aedat,
    matnr TYPE ekpo-matnr,
    menge TYPE ekpo-menge,
    meins TYPE ekpo-meins,
    netpr TYPE ekpo-netpr,
    peinh TYPE ekpo-peinh,
    END OF t_ekko.
    DATA: it_ekko TYPE STANDARD TABLE OF t_ekko INITIAL SIZE 0,
    wa_ekko TYPE t_ekko.
    *ALV data declarations
    data: fieldcatalog type slis_t_fieldcat_alv with header line,
    gd_tab_group type slis_t_sp_group_alv,
    gd_layout type slis_layout_alv,
    gd_repid like sy-repid.
    *Start-of-selection.
    START-OF-SELECTION.
    perform data_retrieval.
    perform build_fieldcatalog.
    perform build_layout.
    perform display_alv_report.
    *& Form BUILD_FIELDCATALOG
    Build Fieldcatalog for ALV Report
    form build_fieldcatalog.
    There are a number of ways to create a fieldcat.
    For the purpose of this example i will build the fieldcatalog manualy
    by populating the internal table fields individually and then
    appending the rows. This method can be the most time consuming but can
    also allow you more control of the final product.
    Beware though, you need to ensure that all fields required are
    populated. When using some of functionality available via ALV, such as
    total. You may need to provide more information than if you were
    simply displaying the result
    I.e. Field type may be required in-order for
    the 'TOTAL' function to work.
    fieldcatalog-fieldname = 'EBELN'.
    fieldcatalog-seltext_m = 'Purchase Order'.
    fieldcatalog-col_pos = 0.
    fieldcatalog-outputlen = 10.
    fieldcatalog-emphasize = 'X'.
    fieldcatalog-key = 'X'.
    fieldcatalog-do_sum = 'X'.
    fieldcatalog-no_zero = 'X'.
    append fieldcatalog to fieldcatalog.
    clear fieldcatalog.
    fieldcatalog-fieldname = 'EBELP'.
    fieldcatalog-seltext_m = 'PO Item'.
    fieldcatalog-col_pos = 1.
    append fieldcatalog to fieldcatalog.
    clear fieldcatalog.
    fieldcatalog-fieldname = 'STATU'.
    fieldcatalog-seltext_m = 'Status'.
    fieldcatalog-col_pos = 2.
    append fieldcatalog to fieldcatalog.
    clear fieldcatalog.
    fieldcatalog-fieldname = 'AEDAT'.
    fieldcatalog-seltext_m = 'Item change date'.
    fieldcatalog-col_pos = 3.
    append fieldcatalog to fieldcatalog.
    clear fieldcatalog.
    fieldcatalog-fieldname = 'MATNR'.
    fieldcatalog-seltext_m = 'Material Number'.
    fieldcatalog-col_pos = 4.
    append fieldcatalog to fieldcatalog.
    clear fieldcatalog.
    fieldcatalog-fieldname = 'MENGE'.
    fieldcatalog-seltext_m = 'PO quantity'.
    fieldcatalog-col_pos = 5.
    append fieldcatalog to fieldcatalog.
    clear fieldcatalog.
    fieldcatalog-fieldname = 'MEINS'.
    fieldcatalog-seltext_m = 'Order Unit'.
    fieldcatalog-col_pos = 6.
    append fieldcatalog to fieldcatalog.
    clear fieldcatalog.
    fieldcatalog-fieldname = 'NETPR'.
    fieldcatalog-seltext_m = 'Net Price'.
    fieldcatalog-col_pos = 7.
    fieldcatalog-outputlen = 15.
    fieldcatalog-datatype = 'CURR'.
    append fieldcatalog to fieldcatalog.
    clear fieldcatalog.
    fieldcatalog-fieldname = 'PEINH'.
    fieldcatalog-seltext_m = 'Price Unit'.
    fieldcatalog-col_pos = 8.
    append fieldcatalog to fieldcatalog.
    clear fieldcatalog.
    endform. " BUILD_FIELDCATALOG
    *& Form BUILD_LAYOUT
    Build layout for ALV grid report
    form build_layout.
    gd_layout-no_input = 'X'.
    gd_layout-colwidth_optimize = 'X'.
    gd_layout-totals_text = 'Totals'(201).
    gd_layout-totals_only = 'X'.
    gd_layout-f2code = 'DISP'. "Sets fcode for when double
    "click(press f2)
    gd_layout-zebra = 'X'.
    gd_layout-group_change_edit = 'X'.
    gd_layout-header_text = 'helllllo'.
    endform. " BUILD_LAYOUT
    *& Form DISPLAY_ALV_REPORT
    Display report using ALV grid
    form display_alv_report.
    gd_repid = sy-repid.
    call function 'REUSE_ALV_LIST_DISPLAY'
    exporting
    i_callback_program = gd_repid
    i_callback_top_of_page = 'TOP-OF-PAGE' "see FORM
    i_callback_user_command = 'USER_COMMAND'
    i_grid_title = outtext
    is_layout = gd_layout
    it_fieldcat = fieldcatalog[]
    it_special_groups = gd_tabgroup
    IT_EVENTS = GT_XEVENTS
    i_save = 'X'
    is_variant = z_template
    tables
    t_outtab = it_ekko
    exceptions
    program_error = 1
    others = 2.
    if sy-subrc 0.
    MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
    WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
    endif.
    endform. " DISPLAY_ALV_REPORT
    *& Form DATA_RETRIEVAL
    Retrieve data form EKPO table and populate itab it_ekko
    form data_retrieval.
    select ebeln ebelp statu aedat matnr menge meins netpr peinh
    up to 10 rows
    from ekpo
    into table it_ekko.
    endform. " DATA_RETRIEVAL
    Form TOP-OF-PAGE *
    ALV Report Header *
    Form top-of-page.
    *ALV Header declarations
    data: t_header type slis_t_listheader,
    wa_header type slis_listheader,
    t_line like wa_header-info,
    ld_lines type i,
    ld_linesc(10) type c.
    Title
    wa_header-typ = 'H'.
    wa_header-info = 'EKKO Table Report'.
    append wa_header to t_header.
    clear wa_header.
    Date
    wa_header-typ = 'S'.
    wa_header-key = 'Date: '.
    CONCATENATE sy-datum+6(2) '.'
    sy-datum+4(2) '.'
    sy-datum(4) INTO wa_header-info. "todays date
    append wa_header to t_header.
    clear: wa_header.
    Total No. of Records Selected
    describe table it_ekko lines ld_lines.
    ld_linesc = ld_lines.
    concatenate 'Total No. of Records Selected: ' ld_linesc
    into t_line separated by space.
    wa_header-typ = 'A'.
    wa_header-info = t_line.
    append wa_header to t_header.
    clear: wa_header, t_line.
    call function 'REUSE_ALV_COMMENTARY_WRITE'
    exporting
    it_list_commentary = t_header.
    i_logo = 'Z_LOGO'.
    endform.
    Regards,
    Raj.

  • Sorting not working correctly for date field in alv report

    Hi All,
    My report displays many rows also containing date type fields of bldat,budat .
    When I sort the report selecting field of type bldat budat the sorting is not correct for the year.
    Ex:
    Invoice doc dat
    01-25-2011
    01-21-2011
    02-02-2011
    10-25-2010
    11-20-2010
    If I use ascending then it is sorted as :
    Invoice doc dat
    01-21-2011
    01-25-2011
    02-02-2011
    10-20-2010
    10-25-2010
    Why the sorting is not working correct for year.(2010 records should have been first).
    The field wa_tab-bldat is of type char10.
    It is populated as wa_tab-bldat = bsak-bldat.
    Kindly suggest what can be done.

    The field wa_tab-bldat is of type char10
    Then what it does is correct.
    Refer to type datum...it will work

  • Regd: Calculation of TOTAL field in ALV report

    Hi All,
    We have a scenario that we are not getting the total value for numeric fields in ALV report.
    Below i have given the code used for it.
    G_KEY = 'X'.
      G_NOKEY = SPACE.
      G_SUM = 'X'.
      G_NOSUM = SPACE.
      PERFORM BUILD_FIELDCAT USING 'VBELN'  G_KEY G_NOSUM.
      PERFORM BUILD_FIELDCAT USING 'BLDAT'  G_NOKEY G_NOSUM.
      PERFORM BUILD_FIELDCAT USING 'VGBEL'  G_KEY G_NOSUM.
      PERFORM BUILD_FIELDCAT USING 'POSNR'  G_KEY G_NOSUM.
      PERFORM BUILD_FIELDCAT USING 'MATNR'  G_KEY G_NOSUM..
      PERFORM BUILD_FIELDCAT USING 'LFIMG'  G_NOKEY G_NOSUM.
      PERFORM BUILD_FIELDCAT USING 'VRKME'  G_NOKEY G_NOSUM.
      PERFORM BUILD_FIELDCAT USING 'NETPR'  G_NOKEY G_NOSUM.
      PERFORM BUILD_FIELDCAT USING 'BRTWR'  G_NOKEY G_NOSUM.
      PERFORM BUILD_FIELDCAT USING 'VALUE_INR'  G_NOKEY G_SUM.
      PERFORM BUILD_FIELDCAT USING 'B_DUTY'     G_NOKEY G_SUM.
      PERFORM BUILD_FIELDCAT USING 'S_TOTAL1'   G_NOKEY G_SUM.
      PERFORM BUILD_FIELDCAT USING 'CV_DUTY'    G_NOKEY G_SUM.
      PERFORM BUILD_FIELDCAT USING 'C_CVD'      G_NOKEY G_SUM.
      PERFORM BUILD_FIELDCAT USING 'S_TOTAL2'   G_NOKEY G_SUM.
      PERFORM BUILD_FIELDCAT USING 'C_DUTY'     G_NOKEY G_SUM.
      PERFORM BUILD_FIELDCAT USING 'S_TOTAL3'   G_NOKEY G_SUM.
      PERFORM BUILD_FIELDCAT USING 'A_DUTY'     G_NOKEY G_SUM.
      PERFORM BUILD_FIELDCAT USING 'T_DUTY'     G_NOKEY G_SUM.
    PERFORM BUILD_LAYOUT.
      PERFORM BUILD_DISPLAY.
    *&      Form  DISPLAY
          text
    FORM BUILD_DISPLAY.
      CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
       EXPORTING
      I_INTERFACE_CHECK                 = ' '
      I_BYPASSING_BUFFER                = ' '
      I_BUFFER_ACTIVE                   = ' '
      I_CALLBACK_PROGRAM                = ' '
      I_CALLBACK_PF_STATUS_SET          = ' '
      I_CALLBACK_USER_COMMAND           = ' '
      I_CALLBACK_TOP_OF_PAGE            = ' '
      I_CALLBACK_HTML_TOP_OF_PAGE       = ' '
      I_CALLBACK_HTML_END_OF_LIST       = ' '
      I_STRUCTURE_NAME                  =
      I_BACKGROUND_ID                   = ' '
         I_GRID_TITLE                      = TEXT-000
      I_GRID_SETTINGS                   =
       IS_LAYOUT                         = IG_LAYOUT
         IT_FIELDCAT                       = IG_FIELDCAT
      IT_EXCLUDING                      =
      IT_SPECIAL_GROUPS                 =
      IT_SORT                           =
      IT_FILTER                         =
      IS_SEL_HIDE                       =
      I_DEFAULT                         = 'X'
         I_SAVE                            = 'A'
      IS_VARIANT                        =
      IT_EVENTS                         =
      IT_EVENT_EXIT                     =
      IS_PRINT                          =
      IS_REPREP_ID                      =
      I_SCREEN_START_COLUMN             = 0
      I_SCREEN_START_LINE               = 0
      I_SCREEN_END_COLUMN               = 0
      I_SCREEN_END_LINE                 = 0
      I_HTML_HEIGHT_TOP                 = 0
      I_HTML_HEIGHT_END                 = 0
      IT_ALV_GRAPHICS                   =
      IT_HYPERLINK                      =
      IT_ADD_FIELDCAT                   =
      IT_EXCEPT_QINFO                   =
      IR_SALV_FULLSCREEN_ADAPTER        =
    IMPORTING
      E_EXIT_CAUSED_BY_CALLER           =
      ES_EXIT_CAUSED_BY_USER            =
        TABLES
          T_OUTTAB                          = IG_INBOUND
       EXCEPTIONS
         PROGRAM_ERROR                     = 1
         OTHERS                            = 2
      IF SY-SUBRC <> 0.
        MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
                WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
      ENDIF.
    ENDFORM.                    "DISPLAY
    *&      Form  BUILD_FIELDCAT
          text
         -->G_FIELDNAME  text
         -->L_KEY        text
         -->L_SUM        text
    FORM BUILD_FIELDCAT USING L_FIELDNAME LIKE DD03L-FIELDNAME L_KEY TYPE C L_SUM TYPE C.
      CLEAR WG_FIELDCAT_LN.
      ADD 1 TO G_COL_POS.
      WG_FIELDCAT_LN-REF_TABNAME = 'IG_INBOUND'.
      WG_FIELDCAT_LN-FIELDNAME = L_FIELDNAME.
      WG_FIELDCAT_LN-KEY = L_KEY.
      WG_FIELDCAT_LN-DO_SUM = L_SUM.
      WG_FIELDCAT_LN-COL_POS = G_COL_POS.
      WG_FIELDCAT_LN-NO_OUT = SPACE.
      WG_FIELDCAT_LN-QFIELDNAME = SPACE.
      WG_FIELDCAT_LN-HOTSPOT = SPACE.
      APPEND WG_FIELDCAT_LN TO IG_FIELDCAT.
    ENDFORM.                    "BUILD_FIELDCAT
    *&      Form  BUILD_LAYOUT
          text
    FORM BUILD_LAYOUT.
    IG_LAYOUT-TOTALS_TEXT = 'Total Amount'.
    *IG_LAYOUT-SUBTOTALS_TEXT = 'A'.
    IG_LAYOUT-ZEBRA = 'X'.
    ENDFORM.
    Help and Sugesstions will be much appreciated.
    Thanks & Regds.
    Ramesh.

    This is sample program for the same
    REPORT  Z_50657_ALV_EX2
            NO STANDARD PAGE HEADING
            LINE-COUNT 65(3)
            LINE-SIZE 220
            MESSAGE-ID ZZ.
    *                             Type Pools                               *
    TYPE-POOLS: SLIS, ICON.
    *                              Tables                                  *
    TABLES: VBAK. "Sales Document Data
    *                         Internal Tables                              *
    * TABLE TO HOLD DATA OF SALES DOCUMENT
    DATA: BEGIN OF IT_VBAK OCCURS 0,
          VBELN LIKE VBAK-VBELN, "Sales Document
          VBTYP LIKE VBAK-VBTYP, "SD document category
          AUDAT LIKE VBAK-AUDAT, "Document date (date received/sent)
          AUGRU LIKE VBAK-AUGRU, "Order reason (reason for the business)
          AUART LIKE VBAK-AUART, "Sales Document Type
          NETWR LIKE VBAK-NETWR, "Net Sales Order in Doc. Currency
          WAERK LIKE VBAK-WAERK, "SD document currency
          ICON TYPE ICON-ID,     "traffic lights
          END OF IT_VBAK.
    *                             Work Areas                               *
    *WORK AREAS DEFINED FOR ALV'S
    DATA: WA_FIELDCAT TYPE SLIS_FIELDCAT_ALV,      "field catalog
          IT_FIELDCAT TYPE SLIS_T_FIELDCAT_ALV,     "field catalog ITAB
          WA_SORT TYPE SLIS_SORTINFO_ALV,           "SORT work area
          IT_SORT TYPE SLIS_T_SORTINFO_ALV,         "SORT ITAB
          LAYOUT TYPE SLIS_LAYOUT_ALV,              "LAYOUT
          WA_FCODE TYPE SLIS_EXTAB,                 "FUN CODE
          I_FCODE_EXTAB TYPE SLIS_T_EXTAB,
          WA_EVENTS TYPE SLIS_ALV_EVENT,
          IT_EVENTS TYPE SLIS_T_EVENT.
    *                       Selection-Screen                               *
    SELECTION-SCREEN BEGIN OF BLOCK B1 WITH FRAME.
    SELECT-OPTIONS: S_VBELN FOR VBAK-VBELN.
    PARAMETERS: P_VBTYP LIKE VBAK-VBTYP DEFAULT 'C'.
    SELECTION-SCREEN END OF BLOCK B1.
    SELECTION-SCREEN BEGIN OF BLOCK B2 WITH FRAME.
    PARAMETERS: LIST RADIOBUTTON GROUP G1,
                GRID RADIOBUTTON GROUP G1.
    SELECTION-SCREEN END OF BLOCK B2.
    *                     At  Selection-Screen                             *
    *VALIDATION
    *                       Start of Selection                             *
    START-OF-SELECTION.
    *POPULATION OF DATA INTO INTERNAL TABLE ITAB
      PERFORM GET_DATA.
    *DEFINE USER DEFINED FIELDCATALOG
      PERFORM DEFINE_FIELDCATALOG.
    *SUBTOTALS AND TOTALS DISPLAY USING SORT
      PERFORM SORT_LIST.
    *CHANGE FCODE OF STATUS
      PERFORM CHANGE_FCODE.
    *CHECK RADIOBUTTON OPTION AND ACCORDINGLY FINAL DISPLAY
      PERFORM CHECK_OPTION.
    *&      Form  GET_DATA
    *       text
    FORM GET_DATA.
      SELECT VBELN
             VBTYP
             AUDAT
             AUGRU
             AUART
             NETWR
             WAERK FROM VBAK INTO TABLE IT_VBAK
             WHERE VBELN IN S_VBELN AND VBTYP = P_VBTYP
             AND ERDAT > '01.01.2004' AND NETWR > 0.
      LOOP AT IT_VBAK.
        IF IT_VBAK-NETWR < 10000.
          IT_VBAK-ICON = '@08@'.
        ELSEIF IT_VBAK-NETWR > 100000.
          IT_VBAK-ICON = '@0A@'.
        ELSE.
          IT_VBAK-ICON = '@09@'.
        ENDIF.
        MODIFY IT_VBAK INDEX SY-TABIX.
      ENDLOOP.
    ENDFORM.                    "GET_DATA
    *&      Form  CHECK_OPTION
    *       text
    FORM CHECK_OPTION.
      WA_EVENTS-NAME = 'TOP_OF_PAGE'.
      WA_EVENTS-FORM = 'TOP'.
      APPEND WA_EVENTS TO IT_EVENTS.
      CLEAR WA_EVENTS.
      WA_EVENTS-NAME = 'END_OF_LIST'.
      WA_EVENTS-FORM = 'END_LIST'.
      APPEND WA_EVENTS TO IT_EVENTS.
      CLEAR WA_EVENTS.
      IF LIST = 'X'.
        PERFORM LIST_DISP.
      ENDIF.
      IF GRID = 'X'.
        PERFORM GRID_DISP.
      ENDIF.
    ENDFORM.                    "CHECK_OPTION
    *&      Form  DEFINE_FIELDCATALOG
    *       text
    FORM DEFINE_FIELDCATALOG.
      WA_FIELDCAT-COL_POS = 1.
      WA_FIELDCAT-FIELDNAME = 'ICON'.
      WA_FIELDCAT-SELTEXT_L = 'ICON'.
      WA_FIELDCAT-ICON = 'X'.
      WA_FIELDCAT-OUTPUTLEN = 8.
      WA_FIELDCAT-TABNAME = 'IT_VBAK'.
      APPEND WA_FIELDCAT TO IT_FIELDCAT.
      CLEAR WA_FIELDCAT.
      WA_FIELDCAT-COL_POS = 2.
      WA_FIELDCAT-FIELDNAME = 'VBELN'.
      WA_FIELDCAT-SELTEXT_L = 'SALES DOC NO.'.
      WA_FIELDCAT-OUTPUTLEN = 10.
      WA_FIELDCAT-TABNAME = 'IT_VBAK'.
      APPEND WA_FIELDCAT TO IT_FIELDCAT.
      CLEAR WA_FIELDCAT.
      WA_FIELDCAT-COL_POS = 3.
      WA_FIELDCAT-FIELDNAME = 'AUDAT'.
      WA_FIELDCAT-SELTEXT_L = 'CREATED ON'.
      WA_FIELDCAT-OUTPUTLEN = 10.
      WA_FIELDCAT-TABNAME = 'IT_VBAK'.
      APPEND WA_FIELDCAT TO IT_FIELDCAT.
      CLEAR WA_FIELDCAT.
      WA_FIELDCAT-COL_POS = 4.
      WA_FIELDCAT-FIELDNAME = 'VBTYP'.
      WA_FIELDCAT-SELTEXT_L = 'CATEGORY'.
      WA_FIELDCAT-OUTPUTLEN = 1.
      WA_FIELDCAT-TABNAME = 'IT_VBAK'.
      APPEND WA_FIELDCAT TO IT_FIELDCAT.
      CLEAR WA_FIELDCAT.
      WA_FIELDCAT-COL_POS = 6.
      WA_FIELDCAT-FIELDNAME = 'AUGRU'.
      WA_FIELDCAT-SELTEXT_L = 'REASON'.
      WA_FIELDCAT-OUTPUTLEN = 3.
      WA_FIELDCAT-TABNAME = 'IT_VBAK'.
      APPEND WA_FIELDCAT TO IT_FIELDCAT.
      CLEAR WA_FIELDCAT.
      WA_FIELDCAT-COL_POS = 5.
      WA_FIELDCAT-FIELDNAME = 'AUART'.
      WA_FIELDCAT-SELTEXT_L = 'DOC TYPE'.
      WA_FIELDCAT-OUTPUTLEN = 4.
      WA_FIELDCAT-TABNAME = 'IT_VBAK'.
      APPEND WA_FIELDCAT TO IT_FIELDCAT.
      CLEAR WA_FIELDCAT.
      WA_FIELDCAT-COL_POS = 7.
      WA_FIELDCAT-FIELDNAME = 'NETWR'.
      WA_FIELDCAT-SELTEXT_L = 'NET VALUE'.
      WA_FIELDCAT-OUTPUTLEN = 17.
      WA_FIELDCAT-DECIMALS_OUT = 2.
    *  WA_FIELDCAT-DO_SUM = 'X'.
      WA_FIELDCAT-TABNAME = 'IT_VBAK'.
      APPEND WA_FIELDCAT TO IT_FIELDCAT.
      CLEAR WA_FIELDCAT.
      WA_FIELDCAT-COL_POS = 8.
      WA_FIELDCAT-FIELDNAME = 'WAERK'.
      WA_FIELDCAT-SELTEXT_L = 'UNIT'.
      WA_FIELDCAT-OUTPUTLEN = 50.
      WA_FIELDCAT-TABNAME = 'IT_VBAK'.
      APPEND WA_FIELDCAT TO IT_FIELDCAT.
      CLEAR WA_FIELDCAT.
    ENDFORM.                    "DEFINE_FIELDCATALOG
    *&      Form  DEFINE_LAYOUT
    *       text
    FORM DEFINE_LAYOUT.
      LAYOUT-ZEBRA = 'X'.
      LAYOUT-SUBTOTALS_TEXT = 'SUBTOTAL SUM'.
      LAYOUT-WINDOW_TITLEBAR = 'EXERCISE 2'.
      LAYOUT-TOTALS_TEXT  = 'TOTAL'.
    ENDFORM.                    "DEFINE_LAYOUT
    *&      Form  SORT_LIST
    *       text
    FORM SORT_LIST.
      WA_SORT-FIELDNAME = 'VBELN'.
      WA_SORT-TABNAME = 'IT_VBAK'.
      WA_SORT-SPOS = 1.
      WA_SORT-UP = 'X'.
      WA_SORT-SUBTOT = 'X'.
      APPEND WA_SORT TO IT_SORT.
      CLEAR WA_SORT.
      WA_SORT-FIELDNAME = 'NETWR'.
      WA_SORT-TABNAME = 'IT_VBAK'.
      WA_SORT-UP = 'X'.
      WA_SORT-SPOS = 2.
      WA_SORT-SUBTOT = 'X'.
      APPEND WA_SORT TO IT_SORT.
      CLEAR WA_SORT.
    ENDFORM.                    "SORT_LIST
    *&      Form  LIST_DISP
    *       text
    FORM LIST_DISP.
      PERFORM DEFINE_LAYOUT.
      CALL FUNCTION 'REUSE_ALV_LIST_DISPLAY'
       EXPORTING
         I_CALLBACK_PROGRAM             = SY-REPID
         IT_FIELDCAT                    = IT_FIELDCAT
         IS_LAYOUT                      = LAYOUT
         IT_SORT                        = IT_SORT
         I_CALLBACK_PF_STATUS_SET       = 'STATUS'
         IT_EXCLUDING                   = I_FCODE_EXTAB
         I_CALLBACK_USER_COMMAND        = 'USER_COMMAND'
         IT_EVENTS                      = IT_EVENTS[]
    *   IMPORTING
    *     E_EXIT_CAUSED_BY_CALLER        =
    *     ES_EXIT_CAUSED_BY_USER         =
        TABLES
         T_OUTTAB                       = IT_VBAK
    *   EXCEPTIONS
    *     PROGRAM_ERROR                  = 1
    *     OTHERS                         = 2
      IF SY-SUBRC <> 0.
        MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
                WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
      ENDIF.
    ENDFORM.                    "LIST_DISP
    *&      Form  GRID_DISP
    *       text
    FORM GRID_DISP.
      PERFORM DEFINE_LAYOUT.
      CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
        EXPORTING
          I_CALLBACK_PROGRAM       = SY-REPID
          IS_LAYOUT                = LAYOUT
          IT_FIELDCAT              = IT_FIELDCAT
          IT_SORT                  = IT_SORT
          I_CALLBACK_PF_STATUS_SET = 'STATUS'
          IT_EXCLUDING             = I_FCODE_EXTAB
          I_CALLBACK_USER_COMMAND  = 'USER_COMMAND'
          IT_EVENTS                = IT_EVENTS[]
        TABLES
          T_OUTTAB                 = IT_VBAK.
    * EXCEPTIONS
    *   PROGRAM_ERROR                     = 1
    *   OTHERS                            = 2
      IF SY-SUBRC <> 0.
        MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
                WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
      ENDIF.
    ENDFORM.                    "GRID_DISP
    *&      Form  STATUS
    *       text
    *      -->P_EXTAB    text
    FORM STATUS USING P_EXTAB TYPE SLIS_T_EXTAB.
      SET PF-STATUS 'STATUS' EXCLUDING P_EXTAB.
    ENDFORM.                    "STATUS
    *&      Form  USER_COMMAND
    *       text
    *      -->R_UCOMM      text
    *      -->RS_SELFIELD  text
    FORM USER_COMMAND USING R_UCOMM     LIKE SY-UCOMM
                                   RS_SELFIELD TYPE SLIS_SELFIELD.
      CASE R_UCOMM.
        WHEN 'BACK' OR 'CANC' OR 'EXIT'.
          LEAVE TO SCREEN 0.
        WHEN '&IC1'.
          SET PARAMETER ID 'AUN' FIELD RS_SELFIELD-VALUE.
          CALL TRANSACTION 'VA03' AND SKIP FIRST SCREEN.
      ENDCASE.
    ENDFORM.                    "USER_COMMAND
    *&      Form  CHANGE_FCODE
    *       text
    FORM CHANGE_FCODE.
      WA_FCODE = 'PRNT'.
      APPEND WA_FCODE TO I_FCODE_EXTAB.
      WA_FCODE = '&OAD'.
      APPEND WA_FCODE TO I_FCODE_EXTAB.
      WA_FCODE = '&AVE'.
      APPEND WA_FCODE TO I_FCODE_EXTAB.
      WA_FCODE = '&EB9'.
      APPEND WA_FCODE TO I_FCODE_EXTAB.
      WA_FCODE = '&SUM'.
      APPEND WA_FCODE TO I_FCODE_EXTAB.
      WA_FCODE = '&UMC'.
      APPEND WA_FCODE TO I_FCODE_EXTAB.
      WA_FCODE = '&XPA'.
      APPEND WA_FCODE TO I_FCODE_EXTAB.
      WA_FCODE = '&OMP'.
      APPEND WA_FCODE TO I_FCODE_EXTAB.
    ENDFORM.                    "CHANGE_FCODE
    *&      Form  TOP
    *       text
    FORM TOP.
      IF LIST = 'X'.
        WRITE:/ SY-ULINE.
        WRITE:/ 'DATE:', SY-DATUM,55 'INTELLIGROUP ASIA PVT LTD'.
        WRITE:/ 'TIME:', SY-UZEIT.
        WRITE:/ 'USER NAME:', SY-UNAME,60 SY-TITLE.
        WRITE:/ 'PAGE', SY-PAGNO.
        WRITE:/ SY-ULINE.
      ENDIF.
      IF GRID = 'X'.
        DATA: LS_LINE TYPE SLIS_LISTHEADER,
              E04_LT_TOP_OF_PAGE TYPE SLIS_T_LISTHEADER.
    *   Listenüberschrift: Typ H
        CLEAR LS_LINE.
        LS_LINE-TYP  = 'H'.
    *   LS_LINE-KEY:  not used for this type
        LS_LINE-INFO = 'Summary'.
        APPEND LS_LINE TO E04_LT_TOP_OF_PAGE.
    *   Kopfinfo: Typ S
        CLEAR LS_LINE.
        LS_LINE-TYP  = 'S'.
        LS_LINE-KEY  = 'Intelligroup'.
        LS_LINE-INFO = ''.
        APPEND LS_LINE TO E04_LT_TOP_OF_PAGE.
        LS_LINE-KEY  = 'ASIA'.
        LS_LINE-INFO = 'PVT LTD'.
        APPEND LS_LINE TO E04_LT_TOP_OF_PAGE.
    *   Aktionsinfo: Typ A
        CLEAR LS_LINE.
        LS_LINE-TYP  = 'A'.
    *   LS_LINE-KEY:  not used for this type
        LS_LINE-INFO = 'truman'.
        APPEND LS_LINE TO  E04_LT_TOP_OF_PAGE.
        CALL FUNCTION 'REUSE_ALV_COMMENTARY_WRITE'
          EXPORTING
            IT_LIST_COMMENTARY = E04_LT_TOP_OF_PAGE
            I_LOGO             = 'ENJOY_SAP_LOGO'.
      ENDIF.
    ENDFORM.                    "TOP
    *&      Form  END_LIST
    *       text
    FORM END_LIST.
      IF LIST = 'X'.
        SKIP 2.
        WRITE:/60 'END OF PAGE'.
      ENDIF.
      IF GRID = 'X'.
          DATA: LS_LINE TYPE SLIS_LISTHEADER,
              E04_LT_END_OF_LIST TYPE SLIS_T_LISTHEADER.
    *   Listenüberschrift: Typ H
        CLEAR LS_LINE.
        LS_LINE-TYP  = 'H'.
    *   LS_LINE-KEY:  not used for this type
        LS_LINE-INFO = 'Summary'.
        APPEND LS_LINE TO E04_LT_END_OF_LIST.
    *   Kopfinfo: Typ S
        CLEAR LS_LINE.
        LS_LINE-TYP  = 'S'.
        LS_LINE-KEY  = 'Intelligroup'.
        LS_LINE-INFO = ''.
        APPEND LS_LINE TO E04_LT_END_OF_LIST.
        LS_LINE-KEY  = 'ASIA'.
        LS_LINE-INFO = 'PVT LTD'.
        APPEND LS_LINE TO E04_LT_END_OF_LIST.
    *   Aktionsinfo: Typ A
        CLEAR LS_LINE.
        LS_LINE-TYP  = 'A'.
    *   LS_LINE-KEY:  not used for this type
        LS_LINE-INFO = TEXT-105.
        APPEND LS_LINE TO  E04_LT_END_OF_LIST.
        CALL FUNCTION 'REUSE_ALV_COMMENTARY_WRITE'
          EXPORTING
            IT_LIST_COMMENTARY = E04_LT_END_OF_LIST.
      ENDIF.
    ENDFORM.                    "END_LIST

  • Double click on field in ALV Report

    hi everyone
    i have written a program which displays data in an alv grid report, now i need to extend my program a bit more.
    when i double click on any field value the corresponding record should be displayed
    can anyone suggest if i need to call any fn module for this, if so wht's the fn module
    if anyone can give an example that would be fine
    Cheers,
    rama

    Hi,
    *& Report  Z_REPORTFROMKNA1ANDT005T
    REPORT  Z_REPORTFROMKNA1ANDT005T
                      LINE-SIZE 180
                      MESSAGE-ID ZZ.
    TABLES:EKKO.
    TYPE-POOLS : SLIS.
          Internal table for ALV
    DATA : IT_FIELDCAT TYPE SLIS_T_FIELDCAT_ALV,     "Field catalog
           WA_FIELDCAT TYPE SLIS_FIELDCAT_ALV,       "WA for Field catalog
           IT_EVENT TYPE SLIS_T_EVENT,               "events
           WA_EVENT TYPE SLIS_ALV_EVENT,             "WA for events
           IT_COMMENT TYPE SLIS_T_LISTHEADER,        "Header details
           WA_COMMENT TYPE SLIS_LISTHEADER,          "WA for header details
           WA_LAYOUT TYPE SLIS_LAYOUT_ALV,           "Layout
           IT_SORT TYPE SLIS_T_SORTINFO_ALV,         "Sort table
           WA_SORT TYPE SLIS_SORTINFO_ALV,           "WA for sort table
           IT_KEYINFO TYPE SLIS_KEYINFO_ALV.         "Pass key value
    DATA : V_REPID LIKE SY-REPID.
    V_REPID = SY-REPID.
    DATA : V_DATE LIKE SY-DATUM.
    color management.
    DATA  : IT_COLOR TYPE TABLE OF LVC_S_SCOL.       "Color management.
          Internal table declearation
    DATA:BEGIN OF IT_EKKO OCCURS 0,
      EBELN LIKE EKKO-EBELN,
      BUKRS  LIKE EKKO-BUKRS,
      AEDAT  LIKE EKKO-AEDAT,
    END OF IT_EKKO.
    DATA : BEGIN OF IT_EKPO OCCURS 0,
      EBELN LIKE EKPO-EBELN,
      EBELP LIKE EKPO-EBELP,
      MATNR LIKE EKPO-MATNR,
      MENGE LIKE EKPO-MENGE,
      MEINS LIKE EKPO-MEINS,
      NETPR LIKE EKPO-NETPR,
      NETWR LIKE EKPO-MENGE,
      chk(1) type c,
    END OF IT_EKPO.
    DATA : BEGIN OF IT_EKBE OCCURS 0,
           EBELN LIKE EKBE-EBELN,
           EBELP LIKE EKBE-EBELP,
           BELNR LIKE EKBE-BELNR,
           MENGE LIKE EKBE-MENGE,
           MATNR LIKE EKBE-MATNR,
      END OF IT_EKBE.
    DATA : BEGIN OF IT_FINAL OCCURS 0,
      EBELN LIKE EKPO-EBELN,
      EBELP LIKE EKPO-EBELP,
      MATNR LIKE EKPO-MATNR,
      MENGE LIKE EKPO-MENGE,
      MEINS LIKE EKPO-MEINS,
      NETPR LIKE EKPO-NETPR,
      NETWR LIKE EKPO-NETWR,
      LINE_COLOR(4) TYPE C,     "Used to store row color attributes
    END OF IT_FINAL.
    SELECTION-SCREEN BEGIN OF BLOCK BLK WITH FRAME TITLE TEXT-001.
    SELECT-OPTIONS:S_EBELN FOR EKKO-EBELN.
    PARAMETERS : RB1 RADIOBUTTON GROUP G1 MODIF ID Z1,
                 RB2 RADIOBUTTON GROUP G1 MODIF ID Z2,
                 RB3 RADIOBUTTON GROUP G1 MODIF ID Z3.
    SELECTION-SCREEN END OF BLOCK BLK.
    AT SELECTION-SCREEN OUTPUT.
      PERFORM MODIFY_SCREEN.
    START-OF-SELECTION.
      PERFORM GET_DETAILS.
      PERFORM GET_ALV.
    *&      Form  modify_screen
          text
    -->  p1        text
    <--  p2        text
    FORM MODIFY_SCREEN .
    IF RB1 = 'X'.
       LOOP AT SCREEN.
         IF SCREEN-GROUP1 = 'Z1' .
           SCREEN-INVISIBLE = 1.
           SCREEN-ACTIVE = 0.
         ELSE.
           SCREEN-INVISIBLE = 0.
           SCREEN-ACTIVE = 1.
         ENDIF.
         MODIFY SCREEN.
       ENDLOOP.
    ENDIF.
    ENDFORM.                    " modify_screen
    *&      Form  GET_DETAILS
          Get the details
    FORM GET_DETAILS .
      DATA: LD_COLOR(1) TYPE C.
      SELECT EBELN
             BUKRS
             AEDAT
        FROM EKKO
        INTO TABLE IT_EKKO
       WHERE EBELN IN S_EBELN.
      IF SY-SUBRC = 0.
        SORT IT_EKKO BY EBELN.
      ELSE.
        MESSAGE E000 WITH 'DATA NOT FOUND'.
      ENDIF.
      IF NOT IT_EKKO[] IS INITIAL.
        SELECT EBELN
               EBELP
               MATNR
               MENGE
               MEINS
               NETPR
               NETWR
              chk
          FROM EKPO
          INTO TABLE IT_EKPO
           FOR ALL ENTRIES IN IT_EKKO
         WHERE EBELN = IT_EKKO-EBELN.
        IF SY-SUBRC = 0.
          SORT IT_EKPO BY EBELN.
        ENDIF.
      ENDIF.
      LOOP AT IT_EKPO.
        IT_FINAL-EBELN = IT_EKPO-EBELN.
        IT_FINAL-EBELP = IT_EKPO-EBELP.
        IT_FINAL-MATNR = IT_EKPO-MATNR.
        IT_FINAL-MENGE = IT_EKPO-MENGE.
        IT_FINAL-MEINS = IT_EKPO-MEINS.
        IT_FINAL-NETPR = IT_EKPO-NETPR.
        IT_FINAL-NETWR = IT_EKPO-NETWR.
        ON CHANGE OF IT_FINAL-EBELN.
          LD_COLOR = 7.
          CONCATENATE 'C' LD_COLOR '10' INTO IT_FINAL-LINE_COLOR.
        ENDON.
        APPEND IT_FINAL.
        CLEAR IT_FINAL.
      ENDLOOP.
    ENDFORM.                    " GET_DETAILS
    *&      Form  GET_ALV
          text
    FORM GET_ALV .
      PERFORM GENERATE_FIELDCAT.
      PERFORM GENERATE_LAYOUT.
      PERFORM GENERATE_EVENTS.
      PERFORM GENERATE_SORT.
      PERFORM ALV_GRID_DISPLAY.
    ENDFORM.                    " GET_ALV
    *&      Form  GENERATE_FIELDCAT
          Field catalog
    FORM GENERATE_FIELDCAT .
      IF RB1 = 'X' OR RB2 = 'X'.
        WA_FIELDCAT-FIELDNAME = 'EBELN'.
        WA_FIELDCAT-COL_POS = '1'.
        WA_FIELDCAT-JUST = 'R'.
        WA_FIELDCAT-SELTEXT_L = 'PO Number'.
        WA_FIELDCAT-LOWERCASE = 'X'.
        WA_FIELDCAT-DO_SUM = 'X'.
        APPEND WA_FIELDCAT TO IT_FIELDCAT.
        WA_FIELDCAT-FIELDNAME = 'EBELP'.
        WA_FIELDCAT-COL_POS = '2'.
        WA_FIELDCAT-JUST = 'C'.
        WA_FIELDCAT-SELTEXT_L = 'Item Number'.
        WA_FIELDCAT-LOWERCASE = 'X'.
        WA_FIELDCAT-edit = 'X'.
        APPEND WA_FIELDCAT TO IT_FIELDCAT.
        WA_FIELDCAT-FIELDNAME = 'MATNR'.
        WA_FIELDCAT-COL_POS = '3'.
        WA_FIELDCAT-JUST = 'C'.
        WA_FIELDCAT-SELTEXT_L = 'Material Number'.
        WA_FIELDCAT-LOWERCASE = 'X'.
        APPEND WA_FIELDCAT TO IT_FIELDCAT.
        WA_FIELDCAT-FIELDNAME = 'MENGE'.
        WA_FIELDCAT-COL_POS = '4'.
        WA_FIELDCAT-JUST = 'C'.
        WA_FIELDCAT-SELTEXT_L = 'PO Quantity'.
        WA_FIELDCAT-LOWERCASE = 'X'.
        APPEND WA_FIELDCAT TO IT_FIELDCAT.
        WA_FIELDCAT-FIELDNAME = 'MEINS'.
        WA_FIELDCAT-COL_POS = '5'.
        WA_FIELDCAT-JUST = 'C'.
        WA_FIELDCAT-SELTEXT_L = 'Order unit'.
        WA_FIELDCAT-LOWERCASE = 'X'.
        APPEND WA_FIELDCAT TO IT_FIELDCAT.
        WA_FIELDCAT-FIELDNAME = 'NETPR'.
        WA_FIELDCAT-COL_POS = '6'.
        WA_FIELDCAT-JUST = 'C'.
        WA_FIELDCAT-SELTEXT_L = 'Net price'.
        WA_FIELDCAT-LOWERCASE = 'X'.
        APPEND WA_FIELDCAT TO IT_FIELDCAT.
        WA_FIELDCAT-FIELDNAME = 'NETWR'.
        WA_FIELDCAT-COL_POS = '7'.
        WA_FIELDCAT-JUST = 'C'.
        WA_FIELDCAT-SELTEXT_L = 'Net order value'.
        WA_FIELDCAT-LOWERCASE = 'X'.
        APPEND WA_FIELDCAT TO IT_FIELDCAT.
       wa_fieldcat-fieldname = 'CHK'.
       wa_fieldcat-col_pos = '8'.
       wa_fieldcat-just = 'C'.
       wa_fieldcat-seltext_l = 'Check Box'.
       wa_fieldcat-lowercase = 'X'.
       wa_fieldcat-checkbox = 'X'.
       wa_fieldcat-edit = 'X'.
       append wa_fieldcat to it_fieldcat.
      ELSE.
        CALL FUNCTION 'REUSE_ALV_FIELDCATALOG_MERGE'
         EXPORTING
           I_PROGRAM_NAME               = V_REPID
           I_INTERNAL_TABNAME           = 'IT_EKKO'
        I_STRUCTURE_NAME             = I_STRUCTURE_NAME
        I_CLIENT_NEVER_DISPLAY       = 'X'
           I_INCLNAME                   = V_REPID
        I_BYPASSING_BUFFER           = I_BYPASSING_BUFFER
        I_BUFFER_ACTIVE              = I_BUFFER_ACTIVE
          CHANGING
            CT_FIELDCAT                  = IT_FIELDCAT
         EXCEPTIONS
           INCONSISTENT_INTERFACE       = 1
           PROGRAM_ERROR                = 2
           OTHERS                       = 3
        IF SY-SUBRC <> 0.
          MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
                  WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
        ENDIF.
        CALL FUNCTION 'REUSE_ALV_FIELDCATALOG_MERGE'
         EXPORTING
           I_PROGRAM_NAME               = V_REPID
           I_INTERNAL_TABNAME           = 'IT_EKPO'
      I_STRUCTURE_NAME             = I_STRUCTURE_NAME
      I_CLIENT_NEVER_DISPLAY       = 'X'
           I_INCLNAME                   = V_REPID
      I_BYPASSING_BUFFER           = I_BYPASSING_BUFFER
      I_BUFFER_ACTIVE              = I_BUFFER_ACTIVE
          CHANGING
            CT_FIELDCAT                  = IT_FIELDCAT
         EXCEPTIONS
           INCONSISTENT_INTERFACE       = 1
           PROGRAM_ERROR                = 2
           OTHERS                       = 3
        IF SY-SUBRC <> 0.
          MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
                  WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
        ENDIF.
      ENDIF.
    ENDFORM.                    " GENERATE_FIELDCAT
    *&      Form  GENERATE_EVENTS
          Generate Events
    FORM GENERATE_EVENTS .
      CALL FUNCTION 'REUSE_ALV_EVENTS_GET'
        IMPORTING
          ET_EVENTS       = IT_EVENT
        EXCEPTIONS
          LIST_TYPE_WRONG = 1
          OTHERS          = 2.
      IF SY-SUBRC <> 0.
        MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
                WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
      ENDIF.
      IF NOT IT_EVENT[] IS INITIAL.
        READ TABLE IT_EVENT INTO WA_EVENT WITH KEY NAME = 'TOP_OF_PAGE'.
        IF SY-SUBRC = 0.
          WA_EVENT-FORM = 'TOP_OF_PAGE'.
          MODIFY IT_EVENT FROM WA_EVENT INDEX SY-TABIX.
        ENDIF.
    <b>   READ TABLE IT_EVENT INTO WA_EVENT WITH KEY NAME = 'USER_COMMAND'.
        IF SY-SUBRC = 0.
          WA_EVENT-FORM = 'IT_USER_COMMAND'.
          MODIFY IT_EVENT FROM WA_EVENT INDEX SY-TABIX.
        ENDIF.</b>
      ENDIF.
    ENDFORM.                    " GENERATE_EVENTS
    *&      Form  TOP_OF_PAGE
          TOP_OF_PAGE
    FORM TOP_OF_PAGE.
      DATA : V_CONCATE(50) TYPE C.
      DATA : V_SPACE(10) TYPE C.
      CONCATENATE 'VIKRANTH' 'RAJESH' INTO V_CONCATE.
      WA_COMMENT-TYP = 'S'.
      WA_COMMENT-KEY = 'USER :'.
      WA_COMMENT-INFO = V_CONCATE.
      APPEND WA_COMMENT TO IT_COMMENT.
      WA_COMMENT-TYP = 'S'.
      WA_COMMENT-KEY = 'DATE:'.
      WA_COMMENT-INFO = SY-DATUM.
      APPEND WA_COMMENT TO IT_COMMENT.
      WA_COMMENT-TYP = 'S'.
      WA_COMMENT-KEY = 'TIME:'.
      WA_COMMENT-INFO = SY-TIMLO.
      APPEND WA_COMMENT TO IT_COMMENT.
      CALL FUNCTION 'REUSE_ALV_COMMENTARY_WRITE'
        EXPORTING
          IT_LIST_COMMENTARY = IT_COMMENT.
      CLEAR IT_COMMENT.
    ENDFORM.                    "TOP_OF_PAGE
    *&      Form  ALV_GRID_DISPLAY
          Grid display
    FORM ALV_GRID_DISPLAY .
      IF RB1 = 'X'.
        PERFORM GRID_DISPLAY.
      ELSEIF RB2 = 'X'.
        PERFORM LIST_DISPLAY.
      ELSE.
        PERFORM HIERSEQ_DISPLAY.
      ENDIF.
    ENDFORM.                    " ALV_GRID_DISPLAY
    *&      Form  GENERATE_LAYOUT
          LAYOUT
    FORM GENERATE_LAYOUT .
      WA_LAYOUT-COLWIDTH_OPTIMIZE = 'X'.           "OPTIMIZING FIELD WIDTH
      WA_LAYOUT-ZEBRA = 'X'.                       "PUTTING ZEBRA COLORS
      WA_LAYOUT-TOTALS_TEXT = 'Total'.
      WA_LAYOUT-SUBTOTALS_TEXT = 'SUB TOTAL'.
      WA_LAYOUT-INFO_FIELDNAME = 'LINE_COLOR'.
    ENDFORM.                    " GENERATE_LAYOUT
    *&      Form  GENERATE_SORT
          SORT
    FORM GENERATE_SORT .
      WA_SORT-FIELDNAME = 'EBELN'.
      WA_SORT-SPOS = '1'.
      WA_SORT-UP = 'X'.
      WA_SORT-SUBTOT = 'X'.
      APPEND WA_SORT TO IT_SORT.
    ENDFORM.                    " GENERATE_SORT
    *&      Form  GRID_DISPLAY
          GRID DISPLAY
    FORM GRID_DISPLAY .
      CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
    EXPORTING
      I_INTERFACE_CHECK                 = ' '
      I_BYPASSING_BUFFER                = ' '
      I_BUFFER_ACTIVE                   = ' '
       I_CALLBACK_PROGRAM                = V_REPID
      I_CALLBACK_PF_STATUS_SET          = ' '
      I_CALLBACK_USER_COMMAND           = 'IT_USER_COMMAND'
      I_CALLBACK_TOP_OF_PAGE            = ' '
      I_CALLBACK_HTML_TOP_OF_PAGE       = ' '
      I_CALLBACK_HTML_END_OF_LIST       = ' '
      I_STRUCTURE_NAME                  =
      I_BACKGROUND_ID                   = ' '
       I_GRID_TITLE                      = 'Purchase Order Details'
      I_GRID_SETTINGS                   = I_GRID_SETTINGS
       IS_LAYOUT                         = WA_LAYOUT
       IT_FIELDCAT                       = IT_FIELDCAT
      IT_EXCLUDING                      = IT_EXCLUDING
      IT_SPECIAL_GROUPS                 = IT_SPECIAL_GROUPS
       IT_SORT                           = IT_SORT
      IT_FILTER                         = IT_FILTER
      IS_SEL_HIDE                       = IS_SEL_HIDE
      I_DEFAULT                         = 'X'
      I_SAVE                            = ' '
      IS_VARIANT                        = IS_VARIANT
       IT_EVENTS                         = IT_EVENT
      IT_EVENT_EXIT                     = IT_EVENT_EXIT
      IS_PRINT                          = IS_PRINT
      IS_REPREP_ID                      = IS_REPREP_ID
      I_SCREEN_START_COLUMN             = 0
      I_SCREEN_START_LINE               = 0
      I_SCREEN_END_COLUMN               = 0
      I_SCREEN_END_LINE                 = 0
      I_HTML_HEIGHT_TOP                 = 0
      I_HTML_HEIGHT_END                 = 0
      IT_ALV_GRAPHICS                   = IT_ALV_GRAPHICS
      IT_HYPERLINK                      = IT_HYPERLINK
      IT_ADD_FIELDCAT                   = IT_ADD_FIELDCAT
      IT_EXCEPT_QINFO                   = IT_EXCEPT_QINFO
      IR_SALV_FULLSCREEN_ADAPTER        = IR_SALV_FULLSCREEN_ADAPTER
    IMPORTING
      E_EXIT_CAUSED_BY_CALLER           = E_EXIT_CAUSED_BY_CALLER
      ES_EXIT_CAUSED_BY_USER            = ES_EXIT_CAUSED_BY_USER
        TABLES
          T_OUTTAB                          = IT_FINAL
    EXCEPTIONS
       PROGRAM_ERROR                     = 1
       OTHERS                            = 2
      IF SY-SUBRC <> 0.
        MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
                WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
      ENDIF.
    ENDFORM.                    " GRID_DISPLAY
    *&      Form  LIST_DISPLAY
          LIST DISPLAY
    FORM LIST_DISPLAY .
      CALL FUNCTION 'REUSE_ALV_LIST_DISPLAY'
       EXPORTING
        I_INTERFACE_CHECK              = ' '
        I_BYPASSING_BUFFER             = I_BYPASSING_BUFFER
        I_BUFFER_ACTIVE                = ' '
         I_CALLBACK_PROGRAM             = V_REPID
        I_CALLBACK_PF_STATUS_SET       = ' '
    <b>     I_CALLBACK_USER_COMMAND        = 'IT_USER_COMMAND'</b>
        I_STRUCTURE_NAME               = I_STRUCTURE_NAME
         IS_LAYOUT                      = WA_LAYOUT
         IT_FIELDCAT                    = IT_FIELDCAT
        IT_EXCLUDING                   = IT_EXCLUDING
        IT_SPECIAL_GROUPS              = IT_SPECIAL_GROUPS
         IT_SORT                        = IT_SORT
        IT_FILTER                      = IT_FILTER
        IS_SEL_HIDE                    = IS_SEL_HIDE
        I_DEFAULT                      = 'X'
        I_SAVE                         = ' '
        IS_VARIANT                     = IS_VARIANT
         IT_EVENTS                      = IT_EVENT
        IT_EVENT_EXIT                  = IT_EVENT_EXIT
        IS_PRINT                       = IS_PRINT
        IS_REPREP_ID                   = IS_REPREP_ID
        I_SCREEN_START_COLUMN          = 0
        I_SCREEN_START_LINE            = 0
        I_SCREEN_END_COLUMN            = 0
        I_SCREEN_END_LINE              = 0
        IR_SALV_LIST_ADAPTER           = IR_SALV_LIST_ADAPTER
        IT_EXCEPT_QINFO                = IT_EXCEPT_QINFO
        I_SUPPRESS_EMPTY_DATA          = ABAP_FALSE
      IMPORTING
        E_EXIT_CAUSED_BY_CALLER        = E_EXIT_CAUSED_BY_CALLER
        ES_EXIT_CAUSED_BY_USER         = ES_EXIT_CAUSED_BY_USER
        TABLES
          T_OUTTAB                       = IT_FINAL
       EXCEPTIONS
         PROGRAM_ERROR                  = 1
         OTHERS                         = 2
      IF SY-SUBRC <> 0.
        MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
                WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
      ENDIF.
    ENDFORM.                    " LIST_DISPLAY
    *&      Form  HIERSEQ_DISPLAY
          HIERSEQ DISPLAY
    FORM HIERSEQ_DISPLAY .
      IT_KEYINFO-HEADER01 = 'EBELN'.
      IT_KEYINFO-ITEM01 = 'EBELN'.
      CALL FUNCTION 'REUSE_ALV_HIERSEQ_LIST_DISPLAY'
        EXPORTING
      I_INTERFACE_CHECK              = ' '
         I_CALLBACK_PROGRAM             = V_REPID
      I_CALLBACK_PF_STATUS_SET       = ' '
      I_CALLBACK_USER_COMMAND        = ' '
         IS_LAYOUT                      = WA_LAYOUT
         IT_FIELDCAT                    = IT_FIELDCAT
      IT_EXCLUDING                   = IT_EXCLUDING
      IT_SPECIAL_GROUPS              = IT_SPECIAL_GROUPS
         IT_SORT                        = IT_SORT
      IT_FILTER                      = IT_FILTER
      IS_SEL_HIDE                    = IS_SEL_HIDE
      I_SCREEN_START_COLUMN          = 0
      I_SCREEN_START_LINE            = 0
      I_SCREEN_END_COLUMN            = 0
      I_SCREEN_END_LINE              = 0
      I_DEFAULT                      = 'X'
      I_SAVE                         = ' '
      IS_VARIANT                     = IS_VARIANT
         IT_EVENTS                      = IT_EVENT
      IT_EVENT_EXIT                  = IT_EVENT_EXIT
          I_TABNAME_HEADER               = 'IT_EKKO'
          I_TABNAME_ITEM                 = 'IT_EKPO'
      I_STRUCTURE_NAME_HEADER        = I_STRUCTURE_NAME_HEADER
      I_STRUCTURE_NAME_ITEM          = I_STRUCTURE_NAME_ITEM
          IS_KEYINFO                     = IT_KEYINFO
      IS_PRINT                       = IS_PRINT
      IS_REPREP_ID                   = IS_REPREP_ID
      I_BYPASSING_BUFFER             = I_BYPASSING_BUFFER
      I_BUFFER_ACTIVE                = I_BUFFER_ACTIVE
      IR_SALV_HIERSEQ_ADAPTER        = IR_SALV_HIERSEQ_ADAPTER
      IT_EXCEPT_QINFO                = IT_EXCEPT_QINFO
      I_SUPPRESS_EMPTY_DATA          = ABAP_FALSE
    IMPORTING
      E_EXIT_CAUSED_BY_CALLER        = E_EXIT_CAUSED_BY_CALLER
      ES_EXIT_CAUSED_BY_USER         = ES_EXIT_CAUSED_BY_USER
        TABLES
          T_OUTTAB_HEADER                = IT_EKKO
          T_OUTTAB_ITEM                  = IT_EKPO
       EXCEPTIONS
         PROGRAM_ERROR                  = 1
         OTHERS                         = 2
      IF SY-SUBRC <> 0.
        MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
                WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
      ENDIF.
    ENDFORM.                    " HIERSEQ_DISPLAY
    <b>
    *& Form IT_USER_COMMAND
    text
    FORM IT_USER_COMMAND USING R_UCOMM LIKE SY-UCOMM
                               RS_SELFIELD TYPE SLIS_SELFIELD.
      FREE IT_FIELDCAT.
      CASE R_UCOMM.
        WHEN '&IC1'.
          READ TABLE IT_FINAL INDEX RS_SELFIELD-TABINDEX.
          PERFORM GET_EKBE.
          PERFORM GET_FIELD_CATALOG.
          PERFORM GET_LIST.
      ENDCASE.
    ENDFORM.                               "IT_USER_COMMAND</b>
    *&      Form  GET_EKBE
          text
    FORM GET_EKBE .
      IF NOT IT_FINAL[] IS INITIAL.
        SELECT EBELN
               EBELP
               BELNR
               MENGE
               MATNR
          INTO TABLE IT_EKBE
          FROM EKBE
           FOR ALL ENTRIES IN IT_FINAL
         WHERE EBELN = IT_FINAL-EBELN
           AND EBELP = IT_FINAL-EBELP.
      ENDIF.
    ENDFORM.                    " GET_EKBE
    *&      Form  GET_FIELD_CATALOG
          text
    FORM GET_FIELD_CATALOG .
      WA_FIELDCAT-FIELDNAME = 'EBELN'.
      WA_FIELDCAT-COL_POS = '1'.
      WA_FIELDCAT-JUST = 'R'.
      WA_FIELDCAT-SELTEXT_L = 'PO Number'.
      WA_FIELDCAT-LOWERCASE = 'X'.
      WA_FIELDCAT-DO_SUM = 'X'.
      APPEND WA_FIELDCAT TO IT_FIELDCAT.
      WA_FIELDCAT-FIELDNAME = 'EBELP'.
      WA_FIELDCAT-COL_POS = '2'.
      WA_FIELDCAT-JUST = 'R'.
      WA_FIELDCAT-SELTEXT_L = 'Item Number'.
      WA_FIELDCAT-LOWERCASE = 'X'.
      WA_FIELDCAT-DO_SUM = 'X'.
      APPEND WA_FIELDCAT TO IT_FIELDCAT.
      WA_FIELDCAT-FIELDNAME = 'BELNR'.
      WA_FIELDCAT-COL_POS = '3'.
      WA_FIELDCAT-JUST = 'R'.
      WA_FIELDCAT-SELTEXT_L = 'Material Document'.
      WA_FIELDCAT-LOWERCASE = 'X'.
      WA_FIELDCAT-DO_SUM = 'X'.
      APPEND WA_FIELDCAT TO IT_FIELDCAT.
      WA_FIELDCAT-FIELDNAME = 'MENGE'.
      WA_FIELDCAT-COL_POS = '4'.
      WA_FIELDCAT-JUST = 'R'.
      WA_FIELDCAT-SELTEXT_L = 'Quantity'.
      WA_FIELDCAT-LOWERCASE = 'X'.
      WA_FIELDCAT-DO_SUM = 'X'.
      APPEND WA_FIELDCAT TO IT_FIELDCAT.
      WA_FIELDCAT-FIELDNAME = 'MATNR'.
      WA_FIELDCAT-COL_POS = '5'.
      WA_FIELDCAT-JUST = 'R'.
      WA_FIELDCAT-SELTEXT_L = 'Material Number'.
      WA_FIELDCAT-LOWERCASE = 'X'.
      WA_FIELDCAT-DO_SUM = 'X'.
      APPEND WA_FIELDCAT TO IT_FIELDCAT.
    ENDFORM.                    " GET_FIELD_CATALOG
    *&      Form  get_list
          text
    FORM GET_LIST .
      IF RB1 = 'X'.
        CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
         EXPORTING
        I_INTERFACE_CHECK                 = ' '
        I_BYPASSING_BUFFER                = ' '
        I_BUFFER_ACTIVE                   = ' '
           I_CALLBACK_PROGRAM                = V_REPID
        I_CALLBACK_PF_STATUS_SET          = ' '
        I_CALLBACK_USER_COMMAND           = ' '
        I_CALLBACK_TOP_OF_PAGE            = ' '
        I_CALLBACK_HTML_TOP_OF_PAGE       = ' '
        I_CALLBACK_HTML_END_OF_LIST       = ' '
        I_STRUCTURE_NAME                  = I_STRUCTURE_NAME
        I_BACKGROUND_ID                   = ' '
           I_GRID_TITLE                      = 'SECONDARY LIST'
        I_GRID_SETTINGS                   = I_GRID_SETTINGS
        IS_LAYOUT                         = IS_LAYOUT
           IT_FIELDCAT                       = IT_FIELDCAT
        IT_EXCLUDING                      = IT_EXCLUDING
        IT_SPECIAL_GROUPS                 = IT_SPECIAL_GROUPS
        IT_SORT                           = IT_SORT
        IT_FILTER                         = IT_FILTER
        IS_SEL_HIDE                       = IS_SEL_HIDE
        I_DEFAULT                         = 'X'
        I_SAVE                            = ' '
        IS_VARIANT                        = IS_VARIANT
        IT_EVENTS                         = IT_EVENTS
        IT_EVENT_EXIT                     = IT_EVENT_EXIT
        IS_PRINT                          = IS_PRINT
        IS_REPREP_ID                      = IS_REPREP_ID
        I_SCREEN_START_COLUMN             = 0
        I_SCREEN_START_LINE               = 0
        I_SCREEN_END_COLUMN               = 0
        I_SCREEN_END_LINE                 = 0
        I_HTML_HEIGHT_TOP                 = 0
        I_HTML_HEIGHT_END                 = 0
        IT_ALV_GRAPHICS                   = IT_ALV_GRAPHICS
        IT_HYPERLINK                      = IT_HYPERLINK
        IT_ADD_FIELDCAT                   = IT_ADD_FIELDCAT
        IT_EXCEPT_QINFO                   = IT_EXCEPT_QINFO
        IR_SALV_FULLSCREEN_ADAPTER        = IR_SALV_FULLSCREEN_ADAPTER
      IMPORTING
        E_EXIT_CAUSED_BY_CALLER           = E_EXIT_CAUSED_BY_CALLER
        ES_EXIT_CAUSED_BY_USER            = ES_EXIT_CAUSED_BY_USER
          TABLES
            T_OUTTAB                          = IT_EKBE
         EXCEPTIONS
           PROGRAM_ERROR                     = 1
           OTHERS                            = 2
        IF SY-SUBRC <> 0.
          MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
                  WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
        ENDIF.
      ENDIF.
      IF RB2 = 'X'.
        CALL FUNCTION 'REUSE_ALV_LIST_DISPLAY'
         EXPORTING
      I_INTERFACE_CHECK              = ' '
      I_BYPASSING_BUFFER             = I_BYPASSING_BUFFER
      I_BUFFER_ACTIVE                = ' '
           I_CALLBACK_PROGRAM             = V_REPID
      I_CALLBACK_PF_STATUS_SET       = ' '
      I_CALLBACK_USER_COMMAND        = ' '
      I_STRUCTURE_NAME               = I_STRUCTURE_NAME
      IS_LAYOUT                      = IS_LAYOUT
           IT_FIELDCAT                    = IT_FIELDCAT
      IT_EXCLUDING                   = IT_EXCLUDING
      IT_SPECIAL_GROUPS              = IT_SPECIAL_GROUPS
      IT_SORT                        = IT_SORT
      IT_FILTER                      = IT_FILTER
      IS_SEL_HIDE                    = IS_SEL_HIDE
      I_DEFAULT                      = 'X'
      I_SAVE                         = ' '
      IS_VARIANT                     = IS_VARIANT
      IT_EVENTS                      = IT_EVENTS
      IT_EVENT_EXIT                  = IT_EVENT_EXIT
      IS_PRINT                       = IS_PRINT
      IS_REPREP_ID                   = IS_REPREP_ID
      I_SCREEN_START_COLUMN          = 0
      I_SCREEN_START_LINE            = 0
      I_SCREEN_END_COLUMN            = 0
      I_SCREEN_END_LINE              = 0
      IR_SALV_LIST_ADAPTER           = IR_SALV_LIST_ADAPTER
      IT_EXCEPT_QINFO                = IT_EXCEPT_QINFO
      I_SUPPRESS_EMPTY_DATA          = ABAP_FALSE
    IMPORTING
      E_EXIT_CAUSED_BY_CALLER        = E_EXIT_CAUSED_BY_CALLER
      ES_EXIT_CAUSED_BY_USER         = ES_EXIT_CAUSED_BY_USER
          TABLES
            T_OUTTAB                       = IT_EKBE
         EXCEPTIONS
           PROGRAM_ERROR                  = 1
           OTHERS                         = 2
        IF SY-SUBRC <> 0.
          MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
                  WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
        ENDIF.
      ENDIF.
    ENDFORM.                    " get_list
    Thanks
    Vikranth Khimavath
    Message was edited by:
            Khimavath Vikranth

  • Change sales orders from report

    Hi there,
    My report shows grid_display,
    column1 is chechbox,
    column2 is Sales Order number,
    column3 is Sales Order description. here user has to check required sales Orders and press pushbutton in appl tool bar, all these Sales Orders(i.e. checked by user) have to be opend in changemode automatically one after another, where user can change accordingly. can anybody pls sugest logic for this.
    thanks in advance.
    Zakir.

    used bapi .
    pass those data to bapi.
    **&#12288;Program ID &#65306;
    **&#12288;Program Desc &#65306;              
    **&#12288;Process Overview &#65306;          SD
    **&#12288;Created By &#65306;                P.KARTHIKEYAN
    REPORT  ZBAPI_SALESORDER_CHANGE LINE-SIZE 132 MESSAGE-ID ZMMBAPI .
           Internal table definition                                     *
    *****<<<< BAPI Sales Order>>>>>>>>>>>>>>>>>>>>>>>
    DATA: GT_SALESDOCUMENT LIKE  BAPIVBELN-VBELN,
    ******<<<<Communication Fields: SD Order Header>>>
          GT_ORDER_HEADER_IN  LIKE BAPISDH1,
    ******<<<<<Checkbox List: SD Order Header>>>>>>>>>
          GT_ORDER_HEADER_INX LIKE BAPISDH1X,
    *****<<<Return Parameter>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
         GT_RETURN LIKE BAPIRET2 OCCURS 0 WITH HEADER LINE,
    *******<<<<<<<Communication Fields: Sales and Distribution Document Item>>
         GT_ORDER_ITEM_IN LIKE BAPISDITM OCCURS 0 WITH HEADER LINE,
    *******<<<<<<<Communication Fields: Sales and Distribution Document Item>>
         GT_ORDER_ITEM_INX LIKE BAPISDITMX OCCURS 0 WITH HEADER LINE,
    *******<<<<<<<<Communication Fields for Maintaining Conditions in the Order
         GT_CONDITIONS_IN LIKE BAPICOND OCCURS 0 WITH HEADER LINE,
    *******<<<<<<<<Communication Fields for Maintaining Conditions in the Order
         GT_CONDITIONS_INX LIKE BAPICONDX OCCURS 0 WITH HEADER LINE.
       FLAT FLIE Internal table definition                                     *
    DATA: BEGIN OF GT_FT_SALES OCCURS 0,
          SALESDOCUMENT(10), "SALESDOCUMENT
          SALES_ORG(4) , "Sales Organization
          DISTR_CHAN(2), "Sales Organization
          DIVISION(2) ,  " DIVISION
          PURCH_NO_C(35)  , "Customer purchase order number
          SALES_DIST(6) , "Sales district
          INCOTERMS1(3)  ,                                      "INCOTERMS1
          PMNTTRMS(4)  , "Terms of payment key
          ITM_NUMBER(6) ,   "Sales Document Item
          PO_ITM_NO(6)  ,   "Item Number of the Underlying Purchase Order
          MATERIAL(18), "Material Number
    END OF GT_FT_SALES,
    MSG(240) TYPE  C,  " Return Message
    E_REC(8) TYPE C,    " Error Records Counter
    REC_NO(8) TYPE C, " Records Number Indicator
    S_REC(8) TYPE C,   " Successful Records Counter
    T_REC(8) TYPE C,   " Total Records Counter
    ERR_ORDER(10) TYPE C.  " Order Number Indicator
    selection block for EXCEL UPLOAD FILE>>>>>>>>>>>>>>>>>>>>>>>>
    SELECTION-SCREEN BEGIN OF BLOCK B1 WITH FRAME TITLE TEXT-000.
    PARAMETERS FILE TYPE  IBIPPARMS-PATH OBLIGATORY.
    SELECTION-SCREEN END OF BLOCK B1.
    *<<<<AT SELECTION-SCREEN ON VALUE-REQUEST FOR FILE .>>>>>>>>>>>>
    AT SELECTION-SCREEN ON VALUE-REQUEST FOR FILE .
      CALL FUNCTION 'F4_FILENAME'
        EXPORTING
          PROGRAM_NAME  = SYST-CPROG
          DYNPRO_NUMBER = SYST-DYNNR
        IMPORTING
          FILE_NAME     = FILE.
    **<<<<<<<<<<<<<<<<<START-OF-SELECTION.>>>>>>>>>>>>>>>>>>>>>>>>>>>
    START-OF-SELECTION.
      CALL FUNCTION 'WS_UPLOAD'                                 "#EC *
        EXPORTING
          FILENAME                = FILE
          FILETYPE                = 'DAT'
        TABLES
          DATA_TAB                =  GT_FT_SALES
        EXCEPTIONS
          CONVERSION_ERROR        = 1
          FILE_OPEN_ERROR         = 2
          FILE_READ_ERROR         = 3
          INVALID_TYPE            = 4
          NO_BATCH                = 5
          UNKNOWN_ERROR           = 6
          INVALID_TABLE_WIDTH     = 7
          GUI_REFUSE_FILETRANSFER = 8
          CUSTOMER_ERROR          = 9
          NO_AUTHORITY            = 10
          OTHERS                  = 11.
      IF  SY-SUBRC <> 0  .
        MESSAGE E000.
      ENDIF.
      SKIP 3.
      FORMAT COLOR COL_HEADING INVERSE ON.
      WRITE 40 TEXT-001.
      FORMAT COLOR COL_HEADING INVERSE OFF.
      SKIP 1.
      FORMAT COLOR COL_NEGATIVE INVERSE ON.
      WRITE :/ TEXT-002, 13 SY-MANDT , 104 TEXT-003, 111 SY-UNAME,
                / TEXT-004, 13 SY-DATUM , 104 TEXT-005, 111 SY-UZEIT.
      FORMAT COLOR COL_NEGATIVE INVERSE OFF.
      SKIP 3.
      LOOP AT GT_FT_SALES.
        PERFORM UPLOAD_FILE.
      ENDLOOP.
      T_REC = E_REC + S_REC.
      SKIP 3.
      FORMAT COLOR COL_TOTAL INVERSE ON.
      WRITE: /38 TEXT-007, T_REC.
      FORMAT COLOR COL_TOTAL INVERSE OFF.
      FORMAT COLOR COL_NEGATIVE INVERSE ON.
      WRITE: /38 TEXT-008, E_REC.
      FORMAT COLOR COL_NEGATIVE INVERSE OFF.
      FORMAT COLOR COL_TOTAL INVERSE ON.
      WRITE: /38 TEXT-009, S_REC.
      FORMAT COLOR COL_TOTAL INVERSE OFF.
    *&      Form  UPLOAD_FILE
          text
    -->  p1        text
    <--  p2        text
    FORM UPLOAD_FILE .
    ********<<<< BAPI Sales Order>>>>>>>>>>>>>>>>>>>>>>>
      GT_SALESDOCUMENT = GT_FT_SALES-SALESDOCUMENT . " '0000000233' "Order Number
    ******<<<<Communication Fields: SD Order Header>>>
      GT_ORDER_HEADER_IN-SALES_ORG = GT_FT_SALES-SALES_ORG .   "'0001' "Sales Organization
      GT_ORDER_HEADER_IN-DISTR_CHAN = GT_FT_SALES-DISTR_CHAN . "Distribution Channel
      GT_ORDER_HEADER_IN-DIVISION = GT_FT_SALES-DIVISION .    "Division
      GT_ORDER_HEADER_IN-PURCH_NO_C = GT_FT_SALES-PURCH_NO_C . "Customer purchase order number
      GT_ORDER_HEADER_IN-SALES_DIST = GT_FT_SALES-SALES_DIST . " Sales district
      GT_ORDER_HEADER_IN-INCOTERMS1 = GT_FT_SALES-INCOTERMS1 . "Incoterms (part 1)
      GT_ORDER_HEADER_IN-PMNTTRMS = GT_FT_SALES-PMNTTRMS .      "Terms of payment key
    ******<<<<Communication Fields: SD Order Header FLAG>>>
      GT_ORDER_HEADER_INX-UPDATEFLAG = 'U'.
      GT_ORDER_HEADER_INX-SALES_ORG = 'X'. "Sales Organization
      GT_ORDER_HEADER_INX-DISTR_CHAN = 'X'. "Distribution Channel
      GT_ORDER_HEADER_INX-DIVISION = 'X'. "Division
      GT_ORDER_HEADER_INX-PURCH_NO_C = 'X' ."Customer purchase order number
      GT_ORDER_HEADER_INX-SALES_DIST = 'X'. " Sales district
      GT_ORDER_HEADER_INX-INCOTERMS1 = 'X'."Incoterms (part 1)
      GT_ORDER_HEADER_INX-PMNTTRMS = 'X'. "Terms of payment key
    *******<<<<<<<Communication Fields: Sales and Distribution Document Item>>
      GT_ORDER_ITEM_IN-ITM_NUMBER = GT_FT_SALES-ITM_NUMBER . "'000010' "Sales Document Item
      GT_ORDER_ITEM_IN-PO_ITM_NO   = GT_FT_SALES-PO_ITM_NO .  "'PO-129' "Item Number of the Underlying Purchase Order
      GT_ORDER_ITEM_IN-MATERIAL  = GT_FT_SALES-MATERIAL . "'M-24' "Material Number
      APPEND GT_ORDER_ITEM_IN.
    *******<<<<<<<Communication Fields: Sales and Distribution Document Item>>
      GT_ORDER_ITEM_INX-UPDATEFLAG  = 'U'.
      GT_ORDER_ITEM_INX-ITM_NUMBER = '000010'. "Sales Document Item
      GT_ORDER_ITEM_INX-PO_ITM_NO   = 'X'.  "Item Number of the Underlying Purchase Order
      GT_ORDER_ITEM_INX-MATERIAL  = 'X'. "Material Number
      APPEND GT_ORDER_ITEM_INX.
    *******<<<<<<<<Communication Fields for Maintaining Conditions in the Order>>>>
      GT_CONDITIONS_IN-ITM_NUMBER = GT_FT_SALES-ITM_NUMBER . "'000010'  "Condition item number
      APPEND GT_CONDITIONS_IN.
    *******<<<<<<<<Communication Fields for Maintaining Conditions in the Order FLAG>>>
      GT_CONDITIONS_INX-ITM_NUMBER = '000010' ."Condition item number
      APPEND GT_CONDITIONS_INX.
      CALL FUNCTION 'BAPI_SALESORDER_CHANGE'
        EXPORTING
          SALESDOCUMENT    = GT_SALESDOCUMENT
          ORDER_HEADER_IN  = GT_ORDER_HEADER_IN
          ORDER_HEADER_INX = GT_ORDER_HEADER_INX
        TABLES
          RETURN           = GT_RETURN
          ORDER_ITEM_IN    = GT_ORDER_ITEM_IN
          ORDER_ITEM_INX   = GT_ORDER_ITEM_INX
          CONDITIONS_IN    = GT_CONDITIONS_IN
          CONDITIONS_INX   = GT_CONDITIONS_INX.
      IF GT_RETURN-TYPE EQ 'E'.
        ERR_ORDER = GT_RETURN-MESSAGE_V1.
        READ TABLE GT_RETURN WITH KEY ID = 'V1'.
        E_REC = E_REC + 1.
        CONCATENATE TEXT-006 ERR_ORDER ':' GT_RETURN-MESSAGE INTO MSG SEPARATED BY SPACE .
        CONDENSE MSG.
        FORMAT COLOR COL_NEGATIVE INVERSE ON.
        WRITE / MSG  .
        FORMAT COLOR COL_NEGATIVE INVERSE OFF.
      ELSEIF GT_RETURN-TYPE EQ 'S'.
        S_REC = S_REC + 1.
        FORMAT COLOR COL_POSITIVE INVERSE ON.
        WRITE / GT_RETURN-MESSAGE .
        FORMAT COLOR COL_POSITIVE INVERSE OFF.
        CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
          EXPORTING
            WAIT   = 'X'
          IMPORTING
            RETURN = GT_RETURN.
      ENDIF.
    ENDFORM.                    " UPLOAD_FILE

  • Not Able to Generate Out of the Report by adding the new 2 fields

    Hi,
    I'm Very new to ABAP. I have created one report. after 2 new fields added they are EKNAM and EKGRP.
    The Thing is the remaining fields are displaying in the output. The Newly added fields are not displaying the out. I was able to add this 2 fields in the head of the report. But issue is not able to get the data on these 2 fields.
    Please see the below program and any one please help me out to display the data in this report for the fields eknam and ekgrp.
    TABLES: eban,
            lfa1,
            ekko,
            t024,
            v_username.
    DATA: BEGIN OF i_req_items OCCURS 10,
            ernam LIKE eban-ernam,         "Created by
            lifnr LIKE eban-lifnr,         "Desired vendor
            ebeln LIKE eban-ebeln,         "PO Number
            ebelp LIKE eban-ebelp,         "PO Item
            eknam LIKE t024-eknam,         "Pur.Grp Name
            ekgrp LIKE t024-ekgrp,         "Pur.Grp Number
            flief LIKE eban-flief,         "Fixed vendor
            name1 LIKE lfa1-name1,         "Vendor name
            badat LIKE eban-badat,         "Creation date
            erdat LIKE eban-erdat,         "Change date
            banfn LIKE eban-banfn,         "Requisition no.
            bnfpo LIKE eban-bnfpo,         "Req. item no.
            bsart LIKE eban-bsart,         "Document type
            knttp LIKE eban-knttp,         "Acct.assgmt category
            txz01 LIKE eban-txz01,         "PO item description
            menge LIKE eban-menge,         "Quantity
            preis LIKE eban-preis,         "Price
            peinh LIKE eban-peinh,         "Price unit
            value(14) TYPE p DECIMALS 2,   "Item Value
          END OF i_req_items.
    DATA: BEGIN OF i_reqs OCCURS 10,
            ernam LIKE eban-ernam,         "Created by
            persn LIKE usr21-persnumber,   "Person number
            uname LIKE adrp-name_text,     "User name
            lifnr LIKE eban-lifnr,         "Vendor
            name1 LIKE lfa1-name1,         "Vendor name
            badat LIKE eban-badat,         "Creation date
            banfn LIKE eban-banfn,         "Requisition no.
            bnfpo LIKE eban-bnfpo,         "Req. item no.
            bsart LIKE eban-bsart,         "Document type
            knttp LIKE eban-knttp,         "Acct.assgmt category
            txz01 LIKE eban-txz01,         "PO item description
            eknam like t024-eknam,         "Purchase Grp Name
            ekgrp like t024-ekgrp,         "Purchase Grp Number
            value(14) TYPE p DECIMALS 2,   "Item Value
          END OF i_reqs.
    DATA: BEGIN OF i_req_keys OCCURS 0,
            ernam LIKE eban-ernam,         "Created by
            lifnr LIKE eban-lifnr,         "Desired vendor
            erdat LIKE eban-erdat,         "Create or Change date
            banfn LIKE eban-banfn,         "Requisition no.
            bnfpo LIKE eban-bnfpo,         "Req. item no.
            eknam like t024-eknam,         "Purchase Grp Name
            ekgrp like t024-ekgrp,         "Purchase Grp number
          END OF i_req_keys.
    DATA: BEGIN OF i_req_keeper OCCURS 0,
            ernam LIKE eban-ernam,         "Created by
            lifnr LIKE eban-lifnr,         "Desired vendor
            banfn LIKE eban-banfn,         "Requisition no
          END OF i_req_keeper.
    DATA: wa_reqitems LIKE i_req_items.
    DATA: BEGIN OF i_export OCCURS 10,
           record(150) TYPE c,
          END OF i_export.
    CONSTANTS
    CONSTANTS:
          c_doccat       LIKE eban-bstyp  VALUE 'B',
          c_creind       LIKE eban-estkz  VALUE 'R',
          c_delflag      LIKE eban-loekz  VALUE 'L',
          c_write(5)     TYPE c   VALUE 'WRITE',
          c_slash(1)     TYPE c   VALUE '/',
    *start ESPZC U8DK900439
         c_delimiter    TYPE x   VALUE '09',
           c_delimiter    TYPE c VALUE cl_abap_char_utilities=>horizontal_tab,
    *end ESPZC U8DK900439
          c_sc(1)        TYPE c   VALUE ';',
          c_x(1)         TYPE c   VALUE 'X',
          c_usd(1)       TYPE c   VALUE '2',
          c_export LIKE authb-filename VALUE '/BAY2/UBEM_SPLIT_REQS'.
    WORKING VARIABLES
    DATA: w_report_id   LIKE syst-repid,
          w_sttime      LIKE syst-uzeit,
          w_rpt_pagno   LIKE syst-pagno,
          w_rc          LIKE sy-subrc,
          w_datelow     LIKE eban-badat,
          w_datehigh    LIKE eban-badat,
          w_export      LIKE c_export,
          w_records     TYPE i,
          w_message(50) TYPE c.
    TYPES number TYPE i.
    SELECTION SCREEN / PARAMETERS
    SELECTION-SCREEN BEGIN OF BLOCK org WITH FRAME TITLE text-001.
    PARAMETERS: p_purorg LIKE eban-ekorg OBLIGATORY DEFAULT 'US02'.
    SELECT-OPTIONS: s_doctyp FOR eban-bsart,
                    s_date FOR eban-badat.
    PARAMETERS: p_timper(2) TYPE n.
    SELECTION-SCREEN: COMMENT 37(37) text-002.
    SELECTION-SCREEN END OF BLOCK org.
    SELECTION-SCREEN BEGIN OF BLOCK outp WITH FRAME TITLE text-003.
    PARAMETERS: p_onlin  RADIOBUTTON GROUP outp DEFAULT 'X',
                p_servr  RADIOBUTTON GROUP outp.
    SELECTION-SCREEN END OF BLOCK outp.
    AT SELECTION SCREEN
    AT SELECTION-SCREEN.
      IF p_servr = c_x.
        CLEAR w_rc.
        PERFORM authority_check_dataset USING    w_export
                                        CHANGING w_rc.
        IF w_rc <> 0.
          MESSAGE e532 WITH text-006 w_export.
        ENDIF.
        CLEAR w_rc.
        PERFORM verify_unix_path_and_file CHANGING w_rc.
        IF w_rc <> 0.
          MESSAGE e531 WITH w_message.
        ENDIF.
      ENDIF.
      INITIALIZATION EVENT
    INITIALIZATION.
      PERFORM get_filename.
      MOVE  syst-uzeit  TO   w_sttime.
      MOVE  syst-repid  TO   w_report_id.
      CLEAR: w_rpt_pagno.
    START-OF-SELECTION.
      PERFORM get_data.
      IF p_onlin = c_x.
        IF w_records GT 0.
          PERFORM print_report_header.
          PERFORM write_report.
        ELSE.
          MESSAGE i531 WITH text-007.
        ENDIF.
      ELSEIF p_servr = c_x.
        PERFORM write_export.
      ENDIF.
    END-OF-SELECTION.
    ---- F O R M   R O U T I N E S -
    *&     FORM get_filename
    FORM get_filename.
      CALL FUNCTION 'FILE_GET_NAME'
        EXPORTING
          logical_filename = c_export
        IMPORTING
          file_name        = w_export
        EXCEPTIONS
          file_not_found   = 1
          OTHERS           = 2.
      IF sy-subrc <> 0.
      ENDIF.
    ENDFORM.                    " get_filename
      FORM authority_check_dataset
    FORM authority_check_dataset USING    p_filename
                                 CHANGING p_rc.
      CALL FUNCTION 'AUTHORITY_CHECK_DATASET'
        EXPORTING
          activity         = c_write
          filename         = p_filename
        EXCEPTIONS
          no_authority     = 1
          activity_unknown = 2
          OTHERS           = 3.
      p_rc = sy-subrc.
    ENDFORM.                    "authority_check_dataset
        FORM verify_unix_path_and_file
    FORM verify_unix_path_and_file CHANGING p_rc.
    *start ESPZC U8DK900439
    OPEN DATASET w_export FOR OUTPUT IN TEXT MODE
         MESSAGE w_message.
      OPEN DATASET w_export FOR OUTPUT IN TEXT MODE ENCODING DEFAULT
          MESSAGE w_message.
    *end ESPZC U8DK900439
      p_rc = sy-subrc.
    ENDFORM.                    "verify_unix_path_and_file
      FORM get_data
    FORM get_data.
      CLEAR w_datelow.
      CLEAR w_datehigh.
      w_datelow = s_date-low - p_timper.
    w_datehigh = s_date-high + p_timper.
      w_datehigh = s_date-high.
      SELECT ernam lifnr ebeln ebelp flief badat erdat banfn bnfpo bsart
            knttp menge preis peinh txz01
       FROM eban
       INTO CORRESPONDING FIELDS OF TABLE i_req_items
          WHERE bstyp = c_doccat
            AND estkz = c_creind
            AND knttp <> space
            AND bsart IN s_doctyp
            AND loekz <> c_delflag
            AND ekorg EQ p_purorg
           AND ( ( badat BETWEEN w_datelow and w_datehigh ) OR
            ( erdat BETWEEN w_datelow AND w_datehigh ) ).
            AND  erdat BETWEEN w_datelow AND w_datehigh.
      IF sy-subrc = 0.
        LOOP AT i_req_items.
          IF i_req_items-lifnr IS INITIAL.
            IF NOT i_req_items-flief IS INITIAL.
              MOVE i_req_items-flief TO i_req_items-lifnr.
              MODIFY i_req_items.
            ENDIF.
            IF NOT i_req_items-ebeln IS INITIAL.
              SELECT lifnr FROM ekko
                  INTO i_req_items-lifnr
                  WHERE ebeln = i_req_items-ebeln.
              ENDSELECT.
              MODIFY i_req_items.
            ENDIF.
          ENDIF.
          IF i_req_items-erdat GT i_req_items-badat.
            MOVE i_req_items-erdat TO i_req_items-badat.
            MODIFY i_req_items.
          ENDIF.
        ENDLOOP.
        PERFORM weed_out_unique_records.
        PERFORM apply_time_period.
        SORT i_req_items BY ernam lifnr banfn bnfpo.
        LOOP AT i_req_items.
          i_req_items-value = ( i_req_items-menge *
               ( i_req_items-preis / i_req_items-peinh ) ).
          MODIFY i_req_items.
        ENDLOOP.
    Getting vendor name from table LFA1 -
        CLEAR i_req_items.
        LOOP AT i_req_items.
          SELECT SINGLE name1 FROM lfa1
            INTO i_req_items-name1
              WHERE lifnr = i_req_items-lifnr.
          MODIFY i_req_items.
        ENDLOOP.
        LOOP AT i_req_items.
          MOVE-CORRESPONDING i_req_items TO i_reqs.
    Getting user name from view v_username -
          SELECT SINGLE name_text
           FROM v_username INTO i_reqs-uname
          WHERE bname = i_reqs-ernam.
          APPEND i_reqs.
        ENDLOOP.
      ENDIF.
      DESCRIBE TABLE i_reqs LINES w_records.
    ENDFORM.                        "Get_data
      FORM print_report_header
    FORM print_report_header.
      ADD  1   TO   w_rpt_pagno.
      CALL FUNCTION '/BAY2/UBEXBH_BAYER_HEADR_FUN'
        EXPORTING
          f_jobname        = text-020
          f_business_group = text-021
          f_report_title   = text-022
          f_repid          = w_report_id
          f_sysid          = syst-sysid
          f_linsz          = syst-linsz
          f_pagno          = w_rpt_pagno
          f_mandt          = syst-mandt
          f_datum          = syst-datum
          f_uzeit          = w_sttime.
      FORMAT COLOR COL_HEADING.
      WRITE:  /1     text-010,      "Created by CWID & user name
              29     text-011,      "Vendor #
              38     text-012,      "Vendor Name
              69     text-013,      "Req Number
              79     text-014,      "/Item
              87     text-015,      "Created On
              98     text-017,      "A (AcctAssgmtCat)
             100(14) text-019 RIGHT-JUSTIFIED,  "Item Value
             116(30) text-018,      "Item Description
             148     text-030,      "Pur.Grp Name
             170     text-031.      "Pur.Grp Number
      FORMAT COLOR OFF.
      ULINE.
    ENDFORM.                             "print_report_header
    *&      Form  WRITE_REPORT
    FORM write_report.
      LOOP AT i_reqs.
        WRITE: /1 i_reqs-ernam,
                9(18) i_reqs-uname,
               29 i_reqs-lifnr,
               38(30) i_reqs-name1,
               69 i_reqs-banfn,
               79 c_slash,
               80 i_reqs-bnfpo,
               87 i_reqs-badat,
               98 i_reqs-knttp,
              100(14) i_reqs-value CURRENCY c_usd,
              116(30) i_reqs-txz01,
              145 i_reqs-eknam,
              160 i_reqs-ekgrp.
      ENDLOOP.
    ENDFORM.                    "write_report
    *&      Form  WRITE_EXPORT
    FORM write_export.
      DATA: l_value(14)    TYPE c,
            l_bsart(100)   TYPE c,
            l_uname(7)     TYPE c,
            l_records(5)   TYPE c,
            l_header(150)  TYPE c,
            l_params(150)  TYPE c,
            i_char         TYPE i.
      LOOP AT i_reqs.
        CLEAR l_value.
        CLEAR l_uname.
        l_value = i_reqs-value.
        l_uname = sy-uname.
        CONCATENATE: i_reqs-uname
                     i_reqs-ernam
                     i_reqs-lifnr
                     i_reqs-name1
                     i_reqs-banfn
                     i_reqs-bnfpo
                     i_reqs-badat
                     i_reqs-knttp
                     l_value
                     i_reqs-txz01 INTO i_export
                                  SEPARATED BY c_delimiter.
        APPEND i_export.
      ENDLOOP.
      CONCATENATE: text-008   "Created By Name
                   text-009   "CWID
                   text-011   "Vendor No
                   text-012   "Vendor Name
                   text-013   "Req Number
                   text-023   "Item
                   text-015   "Created On
                   text-017   "A
                   text-019   "Item Value
                   text-018   "Item Description
                   text-030   "Purchase Grp name
                   text-031   "Purchase Grp number
                   INTO l_header SEPARATED BY c_delimiter.
      INSERT l_header INTO i_export INDEX 1.
      IF sy-batch IS INITIAL.
        MOVE sy-uname TO l_uname.
      ELSE.
        MOVE text-024 TO l_uname.
      ENDIF.
      PERFORM collect_bsart CHANGING l_bsart
                                     i_char.
      l_records = w_records.
      CONCATENATE: sy-sysid
                   p_purorg
                   l_bsart(i_char)
                   s_date-low
                   s_date-high
                   p_timper
                   l_uname
                   sy-datum
                   l_records INTO l_params
                             SEPARATED BY c_delimiter.
      INSERT l_params INTO i_export INDEX 1.
      LOOP AT i_export.
        CONDENSE i_export NO-GAPS.
        TRANSFER i_export TO w_export.
      ENDLOOP.
      CLOSE DATASET w_export.
      MESSAGE s533 WITH text-028 w_export text-029.
    ENDFORM.                    "write_export
    *&      FORM collect_bsart
    FORM collect_bsart CHANGING p_bsart
                                p_char.
      CLEAR p_bsart.
      LOOP AT s_doctyp.
        IF sy-tabix = 1.
          p_bsart = s_doctyp-low.
        ELSE.
          CONCATENATE: p_bsart c_sc s_doctyp-low INTO p_bsart.
        ENDIF.
      ENDLOOP.
      CONDENSE p_bsart NO-GAPS.
      p_char = strlen( p_bsart ).
    ENDFORM.                      "collect_bsart
    *&      Form  WEED_OUT_UNIQUE_RECORDS
    FORM weed_out_unique_records.
      DATA: i_l_req_items LIKE i_req_items OCCURS 0 WITH HEADER LINE.
      DATA: i_l_req_final_items LIKE i_req_items OCCURS 0 WITH HEADER LINE.
      DATA: l_count TYPE i,
            l_sy_tabix LIKE sy-tabix,
            l_banfn    LIKE eban-banfn.
      REFRESH i_l_req_items.
      REFRESH i_l_req_final_items.
      CLEAR l_banfn.
      i_l_req_items[]       = i_req_items[].
      i_l_req_final_items[] = i_req_items[].
      SORT i_req_items         BY ernam lifnr.
      SORT i_l_req_items       BY ernam lifnr.
      SORT i_l_req_final_items BY ernam lifnr.
      LOOP AT i_l_req_items.
        l_banfn = i_l_req_items-banfn.
        CLEAR l_count.
        LOOP AT i_req_items
            WHERE ernam = i_l_req_items-ernam
              AND lifnr = i_l_req_items-lifnr.
          IF i_req_items-banfn <> l_banfn.
            ADD +1 TO l_count.
          ENDIF.
        ENDLOOP.
        IF NOT ( l_count > 0 ).
          LOOP AT i_l_req_final_items
            WHERE ernam = i_l_req_items-ernam
              AND lifnr = i_l_req_items-lifnr.
            DELETE i_l_req_final_items.
          ENDLOOP.
        ENDIF.
      ENDLOOP.
      REFRESH i_req_items.
      i_req_items[] = i_l_req_final_items[].
    ENDFORM.                    " WEED_OUT_UNIQUE_RECORDS
    *&      Form  APPLY_TIME_PERIOD
    FORM apply_time_period.
      DATA: l_i_req_keys LIKE i_req_keys.
      DATA: l_days_diff          TYPE p,
            l_no_of_key_recs     TYPE i,
            l_next_item          LIKE sy-tabix,
            l_finished_with_keys TYPE c VALUE 'N',
            l_add_line           TYPE c VALUE 'N',
            l_count              TYPE i,
            l_req_ernam          LIKE eban-ernam,
            l_req_lifnr          LIKE lfa1-lifnr,
            l_req_banfn          LIKE eban-banfn,
            l_save_tabix         like sy-tabix.
      REFRESH: i_req_keys, i_req_keeper.
      LOOP AT i_req_items.
        MOVE-CORRESPONDING i_req_items TO
                           i_req_keys.
        IF i_req_items-erdat IS INITIAL.
          i_req_keys-erdat = i_req_items-badat.
        ENDIF.
        APPEND i_req_keys.
      ENDLOOP.
      SORT i_req_keys BY ernam lifnr erdat.
      CLEAR l_no_of_key_recs.
      DESCRIBE TABLE i_req_keys LINES l_no_of_key_recs.
      LOOP AT i_req_keys.
        IF l_add_line = 'Y'.
          MOVE-CORRESPONDING i_req_keys
                          TO i_req_keeper.
          APPEND i_req_keeper.
          l_add_line = 'N'.
        ENDIF.
        IF l_finished_with_keys = 'Y'.
          EXIT.
        ENDIF.
        CLEAR l_next_item.
        l_save_tabix = sy-tabix.
        COMPUTE l_next_item = sy-tabix + 1.
        IF l_next_item = l_no_of_key_recs.
          l_finished_with_keys = 'Y'.
        ENDIF.
        clear: l_i_req_keys.
        READ TABLE i_req_keys INDEX l_next_item
            INTO l_i_req_keys.
        sy-tabix = l_save_tabix.
        CLEAR l_days_diff.
        l_days_diff = l_i_req_keys-erdat -
                      i_req_keys-erdat.
        IF l_i_req_keys-ernam  =
           i_req_keys-ernam                  AND
           l_i_req_keys-lifnr  =
           i_req_keys-lifnr                  AND
           l_i_req_keys-banfn  <>
           i_req_keys-banfn                  AND
           l_days_diff         <= p_timper.
          MOVE-CORRESPONDING i_req_keys
                          TO i_req_keeper.
          APPEND i_req_keeper.
          l_add_line = 'Y'.
        ENDIF.
      ENDLOOP.
      DELETE ADJACENT DUPLICATES FROM i_req_keeper
                            COMPARING ALL FIELDS.
      SORT i_req_keeper BY ernam lifnr banfn.
      LOOP AT i_req_items.
        CLEAR l_count.
        CLEAR: l_req_ernam,
               l_req_lifnr,
               l_req_banfn.
        l_req_ernam = i_req_items-ernam.
        l_req_lifnr = i_req_items-lifnr.
        l_req_banfn = i_req_items-banfn.
        LOOP AT i_req_keeper
            WHERE ernam = i_req_items-ernam
              AND lifnr = i_req_items-lifnr
              AND banfn = i_req_items-banfn.
          ADD +1 TO l_count.
        ENDLOOP.
        IF NOT ( l_count > 0 ).
          LOOP AT i_req_items
            WHERE ernam = l_req_ernam
              AND lifnr = l_req_lifnr
              AND banfn = l_req_banfn.
            DELETE i_req_items.
          ENDLOOP.
        ENDIF.
      ENDLOOP.
    ENDFORM.                    " APPLY_TIME_PERIOD

    Rajesh,
    Put a breakpoint and try to debug the report step by step.
    You will findout the reason very easily.
    Whenever you have a select and are trying to append into an internal table, keep checking your internal table if it is been populated with the correct records.
    This way, you will findout the cause and can correct is accordingly.
    Thanks,
    Suresh Ganti

  • Help needed in hr abap om reporting

    hi to all experts,
    1)can we declare two ldb in a single program
    2) i need a sample code for om reporting ( if anyone could explain it would be great)
    3) can we use macros rp* in om reporting if yes how
    thanks.

    Hi Moazam,
    As Narin said u cant use two logical data bases in program.
    Because we have option in attributes of the program to choose the logical database.
    U can check out all the macros in the Table TRMAC
    Please check this come
      MOVE i_date   TO  wa_newdt.
      IF NOT i_orgeh IS INITIAL.
        SELECT SINGLE objid FROM hrp1000 INTO hrp1000-objid WHERE
                            plvar = '01'    AND
                            otype = 'O'     AND
                            objid = i_orgeh.
        IF sy-subrc NE 0.
          RAISE inivalid_orgunit.
          EXIT.
        ENDIF.
      ENDIF.
      IF NOT i_pernr IS INITIAL.
        SELECT SINGLE orgeh FROM pa0001 INTO wa_orgeh WHERE
                            pernr =  i_pernr  AND
    * AM8598 - Address delimited org unit issue starts.
    *                        BEGDA <= I_DATE   AND
                            begda <= wa_newdt AND
    *                        ENDDA >= I_DATE.
                            endda >= wa_newdt.
      SELECT SINGLE * FROM hrp1000 WHERE plvar = '01'      AND
                                         otype = 'O'       AND
                                         objid = wa_orgeh  AND
                                         begda LE sy-datum AND
                                         endda GE sy-datum.
      IF sy-subrc NE 0.
        SELECT * FROM hrp1000 WHERE  plvar = '01'      AND
                                     otype = 'O'       AND
                                     objid = wa_orgeh  AND
                                     endda LT sy-datum
                      ORDER BY endda DESCENDING.
          EXIT.
        ENDSELECT.
        MOVE hrp1000-endda    TO  wa_newdt.
      ENDIF.
      DATA: v_subrc LIKE sy-subrc.                              " MMMOOR1
      IF i_flag NE 'P'.                                         " MMMOOR1
        SELECT SINGLE sobid INTO hrp1001-sobid
          FROM hrp1001
          WHERE otype = 'O'
          AND objid = wa_orgeh
          AND plvar = '01'
          AND rsign = 'B'
          AND relat = '012'
          AND istat = '1'
    *   AND ENDDA >= I_DATE
          AND endda >= wa_newdt
    *   AND BEGDA <= I_DATE.
          AND begda <= wa_newdt.
        IF sy-subrc = 0.
          SELECT SINGLE * FROM hrp1001
            WHERE otype = 'S'
            AND objid = hrp1001-sobid
            AND plvar = '01'
            AND rsign = 'A'
            AND relat = '008'
            AND istat = '1'
    *     AND ENDDA >= I_DATE
            AND endda >= wa_newdt
    *     AND BEGDA <= I_DATE.
            AND begda <= wa_newdt.
          v_subrc = sy-subrc.
          MOVE hrp1001-sobid TO e_pernr.
        ENDIF.
      ELSE.
        CLEAR wa_mgrno.
    *    SELECT SINGLE YYMGRNO
    *        FROM YHRCM_PLAN_MGR
    *        INTO WA_MGRNO
    *     WHERE YYORGID = WA_ORGEH.
        SELECT SINGLE sobid INTO hrp1001-sobid
           FROM hrp1001
           WHERE otype = 'O'
           AND objid = wa_orgeh
           AND plvar = '01'
           AND rsign = 'A'
           AND relat = 'Z18'
           AND istat = '1'
           AND endda >= wa_newdt
           AND begda <= wa_newdt.
        IF sy-subrc = 0.
          SELECT SINGLE sobid INTO l_sobid
             FROM hrp1001
             WHERE otype = 'S'
             AND objid = hrp1001-sobid
             AND plvar = '01'
             AND rsign = 'A'
             AND relat = '008'
             AND istat = '1'
             AND endda >= wa_newdt
             AND begda <= wa_newdt.
          v_subrc = sy-subrc.
          wa_mgrno = l_sobid.
          MOVE  wa_mgrno TO e_pernr.
        ENDIF.
      ENDIF.
      IF v_subrc = 0.
        SELECT SINGLE * FROM pa0002
          WHERE pernr = e_pernr
          AND endda >= sy-datum
          AND begda <= sy-datum.
        IF sy-subrc = 0.
          IF NOT pa0002-nach2 IS INITIAL.
            CONCATENATE pa0002-nachn '-' pa0002-nach2 ','
              INTO e_name.
          ELSE.
            CONCATENATE pa0002-nachn ',' INTO e_name.
          ENDIF.
          CONCATENATE e_name pa0002-vorna pa0002-inits
            INTO e_name SEPARATED BY space.
        ENDIF.
        SELECT SINGLE * FROM pa0105
          WHERE pernr  = e_pernr
            AND subty  = '0010'
            AND endda >= sy-datum
            AND begda <= sy-datum.
        IF sy-subrc = 0.
          e_email = pa0105-usrid_long.
        ENDIF.
        SELECT SINGLE yymailstop FROM pa0032
           INTO pa0032-yymailstop
          WHERE pernr  = e_pernr
            AND endda >= sy-datum
            AND begda <= sy-datum.
        IF sy-subrc = 0.
          e_mailstop = pa0032-yymailstop.
        ENDIF.
      ENDIF.
      IF e_pernr IS INITIAL AND NOT i_get_higher IS INITIAL.
        PERFORM get_higher_mgr
                USING i_pernr wa_orgeh wa_newdt
                CHANGING e_pernr e_name e_email e_mailstop.
      ENDIF.
    * AN0884 - Get Higher Manager - Ends.
    ENDFUNCTION.
    Best regards,
    raam

  • TAx Reporter Temse Files Download Automation

    Hi,
    I have a reuiqrement to download the Temse files generated in Tax Reporter. I have completed the code and it works fine if we run the program in foreground. But when I run the same program in background some Temse files downloaded have junk characters. If I download the same Temse file in foreground it works fine.
    There seems to be some issue with the FM when I run my progam in background.
    I have searched SDN and SAP Notes for any clues but did not get any.
    REPORT  ZPHOP_TEMSE  NO STANDARD PAGE HEADING
                      LINE-SIZE 1023
                      LINE-COUNT 65
                      MESSAGE-ID zz.
    DATA: BEGIN OF tape OCCURS 1,
             DATA(2000),
          END OF tape.
    DATA: force_ascii type c VALUE 'T'.
    DATA:  BEGIN OF int_msgs2 OCCURS 10,
             errnum(2) TYPE c,
             text1(8) TYPE c,
             text2(60) TYPE c,
           END OF int_msgs2.
    DATA: BEGIN OF g_int_temse OCCURS 0,
             dname    LIKE TST01-dname,
             dpart    LIKE TST01-dpart,
             dcretime LIKE TST01-DCRETIME,
             dcreater LIKE TST01-DCREATER,
          END OF g_int_temse.
    DATA: record_length  TYPE i VALUE 275,
           data_length    TYPE i,
           convert_to_ebcdic,
           filesize TYPE i,
           number_of_records TYPE i VALUE 1,
           filetype(3) VALUE 'BIN',
           conv TYPE REF TO cl_abap_conv_out_ce,
           dline TYPE REF TO data,
           dtab TYPE REF TO data,
           p_compid(4),
           p_pswd(8),
           g_str(2000),
           uc_filename TYPE string.
    DATA: l_nm_fixed_record.
    CONSTANTS: c_lpath TYPE pathintern VALUE 'ZOUT'.
    TABLES: TST01, ZPHOPFLS, ZTEMSE_LOG, V_5UXY_A.
    FIELD-SYMBOLS: <dtab> TYPE STANDARD TABLE,
                   <dline> TYPE ANY.
    INCLUDE: dbpnpcom.           " No logical database        Do not modify!
    INCLUDE: zphoptop,           " Top Include                Do not modify!
             zphopfil.           " File inlcude               Do not modify!
    SELECTION-SCREEN BEGIN OF BLOCK B1 WITH FRAME TITLE text-T01.
    SELECTION-SCREEN BEGIN OF LINE.
    SELECTION-SCREEN COMMENT 1(30) text-001.
    SELECT-OPTIONS  s_temse FOR TST01-dname NO INTERVALS.
    SELECTION-SCREEN END OF LINE.
    SELECTION-SCREEN END OF BLOCK B1.
    SELECTION-SCREEN BEGIN OF BLOCK B2 WITH FRAME TITLE text-T02.
    SELECT-OPTIONS  s_cai   FOR TST01-DCREATER NO INTERVALS.
    SELECT-OPTIONS  s_date  FOR sy-datum.
    SELECTION-SCREEN END OF BLOCK B2.
    SELECTION-SCREEN BEGIN OF BLOCK B3 WITH FRAME TITLE text-T03.
    PARAMETERS: p_ifid   LIKE t9aoa-if_id MODIF ID DIS ,
                p_fileid LIKE t9aoa-file_id MODIF ID DIS,
                p_unixf(60)  LOWER CASE MODIF ID DIS,
                p_uxdir  TYPE pathextern LOWER CASE MODIF ID DIS,
                p_dstfil(45) LOWER CASE MODIF ID DIS.
    SELECTION-SCREEN END OF BLOCK B3.
    PARAMETERS: p_skip AS CHECKBOX.
    DATA: ws_unixr LIKE p_unixf,
          ws_trans LIKE p_unixf.
    AT SELECTION-SCREEN OUTPUT.
      LOOP AT SCREEN.
        IF screen-group1 = 'DIS'.
          screen-output = '1'.
          screen-input  = '0'.
          MODIFY SCREEN.
        ENDIF.
      ENDLOOP.
    INITIALIZATION.
      p_ifid = 'PAYFLS'.
      p_compid = 'HR00'.
      p_fileid = '01'.
      p_unixf = 'AFS'.
      p_pswd = 'chevr123'.
      p_skip = 'X'.
    -End of Initialization--
      PERFORM get_physical_path.
      FORMAT COLOR COL_HEADING.
      WRITE: /01 text-t04,
              10 sy-pagno,
              41 text-t05,
             110 text-t06,
             123 sy-datum.
      WRITE: /01 text-t08,
              14 sy-repid,
             110 text-t07,
             125 sy-uzeit.
      FORMAT COLOR OFF.
      SKIP.
      WRITE: /(20) text-T21       CENTERED COLOR COL_HEADING,
              (15) text-T22       CENTERED COLOR COL_HEADING,
              (20) text-T23       CENTERED COLOR COL_HEADING,
              (15) text-T24       CENTERED COLOR COL_HEADING,
              (40) text-T25       CENTERED COLOR COL_HEADING.
    START-OF-SELECTION.
    *Do not allow background processing
    *Check if the Temse file and CAI both are entered
    IF NOT S_TEMSE IS INITIAL AND NOT S_CAI IS INITIAL.
       MESSAGE W999 WITH TEXT-E01.
    ELSEIF S_TEMSE IS INITIAL AND S_CAI IS INITIAL.
       MESSAGE W999 WITH TEXT-E02.
    ENDIF.
    Collect all temse filenames from TST01 into an internal table.
    IF NOT s_temse IS INITIAL.
       SELECT dname dpart dcretime dcreater FROM TST01 INTO TABLE g_int_temse
              WHERE dname in s_temse
              AND   dpart EQ '1'.
    ELSE.
       SELECT * FROM TST01
              WHERE DCREATER in s_cai
              AND   DPART EQ '1'.
         IF TST01-DCRETIME(8) GE s_date-low
             AND TST01-DCRETIME(8) LE s_date-high.
            MOVE-CORRESPONDING TST01 TO g_int_temse.
            APPEND g_int_temse.
         ENDIF.
       ENDSELECT.
    ENDIF.
    SORT g_int_temse BY DNAME DPART DCRETIME.
    LOOP AT g_int_temse.
    Check if the temse file is already processed in ZTEMSE_LOG table.
      SELECT SINGLE * FROM ZTEMSE_LOG
             WHERE DNAME = g_int_temse-dname.
      IF sy-subrc EQ 0.
    error. Temse already processed
         CONTINUE.
      ENDIF.
    Check if the temse file bieng processed is the eligible temse file
      SELECT SINGLE * FROM V_5UXY_A
             WHERE TSOBJ = g_int_temse-dname.
      IF sy-subrc EQ 0.
         SELECT SINGLE * FROM ZPHOPFLS
             WHERE TAXAU = V_5UXY_A-TAXAU
             AND   TXFRM = V_5UXY_A-TXFRM.
         IF sy-subrc EQ 0.
    Generate the filename for the target destination
            CONCATENATE ZPHOPFLS-FILENAME '.' sy-datum '.' sy-uzeit INTO p_dstfil.
         ELSE.
    error. Script not maintained in ZPHOPFLS table
            CONTINUE.
         ENDIF.
      ELSE.
    error. Temse file is not the latest processed file.
         CONTINUE.
      ENDIF.
      CALL FUNCTION 'RP_TS_OPEN'
        EXPORTING
          tsobj = g_int_temse-dname
         versn = g_int_temse-dpart
          empfg = 'RPUTSVUM'.
      COMMIT WORK.
      REFRESH tape.
      CLEAR   tape.
    Einlesen von der TemSe
      CALL FUNCTION 'RSTS_READ'
        EXPORTING
           PARTS1BY1 = 'X'
        TABLES
          datatab = tape.
      CALL FUNCTION 'RSTS_CLOSE'.
    Read the 1st line which is supposed to contains info important for
    the downloading procedure. The syntax of the line is :
      SAPxxxnnnyyyy  - the 1st 3 char 'SAP' indicates this line contains
    download related info. xxx can either be 'ASC' (for ASCII) or 'EBC'
    (for EBCDIC). nnn is the length of each record, e.g. 128 for SSA disk
    format, 275 for SSA tape format etc. yyyy can either be 'CRLF' (each
    record is delimited by CRLF) or blank (no CRLF).
    After processing the 1st line, the line is deleted from the internal
    table. Downloading begins on the 2nd line.
      READ TABLE tape INDEX 1.
      IF tape-data(3) EQ 'SAP'.
        IF tape-data+3(3) EQ 'EBC'.
          convert_to_ebcdic = 'x'.
        ELSEIF tape-data+3(3) EQ 'ASC'
              AND force_ascii EQ 'T'.
          filetype = 'ASC'.
        ENDIF.
        IF tape-data+6(3) NA '*'.
          record_length = tape-data+6(3).
        ELSE.
          record_length = tape-data+13(4).
        ENDIF.
        IF tape-data+9(4) EQ 'CRLF'.
          data_length = record_length + 2.
        ELSE.
          data_length = record_length.
        ENDIF.
        DELETE tape INDEX 1.
      ELSE.
        data_length = record_length.
      ENDIF.
    Transfer the Temse file data to Unix file.
          PERFORM transfer_file.
    Update the Log table with the temse details.
          ZTEMSE_LOG-dname = g_int_temse-dname.
          ZTEMSE_LOG-txcmp = V_5UXY_A-taxau.
          ZTEMSE_LOG-txfrm = V_5UXY_A-txfrm.
          ZTEMSE_LOG-filename = ws_unixr.
          ZTEMSE_LOG-DCREATER = g_int_temse-dcreater.
          INSERT ZTEMSE_LOG.
        WRITE: /(20) ZTEMSE_LOG-dname,
                (15) ZTEMSE_LOG-txcmp,
                (20) ZTEMSE_LOG-txfrm,
                (15) ZTEMSE_LOG-dcreater,
                (40) ZTEMSE_LOG-filename.
    ENDLOOP.
    *&      Form  get_physical_path
          Get Physical directory name for the given logical path name
    FORM get_physical_path .
      CALL FUNCTION 'ZFILE_GET_PATH_NAME'
        EXPORTING
          LOGICAL_PATH               = c_lpath
        IMPORTING
          FILE_NAME_PATH             = p_uxdir
        EXCEPTIONS
          PATH_NOT_FOUND             = 1
          MISSING_PARAMETER          = 2
          OPERATING_SYSTEM_NOT_FOUND = 3
          FILE_SYSTEM_NOT_FOUND      = 4
          OTHERS                     = 5.
      IF SY-SUBRC <> 0.
        MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
                WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
      ENDIF.
    ENDFORM.                    " get_physical_path
    *&      Form  TRANSFER_FILE
    FORM transfer_file.
      p_unixf = 'AFS'.
    Concatenate Date with Unix File name
      CONCATENATE p_unixf '.' p_compid '.' p_ifid  '.' sy-datum '.' sy-uzeit INTO ws_unixr.
    Concatenate Unix Directory with Unix File for Outbound
      CONCATENATE p_uxdir ws_unixr INTO p_unixf.
      PERFORM open_files USING p_unixf.
    LOOP AT tape.
         g_str = tape-data(record_length).
        TRANSFER g_str TO p_unixf LENGTH record_length.
        IF sy-subrc <> 0.
          MESSAGE ID '00' TYPE 'E' NUMBER '398' WITH 'sy-subrc:' sy-subrc
           ' Error Transferring to: ' p_unixf.
        ENDIF.
    ENDLOOP.
      PERFORM close_files USING p_unixf.
    ENDFORM.                    " TRANSFER_FILE
    Can anyone please check and tell me what I need to overcome this problem.

    Hi Bhaskar,
    I also have the same requirement to upload TemSe files in to application server.
    In FDTA tcode after we enter company code and click on enter.
    In the second screen checking and line item and go to edit and click on download button.
    Here we see a popup with default file name, and when we say ok the file will get downloaded into C:\.....
    Here our req is to upload the file automatically pick up via batch job and place it in the in to the application server and from there it should be placed in the Netwrok server (UNIX).
    Pls provide me with suitable code so that i can finish it off.I tried a lot but did not work.
    Thanks.

  • Serious Performance Problems in ABAP Reports

    Hi All,
    We are developing ABAP reports for SAP IS-U/CCS Modules and facing Performance issues.Whole scenario is given below.Please suggest some solution.
    1. Total No. Of Business Partners = 1500000
    2. Reports Selection Criteria are of two types:
         a) GSBER(Business Area) - Selection for atleast 200000 Business Partners
         b) Cokey(Division)     - Selection for around 1000 to 50000 Business Partners
    3. For implementing our reports logic we have to access several tables all of which are very large.They are :
         Table Name     No. of records (Appx)          
         DBERCHV               20000000
         DBERCHZ1              20000000
         DBERDLB               20000000
         DFKKKO                20000000
         DFKKOP                20000000
         EANLH                  4000000
         ERCH                  10000000
         ERCHC                 10000000
         ETTIFN                30000000
         EVER                   1500000
         FKKVKP                 1500000
         TECOKT                     500     
         TGSBT                       12
    4. Due to large no. of records we are facing problems at two levels:
         a) OpenSQL Statement is taking too much time for data selection
         b) Since large no. of records are selected Corresponding loops and data processing also takes much time
    5. We have tried almost all ABAP Performance optimization techniques such as using Index, SQL optimization techniques,Read Table Optimization, Loop Statement Optimization etc. but there is not much improvement.
    6. For example one of our Reports "R15" takes around 1500 seconds for 1000 Business Partners.
    Its Code is attached below:
    <b>a) ZISU_SCHL_LTR15_BAPI - Program which schedules actual R15 report in background</b>
    *& Report  ZISU_SCHL_LTR15_BAPI                                        *
    *& Developed By : Piyusha Kirwai                                       *
    *& Date         : 02/12/2005                                           *
    *& Purpose      : To Schedule the LT R 15 prog in background and store
    *& the File for Manual R-15 into server.
    REPORT  ZISU_SCHL_LTR15_BAPI  NO STANDARD PAGE HEADING.
    TABLES ZEVERFKKVKP.
    DATA:  DYFIELDS LIKE DYNPREAD OCCURS 0 WITH HEADER LINE.
    DATA: IT_TAB TYPE FILETABLE,
          GD_SUBRC TYPE I.
    DATA: LV_GSBER TYPE TGSBT-GSBER.
    RANGES R_COKEY FOR ZEVERFKKVKP-COKEY.
    DATA: BEGIN OF GT_TECOKT OCCURS 100,
            COKEY TYPE TECOKT-COKEY,
            LTEXT TYPE TECOKT-LTEXT,
          END   OF GT_TECOKT,
          BEGIN OF GT_TE422 OCCURS 100,
            TERMSCHL TYPE TE422-TERMSCHL,
            TERMTEXT TYPE TE422-TERMTEXT,
          END   OF GT_TE422.
    DATA: BEGIN OF GWA_MANUAL_DATA,
            COL_1(5)        TYPE C,
            COL_2(10)       TYPE C,
            COL_3(40)       TYPE C,
            COL_4(40)       TYPE C,
            COL_5(10)       TYPE C,
            COL_6(19)       TYPE C,
            COL_7(19)       TYPE C,
            COL_8(19)       TYPE C,
            COL_9(19)       TYPE C,
            COL_10(19)      TYPE C,
            COL_11(19)      TYPE C,
            COL_12(10)      TYPE C,
            COL_13(19)      TYPE C,
            COL_14(19)      TYPE C,
            COL_15(19)      TYPE C,
            COL_16(19)      TYPE C,
            COL_17(19)      TYPE C,
            COL_18(19)      TYPE C,
          END   OF GWA_MANUAL_DATA,
          GT_MANUAL_DATA LIKE GWA_MANUAL_DATA OCCURS 0,
          GT_INTERN_DATA TYPE ALSMEX_TABLINE OCCURS 0 WITH HEADER LINE.
    *&-----FOR UPLOADING FILE TO SERVER------------------------------------*
    DATA: LV_SERVER_FILE_PREFIX(60) TYPE C.
    DATA: LV_SERVER_DATAFILE_NAME(60) TYPE C.
    DATA: LV_SERVER_ERRFILE_NAME(60) TYPE C.
    DATA: ENDT LIKE SY-UZEIT,
          ENDD LIKE SY-DATUM,
          JOBCOUNT TYPE TBTCJOB-JOBCOUNT.
    SELECTION-SCREEN BEGIN OF BLOCK 001 WITH FRAME TITLE TEXT-001.
    SELECT-OPTIONS: SO_GSBER FOR ZEVERFKKVKP-GSBER OBLIGATORY,
                    SO_COKEY FOR ZEVERFKKVKP-COKEY OBLIGATORY,
                    SO_MRU   FOR ZEVERFKKVKP-ABLEINH.
    PARAMETERS:     P_BMNTH(7) TYPE C OBLIGATORY.
    SELECT-OPTIONS: SO_GPART FOR ZEVERFKKVKP-GPART.
    SELECTION-SCREEN END  OF BLOCK 001.
    SELECTION-SCREEN BEGIN OF BLOCK 002 WITH FRAME TITLE TEXT-003.
    PARAMETERS:  P_COMPUT RADIOBUTTON GROUP R15,
                 P_INCLUD RADIOBUTTON GROUP R15,
                 P_FILE  TYPE  RLGRAP-FILENAME MODIF ID ACT.
    SELECTION-SCREEN END   OF BLOCK 002.
    SELECTION-SCREEN BEGIN OF LINE.
    SELECTION-SCREEN COMMENT 2(83) TEXT-004.
    SELECTION-SCREEN END   OF LINE.
    *SELECTION-SCREEN BEGIN OF LINE.
    *  SELECTION-SCREEN COMMENT 8(40) TEXT-005.
    *SELECTION-SCREEN END   OF LINE.
    SELECTION-SCREEN BEGIN OF BLOCK 003 WITH FRAME TITLE TEXT-002.
    PARAMETERS   P_SCHL TYPE C AS CHECKBOX.
    PARAMETERS : P_IMMED RADIOBUTTON GROUP SCH ,
                 P_DT_TM  RADIOBUTTON GROUP SCH,
                 P_DATE TYPE SY-DATUM MODIF ID SHL,
                 P_TIME TYPE SY-UZEIT MODIF ID SHL.
    SELECTION-SCREEN END   OF BLOCK 003.
    AT SELECTION-SCREEN.
    AT SELECTION-SCREEN ON SO_GSBER.
      IF NOT SO_GSBER-LOW IS INITIAL.
        SELECT SINGLE GSBER FROM TGSBT INTO LV_GSBER
          WHERE GSBER = SO_GSBER-LOW.
        IF SY-SUBRC <> 0.
          MESSAGE E007(ZISU).
        ENDIF.
      ENDIF.
      IF NOT SO_GSBER-HIGH IS INITIAL .
        SELECT SINGLE GSBER FROM TGSBT INTO LV_GSBER
          WHERE GSBER = SO_GSBER-HIGH.
        IF SY-SUBRC <> 0.
          MESSAGE E007(ZISU).
        ENDIF.
      ENDIF.
    AT SELECTION-SCREEN ON P_BMNTH.
    **check the validity of Billing month format and for valid billing month
      IF P_BMNTH CO '0123456789/'.
        IF P_BMNTH CP '++++/++'.
          IF P_BMNTH+5(2) > 12.
            MESSAGE E002(ZISU) WITH 'from'.
          ENDIF.
    ** current year is less than year entered
          IF SY-DATUM(4) < P_BMNTH(4).
            MESSAGE E003(ZISU) WITH 'from'.
          ELSEIF SY-DATUM(4) = P_BMNTH(4).
    ** month in future
            IF SY-DATUM+4(2) < P_BMNTH+5(2).
              MESSAGE E004(ZISU) WITH 'from'.
            ENDIF.
          ENDIF.
        ELSE.
          MESSAGE E001(ZISU) WITH 'from'.
        ENDIF.
      ELSE.
    **  entry have some invalid char
        MESSAGE E010(ZISU).
      ENDIF.
    AT SELECTION-SCREEN ON VALUE-REQUEST FOR SO_COKEY-LOW.
    **for geting the CO account assigment key of the entered Business area
      CLEAR: DYFIELDS[], DYFIELDS.
      PERFORM DIVISON_DATA_GET CHANGING SO_COKEY-LOW.
    AT SELECTION-SCREEN ON VALUE-REQUEST FOR SO_COKEY-HIGH.
    **for geting the CO account assigment key of the entered Business area
      CLEAR: DYFIELDS[], DYFIELDS.
      PERFORM DIVISON_DATA_GET CHANGING SO_COKEY-HIGH.
    AT SELECTION-SCREEN ON VALUE-REQUEST FOR SO_MRU-LOW.
      CLEAR: DYFIELDS[], DYFIELDS.
      PERFORM MRU_DATA_GET CHANGING SO_MRU-LOW.
    AT SELECTION-SCREEN ON VALUE-REQUEST FOR SO_MRU-HIGH.
      CLEAR: DYFIELDS[], DYFIELDS.
      PERFORM MRU_DATA_GET CHANGING SO_MRU-HIGH.
    AT SELECTION-SCREEN ON VALUE-REQUEST FOR P_FILE.
      REFRESH: IT_TAB.
    **Opens File Open Dialog Box for selecting input file.
      CALL METHOD CL_GUI_FRONTEND_SERVICES=>FILE_OPEN_DIALOG
        EXPORTING
          WINDOW_TITLE     = 'Select File'
          DEFAULT_FILENAME = '*.xls'
          MULTISELECTION   = ' '
        CHANGING
          FILE_TABLE       = IT_TAB
          RC               = GD_SUBRC.
      LOOP AT IT_TAB INTO P_FILE.
    *    so_fpath-sign = 'I'.
    *    so_fpath-option = 'EQ'.
    *    append so_fpath.
      ENDLOOP.
    AT SELECTION-SCREEN OUTPUT.
      LOOP AT SCREEN.
        IF SCREEN-GROUP1 = 'ACT'.
          IF P_INCLUD = ' '.
            SCREEN-INPUT = '0'.
          ELSE.
            SCREEN-INPUT = '1'.
          ENDIF.
        ENDIF.
        IF SCREEN-GROUP1 = 'SHL'.
          IF P_DT_TM = 'X'.
            SCREEN-INPUT = '1'.
          ELSE.
            SCREEN-INPUT = '0'.
          ENDIF.
        ENDIF.
        MODIFY SCREEN.
      ENDLOOP.
    INITIALIZATION.
      P_DATE = SY-DATUM.
      P_TIME = SY-UZEIT + 180.
    START-OF-SELECTION.
      IF P_INCLUD = 'X' AND P_FILE IS INITIAL.
        MESSAGE 'Enter the Manual R-15 File' TYPE 'E'.
      ENDIF.
    *  IF P_INCLUD = 'X'.
    *    PERFORM UPLOAD_EXCEL_FILE.
    *    CONCATENATE 'R15' SY-DATUM '-' SY-UZEIT INTO LV_SERVER_FILE_PREFIX.
    *    CONCATENATE LV_SERVER_FILE_PREFIX '-' 'LT.TMP' INTO
    *    LV_SERVER_DATAFILE_NAME.
    *    OPEN DATASET LV_SERVER_DATAFILE_NAME
    *      FOR OUTPUT
    *      IN TEXT MODE
    *      ENCODING DEFAULT.
    *    LOOP AT GT_MANUAL_DATA INTO GWA_MANUAL_DATA.
    *      IF ( GWA_MANUAL_DATA-COL_6 CN '0123456789 '
    *      AND GWA_MANUAL_DATA-COL_7 CN '0123456789 '
    *      AND GWA_MANUAL_DATA-COL_8 CN '0123456789 '
    *      AND GWA_MANUAL_DATA-COL_9 CN '0123456789 '
    *      AND GWA_MANUAL_DATA-COL_10 CN '0123456789 '
    *      AND GWA_MANUAL_DATA-COL_11 CN '0123456789 '
    *      AND GWA_MANUAL_DATA-COL_13 CN '0123456789 '
    *      AND GWA_MANUAL_DATA-COL_14 CN '0123456789 '
    *      AND GWA_MANUAL_DATA-COL_15 CN '0123456789 '
    *      AND GWA_MANUAL_DATA-COL_16 CN '0123456789 '
    *      AND GWA_MANUAL_DATA-COL_17 CN '0123456789 '
    *      AND GWA_MANUAL_DATA-COL_18 CN '0123456789 ' ).
    *        MESSAGE 'Character Data in Numerical Field' TYPE 'E'.
    *      ENDIF.
    *      TRANSFER GWA_MANUAL_DATA TO LV_SERVER_DATAFILE_NAME.
    *    ENDLOOP.
    *    CLOSE DATASET LV_SERVER_DATAFILE_NAME.
    *  ENDIF.  "  P_INCLUD = 'X'.
      IF P_SCHL = 'X'.
        IF P_IMMED = 'X'.
          CALL FUNCTION 'C14B_ADD_TIME'
            EXPORTING
              I_STARTTIME = SY-UZEIT
              I_STARTDATE = SY-DATUM
              I_ADDTIME   = '000010'
            IMPORTING
              E_ENDTIME   = ENDT
              E_ENDDATE   = ENDD.
        ELSEIF P_DT_TM = 'X'.
          ENDD = P_DATE.
          ENDT = P_TIME.
        ENDIF.
        CALL FUNCTION 'JOB_OPEN'
          EXPORTING
    *     DELANFREP              = ' '
    *     JOBGROUP               = ' '
            JOBNAME                = 'R15JOB'
    *      SDLSTRTDT              = ENDD
    *      SDLSTRTTM              = ENDT
    *     JOBCLASS               =
         IMPORTING
           JOBCOUNT               = JOBCOUNT
    *   CHANGING
    *     RET                    =
    *   EXCEPTIONS
    *     CANT_CREATE_JOB        = 1
    *     INVALID_JOB_DATA       = 2
    *     JOBNAME_MISSING        = 3
    *     OTHERS                 = 4
        IF SY-SUBRC <> 0.
    * MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
    *         WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
        ENDIF.
        IF P_INCLUD = 'X'.
          PERFORM UPLOAD_EXCEL_FILE.
         CONCATENATE 'R15' SY-DATUM '-' SY-UZEIT INTO LV_SERVER_FILE_PREFIX.
          CONCATENATE LV_SERVER_FILE_PREFIX '-' JOBCOUNT 'LT.TMP' INTO
          LV_SERVER_DATAFILE_NAME.
          CONDENSE LV_SERVER_DATAFILE_NAME.
          OPEN DATASET LV_SERVER_DATAFILE_NAME
            FOR OUTPUT
            IN TEXT MODE
            ENCODING DEFAULT.
          IF SY-SUBRC NE 0.
            MESSAGE 'Error in Creating File on Server' TYPE 'E'.
          ENDIF.
          LOOP AT GT_MANUAL_DATA INTO GWA_MANUAL_DATA.
            IF ( GWA_MANUAL_DATA-COL_6 CN '0123456789 '
            AND GWA_MANUAL_DATA-COL_7 CN '0123456789 '
            AND GWA_MANUAL_DATA-COL_8 CN '0123456789 '
            AND GWA_MANUAL_DATA-COL_9 CN '0123456789 '
            AND GWA_MANUAL_DATA-COL_10 CN '0123456789 '
            AND GWA_MANUAL_DATA-COL_11 CN '0123456789 '
            AND GWA_MANUAL_DATA-COL_13 CN '0123456789 '
            AND GWA_MANUAL_DATA-COL_14 CN '0123456789 '
            AND GWA_MANUAL_DATA-COL_15 CN '0123456789 '
            AND GWA_MANUAL_DATA-COL_16 CN '0123456789 '
            AND GWA_MANUAL_DATA-COL_17 CN '0123456789 '
            AND GWA_MANUAL_DATA-COL_18 CN '0123456789 ' ).
              MESSAGE 'Character Data in Numerical Field' TYPE 'E'.
            ENDIF.
            TRANSFER GWA_MANUAL_DATA TO LV_SERVER_DATAFILE_NAME.
          ENDLOOP.
          CLOSE DATASET LV_SERVER_DATAFILE_NAME.
          IF SY-SUBRC NE 0.
            MESSAGE 'Error in Creating File on Server' TYPE 'E'.
          ENDIF.
        ENDIF.  "  P_INCLUD = 'X'.
        SUBMIT ZISU_LTR15_TUNE
          WITH SO_GSBER IN SO_GSBER
          WITH SO_COKEY IN SO_COKEY
          WITH SO_MRU   IN SO_MRU
          WITH SO_GPART IN SO_GPART
          WITH P_BMNTH  =  P_BMNTH
          WITH P_COMPUT = P_COMPUT
          WITH P_INCLUD = P_INCLUD
          WITH P_FILE   = LV_SERVER_DATAFILE_NAME
          USER SY-UNAME VIA JOB 'R15JOB' NUMBER JOBCOUNT AND RETURN.
        CALL FUNCTION 'JOB_CLOSE'
          EXPORTING
    *   AT_OPMODE                         = ' '
    *   AT_OPMODE_PERIODIC                = ' '
    *   CALENDAR_ID                       = ' '
    *   EVENT_ID                          = ' '
    *   EVENT_PARAM                       = ' '
    *   EVENT_PERIODIC                    = ' '
            JOBCOUNT                          = JOBCOUNT
            JOBNAME                           = 'R15JOB'
    *   LASTSTRTDT                        = NO_DATE
    *   LASTSTRTTM                        = NO_TIME
    *   PRDDAYS                           = 0
    *   PRDHOURS                          = 0
    *   PRDMINS                           = 0
    *   PRDMONTHS                         = 0
    *   PRDWEEKS                          = 0
    *   PREDJOB_CHECKSTAT                 = ' '
    *   PRED_JOBCOUNT                     = ' '
    *   PRED_JOBNAME                      = ' '
            SDLSTRTDT                         = ENDD
            SDLSTRTTM                         = ENDT
    *   STARTDATE_RESTRICTION             = BTC_PROCESS_ALWAYS
            STRTIMMED                         = P_IMMED
    *   TARGETSYSTEM                      = ' '
    *   START_ON_WORKDAY_NOT_BEFORE       = SY-DATUM
    *   START_ON_WORKDAY_NR               = 0
    *   WORKDAY_COUNT_DIRECTION           = 0
    *   RECIPIENT_OBJ                     =
    *   TARGETSERVER                      = ' '
    *   DONT_RELEASE                      = ' '
    *   TARGETGROUP                       = ' '
    *   DIRECT_START                      =
    * IMPORTING
    *   JOB_WAS_RELEASED                  =
    * CHANGING
    *   RET                               =
    * EXCEPTIONS
    *   CANT_START_IMMEDIATE              = 1
    *   INVALID_STARTDATE                 = 2
    *   JOBNAME_MISSING                   = 3
    *   JOB_CLOSE_FAILED                  = 4
    *   JOB_NOSTEPS                       = 5
    *   JOB_NOTEX                         = 6
    *   LOCK_FAILED                       = 7
    *   INVALID_TARGET                    = 8
    *   OTHERS                            = 9
        IF SY-SUBRC <> 0.
    * MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
    *         WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
        ENDIF.
      ELSE.  " IF NOT TO RUN IN BACKGROUND
        IF P_INCLUD = 'X'.
          PERFORM UPLOAD_EXCEL_FILE.
         CONCATENATE 'R15' SY-DATUM '-' SY-UZEIT INTO LV_SERVER_FILE_PREFIX.
          CONCATENATE LV_SERVER_FILE_PREFIX '-' 'LT.TMP' INTO
          LV_SERVER_DATAFILE_NAME.
          CONDENSE LV_SERVER_DATAFILE_NAME.
          OPEN DATASET LV_SERVER_DATAFILE_NAME
            FOR OUTPUT
            IN TEXT MODE
            ENCODING DEFAULT.
          IF SY-SUBRC NE 0.
            MESSAGE 'Error in Creating File on Server' TYPE 'E'.
          ENDIF.
          LOOP AT GT_MANUAL_DATA INTO GWA_MANUAL_DATA.
            IF ( GWA_MANUAL_DATA-COL_6 CN '0123456789 '
            AND GWA_MANUAL_DATA-COL_7 CN '0123456789 '
            AND GWA_MANUAL_DATA-COL_8 CN '0123456789 '
            AND GWA_MANUAL_DATA-COL_9 CN '0123456789 '
            AND GWA_MANUAL_DATA-COL_10 CN '0123456789 '
            AND GWA_MANUAL_DATA-COL_11 CN '0123456789 '
            AND GWA_MANUAL_DATA-COL_13 CN '0123456789 '
            AND GWA_MANUAL_DATA-COL_14 CN '0123456789 '
            AND GWA_MANUAL_DATA-COL_15 CN '0123456789 '
            AND GWA_MANUAL_DATA-COL_16 CN '0123456789 '
            AND GWA_MANUAL_DATA-COL_17 CN '0123456789 '
            AND GWA_MANUAL_DATA-COL_18 CN '0123456789 ' ).
              MESSAGE 'Character Data in Numerical Field' TYPE 'E'.
            ENDIF.
            TRANSFER GWA_MANUAL_DATA TO LV_SERVER_DATAFILE_NAME.
          ENDLOOP.
          CLOSE DATASET LV_SERVER_DATAFILE_NAME.
          IF SY-SUBRC NE 0.
            MESSAGE 'Error in Creating File on Server' TYPE 'E'.
          ENDIF.
        ENDIF.  "  P_INCLUD = 'X'.
        IF NOT SY-BATCH IS INITIAL.
          SUBMIT ZISU_LTR15_TUNE
            WITH SO_GSBER IN SO_GSBER
            WITH SO_COKEY IN SO_COKEY
            WITH SO_MRU   IN SO_MRU
            WITH SO_GPART IN SO_GPART
            WITH P_BMNTH  =  P_BMNTH
            WITH P_COMPUT = P_COMPUT
            WITH P_INCLUD = P_INCLUD
            WITH P_FILE   = LV_SERVER_DATAFILE_NAME
            TO SAP-SPOOL WITHOUT SPOOL DYNPRO.
        ELSE.
          SUBMIT ZISU_LTR15_TUNE
            WITH SO_GSBER IN SO_GSBER
            WITH SO_COKEY IN SO_COKEY
            WITH SO_MRU   IN SO_MRU
            WITH SO_GPART IN SO_GPART
            WITH P_BMNTH  =  P_BMNTH
            WITH P_COMPUT = P_COMPUT
            WITH P_INCLUD = P_INCLUD
            WITH P_FILE   = LV_SERVER_DATAFILE_NAME.
        ENDIF.
      ENDIF.
    *&      Form  divison_data_get
    *       text
    *      <--P_SO_COKEY_LOW  text
    FORM DIVISON_DATA_GET  CHANGING P_SO_COKEY_LOW.
    **to get the search help for division
      DATA : LV_LINES TYPE SY-TFILL,
            LT_RETURN_TAB LIKE DDSHRETVAL OCCURS 0, " with header line.
            LWA_RETURN_TAB LIKE DDSHRETVAL.
      DATA: LV_COKEY TYPE ZEVERFKKVKP-COKEY.
    **according to the Business area entered]
    *  break csebdev1.
      REFRESH R_COKEY[].
      DESCRIBE TABLE SO_GSBER LINES LV_LINES.
    **  when user has neither pressed the enter key nor selected the values
    **using search help
      IF LV_LINES = 0.
    *  loop at so_gsber.
        CLEAR R_COKEY.
    *    if so_gsber-high is initial.
    *    break csebdev1.
        DYFIELDS-FIELDNAME = 'SO_GSBER-LOW'.
        APPEND DYFIELDS.
        CALL FUNCTION 'DYNP_VALUES_READ'
          EXPORTING
            DYNAME     = SY-CPROG
            DYNUMB     = SY-DYNNR
          TABLES
            DYNPFIELDS = DYFIELDS.
    *      r_cokey-sign = 'I'.
    *      r_cokey-option = 'CP'.
    *r_cokey-low = so_gsber-low+0(2).
        CONCATENATE DYFIELDS-FIELDVALUE+0(2) '*' INTO R_COKEY-LOW.
    *    elseif not so_gsber-high is initial.
        DYFIELDS-FIELDNAME = 'SO_GSBER-HIGH'.
        APPEND DYFIELDS.
        CALL FUNCTION 'DYNP_VALUES_READ'
          EXPORTING
            DYNAME     = SY-CPROG
            DYNUMB     = SY-DYNNR
          TABLES
            DYNPFIELDS = DYFIELDS.
        IF NOT DYFIELDS-FIELDVALUE IS INITIAL.
          CONCATENATE DYFIELDS-FIELDVALUE+0(2) '99999999' INTO R_COKEY-HIGH.
        ENDIF.
    *    endif.
        IF NOT R_COKEY-HIGH IS INITIAL.
          R_COKEY-SIGN = 'I'.
          R_COKEY-OPTION = 'BT'.
        ELSEIF R_COKEY-HIGH IS INITIAL.
          R_COKEY-SIGN = 'I'.
          R_COKEY-OPTION = 'CP'.
        ENDIF.
        APPEND R_COKEY.
      ENDIF.
    *  endloop.
    *  APPEND DYFIELDS.
      IF LV_LINES > 0.
    *    break-point.
        IF NOT SO_GSBER[] IS INITIAL.
          LOOP AT SO_GSBER.
    *        r_cokey-sign = 'I'.
    *        r_cokey-option = 'CP'.
    *r_cokey-low = so_gsber-low+0(2).
            CONCATENATE SO_GSBER-LOW+0(2) '*' INTO R_COKEY-LOW.
            IF NOT SO_GSBER-HIGH IS INITIAL.
              CONCATENATE SO_GSBER-HIGH+0(2) '99999999' INTO R_COKEY-HIGH.
            ENDIF.
            IF NOT R_COKEY-HIGH IS INITIAL.
              R_COKEY-SIGN = 'I'.
              R_COKEY-OPTION = 'BT'.
            ELSEIF R_COKEY-HIGH IS INITIAL.
              R_COKEY-SIGN = 'I'.
              R_COKEY-OPTION = 'CP'.
            ENDIF.
            APPEND R_COKEY TO R_COKEY.
          ENDLOOP.
        ENDIF.
      ENDIF.
      IF NOT R_COKEY[] IS INITIAL.
    * break csebdev1.
        REFRESH GT_TECOKT[].
        SELECT COKEY LTEXT
        FROM TECOKT
        INTO TABLE GT_TECOKT
        WHERE COKEY IN R_COKEY AND SPRAS = 'EN'.
    *    %_HINTS ORACLE '("TECOKT","TECOKT~1")'.
      ENDIF.
    **now call the search help
      CALL FUNCTION 'F4IF_INT_TABLE_VALUE_REQUEST'
        EXPORTING
    *   DDIC_STRUCTURE         = ' '
          RETFIELD               = 'COKEY'
    *   PVALKEY                = ' '
    *   DYNPPROG               = ' '
    *   DYNPNR                 = ' '
    *   DYNPROFIELD            = ' '
    *   STEPL                  = 0
         WINDOW_TITLE           = 'Division'
         VALUE                  = DYFIELDS-FIELDVALUE
         VALUE_ORG              = 'S'
    *   MULTIPLE_CHOICE        = ' '
    *   DISPLAY                = ' '
    *   CALLBACK_PROGRAM       = ' '
    *   CALLBACK_FORM          = ' '
    *   MARK_TAB               =
    * IMPORTING
    *   USER_RESET             =
        TABLES
          VALUE_TAB              = GT_TECOKT
    *   FIELD_TAB              =
         RETURN_TAB             = LT_RETURN_TAB
    *   DYNPFLD_MAPPING        =
    * EXCEPTIONS
    *   PARAMETER_ERROR        = 1
    *   NO_VALUES_FOUND        = 2
    *   OTHERS                 = 3
      IF SY-SUBRC <> 0.
    * MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
    *         WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
      ENDIF.
      READ TABLE LT_RETURN_TAB INTO LWA_RETURN_TAB INDEX 1.
      LV_COKEY = LWA_RETURN_TAB-FIELDVAL.
    *break csebdev1.
    ENDFORM.                    " divison_data_get
    *&      Form  upload_excel_file
    *       text
    *  -->  p1        text
    *  <--  p2        text
    FORM UPLOAD_EXCEL_FILE .
      DATA: LV_INDEX TYPE I.
      FIELD-SYMBOLS <VAL> TYPE ANY.
      CALL FUNCTION 'ALSM_EXCEL_TO_INTERNAL_TABLE'
        EXPORTING
          FILENAME                = P_FILE
          I_BEGIN_COL             = 1
          I_BEGIN_ROW             = 8
          I_END_COL               = 18
          I_END_ROW               = 94
        TABLES
          INTERN                  = GT_INTERN_DATA
        EXCEPTIONS
          INCONSISTENT_PARAMETERS = 1
          UPLOAD_OLE              = 2
          OTHERS                  = 3.
      IF SY-SUBRC <> 0.
        MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
              WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
      ENDIF.
      IF NOT GT_INTERN_DATA[] IS INITIAL.
        SORT GT_INTERN_DATA BY ROW COL.
        LOOP AT GT_INTERN_DATA.
          MOVE GT_INTERN_DATA-COL TO LV_INDEX.
          ASSIGN COMPONENT LV_INDEX OF STRUCTURE GWA_MANUAL_DATA TO <VAL>.
          MOVE GT_INTERN_DATA-VALUE TO <VAL>.
          AT END OF ROW.
            APPEND GWA_MANUAL_DATA TO GT_MANUAL_DATA.
            CLEAR GWA_MANUAL_DATA.
          ENDAT.
        ENDLOOP.
      ENDIF.
    ENDFORM.                    " upload_excel_file
    *&      Form  MRU_DATA_GET
    *       text
    *      <--P_SO_MRU_LOW  text
    FORM MRU_DATA_GET  CHANGING LV_MRU.
    **to get the search help for Group
      DATA : LV_LINES TYPE SY-TFILL,
            LT_RETURN_TAB LIKE DDSHRETVAL OCCURS 0,
            LWA_RETURN_TAB LIKE DDSHRETVAL.
    *        lv_mru_p(3) type c.
      RANGES  R_MRU FOR EANLH-ABLEINH.
    **according to the Business area entered
    **  break csebdev1.
      REFRESH R_MRU[].
      DESCRIBE TABLE SO_GSBER LINES LV_LINES.
    **  when user has neither pressed the enter key nor selected the values
    **using search help
      IF LV_LINES = 0.
        CLEAR R_MRU[].
        DYFIELDS-FIELDNAME = 'SO_GSBER-LOW'.
        APPEND DYFIELDS.
        CALL FUNCTION 'DYNP_VALUES_READ'
          EXPORTING
            DYNAME     = SY-CPROG
            DYNUMB     = SY-DYNNR
          TABLES
            DYNPFIELDS = DYFIELDS.
        CONCATENATE DYFIELDS-FIELDVALUE+0(2) '*' INTO R_MRU-LOW.
        DYFIELDS-FIELDNAME = 'SO_GSBER-HIGH'.
        APPEND DYFIELDS.
        CALL FUNCTION 'DYNP_VALUES_READ'
          EXPORTING
            DYNAME     = SY-CPROG
            DYNUMB     = SY-DYNNR
          TABLES
            DYNPFIELDS = DYFIELDS.
        IF NOT DYFIELDS-FIELDVALUE IS INITIAL.
          CONCATENATE DYFIELDS-FIELDVALUE+0(2) '99999999' INTO R_MRU-HIGH.
        ENDIF.
        IF NOT R_MRU-HIGH IS INITIAL.
          R_MRU-SIGN   = 'I'.
          R_MRU-OPTION = 'BT'.
        ELSEIF R_MRU-HIGH IS INITIAL.
          R_MRU-SIGN   = 'I'.
          R_MRU-OPTION = 'CP'.
        ENDIF.
        APPEND R_MRU.
      ENDIF. " end lv_lines =0
      IF LV_LINES > 0.
        IF NOT SO_GSBER[] IS INITIAL.
          LOOP AT SO_GSBER.
            CONCATENATE SO_GSBER-LOW+0(2) '*' INTO R_MRU-LOW.
            IF NOT SO_GSBER-HIGH IS INITIAL.
              CONCATENATE SO_GSBER-HIGH+0(2) '99999999' INTO R_MRU-HIGH.
            ENDIF.
            IF R_MRU-HIGH IS INITIAL.
              R_MRU-SIGN   = 'I'.
              R_MRU-OPTION = 'CP'.
            ELSEIF NOT R_MRU-HIGH IS INITIAL.
              R_MRU-SIGN   = 'I'.
              R_MRU-OPTION = 'BT'.
            ENDIF.
            APPEND R_MRU.
          ENDLOOP.
        ENDIF. " end so_GSBER[]
      ENDIF. " end lv_lines > 0
      IF NOT R_MRU[] IS INITIAL.
    * break csebdev1.
        REFRESH GT_TE422[].
        SELECT TERMSCHL TERMTEXT FROM TE422 INTO CORRESPONDING FIELDS OF
    TABLE GT_TE422 WHERE TERMSCHL IN R_MRU .
      ENDIF.
    **now call the search help
      CALL FUNCTION 'F4IF_INT_TABLE_VALUE_REQUEST'
        EXPORTING
    *   DDIC_STRUCTURE         = ' '
          RETFIELD               = 'TERMSCHL'
    *   PVALKEY                = ' '
    *   DYNPPROG               = ' '
    *   DYNPNR                 = ' '
    *   DYNPROFIELD            = ' '
    *   STEPL                  = 0
         WINDOW_TITLE           = 'Group'
         VALUE                  = DYFIELDS-FIELDVALUE
         VALUE_ORG              = 'S'
    *   MULTIPLE_CHOICE        = ' '
    *   DISPLAY                = ' '
    *   CALLBACK_PROGRAM       = ' '
    *   CALLBACK_FORM          = ' '
    *   MARK_TAB               =
    * IMPORTING
    *   USER_RESET             =
        TABLES
          VALUE_TAB              = GT_TE422
    *   FIELD_TAB              =
         RETURN_TAB             = LT_RETURN_TAB
    *   DYNPFLD_MAPPING        =
    * EXCEPTIONS
    *   PARAMETER_ERROR        = 1
    *   NO_VALUES_FOUND        = 2
    *   OTHERS                 = 3
      IF SY-SUBRC <> 0.
    * MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
    *         WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
      ENDIF.
      READ TABLE LT_RETURN_TAB INTO LWA_RETURN_TAB INDEX 1.
      LV_MRU = LWA_RETURN_TAB-FIELDVAL.
    ENDFORM.                    " MRU_DATA_GET
    <b>b) ZISU_LTR15_TUNE - Actual R15 report</b>
    *& Report  ZISU_LTR15_TUNE                                             *
    REPORT  ZISU_LTR15_TUNE NO STANDARD PAGE HEADING  MESSAGE-ID ZISU
    LINE-SIZE 250 LINE-COUNT 65.
    **Tables
    TABLES :  EVER,
              FKKVKP,
              EANLH.
    SELECTION-SCREEN BEGIN OF BLOCK SELECTION
                              WITH FRAME TITLE TEXT-001 . "no intervals.
    SELECT-OPTIONS: SO_GSBER FOR EVER-GSBER OBLIGATORY,
                    SO_COKEY FOR EVER-COKEY,
                    SO_MRU   FOR EANLH-ABLEINH.
    PARAMETERS:     P_BMNTH(7) TYPE C OBLIGATORY.
    PARAMETERS:     P_CONT TYPE EVER-VERTRAG.
    SELECT-OPTIONS: SO_GPART FOR FKKVKP-GPART.
    SELECTION-SCREEN END OF BLOCK SELECTION.
    SELECTION-SCREEN BEGIN OF BLOCK PROCESS WITH FRAME.
    PARAMETERS:     P_COMPUT RADIOBUTTON GROUP R15.
    PARAMETERS:     P_INCLUD RADIOBUTTON GROUP R15,
                    P_FILE(60) TYPE C.
    SELECTION-SCREEN END OF BLOCK PROCESS.
    *              Start of Type declaration
    TYPES: BEGIN OF ST_TB024 ,
            IND_SECTOR TYPE TB024-IND_SECTOR,
            TEXTLONG TYPE TB024-TEXTLONG,
          END   OF ST_TB024,
          BEGIN OF ST_TECOKT,
            COKEY TYPE TECOKT-COKEY,
            LTEXT TYPE TECOKT-LTEXT,
          END   OF ST_TECOKT,
          BEGIN OF ST_TGSBT,
            GSBER   TYPE TGSBT-GSBER,
            GTEXT   TYPE TGSBT-GTEXT,
          END   OF ST_TGSBT,
          BEGIN OF ST_TE422,
            TERMSCHL  TYPE TE422-TERMSCHL,
            TERMTEXT  TYPE TE422-TERMTEXT,
          END   OF ST_TE422.
    *              Start of data declaration
    DATA: IT_TAB TYPE FILETABLE,
          GD_SUBRC TYPE I.
    DATA : GT_TB024 TYPE STANDARD TABLE OF ST_TB024 WITH HEADER LINE
             INITIAL SIZE 0,
           GT_TECOKT TYPE STANDARD TABLE OF ST_TECOKT
             WITH HEADER LINE,
          GT_TGSBT TYPE SORTED TABLE OF ST_TGSBT
          WITH UNIQUE KEY GSBER WITH HEADER LINE,
          GT_TE422 TYPE TABLE OF ST_TE422 WITH HEADER LINE INITIAL SIZE 0,
          BEGIN OF GWA_EVER,
            VKONT    TYPE EVER-VKONTO,
            ANLAGE   TYPE EVER-ANLAGE,
            ABRSPERR TYPE EVER-ABRSPERR,
          END   OF GWA_EVER,
          GT_EVER LIKE TABLE OF GWA_EVER INITIAL SIZE 0,
          BEGIN OF GWA_EANLH,
          ANLAGE     TYPE EANLH-ANLAGE,
          BRANCHE    TYPE EANLH-BRANCHE,
          END   OF GWA_EANLH,
          GT_EANLH LIKE TABLE OF GWA_EANLH INITIAL SIZE 0,
          BEGIN OF GWA_FKKVKP,
            VKONT   TYPE FKKVKP-VKONT,
            KTOKL   TYPE FKKVKP-KTOKL,
          END   OF GWA_FKKVKP,
          GT_FKKVKP LIKE TABLE OF GWA_FKKVKP INITIAL SIZE 0,
          BEGIN OF GWA_EVER_EANLH_FKKVKP,
            VKONT   TYPE FKKVKP-VKONT,
            ANLAGE   TYPE EVER-ANLAGE,
            ABRSPERR TYPE EVER-ABRSPERR,
            BRANCHE  TYPE EANLH-BRANCHE,
            KTOKL    TYPE FKKVKP-KTOKL,
          END OF GWA_EVER_EANLH_FKKVKP,
          GT_EVER_EANLH_FKKVKP LIKE TABLE OF GWA_EVER_EANLH_FKKVKP
            INITIAL SIZE 0,
          GT_EVER_EANLH_FKKVKP_INACT LIKE STANDARD TABLE OF
            GWA_EVER_EANLH_FKKVKP INITIAL SIZE 0,
          BEGIN OF GWA_ERCH,
            BELNR      TYPE ERCH-BELNR,
            VKONT      TYPE ERCH-VKONT,
          END OF GWA_ERCH,
          GT_ERCH LIKE TABLE OF GWA_ERCH INITIAL SIZE 0,
          BEGIN OF GWA_PRINTDOC,
            OPBEL    TYPE ERDK-OPBEL,
            GPART    TYPE ERDK-PARTNER,
            VKONT    TYPE ERDK-VKONT,
            BUDAT    TYPE ERDK-BUDAT,
            FAEDN    TYPE ERDK-FAEDN,
          END   OF GWA_PRINTDOC,
          GT_PRINTDOC LIKE TABLE OF GWA_PRINTDOC INITIAL SIZE 0,
          BEGIN OF GWA_DBERCHZ1,
            BELNR      TYPE DBERCHZ1-BELNR,
            EIN01      TYPE DBERCHZ1-EIN01,
            V_ABRMENGE TYPE DBERCHZ1-V_ABRMENGE,
          END OF GWA_DBERCHZ1,
          GT_DBERCHZ1 LIKE TABLE OF GWA_DBERCHZ1 INITIAL SIZE 0,
          BEGIN OF GWA_ERCHC,
            BELNR     TYPE ERCHC-BELNR,
            OPBEL     TYPE ERCHC-OPBEL,
            BUDAT     TYPE ERCHC-BUDAT,
          END   OF GWA_ERCHC,
          GT_ERCHC LIKE TABLE OF GWA_ERCHC INITIAL SIZE 0,
    * arrears for inactive consumers.
          BEGIN OF GWA_DFKKOP_INACTIVE_ARR,
              OPBEL       TYPE DFKKOP-OPBEL,
              VKONT       TYPE DFKKOP-VKONT,
              BETRH       TYPE DFKKOP-BETRH,
          END OF GWA_DFKKOP_INACTIVE_ARR,
          GT_DFKKOP_INACTIVE_ARR LIKE TABLE OF GWA_DFKKOP_INACTIVE_ARR
            INITIAL SIZE 0,
          BEGIN OF GWA_ETTIFN,
            ANLAGE    TYPE ETTIFN-ANLAGE,
            OPERAND   TYPE ETTIFN-OPERAND,
            WERT1     TYPE ETTIFN-WERT1,
          END OF GWA_ETTIFN,
          GT_ETTIFN LIKE SORTED TABLE OF GWA_ETTIFN
            WITH NON-UNIQUE KEY ANLAGE OPERAND INITIAL SIZE 0,
          BEGIN OF GWA_DBERDLB,
            PRINTDOC     TYPE DBERDLB-PRINTDOC,
            BILLDOC      TYPE DBERDLB-BILLDOC,
            BILLDOCLINE  TYPE DBERDLB-BILLDOCLINE,
            NETTOBTR     TYPE DBERDLB-NETTOBTR,
          END OF GWA_DBERDLB,
          GT_DBERDLB LIKE TABLE OF GWA_DBERDLB INITIAL SIZE 0,
          BEGIN OF GWA_DBERCHZ1_BILL,
            BELNR       TYPE DBERCHZ1-BELNR,
            BELZEILE    TYPE DBERCHZ1-BELZEILE,
            TVORG       TYPE DBERCHZ1-TVORG,
          END   OF GWA_DBERCHZ1_BILL,
          GT_DBERCHZ1_BILL LIKE TABLE OF GWA_DBERCHZ1_BILL INITIAL SIZE 0,
          BEGIN OF GWA_BILLDOC,
            PRINTDOC TYPE ERDK-OPBEL,
            BILLDOC TYPE DBERDLB-BILLDOC,
          END OF GWA_BILLDOC,
          GT_BILLDOC LIKE TABLE OF GWA_BILLDOC INITIAL SIZE 0,
          BEGIN OF GWA_DBERCHV,
            BELNR    TYPE DBERCHV-BELNR,
            OPERAND  TYPE DBERCHV-OPERAND,
            EZ_ABRMENGE TYPE DBERCHV-EZ_ABRMENGE,
            ABLESGR  TYPE DBERCHV-ABLESGR,
            ABLESGRV TYPE DBERCHV-ABLESGRV,
          END OF GWA_DBERCHV,
          GT_DBERCHV LIKE TABLE OF GWA_DBERCHV INITIAL SIZE 0,
          BEGIN OF GWA_DFKKOP_ARREAR,
            OPBEL     TYPE DFKKOP-OPBEL,
            VKONT     TYPE DFKKOP-VKONT,
            HVORG     TYPE DFKKOP-HVORG,
            TVORG     TYPE DFKKOP-TVORG,
            BUDAT     TYPE DFKKOP-BUDAT,
            BETRH     TYPE DFKKOP-BETRH,
            AUGDT     TYPE DFKKOP-AUGDT,
            XBLNR     TYPE DFKKOP-XBLNR,
          END OF GWA_DFKKOP_ARREAR,
          GT_DFKKOP_ARREAR LIKE TABLE OF GWA_DFKKOP_ARREAR INITIAL SIZE 0,
          BEGIN OF GWA_MASTER_DATA,
            SLNO(4)      TYPE C,
            IND_SECTOR   TYPE TB024-IND_SECTOR,
            TEXTLONG     TYPE TB024-TEXTLONG,
            AC_CODE      TYPE TFK033D-FUN01,
          END   OF GWA_MASTER_DATA,
          GT_MASTER_DATA LIKE TABLE OF GWA_MASTER_DATA INITIAL SIZE 0,
    **      internal table for final prepared data
          BEGIN OF GWA_FINAL_DATA,
              SLNO(4) TYPE C,
              IND_SECTOR      TYPE TB024-IND_SECTOR, " for testing
              INDUSTRY        TYPE TB024-TEXTLONG,
              AC_CODE         TYPE TFK033D-FUN01,
    *    *for urban partners
              UPARTNER        TYPE I , "(6) type n,
              UBAD_METER      TYPE I, "(4) type n,
              UINACTIVE       TYPE I,
              ULOAD(8)        TYPE P DECIMALS 2,
              UUNITS(8)       TYPE P DECIMALS 2,
              UDEMANDS(8)     TYPE P DECIMALS 2,
              UARREARS(8)     TYPE P DECIMALS 2, "FKKMAKO-Msalm,
              UINACT_ARR(8)   TYPE P DECIMALS 2,
              BLANK(10)       TYPE C,
    *    *for rural partners
              RPARTNER        TYPE I , "(6) type n,
              RBAD_METER      TYPE I , "(4) type n,
              RINACTIVE       TYPE I,
              RLOAD(8)        TYPE P DECIMALS 2,
              RUNITS(8)       TYPE P DECIMALS 2,
              RDEMANDS(8)     TYPE P DECIMALS 2,
              RARREARS(8)     TYPE P DECIMALS 2,
              RINACT_ARR(8)   TYPE P DECIMALS 2,
          END OF GWA_FINAL_DATA,
          GT_FINAL_DATA LIKE TABLE OF GWA_FINAL_DATA INITIAL SIZE 0,
          BEGIN OF GWA_MANUAL_DATA,
            COL_1(5)        TYPE C,
            COL_2(10)       TYPE C,
            COL_3(40)       TYPE C,
            COL_4(40)       TYPE C,
            COL_5(10)       TYPE C,
            COL_6(19)       TYPE C,
            COL_7(19)       TYPE C,
            COL_8(19)       TYPE C,
            COL_9(19)       TYPE C,
            COL_10(19)      TYPE C,
            COL_11(19)      TYPE C,
            COL_12(10)      TYPE C,
            COL_13(19)      TYPE C,
            COL_14(19)      TYPE C,
            COL_15(19)      TYPE C,
            COL_16(19)      TYPE C,
            COL_17(19)      TYPE C,
            COL_18(19)      TYPE C,
          END   OF GWA_MANUAL_DATA,
          GT_MANUAL_DATA LIKE TABLE OF GWA_MANUAL_DATA INITIAL SIZE 0.
    ** Variables for grand total of all heads.
    DATA : GV_T_UPART        TYPE I,
           GV_T_RPART        TYPE I,
           GV_T_RINACTIVE    TYPE I,
           GV_T_UINACTIVE    TYPE I,
           GV_UDEF_MTR       TYPE I,
           GV_RDEF_MTR       TYPE I,
           GV_UCON_LOAD(16)  TYPE P DECIMALS 2,
           GV_RCON_LOAD(16)  TYPE P DECIMALS 2,
           GV_UUNITS(16)     TYPE P DECIMALS 2,
           GV_RUNITS(16)     TYPE P DECIMALS 2,
           GV_UDEMAND(16)    TYPE P DECIMALS 2,
           GV_RDEMAND(16)    TYPE P DECIMALS 2,
           GV_UARREAR(16)    TYPE P DECIMALS 2,
           GV_RARREAR(16)    TYPE P DECIMALS 2,
           GV_UINACT_ARR(16) TYPE P DECIMALS 2,
           GV_RINACT_ARR(16) TYPE P DECIMALS 2,
           GV_U_SD_DMD(16)       TYPE P DECIMALS 2,
           GV_R_SD_DMD(16)       TYPE P DECIMALS 2,
           GV_U_SD_ARR(16)       TYPE P DECIMALS 2,
           GV_R_SD_ARR(16)       TYPE P DECIMALS 2,
           GV_UR_PART         TYPE I,
           GV_UR_DEF_MTR      TYPE I,
           GV_UR_CON_LOAD(16) TYPE P DECIMALS 2,
           GV_UR_UNITS(16)    TYPE P DECIMALS 2,
           GV_UR_DEMAND(16)   TYPE P DECIMALS 2,
           GV_UR_ARREARS(16)  TYPE P DECIMALS 2,
           GV_LOWDATE         TYPE SY-DATUM,
           GV_HIGHDATE        TYPE SY-DATUM,
           GV_YEAR   LIKE DBERCHV-EZ_ABRMENGE,
           GV_MONTH  LIKE DBERCHZ1-V_ABRMENGE,
           GV_MNTH_NAME TYPE T247-KTX.
    DATA:
    **total meter rent
          GV_UTOTMETERRENT TYPE P LENGTH 16 DECIMALS 2,
          GV_RTOTMETERRENT TYPE P LENGTH 16 DECIMALS 2,
    **for total surcharge
          GV_UTOTSURCHRG TYPE P LENGTH 16 DECIMALS 2, "dberdlb-nettobtr,
          GV_RTOTSURCHRG TYPE P LENGTH 16 DECIMALS 2, "dberdlb-nettobtr,
    **for total ED
          GV_UTOTED TYPE P LENGTH 16 DECIMALS 2, "dberdlb-nettobtr,
          GV_RTOTED TYPE P LENGTH 16 DECIMALS 2, "dberdlb-nettobtr,
    **for total ED Cess
          GV_UTOTEDCESS TYPE P LENGTH 16 DECIMALS 2, "dberdlb-nettobtr,
          GV_RTOTEDCESS TYPE P LENGTH 16 DECIMALS 2, "dberdlb-nettobtr,
    **for total other misc rev
          GV_UTOTMISCREV  TYPE P LENGTH 16 DECIMALS 2,
          GV_RTOTMISCREV TYPE P LENGTH 16 DECIMALS 2,
    **for total ED of Free agricultural pump
          GV_RTOTEDAGRI TYPE P LENGTH 16 DECIMALS 2,
          GV_UTOTEDAGRI TYPE P LENGTH 16 DECIMALS 2,
    **for ED cess of Free agriculture pump
          GV_RTOTCESSAGRI TYPE P LENGTH 16 DECIMALS 2,
          GV_UTOTCESSAGRI TYPE P LENGTH 16 DECIMALS 2,
    ***data for selection screen data validation
          GV_GSBER TYPE EVER-GSBER,
          GV_COKEY TYPE EVER-COKEY,
          DYFIELDS LIKE DYNPREAD OCCURS 0 WITH HEADER LINE,
          GT_INTERN_DATA TYPE ALSMEX_TABLINE OCCURS 0 WITH HEADER LINE.
    RANGES: R_COKEY FOR TECOKT-COKEY.
    AT SELECTION-SCREEN.
    AT SELECTION-SCREEN ON SO_GSBER.
      IF NOT SO_GSBER-LOW IS INITIAL.
        SELECT SINGLE GSBER FROM TGSBT INTO GT_TGSBT-GSBER WHERE
        GSBER = SO_GSBER-LOW.
        IF SY-SUBRC <> 0.
          MESSAGE E007.
        ENDIF.
      ENDIF.
      IF NOT SO_GSBER-HIGH IS INITIAL .
        SELECT SINGLE GSBER FROM TGSBT INTO GT_TGSBT-GSBER WHERE
        GSBER = SO_GSBER-HIGH.
        IF SY-SUBRC <> 0.
          MESSAGE E007.
        ENDIF.
      ENDIF.
    AT SELECTION-SCREEN ON P_BMNTH.
    **check the validity of Billing month format and for valid billing month
      IF P_BMNTH CO '0123456789/'.
        IF P_BMNTH CP '++++/++'.
          IF P_BMNTH+5(2) > 12.
            MESSAGE E002 WITH 'from'.
          ENDIF.
    ** current year is less than year entered
          IF SY-DATUM(4) < P_BMNTH(4).
            MESSAGE E003 WITH 'from'.
          ELSEIF SY-DATUM(4) = P_BMNTH(4).
    ** month in future
            IF SY-DATUM+4(2) < P_BMNTH+5(2).
              MESSAGE E004 WITH 'from'.
            ENDIF.
          ENDIF.
        ELSE.
          MESSAGE E001 WITH 'from'.
        ENDIF.
      ELSE.
    **  entry have some invalid char
        MESSAGE E010.
      ENDIF.
    AT SELECTION-SCREEN ON VALUE-REQUEST FOR SO_COKEY-LOW.
    **for geting the CO account assigment key of the entered Business area
      CLEAR: DYFIELDS[], DYFIELDS.
      PERFORM DIVISON_DATA_GET CHANGING SO_COKEY-LOW.
    AT SELECTION-SCREEN ON VALUE-REQUEST FOR SO_COKEY-HIGH.
      CLEAR: DYFIELDS[], DYFIELDS.
      PERFORM DIVISON_DATA_GET CHANGING SO_COKEY-HIGH.
    *AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_file.
    *  REFRESH: IT_TAB.
    ***Opens File Open Dialog Box for selecting input file.
    *  CALL METHOD CL_GUI_FRONTEND_SERVICES=>FILE_OPEN_DIALOG
    *    EXPORTING
    *      WINDOW_TITLE     = 'Select File'
    *      DEFAULT_FILENAME = '*.xls'
    *      MULTISELECTION   = ' '
    *    CHANGING
    *      FILE_TABLE       = IT_TAB
    *      RC               = GD_SUBRC.
    *  LOOP AT IT_TAB INTO P_FILE.
    **    so_fpath-sign = 'I'.
    **    so_fpath-option = 'EQ'.
    **    append so_fpath.
    *  ENDLOOP.
    AT SELECTION-SCREEN OUTPUT.
      LOOP AT SCREEN.
        IF SCREEN-GROUP1 = 'ACT'.
          IF P_INCLUD = ' '.
            SCREEN-INPUT = '0'.
          ELSE.
            SCREEN-INPUT = '1'.
          ENDIF.
        ENDIF.
        MODIFY SCREEN.
      ENDLOOP.
    *              End of Selection screen processing
    TOP-OF-PAGE.
      DATA : LV_TEXT(70) TYPE C.
      FORMAT INTENSIFIED OFF.
      WRITE:/50 'CHHATTISGARH STATE ELECTRICITY BOARD',
            /42 'R-15 REPORT FOR LT CONSUMERS FOR THE MONTH OF',
                 GV_MNTH_NAME NO-GAP,'-' NO-GAP, P_BMNTH(4) NO-GAP,
            180 'PAGE-NO. -', SY-PAGNO LEFT-JUSTIFIED.
      SKIP.
      WRITE:/2 'RAO', 15 ':'.
      LOOP AT GT_TGSBT WHERE GSBER IN SO_GSBER.
        IF STRLEN( LV_TEXT ) > 60.
          WRITE: 16 LV_TEXT, / ''.
          CLEAR LV_TEXT.
        ENDIF.
        CONCATENATE LV_TEXT GT_TGSBT-GSBER '-' GT_TGSBT-GTEXT
          INTO LV_TEXT SEPARATED BY SPACE.
      ENDLOOP.
      WRITE: 16 LV_TEXT.
      CLEAR LV_TEXT.
      WRITE: /2 'Division',15 ':'.
      LOOP AT GT_TECOKT.
        IF STRLEN( LV_TEXT ) > 60.
          WRITE: 16 LV_TEXT, /.
          CLEAR LV_TEXT.
        ENDIF.
        CONCATENATE LV_TEXT GT_TECOKT-COKEY '-' GT_TECOKT-LTEXT
          INTO LV_TEXT SEPARATED BY SPACE.
      ENDLOOP.
      WRITE: 16 LV_TEXT.
      CLEAR LV_TEXT.
      WRITE: /2 'Group',15 ':'.
      LOOP AT GT_TE422 .
        IF STRLEN( LV_TEXT ) > 60.
          WRITE: 16 LV_TEXT, /.
          CLEAR LV_TEXT.
        ENDIF.
        CONCATENATE LV_TEXT GT_TE422-TERMSCHL '-' GT_TE422-TERMTEXT
          INTO LV_TEXT SEPARATED BY SPACE.
      ENDLOOP.
      WRITE: 16 LV_TEXT.
      CLEAR LV_TEXT.
    **legends
    *  write :/ text-028, 15 ':',16 text-029.
    **now write the headings on every page
      SET LEFT SCROLL-BOUNDARY COLUMN 50.
      FORMAT COLOR 1 ON.
      WRITE :/1(244) SY-ULINE.
      WRITE :/1 SY-VLINE,6 SY-VLINE,50 SY-VLINE, 58 SY-VLINE, 59
                '<----------------------------------',
                'U R B A N   A R E A',
                '----------------------------------->'.
      WRITE : 151 SY-VLINE, 152
                  '<----------------------------------',
                  'R U R A L   A R E A',
                  '----------------------------------->',
              244 SY-VLINE.
      WRITE :/1 SY-VLINE,
              2 'Slno',
              6 SY-VLINE,
              7 'Revenue Category',
              50 SY-VLINE,
              51 'A/C',
              58 SY-VLINE,
              59 'Cons-',
              67 SY-VLINE,
              68 'Deff',
              75 SY-VLINE,
              76 'Conn',
              89 SY-VLINE,
              90 'Sold',
              108 SY-VLINE,
              109 'Demand',
              129 SY-VLINE,
              130 'Previous',
              151 SY-VLINE,
              152 'Cons-',
              160 SY-VLINE,
              161 'Deff',
              168 SY-VLINE,
              169 'Conn',
              182 SY-VLINE,
              183 'Sold',
              201 SY-VLINE,
              202 'Demand',
              222 SY-VLINE,
              223 'Previous',
              244 SY-VLINE.
      WRITE :/1 SY-VLINE,
              6 SY-VLINE,
              50 SY-VLINE,
              51 'Code',
              58 SY-VLINE,
              59 'umers',
              67 SY-VLINE,
              68 'mtrs',
              75 SY-VLINE,
              76 'Load-KW',
              89 SY-VLINE,
              90 'Units',
              108 SY-VLINE,
              129 SY-VLINE,
              130 'Arrear',
              151 SY-VLINE,
              152 'umers',
              160 SY-VLINE,
              161 'mtrs',
              168 SY-VLINE,
              169 'Load-KW',
              182 SY-VLINE,
              183 'Units',
              201 SY-VLINE,
              222 SY-VLINE,
              223 'Arrear',
              244 SY-VLINE.
      WRITE :/1(244) SY-ULINE.
      SET LEFT SCROLL-BOUNDARY COLUMN 59.
    *              Start of Data Selection
    START-OF-SELECTION.
      SELECT GSBER GTEXT INTO TABLE GT_TGSBT FROM TGSBT
        WHERE SPRAS = SY-LANGU.
      SELECT IND_SECTOR TEXTLONG INTO TABLE GT_TB024
        FROM TB024 WHERE SPRAS = SY-LANGU
                     AND ( ( IND_SECTOR >= '01' AND IND_SECTOR <= '55' )
                      OR ( IND_SECTOR = '57' OR IND_SECTOR = '58'
                      OR IND_SECTOR = '94' ) ).
      SELECT SINGLE KTX INTO GV_MNTH_NAME FROM T247
       WHERE MNR = P_BMNTH+5(2) AND SPRAS = SY-LANGU.
    ***master data selection
      PERFORM CONSUMER_DATA_SELECTION.
    *&--Get Meter Status Connected Load & MF for each installation
      PERFORM OPERAND_DATA_SELECTION.
    *&--Get the Demand corresponding to each Print documents selected
      PERFORM BILLING_DATA_SELECTION.
    *&--Get the arrears corresponding to each Print document selected
      PERFORM ARREAR_DATA_SELECTION.
    *&--To include Mannual R-15 into computerized R-15.
      IF P_INCLUD = 'X'.
        OPEN DATASET P_FILE FOR INPUT IN TEXT MODE ENCODING DEFAULT.
        DO.
          READ DATASET P_FILE INTO GWA_MANUAL_DATA.
          IF SY-SUBRC <> 0.
            EXIT.
          ELSE.
            APPEND GWA_MANUAL_DATA TO GT_MANUAL_DATA.
          ENDIF.
        ENDDO.
        CLOSE DATASET P_FILE.
        DELETE DATASET P_FILE.
      ENDIF.
    END-OF-SELECTION.
    *              End of data Selection
    *            Start of Data Processing
      PERFORM FINAL_TABLE_PREPARE.
      PERFORM FINAL_OUTPUT_PREPARE.
      PERFORM FINAL_OUTPUT_DISPLAY.
    *              End of Data Processing
      PERFORM FREE_MEMORY.
    *&      Form  master_data_selection
    *       text
    *  -->  p1        text
    *  <--  p2        text
    FORM CONSUMER_DATA_SELECTION .
      DATA: LV_MAX_DAYS TYPE I,
            LV_LAST_DAY(2) TYPE C,
            LV_IMONTH TYPE I,
            LV_IYEAR TYPE I,
            LV_BMNTH TYPE ZERDK_ERCHC-V_ABRMENGE,
            LV_BYEAR TYPE ZERDK_ERCHC-EZ_ABRMENGE,
    *&----Temporary tables for global internal tables.
            LT_DBERCHZ1_TEMP LIKE TABLE OF GWA_DBERCHZ1,
            LWA_DBERCHZ1_TEMP LIKE GWA_DBERCHZ1,
            LT_ERCH LIKE TABLE OF GWA_ERCH,
            LWA_ERCH LIKE GWA_ERCH,
            LT_EVER LIKE TABLE OF GWA_EVER.
    *DATA: lt_ever_fkkvkp like gwa_ever_eanlh_fkkvkp occurs 0.
      LV_IMONTH = P_BMNTH+5(2).
      LV_IYEAR  = P_BMNTH(4).
      LV_BMNTH  = P_BMNTH+5(2).
      LV_BYEAR  = P_BMNTH(4).
      CALL FUNCTION 'RTP_US_API_MAX_DAYS_IN_MONTH'
        EXPORTING
          I_DATE_MONTH = LV_IMONTH
          I_DATE_YEAR  = LV_IYEAR
        IMPORTING
          E_MAX_DAYS   = LV_MAX_DAYS.
      LV_LAST_DAY = LV_MAX_DAYS.
      CONCATENATE P_BMNTH(4) P_BMNTH+5(2)  LV_LAST_DAY INTO GV_HIGHDATE.
      IF SO_GPART[] IS INITIAL.
        SELECT VKONTO ANLAGE ABRSPERR
        INTO TABLE GT_EVER
        FROM EVER
        WHERE GSBER IN SO_GSBER
          AND COKEY IN SO_COKEY
          AND   BUKRS = 'CSEB'
          AND   SPARTE = '01'
          AND   KOFIZ  = '02'.
    **get installation no from contract data and check biling class in eanlh
        IF GT_EVER[] IS INITIAL.
    MESSAGE 'No Business Partner exist for entered selection data' TYPE 'A'.
        ENDIF.
        IF NOT GT_EVER[] IS INITIAL.
          SELECT VKONT KTOKL INTO TABLE GT_FKKVKP
            FROM FKKVKP
            FOR ALL ENTRIES IN GT_EVER
            WHERE VKONT = GT_EVER-VKONT
            AND   GPART IN SO_GPART.
          IF GT_FKKVKP[] IS INITIAL.
         MESSAGE 'No Business Partner exist for entered Selection' TYPE 'A'.
          ENDIF.
        ENDIF.
      ELSE.
        SELECT VKONT KTOKL INTO TABLE GT_FKKVKP
          FROM FKKVKP
          WHERE GPART IN SO_GPART.
        IF NOT GT_FKKVKP[] IS INITIAL.
          SELECT VKONTO ANLAGE INTO TABLE GT_EVER
            FROM EVER
            FOR ALL ENTRIES IN GT_FKKVKP
            WHERE VKONTO  EQ GT_FKKVKP-VKONT
              AND GSBER   IN SO_GSBER
              AND COKEY   IN SO_COKEY
              AND BUKRS   EQ 'CSEB'
              AND SPARTE  EQ '01'
              AND KOFIZ   EQ '02'.
        ENDIF.
      ENDIF.
      IF GT_EVER[] IS INITIAL AND GT_FKKVKP[] IS INITIAL.
        MESSAGE 'No Business Partner exist for entered Selection' TYPE 'A'.
      ENDIF.
      SELECT ANLAGE BRANCHE INTO TABLE GT_EANLH
        FROM EANLH
        FOR ALL ENTRIES IN GT_EVER
        WHERE ANLAGE EQ GT_EVER-ANLAGE
        AND   ABLEINH IN SO_MRU
        AND   AKLASSE EQ'0002'
        AND   AB <= GV_HIGHDATE
        AND   BIS => GV_HIGHDATE.
      IF GT_EANLH[] IS INITIAL.
        MESSAGE 'No Business Partner exist for entered Selection' TYPE 'A'.
      ENDIF.
      SORT : GT_EVER BY VKONT ANLAGE,
             GT_FKKVKP BY VKONT,
             GT_EANLH BY ANLAGE.
      LOOP AT GT_EANLH INTO GWA_EANLH.
        READ TABLE GT_EVER INTO GWA_EVER WITH KEY ANLAGE = GWA_EANLH-ANLAGE.
        IF SY-SUBRC = 0.
          READ TABLE GT_FKKVKP INTO GWA_FKKVKP
            WITH KEY VKONT = GWA_EVER-VKONT.
          IF SY-SUBRC = 0.
            GWA_EVER_EANLH_FKKVKP-VKONT = GWA_EVER-VKONT.
            GWA_EVER_EANLH_FKKVKP-ANLAGE = GWA_EVER-ANLAGE.
            GWA_EVER_EANLH_FKKVKP-ABRSPERR = GWA_EVER-ABRSPERR.
            GWA_EVER_EANLH_FKKVKP-BRANCHE  = GWA_EANLH-BRANCHE.
            GWA_EVER_EANLH_FKKVKP-KTOKL    = GWA_FKKVKP-KTOKL.
            APPEND GWA_EVER_EANLH_FKKVKP TO GT_EVER_EANLH_FKKVKP.
            CLEAR GWA_EVER_EANLH_FKKVKP.
          ENDIF.
        ENDIF.
      ENDLOOP.
      IF GT_EVER_EANLH_FKKVKP[] IS INITIAL.
        MESSAGE 'No Business Partner exist for Selection Data' TYPE 'A'.
      ENDIF.
    *&----get all the billdocuments for the busines partner's contract
    *&----account
      SELECT BELNR VKONT INTO TABLE GT_ERCH
        FROM ERCH
        FOR ALL ENTRIES IN GT_EVER_EANLH_FKKVKP
        WHERE VKONT EQ GT_EVER_EANLH_FKKVKP-VKONT.
    *&----get the BILL MONTH & BILL YEAR FOR THE BILLDOCUMENTS.
      IF NOT GT_ERCH[] IS INITIAL.
        SELECT BELNR EIN01 V_ABRMENGE INTO TABLE GT_DBERCHZ1
          FROM DBERCHZ1
          FOR ALL ENTRIES IN GT_ERCH
          WHERE BELNR EQ GT_ERCH-BELNR
            AND AKLASSE = '0002'
            AND ( ( EIN01 = 'BILL_MNTH1'
            AND V_ABRMENGE = P_BMNTH+5(2) )
            OR ( EIN01 = 'BILL_YEAR1'
            AND V_ABRMENGE = P_BMNTH(4) ) ).
    *&---- GET THOSE BILL DOCUMENTS WHICH ARE FOR THE ENTERED BILL MONTH
        IF NOT GT_DBERCHZ1[] IS INITIAL.
          LOOP AT GT_DBERCHZ1 INTO GWA_DBERCHZ1 WHERE EIN01 = 'BILL_MNTH1'
                                              AND V_ABRMENGE = P_BMNTH+5(2).
            READ TABLE GT_DBERCHZ1 INTO LWA_DBERCHZ1_TEMP
            WITH KEY BELNR = GWA_DBERCHZ1-BELNR EIN01 = 'BILL_YEAR1'
            V_ABRMENGE = P_BMNTH(4).
            IF SY-SUBRC = 0.
              APPEND LWA_DBERCHZ1_TEMP TO LT_DBERCHZ1_TEMP.
              CLEAR: LWA_DBERCHZ1_TEMP.
            ENDIF.
          ENDLOOP.
          GT_DBERCHZ1[] = LT_DBERCHZ1_TEMP[].
        ENDIF.
      ENDIF.
    *&---NOW FIND THE PRINT DOCUMENTS FOR THE SELECTED BILLDOCUMENTS.
      IF NOT GT_DBERCHZ1[] IS INITIAL.
        SELECT BELNR OPBEL BUDAT FROM ERCHC
          INTO TABLE GT_ERCHC
          FOR ALL ENTRIES IN GT_DBERCHZ1
          WHERE BELNR = GT_DBERCHZ1-BELNR
            AND INTOPBEL EQ SPACE
            AND SIMULATED EQ SPACE
            AND INVOICED EQ 'X'.
      ENDIF.
      IF NOT GT_ERCHC[] IS INITIAL.
        LOOP AT GT_ERCHC INTO GWA_ERCHC.
          READ TABLE GT_ERCH INTO GWA_ERCH WITH KEY BELNR = GWA_ERCHC-BELNR.
          IF SY-SUBRC = 0.
            APPEND GWA_ERCH TO LT_ERCH.
            CLEAR GWA_ERCH.
          ENDIF.
          CLEAR GWA_ERCHC.
        ENDLOOP.
      ENDIF.
      GT_ERCH[] = LT_ERCH[].
      FREE: LT_ERCH, LT_DBERCHZ1_TEMP,LWA_DBERCHZ1_TEMP.
      LOOP AT GT_EVER_EANLH_FKKVKP INTO GWA_EVER_EANLH_FKKVKP.
    *  READ TABLE gt_erdk_erchc INTO gwa_erdk_erchc
    *  WITH KEY vkont = gwa_ever_eanlh_fkkvkp-vkont.
        READ TABLE GT_ERCH INTO GWA_ERCH
          WITH KEY VKONT = GWA_EVER_EANLH_FKKVKP-VKONT.
        IF SY-SUBRC <> 0.
          IF GWA_EVER_EANLH_FKKVKP-ABRSPERR = SPACE.
            GWA_EVER_EANLH_FKKVKP-ABRSPERR = '01'.
            MODIFY GT_EVER_EANLH_FKKVKP FROM GWA_EVER_EANLH_FKKVKP
              TRANSPORTING ABRSPERR.
            APPEND GWA_EVER_EANLH_FKKVKP TO GT_EVER_EANLH_FKKVKP_INACT.
          ENDIF.
        ELSE.
          IF GWA_EVER_EANLH_FKKVKP-ABRSPERR <> SPACE.
            GWA_EVER_EANLH_FKKVKP-ABRSPERR = SPACE.
            MODIFY GT_EVER_EANLH_FKKVKP FROM GWA_EVER_EANLH_FKKVKP
              TRANSPORTING ABRSPERR.
          ENDIF.
        ENDIF.
        CLEAR GWA_ERCH.
      ENDLOOP.
      REFRESH GT_TECOKT[].
      IF NOT SO_COKEY[] IS INITIAL.
        SELECT COKEY LTEXT INTO TABLE GT_TECOKT
        FROM TECOKT
        WHERE COKEY IN SO_COKEY
          AND SPRAS = SY-LANGU .
    *    %_HINTS ORACLE '("TECOKT","TECOKT~1")'.
      ENDIF.
      IF NOT SO_MRU[] IS INITIAL.
        SELECT TERMSCHL TERMTEXT INTO TABLE GT_TE422
          FROM TE422
          WHERE TERMSCHL IN SO_MRU.
      ENDIF.
    *FREE lt_ever_fkkvkp[].
    ENDFORM.                    " consumer_data_selection
    *&      Form  Operand_data_selection
    *       text
    *  -->  p1        text
    *  <--  p2        text
    FORM OPERAND_DATA_SELECTION .
      DATA: LT_EVER_EANLH_FKKVKP_ACT LIKE TABLE OF GWA_EVER_EANLH_FKKVKP.
    *  SORT gt_ever_eanlh_fkkvkp BY vkont.
      CHECK NOT GT_EVER_EANLH_FKKVKP[] IS INITIAL.
    **now depending upon the billing month check the time slice date
    **the last date of the billing month or the range of billing month
    *should fall in between the time slice of the installation
    ** billing month to is space
    **now select operands for processed installation
      LT_EVER_EANLH_FKKVKP_ACT[] = GT_EVER_EANLH_FKKVKP[].
      DELETE LT_EVER_EANLH_FKKVKP_ACT WHERE ABRSPERR NE SPACE.
      IF NOT LT_EVER_EANLH_FKKVKP_ACT[] IS INITIAL.
        SELECT ANLAGE OPERAND WERT1
        FROM ETTIFN
        INTO TABLE GT_ETTIFN
        FOR ALL ENTRIES IN LT_EVER_EANLH_FKKVKP_ACT
        WHERE ANLAGE = LT_EVER_EANLH_FKKVKP_ACT-ANLAGE
          AND OPERAND IN ('MTR_STS','CONN_LOAD','LOAD_CODE','KWH_MF')
          AND ( AB <= GV_HIGHDATE AND BIS >= GV_HIGHDATE ).
    *    %_HINTS ORACLE '("ETTIFN","ETTIFN~003")'.
      ENDIF.
    ENDFORM.                    " Operand_data_selection
    *&      Form  billing_data_selection
    *&------------------------------

    Hi,
    Please do run time analysis as Rob correctly mentioned or do SQL trace(ST05) to find where the program is consuming more time.
    Lanka

  • When clic in the field "i_ekpo-ebeln" tab exit in report ALV

    Good Afternoon! *********************************************************
    Coloquei all the code, I believe for better clarification. When clico in the field i_ekpo-ebeln in the report is called transaction ME23 c/o GRID this functioning normally, but with the reports List and Hierarquico it does not happen the same and it prints in the baseboard the message "Invalid Function". when standard use buttons, functions of course.
    obs.: I had that to create a SET Pf-status for each type of report pos I wanted that when clicar in the field box and clicar in the button "TO PRINT REPORT" it printed sapscript. How I make to solve such problem?
    Att, Carlos Eduardo.
    REPORT ztreino NO STANDARD PAGE HEADING LINE-SIZE 220.
    ************************declarações*********************
    DATA: BEGIN OF y_ekko OCCURS 0,
            ebeln TYPE ekko-ebeln,  "Nº documento de compra
            bukrs TYPE ekko-bukrs,  "Empresa
            bsart TYPE ekko-bsart,  "Documento de compra
            loekz TYPE ekko-loekz,  "Código de eliminação
            aedat TYPE ekko-aedat,  "Data de criação do registro
            ernam TYPE ekko-ernam,  "Nome do responsável que criou o objeto
            lifnr TYPE ekko-lifnr,  "Nº conta do fornecedor
            ekgrp TYPE ekko-ekgrp,  "Grupo de compradores
            waers TYPE ekko-waers,  "Chave da moeda
            BOX   TYPE ptrv_approval-box, "campo para chekinbox
          END OF y_ekko,
          BEGIN OF y_ekpo OCCURS 0,
            ebeln TYPE ekpo-ebeln,  "Nº documento de compra
            ebelp TYPE ekpo-ebelp,  "Nº item do documento de compra
            loekz TYPE ekpo-loekz,  "Código de eliminação
            txz01 TYPE ekpo-txz01,  "Texto breve
            matnr TYPE ekpo-matnr,  "Nº material
            bukrs TYPE ekpo-bukrs,  "Empresa
            werks TYPE ekpo-werks,  "Centro
            menge TYPE ekpo-menge,  "Quantidade do pedido
            netpr TYPE ekpo-netpr,  "Preço líquido no documento de compra
            BOX   TYPE ptrv_approval-box, "campo para chekinbox
          END OF y_ekpo.
    *início seleção de dados
    SELECTION-SCREEN BEGIN OF BLOCK bl2 WITH FRAME TITLE text-000.
    SELECTION-SCREEN BEGIN OF BLOCK bl1 WITH FRAME TITLE text-001.
    SELECTION-SCREEN SKIP.
                                    *Nº documento de compra
    SELECT-OPTIONS : s_ebeln FOR ekko-ebeln NO INTERVALS OBLIGATORY,
                     s_bukrs FOR ekko-bukrs OBLIGATORY,  "Empresa
                     s_bsart FOR ekko-bsart.  "Documento de compra
    SELECTION-SCREEN END OF BLOCK bl1.
    SELECTION-SCREEN END OF BLOCK bl2.
    **fim da seleção de dados----
    **início da variante
    SELECTION-SCREEN BEGIN OF BLOCK bl4 WITH FRAME TITLE text-000.
    SELECTION-SCREEN BEGIN OF BLOCK bl3 WITH FRAME TITLE text-002.
    PARAMETERS : p_vari LIKE disvariant-variant.
    SELECTION-SCREEN END OF BLOCK bl3.
    SELECTION-SCREEN END OF BLOCK bl4.
    ***fim variante -
    ***início modo relatório
    SELECTION-SCREEN BEGIN OF BLOCK bl5 WITH FRAME TITLE text-000.
    SELECTION-SCREEN BEGIN OF BLOCK bl6 WITH FRAME TITLE text-003.
    SELECTION-SCREEN SKIP.
      PARAMETERS : rb1 RADIOBUTTON GROUP TIPO DEFAULT 'X',
                   rb2 RADIOBUTTON GROUP TIPO,
                   rb3 RADIOBUTTON GROUP TIPO.
    SELECTION-SCREEN END OF BLOCK bl6.
    SELECTION-SCREEN END OF BLOCK bl5.
    ****fim modo relatório
    *******início da opção de download
    Dados do arquivo texto de saída.
    SELECTION-SCREEN BEGIN OF BLOCK bl9 WITH FRAME TITLE text-004.
    SELECTION-SCREEN BEGIN OF LINE.
    SELECTION-SCREEN COMMENT 1(15) text-005.
    PARAMETERS: p_gerar  AS CHECKBOX.
    SELECTION-SCREEN END OF LINE.
    SELECTION-SCREEN BEGIN OF LINE.
    SELECTION-SCREEN COMMENT 1(15) text-006.
    PARAMETERS: p_dir  LIKE rlgrap-filename DEFAULT 'c:'.
    SELECTION-SCREEN END OF LINE.
    SELECTION-SCREEN BEGIN OF LINE.
    SELECTION-SCREEN COMMENT 1(15) text-007.
    PARAMETERS: p_arq  LIKE rlgrap-filename DEFAULT 'nota-geral.txt'.
    SELECTION-SCREEN END OF LINE.
    SELECTION-SCREEN SKIP.
    SELECTION-SCREEN END OF BLOCK bl9.
    DATA :
          i_ekko  LIKE     y_ekko OCCURS 0 WITH HEADER LINE,
          i_ekpo  LIKE     y_ekpo OCCURS 0 WITH HEADER LINE.
         i_tabsaida LIKE  y_saida OCCURS 0 WITH HEADER LINE.
    *********************Fim Declarações*******************************
    *********************Declarações ALV*******************************
    TYPE-POOLS : slis.
    DATA :
           s_layout    TYPE  slis_layout_alv,
           t_sort      TYPE  slis_t_sortinfo_alv WITH HEADER LINE,
           t_fieldcat  TYPE  slis_t_fieldcat_alv WITH HEADER LINE,
           s_grupos    TYPE  slis_t_sp_group_alv WITH HEADER LINE,
           s_keyinfo   TYPE  slis_keyinfo_alv,
           extab       TYPE  slis_t_extab.
    DATA :
           variant_exit(1) TYPE  c,
           def_variant(1)  TYPE  c,
           s_print      TYPE  slis_print_alv,
           s_top        TYPE  slis_t_listheader,
           variante     TYPE  disvariant,
           def_variante TYPE  disvariant,
           v_repid      LIKE  sy-repid,
    *------pega a data que esta rodando a transação
           v_datasaida(10)  TYPE C,
    *------para saber quantos Pedidos na EKKO
           v_exibe      TYPE I,
           s_selfield type slis_selfield,
           v_ucomm like sy-ucomm.
    **********************Fim declarações ALV*************************
                   Contants para Sapscript e declarações                 *
    TABLES: ITCPO.
    CONSTANTS:  c_on(1)  TYPE  C  VALUE  'X',    "Parâmetro para o Sapscript
                c_off(1) TYPE  C  VALUE  ''.     "Parâmetro para o Sapscript
    Data:
          v_element(15) TYPE C,  "Elemento de texto do Sap Script
          v_type(15)    TYPE C,  "BODY
          v_window(15)  TYPE C,  "Janela
          flag          TYPE I,  "Uma condição para impressão do sapscript
          resp          TYPE C,  "resposta para confirmação do download tab
          zlen          TYPE I,  "Para verificar o um diretório válido
    Para a função WS_DOWNLOAD só em declarar as variaveis deste tipo já *
    seria o bastante para passar o caminho para a função
    TABLES : ekko, ekpo.
                       initialization                                    *
    INITIALIZATION.
      PERFORM zf_verifica_variante.
                   at selection-screen on value-request                  *
    AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_vari.
      PERFORM zf_busca_variante_existente.
                 at seletion-screen                                      *
    AT SELECTION-SCREEN.
      PERFORM zf_valida_variante.
    validar os campo antes de fazer download do arquivo
      PERFORM zf_trata_parametros_gerar_arqu.
                start-of-selection                                       *
    START-OF-SELECTION.
      PERFORM zf_seleciona_dados.
                       Criando ALV                                       *
      PERFORM zf_alv.
    *&      Form  zf_verifica_variante
          text
    -->  Verifica se a variante selecionada é existente
    FORM zf_verifica_variante.
      CLEAR variante.
      v_repid = sy-repid.
      variante-report = v_repid.
    Buscar variante default
      def_variante = variante.
      CALL FUNCTION 'REUSE_ALV_VARIANT_DEFAULT_GET'
           EXPORTING
                i_save        = 'A'
           CHANGING
                cs_variant    = def_variante
           EXCEPTIONS
                wrong_input   = 1
                not_found     = 2
                program_error = 3
                OTHERS        = 4.
      IF sy-subrc EQ 0.
        p_vari = def_variante-variant.
      ENDIF.
    ENDFORM.                    " zf_verifica_variante
    *&      Form  zf_busca_variante_existente
    *-       text
    *-  --> Vai buscar a variante existente
    FORM zf_busca_variante_existente.
      CALL FUNCTION 'REUSE_ALV_VARIANT_F4'
           EXPORTING
                is_variant          = variante      " Report com as
                i_save              = 'A'           " Variantes Salvas
                i_tabname_header    = 'I_EKPO'      " Tabela interna saida
                it_default_fieldcat = t_fieldcat[]  " Tabela de formatação
                i_display_via_grid  = 'X'  " Dispara POPUP em ALV
           IMPORTING
                e_exit           = variant_exit  " Se não existir variante X
                es_variant       = def_variante     " Variante default
           EXCEPTIONS
                not_found           = 1
                program_error       = 2
                OTHERS              = 3.
      IF sy-subrc = 2.
          MESSAGE ID sy-msgid TYPE 'S' NUMBER sy-msgno
          WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
      ELSE.
        IF variant_exit = space.
          p_vari = def_variante-variant. " Recebe variante escolhida
        ENDIF.
      ENDIF.
    ENDFORM.                    " zf_busca_variante_existente
    *-&      Form  zf_valida_variante
    *-       text
    *-  -->  Verifica se a variante digitada é válida.
    FORM zf_valida_variante.
      IF NOT p_vari IS INITIAL.
        variante             =     def_variante.    "nome do report
        def_variante-variant =     p_vari.          "nome que foi digitado
        CALL FUNCTION 'REUSE_ALV_VARIANT_EXISTENCE'
             EXPORTING
                  i_save     = 'A'
             CHANGING
                  cs_variant = def_variante
                  variante   = def_variante.
      ELSE.
        clear variante.
        variante-report = v_repid.
      ENDIF.
    ENDFORM.                    " zf_valida_variante
    -&      Form  zf_seleciona_dados
    *-       text
    -->  Seleciona os dados da ekko e ekpo
    FORM zf_seleciona_dados.
      SELECT ebeln
           bukrs
           bsart
           loekz
           aedat
           ernam
           lifnr
           ekgrp
           waers
            FROM ekko
            INTO TABLE i_ekko
            WHERE
                 ( ebeln IN s_ebeln AND
                   bsart EQ 'NB' ).
    SORT I_EKKO ASCENDING.
      IF sy-subrc EQ 0.
        SELECT ebeln
               ebelp
               loekz
               txz01
               matnr
               bukrs
               werks
               menge
               netpr
                FROM ekpo
                INTO TABLE i_ekpo
                FOR ALL ENTRIES IN i_ekko
                WHERE
                     ( ebeln EQ i_ekko-ebeln ).
      ENDIF.
    SORT I_EKPO ASCENDING.
    Para exibir no topo do relatório no grid
    DESCRIBE TABLE I_EKKO LINES v_exibe.
    ENDFORM.                    " zf_seleciona_dados
    *-&      Form  zf_ALV
    *-       text
    -->  Opções de alv
    FORM zf_alv.
    IF rb1 = 'X'.
              PERFORM zf_gri.
    ENDIF.
    IF rb2 = 'X'.
              PERFORM ZF_HIERARQUICO.
    ENDIF.
    IF rb3  =  'X'.
              PERFORM ZF_LIST.
    ENDIF.
    ENDFORM.                    " zf_ALV
    *&      Form  zf_gri
    *-       text
    *-  -->  Seqüência para gerar o alv grid
    FORM zf_gri.
      PERFORM zf_layout.
      PERFORM zf_ordena_campos.
      PERFORM zf_monta_campos_alv.
      PERFORM zf_print.
      PERFORM zf_grupo.
      PERFORM zf_top  USING  s_top.
      IF  NOT  I_EKPO[] IS INITIAL.
        PERFORM zf_imprime_alv.
      ELSE.
        MESSAGE s000(zcl001)  WITH  'Nenhum registro encontrado.'.
        STOP.
      ENDIF.
    ENDFORM.                    " zf_gri
    *-&      Form  zf_layout
    *-       text
    -->  cria o layout do alv
    FORM zf_layout.
      s_layout-box_tabname          = 'I_EKPO'.
      s_layout-box_fieldname        = 'BOX'.
      s_layout-get_selinfos         =  'X'.
      s_layout-detail_popup         =  'X'.
      s_layout-detail_initial_lines =  'X'.
      s_layout-zebra                =  'X'.
      s_layout-colwidth_optimize    =  'X'.
    ENDFORM.                    " zf_layout
    *-&      Form  zf_ordena_campos
    *-       text
    -->  Ordenação dos campos
    FORM zf_ordena_campos.
      CLEAR t_sort.
      t_sort-spos      =  '1'.          "prioridade de ordenação
      t_sort-fieldname =  'EBELN'.      "campo da tab int. de saida
      t_sort-tabname   =  'I_EKPO'.     "tab inter de saida
      t_sort-up        =  'X'.          "ordenação do maior para o menor
      APPEND t_sort.
    ENDFORM.                    " zf_ordena_campos
    *-&      Form  zf_monta_campos_alv
          text
    -->  è passado os campos de acordo com a ordem de exibição inicial
    FORM zf_monta_campos_alv.
    IF rb2  =  'X'.
      CLEAR t_FIELDCAT.
      t_FIELDCAT-FIELDNAME      =  'BOX'.
      t_FIELDCAT-TABNAME        =  'I_EKKO'.
      t_FIELDCAT-CHECKBOX       =  'X'.
      t_FIELDCAT-INPUT          =  'X'.
      APPEND t_FIELDCAT.
      CLEAR t_fieldcat.
      t_fieldcat-fieldname      =  'EBELN'.
      t_fieldcat-tabname        =  'I_EKKO'.
      t_fieldcat-ref_fieldname  =  'EBELN'.
      t_fieldcat-ref_tabname    =  'EKKO'.
      APPEND t_fieldcat.
      CLEAR t_fieldcat.
      t_fieldcat-fieldname      =  'BUKRS'.
      t_fieldcat-tabname        =  'I_EKKO'.
      t_fieldcat-ref_fieldname  =  'BUKRS'.
      t_fieldcat-ref_tabname    =  'EKKO'.
      APPEND t_fieldcat.
      CLEAR t_fieldcat.
      t_fieldcat-fieldname      =  'BSART'.
      t_fieldcat-tabname        =  'I_EKKO'.
      t_fieldcat-ref_fieldname  =  'BSART'.
      t_fieldcat-ref_tabname    =  'EKKO'.
      APPEND t_fieldcat.
      CLEAR t_fieldcat.
      t_fieldcat-fieldname      =  'AEDAT'.
      t_fieldcat-tabname        =  'I_EKKO'.
      t_fieldcat-ref_fieldname  =  'AEDAT'.
      t_fieldcat-ref_tabname    =  'EKKO'.
      APPEND t_fieldcat.
      CLEAR t_fieldcat.
      t_fieldcat-fieldname      =  'ERNAM'.
      t_fieldcat-tabname        =  'I_EKKO'.
      t_fieldcat-ref_fieldname  =  'ERNAM'.
      t_fieldcat-ref_tabname    =  'EKKO'.
      APPEND t_fieldcat.
      CLEAR t_fieldcat.
      t_fieldcat-fieldname      =  'LIFNR'.
      t_fieldcat-tabname        =  'I_EKKO'.
      t_fieldcat-ref_fieldname  =  'LIFNR'.
      t_fieldcat-ref_tabname    =  'EKKO'.
      APPEND t_fieldcat.
      CLEAR t_fieldcat.
      t_fieldcat-fieldname      =  'EKGRP'.
      t_fieldcat-tabname        =  'I_EKKO'.
      t_fieldcat-ref_fieldname  =  'EKGRP'.
      t_fieldcat-ref_tabname    =  'EKKO'.
      APPEND t_fieldcat.
    ENDIF.
      CLEAR t_fieldcat.
      t_fieldcat-fieldname      =  'EBELN'.
      t_fieldcat-tabname        =  'I_EKPO'.
      t_fieldcat-ref_fieldname  =  'EBELN'.
      t_fieldcat-ref_tabname    =  'EKPO'.
      t_fieldcat-key            =  'X'.
      t_fieldcat-Hotspot        =  'X'.
      APPEND t_fieldcat.
      CLEAR t_fieldcat.
      T_fieldcat-fieldname     = 'EBELP'.
      T_fieldcat-tabname       = 'I_EKPO'.
      T_fieldcat-ref_fieldname = 'EBELP'.
      T_fieldcat-ref_tabname   = 'EKPO'.
      APPEND t_fieldcat.
      CLEAR t_fieldcat.
      t_fieldcat-fieldname      =  'MATNR'.
      t_fieldcat-tabname        =  'I_EKPO'.
      t_fieldcat-ref_fieldname  =  'MATNR'.
      t_fieldcat-ref_tabname    =  'EKPO'.
      APPEND t_fieldcat.
      CLEAR t_fieldcat.
      t_fieldcat-fieldname      =  'WERKS'.
      t_fieldcat-tabname        =  'I_EKPO'.
      t_fieldcat-ref_fieldname  =  'WERKS'.
      t_fieldcat-ref_tabname    =  'EKPO'.
      APPEND t_fieldcat.
      CLEAR t_fieldcat.
      t_fieldcat-fieldname      =  'MENGE'.
      t_fieldcat-tabname        =  'I_EKPO'.
      t_fieldcat-ref_fieldname  =  'MENGE'.
      t_fieldcat-ref_tabname    =  'EKPO'.
      APPEND t_fieldcat.
      CLEAR t_fieldcat.
      t_fieldcat-fieldname      =  'NETPR'.
      t_fieldcat-tabname        =  'I_EKPO'.
      t_fieldcat-ref_fieldname  =  'NETPR'.
      t_fieldcat-ref_tabname    =  'EKPO'.
      t_fieldcat-do_sum         =  'X'. "totalizar campo
      APPEND t_fieldcat.
      CLEAR t_fieldcat.
      t_fieldcat-fieldname      =  'TXZ01'.
      t_fieldcat-tabname        =  'I_EKPO'.
      t_fieldcat-ref_fieldname  =  'TXZ01'.
      t_fieldcat-ref_tabname    =  'EKPO'.
      APPEND t_fieldcat.
    ENDFORM.                    " zf_monta_campos_alv
    *-&      Form  zf_top
    *-       text
    *-  --> Cria o texto de cabeçalho do ALV, passando por parametro o
    --> p_S_TOP para s_top
    FORM zf_top USING p_s_top  TYPE slis_t_listheader.
      DATA: ls_line  TYPE  slis_listheader.
      CLEAR  ls_line.
      ls_line-typ  =  'H'.
      ls_line-info  =  'Relatório de Compras por Classificação Contábil'.
      APPEND ls_line  TO  p_s_top.
      CLEAR  ls_line.
      ls_line-typ  =  'S'.
      ls_line-KEY  =  'Parametros Seleção '.
      ls_line-info  = '- Documento de compra'.
      APPEND ls_line  TO  p_s_top.
      CLEAR  ls_line.
      ls_line-typ  =  'S'.
      ls_line-info  = '- Empresa'.
      APPEND ls_line  TO  p_s_top.
      CLEAR  ls_line.
      ls_line-typ  =  'S'.
      ls_line-info  = '- Tip.doc.compra'.
      APPEND ls_line  TO  p_s_top.
      CLEAR  ls_line.
      ls_line-typ  =  'S'.
      ls_line-KEY  =  'Total Pedido'.
      ls_line-info  = v_exibe.
      APPEND ls_line  TO  p_s_top.
    início Formatar a data
      CALL FUNCTION 'DATUMSAUFBEREITUNG'
       EXPORTING
         IDATE                 = SY-DATUM
       IMPORTING
         TDAT8                 = v_datasaida.
    Fim Formatar a data
      CLEAR  ls_line.
      ls_line-typ  =  'S'.
      ls_line-KEY  =  'Data da execução'.
      ls_line-info  = v_datasaida.
      APPEND ls_line  TO  p_s_top.
      CLEAR  ls_line.
      ls_line-typ  =  'S'.
      ls_line-KEY  =  'Usuário'.
      APPEND ls_line  TO  p_s_top.
      CLEAR  ls_line.
      ls_line-typ  =  'A'.
      ls_line-info  = sy-uname.
      APPEND ls_line  TO  p_s_top.
    ENDFORM.                    " zf_top
    *-&      Form  zf_print
    *-       text
    *-  -->  Parametros de Impressão para o ALV
    FORM zf_print.
      s_print-no_print_selinfos     =  'N'.
      s_print-no_print_listinfos    =  'N'.
    ENDFORM.                    " zf_print
    *-&      Form  zf_imprime_alv
    *-       text
    *-  -->  Imprime o ALV c/ seu parametros
    FORM zf_imprime_alv.
      CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
       EXPORTING
         I_CALLBACK_PF_STATUS_SET          = 'ZSET_PF_STATUS'
         I_CALLBACK_USER_COMMAND           = 'ZF_USER_COMMAND'
         i_callback_program                = v_repid
         i_callback_top_of_page            = 'TOP_OF_PAGE'
         is_layout                         =  s_layout
         it_fieldcat                       =  t_fieldcat[]
        IT_EXCLUDING                      =
         IT_SPECIAL_GROUPS                 = S_GRUPOS[]
         it_sort                           = t_sort[]
        IT_FILTER                         =
        IS_SEL_HIDE                       =
         i_default                         = 'X'
         i_save                            = 'A'
         is_variant                        = variante
        IT_EVENTS                         =
        IT_EVENT_EXIT                     =
         IS_PRINT                          = S_PRINT
        IS_REPREP_ID                      =
         I_SCREEN_START_COLUMN             = 0
         I_SCREEN_START_LINE               = 0
         I_SCREEN_END_COLUMN               = 0
         I_SCREEN_END_LINE                 = 0
        IT_ALV_GRAPHICS                   =
        IT_ADD_FIELDCAT                   =
        IT_HYPERLINK                      =
        I_HTML_HEIGHT_TOP                 =
        I_HTML_HEIGHT_END                 =
      IMPORTING
        E_EXIT_CAUSED_BY_CALLER           =
        ES_EXIT_CAUSED_BY_USER            =
        TABLES
          t_outtab                          = I_EKPO
       EXCEPTIONS
         program_error                     = 1
         OTHERS                            = 2.
      IF sy-subrc <> 0.
        MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
        WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
      ENDIF.
    ENDFORM.                    " zf_imprime_alv
    *-&      Form  zf_top-of-page
    *-       text
    -->  Cabeçalho ALV
    FORM top_of_page.
      CALL FUNCTION 'REUSE_ALV_COMMENTARY_WRITE'
           EXPORTING
                it_list_commentary       = s_top
                i_logo                   = 'CARLOS_LOGO3'.
      I_END_OF_LIST_GRID       = .
    ENDFORM.                    " zf_top-of-page
    *-&      Form  ZF_HIERARQUICO
    *-       text
    *-  -->  RELATÓRIO HIERÁQUICO
    form ZF_HIERARQUICO.
      PERFORM zf_layout.
      PERFORM zf_ordena_campos.
      PERFORM zf_monta_campos_alv.
      PERFORM zf_print.
      PERFORM zf_grupo.
      IF  NOT  I_EKPO[] IS INITIAL.
        PERFORM zf_imprime_hierarquico_alv.
      ELSE.
        MESSAGE s000(zcl001)  WITH  'Nenhum registro encontrado.'.
        STOP.
      ENDIF.
    endform.                    " ZF_HIERARQUICO
    *-&      Form  zf_grupo
         text
    -->  Não é fundamental a criação de grupos de campos, mas facilita
    ao usuário na hora de escolher os campos de exibição após o clique do
    botão MODIFICAR LAYOUT . Vários campos da fieldcat podem ser
    definidos para um mesmo grupo de campo.
    form zf_grupo.
    MOVE:'Moeda' TO S_GRUPOS-SP_GROUP,
         'Campos moeda' TO S_GRUPOS-TEXT.
         APPEND S_GRUPOS.
    endform.                    " zf_grupo
    *&      Form  zf_imprime_hierarquico_alv
          text
    -->  p1        text
    <--  p2        text
    form zf_imprime_hierarquico_alv.
    Vamos definir as ligações entre as tabelas para as quebras no momento
    da impressão.
      s_keyinfo-header01  =  'EBELN'.
      s_keyinfo-item01    =  'EBELN'.
      CALL FUNCTION 'REUSE_ALV_HIERSEQ_LIST_DISPLAY'
        EXPORTING
          I_CALLBACK_USER_COMMAND           = 'ZF_USER_COMMAND'
         I_CALLBACK_PF_STATUS_SET          = 'ZF_SET_PF_STATUS_HIERARQ'
          I_CALLBACK_PROGRAM                = v_repid
          IS_LAYOUT                         = S_LAYOUT
          IT_FIELDCAT                       = T_FIELDCAT[]
          IT_SPECIAL_GROUPS                 = S_GRUPOS[]
         IT_SORT                        =
         IT_FILTER                      =
    -    Parâmetro p/executar sempre com a variante default
          I_DEFAULT                         = 'X'
    -                     Se é possível salvar as variantes
          I_SAVE                            = 'A'
    -                          Nome da variante selecionada
          IS_VARIANT                        = VARIANTE
         IT_EVENTS                      =
         IT_EVENT_EXIT                  =
          i_tabname_header                  = 'I_EKKO'
          i_tabname_item                    = 'I_EKPO'
         I_STRUCTURE_NAME_HEADER        =
         I_STRUCTURE_NAME_ITEM          =
          is_keyinfo                        = S_KEYINFO
          IS_PRINT                          = S_PRINT
         IS_REPREP_ID                   =
         I_BUFFER_ACTIVE                =
         I_BYPASSING_BUFFER             =
      IMPORTING
         E_EXIT_CAUSED_BY_CALLER        =
         ES_EXIT_CAUSED_BY_USER         =
        tables
          t_outtab_header                   = I_EKKO
          t_outtab_item                     = I_EKPO.
    endform.                    " zf_imprime_hierarquico_alv
    *&      Form  ZF_LIST
          text
    -->  p1        text
    <--  p2        text
    form ZF_LIST.
      PERFORM zf_layout.
      PERFORM zf_ordena_campos.
      PERFORM zf_monta_campos_alv.
      PERFORM zf_print.
      PERFORM zf_grupo.
      IF  NOT  I_EKPO[] IS INITIAL.
          PERFORM zf_imprime_list_alv.
      ELSE.
        MESSAGE s000(zcl001)  WITH  'Nenhum registro encontrado.'.
        STOP.
      ENDIF.
    endform.                    " ZF_LIST
    *&      Form  zf_imprime_list_alv
          text
    -->  p1        text
    <--  p2        text
    form zf_imprime_list_alv.
      CALL FUNCTION 'REUSE_ALV_LIST_DISPLAY'
       EXPORTING
          I_CALLBACK_PF_STATUS_SET       = 'ZF_SET_PF_STATUS_LIST'
          I_CALLBACK_USER_COMMAND        = 'ZF_USER_COMMAND'
        I_INTERFACE_CHECK              = ' '
        I_BYPASSING_BUFFER             =
        I_BUFFER_ACTIVE                = ' '
         I_CALLBACK_PROGRAM             = v_repid
         I_STRUCTURE_NAME               = 'I_EKPO'
         IS_LAYOUT                      = S_LAYOUT
         IT_FIELDCAT                    = T_FIELDCAT[]
        IT_EXCLUDING                   =
         IT_SPECIAL_GROUPS              = S_GRUPOS[]
         IT_SORT                        = T_SORT[]
        IT_FILTER                      =
        IS_SEL_HIDE                    =
         I_DEFAULT                      = 'X'
         I_SAVE                         = 'A'
         IS_VARIANT                     = VARIANTE
        IT_EVENTS                      =
        IT_EVENT_EXIT                  =
         IS_PRINT                       = S_PRINT
        IS_REPREP_ID                   =
         I_SCREEN_START_COLUMN          = 0
         I_SCREEN_START_LINE            = 0
         I_SCREEN_END_COLUMN            = 0
         I_SCREEN_END_LINE              = 0
      IMPORTING
        E_EXIT_CAUSED_BY_CALLER        =
        ES_EXIT_CAUSED_BY_USER         =
        TABLES
          t_outtab                       = I_EKPO.
    endform.                    " zf_imprime_list_alv
    *&      Form  zf_user_command
          text
    -->  p1        text
    <--  p2        text
    form zf_user_command using p_v_ucomm like SY-UCOMM
                               p_s_selfield type slis_selfield.
    *---tratamento de impressão do Sapscript----
    CASE p_v_ucomm.
      FLAG = 0.
         WHEN 'IMPRIMIR' OR 'PRINT'.
             LOOP AT i_ekpo.
                  IF NOT i_ekpo-BOX IS INITIAL.
                    FLAG = FLAG + 1.
                  ENDIF.
            ENDLOOP.
    se tiver selecionado apenas uma box
            IF flag EQ 1.
                IF p_gerar EQ 'X'.
    *-----perform para confirmação de download
                  PERFORM zf_popup_to_confirm.
                ENDIF.
    *------chama o form para imprimir o sapscript
                  PERFORM zf_sapscript.
            ENDIF.
    box estiver vazia
            IF flag EQ 0.
               MESSAGE E017(ZCL_GRUPO04). "Selecione apenas uma BOX
                                          "referente ao pedido de compras.
               STOP.
            ENDIF.
    "estiver selecionado + de uma box
            IF flag GT 1.
               MESSAGE E017(ZCL_GRUPO04). "Selecione apenas uma
                                         "BOX referente ao pedido de compra.
               STOP.
            ENDIF.
    ENDCASE.
    CASE p_s_selfield-sel_tab_field.
    *observe na exibição do relatório(hierarquico) que temos o EKKO-EBELN
    ficaria  melhor visualmente, a utilização de clicar no mesmo
         WHEN 'I_EKPO-EBELN'. "tab de saida
               SET PARAMETER ID 'BES' FIELD p_s_selfield-VALUE.
               CALL TRANSACTION 'ME23' AND SKIP FIRST SCREEN.
    ENDCASE.
    endform.                    " zf_user_command
    *&      Form  ZSET_PF_STATUS
          text
         -->P_EXTAB  text
    form ZSET_PF_STATUS using    p_extab.
      set pf-status 'BOTOES' EXCLUDING extab.
    endform.                    " ZSET_PF_STATUS
    *&      Form  zf_sapscript
          text
    -->  p1        text
    <--  p2        text
    form zf_sapscript.
    --carregar a ITCPO----
      PERFORM zf_itcpo.
    ----chamar a função Open_form
      PERFORM zf_open_form.
    *----buscar o fornecedor e seus dados
    LOOP AT I_ekko.
            v_element  =  'CABPRIN'.
            v_type     =  'BODY'.
            v_window   =  'JANCABEC'.
            PERFORM  zf_imprime_form USING  v_element
                                            v_type
                                            v_window.
    ENDLOOP.
    *----buscar o documento de compra selecionado
    LOOP AT i_ekpo.
        IF i_ekpo-BOX = 'X'.
            v_element  =  'MAIN'.
            v_type     =  'BODY'.
            v_window   =  'MAIN'.
            PERFORM  zf_imprime_form USING  v_element
                                            v_type
                                            v_window.
    *---o comando EXIT é para que somente quando 1 registro for selecionado
    no relatório e a verificação da igualdade acontecer faz que saia do
    Loop
        EXIT.
        ENDIF.
    ENDLOOP.
      PERFORM zf_close_form.
    endform.                    " zf_sapscript
    *&      Form  zf_itcpo
          text
    -->  p1        text
    <--  p2        text
    form zf_itcpo.
    *Parâmetros para impressão da tabela ITCPO
    ITCPO-TDCOPIES   = 1.           "Quantidade de cópias
    ITCPO-TDPAGESLCT = ''.          "Seleção de páginas
    ITCPO-TDPROGRAM  = SY-REPID.    "Captura o nome do programa
    ITCPO-TDIMMED    = c_on.        "Saída imediata do relatório
    ITCPO-TDPREVIEW  = c_on.        "Exibição prévia do relatório
    ITCPO-TDDEST     = 'LOCL'.      "SPOOL: dispositivo de saída
    ITCPO-TDFAXUSER  = SY-UNAME.    "Usuário logado naquele momento
    ITCPO-TDSENDDATE = SY-DATUM.    "Data de envio desejada
    ITCPO-TDSENDTIME = SY-UZEIT.    "Hora envio desejada
    ITCPO-TDNEWID    = c_on.        "Nova ordem SPOOL
    ITCPO-TDARMOD    = c_on.       "IMPRIMIR: modo de arquivamento
    ITCPO-TDTITLE    = 'Relatório de Compras por Classificação Contábil'.
    endform.                    " zf_itcpo
    *&      Form  zf_open_form

    Boa Tarde Carlos,
    Welcome to the SDN Forums. SDN gets it's power from the large community throughout the world. To harvest that power of knowledge we have settled on one language for posts here which is English.
    Clearly English is not your first language, but don't be afraid, I would vouch that for most of the participant here on SDN English is the second language.
    As it is for me. I am just lucky, that I am living in the States long enough that German colleagues start to look at me strangely when I talk to them in German, because it doesn't totally sound right anymore
    So we are very forgiving her in SDNland regarding grammar and spelling (although not as much anymore in the Weblogs), we even provide a spell checker.
    Please post your question again in English.
    If people don't understand you they will ask you about the things that they don't understand and you can then clarify.
    Try it out. Your chance of an excellent responds is way higher.
    Boa sorte, Mark.

Maybe you are looking for

  • Error while connecting MYSQL Database

    Hi, I use a 30 days trial of Crystal Reports 2008. When i try to connect with the database i always get the next error: [http://www.visiscan.nl/error.jpg] The database is 4.1GB large and there is 10GB free space on the database. Anybody can tell me w

  • Windows 7 blank error message at logon

    Good day computer folks! I have had a problem for some time with my Asus G74sx, with Windows 7 Home.  After boot up, my logon time has gotten fairly long and I get a blank error message box titles only "error".  Process explorer groups it under csrss

  • Account assignment

    Hi Gurus, I understand that TCodes OBYC and OKB9 both are for account assignments and both are used in posting to G/L accounts? Could you please help me understand why these are used? An example of a business logic would be of greate Many Thanks. Kum

  • App-V deploy to terminal servers: force update

    Hi, We are deploying a new version of an App-v 5.0 package to a terminal server. How can we force this package to be upgraded? Asking users to close the application prooved to be impossible: they just don't do it. Please advise. J. Jan Hoedt

  • Is Satellite C650D compatible with an 18.5 inch Widescreen LED Monitor?

    Hi. Can anyone tell me if my laptop reference above in the subject line is compatable with the Hanns G HL195 18.5 inch Widescreen LED Monitor. I want to use my laptop in dual role, but not sure if it will work. If it is compatable how do you connect