Application Development and Automation Discussions
Join the discussions or start your own on all things application development, including tools and APIs, programming models, and keeping your skills sharp.
cancel
Showing results for 
Search instead for 
Did you mean: 
Read only

Real Time Ticket

Former Member
0 Likes
519

Hi experts,

this is the customer ledger report

in this report as program encounters the new customer i.e kunnr it should give opening balance of that customer but the problem is that it is taking the same opening balance of the first customer for all customer.

i am attaching the complete code so please help me in correcting ther code asap.the changes i am trying are in bold format in this program


*&---------------------------------------------------------------------*
*& Report  ZCUST_LEDGER_04
*&
*&---------------------------------------------------------------------*
*&
*&
*&---------------------------------------------------------------------*

REPORT  ZCUST_LEDGER_04 NO STANDARD PAGE HEADING
                            LINE-SIZE 250..


TABLES: bsad, bsid, vbrk.

TYPE-POOLS : slis.
*----------------------------------------------------------------------*
* Data declaration for ALV Display.
*----------------------------------------------------------------------*

DATA : fieldcatalog TYPE slis_t_fieldcat_alv WITH HEADER LINE,
layout TYPE slis_layout_alv,
x_save TYPE disvariant,
it_listhead1 TYPE slis_t_listheader, "List Header
it_listhead TYPE slis_t_listheader. "List Header


DATA: BEGIN OF it_bsid OCCURS 0,
      bukrs TYPE bukrs,         " COMPANY CODE
      kunnr TYPE kunnr,         " Customer
      gjahr TYPE gjahr,         " Fiscal Year
      belnr TYPE belnr_d,       " DOCUMENT NO.
      blart TYPE blart,         " DOC. TYPE
      bldat TYPE bldat,         " DOCUMENT DATE
      xblnr TYPE xblnr1,        " REFF. DOCUMENT NO.
      budat TYPE budat,         " Posting date
      dmbtr LIKE bsis-dmbtr,    " Amount
      shkzg LIKE bsis-shkzg,    " Debit/Credit Indication
      debit LIKE bsis-dmbtr,    " Debit
      credit LIKE bsis-dmbtr,   " CREDIT
      rebzg TYPE rebzg,         " Inv. Reff.
      buzei TYPE buzei,         " LINE ITEM NO.
      augbl TYPE augbl,         " CLEARING DOCUMENT NO.
      augdt TYPE augdt,         " CLEARING DOCUMENT DATE.
      zfbdt TYPE dzfbdt,        " DUE DATE
      akont TYPE akont,         " RECONCILLATION ACCOUNT
       UMSKS type UMSKS,

      END OF it_bsid.

DATA: BEGIN OF it_bsad OCCURS 0,
      bukrs TYPE bukrs,         " COMPANY CODE
      kunnr TYPE kunnr,         " Customer
      gjahr TYPE gjahr,         " Fiscal Year
      belnr TYPE belnr_d,       " DOCUMENT NO.
      blart TYPE blart,         " DOC. TYPE
      bldat TYPE bldat,         " DOCUMENT DATE
      xblnr TYPE xblnr1,        " REFF. DOCUMENT NO.
      budat TYPE budat,         " Posting date
      rebzg TYPE rebzg,         " Inv. Reff.
      buzei TYPE buzei,         " LINE ITEM NO.
      augbl TYPE augbl,         " CLEARING DOCUMENT NO.
      augdt TYPE augdt,         " CLEARING DOCUMENT DATE.
      zfbdt TYPE dzfbdt,        " DUE DATE
      akont TYPE akont,         " RECONCILLATION ACCOUNT
      dmbtr LIKE bsis-dmbtr,    " Amount
      shkzg LIKE bsis-shkzg,    " Debit/Credit Indication
      debit LIKE bsis-dmbtr,    " Debit
      credit LIKE bsis-dmbtr,   " CREDIT
      END OF it_bsad.

DATA : BEGIN OF wa_opn,
        hkont LIKE bsid-hkont,   " General Ledger Account
        kunnr like bsid-kunnr,   " Customer Number 1
*        txt50 LIKE skat-txt50,  " GL A/C TEXT
        dmbtr LIKE bsid-dmbtr,  " Amount
        shkzg LIKE bsid-shkzg,  " Debit/Credit Indication
        budat LIKE bsid-budat,  " Posting date
        kostl LIKE bsid-kostl,  " Cost center
        opnbl LIKE bsid-dmbtr,  " Opening Balance Amount
        Clsbl LIKE bsid-dmbtr,  " Closing balnce Amount
        UMSKS like bsid-UMSKS,

        END OF wa_opn.

DATA: BEGIN OF it_payr OCCURS 0,
      zbukr TYPE dzbukr,        " Company Code
      vblnr TYPE vblnr,         " Document No.
      chect TYPE chect,         " Cheque No.
      zaldt TYPE dzaldt,        " Cheque Dt.
      END OF it_payr.

DATA: BEGIN OF it_bseg OCCURS 0,
      bukrs LIKE bseg-bukrs,  " Company Code
      hkont LIKE bseg-hkont,  " GL A/C NO.
      sgtxt LIKE bseg-sgtxt,  " TEXT
      belnr LIKE bseg-belnr, " DOCUMENT NO.
      END OF it_bseg.

DATA: it_opn LIKE wa_opn OCCURS 0.

DATA: BEGIN OF wa_itab,
      bukrs LIKE bsid-bukrs,  " Company Code
      hkont LIKE bsid-hkont,  " GL A/C NO.
      txt50 LIKE skat-txt50,  " GL A/C TEXT
      belnr  LIKE bsid-belnr, " DOCUMENT NO.
      blart LIKE bsid-blart,  " doc Type
      budat LIKE bsid-budat,  " Posting date
      bldat LIKE bsid-bldat,  " Doc date
      dmbtr LIKE bsid-dmbtr,  " Amount
      shkzg LIKE bsid-shkzg,  " Debit/Credit Indication
      debit LIKE bsid-dmbtr,  " Debit
      credit LIKE bsid-dmbtr, " CREDIT
      xblnr LIKE bsid-xblnr, " Ref Doc
      chect TYPE chect,         " Cheque No.
      zaldt TYPE dzaldt,        " Cheque Dt.
      aufnr LIKE bsid-aufnr,  " Internal Order
      inttext(20), " LIKE aufk-ktext," Internal Text
      kostl LIKE bsid-kostl,  " Cost center
      ltext1(20), " LIKE cskt-ltext, " Cost Center Text
      sgtxt LIKE bseg-sgtxt,  " TEXT
      kunnr like bsid-kunnr,
      name1 like kna1-name1,
      vbeln like bsid-vbeln,
      fkdat like vbrk-fkdat,
      opnbl LIKE bsid-dmbtr,  " Opening Balance Amount
      clsbl LIKE bsid-dmbtr,  " Closing balnce Amount
      count type i  value 0,
      spart like vbrk-spart,  " Division
      stblg like bkpf-stblg,  " Ref.number
      augbl like bseg-augbl,  " Clearing Doc
      zuonr like bsid-zuonr,
       UMSKS like bsid-UMSKS,
*      shkzg like bsid-shkzg,
     END OF wa_itab.

DATA: BEGIN OF it_ctxt OCCURS 0,
      kunnr TYPE kunnr,  " Customer
      name1 TYPE name1,  " Customer TEXT
      lifnr TYPE lifnr,  " Vendor Code
      END OF it_ctxt.


*********Internal Table for final table************************

DATA : itab LIKE wa_itab OCCURS 0.
DATA : wa_ctab LIKE wa_itab.

DATA : ctab LIKE wa_itab OCCURS 0.
DATA : itbl LIKE wa_itab OCCURS 0 with header line.
DATA : itab_final LIKE wa_itab OCCURS 0 with header line.
DATA : itab_write LIKE wa_itab OCCURS 0 with header line.

*********Internal table of amt calculation*********************
DATA : BEGIN OF it_amt OCCURS 0,
       kunnr LIKE bsid-kunnr,
       amount LIKE bsid-dmbtr,
       hkont LIKE bsid-hkont,
       txt50 LIKE skat-txt50,  " GL A/C TEXT
       name1 LIKE kna1-name1,  " Customer TEXT
       opnbl like bsid-dmbtr,  " Opening Balance

       END OF it_amt.
DATA : BEGIN OF it_amt1 OCCURS 0,
       kunnr LIKE bsid-kunnr,
       amount LIKE bsid-dmbtr,
       hkont LIKE bsid-hkont,
       txt50 LIKE skat-txt50,  " GL A/C TEXT
       name1 LIKE kna1-name1,  " Customer TEXT
       opnbl like bsid-dmbtr,  " Opening Balance
amount22 like bsid-dmbtr,
       END OF it_amt1.


*DATA : BEGIN OF it_skat OCCURS 0,
*       txt50 LIKE skat-txt50,
*       END OF it_skat.
********************Variables**********************************
DATA : amount1 LIKE bsid-dmbtr,
       amount2 LIKE bsid-dmbtr,
       clamt LIKE bsid-dmbtr.

DATA : v_kunnr LIKE bsid-kunnr.
DATA : ctext LIKE cskt-ktext.
DATA:  dat LIKE sy-datum.
DATA:  dat1(10),
       yy(4),
       mm(02),
       dd(02).
DATA : tabix LIKE sy-tabix.
DATA : m type i value 0.
DATA : n type i value 0.
data : kk like kna1-kunnr.



****************Selection Screen****************************


SELECTION-SCREEN BEGIN OF BLOCK b1 WITH FRAME TITLE text-001.

SELECT-OPTIONS: s_kunnr FOR bsid-kunnr OBLIGATORY ,
                s_budat FOR bsid-budat OBLIGATORY .
SELECTION-SCREEN END OF BLOCK b1.

*SELECTION-SCREEN BEGIN OF BLOCK b2 WITH FRAME TITLE text-002.
*SELECT-OPTIONS: s_kostl FOR bsid-kostl .
*SELECTION-SCREEN END OF BLOCK b2.

SELECTION-SCREEN BEGIN OF BLOCK b4 WITH FRAME TITLE text-004.
PARAMETERS: p_spart TYPE vbrk-spart .
*OBLIGATORY.
PARAMETERS: p_gjahr TYPE gjahr.
SELECTION-SCREEN END OF BLOCK b4.
*SELECTION-SCREEN BEGIN OF BLOCK b2 WITH FRAME TITLE text-002.
* parameters :  merk  radiobutton group b1,
*               merk1 radiobutton group b1.
*
*SELECTION-SCREEN END OF BLOCK b2.

dd = 01.
mm = 04.
yy = p_gjahr.

CONCATENATE dd '.' mm '.' yy INTO dat1.

*************************************************************
*              START OF SELECTION
*
*************************************************************
clear : itab_final, it_amt, itab, ctab, itab_write .
refresh: itab_final, it_amt, itab, ctab, itab_write.

TOP-OF-PAGE.
  WRITE : /05 'SAKATA INX INDIA LTD'.
  write : / sy-uline.
  write :/05 'Acc.Doc.NO' color 3, 17 'Doc.Type' color 3 , 26 'Posting Date' color 3, 40 'Document Date' color 3,
                54 'Clearing Doc' color 3,   67 'Opening Balance' color 3, 89 'Debit Amount' color 3, 107 'Credit Amount' color 3,
                125 'Closing Balance' color 3, 144 'Invoice No.' color 3, 157 'Inv.Date' color 3, 169 'Reference' color 3,
                187 'Assigment' color 3, 207 'C/D Indicator' color 3, 222 'Long Text' color 3.
*write : / sy-uline.
START-OF-SELECTION.

  PERFORM sel_opn_bal.
  PERFORM final_data.
*  PERFORM get_final.
************** PERFORM FOR DISPLAYING DATA******************************

  SORT itab BY kunnr budat.

*  PERFORM display.
*  PERFORM display_data.
  PERFORM WRITE_DATA.

END-OF-PAGE.
*  SKIP 1.
*  WRITE: 70 'PAGE NO-', syst-pagno.
*&-----------------------------------

*&---------------------------------------------------------------------*
*&      Form  SEL_OPN_BAL
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM sel_opn_bal .
  dat = s_budat-low.
  dat = dat - 1.

           SELECT    hkont      " General Ledger Account
            kunnr      " Customer Number 1
            dmbtr      " Amount
            shkzg      " Debit/Credit Indication
            budat      " Posting Date
            kostl      " Cost center
            UMSKS
            FROM bsid
            INTO corresponding fields of TABLE it_opn
            WHERE kunnr IN s_kunnr
*            AND   kostl IN s_kostl
            AND   bukrs EQ 'SAIL'
            AND   budat between dat1 and dat
            AND   gjahr EQ p_gjahr.


  SORT it_opn BY hkont budat KUNNR.

  LOOP AT it_opn INTO wa_opn.
    v_kunnr = wa_opn-kunnr.
    ON CHANGE OF wa_opn-KUNNR.
      LOOP AT it_opn INTO wa_opn WHERE kunnr = v_kunnr.
        IF wa_opn-shkzg = 'S'.
          amount1 = amount1 + wa_opn-dmbtr.
*          wa_opn-opnbl = wa_opn-opnbl + wa_opn-dmbtr.
        ELSEIF wa_opn-shkzg = 'H'.
          amount2 = amount2 + wa_opn-dmbtr.
*          wa_opn-clsbl = wa_opn-clsbl + wa_opn-dmbtr.
        ENDIF.
      ENDLOOP.

*      SELECT SINGLE txt50
*                FROM skat
*                INTO it_amt-txt50
*                WHERE saknr = wa_opn-hkont
*                AND   spras = 'EN'
*                AND   ktopl = '1000' .

      it_amt-kunnr = wa_opn-kunnr.
      it_amt-amount = amount1 - amount2.
      it_amt-opnbl  = amount1 - amount2.
*      write : it_amt-opnbl.

      DELETE ADJACENT DUPLICATES FROM it_amt COMPARING KUNNR AMOUNT.
APPEND it_amt.
      CLEAR it_amt.
      CLEAR: amount1, amount2.
    ENDON.
  ENDLOOP.

****** Cleared Items
  SELECT    hkont
            kunnr
            dmbtr
            shkzg
            budat
            kostl
            FROM bsad
            INTO TABLE it_opn
            WHERE kunnr IN s_kunnr
*            AND   kostl IN s_kostl
            AND   bukrs EQ 'SAIL'
            AND   budat BETWEEN dat1 AND dat
            AND   gjahr EQ p_gjahr.

  SORT it_opn BY hkont budat KUNNR.

  LOOP AT it_opn INTO wa_opn WHERE budat LT s_budat-low.
    v_kunnr = wa_opn-kunnr.
    ON CHANGE OF wa_opn-KUNNR.
      LOOP AT it_opn INTO wa_opn WHERE kunnr = v_kunnr.
        IF wa_opn-shkzg = 'S'.
          amount1 = amount1 + wa_opn-dmbtr.
*          wa_opn-opnbl = wa_opn-opnbl + wa_opn-dmbtr.
        ELSEIF wa_opn-shkzg = 'H'.
          amount2 = amount2 + wa_opn-dmbtr.
*          wa_opn-clsbl = wa_opn-clsbl + wa_opn-dmbtr.
        ENDIF.
      ENDLOOP.

*      SELECT SINGLE txt50
*                FROM skat
*                INTO it_amt-txt50
*                WHERE saknr = wa_opn-hkont
*                AND   spras = 'EN'
*                AND   ktopl = '1000' .

      it_amt1-kunnr = wa_opn-kunnr.
      it_amt1-amount = amount1 - amount2.
      it_amt1-opnbl  = amount1 - amount2.
*      write : it_amt-opnbl.
      DELETE ADJACENT DUPLICATES FROM it_amt1 COMPARING KUNNR AMOUNT.
      APPEND it_amt1.

      CLEAR it_amt1.
      CLEAR: amount1, amount2.
    ENDON.


 ENDLOOP.
 *on change of wa_opn-kunnr.*
        *loop at it_amt.*
*kk = it_amt-kunnr.*
*loop at it_amt1 where kunnr = kk.*
*it_amt1-amount22 = it_amt-opnbl + it_amt1-opnbl.*
*endloop.*
*append it_amt1.*
*endloop.*
endon.


********************
*  sort it_amt by kunnr amount.
*  LOOP AT IT_AMT.
*  DELETE ADJACENT DUPLICATES FROM it_amt COMPARING all fields.
*  MODIFY it_amt.
*  collect it_amt.
*  ENDLOOP.

ENDFORM.                    " SEL_OPN_BAL

*&---------------------------------------------------------------------*
*&      Form  FINAL_DATA
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
FORM final_data.
  SELECT    hkont
            kunnr
            belnr
            shkzg
            dmbtr
            prctr
            kostl
            aufnr
            bukrs
            blart
            bldat
            kostl
            vbeln
            budat
            xblnr
            zuonr
            sgtxt
            augbl
            shkzg
            UMSKS
            FROM bsid INTO CORRESPONDING FIELDS OF TABLE itab
            WHERE kunnr IN s_kunnr
            AND   budat in s_budat
*            AND   kostl IN s_kostl
            AND   bukrs EQ 'SAIL'.
*            AND   UMSKZ = ' ' OR UMSKZ = 'A'.

*  SELECT    a~hkont
*            a~kunnr
*            a~belnr
*            a~shkzg
*            a~budat
*            a~dmbtr
*            a~prctr
*            a~kostl
*            a~aufnr
*            a~bukrs
*            a~blart
*            a~xblnr
*            a~bldat
*            a~kostl
*            a~vbeln
*            a~sgtxt
*            b~spart
*            INTO CORRESPONDING FIELDS OF TABLE itab
*            FROM bsid AS a
*            left outer join vbrk AS b on a~kunnr = s_kunnr
**            AND   a~budat = s_budat
**            AND   a~kostl IN s_kostl
*            AND   a~bukrs = 'SAIL'
*            AND   b~spart = p_spart.


 IF NOT itab[] IS INITIAL.
    SELECT zbukr vblnr chect zaldt
              FROM payr INTO TABLE it_payr
              FOR ALL ENTRIES IN itab
                WHERE zbukr = itab-bukrs
                AND   vblnr = itab-belnr.

*    SELECT bukrs belnr sgtxt hkont
*              FROM bseg INTO CORRESPONDING FIELDS OF TABLE it_bseg
*              FOR ALL ENTRIES IN itab
*                WHERE bukrs = itab-bukrs
*                AND   belnr = itab-belnr
*                AND   hkont = itab-hkont
*                AND   gjahr = p_gjahr.

SELECT kunnr name1
         FROM kna1 INTO TABLE it_ctxt
         FOR ALL ENTRIES IN it_bsid
            WHERE kunnr = it_bsid-kunnr.
*            AND   spras = 'EN'.
    sort itab by kunnr bldat opnbl.
    LOOP AT itab INTO wa_itab where kunnr in s_kunnr.
      tabix = 0.
      tabix = sy-tabix.

*     select single spart fkdat from vbrk into corresponding fields of wa_itab
*                                                             where vbeln = wa_itab-vbeln.
**                                                             and   spart = p_spart.
*     if wa_itab-spart = p_spart.

      IF wa_itab-shkzg = 'H'.
        wa_itab-credit = wa_itab-dmbtr.
*        MODIFY itab  INDEX sy-tabix FROM wa_itab TRANSPORTING credit.
      ELSEIF wa_itab-shkzg = 'S'.
        wa_itab-debit = wa_itab-dmbtr.
*        MODIFY itab  INDEX sy-tabix FROM wa_itab TRANSPORTING debit.
      ENDIF.

************* Opening Balance Calculation

**      on change of wa_itab-kunnr.
**        clear : m,n.
**        read table it_amt with key kunnr = wa_itab-kunnr.
**        wa_itab-opnbl = it_amt-opnbl.
***        MODIFY itab  INDEX sy-tabix FROM wa_itab TRANSPORTING opnbl.
**      endon.
**
**        n = n + 1.
**        wa_itab-count = n.
**        if n > 1.
**          m = n - 1.
**          read table itbl with key kunnr = wa_itab-kunnr count = m.
**          wa_itab-opnbl = itbl-clsbl.
**        endif.
**        wa_itab-clsbl = wa_itab-opnbl + wa_itab-debit - wa_itab-credit.

************ Opening Balance Calculation
**
**      SELECT SINGLE txt50 FROM skat INTO wa_itab-txt50
**                          WHERE saknr = wa_itab-hkont
**                                  AND   spras = 'EN'
**                                  AND   ktopl = '1000'.
*      IF sy-subrc EQ 0.
*        MODIFY itab  INDEX sy-tabix FROM wa_itab TRANSPORTING txt50.
*      ENDIF.

      SELECT SINGLE ltext INTO wa_itab-ltext1 FROM cskt
                            WHERE kostl = wa_itab-kostl.
      IF sy-subrc EQ 0.
        MODIFY itab  INDEX sy-tabix FROM wa_itab TRANSPORTING ltext1.
      ENDIF.

      READ TABLE it_payr WITH KEY vblnr = wa_itab-belnr.
      IF sy-subrc EQ 0.
        wa_itab-chect = it_payr-chect.
        wa_itab-zaldt = it_payr-zaldt.
        MODIFY  itab INDEX tabix FROM wa_itab TRANSPORTING chect zaldt.
      ENDIF.

      READ TABLE it_ctxt WITH KEY kunnr = wa_itab-kunnr.
        IF sy-subrc EQ 0.
          wa_itab-kunnr = it_ctxt-kunnr.
          wa_itab-name1 = it_ctxt-name1.
          MODIFY  itab INDEX tabix FROM wa_itab TRANSPORTING kunnr name1.
      ENDIF.

*      READ TABLE it_bseg WITH KEY belnr = wa_itab-belnr
*                                  hkont = wa_itab-hkont.
*      IF sy-subrc EQ 0.
*        wa_itab-sgtxt = it_bseg-sgtxt.
*        MODIFY  itab INDEX tabix FROM wa_itab TRANSPORTING sgtxt.
*      ENDIF.

*      SELECT SINGLE ktext INTO wa_itab-inttext FROM aufk
*                             WHERE aufnr = wa_itab-aufnr.
*      IF sy-subrc EQ 0.
*        MODIFY itab  INDEX sy-tabix FROM wa_itab TRANSPORTING aufnr.
*      ENDIF.

*      select single STBLG from bkpf into corresponding fields of wa_itab
*                                                                 where belnr = wa_itab-belnr
*                                                                 and   gjahr = p_gjahr.

      modify itab from wa_itab.
*      append wa_itab to itbl.
      CLEAR wa_itab.
*     else.
*     CLEAR wa_itab.
*     endif.
     ENDLOOP.

     loop at itab into wa_itab .
*      delete itab where debit = 0 and credit = 0.
*      modify itab from wa_itab.
**        collect wa_itab into itab_final.
        append wa_itab to itab_final.
     endloop.
  ENDIF.

***************************************************
  SELECT    hkont
            kunnr
            belnr
            shkzg
            dmbtr
            prctr
            kostl
            aufnr
            bukrs
            blart
            bldat
            kostl
            vbeln
            budat
            xblnr
            sgtxt
            zuonr
            augbl
            shkzg
            FROM bsad INTO CORRESPONDING FIELDS OF TABLE ctab
            WHERE kunnr IN s_kunnr
            AND   budat in s_budat
*            AND   kostl IN s_kostl
            AND   bukrs EQ 'SAIL'
            AND   UMSKZ = ' ' OR UMSKZ = 'A'.

 IF NOT ctab[] IS INITIAL.
    SELECT zbukr vblnr chect zaldt
              FROM payr INTO TABLE it_payr
              FOR ALL ENTRIES IN ctab
                WHERE zbukr = ctab-bukrs
                AND   vblnr = ctab-belnr.

SELECT kunnr name1
         FROM kna1 INTO TABLE it_ctxt
         FOR ALL ENTRIES IN it_bsad
            WHERE kunnr = it_bsad-kunnr.
*            AND   spras = 'EN'.
    sort ctab by kunnr budat.
    LOOP AT ctab INTO wa_ctab.
*      tabix = 0.
      tabix = sy-tabix.

**     select single spart fkdat from vbrk into corresponding fields of wa_ctab
**                                                             where vbeln = wa_ctab-vbeln.
**                                                             and   spart = p_spart.
*     if wa_ctab-spart = p_spart.

      IF wa_ctab-shkzg = 'H'.
        wa_ctab-credit = wa_ctab-dmbtr.
*        MODIFY ctab  INDEX sy-tabix FROM wa_ctab TRANSPORTING credit.
      ELSEIF wa_ctab-shkzg = 'S'.
        wa_ctab-debit = wa_ctab-dmbtr.
*        MODIFY ctab  INDEX sy-tabix FROM wa_ctab TRANSPORTING debit.
      ENDIF.



      SELECT SINGLE ltext INTO wa_ctab-ltext1 FROM cskt
                            WHERE kostl = wa_ctab-kostl.
      IF sy-subrc EQ 0.
        MODIFY ctab  INDEX sy-tabix FROM wa_ctab TRANSPORTING ltext1.
      ENDIF.

      READ TABLE it_payr WITH KEY vblnr = wa_ctab-belnr.
      IF sy-subrc EQ 0.
        wa_ctab-chect = it_payr-chect.
        wa_ctab-zaldt = it_payr-zaldt.
        MODIFY  ctab INDEX tabix FROM wa_ctab TRANSPORTING chect zaldt.
      ENDIF.

      READ TABLE it_ctxt WITH KEY kunnr = wa_ctab-kunnr.
        IF sy-subrc EQ 0.
          wa_ctab-kunnr = it_ctxt-kunnr.
          wa_ctab-name1 = it_ctxt-name1.
          MODIFY  ctab INDEX tabix FROM wa_ctab TRANSPORTING kunnr name1.
      ENDIF.


      modify ctab from wa_ctab.
*      append wa_ctab to itbl.
      CLEAR wa_ctab.
*     else.
*     CLEAR wa_ctab.
*     endif.
     ENDLOOP.

     loop at ctab into wa_ctab.
*      delete ctab where debit = 0 and credit = 0.
*      modify ctab from wa_ctab.
      append wa_ctab to itab_final.
**       collect wa_ctab into itab_final.
     endloop.

  ENDIF.

sort itab_final by kunnr budat.
loop at itab_final.
  itab_write-kunnr = itab_final-kunnr.
  itab_write-belnr = itab_final-belnr.
  itab_write-blart = itab_final-blart.
  itab_write-credit = itab_final-credit.
  itab_write-debit = itab_final-debit.
  itab_write-opnbl = itab_final-opnbl.
  itab_write-clsbl = itab_final-clsbl.
  itab_write-umsks = itab_final-umsks.

  collect itab_write.
endloop.

*if merk  = 'X'.
loop at itab_write where umsks <> 'G'.
      on change of itab_write-kunnr.
        clear : m,n.


*write : / amount22.

        read table it_amt with key kunnr = itab_write-kunnr.
        itab_write-opnbl = it_amt1-amount22.

*        MODIFY itab  INDEX sy-tabix FROM wa_itab TRANSPORTING opnbl.
      endon.


*      on change of itab_write-belnr.



        n = n + 1.
        itab_write-count = n.
        if n > 1.
          m = n - 1.
          read table itbl with key kunnr = itab_write-kunnr count = m.
          itab_write-opnbl = itbl-clsbl.
        endif.

*        write : / itab_write-opnbl.

        itab_write-clsbl = itab_write-opnbl + itab_write-debit - itab_write-credit.

        SELECT single
            shkzg
            xblnr
            sgtxt
            zuonr
            augbl
            shkzg
            budat
            bldat
            vbeln
            umsks
            FROM bsid INTO CORRESPONDING FIELDS OF itab_write where belnr = itab_write-belnr.

        IF SY-SUBRC <> 0.
          SELECT single
            shkzg
            xblnr
            sgtxt
            zuonr
            augbl
            shkzg
            budat
            bldat
            vbeln
            FROM bsad INTO CORRESPONDING FIELDS OF itab_write where belnr = itab_write-belnr.

        ENDIF.

        select single spart
                      fkdat from vbrk into corresponding fields of itab_write where vbeln = itab_write-vbeln.

   append itab_write to itbl.
*         endon.

   modify itab_write.
*    collect itab_write.
endloop.


ENDFORM.                    " FINAL_DATA

*&---------------------------------------------------------------------*
*&      Form  GET_FINAL
*&---------------------------------------------------------------------*

FORM get_final .

  LOOP AT itab INTO wa_itab.
    READ TABLE it_amt WITH KEY kunnr = wa_itab-kunnr.
    IF sy-subrc NE 0.
      it_amt-kunnr = wa_itab-kunnr.
      it_amt-name1 = wa_itab-name1.
      it_amt-amount = 0.
      APPEND it_amt.
    ENDIF.
  ENDLOOP.
ENDFORM.                    " GET_FINAL

*&---------------------------------------------------------------------*
*&      Form  DISPLAY
*&---------------------------------------------------------------------*
FORM display .
  SORT it_amt BY hkont KUNNR.

  LOOP AT it_amt.
*    SKIP 1.
*    WRITE: 60 'PAGE NO-', syst-pagno.
    SKIP 2.

    FORMAT INTENSIFIED ON.
**********company address  header****************
    WRITE: 50 text-005 COLOR 2,
          /55 text-006,
          /50 text-007.
*    ULINE.
    WRITE : /(15) 'REPORT FROM ',
              s_budat-low, 'TO' , s_budat-high.
*    ULINE.
*    SKIP 2.
*    ULINE.
*    WRITE:/   sy-vline, (23) 'CUSTOMER',
*              sy-vline, (11) it_amt-kunnr, (44) it_amt-name1,
*              sy-vline, (23) 'OPEN BALANCE',
*              sy-vline, (10) it_amt-amount color 3.
*              sy-vline, (1) '',
*              sy-vline, (40) ''.
    WRITE:/23 'CUSTOMER', it_amt-kunnr, (44) it_amt-name1,
              'OPEN BALANCE', it_amt-amount color 3.

*    ULINE.
*    " wa_itab-hkont,  wa_itab-txt50,
*    WRITE :/ sy-vline, (10) 'COST CENTER' ,
*             sy-vline, (10) 'DOC TYPE' ,
*             sy-vline, (10) 'DOC NUM' ,
*             sy-vline, (10) 'POST DAT' ,
*             sy-vline, (30) 'NARRATION' ,
*             sy-vline, (10) 'REF NO' ,
*             sy-vline, (10) 'REF DATE' ,
*             sy-vline, (10) 'CHECK NO' ,
*             sy-vline, (10) 'CHECK DATE' ,
*             sy-vline, (15) 'DEBIT' ,
*             sy-vline, (15) 'CREIDT'.
*             sy-vline, (1) ''.
*    ULINE.

    WRITE :/5 'COST CENTER' , 20 'DOC TYPE' , 30 'DOC NUM' , 40 'POST DAT' ,
             50 'NARRATION' ,
             80 'REF NO' ,
             90 'REF DATE' ,
             100  'CHECK NO' ,
             121  'CHECK DATE' ,
             135  'DEBIT' ,
             155  'CREIDT'.


*    SORT itab BY budat kunnr.
    LOOP AT itab INTO wa_itab WHERE kunnr = it_amt-kunnr and budat in s_budat.
      amount1 = amount1 + wa_itab-debit.
      amount2 = amount2 + wa_itab-credit.

*      WRITE : / sy-vline, (10) wa_itab-kostl,
*                sy-vline, (10) wa_itab-blart,
*                sy-vline, (10) wa_itab-belnr,
*                sy-vline, (10) wa_itab-budat,
*                sy-vline, (30) wa_itab-sgtxt,
*                sy-vline, (10) wa_itab-xblnr,
*                sy-vline, (10) wa_itab-bldat,
*                sy-vline, (10) wa_itab-chect,
*                sy-vline, (10) wa_itab-zaldt,
*                sy-vline, (15) wa_itab-debit COLOR 3,
*                sy-vline, (15) wa_itab-credit COLOR 3,
*                sy-vline, (1) ''.

      WRITE : /5 wa_itab-kostl,
               20 wa_itab-blart,
               30 wa_itab-belnr,
               40 wa_itab-budat,
               50 wa_itab-sgtxt,
               80 wa_itab-xblnr,
               90 wa_itab-bldat,
               100 wa_itab-chect,
               121 wa_itab-zaldt,
               135 wa_itab-debit COLOR 3,
               155 wa_itab-credit COLOR 3.
    ENDLOOP.
    clamt = ( amount1 - amount2 ) + it_amt-amount.
    ULINE.
    WRITE: / sy-vline,(10) 'TOTAL' ,
           sy-vline, (121) '' ,
           sy-vline, (15) amount1 COLOR 3,
           sy-vline, (15) amount2  COLOR 3,
           sy-vline, (1) ''.
    ULINE.
    WRITE: /  sy-vline, (23) 'CLOSING BALANCE',
              sy-vline, (15) clamt  COLOR 3,
              sy-vline, (1) ''.
    ULINE.
    CLEAR : amount1,amount2.
*    NEW-PAGE.
  ENDLOOP.

ENDFORM.                    " DISPLAY

FORM display_data.

PERFORM build_fieldcatalog.
PERFORM disp_alv.

ENDFORM.                    " display_data

*&---------------------------------------------------------------------*
*&      Form  BUILD_FIELDCATALOG
*&---------------------------------------------------------------------*

FORM build_fieldcatalog .

CLEAR: fieldcatalog,fieldcatalog[].

fieldcatalog-fieldname = 'KUNNR'.
*fieldcatalog-tabname = 'IT_FINAL'.
fieldcatalog-seltext_s = 'Customer Code'.
fieldcatalog-key = 'X'.
APPEND fieldcatalog TO fieldcatalog.
CLEAR fieldcatalog.

fieldcatalog-fieldname = 'NAME1'.
fieldcatalog-seltext_m = 'Customer Name'.
*fieldcatalog-key = 'X'.
*fieldcatalog-no_zero = 'X'.
APPEND fieldcatalog TO fieldcatalog.
CLEAR fieldcatalog.

fieldcatalog-fieldname = 'BELNR'.
fieldcatalog-seltext_m = 'Acc.Doc.No'.
APPEND fieldcatalog TO fieldcatalog.
CLEAR fieldcatalog.

fieldcatalog-fieldname = 'BLART'.
fieldcatalog-seltext_m = 'Doc. Type'.
APPEND fieldcatalog TO fieldcatalog.
CLEAR fieldcatalog.

fieldcatalog-fieldname = 'BUDAT'.
fieldcatalog-seltext_m = 'Posting Date'.
APPEND fieldcatalog TO fieldcatalog.
CLEAR fieldcatalog.

fieldcatalog-fieldname = 'AUGBL'.
fieldcatalog-seltext_m = 'Clearing Doc.'.
APPEND fieldcatalog TO fieldcatalog.
CLEAR fieldcatalog.

fieldcatalog-fieldname = 'ZUONR'.
fieldcatalog-seltext_m = 'Assignment'.
APPEND fieldcatalog TO fieldcatalog.
CLEAR fieldcatalog.

fieldcatalog-fieldname = 'SGTXT'.
fieldcatalog-seltext_m = 'Long Text'.
APPEND fieldcatalog TO fieldcatalog.
CLEAR fieldcatalog.

fieldcatalog-fieldname = 'XBLNR'.
fieldcatalog-seltext_m = 'Reference'.
APPEND fieldcatalog TO fieldcatalog.
CLEAR fieldcatalog.

fieldcatalog-fieldname = 'VBELN'.
fieldcatalog-seltext_m = 'Invoice No'.
APPEND fieldcatalog TO fieldcatalog.
CLEAR fieldcatalog.

fieldcatalog-fieldname = 'FKDAT'.
fieldcatalog-seltext_m = 'Invoice Date'.
APPEND fieldcatalog TO fieldcatalog.
CLEAR fieldcatalog.

*fieldcatalog-fieldname = 'ZALDT'.
*fieldcatalog-seltext_m = 'AMT'.
*APPEND fieldcatalog TO fieldcatalog.
*CLEAR fieldcatalog.

fieldcatalog-fieldname = 'OPNBL'.
fieldcatalog-seltext_m = 'Opening Balance'.
APPEND fieldcatalog TO fieldcatalog.
CLEAR fieldcatalog.

fieldcatalog-fieldname = 'DEBIT'.
fieldcatalog-seltext_m = 'Debit'.
APPEND fieldcatalog TO fieldcatalog.
CLEAR fieldcatalog.

fieldcatalog-fieldname = 'CREDIT'.
fieldcatalog-seltext_m = 'Credit'.
APPEND fieldcatalog TO fieldcatalog.
CLEAR fieldcatalog.

fieldcatalog-fieldname = 'CLSBL'.
fieldcatalog-seltext_m = 'Closing balance'.
APPEND fieldcatalog TO fieldcatalog.
CLEAR fieldcatalog.

ENDFORM.                    " BUILD_FIELDCATALOG

*&---------------------------------------------------------------------*
*&      Form  disp_alv
*&---------------------------------------------------------------------*

FORM disp_alv .
layout-colwidth_optimize = 'X'.

DATA: w_repid TYPE sy-repid.
w_repid = sy-repid.

*----------------------------------------------------------------------
*----------------------------------------------------------------------

CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
EXPORTING
    i_callback_program = w_repid
    is_layout = layout
    it_fieldcat = fieldcatalog[]
    i_save = 'A'
    is_variant = x_save
TABLES
  t_outtab = itab_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.                    " disp_alv


FORM WRITE_DATA.

*loop at itab_final.
*        select single
*                      sgtxt
*                      zuonr
*                      augbl from bseg into corresponding fields of itab_final where belnr = itab_final-belnr and shkzg = 'H'.
*        select single xblnr
*                      budat from bkpf into corresponding fields of itab_final where belnr = itab_final-belnr.
*
*        select single spart
*                      fkdat from vbrk into corresponding fields of itab_final where vbeln = itab_final-vbeln.
*modify itab_final.
*endloop.
clear : itab_write.
  LOOP AT ITAB_write where kunnr in s_kunnr and budat in s_budat.
*  where kunnr between s_kunnr-low and s_kunnr-high.
   ON CHANGE OF itab_write-kunnr.
   new-page.
*     read table ctab into wa_ctab with key kunnr = itab_write-kunnr.
      select single name1 from kna1 into itab_write-name1 where kunnr = itab_write-kunnr.
*        itab_write-name1 = wa_ctab-name1.
        write : / sy-uline.
*        skip 2.
        WRITE :/05 ITAB_write-KUNNR color 1, ITAB_write-NAME1 color 1, 'Period from', s_budat-low color 1, 'to', s_budat-high color 1.
        write :/ sy-uline.

*        write :/05 'Acc.Doc.NO' color 3, 17 'Doc.Type' color 3 , 26 'Posting Date' color 3, 40 'Document Date' color 3,
*                54 'Clearing Doc' color 3,   67 'Opening Balance' color 3, 89 'Debit Amount' color 3, 107 'Credit Amount' color 3,
*                125 'Closing Balance' color 3, 144 'Invoice No.' color 3, 157 'Inv.Date' color 3, 169 'Reference' color 3,
*                187 'Assigment' color 3, 207 'C/D Indicator' color 3, 222 'Long Text' color 3.
   ENDON.

     write : /05 itab_write-belnr, 17 itab_write-blart, 26 itab_write-budat, 40 itab_write-bldat, 55 itab_write-augbl,
              67 itab_write-opnbl, 86 itab_write-debit, 105 itab_write-credit, 125 itab_write-clsbl, 144 itab_write-vbeln,
              157 itab_write-fkdat, 169 itab_write-xblnr, 187 itab_write-zuonr, 207 itab_write-shkzg, 222 itab_write-sgtxt .
  ENDLOOP.
  write : / sy-uline.

ENDFORM.

Code Formatted by: Alvaro Tejada Galindo on Apr 25, 2008 4:46 PM

Hi experts,

this is the customer ledger report

in this report as program encounters the new customer i.e kunnr it should give opening balance of that customer but the problem is that it is taking the same opening balance of the first customer for all customer.

i am attaching the complete code so please help me in correcting ther code asap.the changes i am trying are in bold format in this program


*&---------------------------------------------------------------------*
*& Report  ZCUST_LEDGER_04
*&
*&---------------------------------------------------------------------*
*&
*&
*&---------------------------------------------------------------------*

REPORT  ZCUST_LEDGER_04 NO STANDARD PAGE HEADING
                            LINE-SIZE 250..


TABLES: bsad, bsid, vbrk.

TYPE-POOLS : slis.
*----------------------------------------------------------------------*
* Data declaration for ALV Display.
*----------------------------------------------------------------------*

DATA : fieldcatalog TYPE slis_t_fieldcat_alv WITH HEADER LINE,
layout TYPE slis_layout_alv,
x_save TYPE disvariant,
it_listhead1 TYPE slis_t_listheader, "List Header
it_listhead TYPE slis_t_listheader. "List Header


DATA: BEGIN OF it_bsid OCCURS 0,
      bukrs TYPE bukrs,         " COMPANY CODE
      kunnr TYPE kunnr,         " Customer
      gjahr TYPE gjahr,         " Fiscal Year
      belnr TYPE belnr_d,       " DOCUMENT NO.
      blart TYPE blart,         " DOC. TYPE
      bldat TYPE bldat,         " DOCUMENT DATE
      xblnr TYPE xblnr1,        " REFF. DOCUMENT NO.
      budat TYPE budat,         " Posting date
      dmbtr LIKE bsis-dmbtr,    " Amount
      shkzg LIKE bsis-shkzg,    " Debit/Credit Indication
      debit LIKE bsis-dmbtr,    " Debit
      credit LIKE bsis-dmbtr,   " CREDIT
      rebzg TYPE rebzg,         " Inv. Reff.
      buzei TYPE buzei,         " LINE ITEM NO.
      augbl TYPE augbl,         " CLEARING DOCUMENT NO.
      augdt TYPE augdt,         " CLEARING DOCUMENT DATE.
      zfbdt TYPE dzfbdt,        " DUE DATE
      akont TYPE akont,         " RECONCILLATION ACCOUNT
       UMSKS type UMSKS,

      END OF it_bsid.

DATA: BEGIN OF it_bsad OCCURS 0,
      bukrs TYPE bukrs,         " COMPANY CODE
      kunnr TYPE kunnr,         " Customer
      gjahr TYPE gjahr,         " Fiscal Year
      belnr TYPE belnr_d,       " DOCUMENT NO.
      blart TYPE blart,         " DOC. TYPE
      bldat TYPE bldat,         " DOCUMENT DATE
      xblnr TYPE xblnr1,        " REFF. DOCUMENT NO.
      budat TYPE budat,         " Posting date
      rebzg TYPE rebzg,         " Inv. Reff.
      buzei TYPE buzei,         " LINE ITEM NO.
      augbl TYPE augbl,         " CLEARING DOCUMENT NO.
      augdt TYPE augdt,         " CLEARING DOCUMENT DATE.
      zfbdt TYPE dzfbdt,        " DUE DATE
      akont TYPE akont,         " RECONCILLATION ACCOUNT
      dmbtr LIKE bsis-dmbtr,    " Amount
      shkzg LIKE bsis-shkzg,    " Debit/Credit Indication
      debit LIKE bsis-dmbtr,    " Debit
      credit LIKE bsis-dmbtr,   " CREDIT
      END OF it_bsad.

DATA : BEGIN OF wa_opn,
        hkont LIKE bsid-hkont,   " General Ledger Account
        kunnr like bsid-kunnr,   " Customer Number 1
*        txt50 LIKE skat-txt50,  " GL A/C TEXT
        dmbtr LIKE bsid-dmbtr,  " Amount
        shkzg LIKE bsid-shkzg,  " Debit/Credit Indication
        budat LIKE bsid-budat,  " Posting date
        kostl LIKE bsid-kostl,  " Cost center
        opnbl LIKE bsid-dmbtr,  " Opening Balance Amount
        Clsbl LIKE bsid-dmbtr,  " Closing balnce Amount
        UMSKS like bsid-UMSKS,

        END OF wa_opn.

DATA: BEGIN OF it_payr OCCURS 0,
      zbukr TYPE dzbukr,        " Company Code
      vblnr TYPE vblnr,         " Document No.
      chect TYPE chect,         " Cheque No.
      zaldt TYPE dzaldt,        " Cheque Dt.
      END OF it_payr.

DATA: BEGIN OF it_bseg OCCURS 0,
      bukrs LIKE bseg-bukrs,  " Company Code
      hkont LIKE bseg-hkont,  " GL A/C NO.
      sgtxt LIKE bseg-sgtxt,  " TEXT
      belnr LIKE bseg-belnr, " DOCUMENT NO.
      END OF it_bseg.

DATA: it_opn LIKE wa_opn OCCURS 0.

DATA: BEGIN OF wa_itab,
      bukrs LIKE bsid-bukrs,  " Company Code
      hkont LIKE bsid-hkont,  " GL A/C NO.
      txt50 LIKE skat-txt50,  " GL A/C TEXT
      belnr  LIKE bsid-belnr, " DOCUMENT NO.
      blart LIKE bsid-blart,  " doc Type
      budat LIKE bsid-budat,  " Posting date
      bldat LIKE bsid-bldat,  " Doc date
      dmbtr LIKE bsid-dmbtr,  " Amount
      shkzg LIKE bsid-shkzg,  " Debit/Credit Indication
      debit LIKE bsid-dmbtr,  " Debit
      credit LIKE bsid-dmbtr, " CREDIT
      xblnr LIKE bsid-xblnr, " Ref Doc
      chect TYPE chect,         " Cheque No.
      zaldt TYPE dzaldt,        " Cheque Dt.
      aufnr LIKE bsid-aufnr,  " Internal Order
      inttext(20), " LIKE aufk-ktext," Internal Text
      kostl LIKE bsid-kostl,  " Cost center
      ltext1(20), " LIKE cskt-ltext, " Cost Center Text
      sgtxt LIKE bseg-sgtxt,  " TEXT
      kunnr like bsid-kunnr,
      name1 like kna1-name1,
      vbeln like bsid-vbeln,
      fkdat like vbrk-fkdat,
      opnbl LIKE bsid-dmbtr,  " Opening Balance Amount
      clsbl LIKE bsid-dmbtr,  " Closing balnce Amount
      count type i  value 0,
      spart like vbrk-spart,  " Division
      stblg like bkpf-stblg,  " Ref.number
      augbl like bseg-augbl,  " Clearing Doc
      zuonr like bsid-zuonr,
       UMSKS like bsid-UMSKS,
*      shkzg like bsid-shkzg,
     END OF wa_itab.

DATA: BEGIN OF it_ctxt OCCURS 0,
      kunnr TYPE kunnr,  " Customer
      name1 TYPE name1,  " Customer TEXT
      lifnr TYPE lifnr,  " Vendor Code
      END OF it_ctxt.


*********Internal Table for final table************************

DATA : itab LIKE wa_itab OCCURS 0.
DATA : wa_ctab LIKE wa_itab.

DATA : ctab LIKE wa_itab OCCURS 0.
DATA : itbl LIKE wa_itab OCCURS 0 with header line.
DATA : itab_final LIKE wa_itab OCCURS 0 with header line.
DATA : itab_write LIKE wa_itab OCCURS 0 with header line.

*********Internal table of amt calculation*********************
DATA : BEGIN OF it_amt OCCURS 0,
       kunnr LIKE bsid-kunnr,
       amount LIKE bsid-dmbtr,
       hkont LIKE bsid-hkont,
       txt50 LIKE skat-txt50,  " GL A/C TEXT
       name1 LIKE kna1-name1,  " Customer TEXT
       opnbl like bsid-dmbtr,  " Opening Balance

       END OF it_amt.
DATA : BEGIN OF it_amt1 OCCURS 0,
       kunnr LIKE bsid-kunnr,
       amount LIKE bsid-dmbtr,
       hkont LIKE bsid-hkont,
       txt50 LIKE skat-txt50,  " GL A/C TEXT
       name1 LIKE kna1-name1,  " Customer TEXT
       opnbl like bsid-dmbtr,  " Opening Balance
amount22 like bsid-dmbtr,
       END OF it_amt1.


*DATA : BEGIN OF it_skat OCCURS 0,
*       txt50 LIKE skat-txt50,
*       END OF it_skat.
********************Variables**********************************
DATA : amount1 LIKE bsid-dmbtr,
       amount2 LIKE bsid-dmbtr,
       clamt LIKE bsid-dmbtr.

DATA : v_kunnr LIKE bsid-kunnr.
DATA : ctext LIKE cskt-ktext.
DATA:  dat LIKE sy-datum.
DATA:  dat1(10),
       yy(4),
       mm(02),
       dd(02).
DATA : tabix LIKE sy-tabix.
DATA : m type i value 0.
DATA : n type i value 0.
data : kk like kna1-kunnr.



****************Selection Screen****************************


SELECTION-SCREEN BEGIN OF BLOCK b1 WITH FRAME TITLE text-001.

SELECT-OPTIONS: s_kunnr FOR bsid-kunnr OBLIGATORY ,
                s_budat FOR bsid-budat OBLIGATORY .
SELECTION-SCREEN END OF BLOCK b1.

*SELECTION-SCREEN BEGIN OF BLOCK b2 WITH FRAME TITLE text-002.
*SELECT-OPTIONS: s_kostl FOR bsid-kostl .
*SELECTION-SCREEN END OF BLOCK b2.

SELECTION-SCREEN BEGIN OF BLOCK b4 WITH FRAME TITLE text-004.
PARAMETERS: p_spart TYPE vbrk-spart .
*OBLIGATORY.
PARAMETERS: p_gjahr TYPE gjahr.
SELECTION-SCREEN END OF BLOCK b4.
*SELECTION-SCREEN BEGIN OF BLOCK b2 WITH FRAME TITLE text-002.
* parameters :  merk  radiobutton group b1,
*               merk1 radiobutton group b1.
*
*SELECTION-SCREEN END OF BLOCK b2.

dd = 01.
mm = 04.
yy = p_gjahr.

CONCATENATE dd '.' mm '.' yy INTO dat1.

*************************************************************
*              START OF SELECTION
*
*************************************************************
clear : itab_final, it_amt, itab, ctab, itab_write .
refresh: itab_final, it_amt, itab, ctab, itab_write.

TOP-OF-PAGE.
  WRITE : /05 'SAKATA INX INDIA LTD'.
  write : / sy-uline.
  write :/05 'Acc.Doc.NO' color 3, 17 'Doc.Type' color 3 , 26 'Posting Date' color 3, 40 'Document Date' color 3,
                54 'Clearing Doc' color 3,   67 'Opening Balance' color 3, 89 'Debit Amount' color 3, 107 'Credit Amount' color 3,
                125 'Closing Balance' color 3, 144 'Invoice No.' color 3, 157 'Inv.Date' color 3, 169 'Reference' color 3,
                187 'Assigment' color 3, 207 'C/D Indicator' color 3, 222 'Long Text' color 3.
*write : / sy-uline.
START-OF-SELECTION.

  PERFORM sel_opn_bal.
  PERFORM final_data.
*  PERFORM get_final.
************** PERFORM FOR DISPLAYING DATA******************************

  SORT itab BY kunnr budat.

*  PERFORM display.
*  PERFORM display_data.
  PERFORM WRITE_DATA.

END-OF-PAGE.
*  SKIP 1.
*  WRITE: 70 'PAGE NO-', syst-pagno.
*&-----------------------------------

*&---------------------------------------------------------------------*
*&      Form  SEL_OPN_BAL
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM sel_opn_bal .
  dat = s_budat-low.
  dat = dat - 1.

           SELECT    hkont      " General Ledger Account
            kunnr      " Customer Number 1
            dmbtr      " Amount
            shkzg      " Debit/Credit Indication
            budat      " Posting Date
            kostl      " Cost center
            UMSKS
            FROM bsid
            INTO corresponding fields of TABLE it_opn
            WHERE kunnr IN s_kunnr
*            AND   kostl IN s_kostl
            AND   bukrs EQ 'SAIL'
            AND   budat between dat1 and dat
            AND   gjahr EQ p_gjahr.


  SORT it_opn BY hkont budat KUNNR.

  LOOP AT it_opn INTO wa_opn.
    v_kunnr = wa_opn-kunnr.
    ON CHANGE OF wa_opn-KUNNR.
      LOOP AT it_opn INTO wa_opn WHERE kunnr = v_kunnr.
        IF wa_opn-shkzg = 'S'.
          amount1 = amount1 + wa_opn-dmbtr.
*          wa_opn-opnbl = wa_opn-opnbl + wa_opn-dmbtr.
        ELSEIF wa_opn-shkzg = 'H'.
          amount2 = amount2 + wa_opn-dmbtr.
*          wa_opn-clsbl = wa_opn-clsbl + wa_opn-dmbtr.
        ENDIF.
      ENDLOOP.

*      SELECT SINGLE txt50
*                FROM skat
*                INTO it_amt-txt50
*                WHERE saknr = wa_opn-hkont
*                AND   spras = 'EN'
*                AND   ktopl = '1000' .

      it_amt-kunnr = wa_opn-kunnr.
      it_amt-amount = amount1 - amount2.
      it_amt-opnbl  = amount1 - amount2.
*      write : it_amt-opnbl.

      DELETE ADJACENT DUPLICATES FROM it_amt COMPARING KUNNR AMOUNT.
APPEND it_amt.
      CLEAR it_amt.
      CLEAR: amount1, amount2.
    ENDON.
  ENDLOOP.

****** Cleared Items
  SELECT    hkont
            kunnr
            dmbtr
            shkzg
            budat
            kostl
            FROM bsad
            INTO TABLE it_opn
            WHERE kunnr IN s_kunnr
*            AND   kostl IN s_kostl
            AND   bukrs EQ 'SAIL'
            AND   budat BETWEEN dat1 AND dat
            AND   gjahr EQ p_gjahr.

  SORT it_opn BY hkont budat KUNNR.

  LOOP AT it_opn INTO wa_opn WHERE budat LT s_budat-low.
    v_kunnr = wa_opn-kunnr.
    ON CHANGE OF wa_opn-KUNNR.
      LOOP AT it_opn INTO wa_opn WHERE kunnr = v_kunnr.
        IF wa_opn-shkzg = 'S'.
          amount1 = amount1 + wa_opn-dmbtr.
*          wa_opn-opnbl = wa_opn-opnbl + wa_opn-dmbtr.
        ELSEIF wa_opn-shkzg = 'H'.
          amount2 = amount2 + wa_opn-dmbtr.
*          wa_opn-clsbl = wa_opn-clsbl + wa_opn-dmbtr.
        ENDIF.
      ENDLOOP.

*      SELECT SINGLE txt50
*                FROM skat
*                INTO it_amt-txt50
*                WHERE saknr = wa_opn-hkont
*                AND   spras = 'EN'
*                AND   ktopl = '1000' .

      it_amt1-kunnr = wa_opn-kunnr.
      it_amt1-amount = amount1 - amount2.
      it_amt1-opnbl  = amount1 - amount2.
*      write : it_amt-opnbl.
      DELETE ADJACENT DUPLICATES FROM it_amt1 COMPARING KUNNR AMOUNT.
      APPEND it_amt1.

      CLEAR it_amt1.
      CLEAR: amount1, amount2.
    ENDON.


 ENDLOOP.
 *on change of wa_opn-kunnr.*
        *loop at it_amt.*
*kk = it_amt-kunnr.*
*loop at it_amt1 where kunnr = kk.*
*it_amt1-amount22 = it_amt-opnbl + it_amt1-opnbl.*
*endloop.*
*append it_amt1.*
*endloop.*
endon.


********************
*  sort it_amt by kunnr amount.
*  LOOP AT IT_AMT.
*  DELETE ADJACENT DUPLICATES FROM it_amt COMPARING all fields.
*  MODIFY it_amt.
*  collect it_amt.
*  ENDLOOP.

ENDFORM.                    " SEL_OPN_BAL

*&---------------------------------------------------------------------*
*&      Form  FINAL_DATA
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
FORM final_data.
  SELECT    hkont
            kunnr
            belnr
            shkzg
            dmbtr
            prctr
            kostl
            aufnr
            bukrs
            blart
            bldat
            kostl
            vbeln
            budat
            xblnr
            zuonr
            sgtxt
            augbl
            shkzg
            UMSKS
            FROM bsid INTO CORRESPONDING FIELDS OF TABLE itab
            WHERE kunnr IN s_kunnr
            AND   budat in s_budat
*            AND   kostl IN s_kostl
            AND   bukrs EQ 'SAIL'.
*            AND   UMSKZ = ' ' OR UMSKZ = 'A'.

*  SELECT    a~hkont
*            a~kunnr
*            a~belnr
*            a~shkzg
*            a~budat
*            a~dmbtr
*            a~prctr
*            a~kostl
*            a~aufnr
*            a~bukrs
*            a~blart
*            a~xblnr
*            a~bldat
*            a~kostl
*            a~vbeln
*            a~sgtxt
*            b~spart
*            INTO CORRESPONDING FIELDS OF TABLE itab
*            FROM bsid AS a
*            left outer join vbrk AS b on a~kunnr = s_kunnr
**            AND   a~budat = s_budat
**            AND   a~kostl IN s_kostl
*            AND   a~bukrs = 'SAIL'
*            AND   b~spart = p_spart.


 IF NOT itab[] IS INITIAL.
    SELECT zbukr vblnr chect zaldt
              FROM payr INTO TABLE it_payr
              FOR ALL ENTRIES IN itab
                WHERE zbukr = itab-bukrs
                AND   vblnr = itab-belnr.

*    SELECT bukrs belnr sgtxt hkont
*              FROM bseg INTO CORRESPONDING FIELDS OF TABLE it_bseg
*              FOR ALL ENTRIES IN itab
*                WHERE bukrs = itab-bukrs
*                AND   belnr = itab-belnr
*                AND   hkont = itab-hkont
*                AND   gjahr = p_gjahr.

SELECT kunnr name1
         FROM kna1 INTO TABLE it_ctxt
         FOR ALL ENTRIES IN it_bsid
            WHERE kunnr = it_bsid-kunnr.
*            AND   spras = 'EN'.
    sort itab by kunnr bldat opnbl.
    LOOP AT itab INTO wa_itab where kunnr in s_kunnr.
      tabix = 0.
      tabix = sy-tabix.

*     select single spart fkdat from vbrk into corresponding fields of wa_itab
*                                                             where vbeln = wa_itab-vbeln.
**                                                             and   spart = p_spart.
*     if wa_itab-spart = p_spart.

      IF wa_itab-shkzg = 'H'.
        wa_itab-credit = wa_itab-dmbtr.
*        MODIFY itab  INDEX sy-tabix FROM wa_itab TRANSPORTING credit.
      ELSEIF wa_itab-shkzg = 'S'.
        wa_itab-debit = wa_itab-dmbtr.
*        MODIFY itab  INDEX sy-tabix FROM wa_itab TRANSPORTING debit.
      ENDIF.

************* Opening Balance Calculation

**      on change of wa_itab-kunnr.
**        clear : m,n.
**        read table it_amt with key kunnr = wa_itab-kunnr.
**        wa_itab-opnbl = it_amt-opnbl.
***        MODIFY itab  INDEX sy-tabix FROM wa_itab TRANSPORTING opnbl.
**      endon.
**
**        n = n + 1.
**        wa_itab-count = n.
**        if n > 1.
**          m = n - 1.
**          read table itbl with key kunnr = wa_itab-kunnr count = m.
**          wa_itab-opnbl = itbl-clsbl.
**        endif.
**        wa_itab-clsbl = wa_itab-opnbl + wa_itab-debit - wa_itab-credit.

************ Opening Balance Calculation
**
**      SELECT SINGLE txt50 FROM skat INTO wa_itab-txt50
**                          WHERE saknr = wa_itab-hkont
**                                  AND   spras = 'EN'
**                                  AND   ktopl = '1000'.
*      IF sy-subrc EQ 0.
*        MODIFY itab  INDEX sy-tabix FROM wa_itab TRANSPORTING txt50.
*      ENDIF.

      SELECT SINGLE ltext INTO wa_itab-ltext1 FROM cskt
                            WHERE kostl = wa_itab-kostl.
      IF sy-subrc EQ 0.
        MODIFY itab  INDEX sy-tabix FROM wa_itab TRANSPORTING ltext1.
      ENDIF.

      READ TABLE it_payr WITH KEY vblnr = wa_itab-belnr.
      IF sy-subrc EQ 0.
        wa_itab-chect = it_payr-chect.
        wa_itab-zaldt = it_payr-zaldt.
        MODIFY  itab INDEX tabix FROM wa_itab TRANSPORTING chect zaldt.
      ENDIF.

      READ TABLE it_ctxt WITH KEY kunnr = wa_itab-kunnr.
        IF sy-subrc EQ 0.
          wa_itab-kunnr = it_ctxt-kunnr.
          wa_itab-name1 = it_ctxt-name1.
          MODIFY  itab INDEX tabix FROM wa_itab TRANSPORTING kunnr name1.
      ENDIF.

*      READ TABLE it_bseg WITH KEY belnr = wa_itab-belnr
*                                  hkont = wa_itab-hkont.
*      IF sy-subrc EQ 0.
*        wa_itab-sgtxt = it_bseg-sgtxt.
*        MODIFY  itab INDEX tabix FROM wa_itab TRANSPORTING sgtxt.
*      ENDIF.

*      SELECT SINGLE ktext INTO wa_itab-inttext FROM aufk
*                             WHERE aufnr = wa_itab-aufnr.
*      IF sy-subrc EQ 0.
*        MODIFY itab  INDEX sy-tabix FROM wa_itab TRANSPORTING aufnr.
*      ENDIF.

*      select single STBLG from bkpf into corresponding fields of wa_itab
*                                                                 where belnr = wa_itab-belnr
*                                                                 and   gjahr = p_gjahr.

      modify itab from wa_itab.
*      append wa_itab to itbl.
      CLEAR wa_itab.
*     else.
*     CLEAR wa_itab.
*     endif.
     ENDLOOP.

     loop at itab into wa_itab .
*      delete itab where debit = 0 and credit = 0.
*      modify itab from wa_itab.
**        collect wa_itab into itab_final.
        append wa_itab to itab_final.
     endloop.
  ENDIF.

***************************************************
  SELECT    hkont
            kunnr
            belnr
            shkzg
            dmbtr
            prctr
            kostl
            aufnr
            bukrs
            blart
            bldat
            kostl
            vbeln
            budat
            xblnr
            sgtxt
            zuonr
            augbl
            shkzg
            FROM bsad INTO CORRESPONDING FIELDS OF TABLE ctab
            WHERE kunnr IN s_kunnr
            AND   budat in s_budat
*            AND   kostl IN s_kostl
            AND   bukrs EQ 'SAIL'
            AND   UMSKZ = ' ' OR UMSKZ = 'A'.

 IF NOT ctab[] IS INITIAL.
    SELECT zbukr vblnr chect zaldt
              FROM payr INTO TABLE it_payr
              FOR ALL ENTRIES IN ctab
                WHERE zbukr = ctab-bukrs
                AND   vblnr = ctab-belnr.

SELECT kunnr name1
         FROM kna1 INTO TABLE it_ctxt
         FOR ALL ENTRIES IN it_bsad
            WHERE kunnr = it_bsad-kunnr.
*            AND   spras = 'EN'.
    sort ctab by kunnr budat.
    LOOP AT ctab INTO wa_ctab.
*      tabix = 0.
      tabix = sy-tabix.

**     select single spart fkdat from vbrk into corresponding fields of wa_ctab
**                                                             where vbeln = wa_ctab-vbeln.
**                                                             and   spart = p_spart.
*     if wa_ctab-spart = p_spart.

      IF wa_ctab-shkzg = 'H'.
        wa_ctab-credit = wa_ctab-dmbtr.
*        MODIFY ctab  INDEX sy-tabix FROM wa_ctab TRANSPORTING credit.
      ELSEIF wa_ctab-shkzg = 'S'.
        wa_ctab-debit = wa_ctab-dmbtr.
*        MODIFY ctab  INDEX sy-tabix FROM wa_ctab TRANSPORTING debit.
      ENDIF.



      SELECT SINGLE ltext INTO wa_ctab-ltext1 FROM cskt
                            WHERE kostl = wa_ctab-kostl.
      IF sy-subrc EQ 0.
        MODIFY ctab  INDEX sy-tabix FROM wa_ctab TRANSPORTING ltext1.
      ENDIF.

      READ TABLE it_payr WITH KEY vblnr = wa_ctab-belnr.
      IF sy-subrc EQ 0.
        wa_ctab-chect = it_payr-chect.
        wa_ctab-zaldt = it_payr-zaldt.
        MODIFY  ctab INDEX tabix FROM wa_ctab TRANSPORTING chect zaldt.
      ENDIF.

      READ TABLE it_ctxt WITH KEY kunnr = wa_ctab-kunnr.
        IF sy-subrc EQ 0.
          wa_ctab-kunnr = it_ctxt-kunnr.
          wa_ctab-name1 = it_ctxt-name1.
          MODIFY  ctab INDEX tabix FROM wa_ctab TRANSPORTING kunnr name1.
      ENDIF.


      modify ctab from wa_ctab.
*      append wa_ctab to itbl.
      CLEAR wa_ctab.
*     else.
*     CLEAR wa_ctab.
*     endif.
     ENDLOOP.

     loop at ctab into wa_ctab.
*      delete ctab where debit = 0 and credit = 0.
*      modify ctab from wa_ctab.
      append wa_ctab to itab_final.
**       collect wa_ctab into itab_final.
     endloop.

  ENDIF.

sort itab_final by kunnr budat.
loop at itab_final.
  itab_write-kunnr = itab_final-kunnr.
  itab_write-belnr = itab_final-belnr.
  itab_write-blart = itab_final-blart.
  itab_write-credit = itab_final-credit.
  itab_write-debit = itab_final-debit.
  itab_write-opnbl = itab_final-opnbl.
  itab_write-clsbl = itab_final-clsbl.
  itab_write-umsks = itab_final-umsks.

  collect itab_write.
endloop.

*if merk  = 'X'.
loop at itab_write where umsks <> 'G'.
      on change of itab_write-kunnr.
        clear : m,n.


*write : / amount22.

        read table it_amt with key kunnr = itab_write-kunnr.
        itab_write-opnbl = it_amt1-amount22.

*        MODIFY itab  INDEX sy-tabix FROM wa_itab TRANSPORTING opnbl.
      endon.


*      on change of itab_write-belnr.



        n = n + 1.
        itab_write-count = n.
        if n > 1.
          m = n - 1.
          read table itbl with key kunnr = itab_write-kunnr count = m.
          itab_write-opnbl = itbl-clsbl.
        endif.

*        write : / itab_write-opnbl.

        itab_write-clsbl = itab_write-opnbl + itab_write-debit - itab_write-credit.

        SELECT single
            shkzg
            xblnr
            sgtxt
            zuonr
            augbl
            shkzg
            budat
            bldat
            vbeln
            umsks
            FROM bsid INTO CORRESPONDING FIELDS OF itab_write where belnr = itab_write-belnr.

        IF SY-SUBRC <> 0.
          SELECT single
            shkzg
            xblnr
            sgtxt
            zuonr
            augbl
            shkzg
            budat
            bldat
            vbeln
            FROM bsad INTO CORRESPONDING FIELDS OF itab_write where belnr = itab_write-belnr.

        ENDIF.

        select single spart
                      fkdat from vbrk into corresponding fields of itab_write where vbeln = itab_write-vbeln.

   append itab_write to itbl.
*         endon.

   modify itab_write.
*    collect itab_write.
endloop.


ENDFORM.                    " FINAL_DATA

*&---------------------------------------------------------------------*
*&      Form  GET_FINAL
*&---------------------------------------------------------------------*

FORM get_final .

  LOOP AT itab INTO wa_itab.
    READ TABLE it_amt WITH KEY kunnr = wa_itab-kunnr.
    IF sy-subrc NE 0.
      it_amt-kunnr = wa_itab-kunnr.
      it_amt-name1 = wa_itab-name1.
      it_amt-amount = 0.
      APPEND it_amt.
    ENDIF.
  ENDLOOP.
ENDFORM.                    " GET_FINAL

*&---------------------------------------------------------------------*
*&      Form  DISPLAY
*&---------------------------------------------------------------------*
FORM display .
  SORT it_amt BY hkont KUNNR.

  LOOP AT it_amt.
*    SKIP 1.
*    WRITE: 60 'PAGE NO-', syst-pagno.
    SKIP 2.

    FORMAT INTENSIFIED ON.
**********company address  header****************
    WRITE: 50 text-005 COLOR 2,
          /55 text-006,
          /50 text-007.
*    ULINE.
    WRITE : /(15) 'REPORT FROM ',
              s_budat-low, 'TO' , s_budat-high.
*    ULINE.
*    SKIP 2.
*    ULINE.
*    WRITE:/   sy-vline, (23) 'CUSTOMER',
*              sy-vline, (11) it_amt-kunnr, (44) it_amt-name1,
*              sy-vline, (23) 'OPEN BALANCE',
*              sy-vline, (10) it_amt-amount color 3.
*              sy-vline, (1) '',
*              sy-vline, (40) ''.
    WRITE:/23 'CUSTOMER', it_amt-kunnr, (44) it_amt-name1,
              'OPEN BALANCE', it_amt-amount color 3.

*    ULINE.
*    " wa_itab-hkont,  wa_itab-txt50,
*    WRITE :/ sy-vline, (10) 'COST CENTER' ,
*             sy-vline, (10) 'DOC TYPE' ,
*             sy-vline, (10) 'DOC NUM' ,
*             sy-vline, (10) 'POST DAT' ,
*             sy-vline, (30) 'NARRATION' ,
*             sy-vline, (10) 'REF NO' ,
*             sy-vline, (10) 'REF DATE' ,
*             sy-vline, (10) 'CHECK NO' ,
*             sy-vline, (10) 'CHECK DATE' ,
*             sy-vline, (15) 'DEBIT' ,
*             sy-vline, (15) 'CREIDT'.
*             sy-vline, (1) ''.
*    ULINE.

    WRITE :/5 'COST CENTER' , 20 'DOC TYPE' , 30 'DOC NUM' , 40 'POST DAT' ,
             50 'NARRATION' ,
             80 'REF NO' ,
             90 'REF DATE' ,
             100  'CHECK NO' ,
             121  'CHECK DATE' ,
             135  'DEBIT' ,
             155  'CREIDT'.


*    SORT itab BY budat kunnr.
    LOOP AT itab INTO wa_itab WHERE kunnr = it_amt-kunnr and budat in s_budat.
      amount1 = amount1 + wa_itab-debit.
      amount2 = amount2 + wa_itab-credit.

*      WRITE : / sy-vline, (10) wa_itab-kostl,
*                sy-vline, (10) wa_itab-blart,
*                sy-vline, (10) wa_itab-belnr,
*                sy-vline, (10) wa_itab-budat,
*                sy-vline, (30) wa_itab-sgtxt,
*                sy-vline, (10) wa_itab-xblnr,
*                sy-vline, (10) wa_itab-bldat,
*                sy-vline, (10) wa_itab-chect,
*                sy-vline, (10) wa_itab-zaldt,
*                sy-vline, (15) wa_itab-debit COLOR 3,
*                sy-vline, (15) wa_itab-credit COLOR 3,
*                sy-vline, (1) ''.

      WRITE : /5 wa_itab-kostl,
               20 wa_itab-blart,
               30 wa_itab-belnr,
               40 wa_itab-budat,
               50 wa_itab-sgtxt,
               80 wa_itab-xblnr,
               90 wa_itab-bldat,
               100 wa_itab-chect,
               121 wa_itab-zaldt,
               135 wa_itab-debit COLOR 3,
               155 wa_itab-credit COLOR 3.
    ENDLOOP.
    clamt = ( amount1 - amount2 ) + it_amt-amount.
    ULINE.
    WRITE: / sy-vline,(10) 'TOTAL' ,
           sy-vline, (121) '' ,
           sy-vline, (15) amount1 COLOR 3,
           sy-vline, (15) amount2  COLOR 3,
           sy-vline, (1) ''.
    ULINE.
    WRITE: /  sy-vline, (23) 'CLOSING BALANCE',
              sy-vline, (15) clamt  COLOR 3,
              sy-vline, (1) ''.
    ULINE.
    CLEAR : amount1,amount2.
*    NEW-PAGE.
  ENDLOOP.

ENDFORM.                    " DISPLAY

FORM display_data.

PERFORM build_fieldcatalog.
PERFORM disp_alv.

ENDFORM.                    " display_data

*&---------------------------------------------------------------------*
*&      Form  BUILD_FIELDCATALOG
*&---------------------------------------------------------------------*

FORM build_fieldcatalog .

CLEAR: fieldcatalog,fieldcatalog[].

fieldcatalog-fieldname = 'KUNNR'.
*fieldcatalog-tabname = 'IT_FINAL'.
fieldcatalog-seltext_s = 'Customer Code'.
fieldcatalog-key = 'X'.
APPEND fieldcatalog TO fieldcatalog.
CLEAR fieldcatalog.

fieldcatalog-fieldname = 'NAME1'.
fieldcatalog-seltext_m = 'Customer Name'.
*fieldcatalog-key = 'X'.
*fieldcatalog-no_zero = 'X'.
APPEND fieldcatalog TO fieldcatalog.
CLEAR fieldcatalog.

fieldcatalog-fieldname = 'BELNR'.
fieldcatalog-seltext_m = 'Acc.Doc.No'.
APPEND fieldcatalog TO fieldcatalog.
CLEAR fieldcatalog.

fieldcatalog-fieldname = 'BLART'.
fieldcatalog-seltext_m = 'Doc. Type'.
APPEND fieldcatalog TO fieldcatalog.
CLEAR fieldcatalog.

fieldcatalog-fieldname = 'BUDAT'.
fieldcatalog-seltext_m = 'Posting Date'.
APPEND fieldcatalog TO fieldcatalog.
CLEAR fieldcatalog.

fieldcatalog-fieldname = 'AUGBL'.
fieldcatalog-seltext_m = 'Clearing Doc.'.
APPEND fieldcatalog TO fieldcatalog.
CLEAR fieldcatalog.

fieldcatalog-fieldname = 'ZUONR'.
fieldcatalog-seltext_m = 'Assignment'.
APPEND fieldcatalog TO fieldcatalog.
CLEAR fieldcatalog.

fieldcatalog-fieldname = 'SGTXT'.
fieldcatalog-seltext_m = 'Long Text'.
APPEND fieldcatalog TO fieldcatalog.
CLEAR fieldcatalog.

fieldcatalog-fieldname = 'XBLNR'.
fieldcatalog-seltext_m = 'Reference'.
APPEND fieldcatalog TO fieldcatalog.
CLEAR fieldcatalog.

fieldcatalog-fieldname = 'VBELN'.
fieldcatalog-seltext_m = 'Invoice No'.
APPEND fieldcatalog TO fieldcatalog.
CLEAR fieldcatalog.

fieldcatalog-fieldname = 'FKDAT'.
fieldcatalog-seltext_m = 'Invoice Date'.
APPEND fieldcatalog TO fieldcatalog.
CLEAR fieldcatalog.

*fieldcatalog-fieldname = 'ZALDT'.
*fieldcatalog-seltext_m = 'AMT'.
*APPEND fieldcatalog TO fieldcatalog.
*CLEAR fieldcatalog.

fieldcatalog-fieldname = 'OPNBL'.
fieldcatalog-seltext_m = 'Opening Balance'.
APPEND fieldcatalog TO fieldcatalog.
CLEAR fieldcatalog.

fieldcatalog-fieldname = 'DEBIT'.
fieldcatalog-seltext_m = 'Debit'.
APPEND fieldcatalog TO fieldcatalog.
CLEAR fieldcatalog.

fieldcatalog-fieldname = 'CREDIT'.
fieldcatalog-seltext_m = 'Credit'.
APPEND fieldcatalog TO fieldcatalog.
CLEAR fieldcatalog.

fieldcatalog-fieldname = 'CLSBL'.
fieldcatalog-seltext_m = 'Closing balance'.
APPEND fieldcatalog TO fieldcatalog.
CLEAR fieldcatalog.

ENDFORM.                    " BUILD_FIELDCATALOG

*&---------------------------------------------------------------------*
*&      Form  disp_alv
*&---------------------------------------------------------------------*

FORM disp_alv .
layout-colwidth_optimize = 'X'.

DATA: w_repid TYPE sy-repid.
w_repid = sy-repid.

*----------------------------------------------------------------------
*----------------------------------------------------------------------

CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
EXPORTING
    i_callback_program = w_repid
    is_layout = layout
    it_fieldcat = fieldcatalog[]
    i_save = 'A'
    is_variant = x_save
TABLES
  t_outtab = itab_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.                    " disp_alv


FORM WRITE_DATA.

*loop at itab_final.
*        select single
*                      sgtxt
*                      zuonr
*                      augbl from bseg into corresponding fields of itab_final where belnr = itab_final-belnr and shkzg = 'H'.
*        select single xblnr
*                      budat from bkpf into corresponding fields of itab_final where belnr = itab_final-belnr.
*
*        select single spart
*                      fkdat from vbrk into corresponding fields of itab_final where vbeln = itab_final-vbeln.
*modify itab_final.
*endloop.
clear : itab_write.
  LOOP AT ITAB_write where kunnr in s_kunnr and budat in s_budat.
*  where kunnr between s_kunnr-low and s_kunnr-high.
   ON CHANGE OF itab_write-kunnr.
   new-page.
*     read table ctab into wa_ctab with key kunnr = itab_write-kunnr.
      select single name1 from kna1 into itab_write-name1 where kunnr = itab_write-kunnr.
*        itab_write-name1 = wa_ctab-name1.
        write : / sy-uline.
*        skip 2.
        WRITE :/05 ITAB_write-KUNNR color 1, ITAB_write-NAME1 color 1, 'Period from', s_budat-low color 1, 'to', s_budat-high color 1.
        write :/ sy-uline.

*        write :/05 'Acc.Doc.NO' color 3, 17 'Doc.Type' color 3 , 26 'Posting Date' color 3, 40 'Document Date' color 3,
*                54 'Clearing Doc' color 3,   67 'Opening Balance' color 3, 89 'Debit Amount' color 3, 107 'Credit Amount' color 3,
*                125 'Closing Balance' color 3, 144 'Invoice No.' color 3, 157 'Inv.Date' color 3, 169 'Reference' color 3,
*                187 'Assigment' color 3, 207 'C/D Indicator' color 3, 222 'Long Text' color 3.
   ENDON.

     write : /05 itab_write-belnr, 17 itab_write-blart, 26 itab_write-budat, 40 itab_write-bldat, 55 itab_write-augbl,
              67 itab_write-opnbl, 86 itab_write-debit, 105 itab_write-credit, 125 itab_write-clsbl, 144 itab_write-vbeln,
              157 itab_write-fkdat, 169 itab_write-xblnr, 187 itab_write-zuonr, 207 itab_write-shkzg, 222 itab_write-sgtxt .
  ENDLOOP.
  write : / sy-uline.

ENDFORM.

Code Formatted by: Alvaro Tejada Galindo on Apr 25, 2008 4:46 PM

2 REPLIES 2
Read only

rahul_kamble2
Participant
0 Likes
487

Hi Dheeraj,

try following control statement

AT END of wa_opn-kunnr.

<REMOVED BY MODERATOR>

Regards,

Rahul

Edited by: Alvaro Tejada Galindo on Apr 25, 2008 1:05 PM

Read only

Former Member
0 Likes
487

Hi,

You have defined kunnr as 2nd field in table wa_opn and you are use command 'ON CHANGE OF KUNNR'.. this will be true even if hkont is changed and customer is the same.

Please try putting kunnr as the first field while defining table and then execute the program.

If this is not successful, use AT NEW KUNNR command but always kunnr should be first field unless you wanted to do same procedure even if hkont changes.

<REMOVED BY MODERATOR>

Thanks,

Ags.

DATA : BEGIN OF wa_opn,

hkont LIKE bsid-hkont, " General Ledger Account

kunnr like bsid-kunnr, " Customer Number 1

txt50 LIKE skat-txt50, " GL A/C TEXT

dmbtr LIKE bsid-dmbtr, " Amount

shkzg LIKE bsid-shkzg, " Debit/Credit Indication

budat LIKE bsid-budat, " Posting date

kostl LIKE bsid-kostl, " Cost center

opnbl LIKE bsid-dmbtr, " Opening Balance Amount

Clsbl LIKE bsid-dmbtr, " Closing balnce Amount

UMSKS like bsid-UMSKS,

END OF wa_opn.

Edited by: Alvaro Tejada Galindo on Apr 25, 2008 4:48 PM