cancel
Showing results for 
Search instead for 
Did you mean: 
Read only

SAMPLE REPORT PROGRAM

Former Member
0 Likes
9,681

can anybody send me one sample program that is using all FI tables..

Regards,

pandu

View Entire Topic
Former Member
0 Likes

Hi

Check the sample reports here it has used max number of FI tables

<u><b>Main Report</b></u>

REPORT Zj_1iewt_cert  MESSAGE-ID 8i NO STANDARD PAGE HEADING.
*--------------------------------------------------------------
*
*                 SELECTION SCREEN
*
*--------------------------------------------------------------
* Data Include
INCLUDE zj_1iewt_cert_top.
*
SELECTION-SCREEN BEGIN OF BLOCK 1 WITH FRAME TITLE text-001.
PARAMETERS :      zbukrs LIKE bseg-bukrs ,
                  zyear  LIKE bseg-gjahr .
SELECT-OPTIONS :  zsecco FOR  seccode-seccode . " Note 604606
PARAMETERS :      zsect  LIKE j_1iewtnumgr-qscod .
SELECTION-SCREEN END OF BLOCK 1.
SKIP.
SELECTION-SCREEN BEGIN OF BLOCK 2 WITH FRAME TITLE text-002 .
SELECT-OPTIONS: zpdate FOR bkpf-budat ,
                ZDOCTYPE FOR BKPF-BLART,
                zchall FOR j_1iewtchln-j_1iextchln ,
                zchdt FOR  j_1iewtchln-j_1iextchdt ,
                zvendor FOR lfb1-lifnr.
SELECTION-SCREEN END  OF BLOCK 2 .
SKIP.
SELECTION-SCREEN BEGIN OF BLOCK 3 WITH FRAME TITLE text-003.
PARAMETERS : zcertdt     LIKE with_item-j_1icertdt ,
             zfname(30)  TYPE c ,    " signatory
             zfdsg(35)   TYPE c ,    " Designation
             zplace(20)  TYPE c .    " Place of Printing
SELECTION-SCREEN END OF BLOCK 3.

*** Added on 05June2007

SELECTION-SCREEN BEGIN OF BLOCK 4 WITH FRAME TITLE text-004.
PARAMETERS : zq1(15) type c,
             zq2(15) type c,
             zq3(15) type c,
             zq4(15) type c.
SELECTION-SCREEN END OF BLOCK 4.

*** End of addition
* Dummy Variables declarations
DATA: zcertno LIKE j_1iewt_certif-ctnumber,
      zcerdt LIKE sy-datum.
*--------------------------------------------------------------
*                 SELECTION SCREEN   VALIDATIONS
*--------------------------------------------------------------
AT SELECTION-SCREEN.
  PERFORM country_check.
  PERFORM select_form USING zsecco-low CHANGING  layout. " Note 604606
  LOOP AT zsecco .                                       " Note 604606
    AUTHORITY-CHECK OBJECT 'J_1IEWTCER'
       ID 'BUKRS' FIELD zbukrs
       ID 'BUPLA' FIELD zsecco-low                       " Note 604606
       ID 'ACTVT' FIELD '01'.
    IF sy-subrc NE 0.
      MESSAGE e000(8i) WITH
      'No authorization for current action'.
    ENDIF.
  ENDLOOP.

AT SELECTION-SCREEN ON zbukrs.
  PERFORM ewt_active.

AT SELECTION-SCREEN ON zsecco.                           " Note 604606
  PERFORM check_bupla.
  PERFORM check_secco.                                   " Note 604606

AT SELECTION-SCREEN ON zsect.
  PERFORM check_section.

AT SELECTION-SCREEN ON  zchdt.
  PERFORM check_challan.

AT SELECTION-SCREEN ON zvendor.
  PERFORM check_vendor.

AT SELECTION-SCREEN ON zcertdt.
  PERFORM check_dates.

*--------------------------------------------------------------
*                 START OF SELECTION
*--------------------------------------------------------------
START-OF-SELECTION.
* Select documents
*** Reverting note for testing
  PERFORM select_bkpf.
*** Reverting note for testing
* Section
  PERFORM select_section.
* Fill withholding tax data
  PERFORM fill_withtab.
* Fill invtab and paytab and Modify signs and values in invtab
* for credit memos and invoices.
  PERFORM modify_invtab.
* Process credit memos
  PERFORM process_credit_memos.
* Process downpayments
  PERFORM process_dp.
* Fill all records to one table
  PERFORM fill_printtab.
* Select all vendors
  PERFORM select_vendors.
*  PERFORM SELECT_JV.
* Print the certificate
  PERFORM print_routines.

END-OF-SELECTION.
*--------------------------------------------------------------
*                FORM ROUTINES
*--------------------------------------------------------------
  INCLUDE zj_1iewt_cert_f01.

<b><u>INclude Report</u></b>

*&---------------------------------------------------------------------*
*&  Include           ZJ_1IEWT_CERT_F01                                *
*&---------------------------------------------------------------------*
*&---------------------------------------------------------------------*
*&      Form  COUNTRY_CHECK
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM country_check.

  CALL FUNCTION 'J_1BSA_COMPONENT_ACTIVE'
    EXPORTING
      bukrs                = zbukrs
      component            = 'IN'
    EXCEPTIONS
      component_not_active = 1
      OTHERS               = 2.
  IF sy-subrc <> 0.
    MESSAGE e712.
  ENDIF.

ENDFORM.                               " COUNTRY_CHECK

*&---------------------------------------------------------------------*
*&      Form  EWT_ACTIVE
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM ewt_active.

  SELECT SINGLE * FROM t001
       WHERE bukrs = zbukrs.
  IF sy-subrc NE 0.
    MESSAGE e128 .
  ELSE.
    CALL FUNCTION 'FI_CHECK_EXTENDED_WT'
      EXPORTING
        i_bukrs              = zbukrs
      EXCEPTIONS
        component_not_active = 1
        not_found            = 2
        OTHERS               = 3.

    IF sy-subrc <> 0.
      MESSAGE e714 WITH zbukrs.
    ENDIF.
  ENDIF.

ENDFORM.                               " EWT_ACTIVE

*&---------------------------------------------------------------------*
*&      Form  CHECK_SECTION
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM check_section.

  SELECT SINGLE * FROM t059o
             WHERE land1    = 'IN'
               AND wt_qscod = zsect.
  IF sy-subrc <> 0.
    MESSAGE e703 WITH zsect.
  ENDIF .

ENDFORM.                               " CHECK_SECTION

*&---------------------------------------------------------------------*
*&      Form  CHECK_BUPLA
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM check_bupla.

  CLEAR j_1bbranch.
  SELECT COUNT( * ) FROM j_1bbranch
             WHERE bukrs  = zbukrs
               AND branch IN zsecco.                       " Note 604606
  IF sy-subrc <> 0.
    MESSAGE e707.
  ENDIF .

ENDFORM.                               " CHECK_BUPLA
*&---------------------------------------------------------------------*
*&      Form  CHECK_VENDOR
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM check_vendor.

  SELECT COUNT( * ) FROM lfb1
      WHERE lifnr IN zvendor
        AND bukrs  = zbukrs.
  IF sy-subrc <> 0.
    MESSAGE e396 WITH zvendor+3(10).
  ENDIF.

ENDFORM.                               " CHECK_VENDOR
*&---------------------------------------------------------------------*
*&      Form  CHECK_CHALLAN
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM check_challan.
  CLEAR challantab[].
  IF NOT zchall IS INITIAL.
    SELECT * FROM j_1iewtchln INTO TABLE challantab
                    WHERE bukrs      = zbukrs
                    AND j_1iextchln IN zchall
                    AND j_1iextchdt IN zchdt.
  ELSE.
    SELECT * FROM j_1iewtchln INTO TABLE challantab
                    WHERE bukrs      = zbukrs
                    AND j_1iextchdt IN zchdt.
  ENDIF.

  DELETE challantab WHERE j_1iextchln IS INITIAL.
* Check for entry in itab
  CLEAR lin.
  DESCRIBE TABLE challantab LINES lin.
  IF lin = 0.
    MESSAGE e729.
  ENDIF.

ENDFORM.                               " CHECK_CHALLAN

*&---------------------------------------------------------------------*
*&      Form  CHECK_DATES
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM check_dates.

  IF zchdt-low GT zcertdt.
    MESSAGE e754.
  ELSEIF zchdt-high GT zcertdt.
    MESSAGE e754.
  ENDIF.

ENDFORM.                               " CHECK_DATES

*---------------------------------------------------------------------*
*       FORM select_bkpf                                              *
*---------------------------------------------------------------------*
*       ........                                                      *
*---------------------------------------------------------------------*
FORM select_bkpf.

  SELECT * FROM  bkpf INTO TABLE bkpftab
         WHERE  bukrs  = zbukrs
         AND    gjahr  = zyear
         AND    bstat  IN (' ', 'A', 'B', 'D', 'M', 'S', 'V', 'W', 'Z')
         AND    budat IN zpdate " Note 804529
         AND    blart IN zdoctype.


******** Delete Reversed Documents ***********
*  LOOP AT bkpftab WHERE NOT stblg IS INITIAL.
*    bkpftab-rev_ind = 'X'.
*    MODIFY bkpftab TRANSPORTING rev_ind WHERE
*              belnr = bkpftab-stblg OR
*              belnr = bkpftab-belnr.
*  ENDLOOP.
*  DELETE bkpftab WHERE rev_ind = 'X'.

  DELETE bkpftab WHERE NOT stblg IS INITIAL.

ENDFORM.                    "select_bkpf

*---------------------------------------------------------------------*
*       FORM select_section                                           *
*---------------------------------------------------------------------*
*       ........                                                      *
*---------------------------------------------------------------------*
FORM select_section.

* Select all sections into itab.
  SELECT * FROM  t059z INTO CORRESPONDING FIELDS OF taxtab
           WHERE  land1  = 'IN'
           AND    qscod  = zsect.
    SELECT SINGLE * FROM t059p
               WHERE land1  = taxtab-land1
                 AND  witht = taxtab-witht.
    IF t059p-wt_postm = 1.
      taxtab-method = 'I'.
    ELSE.
      taxtab-method = 'P'.
    ENDIF.
    APPEND taxtab.
  ENDSELECT.

ENDFORM.                    "select_section

*---------------------------------------------------------------------*
*       FORM fill_withtab                                             *
*---------------------------------------------------------------------*
*       ........                                                      *
*---------------------------------------------------------------------*
FORM fill_withtab.
  DATA : v_gjahr(4) TYPE n.
* fill table for JV documents.

  SELECT * FROM with_item INTO TABLE jvtab
        WHERE  bukrs  = zbukrs
         AND   gjahr  = zyear
         AND   j_1iewtrec = 'B'.
*** Reverting note for testing

* -------- Start of note 887656
**OSS 891565-START
*  callback_wa-ldbnode     = 'BSIK'.
*  callback_wa-get         = 'X'.
**  callback_wa-get_late    = 'X'.
*  callback_wa-cb_prog     = sy-repid.
*  callback_wa-cb_form     = 'CALLBACK_BSIK'.
*  APPEND callback_wa TO callback.
**OSS 891565-end
*
*  callback_wa-ldbnode     = 'BKPF'.
*  callback_wa-get         = 'X'.
**  callback_wa-get_late    = 'X'.
*  callback_wa-cb_prog     = sy-repid.
*  callback_wa-cb_form     = 'CALLBACK_BKPF'.
*  APPEND callback_wa TO callback.
*
*  callback_wa-ldbnode     = 'BSEG'.
*  callback_wa-get         = 'X'.
**  callback_wa-get_late    = 'X'.
*  callback_wa-cb_prog     = sy-repid.
*  callback_wa-cb_form     = 'CALLBACK_BSEG'.
*  APPEND callback_wa TO callback.
*
*  callback_wa-ldbnode     = 'WITH_ITEM'.
*  callback_wa-get         = 'X'.
**  callback_wa-get_late    = 'X'.
*  callback_wa-cb_prog     = sy-repid.
*  callback_wa-cb_form     = 'CALLBACK_WITH'.
*  APPEND callback_wa TO callback.
*
**OSS 891565-START
*  seltab_wa-selname = 'KD_AUGDT'.
*  seltab_wa-kind = 'S'.
*  seltab_wa-sign = 'I'.
*  seltab_wa-option = 'EQ'.
*  CLEAR seltab_wa-low.
*  APPEND seltab_wa TO seltab.
*
*  seltab_wa-selname = 'KD_AUGDT'.
*  seltab_wa-kind = 'S'.
*  seltab_wa-sign = 'I'.
*  seltab_wa-option = 'NE'.
*  CLEAR: seltab_wa-low, seltab_wa-high.
*  APPEND seltab_wa TO seltab.
*
**OSS 891565-end
*  seltab_wa-kind = 'S'.
*  seltab_wa-selname = 'KD_BUKRS'.
*  seltab_wa-option = 'EQ'.
*  seltab_wa-sign = 'I'.
*  seltab_wa-low = zbukrs.
*  APPEND seltab_wa TO seltab.
*
*  CLEAR seltab_wa.
*  seltab_wa-kind = 'S'.
*  seltab_wa-selname = 'KD_GJAHR'.
*  seltab_wa-option = 'EQ'.
*  seltab_wa-sign = 'I'.
*  seltab_wa-low = zyear.
*  APPEND seltab_wa TO seltab.
*
*  CLEAR seltab_wa.
*  seltab_wa-kind = 'S'.
*  seltab_wa-selname = 'KD_BUDAT'.
*  LOOP AT zpdate.
*    MOVE-CORRESPONDING zpdate TO seltab_wa.
*    APPEND seltab_wa TO seltab.
*  ENDLOOP.
*
*  CLEAR seltab_wa.
*  seltab_wa-kind = 'S'.
*  seltab_wa-selname = 'KD_LIFNR'.
*  LOOP AT zvendor.
*    MOVE-CORRESPONDING zvendor TO seltab_wa.
*    APPEND seltab_wa TO seltab.
*  ENDLOOP.
*
*  CLEAR seltab_wa.
*  seltab_wa-kind = 'S'.
*  seltab_wa-selname = 'XBR_BLAR'.
*  LOOP AT zdoctype.
*    MOVE-CORRESPONDING zdoctype TO seltab_wa.
*    APPEND seltab_wa TO seltab.
*  ENDLOOP.
*
*  CALL FUNCTION 'LDB_PROCESS'
*       EXPORTING
*            ldbname                     = 'KDF'
*            variant                     = ' '
**          EXPRESSIONS                 = TEXPR
**          FIELD_SELECTION             = FSEL
*       TABLES
*            callback                    = callback
*            selections                  = seltab
*       EXCEPTIONS
*            ldb_not_reentrant           = 1
*            ldb_incorrect               = 2
*            ldb_already_running         = 3
*            ldb_error                   = 4
*            ldb_selections_error        = 5
*            ldb_selections_not_accepted = 6
*            variant_not_existent        = 7
*            variant_obsolete            = 8
*            variant_error               = 9
*            free_selections_error       = 10
*            callback_no_event           = 11
*            callback_node_duplicate     = 12
*            OTHERS                      = 13.
*
*  IF sy-subrc <> 0.
*    WRITE: 'Exception with SY-SUBRC', sy-subrc.
*  ENDIF.

* -------- End of note 887656

 LOOP AT bkpftab.
    SELECT        * FROM  with_item
           WHERE  bukrs        = bkpftab-bukrs
           AND    belnr        = bkpftab-belnr
           AND    gjahr        = bkpftab-gjahr
           AND    wt_stat      = ' '
           AND    koart        = 'K'
           AND    wt_acco      IN zvendor
           AND    ctnumber     =  ' '
           AND    wt_opowtpd   NE 'X'
           AND    wt_gruwtpd   NE 'X'
           AND j_1iewtrec      NE 'B'.


* Validate for BUPLA here itself.
      READ TABLE taxtab WITH KEY witht = with_item-witht
                             wt_withcd = with_item-wt_withcd.
      CHECK sy-subrc = 0 .

      CLEAR bsas.
      SELECT SINGLE augbl augdt FROM bsas INTO (bsas-augbl,bsas-augdt)
                               WHERE bukrs = with_item-bukrs
                               AND   hkont = with_item-hkont
                               AND   gjahr = with_item-gjahr
                               AND   belnr = with_item-belnr
                               AND   buzei = with_item-j_1ibuzei.
      CHECK sy-subrc = 0 .
      SELECT SINGLE gjahr FROM bkpf INTO v_gjahr
                                    WHERE bukrs = with_item-bukrs
                                    AND   belnr = bsas-augbl
                                    AND   budat = bsas-augdt.
*      CALL FUNCTION 'J_1I6_DETERMINE_EXC_YEAR'
*        EXPORTING
*          I_BUKRS      = with_item-bukrs
*          I_BUDAT      = bsas-augdt
*        IMPORTING
*          EXCISE_YEAR  = v_gjahr
*        EXCEPTIONS
*          MISS_COMPANY = 1
*          OTHERS       = 2.

      READ TABLE challantab WITH KEY   bukrs  = with_item-bukrs
                                       belnr  = bsas-augbl
                                       gjahr  = v_gjahr.


      CHECK sy-subrc = 0 .

* Filter records not belonging to this BUPLA/SECCO         " Note 604606
      SELECT SINGLE secco  FROM bseg INTO bseg-secco
                         WHERE  bukrs        = bkpftab-bukrs
                         AND    belnr        = bkpftab-belnr
                         AND    gjahr        = bkpftab-gjahr
                         AND    buzei        = with_item-j_1ibuzei
                         AND    ktosl        = 'WIT'.
      IF sy-subrc NE 0 OR NOT bseg-secco IN zsecco.
        SELECT SINGLE bupla  FROM bseg INTO bseg-bupla
                           WHERE  bukrs        = bkpftab-bukrs
                           AND    belnr        = bkpftab-belnr
                           AND    gjahr        = bkpftab-gjahr
                           AND    buzei        = with_item-j_1ibuzei
                           AND    ktosl        = 'WIT'.
        CHECK sy-subrc = 0 AND bseg-bupla IN zsecco.
      ENDIF.
* Move data to withtab.
      MOVE-CORRESPONDING with_item TO withtab.
      MOVE: bkpftab-budat          TO withtab-budat,
            bseg-bupla             TO withtab-bupla,
            bseg-secco             TO withtab-secco,
            challantab-j_1iextchln TO withtab-j_1iextchln,
            challantab-j_1iextchdt TO withtab-j_1iextchdt,
            challantab-bankl       TO withtab-bankl,
            taxtab-method          TO withtab-method.

*      to adjust for JV documents where loss is recognized
      READ TABLE jvtab WITH KEY wt_withcd = withtab-wt_withcd
                                augbl = withtab-belnr.
      IF sy-subrc = 0.
        withtab-wt_qbshh = withtab-wt_qbshh - jvtab-wt_qbshh.
        withtab-wt_qbshb = withtab-wt_qbshb - jvtab-wt_qbshb.
        withtab-wt_qszrt = ' '.
        withtab-qsatz = ( withtab-wt_qbshh / withtab-wt_qsshh ) * 100.
      ENDIF.

      APPEND withtab.
    ENDSELECT.
  ENDLOOP.
*** Reverting Note for testing

ENDFORM.                    "fill_withtab

*---------------------------------------------------------------------*
*       FORM modfy_invtab                                             *
*---------------------------------------------------------------------*
*       ........                                                      *
*---------------------------------------------------------------------*
FORM modify_invtab.

* Certificate with multiple taxcodes
  DATA : counter TYPE i.

  LOOP AT withtab.
    MOVE-CORRESPONDING withtab TO temp_withtab.
    APPEND temp_withtab.
  ENDLOOP.

* putting zero rates into temp_withtab table for transfer into withtab
  SORT withtab BY belnr buzei.
  SORT temp_withtab BY belnr buzei.
  LOOP AT temp_withtab.
    AT NEW belnr.
      READ TABLE withtab WITH KEY
                belnr = temp_withtab-belnr
                buzei = 2.
      IF sy-subrc = 0.
        temp_withtab-qsatz = 0.
        MODIFY temp_withtab TRANSPORTING qsatz WHERE
                              belnr = withtab-belnr.
      ENDIF.
    ENDAT.
  ENDLOOP.

*Transfer the tax base amount per line number and the
* tax rates per line.
  CLEAR counter.
*LOOP AT temp_withtab.
*  at new buzei.
*    sum.
*    counter = 0.
*    loop at withtab where  belnr = temp_withtab-belnr and
*                           buzei = temp_withtab-buzei.
*        counter = counter + 1.
*        If counter = 1.
*****************************************************************
* Note 773106
*  withtab-wt_qbshh = temp_withtab-wt_qbshh.
*  If withtab-wt_basman = 'X'. "Note 692642 Begin
*    withtab-wt_qsshh = temp_withtab-wt_qsshh.
*  Endif. "Note 692642 End
*  withtab-qsatz =  temp_withtab-qsatz.
*  modify withtab INDEX sy-tabix.
*****************************************************************
*        else.
*          MOVE 'X' TO withtab-no_print .
*          MODIFY withtab.
*        endif.
*    endloop.
*  endat.
*ENDLOOP.
*
  CLEAR: temp_withtab, temp_withtab[].

  SORT withtab BY belnr buzei.

* transferring the records not marked as not for printing into
* temp_withtab.
  LOOP AT withtab WHERE no_print EQ space.
    MOVE-CORRESPONDING withtab TO temp_withtab.
    APPEND temp_withtab.
  ENDLOOP.

* 1. summing up the lines in temp_withtab
* 2. Transferring base amounts and tax amount to the first line
* in withtab
* marking any remaining lines in withtab as no print
*sort temp_withtab by belnr.
*sort withtab by belnr no_print.
*clear counter.
*LOOP AT temp_withtab.
*  at new belnr.
*    sum.
*    clear counter.
*    counter = 0.
*    loop at withtab where  belnr = temp_withtab-belnr.
*        counter = counter + 1.
*        If counter = 1.
*          withtab-wt_qsshh = temp_withtab-wt_qsshh.
*          withtab-wt_qbshh = temp_withtab-wt_qbshh.
*          modify withtab INDEX sy-tabix.
*        else.
*          MOVE 'X' TO withtab-no_print .
*          MODIFY withtab.
*        endif.
*    endloop.
*  endat.
*ENDLOOP.

* Certificate with multiple taxcodes

  LOOP AT withtab.
    IF withtab-method = 'I'.
      invtab  = withtab.
      APPEND invtab.
    ELSE .
      paytab = withtab.
      APPEND paytab.
    ENDIF.
  ENDLOOP.


* Only for invoices.
*Note 704757
  LOOP AT invtab.
    IF invtab-wt_qsshh < 0.            " Invoice.
      MOVE 'I' TO invtab-flag.
    ELSE.
      MOVE 'M' TO invtab-flag.         " Credit Memo
    ENDIF.
    IF invtab-j_1iewtrec NE 'J'.
      invtab-wt_qbshh = invtab-wt_qbshh * ( -1 ).
      invtab-wt_qsshh = invtab-wt_qsshh * ( -1 ).
    ENDIF.
    MODIFY invtab.
  ENDLOOP.
  LOOP AT paytab.
    SELECT SINGLE lifnr FROM bseg INTO paytab-lifnr WHERE
                    bukrs        = paytab-bukrs
             AND    belnr        = paytab-belnr
             AND    gjahr        = paytab-gjahr
             AND    koart        = 'K'
             AND    lifnr        IN zvendor
             AND    buzei        = paytab-buzei.
    paytab-no_print = ' '.
    MODIFY paytab.
  ENDLOOP.
*Note 704757

* The subsequent process will be affected by flag in j_1iewtrec.

ENDFORM.                    "modify_invtab

*---------------------------------------------------------------------*
*       FORM refresh_data                                             *
*---------------------------------------------------------------------*
*       ........                                                      *
*---------------------------------------------------------------------*
FORM refresh_data.

  REFRESH : withtab, invtab, paytab,
            bkpftab, it_lfa1, printtab,it_summary.
  CLEAR  :  withtab, invtab, paytab,
            bkpftab, it_lfa1, printtab,it_summary,cnt_print_order.

ENDFORM.                    "refresh_data

*---------------------------------------------------------------------*
*       FORM process_credit_memos                                     *
*---------------------------------------------------------------------*
*       ........                                                      *
*---------------------------------------------------------------------*
FORM process_credit_memos.

  DATA: invcopytab LIKE invtab OCCURS 0 WITH HEADER LINE.

  invcopytab[] = invtab[].

  LOOP AT invcopytab WHERE flag       = 'M'
                       AND j_1ibuzei NE ' '
                       AND no_print NE 'X'.
    SELECT SINGLE * FROM bseg
                       WHERE  bukrs        = invcopytab-bukrs
                       AND    belnr        = invcopytab-belnr
                       AND    gjahr        = invcopytab-gjahr
                       AND    buzei        = invcopytab-buzei.

    IF sy-subrc = 0 AND  bseg-shkzg = 'S'
                    AND  bseg-koart = 'K'
                    AND  bseg-rebzg NE space  . " there is doc.ref

      READ TABLE invtab WITH KEY
                           bukrs = bseg-bukrs
                           gjahr = bseg-rebzj
                           belnr = bseg-rebzg
                           buzei = bseg-rebzz
                           witht = invcopytab-witht
                           no_print = ''.
      IF sy-subrc = 0.
* The reference invoice is also there for certificate Processing.
        IF invtab-j_1iintchln = invcopytab-j_1iintchln
          AND invtab-j_1iintchdt = invcopytab-j_1iintchdt .
* Both documents are cleared using same Challan.
          invtab-wt_qsshh = invtab-wt_qsshh +  invcopytab-wt_qsshh.
          invtab-wt_qbshh = invtab-wt_qbshh +  invcopytab-wt_qbshh.
          invtab-print_order = cnt_print_order = cnt_print_order + 1.
* Invoice is net of credit memo values
          MODIFY  invtab INDEX sy-tabix.

          READ TABLE invtab WITH KEY bukrs = invcopytab-bukrs
                                  gjahr = invcopytab-gjahr
                                  belnr = invcopytab-belnr
                                  buzei = invcopytab-buzei
                                  witht = invcopytab-witht.
* This step removes that credit memo item since it is already reduced
          MOVE 'X' TO invtab-no_print .
          MODIFY  invtab INDEX sy-tabix.
* Do not print this credit memo line since it is already adjusted
* with invoice
        ELSE.
* If challan number of invoice is different that of credit memo
          invtab-wt_qsshh = invtab-wt_qsshh +  invcopytab-wt_qsshh.
          invtab-wt_qbshh = invtab-wt_qbshh +  invcopytab-wt_qbshh.
          invtab-print_order = cnt_print_order = cnt_print_order + 1.
* Now invoice is net of credit memo
          MODIFY TABLE invtab.
* Read credit memo line in invtab.
          READ TABLE invtab WITH KEY bukrs = invcopytab-bukrs
                              gjahr = invcopytab-gjahr
                              belnr = invcopytab-belnr
                              buzei = invcopytab-buzei
                              witht = invcopytab-witht.
          invtab-wt_qsshh = 0.
          invtab-wt_qbshh = 0.
          invtab-budat    = ' '.
          invtab-qsatz    = ' '.
          invtab-print_order = cnt_print_order = cnt_print_order + 1.
          MODIFY  invtab INDEX sy-tabix.
*  In case of Credit Memos paid with challan number other than that
*  of invoice,It is necessary to show invoice net of credit memo,but
*  to print the Challan number of credit memo as well
*  There will be two Lines Printed. One for invoice- all fields filled,
*  another for Credit Memo. Amount, base,date and tax rates will not be
*  printed , only challan no and date will be printed under the invoice.
        ENDIF.
      ENDIF.
    ENDIF.
  ENDLOOP.

  REFRESH invcopytab.

ENDFORM.                    "process_credit_memos

*---------------------------------------------------------------------*
*       FORM process_dp                                               *
*---------------------------------------------------------------------*
*       ........                                                      *
*---------------------------------------------------------------------*
FORM process_dp.

  DATA : cleartab LIKE invtab OCCURS 0 WITH HEADER LINE.
  DATA : cleartab_buzei LIKE cleartab-buzei. "Note 826877
  DATA : v_amt TYPE i. "Note 831817

  LOOP AT paytab INTO cleartab
                WHERE  wt_downc = 'X'
                AND j_1ibuzei NE '000'
                AND j_1iewtrec = 'C'.
    APPEND cleartab.
  ENDLOOP.

  LOOP AT cleartab WHERE no_print NE 'X'.
    SELECT SINGLE * FROM bseg INTO bseg
                       WHERE  bukrs        = cleartab-bukrs
                       AND    belnr        = cleartab-belnr
                       AND    gjahr        = cleartab-gjahr
                       AND    buzei        = cleartab-buzei.
    IF sy-subrc  = 0 AND bseg-shkzg = 'S'
        AND bseg-koart = 'K'
        AND bseg-rebzg NE ' '.         " invoice reference

      READ TABLE invtab WITH KEY bukrs = bseg-bukrs
                                 gjahr = bseg-rebzj
                                 belnr = bseg-rebzg
                                 buzei = bseg-rebzz
                                 no_print = ''.
      IF sy-subrc = 0.
* The parent invoice is also there for certificate Processing
        IF invtab-j_1iintchln = cleartab-j_1iintchln
          AND invtab-j_1iintchdt = cleartab-j_1iintchdt .

* Both documents are cleared using same Challan.
********************************************************************
* Note 773106
          IF NOT cleartab_buzei IS INITIAL. "Note 826877
            IF cleartab_buzei NE cleartab-buzei.
              invtab-base_mod = ''.
            ENDIF.
          ENDIF.

          IF invtab-base_mod NE 'X'.
            invtab-wt_qsshh = invtab-wt_qsshh -  cleartab-wt_qsshh.
            invtab-base_mod = 'X'.
          ENDIF.
********************************************************************
          invtab-wt_qbshh = invtab-wt_qbshh -  cleartab-wt_qbshh.
          v_amt  = TRUNC( invtab-wt_qsshh ). "Note 831817

          IF v_amt = 0. "Note 826877  " Note 831817
            DELETE  invtab INDEX sy-tabix.
          ELSE.
            MODIFY invtab INDEX sy-tabix.
          ENDIF.

* Now invoice is net of credit memo values
          READ TABLE paytab WITH KEY bukrs = cleartab-bukrs
                                     gjahr = cleartab-gjahr
                                     belnr = cleartab-belnr
                                     buzei = cleartab-buzei
                                     no_print = ''.   " Note 773106


* This step removes that DP clear item since it is already reduced
          MOVE 'X' TO paytab-no_print .
          MOVE 'X' TO cleartab-no_print.      " Note 773106
          MODIFY cleartab.                    " Note 773106
          MODIFY paytab INDEX sy-tabix.

        ELSE.
* If challan number of invoice is different that of DP clear.
* Note 773106
*          invtab-wt_qsshh = invtab-wt_qsshh -  cleartab-wt_qsshh.
          invtab-wt_qbshh = invtab-wt_qbshh -  cleartab-wt_qbshh.
          invtab-print_order = cnt_print_order = cnt_print_order + 1.
          MODIFY invtab INDEX sy-tabix.
* Now invoice is net of DP clear values
          READ TABLE paytab WITH KEY bukrs = cleartab-bukrs
                                     gjahr = cleartab-gjahr
                                     belnr = cleartab-belnr
                                     buzei = cleartab-buzei
                                     no_print = ''.   " Note 773106
* Read DP clearing line in invtab.
          paytab-wt_qsshh = 0.
          paytab-wt_qbshh = 0.
          paytab-budat    = ' '.
          paytab-qsatz    = ' '.
          invtab-print_order = cnt_print_order = cnt_print_order + 1.
          MODIFY paytab INDEX sy-tabix.
          MOVE 'X' TO cleartab-no_print.   " Note 773106
          MODIFY cleartab.                 " Note 773106

* This step is executed so that in case of DP clear refunds  with
* challan number other than that of invoice, it is necessary to show
* invoice net of refund but to print the Challan number of refund  as
* well. There will be two or more lines printed. One for invoice - all
* fields filled,  another for Clearing refund  Amount, base, date & tax
* rates  will not be printed, only challan no and date  will be printed
* under the invoice.
        ENDIF.
      ELSE.
        READ TABLE paytab WITH KEY bukrs = cleartab-bukrs
                                     gjahr = cleartab-gjahr
                                     belnr = cleartab-belnr
                                     buzei = cleartab-buzei.
        MOVE 'X' TO paytab-no_print .
        MODIFY paytab INDEX sy-tabix.
      ENDIF.
    ENDIF.
    cleartab_buzei = cleartab-buzei. "Note 826877

  ENDLOOP.

ENDFORM.                    "process_dp

*---------------------------------------------------------------------*
*       FORM open_form                                                *
*---------------------------------------------------------------------*
*       ........                                                      *
*---------------------------------------------------------------------*
FORM open_form.
  DATA : tmp_answer.
  itcpo-tdimmed = 'X' .

  CALL FUNCTION 'OPEN_FORM'
    EXPORTING
      form                        = layout
      language                    = sy-langu
      OPTIONS                     = itcpo
    EXCEPTIONS
      canceled                    = 1
      device                      = 2
      form                        = 3
      OPTIONS                     = 4
      unclosed                    = 5
      mail_options                = 6
      archive_error               = 7
      invalid_fax_number          = 8
      more_params_needed_in_batch = 9
      OTHERS                      = 10.
  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.                    "open_form
*---------------------------------------------------------------------*
*       FORM write_form                                               *
*---------------------------------------------------------------------*
*       ........                                                      *
*---------------------------------------------------------------------*
FORM write_form USING element function p_type window.

  CALL FUNCTION 'WRITE_FORM'
    EXPORTING
      element                  = element
      function                 = function
      type                     = p_type
      window                   = window
    EXCEPTIONS
      element                  = 1
      function                 = 2
      type                     = 3
      unopened                 = 4
      unstarted                = 5
      window                   = 6
      bad_pageformat_for_print = 7
      OTHERS                   = 8.
  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.                    "write_form
*---------------------------------------------------------------------*
*       FORM close_form                                               *
*---------------------------------------------------------------------*
*       ........                                                      *
*---------------------------------------------------------------------*
FORM close_form.

  CALL FUNCTION 'CLOSE_FORM'
    EXCEPTIONS
      unopened                 = 1
      bad_pageformat_for_print = 2
      send_error               = 3
      OTHERS                   = 4.

  IF sy-subrc EQ 0.
    STOP.
  ENDIF.

ENDFORM.                    "close_form

*---------------------------------------------------------------------*
*       FORM select_data_for_layout                                   *
*---------------------------------------------------------------------*
*       ........                                                      *
*---------------------------------------------------------------------*
FORM select_data_for_layout.
*  commented by naim on 17-0707
  PERFORM fill_adrc_for_bupla.
  PERFORM select_adrc USING t001-adrnr CHANGING t_adrc.
  PERFORM fill_nature_of_payment.

ENDFORM.                    "select_data_for_layout

*---------------------------------------------------------------------*
*       FORM fill_adrc_for_bupla                                      *
*---------------------------------------------------------------------*
*       ........                                                      *
*---------------------------------------------------------------------*
FORM fill_adrc_for_bupla.
  CLEAR adrc.
*  commented by naim on 17-0707

  SELECT  SINGLE adrnr name FROM  j_1bbranch
          INTO (j_1bbranch-adrnr,j_1bbranch-name)
          WHERE  bukrs  = zbukrs
            AND  branch = printtab-bupla.

  CHECK NOT   j_1bbranch-adrnr IS INITIAL.
  PERFORM select_adrc USING j_1bbranch-adrnr CHANGING adrc.
**   added by naim on 17-07-07
*   perform select_adrc using t001-adrnr changing adrc.


ENDFORM.                    "fill_adrc_for_bupla


*---------------------------------------------------------------------*
*       FORM select_adrc                                              *
*---------------------------------------------------------------------*
*       ........                                                      *
*---------------------------------------------------------------------*
*  -->  p_adrnr                                                       *
*  -->  p_adrc                                                        *
*---------------------------------------------------------------------*
FORM select_adrc USING    p_adrnr
                 CHANGING p_adrc STRUCTURE adrc.

  SELECT        * FROM  adrc INTO p_adrc
         WHERE  addrnumber  = p_adrnr.
    EXIT.
  ENDSELECT.

ENDFORM.                    "select_adrc

*---------------------------------------------------------------------*
*       FORM select_vendors                                           *
*---------------------------------------------------------------------*
*       ........                                                      *
*---------------------------------------------------------------------*
FORM select_vendors.

  DATA: tmp_adrc LIKE adrc.
  SORT  printtab BY wt_acco.

  LOOP AT printtab.
    ON CHANGE OF printtab-wt_acco.
* Get vendor PAN NO
      CLEAR j_1imovend.
      SELECT SINGLE * FROM j_1imovend
           WHERE lifnr = printtab-wt_acco.
      SELECT SINGLE * FROM lfa1
           INTO CORRESPONDING FIELDS OF it_lfa1
           WHERE lifnr = printtab-wt_acco.
      it_lfa1-one_time = it_lfa1-xcpdk.
      it_lfa1-bupla    = printtab-bupla.
      it_lfa1-secco    = printtab-secco.                 " Note 604606
      PERFORM select_adrc USING it_lfa1-adrnr
                       CHANGING tmp_adrc.
      MOVE :
            tmp_adrc-str_suppl1  TO it_lfa1-str_suppl1,
            tmp_adrc-str_suppl2  TO it_lfa1-str_suppl2,
            tmp_adrc-street      TO it_lfa1-street,
            tmp_adrc-city1       TO it_lfa1-city1,
            tmp_adrc-city2       TO it_lfa1-city2,
            tmp_adrc-post_code1  TO it_lfa1-post_code1,
            j_1imovend-j_1ipanno TO it_lfa1-pan.

      APPEND it_lfa1.
    ENDON.
  ENDLOOP.

ENDFORM.                    "select_vendors

*---------------------------------------------------------------------*
*       FORM get_qsatz                                                *
*---------------------------------------------------------------------*
*       ........                                                      *
*---------------------------------------------------------------------*
*  -->  p_withcd                                                      *
*  -->  p_qsatz                                                       *
*---------------------------------------------------------------------*
FORM get_qsatz USING p_witht
                     p_withcd
            CHANGING p_qsatz.

  CHECK p_qsatz IS INITIAL.

  SELECT SINGLE qsatz FROM  t059z INTO p_qsatz
         WHERE  land1      = t001-land1
         AND    witht      = p_witht
         AND    wt_withcd  = p_withcd.

  IF t059z-xqfor = 'X' .
    SELECT  qsatz FROM  t059fb INTO p_qsatz
           WHERE  land1      = t001-land1
           AND    waers      = t001-waers
           AND    witht      = p_witht
           AND    wt_withcd  = p_withcd
           AND    qland      = t001-land1
           AND    wt_valid   <= sy-datum.
      EXIT.
    ENDSELECT.
  ENDIF .

ENDFORM.                    "get_qsatz
*---------------------------------------------------------------------*
*       FORM select_bank                                              *
*---------------------------------------------------------------------*
*       ........                                                      *
*---------------------------------------------------------------------*
*  -->  p_bank1                                                       *
*  -->  p_banka                                                       *
*  -->  p_branch                                                      *
*---------------------------------------------------------------------*
FORM select_bank USING p_bank1 CHANGING p_banka p_ort01 p_branch
p_j_1itdbank.

  SELECT SINGLE * FROM t012
      WHERE bukrs = zbukrs
        AND hbkid = p_bank1.

*  SELECT SINGLE banka ort01 brnch FROM  bnka
*         INTO (p_banka, p_ort01, p_branch)
*         WHERE  banks  = t001-land1
*           AND   bankl = t012-bankl.


*note 885104

  SELECT SINGLE banka brnch bankl FROM bnka
         INTO (p_banka, p_branch, p_j_1itdbank)  "Note 912767
         WHERE banks EQ t001-land1
         AND bankl EQ t012-bankl.

*** Changes by Vivek 01-Jun-06

  p_branch = p_j_1itdbank.                                  "921787

p_branch = t012-stcd1. " Tax Number 1 is having the BSR Code

***End of Changes by Vivek 01-Jun-06


  CLEAR p_ort01.

*end note 885104
ENDFORM.                    "select_bank
*---------------------------------------------------------------------*
*       FORM convert_to_words                                         *
*---------------------------------------------------------------------*
*       ........                                                      *
*---------------------------------------------------------------------*
*  -->  p_amount                                                      *
*  -->  p_word                                                        *
*---------------------------------------------------------------------*
FORM convert_to_words USING p_amount LIKE bseg-dmbtr CHANGING p_word
p_paise.
  DATA:  spell LIKE spell.

  CALL FUNCTION 'SPELL_AMOUNT'
    EXPORTING
      amount    = p_amount
      currency  = t001-waers
      filler    = space
      language  = sy-langu
    IMPORTING
      in_words  = spell
    EXCEPTIONS
      not_found = 01
      too_large = 02.


  MOVE spell-word TO p_word.
  MOVE spell-decword TO p_paise.
ENDFORM.                    "convert_to_words

*---------------------------------------------------------------------*
*       FORM print_certificate                                        *
*---------------------------------------------------------------------*
*       ........                                                      *
*---------------------------------------------------------------------*
*FORM print_certificate_old USING p_one_time.
*
*  DATA : tmp_count LIKE sy-tabix ,
*         flg_new_page,
*         tmp_mod LIKE sy-tabix,
*         tmp_lines LIKE sy-tabix.
*
*
*  CLEAR tmp_amount.
*  DESCRIBE TABLE printtab LINES tmp_lines.
*
*  PERFORM select_pan.
*  PERFORM print_header.
*  SORT printtab BY print_order .
**Line item data
*  LOOP AT printtab WHERE wt_acco = it_lfa1-lifnr .
*
**----address for one time vendors
*    IF p_one_time = 'X' .
*    PERFORM   get_address_from_bsec USING printtab-belnr printtab-buzei
*                              CHANGING it_lfa1.
*    ENDIF.
*
*
**---Calculation for new page
*    tmp_mod  = sy-tabix MOD 11.
*    IF tmp_mod = tmp_count.
*      flg_new_page = 'X'.
*      tmp_count = tmp_count + 2.
*    ENDIF.
*
*
** Printing headers and brought forward amount in new page
*    IF flg_new_page = 'X' .
*      PERFORM write_form USING 'MAIN_LINE' 'SET' 'BODY' 'MAIN'.
*      PERFORM write_form USING 'CRFORWARD' 'SET' 'BODY' 'MAIN'.
*      PERFORM new_page.
*      PERFORM write_form USING 'MAIN_HEADING' 'SET' 'BODY' 'MAIN'.
*      PERFORM write_form USING 'BRFORWARD' 'SET' 'BODY' 'MAIN'.
*      flg_new_page = space.
*    ENDIF.
*
**    if it_lfa1-one_time = 'X' .
**    PERFORM   get_address_from_bsec USING printtab-belnr
*printtab-buzei
**                      CHANGING it_lfa1.
**    endif.
*
**    PERFORM select_bank USING printtab-bankl CHANGING printtab-banka
**                              printtab-ort01 printtab-brnch.
*
*    PERFORM get_qsatz USING printtab-witht printtab-wt_withcd
*                                      CHANGING printtab-qsatz.
*    PERFORM write_form USING 'MAIN_DATA' 'SET' 'BODY' 'MAIN'.
*
**    PERFORM write_form USING 'BANK' 'SET' 'BODY' 'CHALLAN'.
*    tmp_amount  = tmp_amount + printtab-wt_qbshh.
*
*  ENDLOOP.
**Sum and footer data
*
*  PERFORM append_summary.
*
*
*
*  PERFORM print_footer.
**    PERFORM write_form USING 'FOOTER' 'SET' 'BODY' 'FOOTER'.
*
*
*
*ENDFORM.



*---------------------------------------------------------------------*
*       FORM fill_printtab                                            *
*---------------------------------------------------------------------*
*       ........                                                      *
*---------------------------------------------------------------------*
FORM fill_printtab.
  REFRESH printtab.

  LOOP AT invtab  WHERE no_print <>  'X' .
    MOVE-CORRESPONDING invtab TO printtab.
    APPEND printtab.
  ENDLOOP.
  LOOP AT paytab WHERE no_print <>  'X' .
    MOVE-CORRESPONDING paytab TO printtab.
    APPEND printtab.
  ENDLOOP.
  LOOP AT printtab.
    PERFORM select_bank USING printtab-bankl
                     CHANGING printtab-banka
                              printtab-ort01
                              printtab-brnch
                              printtab-j_1itdbank. " Note 912767



    MODIFY printtab.
  ENDLOOP.
  PERFORM select_jv.
  PERFORM filter_data.


  CALL FUNCTION 'J_1I7_USEREXIT_CHEQUENO_CERT'   " Note 912767
   TABLES
     i_printtab       = printtab.

ENDFORM.                    "fill_printtab

*---------------------------------------------------------------------*
*       FORM generate_number                                          *
*---------------------------------------------------------------------*
*       ........                                                      *
*---------------------------------------------------------------------*
*  -->  p_number                                                      *
*---------------------------------------------------------------------*
FORM generate_number CHANGING p_number.

  DATA  : xyear LIKE bseg-gjahr.
  CLEAR : xyear.

  CALL FUNCTION 'J_1I6_DETERMINE_EXC_YEAR'
    EXPORTING
      i_bukrs      = zbukrs
      i_budat      = zpdate-low
    IMPORTING
      excise_year  = xyear
    EXCEPTIONS
      miss_company = 1
      OTHERS       = 2.

  zyear = xyear.

  IF con_reprint = 'X' .
    p_number  = zcertno.
  ELSE.

    CHECK sy-ucomm = 'PRNT'.
    CLEAR: j_1iewt_cert,j_1iewt_certno.


    IF sy-subrc NE 0.
      MESSAGE e017.
    ENDIF.

    SELECT SINGLE * FROM j_1iewt_cert_n
            WHERE bukrs = zbukrs
            AND   ( secco = save_printtab-secco            " Note 604606
            OR secco = save_printtab-bupla )
            AND   qscod = zsect.
    IF sy-subrc NE 0 OR j_1iewt_cert_n-j_1inogroup IS INITIAL.
      " Note 604606
      MESSAGE e766.
    ELSE.
      SELECT SINGLE * FROM j_1iewt_certno
             WHERE j_1inogroup = j_1iewt_cert_n-j_1inogroup.
      " Note 604606
      IF sy-subrc NE 0 OR j_1iewt_certno-numki IS INITIAL.
        MESSAGE e766.
      ENDIF.
    ENDIF.

    CALL FUNCTION 'NUMBER_GET_NEXT'
      EXPORTING
        nr_range_nr             = j_1iewt_certno-numki
        object                  = 'J_1ICERT'
        subobject               = zbukrs
        toyear                  = xyear
      IMPORTING
        number                  = p_number
      EXCEPTIONS
        interval_not_found      = 1
        number_range_not_intern = 2
        object_not_found        = 3
        quantity_is_0           = 4
        quantity_is_not_1       = 5
        interval_overflow       = 6
        OTHERS                  = 7.
    IF sy-subrc <> 0.
      MESSAGE a166 .
    ENDIF.
  ENDIF.
ENDFORM.                    "generate_number

*---------------------------------------------------------------------*
*       FORM get_address_from_bsec                                    *
*---------------------------------------------------------------------*
*       ........                                                      *
*---------------------------------------------------------------------*
*  -->  p_belnr                                                       *
*  -->  p_buzei                                                       *
*  -->  p_lfa1                                                        *
*---------------------------------------------------------------------*
FORM get_address_from_bsec USING p_belnr p_buzei CHANGING p_lfa1 LIKE
it_lfa1.

  TABLES bsec.
*user exit for PAN number for one time vendors.
  DATA : pan LIKE j_2icomm-c20.
  CLEAR: pan.
*end of changes for PAN number for one time vendors
  SELECT  SINGLE      * FROM  bsec INTO bsec
  WHERE  bukrs  = zbukrs
  AND    belnr  = p_belnr
  AND    gjahr  = zyear
  AND    buzei  = p_buzei.
*user exit for PAN number for one time vendors
  IF sy-subrc = 0.
    CALL FUNCTION 'J_1I7_USEREXIT_ONETIME_PAN'
      EXPORTING
        y_bsec = bsec
      IMPORTING
        panno  = pan.

    .
    IF pan NE ' ' .
      p_lfa1-pan = pan.
    ENDIF.

*end of changes for PAN number for one time vendors

    MOVE :
    bsec-name1 TO p_lfa1-name1 ,
    bsec-name2 TO p_lfa1-str_suppl1,
*bsec-stras to p_lfa1-STR_SUPPL2
    bsec-stras TO p_lfa1-street      ,
    bsec-ort01 TO p_lfa1-city1         ,
*p_lfa1-city2
    bsec-pstlz TO p_lfa1-post_code1         .
*user exit for PAN number for one time vendors.
  ENDIF.



ENDFORM.                    "get_address_from_bsec


*---------------------------------------------------------------------*
*       FORM print_header                                             *
*---------------------------------------------------------------------*
*       ........                                                      *
*---------------------------------------------------------------------*
FORM print_header.

  IF NOT save_printtab-secco IS INITIAL.                    "Note 604606
    SELECT SINGLE * FROM j_1iewt_cert_n
          WHERE bukrs = zbukrs
          AND secco   = save_printtab-secco
          AND   qscod = zsect.
    PERFORM select_data_for_layout_secco.
  ELSE.
    SELECT SINGLE * FROM j_1iewt_cert
              WHERE bukrs = zbukrs
              AND bupla   = save_printtab-bupla
              AND   qscod = zsect.
    PERFORM select_data_for_layout.
  ENDIF.
  move-corresponding t_adrc to adrc.
  IF con_reprint IS INITIAL.
    PERFORM write_form USING 'NUMBER' 'SET' 'BODY' 'NUMBER'.
  ELSE.
    PERFORM write_form USING 'REPRINT' 'SET' 'BODY' 'DUPNUM'.
  ENDIF.
  PERFORM write_form USING 'INFO1' 'SET' 'BODY' 'INFO1'.
  PERFORM write_form USING 'INFO2' 'SET' 'BODY' 'INFO2'.
  PERFORM write_form USING 'INFO3' 'SET' 'BODY' 'INFO3'.
  PERFORM write_form USING 'MAIN_HEADING' 'SET' 'BODY' 'MAIN'.

ENDFORM.                    "print_header

*---------------------------------------------------------------------*
*       FORM print_footer                                             *
*---------------------------------------------------------------------*
*       ........                                                      *
*---------------------------------------------------------------------*
FORM print_footer.

  PERFORM write_form USING 'MAIN_LINE' 'SET' 'BODY' 'MAIN'.
  PERFORM convert_to_words USING tmp_amount CHANGING
                      printtab-word printtab-paise.
  printtab-total_tax = tmp_amount . "Sapna 040507
  PERFORM write_form USING 'TOTAL' 'SET' 'BODY' 'MAIN'.
  PERFORM write_form USING 'SIGNATURE' 'SET' 'BODY' 'MAIN'.

ENDFORM.                    "print_footer

*---------------------------------------------------------------------*
*       FORM select_pan                                               *
*---------------------------------------------------------------------*
*       ........                                                      *
*---------------------------------------------------------------------*
FORM select_pan.

* for gir number
  SELECT SINGLE * FROM t001z
       WHERE bukrs = t001-bukrs
       AND   party = 'J_1I03' .
  girno = t001z-paval.
* For PAN no
  SELECT SINGLE  paval FROM  t001z INTO t001z-paval
         WHERE  bukrs  = t001-bukrs
         AND    party  = 'J_1I02'.

ENDFORM.                    "select_pan


*---------------------------------------------------------------------*
*       FORM popup_to_decide                                          *
*---------------------------------------------------------------------*
*       ........                                                      *
*---------------------------------------------------------------------*
*  -->  answer                                                        *
*---------------------------------------------------------------------*
FORM popup_to_decide CHANGING answer.
  CALL FUNCTION 'POPUP_TO_DECIDE'
       EXPORTING
*         DEFAULTOPTION     = '1'
            textline1         = 'Please choose an option'

*         TEXTLINE2         = ' '
*         TEXTLINE3         = ' '
            text_option1      = 'Print Certificate'
            text_option2      = 'View Print preview only'
           icon_text_option1 = 'ICON_PRINT'
*         ICON_TEXT_OPTION2 = ' '
            titel             = 'Print Option'
*         START_COLUMN      = 25
*         START_ROW         = 6
*         CANCEL_DISPLAY    = 'X'
      IMPORTING
           answer            = answer
            .

ENDFORM.                    "popup_to_decide


*---------------------------------------------------------------------*
*       FORM new_page                                                 *
*---------------------------------------------------------------------*
*       ........                                                      *
*---------------------------------------------------------------------*
FORM new_page.

  CALL FUNCTION 'CONTROL_FORM'
    EXPORTING
      command   = 'NEW-PAGE'
    EXCEPTIONS
      unopened  = 1
      unstarted = 2
      OTHERS    = 3.
  IF sy-subrc <> 0.
    MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
            WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
  ENDIF.

ENDFORM.                    "new_page

*---------------------------------------------------------------------*
*       FORM print_summaries                                          *
*---------------------------------------------------------------------*
*       ........                                                      *
*---------------------------------------------------------------------*
FORM print_summaries.
  CHECK NOT printtab[] IS INITIAL AND con_reprint IS INITIAL.
*  perform new_page.
*  PERFORM end_form.
  PERFORM start_form USING layout 'FNEXT'.
  PERFORM print_challanwise_summary.
  PERFORM end_form.

  PERFORM start_form USING layout 'THIRD'.
  PERFORM print_certificate_summary.
  PERFORM end_form.


ENDFORM.                    "print_summaries

*---------------------------------------------------------------------*
*       FORM start_form                                               *
*---------------------------------------------------------------------*
*       ........                                                      *
*---------------------------------------------------------------------*
*  -->  p_layout                                                      *
*  -->  ppage                                                         *
*---------------------------------------------------------------------*
FORM start_form USING p_layout ppage.

  CALL FUNCTION 'START_FORM'
    EXPORTING
      form      = p_layout
      startpage = ppage
    EXCEPTIONS
      form      = 01
      format    = 02
      unended   = 03
      unopened  = 04
      unused    = 05.
ENDFORM.                    "start_form

*---------------------------------------------------------------------*
*       FORM select_form                                              *
*---------------------------------------------------------------------*
*       ........                                                      *
*---------------------------------------------------------------------*
*  -->  p_bupla                                                       *
*  -->  p_form                                                        *
*---------------------------------------------------------------------*
FORM select_form USING p_secco CHANGING p_form.

  SELECT SINGLE tdform  FROM  j_1iewt_cert_n INTO p_form
        WHERE  bukrs    = zbukrs
         AND    secco   = p_secco
         AND    qscod   = zsect.

  IF layout = space.
    MESSAGE e743.
  ENDIF.

ENDFORM.                    "select_form

*---------------------------------------------------------------------*
*       FORM print_challanwise_summary                                *
*---------------------------------------------------------------------*
*       ........                                                      *
*---------------------------------------------------------------------*
FORM print_challanwise_summary.
  DATA : tmp_bankl LIKE bnka-bankl.
  CLEAR: total_amt,total_challan_amt.
  DATA : ls_belnr LIKE bseg-belnr,
         ls_wrbtr LIKE bseg-wrbtr.
* Data
  DATA : BEGIN OF printtab_loc OCCURS 5,
           j_1iextchln LIKE printtab-j_1iextchln,
           j_1iextchdt LIKE printtab-j_1iextchdt,
           banka       LIKE bnka-banka ,
           wt_qbshh    LIKE with_item-wt_qbshh,
         END OF printtab_loc .

  PERFORM select_company_name.
  PERFORM write_form USING 'CHALLAN_SUMMARY' 'SET' 'BODY' 'SUMMARY2'.
  SORT printtab BY j_1iextchdt j_1iextchln .

  LOOP AT printtab.


    MOVE-CORRESPONDING printtab TO printtab_loc .
    COLLECT printtab_loc .
  ENDLOOP .
  CLEAR printtab .

  LOOP AT printtab_loc WHERE
*                no_print <> 'X' AND
                NOT wt_qbshh IS INITIAL.
*    on change of printtab-j_1iextchln.
    MOVE-CORRESPONDING printtab_loc TO printtab .

    SELECT SINGLE belnr INTO ls_belnr FROM j_1iewtchln
           WHERE bukrs EQ zbukrs
             AND gjahr EQ zyear
             AND j_1iextchln EQ printtab_loc-j_1iextchln
             AND j_1iextchdt EQ printtab_loc-j_1iextchdt.
    IF sy-subrc = 0.
      SELECT SINGLE wrbtr INTO ls_wrbtr FROM bseg
                 WHERE belnr EQ ls_belnr
                   AND gjahr EQ zyear
                   AND bukrs EQ zbukrs.

      IF sy-subrc EQ 0.
        ls_wrbtr = ABS( ls_wrbtr ).
        printtab_loc-wt_qbshh = ls_wrbtr.
        MODIFY printtab_loc.
      ENDIF.

    ENDIF.


    PERFORM write_form USING 'CHALLAN_DATA' 'SET' 'BODY' 'MAIN'.
*   endon.
    total_challan_amt  = total_challan_amt + printtab-wt_qbshh.
    CLEAR printtab .
  ENDLOOP.
  total_amt = total_challan_amt.

  PERFORM write_form USING 'CERT_SUM' 'SET' 'BODY' 'MAIN'.
ENDFORM.                    "print_challanwise_summary

*---------------------------------------------------------------------*
*       FORM select_company_name                                      *
*---------------------------------------------------------------------*
*       ........                                                      *
*---------------------------------------------------------------------*
FORM select_company_name.
  SELECT SINGLE name1  FROM sadr INTO sadr-name1
                WHERE  adrnr = t001-adrnr" geting addresses
                AND    natio = ' ' .
ENDFORM.                    "select_company_name

*---------------------------------------------------------------------*
*       FORM end_form                                                 *
*---------------------------------------------------------------------*
*       ........                                                      *
*---------------------------------------------------------------------*
FORM end_form.

  CALL FUNCTION 'END_FORM'
    EXCEPTIONS
      unopened                 = 1
      bad_pageformat_for_print = 2
      OTHERS                   = 3.
  IF sy-subrc <> 0.
    MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
            WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
  ENDIF.

ENDFORM.                    "end_form

*---------------------------------------------------------------------*
*       FORM print_certificate_summary                                *
*---------------------------------------------------------------------*
*       ........                                                      *
*---------------------------------------------------------------------*
FORM print_certificate_summary.

  CLEAR total_amt.

  DATA : ls_belnr LIKE bseg-belnr,
         ls_wrbtr LIKE bseg-wrbtr,
         wa_bseg LIKE bseg,
         j_1iintchln LIKE j_1iewtchln-j_1iintchln,
         j_1iintchdt LIKE j_1iewtchln-j_1iintchdt,
         wa_withtab LIKE LINE OF withtab.


  PERFORM write_form USING 'CERT_SUMMARY' 'SET' 'BODY' 'SUMMARY'.

  CLEAR it_summary.

  LOOP AT it_summary.
*    CLEAR PRINTTAB.
*    LOOP AT PRINTTAB WHERE BELNR EQ IT_SUMMARY-BELNR AND
*                    J_1IINTCHLN NE SPACE AND
*                    J_1IINTCHDT NE SPACE AND
*                    WT_ACCO EQ IT_SUMMARY-LIFNR AND
*                    GJAHR EQ IT_SUMMARY-GJAHR.
*
*      J_1IINTCHLN = PRINTTAB-J_1IINTCHLN.
*      J_1IINTCHDT = PRINTTAB-J_1IINTCHDT.
*      EXIT.
*    ENDLOOP.
*
*    SELECT SINGLE BELNR FROM J_1IEWTCHLN INTO LS_BELNR
*           WHERE BUKRS EQ ZBUKRS
*             AND GJAHR EQ ZYEAR
*             AND J_1IINTCHLN EQ J_1IINTCHLN
*             AND J_1IINTCHDT EQ J_1IINTCHDT.
*
*    IF SY-SUBRC EQ 0.
*      SELECT SINGLE WRBTR INTO LS_WRBTR FROM BSEG
*                    WHERE BELNR EQ LS_BELNR
*                      AND GJAHR EQ ZYEAR
*                      AND BUKRS EQ ZBUKRS.
*
*    LS_WRBTR = ABS( LS_WRBTR ).
*    IT_SUMMARY-AMOUNT = LS_WRBTR.
*    MODIFY IT_SUMMARY.
*
*    ENDIF.



    IF NOT it_summary-secco IS INITIAL.
      PERFORM write_form USING 'CERT_DATA' 'SET' 'BODY' 'MAIN'.
      total_amt  = total_amt + it_summary-amount.
    ELSE.
      IF NOT it_summary-bupla IS INITIAL.
        it_summary-secco = it_summary-bupla.
        PERFORM write_form USING 'CERT_DATA' 'SET' 'BODY' 'MAIN'.
        total_amt  = total_amt + it_summary-amount.
      ENDIF.
    ENDIF.

  ENDLOOP.

  PERFORM write_form USING 'CERT_SUM' 'SET' 'BODY' 'MAIN'.

ENDFORM.                    "print_certificate_summary

*---------------------------------------------------------------------*
*       FORM append_summary                                           *
*---------------------------------------------------------------------*
*       ........                                                      *
*---------------------------------------------------------------------*
FORM append_summary USING p_lifnr p_bupla p_amount p_belnr p_gjahr.
  "Note 804529
  it_summary-lifnr = p_lifnr.
  it_summary-bupla = p_bupla.
  it_summary-certno = cert_number.
  it_summary-amount = p_amount.
  it_summary-belnr = p_belnr.   "Note 804529
  it_summary-gjahr = p_gjahr.   "Note 804529
  APPEND it_summary.
ENDFORM.                    "append_summary

*---------------------------------------------------------------------*
*       FORM update_tables                                             *
*---------------------------------------------------------------------*
*       ........                                                      *
*---------------------------------------------------------------------*
*  -->  p_certno                                                      *
*---------------------------------------------------------------------*
FORM update_tables.
  CHECK con_reprint IS INITIAL.        "Update tables only for reprint
*USING p_certno.
*Update with_item table
*  CHECK NOT p_certno IS INITIAL.

*Loop at the summary table. For each certificate printed, select ffrom
*invtab and paytab for vendor and bupla. Update certificate number there
*modify withitem table from this internal table.
  REFRESH update_tab.

  LOOP AT it_summary.
    CHECK NOT it_summary-certno IS INITIAL.
    READ TABLE it_lfa1 WITH KEY lifnr = it_summary-lifnr. "Note 837288
    IF it_lfa1-one_time IS INITIAL.   " Note 815118
      LOOP AT invtab WHERE wt_acco = it_summary-lifnr
                     AND ( secco   = it_summary-secco      " Note 604606
                     OR    bupla   = it_summary-bupla )
* Belnr field has been removed " Note 815118
                     AND gjahr     = it_summary-gjahr.     " Note 804529
        MOVE-CORRESPONDING invtab TO update_tab.
        update_tab-ctnumber = it_summary-certno.
        update_tab-j_1icertdt = zcertdt.
        APPEND update_tab.
      ENDLOOP.
    ELSE.  " Note 815118
      LOOP AT invtab WHERE wt_acco = it_summary-lifnr
                     AND ( secco   = it_summary-secco      " Note 604606
                     OR    bupla   = it_summary-bupla )
                     AND belnr     = it_summary-belnr      " Note 804529
                     AND gjahr     = it_summary-gjahr.     " Note 804529
        MOVE-CORRESPONDING invtab TO update_tab.
        update_tab-ctnumber = it_summary-certno.
        update_tab-j_1icertdt = zcertdt.
        APPEND update_tab.
      ENDLOOP.
    ENDIF. " Note 815118

    IF it_lfa1-one_time IS INITIAL. " Note 815118
      LOOP AT paytab WHERE wt_acco = it_summary-lifnr
                     AND ( secco   = it_summary-secco      " Note 604606
                     OR    bupla   = it_summary-bupla )
* Belnr field has been removed " Note 815118
                     AND gjahr     = it_summary-gjahr.     " Note 804529
        MOVE-CORRESPONDING paytab TO update_tab.
        update_tab-ctnumber = it_summary-certno.
        update_tab-j_1icertdt = zcertdt.
        APPEND update_tab.
      ENDLOOP.
    ELSE. " Note 815118
      LOOP AT paytab WHERE wt_acco = it_summary-lifnr
                     AND ( secco   = it_summary-secco      " Note 604606
                     OR    bupla   = it_summary-bupla )
                     AND belnr     = it_summary-belnr      " Note 804529
                     AND gjahr     = it_summary-gjahr.     " Note 804529
        MOVE-CORRESPONDING paytab TO update_tab.
        update_tab-ctnumber = it_summary-certno.
        update_tab-j_1icertdt = zcertdt.
        APPEND update_tab.
      ENDLOOP.
    ENDIF. " Note 815118
  ENDLOOP.

  CHECK NOT update_tab[] IS INITIAL.
*update_tab now contains all the records which have to be updated into
*with_item and certificate table
  LOOP AT update_tab.
    UPDATE with_item SET ctnumber   = update_tab-ctnumber
                         j_1icertdt = update_tab-j_1icertdt
           WHERE  bukrs  = update_tab-bukrs
           AND    belnr  = update_tab-belnr
           AND    gjahr  = update_tab-gjahr
           AND    buzei  = update_tab-buzei
           AND    witht  = update_tab-witht.
  ENDLOOP.

  LOOP AT it_summary.
    IF NOT it_summary-secco IS INITIAL.                 " Note 604606
      CLEAR j_1iewt_certif_n.
      j_1iewt_certif_n-bukrs  = zbukrs.
      j_1iewt_certif_n-gjahr  = zyear.
      j_1iewt_certif_n-secco  = it_summary-secco.
      j_1iewt_certif_n-qscod  = zsect.
      j_1iewt_certif_n-ctnumber = it_summary-certno.
      j_1iewt_certif_n-j_1icertdt = zcertdt.
      j_1iewt_certif_n-wt_qbshh    = it_summary-amount.
      j_1iewt_certif_n-usnam = sy-uname.
      j_1iewt_certif_n-cputm = sy-uzeit.
      j_1iewt_certif_n-cpudt = sy-datum.

      CALL FUNCTION 'J_1I7_USEREXIT_CERTPRINT'
        EXPORTING
          print_flag          = 'X'
        CHANGING
          from_date           = zpdate-low
          to_date             = zpdate-high
          wa_j_1iewt_certif_n = j_1iewt_certif_n.

      MODIFY j_1iewt_certif_n.
    ELSE.                                                " Note 604606
      CLEAR j_1iewt_certif.
      j_1iewt_certif-bukrs  = zbukrs.
      j_1iewt_certif-gjahr  = zyear.
      j_1iewt_certif-bupla  = it_summary-bupla.
      j_1iewt_certif-qscod  = zsect.
      j_1iewt_certif-ctnumber = it_summary-certno.
      j_1iewt_certif-j_1icertdt = zcertdt.
      j_1iewt_certif-wt_qbshh    = it_summary-amount.
*insert to update user information  12.10.2000
      j_1iewt_certif-usnam = sy-uname.
      j_1iewt_certif-cputm = sy-uzeit.
      j_1iewt_certif-cpudt = sy-datum.
* end of insert to update user information  12.10.2000
      MODIFY j_1iewt_certif .
    ENDIF.                                                " Note 604606
  ENDLOOP.

  MESSAGE s749 .

ENDFORM.                    "update_tables

*---------------------------------------------------------------------*
*       FORM print_routines                                           *
*---------------------------------------------------------------------*
*       ........                                                      *
*---------------------------------------------------------------------*
FORM print_routines.

  DATA :  tmp_secco LIKE invtab-secco,                      "Note 604606
          tmp_bupla LIKE invtab-bupla,
          tmp_lifnr LIKE lfa1-lifnr,
          loc_lifnr LIKE lfa1-lifnr,
          rc LIKE sy-subrc,
          loc_bupla LIKE zsecco,
          loc_secco LIKE zsecco,                            "Note 604606
          it LIKE printtab OCCURS 0 WITH HEADER LINE.

  DATA : pyear LIKE bkpf-gjahr.
  pyear = zyear.

  DATA : wa_printtab LIKE printtab. "Note 837288

  REFRESH: tmp_printtab, save_printtab.

  IF printtab[] IS INITIAL.
    MESSAGE e000 WITH 'No data selected' 'for printing'.
    STOP.
  ENDIF.

  PERFORM open_form.
  SORT it_lfa1  BY lifnr   secco bupla.                     "Note 604606
  SORT printtab BY wt_acco secco bupla.                     "Note 604606
* Since printtab is modified and taken for printing, another temporary
* internal table is created to store the values in printtab. At the time
* of printting, printtab is populated and passed to write_form_routines

  SORT printtab BY wt_acco secco bupla belnr.  " Start of 837288

  DATA : var_wt_qsshh  LIKE printtab-wt_qsshh,
         zvar_wt_qsshh LIKE printtab-wt_qsshh,
         var_wt_qbshh  LIKE printtab-wt_qbshh,
         sno LIKE printtab-sno.


  LOOP AT printtab.
    ON CHANGE OF printtab-wt_acco.
      CLEAR sno.
    ENDON.
    sno = sno + 1.
    wa_printtab = printtab.
    wa_printtab-sno = sno.
    SELECT SINGLE * FROM t059p
     WHERE land1 = 'IN'
       AND witht = printtab-witht
       AND wt_wtdp = '00'
       AND wt_inheritbase = ''.

    IF sy-subrc = 0.
      zvar_wt_qsshh = zvar_wt_qsshh + printtab-wt_qsshh.
    ELSE.
      IF  zvar_wt_qsshh < printtab-wt_qsshh.
        zvar_wt_qsshh = printtab-wt_qsshh.
      ENDIF.
    ENDIF.

    var_wt_qbshh = var_wt_qbshh + wa_printtab-wt_qbshh.

    AT END OF belnr.
      IF it_lfa1-one_time = ''.
        IF zvar_wt_qsshh = 0.
          wa_printtab-qsatz = 0.
        ELSE.
          wa_printtab-qsatz = ( var_wt_qbshh / zvar_wt_qsshh ) * 100.
        ENDIF.
      ENDIF.

      MOVE-CORRESPONDING wa_printtab TO save_printtab.
      save_printtab-wt_qsshh = zvar_wt_qsshh.
      save_printtab-wt_qbshh = var_wt_qbshh.
      APPEND save_printtab.
      CLEAR save_printtab.
      CLEAR : zvar_wt_qsshh, var_wt_qbshh.
    ENDAT.
  ENDLOOP.

  printtab[] = save_printtab[].  "End of 837288

  LOOP AT save_printtab.
    IF NOT save_printtab-secco IS INITIAL.
      PERFORM read_next_line_secco USING sy-tabix
      "Note 604606
                          CHANGING loc_lifnr
                                   loc_secco
                                   rc.
      READ TABLE it_lfa1 WITH KEY lifnr = save_printtab-wt_acco
                                   secco   = save_printtab-secco.
      IF it_lfa1-one_time IS INITIAL.    "Normal vendor
        IF loc_lifnr <> save_printtab-wt_acco
           OR rc <> 0
           OR loc_secco <> save_printtab-secco.
          PERFORM fill_tmp_table_for_vendor.
          PERFORM generate_number CHANGING cert_number.
          PERFORM print_certificate USING it_lfa1-one_time.
          REFRESH tmp_printtab.
        ELSE.
          PERFORM fill_tmp_table_for_vendor.
          CONTINUE.
        ENDIF.
      ELSE.                              "One time Vendor
        PERFORM generate_number CHANGING cert_number.
        PERFORM print_certificate USING it_lfa1-one_time.
      ENDIF.
    ELSE.
      PERFORM read_next_line USING sy-tabix
                          CHANGING loc_lifnr
                                   loc_bupla
                                   rc.
      READ TABLE it_lfa1 WITH KEY lifnr = save_printtab-wt_acco
                     bupla   = save_printtab-bupla.

      IF it_lfa1-one_time IS INITIAL.    "Normal vendor
        IF loc_lifnr <> save_printtab-wt_acco
           OR rc <> 0
           OR loc_bupla <> save_printtab-bupla.
          PERFORM fill_tmp_table_for_vendor.
          PERFORM generate_number CHANGING cert_number.
          PERFORM print_certificate USING it_lfa1-one_time.
          REFRESH tmp_printtab.
        ELSE.
          PERFORM fill_tmp_table_for_vendor.
          CONTINUE.
        ENDIF.
      ELSE.                              "One time Vendor
        PERFORM generate_number CHANGING cert_number.
        PERFORM print_certificate USING it_lfa1-one_time.
      ENDIF.
    ENDIF.
  ENDLOOP.

  zyear = pyear.

  PERFORM print_summaries.
  PERFORM update_tables .
  PERFORM close_form.

ENDFORM.                    "print_routines

*---------------------------------------------------------------------*
*       FORM print_certificate                                        *
*---------------------------------------------------------------------*
*       ........                                                      *
*---------------------------------------------------------------------*
*  -->  p_one_time                                                    *
*---------------------------------------------------------------------*
FORM print_certificate  USING p_one_time.


  DATA:loc_printtab LIKE printtab OCCURS 0 WITH HEADER LINE.

  IF p_one_time <> 'X' .
* Printtab is the internal table used in the layout for all the details.
* This is the case of a normal vendor. So, the table tmp_printtab will
* contain the details which has to be printed. Hence printtab is locally
* moved to another internal table and then it is filled with entries in
* tmp_printtab . After printing, printtab is restored with old entries.
*To print correct tax rate in certificate for exemptions
    LOOP  AT tmp_printtab .
      IF  tmp_printtab-qsatz =  ' '  AND  tmp_printtab-wt_qszrt = ' '.
* When rate & exemption % not updates  like in cases  of  formulaee
        IF tmp_printtab-wt_qsshh NE 0.
          tmp_printtab-qsatz =
          ( tmp_printtab-wt_qbshh / tmp_printtab-wt_qsshh ) * 100.
        ELSE.
          tmp_printtab-qsatz = 0.
        ENDIF.
*    ELSEIF tmp_printtab-qsatz NE  ' ' AND  tmp_printtab-wt_qszrt NE '
*'.
** When rate & exemption %  as  been defined , actual  rate calculated
*        IF tmp_printtab-wt_qszrt NE 100.
*          tmp_printtab-qsatz =
*          tmp_printtab-qsatz * ( 100 - tmp_printtab-wt_qszrt ) / 100.
*        ELSE.
*          tmp_printtab-qsatz = 0.
*        ENDIF.
      ENDIF.
      MODIFY tmp_printtab TRANSPORTING qsatz.
    ENDLOOP.

* Perform start_form using layout 'FIRST'.
    loc_printtab[]  = printtab[].
    REFRESH printtab. CLEAR tmp_amount.
    printtab[]      = tmp_printtab[].
    PERFORM print_details_normal.
    printtab[]      = loc_printtab[].

  ELSE.
    MOVE save_printtab TO printtab.
* Address for one time vendors
    PERFORM get_address_from_bsec USING printtab-belnr
                                        printtab-buzei
                               CHANGING it_lfa1.
    PERFORM print_details_one_time.
  ENDIF.

ENDFORM.                    "print_certificate

*---------------------------------------------------------------------*
*       FORM fill_tmp_table_for_vendor                                *
*---------------------------------------------------------------------*
*       ........                                                      *
*---------------------------------------------------------------------*
FORM fill_tmp_table_for_vendor.
  tmp_printtab = save_printtab.
  APPEND tmp_printtab.
ENDFORM.                    "fill_tmp_table_for_vendor

*---------------------------------------------------------------------*
*       FORM print_details_normal                                     *
*---------------------------------------------------------------------*
*       ........                                                      *
*---------------------------------------------------------------------*
FORM print_details_normal.

  DATA : tds_calc TYPE i,
       sur_calc TYPE i,
       ecs_calc TYPE i.


  DATA :  tmp_count LIKE sy-tabix ,
          flg_new_page,
          tmp_mod   LIKE sy-tabix,
          tmp_lines LIKE sy-tabix.

  PERFORM start_form USING layout 'FIRST'.
  DESCRIBE TABLE printtab LINES tmp_lines.
  READ TABLE printtab INDEX 1.
  PERFORM select_pan.
  PERFORM print_header.
*  SORT printtab BY print_order .
  SORT printtab  BY sno gjahr budat.      "Note 891923
*  SORT printtab  BY gjahr budat.
  LOOP AT printtab WHERE wt_qbshh NE ''.
* Calculation for new page
    tmp_mod  = sy-tabix MOD 11.
    IF tmp_mod = tmp_count.
      flg_new_page = 'X'.
      tmp_count    = tmp_count + 1.
    ENDIF.
*** start sapna
* Logic for page numbering chngd
* Page no increment on customer change.
    ON CHANGE OF it_lfa1-lifnr.
      page_no = page_no + 1.
    ENDON.
*** end  sapna

* Printing headers and brought forward amount in new page
    IF flg_new_page = 'X' .
      PERFORM write_form USING 'MAIN_LINE' 'SET' 'BODY' 'MAIN'.
      PERFORM write_form USING 'CRFORWARD' 'SET' 'BODY' 'MAIN'.
      PERFORM new_page.
      PERFORM write_form USING 'MAIN_HEADING' 'SET' 'BODY' 'MAIN'.
      PERFORM write_form USING 'BRFORWARD' 'SET' 'BODY' 'MAIN'.
      flg_new_page = space.
      CLEAR tmp_count.
    ENDIF.
    PERFORM get_qsatz USING printtab-witht
                            printtab-wt_withcd
                   CHANGING printtab-qsatz.

*** Start of Changes made by Vivek for TDS, SURCHARGE, ECESS - 23Mar2007
***  Copied from J_1IEWT_CERT_F01
*** The rates are based on ZSECT and TaxType - WITHT & WT_WITHCD

*** 194A
    IF zsect = '194A'.
*** A1 - AA
      IF printtab-witht = 'A1' OR printtab-wt_withcd = 'AA'.
        tds_calc = 10 / 100 * printtab-wt_qsshh.
        printtab-tds_amount   = tds_calc.

        sur_calc = 0 * printtab-tds_amount.
        printtab-surc_amount  = sur_calc.
*printtab-ecess_amount = 2 / 1000 * ( printtab-tds_amount +
*printtab-surc_amount ).

        ecs_calc = ( printtab-wt_qbshh ) - ( printtab-tds_amount +
        printtab-surc_amount ).
        printtab-ecess_amount =  ecs_calc.

        CLEAR : tds_calc, sur_calc, ecs_calc.

      ENDIF.
*** A2 - AB
      IF printtab-witht = 'A2' OR printtab-wt_withcd = 'AB'.

        tds_calc   = 10 / 100   * printtab-wt_qsshh.
        printtab-tds_amount = tds_calc.

        sur_calc  = 10 / 100   * printtab-tds_amount.
        printtab-surc_amount = sur_calc.


        ecs_calc = ( printtab-wt_qbshh ) - ( printtab-tds_amount +
        printtab-surc_amount ).
        printtab-ecess_amount =  ecs_calc.

        CLEAR : tds_calc, sur_calc, ecs_calc.

      ENDIF.
*** A3 - AC
      IF printtab-witht = 'A3' OR printtab-wt_withcd = 'AC'.

        tds_calc   = 20 / 100 * printtab-wt_qsshh.
        printtab-tds_amount = tds_calc.

        sur_calc  = 10 / 100 * printtab-tds_amount.
        printtab-surc_amount = sur_calc.

        ecs_calc = ( printtab-wt_qbshh ) - ( printtab-tds_amount +
        printtab-surc_amount ).
        printtab-ecess_amount =  ecs_calc.



        CLEAR : tds_calc, sur_calc, ecs_calc.


      ENDIF.

*** 194C
    ELSEIF zsect = '194C'.

*** Z1 - CA
      IF printtab-witht = 'Z1' OR printtab-wt_withcd = 'CA' OR
      printtab-wt_withcd = 'C1'.

        tds_calc   = 2 / 100 * printtab-wt_qsshh.
        printtab-tds_amount = tds_calc.

        sur_calc  =       0 * printtab-tds_amount.
        printtab-surc_amount = sur_calc.

        ecs_calc = ( printtab-wt_qbshh ) - ( printtab-tds_amount +
        printtab-surc_amount ).
        printtab-ecess_amount =  ecs_calc.

        CLEAR : tds_calc, sur_calc, ecs_calc.



      ENDIF.
*** Z2 - CB
      IF printtab-witht = 'Z2' OR printtab-wt_withcd = 'CB' OR
      printtab-wt_withcd = 'C2'.

        tds_calc   =  2 / 100 * printtab-wt_qsshh.
        printtab-tds_amount = tds_calc.

        sur_calc  = 10 / 100 * printtab-tds_amount.
        printtab-surc_amount  = sur_calc.



        ecs_calc = ( printtab-wt_qbshh ) - ( printtab-tds_amount +
        printtab-surc_amount ).
        printtab-ecess_amount =  ecs_calc.

        CLEAR : tds_calc, sur_calc, ecs_calc.
      ENDIF.
*** Z3 - ZC
      IF printtab-witht = 'Z3' OR printtab-wt_withcd = 'CC' OR
      printtab-wt_withcd = 'C3'.

        tds_calc = 2 / 100 * printtab-wt_qsshh.
        printtab-tds_amount   =  tds_calc.

        sur_calc = 10 / 100 * printtab-tds_amount.
        printtab-surc_amount  = sur_calc.

        ecs_calc = ( printtab-wt_qbshh ) - ( printtab-tds_amount +
        printtab-surc_amount ).

*printtab-ecess_amount =  2 / 100 * ( printtab-tds_amount +
*printtab-surc_amount ).
        printtab-ecess_amount =  ecs_calc.


      ENDIF.
*** Z4 - CD
      IF printtab-witht = 'Z4' OR printtab-wt_withcd = 'CD' OR
      printtab-wt_withcd = 'C4'.

        tds_calc   = 1 / 100 * printtab-wt_qsshh.
        printtab-tds_amount = tds_calc.

        sur_calc  =       0 * printtab-tds_amount.
        printtab-surc_amount  = sur_calc.

        ecs_calc = ( printtab-wt_qbshh ) - ( printtab-tds_amount +
        printtab-surc_amount ).
        printtab-ecess_amount =  ecs_calc.

        CLEAR : tds_calc, sur_calc, ecs_calc.
        .

      ENDIF.
*** Z5 - CE
      IF printtab-witht = 'Z5' OR printtab-wt_withcd = 'CE' OR
      printtab-wt_withcd = 'C5'.

        tds_calc   =  1 / 100 * printtab-wt_qsshh.
        printtab-tds_amount = tds_calc.

        sur_calc  = 10 / 100 * printtab-tds_amount.
        printtab-surc_amount  = sur_calc.

        ecs_calc = ( printtab-wt_qbshh ) - ( printtab-tds_amount +
        printtab-surc_amount ).
        printtab-ecess_amount =  ecs_calc.

        CLEAR : tds_calc, sur_calc, ecs_calc.

      ENDIF.
*** Z6 - ZF
      IF printtab-witht = 'Z6' OR printtab-wt_withcd = 'CF' OR
      printtab-wt_withcd = 'C6'.

        tds_calc   =  1 / 100 * printtab-wt_qsshh.
        printtab-tds_amount = tds_calc.

        sur_calc  = 10 / 100 * printtab-tds_amount.
        printtab-surc_amount  = sur_calc.

        ecs_calc = ( printtab-wt_qbshh ) - ( printtab-tds_amount +
        printtab-surc_amount ).
        printtab-ecess_amount =  ecs_calc.

        CLEAR : tds_calc, sur_calc, ecs_calc.

      ENDIF.

    ELSEIF  zsect = '194H'.
*** Z7 - H1
      IF printtab-witht = 'Z7' OR printtab-wt_withcd = 'H1' OR
      printtab-wt_withcd = 'HA'.

        tds_calc   = 5 / 100 * printtab-wt_qsshh.
        printtab-tds_amount = tds_calc.

        sur_calc  =       0 * printtab-tds_amount.
        printtab-surc_amount  = sur_calc.

        ecs_calc = ( printtab-wt_qbshh ) - ( printtab-tds_amount +
        printtab-surc_amount ).
        printtab-ecess_amount =  ecs_calc.

        CLEAR : tds_calc, sur_calc, ecs_calc.

      ENDIF.
*** Z8 - H2
      IF printtab-witht = 'Z8' OR printtab-wt_withcd = 'H2' OR
      printtab-wt_withcd = 'HB'.

        tds_calc   =  5 / 100 * printtab-wt_qsshh.
        printtab-tds_amount = tds_calc.

        sur_calc  = 10 / 100 * printtab-tds_amount.
        printtab-surc_amount  = sur_calc.

        ecs_calc = ( printtab-wt_qbshh ) - ( printtab-tds_amount +
        printtab-surc_amount ).
        printtab-ecess_amount =  ecs_calc.

        CLEAR : tds_calc, sur_calc, ecs_calc.

      ENDIF.
*** Z9 - H3
      IF printtab-witht = 'Z9' OR printtab-wt_withcd = 'H3' OR
      printtab-wt_withcd = 'HC'.

        tds_calc   =  5 / 100 * printtab-wt_qsshh.
        printtab-tds_amount = tds_calc.

        sur_calc  = 10 / 100 * printtab-tds_amount.
        printtab-surc_amount  = sur_calc.

        ecs_calc = ( printtab-wt_qbshh ) - ( printtab-tds_amount +
        printtab-surc_amount ).
        printtab-ecess_amount =  ecs_calc.

        CLEAR : tds_calc, sur_calc, ecs_calc.

      ENDIF.

    ELSEIF  zsect = '194J'.

*** Y1-JA
      IF printtab-witht = 'Y1' OR printtab-wt_withcd = 'JA' OR
      printtab-wt_withcd = 'J1'.

        tds_calc   = 5 / 100 * printtab-wt_qsshh.
        printtab-tds_amount = tds_calc.

        sur_calc  =       0 * printtab-tds_amount.
        printtab-surc_amount  = sur_calc.

        ecs_calc = ( printtab-wt_qbshh ) - ( printtab-tds_amount +
        printtab-surc_amount ).
        printtab-ecess_amount =  ecs_calc.

        CLEAR : tds_calc, sur_calc, ecs_calc.

      ENDIF.
*** Y2 - JB
      IF printtab-witht = 'Y2' OR printtab-wt_withcd = 'JB' OR
      printtab-wt_withcd = 'J2'.

        tds_calc   =  5 / 100 * printtab-wt_qsshh.
        printtab-tds_amount = tds_calc.

        sur_calc  = 10 / 100 * printtab-tds_amount.
        printtab-surc_amount  = sur_calc.

        ecs_calc = ( printtab-wt_qbshh ) - ( printtab-tds_amount +
        printtab-surc_amount ).
        printtab-ecess_amount =  ecs_calc.

        CLEAR : tds_calc, sur_calc, ecs_calc.

      ENDIF.
*** Y3 - JC
      IF printtab-witht = 'Y3' OR printtab-wt_withcd = 'JC' OR
      printtab-wt_withcd = 'J3'.

        tds_calc   =  5 / 100 * printtab-wt_qsshh.
        printtab-tds_amount = tds_calc.

        sur_calc  = 10 / 100 * printtab-tds_amount.
        printtab-surc_amount  = sur_calc.

        ecs_calc = ( printtab-wt_qbshh ) - ( printtab-tds_amount +
        printtab-surc_amount ).
        printtab-ecess_amount =  ecs_calc.

        CLEAR : tds_calc, sur_calc, ecs_calc.

      ENDIF.

    ELSEIF  zsect = '194I'.

*** R1 - RA
      IF printtab-witht = 'R1' OR printtab-wt_withcd = 'RA'.

        tds_calc   = 15 / 100 * printtab-wt_qsshh.
        printtab-tds_amount = tds_calc.

        sur_calc  =        0 * printtab-tds_amount.
        printtab-surc_amount  = sur_calc.

        ecs_calc = ( printtab-wt_qbshh ) - ( printtab-tds_amount +
        printtab-surc_amount ).
        printtab-ecess_amount =  ecs_calc.

        CLEAR : tds_calc, sur_calc, ecs_calc.

      ENDIF.
*** R2 - RB
      IF printtab-witht = 'R2' OR printtab-wt_withcd = 'RB'.

        tds_calc   = 15 / 100 * printtab-wt_qsshh.
        printtab-tds_amount = tds_calc.

        sur_calc  = 10 / 100 * printtab-tds_amount.
        printtab-surc_amount  = sur_calc.

        ecs_calc = ( printtab-wt_qbshh ) - ( printtab-tds_amount +
        printtab-surc_amount ).
        printtab-ecess_amount =  ecs_calc.

        CLEAR: tds_calc, sur_calc, ecs_calc.

      ENDIF.
*** R3 - RC
      IF printtab-witht = 'R3' OR printtab-wt_withcd = 'RC'.

        tds_calc   = 20 / 100 * printtab-wt_qsshh.
        printtab-tds_amount = tds_calc.

        sur_calc  = 10 / 100 * printtab-tds_amount.
        printtab-surc_amount  = sur_calc.

        ecs_calc = ( printtab-wt_qbshh ) - ( printtab-tds_amount +
        printtab-surc_amount ).
        printtab-ecess_amount =  ecs_calc.

        CLEAR : tds_calc, sur_calc, ecs_calc.


      ENDIF.

    ENDIF.

*** Added by Vivek K on 28-May-2007 for Cheque #

    DATA: clrdoc LIKE bseg-augbl.

    SELECT SINGLE augbl FROM bseg INTO clrdoc WHERE
                     bukrs        = printtab-bukrs
              AND    belnr        = printtab-belnr
              AND    gjahr        = printtab-gjahr
              AND    koart        = 'S'                  " GL Accounts
              AND    shkzg        = 'H'                  " Only Credit
              AND    qsskz        = printtab-WITHT.
              " Withholding Tax Code Not equal to Blank

    CLEAR printtab-cheque_no.

    IF sy-subrc = 0 AND clrdoc <> ' '.

      SELECT SINGLE chect FROM payr INTO printtab-cheque_no WHERE
                        zbukr        = printtab-bukrs
                 AND    vblnr        = clrdoc.

    ENDIF.
*** End of addition by Vivek K


    MODIFY printtab .


    CLEAR clrdoc.

*** End of Changes made by Vivek for TDS, SURCHARGE, ECESS - 23Mar2007


    PERFORM write_form USING 'MAIN_DATA' 'SET' 'BODY' 'MAIN'.

    tmp_amount  = tmp_amount + printtab-wt_qbshh.
  ENDLOOP.

* Sum and footer data
  IF NOT printtab-secco IS INITIAL.                     "Note 604606
    PERFORM append_summary_secco  USING printtab-wt_acco
                                printtab-secco
                                tmp_amount
                                printtab-belnr          " Note 804529
                                printtab-gjahr.         " Note 804529
  ELSE.
    PERFORM append_summary USING printtab-wt_acco
                                printtab-bupla
                                tmp_amount
                                printtab-belnr         " Note 804529
                                printtab-gjahr.        " Note 804529
  ENDIF.
  PERFORM print_footer.
  PERFORM end_form.

ENDFORM.                    "print_details_normal

*---------------------------------------------------------------------*
*       FORM print_details_one_time                                   *
*---------------------------------------------------------------------*
*       ........                                                      *
*---------------------------------------------------------------------*
FORM print_details_one_time.

  CLEAR tmp_amount.
  PERFORM start_form USING layout 'FIRST'.
  PERFORM select_pan.
  PERFORM print_header.
  PERFORM get_qsatz USING printtab-witht
                          printtab-wt_withcd
                 CHANGING printtab-qsatz.
  PERFORM write_form USING 'MAIN_DATA' 'SET' 'BODY' 'MAIN'.
  tmp_amount  = tmp_amount + printtab-wt_qbshh.
* Sum and footer data
  IF NOT printtab-secco IS INITIAL.               "Note 604606
    PERFORM append_summary_secco  USING printtab-wt_acco
                                printtab-secco
                                tmp_amount
                                printtab-belnr    "Note 804529
                                printtab-gjahr.   "Note 804529
  ELSE.
    PERFORM append_summary USING printtab-wt_acco
                                printtab-bupla
                                printtab-wt_qbshh
                                printtab-belnr    "Note 804529
                                printtab-gjahr.   "Note 804529
  ENDIF.
  PERFORM print_footer.
  PERFORM end_form.

ENDFORM.                    "print_details_one_time

*---------------------------------------------------------------------*
*       FORM read_next_line                                           *
*---------------------------------------------------------------------*
*       ........                                                      *
*---------------------------------------------------------------------*
*  -->  p_index                                                       *
*  -->  p_lifnr                                                       *
*---------------------------------------------------------------------*
FORM read_next_line USING value(p_index)
                 CHANGING p_lifnr
                          p_bupla
                          p_rc.

  DATA: loc_print LIKE printtab.
  loc_print = printtab.
  p_index   = p_index + 1.

  READ TABLE printtab INDEX p_index.
  p_rc     = sy-subrc.
  p_lifnr  = printtab-wt_acco.
  p_bupla  = printtab-bupla.
  printtab = loc_print.

ENDFORM.                    "read_next_line

*---------------------------------------------------------------------*
*       FORM filter_data                                              *
*---------------------------------------------------------------------*
*       ........                                                      *
*---------------------------------------------------------------------*
FORM filter_data.
* Printtab contains the original data.
* If the following conditions apply, the records have to be filtered
* with the sum of tax amounts and only one record needs to be displayed.
* There is only one tax code for tax and surcharge .
* Document numbers, challan numbers and dates are same for the lines

  DATA : hold_tab  LIKE printtab OCCURS 0 WITH HEADER LINE,
         tmp_sum   LIKE bseg-dmbtr,
         tmp_sum_wt_basam LIKE with_item-wt_qsshh,  "Note 692642
          tmp_tabix LIKE sy-tabix.
  TYPES: BEGIN OF tp_index ,
           start(4) TYPE n ,  "change from 2 to 4 Note 803806
           end(4)   TYPE n,   "change from 2 to 4 Note 803806

  END OF tp_index.
  DATA : it_index  TYPE STANDARD TABLE OF tp_index  WITH HEADER LINE.
  DATA: lv_wt_qsshh LIKE with_item-wt_qsshh. "Note 850802

  TYPES: BEGIN OF rate_type ,        "Note 891923
          witht LIKE with_item-witht,
          wt_withcd LIKE with_item-wt_withcd,
          rate LIKE j_1iewt_surc1-j_1isurrat,
  END OF rate_type.

*---------------Declaration for legal change------------------------*
  "Note 891923
  DATA: surchtype_tab1 TYPE STANDARD TABLE OF rate_type WITH HEADER LINE
  ,
        surchtype_tab2 TYPE STANDARD TABLE OF rate_type WITH HEADER LINE
        ,
        ecesstype_tab1 TYPE STANDARD TABLE OF rate_type WITH HEADER LINE
        ,
        ecesstype_tab2 TYPE STANDARD TABLE OF rate_type WITH HEADER LINE
        .

  DATA:surc_wt_qbshh LIKE with_item-wt_qbshh,
       ecess_wt_qbshh LIKE with_item-wt_qbshh,
       tds_wt_qbshh LIKE with_item-wt_qbshh.

  "Change for Surcharge Error
  DATA:surc_wt_qbshh_tmp LIKE with_item-wt_qbshh,
       ecess_wt_qbshh_tmp LIKE with_item-wt_qbshh,
       tds_wt_qbshh_tmp LIKE with_item-wt_qbshh.

*----------------End of declaration---------------------------------*

*  SELECT SINGLE j_1isurc FROM  j_1iewt_comp
*            INTO  j_1iewt_comp-j_1isurc
*            WHERE bukrs     = zbukrs.
*  CHECK sy-subrc = 0
*    AND j_1iewt_comp-j_1isurc = 'X'.

* Check  for Surcharge as seperate  taxcode
  LOOP AT printtab.
*    READ TABLE printtab WITH KEY BELNR = printtab-belnr. " Note 843833
*      IF sy-tfill > 2.
    printtab-qsatz    = ( printtab-wt_qbshh / printtab-wt_qsshh )
                        * 100 .
    MODIFY printtab TRANSPORTING qsatz.
*      ELSE.
*        CONTINUE.
*      ENDIF.       Note 856124
  ENDLOOP.
  SELECT SINGLE * FROM  t001
      WHERE  bukrs   = zbukrs.
*  CHECK sy-subrc = 0  AND t001-surccm = 'X'.
  CHECK sy-subrc = 0.
  printtab_copy[] = printtab[]. "Note 826877

  SORT printtab BY belnr j_1iextchln j_1iextchdt.
  hold_tab[] = printtab[].

  LOOP AT printtab.
    CLEAR: it_index.
    LOOP AT hold_tab WHERE belnr       = printtab-belnr
                       AND wt_acco     = printtab-wt_acco
                       AND buzei       = printtab-buzei "Note 826877
                       AND j_1iextchln = printtab-j_1iextchln
                       AND j_1iextchdt = printtab-j_1iextchdt.
      IF it_index-start IS INITIAL.
        it_index-start = sy-tabix.
      ENDIF.
      tmp_tabix = sy-tabix.
    ENDLOOP.

    CHECK sy-subrc = 0 .
    it_index-end = tmp_tabix.
    CHECK NOT it_index-start IS INITIAL
      AND NOT it_index-end   IS INITIAL.
    APPEND it_index.
  ENDLOOP.
  printtab[] = printtab_copy[]. "Note 826877
  SORT it_index BY start end.
  DELETE ADJACENT DUPLICATES FROM it_index.

*---------start of change for implementation of legal change--------*
  "Note 891923
  SELECT witht wt_withcd FROM j_1iewtsurc INTO TABLE surchtype_tab1.
  SELECT witht wt_withcd FROM j_1iewtecess INTO TABLE ecesstype_tab1.

  SELECT witht wt_withcd j_1isurrat FROM j_1iewt_surc1 INTO TABLE
surchtype_tab2.
  SELECT witht wt_withcd j_1iecessrt FROM j_1iewt_ecess1 INTO TABLE
ecesstype_tab2.
*---------end of change for implementation of legal change--------*

  LOOP AT it_index.
    REFRESH hold_tab.
    APPEND LINES OF printtab
         FROM it_index-start TO it_index-end
           TO  hold_tab.
    CLEAR:tmp_sum, surc_wt_qbshh, tds_wt_qbshh, ecess_wt_qbshh.
    CLEAR: tmp_sum_wt_basam.   "Note 792298
    LOOP AT hold_tab.
      tmp_sum = tmp_sum + hold_tab-wt_qbshh.
*     Note 692642
      lv_wt_qsshh = ABS( hold_tab-wt_qsshh ). "Note 850802
      IF lv_wt_qsshh GT tmp_sum_wt_basam.
        tmp_sum_wt_basam = lv_wt_qsshh.
      ENDIF.  "Note 792298
*     Note 692642

*---------start of change for implementation of legal change--------*
      "Note 891923
      SELECT SINGLE * FROM t001 WHERE bukrs = hold_tab-bukrs AND surccm
      = 'X'.
      IF sy-subrc = 0.
        READ TABLE surchtype_tab1 WITH KEY
        witht = hold_tab-witht
        wt_withcd = hold_tab-wt_withcd.
        IF sy-subrc = 0 .
          surc_wt_qbshh = surc_wt_qbshh + hold_tab-wt_qbshh.
        ELSE.                                           "Note 910865
          SELECT SINGLE * FROM j_1iewt_ecflag WHERE bukrs =
          hold_tab-bukrs AND
       ecess_separate = 'X'.
          IF sy-subrc = 0.
            READ TABLE ecesstype_tab1 WITH KEY
            witht = hold_tab-witht
            wt_withcd = hold_tab-wt_withcd.
            IF sy-subrc = 0 .
              ecess_wt_qbshh = ecess_wt_qbshh + hold_tab-wt_qbshh.
            ELSE.
              tds_wt_qbshh = tds_wt_qbshh +  hold_tab-wt_qbshh.
            ENDIF.
          ENDIF.
        ENDIF.
      ELSE.
        SELECT SINGLE * FROM j_1iewt_ecflag WHERE bukrs = hold_tab-bukrs
 AND ecess_separate = 'X'.
        IF sy-subrc = 0.
          READ TABLE ecesstype_tab1 WITH KEY
          witht = hold_tab-witht
          wt_withcd = hold_tab-wt_withcd.
          IF sy-subrc = 0 .
            ecess_wt_qbshh = ecess_wt_qbshh + hold_tab-wt_qbshh.
          ELSE.
            READ TABLE surchtype_tab2 WITH KEY
            witht = hold_tab-witht
            wt_withcd = hold_tab-wt_withcd.
            IF sy-subrc = 0.
              tds_wt_qbshh_tmp = ( hold_tab-wt_qbshh ) *
                                 100 / ( 100 + surchtype_tab2-rate ).
              surc_wt_qbshh_tmp = ( tds_wt_qbshh_tmp *
              surchtype_tab2-rate
                                   ) / 100.
              tds_wt_qbshh = tds_wt_qbshh + tds_wt_qbshh_tmp.
              surc_wt_qbshh = surc_wt_qbshh + surc_wt_qbshh_tmp.
            ENDIF.
          ENDIF.
        ELSE.
          READ TABLE surchtype_tab2 WITH KEY
            witht = hold_tab-witht
            wt_withcd = hold_tab-wt_withcd.
          IF sy-subrc = 0.
            READ TABLE ecesstype_tab2 WITH KEY
              witht = hold_tab-witht
              wt_withcd = hold_tab-wt_withcd.
            IF sy-subrc = 0 .
              tds_wt_qbshh_tmp = ( hold_tab-wt_qbshh * 100 * 100 ) / (
                                  10000 + ( 100 *
              surchtype_tab2-rate ) + ( 100 + surchtype_tab2-rate ) *
              ecesstype_tab2-rate ).
              tds_wt_qbshh = tds_wt_qbshh + tds_wt_qbshh_tmp.
              surc_wt_qbshh_tmp = ( tds_wt_qbshh_tmp *
                                   surchtype_tab2-rate ) / 100.
              surc_wt_qbshh = surc_wt_qbshh + surc_wt_qbshh_tmp.
              ecess_wt_qbshh_tmp = ( ( tds_wt_qbshh_tmp +
                                    surc_wt_qbshh_tmp ) *
              ecesstype_tab2-rate ) / 100.
              ecess_wt_qbshh = ecess_wt_qbshh + ecess_wt_qbshh_tmp.
            ENDIF.
          ENDIF.
        ENDIF.
      ENDIF.

    ENDLOOP.
    READ TABLE printtab INDEX it_index-start.

    printtab-wt_qbshh = tmp_sum.
    printtab-tds_amount = tds_wt_qbshh.

    printtab-surc_amount = surc_wt_qbshh.
    printtab-ecess_amount = ecess_wt_qbshh.
    printtab-wt_qsshh = tmp_sum_wt_basam. "Note 850802
    printtab-qsatz    = ( printtab-wt_qbshh / printtab-wt_qsshh )
                        * 100 .
    MODIFY printtab INDEX it_index-start
         TRANSPORTING wt_qbshh qsatz wt_qsshh tds_amount surc_amount
ecess_amount."Note 792298/826877/856124
  ENDLOOP.
*---------end of change for implementation of legal change--------*

  REFRESH hold_tab.

  LOOP AT it_index.
    it_index-start = it_index-start + 1.
    APPEND LINES OF printtab
         FROM it_index-start TO it_index-end
           TO  hold_tab.
  ENDLOOP.

  LOOP AT hold_tab.
    DELETE printtab
          WHERE belnr = hold_tab-belnr
            AND gjahr = hold_tab-gjahr
            AND buzei = hold_tab-buzei
            AND witht = hold_tab-witht
            AND wt_withcd = hold_tab-wt_withcd.

  ENDLOOP.

ENDFORM.                    "filter_data

*---------------------------------------------------------------------*
*       FORM check_certificate                                        *
*---------------------------------------------------------------------*
*       ........                                                      *
*---------------------------------------------------------------------*
FORM check_certificate.
  CLEAR: bupla_cert, secco_cert.

  SELECT * FROM  j_1iewt_certif INTO j_1iewt_certif
          WHERE  bukrs       = zbukrs
          AND    qscod       = zsect
          AND    ctnumber    = zcertno
          AND    j_1icertdt  = zcerdt.
    IF sy-subrc = 0.
      bupla_cert = 'X'.
      EXIT.
    ENDIF.
  ENDSELECT.

  IF NOT bupla_cert = 'X'.
    SELECT * FROM  j_1iewt_certif_n INTO j_1iewt_certif_n
           WHERE  bukrs       = zbukrs
           AND    qscod       = zsect
           AND    ctnumber    = zcertno
           AND    j_1icertdt  = zcerdt.
      IF sy-subrc = 0.
        secco_cert = 'X'.
        EXIT.
      ENDIF.
    ENDSELECT.
  ENDIF.

  CHECK sy-subrc <> 0.
  MESSAGE e000 WITH 'No Certificates found'.

ENDFORM.                    "check_certificate



*---------------------------------------------------------------------*
*       FORM fill_withtab                                             *
*---------------------------------------------------------------------*
*       ........                                                      *
*---------------------------------------------------------------------*
FORM fill_withtab_reprint.

  SELECT        * FROM  with_item
         WHERE  bukrs        = j_1iewt_certif-bukrs
         AND    gjahr        = j_1iewt_certif-gjahr
         AND    wt_stat      = ' '
         AND    koart        = 'K'
         AND    ctnumber     =  j_1iewt_certif-ctnumber
         AND    wt_opowtpd   NE 'X'
         AND    wt_gruwtpd   NE 'X' .
* Validate for BUPLA here itself.
    CHECK sy-subrc = 0 .
    READ TABLE taxtab WITH KEY witht = with_item-witht
                           wt_withcd = with_item-wt_withcd.
    CHECK sy-subrc = 0 .

    SELECT  SINGLE budat FROM  bkpf INTO bkpftab-budat
           WHERE  bukrs  = j_1iewt_certif-bukrs
           AND    belnr  = with_item-belnr
           AND    gjahr  = j_1iewt_certif-gjahr.

    SELECT SINGLE bupla  FROM bseg INTO bseg-bupla
                WHERE  bukrs        = j_1iewt_certif-bukrs
                AND    belnr        = with_item-belnr
                AND    gjahr        = j_1iewt_certif-gjahr
                AND    buzei        = with_item-j_1ibuzei
                AND    ktosl        = 'WIT'.
    CHECK sy-subrc = 0 .
    PERFORM select_challan_reprint.
* Move data to withtab.
    MOVE-CORRESPONDING with_item TO withtab.
    MOVE: bkpftab-budat TO withtab-budat,
          bseg-bupla TO withtab-bupla,
          bseg-secco TO withtab-secco,
          challantab-j_1iextchln TO withtab-j_1iextchln,
          challantab-j_1iextchdt TO withtab-j_1iextchdt,
          challantab-bankl       TO withtab-bankl,
          taxtab-method TO withtab-method.
    APPEND withtab.
  ENDSELECT.

ENDFORM.                    "fill_withtab_reprint

*---------------------------------------------------------------------*
*       FORM check_dates                                              *
*---------------------------------------------------------------------*
*       ........                                                      *
*---------------------------------------------------------------------*
*  -->  start_date                                                    *
*  -->  end_date                                                      *
*---------------------------------------------------------------------*
FORM check_dates_reprint USING start_date end_date .

  CHECK start_date > end_date.
  MESSAGE e000 WITH
  'Certificate Reprint date should be'  ' on or later than '
    'Certificate date'.


ENDFORM.                    "check_dates_reprint

*---------------------------------------------------------------------*
*       FORM select_challan_reprint                                   *
*---------------------------------------------------------------------*
*       ........                                                      *
*---------------------------------------------------------------------*
FORM select_challan_reprint.
  SELECT *
         FROM  j_1iewtchln INTO challantab
         WHERE  bukrs        = with_item-bukrs
*        AND    belnr        = with_item-belnr
*        AND    gjahr        = with_item-gjahr
         AND    j_1iintchln  = with_item-j_1iintchln
         AND    j_1iintchdt  = with_item-j_1iintchdt.
    EXIT.
  ENDSELECT.
ENDFORM.                    "select_challan_reprint

*---------------------------------------------------------------------*
*       FORM fill_nature_of_payment                                   *
*---------------------------------------------------------------------*
*       ........                                                      *
*---------------------------------------------------------------------*
FORM fill_nature_of_payment.

  SELECT SINGLE text40 FROM  t059ot INTO t059o-text40
         WHERE  land1     = t001-land1
         AND spras = sy-langu
         AND    wt_qscod  = zsect.

ENDFORM.                    "fill_nature_of_payment


*&---------------------------------------------------------------------*
*&      Form  check_secco
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM check_secco.
  CLEAR seccode.
  SELECT COUNT( * ) FROM seccode
             WHERE bukrs  = zbukrs
               AND seccode IN zsecco.
  IF sy-subrc <> 0.
    MESSAGE e707.
  ENDIF .
ENDFORM.                    " check_secco

*&---------------------------------------------------------------------*
*&      Form  read_next_line_secco
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*      -->P_SY_TABIX  text
*      <--P_LOC_LIFNR  text
*      <--P_LOC_SECCO  text
*      <--P_RC  text
*----------------------------------------------------------------------*
FORM read_next_line_secco USING value(p_index)
                 CHANGING p_lifnr
                          p_secco
                          p_rc.
  DATA: loc_print LIKE printtab.
  loc_print = printtab.
  p_index   = p_index + 1.

  READ TABLE printtab INDEX p_index.
  p_rc     = sy-subrc.
  p_lifnr  = printtab-wt_acco.
  p_secco  = printtab-secco.
  printtab = loc_print.

ENDFORM.                    " read_next_line_secco


*&---------------------------------------------------------------------*
*&      Form  select_data_for_layout_secco
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM select_data_for_layout_secco.

  PERFORM fill_adrc_for_secco.
  PERFORM select_adrc USING t001-adrnr CHANGING t_adrc.
  PERFORM fill_nature_of_payment.

ENDFORM.                    " select_data_for_layout_secco


*&---------------------------------------------------------------------*
*&      Form  fill_adrc_for_secco
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM fill_adrc_for_secco.
  CLEAR adrc.
  SELECT  SINGLE adrnr FROM  seccode
          INTO seccode-adrnr
          WHERE  bukrs  = zbukrs
            AND  seccode = printtab-secco.

  CHECK NOT   seccode-adrnr IS INITIAL.
  PERFORM select_adrc_secco USING seccode-adrnr CHANGING adrc.

ENDFORM.                    " fill_adrc_for_secco
*&---------------------------------------------------------------------*
*&      Form  select_adrc_secco
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*      -->P_SECCODE_ADRNR  text
*      <--P_ADRC  text
*----------------------------------------------------------------------*
FORM select_adrc_secco USING    p_adrnr
                 CHANGING p_adrc STRUCTURE adrc.

  SELECT * FROM  adrc INTO p_adrc
         WHERE  addrnumber  = p_adrnr.
    EXIT.
  ENDSELECT.

ENDFORM.                    " select_adrc_secco
*&---------------------------------------------------------------------*
*&      Form  append_summary_secco
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*      -->P_PRINTTAB_WT_ACCO  text
*      -->P_PRINTTAB_SECCO  text
*      -->P_TMP_AMOUNT  text
*----------------------------------------------------------------------*
FORM append_summary_secco USING   p_lifnr p_secco  p_amount p_belnr
p_gjahr.   " Note 804529
  it_summary-lifnr = p_lifnr.
  it_summary-secco = p_secco.
  it_summary-certno = cert_number.
  it_summary-amount = p_amount.
  it_summary-belnr = p_belnr.   " Note 804529
  it_summary-gjahr = p_gjahr.   " Note 804529
  APPEND it_summary.

ENDFORM.                    " append_summary_secco
*&---------------------------------------------------------------------*
*&      Form  select_form_bupla
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*      -->P_ZBUPLA_LOW  text
*      <--P_LAYOUT  text
*----------------------------------------------------------------------*
FORM select_form_bupla USING p_bupla CHANGING p_form.

  SELECT SINGLE tdform  FROM  j_1iewt_cert INTO p_form
        WHERE  bukrs    = zbukrs
         AND    bupla   = p_bupla
         AND    qscod   = zsect.

  IF layout = space.
    MESSAGE e743.
  ENDIF.

ENDFORM.                    " select_form_bupla
*&---------------------------------------------------------------------*
*&      Form  fill_withtab_reprint_secco
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM fill_withtab_reprint_secco.

  SELECT * FROM  with_item
          WHERE  bukrs        = j_1iewt_certif_n-bukrs
          AND    gjahr        = j_1iewt_certif_n-gjahr
          AND    wt_stat      = ' '
          AND    koart        = 'K'
          AND    ctnumber     =  j_1iewt_certif_n-ctnumber
          AND    wt_opowtpd   NE 'X'
          AND    wt_gruwtpd   NE 'X' .
* Validate for BUPLA here itself.
    CHECK sy-subrc = 0 .
    READ TABLE taxtab WITH KEY witht = with_item-witht
                           wt_withcd = with_item-wt_withcd.
    CHECK sy-subrc = 0 .

    SELECT  SINGLE budat FROM  bkpf INTO bkpftab-budat
           WHERE  bukrs  = j_1iewt_certif_n-bukrs
           AND    belnr  = with_item-belnr
           AND    gjahr  = j_1iewt_certif_n-gjahr.

    SELECT SINGLE secco  FROM bseg INTO bseg-secco
                          WHERE  bukrs        = j_1iewt_certif_n-bukrs
                          AND    belnr        = with_item-belnr
                          AND    gjahr        = j_1iewt_certif_n-gjahr
                          AND    buzei        = with_item-j_1ibuzei
                          AND    ktosl        = 'WIT'.
    CHECK sy-subrc = 0 .
    PERFORM select_challan_reprint.
* Move data to withtab.
    MOVE-CORRESPONDING with_item TO withtab.
    MOVE: bkpftab-budat TO withtab-budat,
          bseg-bupla TO withtab-bupla,
          bseg-secco TO withtab-secco,
          challantab-j_1iextchln TO withtab-j_1iextchln,
          challantab-j_1iextchdt TO withtab-j_1iextchdt,
          challantab-bankl       TO withtab-bankl,
          taxtab-method TO withtab-method.
    APPEND withtab.
  ENDSELECT.

ENDFORM.                    " fill_withtab_reprint_secco

*&---------------------------------------------------------------------*
*&      Form  callback_bsik
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*------------------------------------------------------------------
FORM callback_bsik USING name  TYPE ldbn-ldbnode
                        wa    TYPE bsik
                        evt   TYPE c
                        check TYPE c.
  CLEAR wa_bsik.
  MOVE-CORRESPONDING wa TO wa_bsik.

*  insert wa_bkpf into table bkpftab.
  APPEND wa_bsik TO bsiktab.


ENDFORM.                    "callback_bsik


* ---------- Note 887656 ----------------------------------------------
*&---------------------------------------------------------------------*
*&      Form  callback_bkpf
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*      -->NAME       text
*      -->WA         text
*      -->EVT        text
*      -->CHECK      text
*----------------------------------------------------------------------*
FORM callback_bkpf USING name  TYPE ldbn-ldbnode
                          wa    TYPE bkpf
                          evt   TYPE c
                          check TYPE c.
  CLEAR wa_bkpf.
  MOVE-CORRESPONDING wa TO wa_bkpf.

*  insert wa_bkpf into table bkpftab.
  IF wa_bkpf-stblg IS INITIAL.
    APPEND wa_bkpf TO bkpftab.
  ENDIF.

ENDFORM.                    "callback_bkpf

*&---------------------------------------------------------------------*
*&      Form  callback_bseg
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*      -->NAME       text
*      -->WA         text
*      -->EVT        text
*      -->CHECK      text
*----------------------------------------------------------------------*
FORM callback_bseg USING name  TYPE ldbn-ldbnode
                          wa    TYPE bseg
                          evt   TYPE c
                          check TYPE c.
  CLEAR wa_bseg.
  MOVE-CORRESPONDING wa TO wa_bseg.

*  insert wa_bseg into  table bsegtab.
  APPEND wa_bseg TO bsegtab.
ENDFORM.                    "callback_bseg

*&---------------------------------------------------------------------*
*&      Form  callback_with
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*      -->NAME       text
*      -->WA         text
*      -->EVT        text
*      -->CHECK      text
*----------------------------------------------------------------------*
FORM callback_with USING name  TYPE ldbn-ldbnode
                          wa    TYPE with_item
                          evt   TYPE c
                          check TYPE c.
  DATA : v_gjahr(4) TYPE n.

  READ TABLE taxtab WITH KEY witht = wa-witht
                             wt_withcd = wa-wt_withcd.
  CHECK sy-subrc = 0.
  IF wa-wt_stat = ' ' AND    wa-koart = 'K'  AND    wa-wt_acco IN
zvendor
    AND wa-ctnumber = ' ' AND  wa-wt_opowtpd NE 'X' AND wa-wt_gruwtpd NE
 'X' AND wa-j_1iewtrec NE 'B'.

    SELECT SINGLE augbl augdt FROM bsas INTO (bsas-augbl,bsas-augdt)
                             WHERE bukrs = wa-bukrs
                             AND   hkont = wa-hkont
                             AND   gjahr = wa-gjahr
                             AND   belnr = wa-belnr
                             AND   buzei = wa-j_1ibuzei.
    CHECK sy-subrc = 0 .
    SELECT SINGLE gjahr FROM bkpf INTO v_gjahr
                                  WHERE bukrs = wa-bukrs
                                  AND   belnr = bsas-augbl
                                  AND   budat = bsas-augdt.

*      CALL FUNCTION 'J_1I6_DETERMINE_EXC_YEAR'
*        EXPORTING
*          I_BUKRS      = with_item-bukrs
*          I_BUDAT      = bsas-augdt
*        IMPORTING
*          EXCISE_YEAR  = v_gjahr
*        EXCEPTIONS
*          MISS_COMPANY = 1
*          OTHERS       = 2.

    READ TABLE challantab WITH KEY   bukrs  = wa-bukrs
                                     belnr  = bsas-augbl
                                     gjahr  = v_gjahr.


    CHECK sy-subrc = 0 .

    IF NOT wa_bseg-secco IN zsecco.
      CHECK wa_bseg-bupla IN zsecco.
    ENDIF.
    MOVE-CORRESPONDING wa TO withitem_wa.
    withitem_wa-budat = wa_bkpf-budat.
    withitem_wa-bupla = wa_bseg-bupla.
    withitem_wa-secco = wa_bseg-secco.
    withitem_wa-j_1iextchln = challantab-j_1iextchln.
    withitem_wa-j_1iextchdt = challantab-j_1iextchdt.
    withitem_wa-bankl = challantab-bankl.
    withitem_wa-method = taxtab-method.

    READ TABLE jvtab WITH KEY wt_withcd = withitem_wa-wt_withcd
                                 augbl = withitem_wa-belnr.
    IF sy-subrc = 0.
      withitem_wa-wt_qbshh = withitem_wa-wt_qbshh - jvtab-wt_qbshh.
      withitem_wa-wt_qbshb = withitem_wa-wt_qbshb - jvtab-wt_qbshb.
      withitem_wa-wt_qszrt = ' '.
      withitem_wa-qsatz = ( withitem_wa-wt_qbshh / withitem_wa-wt_qsshh
      )
                                                            * 100.
    ENDIF.

*  insert withitem_wa into table withtab.
    APPEND withitem_wa TO withtab.
    CLEAR withitem_wa.
  ENDIF.
ENDFORM.                    "fill_withtab
*&---------------------------------------------------------------------*
*&      Form  SELECT_JV
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM select_jv .


  DATA: BEGIN OF it_bkpf OCCURS 0.
          INCLUDE STRUCTURE bkpf.
  DATA : buzei LIKE bseg-buzei.
  DATA : wrbtr LIKE bseg-wrbtr.
  DATA : END OF it_bkpf.

  DATA : it_bseg LIKE bseg OCCURS 0 WITH HEADER LINE,
         xblnr LIKE bkpf-xblnr,
         buzei LIKE bseg-buzei,
         wa LIKE LINE OF it_bkpf.


  DELETE printtab WHERE j_1iewtrec EQ 'J'.

  IF sy-subrc EQ 0.

    SELECT * FROM bkpf INTO CORRESPONDING FIELDS OF TABLE it_bkpf
             WHERE bukrs = zbukrs
               AND gjahr = zyear
               AND tcode = 'J1INJV'
               AND xblnr NE space
               AND budat IN zpdate
               AND blart IN zdoctype
               AND stgrd NE space.

    LOOP AT it_bkpf INTO wa.

      SPLIT wa-xblnr AT '-' INTO xblnr buzei.

      IF sy-subrc = 0.

        REPLACE ALL OCCURRENCES OF '*' IN xblnr WITH space.
        CONDENSE xblnr NO-GAPS.
        CONDENSE buzei NO-GAPS.
        wa-xblnr = xblnr.
        wa-buzei = buzei.
        MODIFY it_bkpf FROM wa TRANSPORTING xblnr buzei.

      ENDIF.

    ENDLOOP.


    SELECT * FROM bseg INTO TABLE it_bseg
             FOR ALL ENTRIES IN it_bkpf
             WHERE bukrs = it_bkpf-bukrs
               AND belnr = it_bkpf-belnr
               AND gjahr = it_bkpf-gjahr.


    LOOP AT it_bkpf.

      CLEAR printtab.
      READ TABLE printtab WITH KEY bukrs = it_bkpf-bukrs
                                   belnr = it_bkpf-xblnr
                                   gjahr = it_bkpf-gjahr
                                   j_1ibuzei = it_bkpf-buzei.

      IF sy-subrc = 0.

        CLEAR it_bseg.

        READ TABLE it_bseg WITH KEY bukrs = it_bkpf-bukrs
                                    belnr = it_bkpf-belnr
                                    gjahr = it_bkpf-gjahr
                                    koart = 'S'
                                    hkont = printtab-hkont.


        IF sy-subrc = 0.
          IF it_bseg-shkzg = 'S'.
            printtab-wt_qbshh = printtab-wt_qbshh - it_bseg-dmbtr.
            printtab-wt_qbshb = printtab-wt_qbshb - it_bseg-wrbtr.
          ELSE.
            printtab-wt_qbshh = printtab-wt_qbshh + it_bseg-dmbtr.
            printtab-wt_qbshb = printtab-wt_qbshb + it_bseg-wrbtr.
          ENDIF.

          MODIFY TABLE printtab.

        ENDIF.
      ENDIF.
    ENDLOOP.

  ENDIF.



ENDFORM.                    " SELECT_JV

<u><b>Inculde Report for Table declaration</b></u>

*----------------------------------------------------------------------*
*   INCLUDE ZJ_1IEWT_CERT_TOP                                   *
*----------------------------------------------------------------------*
*----------------------------------------------------------------------*
*                 TABLES                                       *
*----------------------------------------------------------------------*

TABLES: bkpf,
        bseg,
        bsas,
        with_item,
        j_1iewtchln,
        j_1iewt_cert,
        j_1iewt_certno,
        j_1iewt_certif,
        j_1imovend,
        j_1imocust,
        t059z,
        t059p,
        t001,
        j_1bbranch,
        t059ot,
        t059o,
        t001z,
        t059fb,
        t059c,
        skb1,
        adrc,
        sadr,
        itcpo,
        lfb1,
        knb1,
        t012,
        seccode,            " Note 604606
        j_1iewt_cert_n,     " Note 604606
        j_1iewt_certif_n,   " Note 604606
        j_1iewt_ecflag.     " Note 910865

*----------------------------------------------------------------------*
*                 DATA                                                 *
*----------------------------------------------------------------------*
DATA : lin             TYPE i,
       cert_number     LIKE inrdp-fromnumber,
       flg_first_time  TYPE c VALUE 'X' ,
       tmp_amount      LIKE bseg-dmbtr,
       layout          LIKE  itcta-tdform,
       bankname        LIKE bnka-banka,
       bankbrnch       LIKE bnka-brnch,
       bankcity        LIKE bnka-ort01,
       total_challan_amt LIKE bseg-dmbtr,
       total_amt       LIKE  bseg-dmbtr,
       cnt_print_order LIKE sy-tabix,
       rc              LIKE sy-subrc,
       con_reprint     TYPE c VALUE space, "Set as X for reprint program
       girno           like t001z-paval.
*----------------------------------------------------------------------*
*                 INTERNAL TABLES                              *
*----------------------------------------------------------------------*
DATA : BEGIN OF withtab OCCURS  0.
        INCLUDE STRUCTURE with_item.
DATA:    budat       LIKE bkpf-budat,
         bupla       LIKE bseg-bupla,
         secco       LIKE bseg-secco,                      " Note 604606
         j_1iextchln LIKE j_1iewtchln-j_1iextchln,
         j_1iextchdt LIKE j_1iewtchln-j_1iextchdt,
         bankl       LIKE j_1iewtchln-bankl,
         flag        TYPE c,
         no_print    TYPE c,
         method      type c,              "I- Invoice, P- Downpayment
         print_order LIKE sy-tabix,
         lifnr       LIKE bseg-lifnr,     "Note 704757
        END OF withtab.

DATA: begin of bkpftab OCCURS 0.
      include structure  bkpf .
data : rev_ind(1).
data : end of bkpftab.
data : challantab LIKE j_1iewtchln OCCURS 0 WITH HEADER LINE.

data: BEGIN OF taxtab OCCURS 0 .
        INCLUDE STRUCTURE  t059z .
DATA:   method ,                     "I-Invoice and P-Payment
      END OF taxtab.

*Note 773106

*DATA: invtab LIKE withtab OCCURS 0 WITH HEADER LINE,
 DATA: paytab LIKE withtab OCCURS 0 WITH HEADER LINE.

data: begin of invtab occurs 0.
      include structure withtab.
data : base_mod type c.
data : end of invtab.


data:  bEGIN OF it_lfa1 OCCURS 0.
        INCLUDE STRUCTURE lfa1.
DATA :  one_time ,
        bupla LIKE bseg-bupla,
        secco like bseg-secco,                             " Note 604606
        str_suppl1 LIKE adrc-str_suppl1,                " Street 2
        str_suppl2 LIKE adrc-str_suppl2,                " Street 3
        street     LIKE adrc-street    ,
        city1      LIKE adrc-city1,
        city2      LIKE adrc-city2     ,       "District
        post_code1 LIKE adrc-post_code1,      " Post code
        pan        LIKE j_1imovend-j_1ipanno,
       END OF it_lfa1.

*data for reprint program

DATA: it_cert LIKE j_1iewt_certif OCCURS 0 WITH HEADER LINE,
      t_adrc  LIKE adrc.

DATA: BEGIN OF temp_withtab OCCURS 0.
  DATA: belnr LIKE withtab-belnr,
        buzei like withtab-buzei,
        wt_qsshh LIKE withtab-wt_qsshh,
        wt_qbshh LIKE withtab-wt_qbshh,
        qsatz LIKE withtab-qsatz.
  DATA: END OF temp_withtab.

data : BEGIN OF printtab OCCURS 0 .
        INCLUDE STRUCTURE invtab.



DATA :  sno LIKE sy-tabix,                  "Note 891923
        tds_amount LIKE bseg-wrbtr,
        surc_amount LIKE bseg-wrbtr,
        ecess_amount LIKE bseg-wrbtr,
        cheque_no like inrdp-fromnumber,
        banka LIKE bnka-banka,
        ort01 LIKE bnka-ort01,
*** Changes by Vivek 01-Jun-06
        brnch LIKE bnka-brnch,
*        brnch LIKE t012-stcd1,
***END OF Changes by Vivek 01-Jun-06
        j_1itdbank like J_1ICERTIF-j_1itdbank,  " Note 912767
        word LIKE spell-word,
        paise LIKE spell-decword,
        total_tax LIKE bseg-dmbtr, "sapna 040507
       END OF printtab.
DATA : BEGIN OF it_summary OCCURS 0,
        lifnr LIKE lfa1-lifnr,
        bupla LIKE bseg-bupla,
        secco LIKE bseg-secco,                           " Note 604606
        certno LIKE inrdp-fromnumber,
        amount LIKE bseg-wrbtr,
        belnr LIKE bseg-belnr,     " Note 804529
        gjahr LIKE bseg-gjahr,     " Note 804529
       END OF it_summary.

DATA: tmp_printtab LIKE printtab OCCURS 0 WITH HEADER LINE,
      save_printtab LIKE printtab OCCURS 0 WITH HEADER LINE,
      printtab_copy LIKE printtab OCCURS 0 WITH HEADER LINE."Note 826877

DATA : BEGIN OF update_tab OCCURS 0.
        INCLUDE STRUCTURE with_item.
DATA : END OF update_tab.

data: JVTAB like with_item occurs 10 with header line.

DATA: BUPLA_CERT TYPE C,
      SECCO_CERT TYPE C.

DATA : BEGIN OF with_tab OCCURS 0.        "Note 887656
        INCLUDE STRUCTURE with_item.
DATA : END OF with_tab.

DATA: BEGIN OF bsegtab OCCURS 0.
        INCLUDE STRUCTURE  bseg .
DATA : END OF bsegtab.

DATA: wa_bkpf like line of bkpftab,
      wa_bseg like line of bsegtab.

DATA: callback TYPE TABLE OF ldbcb,
      callback_wa LIKE LINE OF callback.

DATA: seltab TYPE TABLE OF rsparams,
      seltab_wa LIKE LINE OF seltab.

DATA: withitem_wa LIKE LINE OF withtab.
*Note 891565
 DATA : BEGIN OF BSIKTAB OCCURS 0.
         INCLUDE STRUCTURE BSIK.
 DATA: END OF BSIKTAB.
 DATA: WA_BSIK LIKE LINE OF  BSIKTAB.

 data : PAGE_NO TYPE N.

Reward all helpfull answers

Regards

Pavan