0% found this document useful (0 votes)
291 views42 pages

ZMT R Fi Bankappl Form

This class implements a method called pop_final_tab_fi that populates a final internal table for FI transactions. It declares local data types and data objects. It then selects and processes data from various database tables related to accounting documents, partners, customers, vendors to populate internal tables for further processing.
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as TXT, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
291 views42 pages

ZMT R Fi Bankappl Form

This class implements a method called pop_final_tab_fi that populates a final internal table for FI transactions. It declares local data types and data objects. It then selects and processes data from various database tables related to accounting documents, partners, customers, vendors to populate internal tables for further processing.
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as TXT, PDF, TXT or read online on Scribd
You are on page 1/ 42

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

* Class Implementation
*--------------------------------------------------------------------*
CLASS lcl_display IMPLEMENTATION.

* Populate Final Internal Table for the FI- Transactions


METHOD pop_final_tab_fi.

*--------------------------------------------------------------------*
* Local Types and Declarations
*--------------------------------------------------------------------*

TYPES : BEGIN OF typ_bp,


partner TYPE but0bk-partner,
bkvid TYPE but0bk-bkvid,
banks TYPE but0bk-banks,
bankl TYPE but0bk-bankl,
bankn TYPE but0bk-bankn,
bkref TYPE but0bk-bkref,
koinh TYPE but0bk-koinh,
accname TYPE but0bk-accname,
END OF typ_bp,

BEGIN OF typ_kna1,
kunnr TYPE kna1-kunnr,
land1 TYPE kna1-land1,
name1 TYPE kna1-name1,
adrnr TYPE kna1-adrnr,
END OF typ_kna1,

BEGIN OF typ_lfa1,
lifnr TYPE lfa1-lifnr,
land1 TYPE lfa1-land1,
name1 TYPE lfa1-name1,
adrnr TYPE lfa1-adrnr,
koinh TYPE lfbk-koinh,
END OF typ_lfa1,

BEGIN OF typ_adr6,
addrnumber TYPE adr6-addrnumber,
smtp_addr TYPE adr6-smtp_addr,
END OF typ_adr6.

DATA : lt_but0bk TYPE TABLE OF typ_bp,


lt_kna1 TYPE TABLE OF typ_kna1,
lt_lfa1 TYPE TABLE OF typ_lfa1,
lt_adr6 TYPE TABLE OF typ_adr6.

DATA : ls_lfa1 TYPE typ_lfa1,


ls_but0bk TYPE typ_bp,
ls_t012 TYPE t012.

*--------------------------------------------------------------------*
* F-48 - Advance >> Special Indicator , KZ
* F-53 - Payments >> No Special Indicator , KZ.
* FB50 - Finance >> SA , Debit and Credit
*--------------------------------------------------------------------*

*--------------------------------------------------------------------*
* G/L account master (company code)
* List out G/L's of the BankId
*--------------------------------------------------------------------*
SELECT bukrs, " Company Code
saknr, " G/L Account
hbkid " House bank
FROM skb1
INTO TABLE @DATA(lt_skb1)
WHERE bukrs = 1000 AND
hbkid IN @s_hbnk.

* BREAK charanp.

*--------------------------------------------------------------------*
* FI Document
*--------------------------------------------------------------------*
IF lt_skb1 IS NOT INITIAL.

SELECT rldnr ,
rbukrs,
gjahr ,
belnr ,
docln ,
rtcur ,
racct , " G/L Account Number
rcntr , " Cost Center
prctr , " Profit Center
tsl , " Amount in Balance Transaction Currency
wsl , " Amount in Transaction Currency
drcrk , " Debit/Credit ind
budat , " Posting Date
bldat , " Document Date
blart , " Document type - KZ / KR / SA /
bschl , " Posting Key
ktosl , " Transaction
usnam , " User Name
lifnr , " Vendor
kunnr , " Customer
koart , " Account type
umskz , " Special G/L Ind.
gkont " Offsetting Account
FROM acdoca
##DB_FEATURE_MODE[TABLE_LEN_MAX1]
INTO TABLE @DATA(lt_acdoca_bank) " House Bank Specific Documents
FOR ALL ENTRIES IN @lt_skb1
WHERE rldnr EQ '0L'
AND rbukrs EQ @lt_skb1-bukrs
AND belnr IN @s_docno
AND racct EQ @lt_skb1-saknr
AND budat IN @s_posdat
AND blart IN ('KZ' , 'SA' )
AND usnam IN @s_user
AND ( awtyp_rev EQ @space OR awref_rev EQ @space ).
IF lt_acdoca_bank IS NOT INITIAL.

SORT lt_acdoca_bank BY rbukrs gjahr belnr.

*--------------------------------------------------------------------*
* Fetch Accounting Document Header Data
*--------------------------------------------------------------------*
SELECT *
FROM bkpf
INTO TABLE @DATA(lt_bkpf)
FOR ALL ENTRIES IN @lt_acdoca_bank
WHERE bukrs = @lt_acdoca_bank-rbukrs AND
gjahr = @lt_acdoca_bank-gjahr AND
belnr = @lt_acdoca_bank-belnr AND
stgrd EQ @space .

SELECT rldnr ,
rbukrs,
gjahr ,
belnr ,
docln ,
rtcur ,
racct , " G/L Account Number
rcntr , " Cost Center
prctr , " Profit Center
tsl , " Amount in Balance Transaction Currency
wsl , " Amount in Transaction Currency
drcrk , " Debit/Credit ind
budat , " Posting Date
bldat , " Document Date
blart , " Document type - KZ / KR / SA /
bschl , " Posting Key
ktosl , " Transaction
usnam , " User Name
lifnr , " Vendor
kunnr , " Customer
koart , " Account type
umskz , " Special G/L Ind.
gkont " Offsetting Account
FROM acdoca
##DB_FEATURE_MODE[TABLE_LEN_MAX1]
INTO TABLE @DATA(lt_acdoca_ben) " All Documents - then pick only
Beneficiary Specific Documents
FOR ALL ENTRIES IN @lt_acdoca_bank
WHERE rldnr EQ '0L'
AND rbukrs EQ @lt_acdoca_bank-rbukrs
AND belnr EQ @lt_acdoca_bank-belnr
AND gjahr EQ @lt_acdoca_bank-gjahr
AND budat IN @s_posdat
AND blart EQ @lt_acdoca_bank-blart " Doc. Type - KZ / SA
AND usnam IN @s_user
AND ktosl EQ @space " No WithHolding Tax
AND racct NE @lt_acdoca_bank-racct. " Do not consider the House
Bank Account records- as they already existed in LT_ACDOCA_BANK

SORT : lt_bkpf BY bukrs gjahr belnr,


lt_acdoca_ben BY rbukrs gjahr belnr racct lifnr.
DELETE ADJACENT DUPLICATES FROM lt_acdoca_ben COMPARING rbukrs gjahr belnr
racct lifnr.
** Delete the House Bank Account records - as they already existed in
LT_ACDOCA_BANK
* LOOP AT lt_skb1 INTO DATA(ls_skb1).
*
* DELETE lt_acdoca_ben WHERE racct = ls_skb1-saknr.
*
* ENDLOOP.

IF lt_acdoca_ben IS NOT INITIAL.

SORT lt_acdoca_ben ASCENDING BY blart umskz.


DATA(lt_acdoca_ben_tmp1) = lt_acdoca_ben.
DATA(lt_acdoca_ben_tmp2) = lt_acdoca_ben.
DATA(lt_acdoca_ben_tmp3) = lt_acdoca_ben.

* Hold only the FI Advance Documents


IF pc_adv IS NOT INITIAL. " F-48
DELETE lt_acdoca_ben_tmp1 WHERE blart NE 'KZ' OR umskz IS INITIAL.
DELETE lt_acdoca_ben_tmp1 WHERE lifnr IS INITIAL.
ELSE.
FREE : lt_acdoca_ben_tmp1.
ENDIF.

* Hold only the FI Payment Documents


IF pc_paymt IS NOT INITIAL. " F-53
DELETE lt_acdoca_ben_tmp2 WHERE blart NE 'KZ' OR umskz IS NOT INITIAL .
DELETE lt_acdoca_ben_tmp2 WHERE lifnr IS INITIAL.
ELSE.
FREE : lt_acdoca_ben_tmp2.
ENDIF.

* Hold only the FI G/L Documents


IF pc_fi_gl IS NOT INITIAL. " FB50
DELETE lt_acdoca_ben_tmp3 WHERE blart NE 'SA'.
ELSE.
FREE lt_acdoca_ben_tmp3.
ENDIF.

* Collect all the Documents


REFRESH :lt_acdoca_ben.
APPEND LINES OF : lt_acdoca_ben_tmp1 TO lt_acdoca_ben,
lt_acdoca_ben_tmp2 TO lt_acdoca_ben,
lt_acdoca_ben_tmp3 TO lt_acdoca_ben.

FREE : lt_acdoca_ben_tmp1 ,
lt_acdoca_ben_tmp2 ,
lt_acdoca_ben_tmp3 .

SORT lt_acdoca_ben BY rbukrs gjahr belnr.

ENDIF.

IF lt_acdoca_ben IS NOT INITIAL.


*--------------------------------------------------------------------*
* Fetch the Profit Center details
*--------------------------------------------------------------------*
SELECT prctr,
ktext,
ltext
FROM cepct
INTO TABLE @DATA(lt_cepct)
FOR ALL ENTRIES IN @lt_acdoca_ben
WHERE spras = 'E'
AND prctr = @lt_acdoca_ben-prctr.

*--------------------------------------------------------------------*
* Pick the list of Documents containting the Partner Bank Details
*--------------------------------------------------------------------*
SELECT bukrs,
belnr,
gjahr,
buzei,
buzid,
augdt,
augcp,
augbl,
bvtyp " Partner Bank
FROM bseg
INTO TABLE @DATA(lt_bseg)
FOR ALL ENTRIES IN @lt_acdoca_ben
WHERE bukrs = @lt_acdoca_ben-rbukrs
AND augdt = @lt_acdoca_ben-budat " Clearing Date = Posting Date
AND augbl = @lt_acdoca_ben-belnr " Payment Document Number is the
clearing Doc. No.
AND bvtyp NE @space. " Partner Bank Type

ENDIF. " LT_ACDOCA


*--------------------------------------------------------------------*
* Fetch Vendor & Customer Details
*--------------------------------------------------------------------*

IF lt_acdoca_ben IS NOT INITIAL.

* Fetch Vendor - Business Partner Details


SORT lt_acdoca_ben BY lifnr.
lt_acdoca_ben_tmp1 = lt_acdoca_ben.
DELETE ADJACENT DUPLICATES FROM lt_acdoca_ben_tmp1 COMPARING lifnr.
DELETE lt_acdoca_ben_tmp1 WHERE lifnr IS INITIAL.

IF lt_acdoca_ben_tmp1 IS NOT INITIAL.

* Fetch Vendor Details


SELECT lfa1~lifnr, " Vendor(Benificiary) Number
lfa1~land1, " Country
lfa1~name1, " Name
lfa1~adrnr, " Address Number
lfbk~koinh
FROM lfa1
LEFT OUTER JOIN lfbk
ON lfa1~lifnr EQ lfbk~lifnr
INTO TABLE @lt_lfa1
FOR ALL ENTRIES IN @lt_acdoca_ben_tmp1
WHERE lfa1~lifnr EQ @lt_acdoca_ben_tmp1-lifnr.

* Fetch Vendor Bank Account Details


SELECT partner, "BusinessPartner
bkvid , "Bank details
banks , "Bank Country
bankl , "Bank Key
bankn , "Bank acct
bkref , "Reference Details
koinh , " Account Holder Name
accname " Account Name
FROM but0bk
INTO TABLE @lt_but0bk
FOR ALL ENTRIES IN @lt_acdoca_ben_tmp1
WHERE partner EQ @lt_acdoca_ben_tmp1-lifnr.

REFRESH : lt_acdoca_ben_tmp1.

ENDIF.

* Fetch Customer - Business Partner Details


SORT lt_acdoca_ben BY kunnr.
lt_acdoca_ben_tmp1 = lt_acdoca_ben.
DELETE ADJACENT DUPLICATES FROM lt_acdoca_ben_tmp1 COMPARING kunnr.
DELETE lt_acdoca_ben_tmp1 WHERE kunnr IS INITIAL.

IF lt_acdoca_ben_tmp1 IS NOT INITIAL.

* Fetch Customer Details


SELECT kunnr,
land1,
name1,
adrnr
FROM kna1
INTO TABLE @lt_kna1
FOR ALL ENTRIES IN @lt_acdoca_ben_tmp1
WHERE kunnr = @lt_acdoca_ben_tmp1-kunnr.

* Fetch and Append Customer Bank Account Details


SELECT partner, "BusinessPartner
bkvid , "Bank details
banks , "Bank Country
bankl , "Bank Key
bankn , "Bank acct
accname " Account Name
FROM but0bk
APPENDING TABLE @lt_but0bk
FOR ALL ENTRIES IN @lt_acdoca_ben_tmp1
WHERE partner EQ @lt_acdoca_ben_tmp1-kunnr.

REFRESH : lt_acdoca_ben_tmp1.

ENDIF.
*--------------------------------------------------------------------*
* Fetch Bank Details of the Business Partner
*--------------------------------------------------------------------*
IF lt_but0bk IS NOT INITIAL.
SELECT *
FROM bnka
INTO TABLE @DATA(lt_bp_bnka)
FOR ALL ENTRIES IN @lt_but0bk
WHERE banks = 'IN' AND
bankl = @lt_but0bk-bankl.
ENDIF.

* Fetch the Email address details of the Business Partner


IF lt_lfa1 IS NOT INITIAL.
SELECT addrnumber, " Address number
smtp_addr " E-Mail Address
FROM adr6
INTO TABLE @lt_adr6
FOR ALL ENTRIES IN @lt_lfa1
WHERE addrnumber = @lt_lfa1-adrnr.
ENDIF.

IF lt_kna1 IS NOT INITIAL.


SELECT addrnumber, " Address number
smtp_addr " E-Mail Address
FROM adr6
APPENDING TABLE @lt_adr6
FOR ALL ENTRIES IN @lt_kna1
WHERE addrnumber = @lt_kna1-adrnr.
ENDIF.

*--------------------------------------------------------------------*
* Bank Address Details of the Banks - If Vendor / Customer details not available
*--------------------------------------------------------------------*
IF lt_acdoca_ben IS NOT INITIAL.
DATA(lt_bank_gl) = lt_acdoca_ben.
SORT : lt_bank_gl BY racct. "gkont.
DELETE ADJACENT DUPLICATES FROM lt_bank_gl COMPARING racct. "gkont.
DELETE lt_bank_gl WHERE gkont EQ space.

IF lt_bank_gl IS NOT INITIAL.

* G/L account master (company code)


SELECT bukrs,
saknr,
hbkid
FROM skb1
INTO TABLE @DATA(lt_skbl)
FOR ALL ENTRIES IN @lt_bank_gl
WHERE bukrs EQ '1000'
AND saknr EQ @lt_bank_gl-racct."gkont.

* House Banks
IF lt_skbl IS NOT INITIAL.
SELECT *
FROM t012
INTO TABLE @DATA(lt_t012)
FOR ALL ENTRIES IN @lt_skbl
WHERE bukrs = @lt_skbl-bukrs
AND hbkid = @lt_skbl-hbkid
AND banks = 'IN'.
ENDIF.

ENDIF.

ENDIF.

*--------------------------------------------------------------------*
* METRO Bank Account Number
*--------------------------------------------------------------------*
SELECT SINGLE banks,
bankl,
bnklz
FROM bnka
INTO @DATA(ls_bnka)
WHERE banks = 'IN' AND
bankl = @p_bnkid.

ELSE.

MESSAGE | No. records exists for the given input | TYPE 'I' DISPLAY LIKE
'E'.
LEAVE TO LIST-PROCESSING AND RETURN TO SCREEN 0.
LEAVE SCREEN.

ENDIF.

*--------------------------------------------------------------------*
* Process the Data and Populate the Final Internal Table
*--------------------------------------------------------------------*
LOOP AT lt_acdoca_ben INTO DATA(ls_acdoca_ben).

**--------------------------------------------------------------------*
** Vendor(Benificiary) Details
** Vendor(Benificiary) General and Bank Details
**--------------------------------------------------------------------*
* Vendor Bank Account Number
* Vendor/Customer(Benificiary) Name
* Vendor/Customer(Benificiary) Number
* Vendor(Benificiary) Email Address
CLEAR : ls_lfa1,
ls_but0bk.
IF ls_acdoca_ben-lifnr IS NOT INITIAL.

DATA(bvtyp) = VALUE #( lt_bseg[ bukrs = ls_acdoca_ben-rbukrs


augdt = ls_acdoca_ben-budat
augbl = ls_acdoca_ben-belnr
]-bvtyp OPTIONAL ).
IF bvtyp IS NOT INITIAL.
ls_but0bk = VALUE #( lt_but0bk[ partner = ls_acdoca_ben-lifnr bkvid =
bvtyp ] OPTIONAL ).
ELSE.
ls_but0bk = VALUE #( lt_but0bk[ partner = ls_acdoca_ben-lifnr ]
OPTIONAL ).
ENDIF. " BVTYP

ls_lfa1 = VALUE #( lt_lfa1[ lifnr = ls_acdoca_ben-lifnr ]


OPTIONAL ).

* IF ls_but0bk-koinh IS NOT INITIAL.


IF ls_but0bk-koinh IS NOT INITIAL.
gs_final-bene_name = gs_final-benf_name = gs_final-name1 = ls_but0bk-
koinh.
ELSE.
gs_final-bene_name = gs_final-benf_name = gs_final-name1 = ls_lfa1-
name1.
ENDIF.

gs_final-ac_hold_name = ls_lfa1-koinh.

gs_final-bene_code = gs_final-lifnr = ls_lfa1-lifnr.


gs_final-smtp = VALUE #( lt_adr6[ addrnumber = ls_lfa1-adrnr ]-
smtp_addr OPTIONAL ).

ELSEIF ls_acdoca_ben-kunnr IS NOT INITIAL.

bvtyp = VALUE #( lt_bseg[ bukrs = ls_acdoca_ben-rbukrs


augdt = ls_acdoca_ben-budat
augbl = ls_acdoca_ben-belnr
]-bvtyp OPTIONAL ).
IF bvtyp IS NOT INITIAL.
ls_but0bk = VALUE #( lt_but0bk[ partner = ls_acdoca_ben-kunnr bkvid =
bvtyp ] OPTIONAL ).
ELSE.
ls_but0bk = VALUE #( lt_but0bk[ partner = ls_acdoca_ben-kunnr ]
OPTIONAL ).
ENDIF.
DATA(ls_kna1) = VALUE #( lt_kna1[ kunnr = ls_acdoca_ben-kunnr ]
OPTIONAL ).
IF ls_but0bk-koinh IS NOT INITIAL.
gs_final-bene_name = gs_final-benf_name = gs_final-name1 = ls_but0bk-
koinh.
ELSE.
gs_final-bene_name = gs_final-benf_name = gs_final-name1 = ls_kna1-
name1.
ENDIF.

gs_final-bene_code = gs_final-lifnr = ls_kna1-kunnr.


gs_final-smtp = VALUE #( lt_adr6[ addrnumber = ls_kna1-adrnr ]-
smtp_addr OPTIONAL ).

ENDIF.

* Vendor/Customer(Benificiary) Bank Account Number


* Vendor/Customer(Benificiary) Bank IFSC Code
IF gs_final-lifnr IS NOT INITIAL.
bvtyp = VALUE #( lt_bseg[ bukrs = ls_acdoca_ben-rbukrs
augdt = ls_acdoca_ben-budat
augbl = ls_acdoca_ben-belnr
]-bvtyp OPTIONAL ).
IF bvtyp IS NOT INITIAL.
ls_but0bk = VALUE #( lt_but0bk[ partner = gs_final-lifnr bkvid =
bvtyp ] OPTIONAL ).
ELSE.
ls_but0bk = VALUE #( lt_but0bk[ partner = gs_final-lifnr ]
OPTIONAL ).
ENDIF.

gs_final-bene_acno = gs_final-cred_ac_no = gs_final-zbnkn = ls_but0bk-


bankn .

gs_final-bene_brnc_ifsc = gs_final-ifsc_code = gs_final-zbnky =


ls_but0bk-bankl.

ELSE.
DATA(ls_skb1_tmp) = VALUE #( lt_skbl[ bukrs = '1000' saknr =
ls_acdoca_ben-racct ] OPTIONAL )."gkont ] OPTIONAL ).
CLEAR : ls_bank_address ,
ls_bank_detail ,
ls_return2 ,
lv_bankcountry ,
lv_bankkey .
lv_bankcountry = 'IN'.
lv_bankkey = ls_skb1_tmp-hbkid.
CALL FUNCTION 'BAPI_BANK_GETDETAIL'
EXPORTING
bankcountry = lv_bankcountry
bankkey = lv_bankkey
IMPORTING
bank_address = ls_bank_address
bank_detail = ls_bank_detail
return = ls_return2.

gs_final-bene_bank = gs_final-banka = gs_final-bene_name = gs_final-


benf_name = gs_final-name1 = ls_bank_address-bank_name.
gs_final-bene_code = gs_final-lifnr = ls_acdoca_ben-racct.
"gkont.

gs_final-bene_acno = gs_final-cred_ac_no = gs_final-zbnkn =


ls_bank_address-bank_no.
gs_final-bene_brnc_ifsc = gs_final-ifsc_code = gs_final-zbnky =
ls_bank_address-swift_code.

ENDIF.
IF gs_final-bene_brnc_ifsc IS INITIAL.
ls_t012 = VALUE #( lt_t012[ bukrs = '1000' hbkid = ls_skb1_tmp-hbkid
banks = 'IN' ] OPTIONAL ).
gs_final-bene_brnc_ifsc = gs_final-ifsc_code = gs_final-zbnky =
ls_t012-bankl .
ENDIF.

*--------------------------------------------------------------------*
* Type
* IF House Bank = Vendor(Benificiary) Bank , then Type = I
* IF House Bank <> Vendor(Benificiary) Bank , then
** IF cumulated Sum >2Lakhs , then Type - R
** IF cumulated Sum <=2Lakhs , then Type - N
*--------------------------------------------------------------------*
IF s_hbnk-low CP gs_final-zbnky+0(3) && '*' AND gs_final-zbnky+0(3) IS
NOT INITIAL.
gs_final-trans_type = gc_i.
* gs_final-index = ls_but0bk-bkref.
ENDIF.

IF gs_final-index IS INITIAL.
DATA(ls_bkpf) = VALUE #( lt_bkpf[ gjahr = ls_acdoca_ben-gjahr belnr =
ls_acdoca_ben-belnr ] OPTIONAL ).
IF ls_bkpf-xblnr IS NOT INITIAL.
gs_final-index = ls_bkpf-xblnr.
ENDIF. " LS_BKPF-XBLNR
ENDIF. " GS_FINAL-INDEX

* Customer Reference Number( Payment Doc. Number)


gs_final-vblnr = ls_acdoca_ben-belnr.
gs_final-cust_ref_no = |{ ls_acdoca_ben-belnr }{ ls_acdoca_ben-gjahr }|.

* Chq/Trans. Date ( System Date)


gs_final-valut = | { sy-datum+6(2) }/{ sy-datum+4(2) }/{ sy-datum+0(4) }
|.
CONDENSE gs_final-valut.
*--------------------------------------------------------------------*
* Editable Cell Properties for - Checkbox and Index Fields
*--------------------------------------------------------------------*
DATA : lv_mode TYPE raw4.
CLEAR : lv_mode.

IF gs_final-index IS NOT INITIAL.


lv_mode = cl_gui_alv_grid=>mc_style_disabled.
ENDIF.

gs_final-cell_edit = VALUE #(
( fieldname = 'BOX ' style =
lv_mode )
( fieldname = 'SRNO ' style =
cl_gui_alv_grid=>mc_style_disabled )
( fieldname = 'TRANS_TYPE ' style =
cl_gui_alv_grid=>mc_style_disabled )
( fieldname = 'INDEX ' style =
cl_gui_alv_grid=>mc_style_disabled )
( fieldname = 'ZBNKN ' style =
cl_gui_alv_grid=>mc_style_disabled )
( fieldname = 'DMBTR ' style =
cl_gui_alv_grid=>mc_style_disabled )
( fieldname = 'NAME1 ' style =
cl_gui_alv_grid=>mc_style_disabled )
( fieldname = 'LIFNR ' style =
cl_gui_alv_grid=>mc_style_disabled )
( fieldname = 'VBLNR ' style =
cl_gui_alv_grid=>mc_style_disabled )
( fieldname = 'VALUT ' style =
cl_gui_alv_grid=>mc_style_disabled )
( fieldname = 'ZBNKY ' style =
cl_gui_alv_grid=>mc_style_disabled )
( fieldname = 'BANKA ' style =
cl_gui_alv_grid=>mc_style_disabled )
( fieldname = 'BRNCH ' style =
cl_gui_alv_grid=>mc_style_disabled )
( fieldname = 'SMTP ' style =
cl_gui_alv_grid=>mc_style_disabled )
).

*--------------------------------------------------------------------*
* Index - User Maintains - Need to be updated to Header Text(BKPF-BKTXT)
*--------------------------------------------------------------------*

**--------------------------------------------------------------------*
** Get Bank Details
**--------------------------------------------------------------------*
* CALL FUNCTION 'BAPI_BANK_GETDETAIL'
* EXPORTING
* bankcountry = lv_bankcountry
* bankkey = lv_bankkey
* IMPORTING
* bank_address = ls_bank_address
* bank_detail = ls_bank_detail
* return = ls_return2.

* Vendor(Benificiary) Bank Name


* Vendor(Benificiary) Bank Branch
IF ls_but0bk IS NOT INITIAL.
DATA(ls_bp_bnka) = VALUE #( lt_bp_bnka[ bankl = ls_but0bk-bankl ]
OPTIONAL ).
gs_final-bene_bank = gs_final-banka = ls_bp_bnka-banka.
gs_final-brnch = ls_bp_bnka-brnch.

ENDIF.

* METRO Bank Account Number


gs_final-dr_acno = gs_final-deb_acno = ls_bnka-bnklz. " Debit
Account Number - METRO Bank A/c No.

**********************************************************************
* For RBL
**********************************************************************
IF s_hbnk-low CP 'RBL*'.

gs_final-rec_id = gc_p. " Record Identifier


gs_final-cus_rfno = ls_acdoca_ben-racct. " Customer_Reference_No

gs_final-pay_val_dt = | { sy-datum+6(2) }/{ sy-datum+4(2) }/{ sy-


datum+0(4) } |.

IF gs_final-smtp IS NOT INITIAL.


gs_final-notf_email = | { gs_final-smtp } , [email protected]
|.
ELSE.
gs_final-notf_email = |[email protected]|.
ENDIF.

CONDENSE :gs_final-pay_val_dt.
ENDIF.

**********************************************************************
* For KOTAK
**********************************************************************
gs_final-client_code = 'METRO'.
gs_final-prod_code = 'NETPAY'.

gs_final-paym_date = | { sy-datum+6(2) }/{ sy-datum+4(2) }/{ sy-


datum+0(4) } |.
gs_final-ins_date = | { sy-datum+6(2) }/{ sy-datum+4(2) }/{ sy-
datum+0(4) } |.

CONDENSE : gs_final-paym_date,
gs_final-ins_date .

gs_final-bank_cod_ind = gc_m.
gs_final-bene_email = gs_final-smtp.

**********************************************************************

*--------------------------------------------------------------------*
** Debit_Narration
* 1. FUND TRANSFER
* 2. BILL PAYMENT
* 3. ADVANCE PAYMENT
*--------------------------------------------------------------------*
DATA(lv_doc_key) = ls_acdoca_ben-bschl.

CASE lv_doc_key.
WHEN 25. " Bill Payment
gs_final-debit_nara = gs_final-pay_remarks = gs_final-reas_paymt =
'BILL PAYMENT'.
WHEN 29. " Advance Payment
gs_final-debit_nara = gs_final-pay_remarks = gs_final-reas_paymt =
'ADVANCE PAYMENT'.
WHEN 40 OR 50. " Fund Transfer
gs_final-debit_nara = gs_final-pay_remarks = gs_final-reas_paymt =
'FUND TRANSFER'.
WHEN OTHERS.
ENDCASE.

**********************************************************************
LOOP AT lt_acdoca_bank INTO DATA(ls_acdoca_bank) WHERE rldnr EQ
ls_acdoca_ben-rldnr AND
rbukrs
EQ ls_acdoca_ben-rbukrs AND
gjahr
EQ ls_acdoca_ben-gjahr AND
belnr
EQ ls_acdoca_ben-belnr.

lv_dmbtr_tmp = lv_dmbtr_tmp + ls_acdoca_bank-tsl.


lv_dmbtr = lv_dmbtr + ls_acdoca_bank-tsl.

CLEAR : ls_acdoca_bank.

ENDLOOP.

* Pick the Profit Center


gs_final-pcenter = ls_acdoca_ben-prctr.
gs_final-pcenter_desc = VALUE #( lt_cepct[ prctr = ls_acdoca_ben-prctr ]-
ktext OPTIONAL ).

*--------------------------------------------------------------------*
* Serial Number + Split Amount
* Type of transaction : I -
* R - RTGS
* N - NEFT
*--------------------------------------------------------------------*
DATA : lv_flag TYPE c.
CLEAR : lv_flag.
* Split Amount if Greaterthan 10Lakhs

* Absolute Amount
lv_dmbtr = abs( lv_dmbtr ).

IF gs_final-trans_type EQ 'I'.
gs_final-pay_prd_code = 'IFT_INDIVIDUAL'.
gs_final-paymt_typ = 'IFT'.
ENDIF.

WHILE lv_dmbtr >= 1000000.

*--------------------------------------------------------------------*
* RBL - Payment_Production Mode
*--------------------------------------------------------------------*

IF lv_dmbtr >= 200000 AND gs_final-trans_type NE gc_i.

gs_final-trans_type = gc_r.
gs_final-pay_prd_code = 'RTGS_INDIVIDUAL'.
gs_final-paymt_typ = 'RTGS'.

ELSEIF gs_final-trans_type NE gc_i.

gs_final-trans_type = gc_n.
gs_final-pay_prd_code = 'NEFT_INDIVIDUAL'.
gs_final-paymt_typ = 'NEFT'.

ENDIF.

* gs_final-amt = gs_final-pay_amt = gs_final-dmbtr = 1000000.


WRITE : '1000000' TO gs_final-amt ,
'1000000' TO gs_final-pay_amt ,
'1000000' TO gs_final-dmbtr .

lv_dmbtr = lv_dmbtr - 1000000.


ADD 1 TO lv_srno.
gs_final-paymt_ref = gs_final-srno = lv_srno.

* IF gs_final-trans_type IS INITIAL.
* gs_final-trans_type = gc_r.
* ENDIF.

APPEND gs_final TO gt_final.


lv_flag = gc_x.

ENDWHILE.
IF lv_dmbtr IS NOT INITIAL OR lv_flag IS INITIAL.
* gs_final-amt = gs_final-pay_amt = gs_final-dmbtr = lv_dmbtr.
WRITE : lv_dmbtr TO gs_final-amt , ##UOM_IN_MES
lv_dmbtr TO gs_final-pay_amt , ##UOM_IN_MES
lv_dmbtr TO gs_final-dmbtr . ##UOM_IN_MES

REPLACE : ',' IN gs_final-amt WITH '',


',' IN gs_final-pay_amt WITH '',
',' IN gs_final-dmbtr WITH ''.

* SPLIT : gs_final-amt AT '.' INTO gs_final-amt lv_str1,


* gs_final-pay_amt AT '.' INTO gs_final-pay_amt lv_str2,
* gs_final-dmbtr AT '.' INTO gs_final-dmbtr lv_str3.

CONDENSE : gs_final-amt ,
gs_final-pay_amt ,
gs_final-dmbtr .

ADD 1 TO lv_srno.
gs_final-paymt_ref = gs_final-srno = lv_srno.

IF lv_dmbtr >= 200000 AND gs_final-trans_type NE gc_i.


gs_final-trans_type = gc_r.
gs_final-pay_prd_code = 'RTGS_INDIVIDUAL'.
gs_final-paymt_typ = 'RTGS'.
ELSEIF gs_final-trans_type NE gc_i.
gs_final-trans_type = gc_n.
gs_final-pay_prd_code = 'NEFT_INDIVIDUAL'.
gs_final-paymt_typ = 'NEFT'.
ENDIF.

APPEND gs_final TO gt_final.

ENDIF.

** RTGS
* IF lv_dmbtr_tmp > 200000 AND gs_final-trans_type EQ 'I'.
* MODIFY gt_final FROM gs_final TRANSPORTING "trans_type
* pay_prd_code
* paymt_typ
* WHERE lifnr = ls_acdoca_ben-lifnr AND
* vblnr = ls_acdoca_ben-belnr.
*
** NEFT
* ELSEIF gs_final-pay_prd_code IS INITIAL.
* MODIFY gt_final FROM gs_final TRANSPORTING "trans_type
* pay_prd_code
* paymt_typ
* WHERE lifnr = ls_acdoca_ben-lifnr AND
* vblnr = ls_acdoca_ben-belnr.
* ENDIF.

CLEAR: gs_final,
ls_acdoca_ben.
* CLEAR : lv_bankcountry ,
* lv_bankkey ,
* ls_bank_address ,
* ls_bank_detail ,
* ls_return1 .
*
* CLEAR :lv_vendorno ,
* lv_companycode ,
* ls_generaldetail,
* ls_companydetail,
* ls_return2 .

CLEAR : lv_dmbtr ,
lv_dmbtr_tmp .

* REFRESH : lt_bankdetail ,
* lt_vendoribandetail.

ENDLOOP.

ELSE.

MESSAGE | No. Entries Exists for the given input| TYPE 'I' DISPLAY LIKE
'E'.
LEAVE TO LIST-PROCESSING AND RETURN TO SCREEN 0.
LEAVE SCREEN.

ENDIF.

ELSE.

MESSAGE | No. Entries Exists for the given input| TYPE 'I' DISPLAY LIKE 'E'.
LEAVE TO LIST-PROCESSING AND RETURN TO SCREEN 0.
LEAVE SCREEN.
ENDIF.

ENDMETHOD.

* ALV Processing
METHOD alv_processing.

DATA : "lt_fcat TYPE lvc_t_fcat,


lvf_rbl TYPE c,
lvf_kotak TYPE c,
lvf_hdfc TYPE c,
lvf_def TYPE c.

IF s_hbnk-low CP 'KOT*'.
lvf_rbl = abap_true.
lvf_kotak = abap_false.
lvf_hdfc = abap_true.
lvf_def = abap_true.
ELSEIF s_hbnk-low CP 'RBL*'.
lvf_rbl = abap_false.
lvf_kotak = abap_true.
lvf_hdfc = abap_true.
lvf_def = abap_true.
ELSEIF s_hbnk-low CP 'HDF*'.
lvf_rbl = abap_true.
lvf_kotak = abap_true.
lvf_hdfc = abap_false.
lvf_def = abap_false.
ELSE.
lvf_rbl = abap_true.
lvf_kotak = abap_true.
lvf_hdfc = abap_true.
lvf_def = abap_false.
ENDIF.

*--------------------------------------------------------------------*
* Create a reference object for a Custom Container
*--------------------------------------------------------------------*
IF grf_cont IS NOT BOUND.

CREATE OBJECT grf_cont


EXPORTING
* parent =
container_name = 'CONTAINER'
* style =
* lifetime = lifetime_default
* repid =
* dynnr =
* no_autodef_progid_dynnr =
EXCEPTIONS
cntl_error = 1
cntl_system_error = 2
create_error = 3
lifetime_error = 4
lifetime_dynpro_dynpro_link = 5
OTHERS = 6.
IF sy-subrc <> 0.
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ENDIF.

IF grf_cont IS BOUND .
*--------------------------------------------------------------------*
* Create a reference object for ALV Grid - Assign the Contrainer object
*--------------------------------------------------------------------*
CREATE OBJECT grf_grid
EXPORTING
* i_shellstyle = 0
* i_lifetime =
i_parent = grf_cont
* i_appl_events = space
* i_parentdbg =
* i_applogparent =
* i_graphicsparent =
* i_name =
* i_fcat_complete = SPACE
EXCEPTIONS
error_cntl_create = 1
error_cntl_init = 2
error_cntl_link = 3
error_dp_create = 4
OTHERS = 5.
IF sy-subrc <> 0.
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ENDIF.

ENDIF.

ENDIF.

IF grf_grid IS BOUND.

*--------------------------------------------------------------------*
* Populate Fieldcatlog
*--------------------------------------------------------------------*
gt_fcat = VALUE lvc_t_fcat( tabname = 'GT_FINAL'

* Default - HDFC / ICICI


( fieldname = 'BOX ' col_pos = '1' coltext = 'Check
'(a01) checkbox = abap_true

edit = abap_true

tech = lvf_def )
( fieldname = 'SRNO ' col_pos = '2 ' coltext = 'SR.No.
'(a02) )
( fieldname = 'TRANS_TYPE' col_pos = '3 ' coltext = 'Type
'(a03) tech = lvf_def )
( fieldname = 'INDEX' col_pos = '4 ' coltext = 'Index
'(a04) tech = lvf_def

edit = abap_true

outputlen = '50' )

( fieldname = 'ZBNKN' col_pos = '5 ' coltext = 'Beneficiary


Account Number'(a05) tech = lvf_def )
( fieldname = 'DMBTR' col_pos = '6 ' coltext = 'Amount
'(a06) tech = lvf_def )
( fieldname = 'NAME1' col_pos = '7 ' coltext = 'Beneficiary
Name '(a07) tech = lvf_def )
( fieldname = 'AC_HOLD_NAME' col_pos = '7 ' coltext = 'A/C Holder
Name '(a96) tech = lvf_def )
( fieldname = 'LIFNR' col_pos = '8 ' coltext = 'Vendor
Number '(a08) tech = lvf_def )
* For HDFC
( fieldname = 'DRAW_LOC ' col_pos = '9 ' coltext = 'Drawee
Location '(a09) tech = lvf_hdfc )
( fieldname = 'PRINT_LOC ' col_pos = '10' coltext = 'Print
Location '(a10) tech = lvf_hdfc )
( fieldname = 'BENI_ADDR1' col_pos = '11' coltext = 'Bene Address
1 '(a11) tech = lvf_hdfc )
( fieldname = 'BENI_ADDR2' col_pos = '12' coltext = 'Bene Address
2 '(a12) tech = lvf_hdfc )
( fieldname = 'BENI_ADDR3' col_pos = '13' coltext = 'Bene Address
3 '(a13) tech = lvf_hdfc )
( fieldname = 'BENI_ADDR4' col_pos = '14' coltext = 'Bene Address
4 '(a14) tech = lvf_hdfc )
( fieldname = 'BENI_ADDR5' col_pos = '15' coltext = 'Bene Address
5 '(a15) tech = lvf_hdfc )
( fieldname = 'INS_REF_NO' col_pos = '15' coltext = 'Instruction
Reference Number'(a16) tech = lvf_hdfc )

( fieldname = 'CUST_REF_NO' col_pos = '16' coltext = 'Customer


Reference Number '(a17) tech = lvf_def )

* For HDFC
( fieldname = 'PAY_DT1' col_pos = '17' coltext = 'Payment
details 1 '(a18) tech = lvf_hdfc )
( fieldname = 'PAY_DT2' col_pos = '18' coltext = 'Payment
details 2 '(a19) tech = lvf_hdfc )
( fieldname = 'PAY_DT3' col_pos = '19' coltext = 'Payment
details 3 '(a20) tech = lvf_hdfc )
( fieldname = 'PAY_DT4' col_pos = '20' coltext = 'Payment
details 4 '(a21) tech = lvf_hdfc )
( fieldname = 'PAY_DT5' col_pos = '21' coltext = 'Payment
details 5 '(a22) tech = lvf_hdfc )
( fieldname = 'PAY_DT6' col_pos = '22' coltext = 'Payment
details 6 '(a23) tech = lvf_hdfc )
( fieldname = 'PAY_DT7' col_pos = '23' coltext = 'Payment
details 7 '(a24) tech = lvf_hdfc )
( fieldname = 'CHQ_NO ' col_pos = '24' coltext = 'Cheque
Number '(a25) tech = lvf_hdfc )

( fieldname = 'VALUT' col_pos = '25' coltext = 'Chq / Trn


Date '(a26) tech = lvf_def )

"edit_mask = 'RR__/__/____' )
* For HDFC
( fieldname = 'MICR_NO' col_pos = '26' coltext = 'MICR Number
'(a27) tech = lvf_hdfc )

( fieldname = 'ZBNKY' col_pos = '27' coltext = 'IFSC Code


'(a28) tech = lvf_def )
( fieldname = 'BANKA' col_pos = '28' coltext = 'Bene Bank
Name '(a29) tech = lvf_def )
( fieldname = 'BRNCH' col_pos = '29' coltext = 'Bene Bank
Branch Name '(a30) tech = lvf_def )
( fieldname = 'SMTP ' col_pos = '30' coltext = 'Beneficiary
email id '(a31) tech = lvf_def )

* For RBL
( fieldname = 'REC_ID ' col_pos = '31' coltext =
'Record_Identifier '(a32) tech = lvf_rbl )
( fieldname = 'DEB_ACNO ' col_pos = '32' coltext =
'Debit_Account_No '(a33) tech = lvf_rbl )
( fieldname = 'CUS_RFNO ' col_pos = '33' coltext =
'Customer_Reference_No '(a34) tech = lvf_rbl )
( fieldname = 'PAY_PRD_CODE' col_pos = '34' coltext =
'Payment_Product_Code '(a35) tech = lvf_rbl )
( fieldname = 'PAY_VAL_DT ' col_pos = '35' coltext =
'Payment_Value_Date '(a36) tech = lvf_rbl )
( fieldname = 'PAY_AMT ' col_pos = '36' coltext =
'Payment_Amount '(a37) tech = lvf_rbl )
( fieldname = 'BENF_NAME ' col_pos = '37' coltext =
'Beneficiary_Name '(a38) tech = lvf_rbl )
( fieldname = 'CRED_AC_NO ' col_pos = '38' coltext =
'Credit_Account_No '(a39) tech = lvf_rbl )
( fieldname = 'IFSC_CODE ' col_pos = '39' coltext = 'IFSC_Code
'(a40) tech = lvf_rbl )
( fieldname = 'PAY_REMARKS ' col_pos = '40' coltext =
'Payment_Remarks '(a41) tech = lvf_rbl )
( fieldname = 'REAS_PAYMT ' col_pos = '41' coltext =
'ReasonForPayment '(a42) tech = lvf_rbl )
( fieldname = 'NOTF_EMAIL ' col_pos = '42' coltext =
'Notification_Emails '(a43) tech = lvf_rbl )
( fieldname = 'BENF_CODE ' col_pos = '43' coltext =
'Beneficiary_Code '(a44) tech = lvf_rbl )
* For KOTAK
( fieldname = 'CLIENT_CODE ' col_pos = '44' coltext =
'Client_Code '(a45) tech = lvf_kotak )
( fieldname = 'PROD_CODE ' col_pos = '45' coltext =
'Product_Code '(a46) tech = lvf_kotak )
( fieldname = 'PAYMT_TYP ' col_pos = '46' coltext =
'Payment_Type '(a47) tech = lvf_kotak )
( fieldname = 'PAYMT_REF ' col_pos = '47' coltext =
'Payment Ref No '(a48) tech = lvf_kotak )
( fieldname = 'PAYM_DATE ' col_pos = '48' coltext =
'Payment_Date '(a49) tech = lvf_kotak )
( fieldname = 'INS_DATE ' col_pos = '49' coltext =
'Instrument Date '(a50) tech = lvf_kotak )
( fieldname = 'DR_ACNO ' col_pos = '50' coltext =
'Dr_Ac_No '(a51) tech = lvf_kotak )
( fieldname = 'AMT ' col_pos = '51' coltext = 'Amount
'(a52) tech = lvf_kotak )
( fieldname = 'BANK_COD_IND ' col_pos = '52' coltext =
'Bank_Code_Indicator '(a53) tech = lvf_kotak )
( fieldname = 'BENE_CODE ' col_pos = '53' coltext =
'Beneficiary_Code '(a54) tech = lvf_kotak )
( fieldname = 'BENE_NAME ' col_pos = '54' coltext =
'Beneficiary_Name '(a55) tech = lvf_kotak )
( fieldname = 'BENE_BANK ' col_pos = '55' coltext =
'Beneficiary_Bank '(a56) tech = lvf_kotak )
( fieldname = 'BENE_BRNC_IFSC ' col_pos = '56' coltext =
'Beneficiary_Branch / IFSC Code '(a57) tech = lvf_kotak )
( fieldname = 'BENE_ACNO ' col_pos = '57' coltext =
'Beneficiary_Acc_No '(a58) tech = lvf_kotak )
( fieldname = 'LOCATION ' col_pos = '58' coltext =
'Location '(a59) tech = lvf_kotak )
( fieldname = 'PRNT_LOC ' col_pos = '59' coltext =
'Print_Location '(a60) tech = lvf_kotak )
( fieldname = 'INST_NUM ' col_pos = '60' coltext =
'Instrument_Number '(a61) tech = lvf_kotak )
( fieldname = 'BEN_ADD1 ' col_pos = '61' coltext =
'Ben_Add1 '(a62) tech = lvf_kotak )
( fieldname = 'BEN_ADD2 ' col_pos = '62' coltext =
'Ben_Add2 '(a63) tech = lvf_kotak )
( fieldname = 'BEN_ADD3 ' col_pos = '63' coltext =
'Ben_Add3 '(a64) tech = lvf_kotak )
( fieldname = 'BEN_ADD4 ' col_pos = '64' coltext =
'Ben_Add4 '(a65) tech = lvf_kotak )
( fieldname = 'BENE_EMAIL ' col_pos = '65' coltext =
'Beneficiary_Email '(a66) tech = lvf_kotak )
( fieldname = 'BENE_MOBIL ' col_pos = '66' coltext =
'Beneficiary_Mobile '(a67) tech = lvf_kotak )
( fieldname = 'DEBIT_NARA ' col_pos = '67' coltext =
'Debit_Narration '(a68) tech = lvf_kotak )
( fieldname = 'CREDT_NARA ' col_pos = '68' coltext =
'Credit_Narration '(a69) tech = lvf_kotak )
( fieldname = 'PAY_DET1 ' col_pos = '69' coltext =
'Payment Details 1 '(a70) tech = lvf_kotak )
( fieldname = 'PAY_DET2 ' col_pos = '70' coltext =
'Payment Details 2 '(a71) tech = lvf_kotak )
( fieldname = 'PAY_DET3 ' col_pos = '71' coltext =
'Payment Details 3 '(a72) tech = lvf_kotak )
( fieldname = 'PAY_DET4 ' col_pos = '72' coltext =
'Payment Details 4 '(a73) tech = lvf_kotak )
( fieldname = 'ENRCH1 ' col_pos = '73' coltext =
'Enrichment_1 '(a74) tech = lvf_kotak )
( fieldname = 'ENRCH2 ' col_pos = '74' coltext =
'Enrichment_2 '(a75) tech = lvf_kotak )
( fieldname = 'ENRCH3 ' col_pos = '75' coltext =
'Enrichment_3 '(a76) tech = lvf_kotak )
( fieldname = 'ENRCH4 ' col_pos = '76' coltext =
'Enrichment_4 '(a77) tech = lvf_kotak )
( fieldname = 'ENRCH5 ' col_pos = '77' coltext =
'Enrichment_5 '(a78) tech = lvf_kotak )
( fieldname = 'ENRCH6 ' col_pos = '78' coltext =
'Enrichment_6 '(a79) tech = lvf_kotak )
( fieldname = 'ENRCH7 ' col_pos = '79' coltext =
'Enrichment_7 '(a80) tech = lvf_kotak )
( fieldname = 'ENRCH8 ' col_pos = '80' coltext =
'Enrichment_8 '(a81) tech = lvf_kotak )
( fieldname = 'ENRCH9 ' col_pos = '81' coltext =
'Enrichment_9 '(a82) tech = lvf_kotak )
( fieldname = 'ENRCH10 ' col_pos = '82' coltext =
'Enrichment_10 '(a83) tech = lvf_kotak )
( fieldname = 'ENRCH11 ' col_pos = '83' coltext =
'Enrichment_11 '(a84) tech = lvf_kotak )
( fieldname = 'ENRCH12 ' col_pos = '84' coltext =
'Enrichment_12 '(a85) tech = lvf_kotak )
( fieldname = 'ENRCH13 ' col_pos = '85' coltext =
'Enrichment_13 '(a86) tech = lvf_kotak )
( fieldname = 'ENRCH14 ' col_pos = '86' coltext =
'Enrichment_14 '(a87) tech = lvf_kotak )
( fieldname = 'ENRCH15 ' col_pos = '87' coltext =
'Enrichment_15 '(a88) tech = lvf_kotak )
( fieldname = 'ENRCH16 ' col_pos = '88' coltext =
'Enrichment_16 '(a89) tech = lvf_kotak )
( fieldname = 'ENRCH17 ' col_pos = '89' coltext =
'Enrichment_17 '(a90) tech = lvf_kotak )
( fieldname = 'ENRCH18 ' col_pos = '90' coltext =
'Enrichment_18 '(a91) tech = lvf_kotak )
( fieldname = 'ENRCH19 ' col_pos = '91' coltext =
'Enrichment_19 '(a92) tech = lvf_kotak )
( fieldname = 'ENRCH20 ' col_pos = '92' coltext =
'Enrichment_20 '(a93) tech = lvf_kotak )
( fieldname = 'PCENTER ' col_pos = '93' coltext =
'ProfitCenter '(a94) )
( fieldname = 'PCENTER_DESC ' col_pos = '93' coltext =
'ProfitCenter Desc. '(a95) )
).

*--------------------------------------------------------------------*
* Set the ALV Layout
*--------------------------------------------------------------------*
DATA : lvc_fname TYPE lvc_fname VALUE 'CELL_EDIT'.
DATA(ls_layout) = VALUE lvc_s_layo( col_opt = gc_x
cwidth_opt = gc_x
stylefname = lvc_fname ).

*--------------------------------------------------------------------*
* Call ALV Display method
*--------------------------------------------------------------------*

DATA(ls_variant) = VALUE disvariant( report = sy-repid ).

CALL METHOD grf_grid->set_table_for_first_display


EXPORTING
* i_buffer_active =
* i_bypassing_buffer =
* i_consistency_check =
* i_structure_name =
is_variant = ls_variant
i_save = gc_x
i_default = 'X'
is_layout = ls_layout
* is_print =
* it_special_groups =
* it_toolbar_excluding =
* it_hyperlink =
* it_alv_graphics =
* it_except_qinfo =
* ir_salv_adapter =
CHANGING
it_outtab = gt_final
it_fieldcatalog = gt_fcat
* it_sort =
* it_filter =
EXCEPTIONS
invalid_parameter_combination = 1
program_error = 2
too_many_lines = 3
OTHERS = 4.
IF sy-subrc <> 0.
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ENDIF.
* OOALV Events
CALL METHOD grf_grid->register_edit_event
EXPORTING
i_event_id = cl_gui_alv_grid=>mc_evt_modified.

* Set to Edit Enabled/Disabled


IF gv_edit_flag EQ gc_x AND sy-ucomm = 'EDIT'.

* set edit enabled cells ready for input


CALL METHOD grf_grid->set_ready_for_input
EXPORTING
i_ready_for_input = 1.

ELSEIF sy-ucomm = 'EDIT'.

* lock edit enabled cells against input


CALL METHOD grf_grid->set_ready_for_input
EXPORTING
i_ready_for_input = 0.
ENDIF.

ENDIF.

ENDMETHOD.

* Populate House Bank details


METHOD pop_housebank.

SELECT t012k~bukrs, " Company Code


t012k~hbkid, " House bank
t012k~hktid, " Account ID
t012k~bankn, " Bank Account
t012t~text1 " Description
FROM t012k
INNER JOIN t012t
ON t012t~spras EQ 'E'
AND t012k~bukrs EQ t012t~bukrs
AND t012k~hbkid EQ t012t~hbkid
AND t012k~hktid EQ t012t~hktid
INTO TABLE @gt_t012k
WHERE t012k~bukrs EQ '1000' .

ENDMETHOD.

* Dynamic Selection Screen


METHOD : dyn_scrn.
PERFORM f_dyn_scrn.
ENDMETHOD.
* Fetch & Process Data and Populate Final Internal Table
METHOD pop_final_tab.

DATA : lr_vblnr TYPE RANGE OF reguh-vblnr.

lr_vblnr = VALUE #( BASE lr_vblnr


( sign = 'I' option = 'EQ' low = space )
).
*--------------------------------------------------------------------*
* Fetch Header - Settlement data from payment program
*--------------------------------------------------------------------*

SELECT laufd, " Run On


laufi, " Identification
xvorl, " Indicator: Only Prop
zbukr, " Company Code
lifnr, " Vendor(Benificiary)
kunnr, " Customer
empfg, " Pmnt recipient ( Payment To )
vblnr, " Payment Doc. No.
zland, " Payee's country
hbkid, " House bank
ubknt, " Our account number
ubnkl, " House bank number
ubhkt, " G/L Account Number for Our Bank
ubnky " House bank key
FROM reguh
INTO TABLE @DATA(lt_reguh)
WHERE hbkid IN @s_hbnk AND
laufd IN @s_rundt AND
laufi IN @s_ident AND
xvorl EQ @abap_false.

IF lt_reguh IS NOT INITIAL.

DELETE lt_reguh WHERE vblnr IS INITIAL.

* List out the Identifications for which Payment Recipeint exists - Consider them
as the Actual Beneficiary(Vendor) to whome actual payment is made.
LOOP AT lt_reguh ASSIGNING FIELD-SYMBOL(<ls_reguh>) WHERE empfg IS NOT
INITIAL.
<ls_reguh>-lifnr = <ls_reguh>-empfg+1(10).
ENDLOOP.

*--------------------------------------------------------------------*
* Fetch Item - Processed items from payment program
*--------------------------------------------------------------------*
SELECT laufd, " Run On
laufi, " Identification
xvorl, " Indicator: Only Prop
zbukr, " Paying co. code
lifnr, " Vendor(Benificiary)
kunnr, " Customer
empfg, " Pmnt recipient
vblnr, " Payment Doc.No.
bukrs, " Company Code
belnr, " Document Number
gjahr, " Fiscal Year
* buzei, " Line item
shkzg, " Debit/Credit Indicator : H - Debit ; S - Credit
dmbtr " Amount
FROM regup
INTO TABLE @DATA(lt_regup)
FOR ALL ENTRIES IN @lt_reguh
WHERE laufd = @lt_reguh-laufd AND
laufi = @lt_reguh-laufi AND
xvorl = @lt_reguh-xvorl .

*--------------------------------------------------------------------*
* Fetch Accounting Document Header Data
*--------------------------------------------------------------------*
SELECT *
FROM bkpf
INTO TABLE @DATA(lt_bkpf)
FOR ALL ENTRIES IN @lt_regup
WHERE bukrs = @lt_regup-bukrs "1000
AND belnr = @lt_regup-vblnr
AND gjahr = @lt_regup-gjahr
AND stgrd = @space. " Not reveresed documents

* Do not consider the reversed documents


lr_vblnr = VALUE #( BASE lr_vblnr
FOR ls_fidocs IN lt_bkpf
( sign = 'I' option = 'EQ' low = ls_fidocs-belnr )
).

DELETE : lt_reguh WHERE vblnr NOT IN lr_vblnr,


lt_regup WHERE vblnr NOT IN lr_vblnr.
*--------------------------------------------------------------------*
* List out the Invoice Clearing Document Numbers for the Payment Document numbers
*--------------------------------------------------------------------*
IF lt_bkpf IS NOT INITIAL.

SELECT bukrs,
belnr, " Invoice Document Number
gjahr,
buzei,
augdt, " Clearing Document Number - Payment Document Number
augbl,
bschl,
koart,
shkzg,
mwskz,
saknr,
kunnr,
lifnr,
bvtyp " Part Bank Type - Selected Bank while doing the
payments to the vendor
FROM bseg
INTO TABLE @DATA(lt_bseg)
FOR ALL ENTRIES IN @lt_bkpf
WHERE bukrs EQ @lt_bkpf-bukrs
AND augbl EQ @lt_bkpf-belnr
AND gjahr EQ @lt_bkpf-gjahr
AND bvtyp NE @space.

ENDIF.

*--------------------------------------------------------------------*
* Fetch Vendor(Benificiary) Address Details
*--------------------------------------------------------------------*
SELECT lfa1~lifnr, " Vendor(Benificiary) Number
lfa1~adrnr, " Address Number
lfbk~koinh
FROM lfa1
LEFT OUTER JOIN lfbk
ON lfa1~lifnr EQ lfbk~lifnr
INTO TABLE @DATA(lt_lfa1)
FOR ALL ENTRIES IN @lt_reguh
WHERE lfa1~lifnr = @lt_reguh-lifnr.

IF lt_lfa1 IS NOT INITIAL.

SORT lt_lfa1 BY lifnr.


DELETE ADJACENT DUPLICATES FROM lt_lfa1 COMPARING lifnr.
*--------------------------------------------------------------------*
* Fetch the email address of each Vendor(Benificiary)
*--------------------------------------------------------------------*
SELECT addrnumber, " Address number
smtp_addr " E-Mail Address
FROM adr6
INTO TABLE @DATA(lt_adr6)
FOR ALL ENTRIES IN @lt_lfa1
WHERE addrnumber = @lt_lfa1-adrnr.

ENDIF.

*--------------------------------------------------------------------*
* METRO Bank Account Number
*--------------------------------------------------------------------*
SELECT SINGLE banks,
bankl,
bnklz
FROM bnka
INTO @DATA(ls_bnka)
WHERE banks = 'IN' AND
bankl = @p_bnkid.

*--------------------------------------------------------------------*
* Universal Journal Entry Line Items
*--------------------------------------------------------------------*
SELECT rldnr ,
rbukrs ,
gjahr ,
belnr , " Doc. Number
docln , " Line Item
rcntr , " Cost Center
prctr , " Profit Center
drcrk , " Debit/Credit Indicator
blart , " Document type
bschl " Posting Key
FROM acdoca
##DB_FEATURE_MODE[TABLE_LEN_MAX1]
INTO TABLE @DATA(lt_acdoca)
FOR ALL ENTRIES IN @lt_regup"@lt_reguh
WHERE rldnr = '0L' AND
rbukrs = @lt_regup-bukrs AND "1000 AND
belnr = @lt_regup-vblnr AND "@lt_reguh-vblnr AND
gjahr = @lt_regup-gjahr AND
drcrk = 'S' AND " Debit
bschl IN (29,25, 40 ) AND
xtruerev EQ @space. " Not reveresed documents

* Fetch the Profit Center details


IF lt_acdoca IS NOT INITIAL.

SELECT prctr,
ktext,
ltext
FROM cepct
INTO TABLE @DATA(lt_cepct)
FOR ALL ENTRIES IN @lt_acdoca
WHERE spras = 'E'
AND prctr = @lt_acdoca-prctr.

ENDIF. " LT_ACDOCA

*--------------------------------------------------------------------*
* Process the Data and Populate the Final Internal Table
*--------------------------------------------------------------------*
LOOP AT lt_reguh INTO DATA(ls_reguh).

IF lt_regup IS NOT INITIAL.

DATA(ls_bkpf) = VALUE #( lt_bkpf[ belnr = ls_reguh-vblnr ] OPTIONAL ).


gs_final-index = ls_bkpf-xblnr.
*--------------------------------------------------------------------*
* Vendor(Benificiary) Details
* Vendor(Benificiary) General and Bank Details
*--------------------------------------------------------------------*
* BREAK charanp.
lv_vendorno = ls_reguh-lifnr.
lv_companycode = '1000'.

CALL FUNCTION 'BAPI_VENDOR_GETDETAIL'


EXPORTING
vendorno = lv_vendorno
companycode = lv_companycode
IMPORTING
generaldetail = ls_generaldetail
companydetail = ls_companydetail
return = ls_return1
TABLES
bankdetail = lt_bankdetail
vendoribandetail = lt_vendoribandetail.

DATA : lv_index TYPE bseg-bvtyp.


DATA(ls_bseg) = VALUE #( lt_bseg[ bukrs = '1000' augbl = ls_reguh-vblnr
] OPTIONAL ).
IF ls_bseg IS NOT INITIAL.
lv_index = ls_bseg-bvtyp.
ELSE.
lv_index = 1.
ENDIF.

IF lt_bankdetail IS NOT INITIAL.


* Vendor Bank Account Number
gs_final-bene_acno = gs_final-cred_ac_no = gs_final-zbnkn =
lt_bankdetail[ lv_index ]-bank_acct. "lt_bankdetail[ 1 ]-bank_acct .

* Vendor(Benificiary) Bank IFSC Code


gs_final-bene_brnc_ifsc = gs_final-ifsc_code = lv_bankkey =
gs_final-zbnky = lt_bankdetail[ lv_index ]-bank_key .

lv_bankcountry = lt_bankdetail[ lv_index ]-bank_ctry.

*--------------------------------------------------------------------*
* Type
* IF House Bank = Vendor(Benificiary) Bank , then Type = I
* IF House Bank <> Vendor(Benificiary) Bank , then
** IF cumulated Sum >2Lakhs , then Type - R
** IF cumulated Sum <=2Lakhs , then Type - N
*--------------------------------------------------------------------*
IF s_hbnk-low CP gs_final-zbnky+0(3) && '*' AND gs_final-zbnky+0(3) IS
NOT INITIAL.
gs_final-trans_type = gc_i.
* IF gs_final-zbnky CP 'HDF*' . "OR gs_final-zbnky CP 'ICI*'.
* gs_final-index = lt_bankdetail[ lv_index ]-bank_ref.
* ENDIF.
ENDIF.

ENDIF.

* Vendor(Benificiary) Name
gs_final-bene_name = gs_final-benf_name = gs_final-name1 =
ls_generaldetail-name.

* Account Holder Name


gs_final-ac_hold_name = VALUE #( lt_lfa1[ lifnr = ls_reguh-lifnr ]-koinh
OPTIONAL ).

* Vendor(Benificiary) Number
gs_final-bene_code = gs_final-lifnr = ls_reguh-lifnr.

* Customer Reference Number( Payment Doc. Number)


gs_final-vblnr = ls_reguh-vblnr.
gs_final-cust_ref_no = ls_reguh-vblnr && ls_bkpf-gjahr.

** Chq/Trans. Date ( System Date)


* WRITE sy-datum TO gs_final-valut USING EDIT MASK 'RR__/__/____' .
*MOVE sy-datum TO gs_final-valut .
gs_final-valut = | { sy-datum+6(2) }/{ sy-datum+4(2) }/{ sy-datum+0(4) }
|.
CONDENSE : gs_final-valut.

*--------------------------------------------------------------------*
* Editable Cell Properties for - Checkbox and Index Fields
*--------------------------------------------------------------------*
DATA : lv_mode TYPE raw4.
CLEAR : lv_mode.
* IF gs_final-vblnr IS INITIAL.
* lv_mode = cl_gui_alv_grid=>mc_style_disabled.
* ELSE.
* lv_mode = cl_gui_alv_grid=>mc_style_enabled.
* ENDIF.

IF gs_final-index IS NOT INITIAL.


lv_mode = cl_gui_alv_grid=>mc_style_disabled.
ENDIF.

gs_final-cell_edit = VALUE #(
( fieldname = 'BOX ' style =
lv_mode )
( fieldname = 'SRNO ' style =
cl_gui_alv_grid=>mc_style_disabled )
( fieldname = 'TRANS_TYPE ' style =
cl_gui_alv_grid=>mc_style_disabled )
( fieldname = 'INDEX ' style =
cl_gui_alv_grid=>mc_style_disabled )
( fieldname = 'ZBNKN ' style =
cl_gui_alv_grid=>mc_style_disabled )
( fieldname = 'DMBTR ' style =
cl_gui_alv_grid=>mc_style_disabled )
( fieldname = 'NAME1 ' style =
cl_gui_alv_grid=>mc_style_disabled )
( fieldname = 'LIFNR ' style =
cl_gui_alv_grid=>mc_style_disabled )
( fieldname = 'VBLNR ' style =
cl_gui_alv_grid=>mc_style_disabled )
( fieldname = 'VALUT ' style =
cl_gui_alv_grid=>mc_style_disabled )
( fieldname = 'ZBNKY ' style =
cl_gui_alv_grid=>mc_style_disabled )
( fieldname = 'BANKA ' style =
cl_gui_alv_grid=>mc_style_disabled )
( fieldname = 'BRNCH ' style =
cl_gui_alv_grid=>mc_style_disabled )
( fieldname = 'SMTP ' style =
cl_gui_alv_grid=>mc_style_disabled )
).

*--------------------------------------------------------------------*
* Index - User Maintains - Need to be updated to Header Text(BKPF-BKTXT)
*--------------------------------------------------------------------*
*gs_final-index

*--------------------------------------------------------------------*
* Get Bank Details
*--------------------------------------------------------------------*
CALL FUNCTION 'BAPI_BANK_GETDETAIL'
EXPORTING
bankcountry = lv_bankcountry
bankkey = lv_bankkey
IMPORTING
bank_address = ls_bank_address
bank_detail = ls_bank_detail
return = ls_return2.

* Vendor(Benificiary) Bank Name


gs_final-bene_bank = gs_final-banka = ls_bank_address-bank_name.
* Vendor(Benificiary) Bank Branch
gs_final-brnch = ls_bank_address-bank_branch.

* Vendor(Benificiary) Email Address


gs_final-smtp = VALUE #( lt_adr6[ addrnumber = lt_lfa1[ lifnr = ls_reguh-
lifnr ]-adrnr ]-smtp_addr OPTIONAL ).

* METRO Bank Account Number


gs_final-dr_acno = gs_final-deb_acno = ls_bnka-bnklz. " Debit
Account Number - METRO Bank A/c No.

**********************************************************************
* For RBL
**********************************************************************

IF s_hbnk-low CP 'RBL*'.

gs_final-rec_id = gc_p. " Record Identifier


gs_final-cus_rfno = ls_reguh-lifnr. " Customer_Reference_No
* gs_final-pay_val_dt = sy-datum. " Payment_Value_Date
gs_final-pay_val_dt = | { sy-datum+6(2) }/{ sy-datum+4(2) }/{ sy-
datum+0(4) }|.
IF gs_final-smtp IS NOT INITIAL.
gs_final-notf_email = | { gs_final-smtp } , [email protected]
|.
ELSE.
gs_final-notf_email = |[email protected]|.
ENDIF.

CONDENSE : gs_final-pay_val_dt.
ENDIF.

**********************************************************************

**********************************************************************
* For KOTAK
**********************************************************************
gs_final-client_code = 'METRO'.
gs_final-prod_code = 'NETPAY'.

gs_final-paym_date = | { sy-datum+6(2) }/{ sy-datum+4(2) }/{ sy-


datum+0(4) } | .
gs_final-ins_date = | { sy-datum+6(2) }/{ sy-datum+4(2) }/{ sy-
datum+0(4) } | .
gs_final-bank_cod_ind = gc_m.
gs_final-bene_email = gs_final-smtp.

CONDENSE : gs_final-paym_date ,
gs_final-ins_date .

*--------------------------------------------------------------------*
** Debit_Narration
* 1. FUND TRANSFER
* 2. BILL PAYMENT
* 3. ADVANCE PAYMENT
*--------------------------------------------------------------------*
DATA(lv_doc_key) = VALUE #( lt_acdoca[ belnr = ls_reguh-vblnr ]-bschl
OPTIONAL ).

CASE lv_doc_key.
WHEN 25. " Bill Payment
gs_final-debit_nara = gs_final-pay_remarks = gs_final-reas_paymt =
'BILL PAYMENT'.
WHEN 29. " Advance Payment
gs_final-debit_nara = gs_final-pay_remarks = gs_final-reas_paymt =
'ADVANCE PAYMENT'.
WHEN 40 OR 50. " Fund Transfer
gs_final-debit_nara = gs_final-pay_remarks = gs_final-reas_paymt =
'FUND TRANSFER'.
WHEN OTHERS.
ENDCASE.

**********************************************************************

*--------------------------------------------------------------------*
* Serial Number + Split Amount
* Type of transaction : I -
* R - RTGS
* N - NEFT
* IF House Bank = Vendor(Benificiary) Bank , then Type = I
* IF House Bank <> Vendor(Benificiary) Bank , then
** IF cumulated Sum >2Lakhs , then Type - R
** IF cumulated Sum <=2Lakhs , then Type - N
*--------------------------------------------------------------------*

LOOP AT lt_regup INTO DATA(ls_regup) WHERE laufd = ls_reguh-laufd AND


laufi = ls_reguh-laufi AND
xvorl = ls_reguh-xvorl AND
lifnr = ls_reguh-lifnr AND
vblnr = ls_reguh-vblnr.

DATA : lv_flag TYPE c.

IF ls_regup-shkzg EQ 'H'. " Credit


ls_regup-dmbtr = ls_regup-dmbtr * -1 .
ENDIF.

lv_dmbtr_tmp = lv_dmbtr_tmp + ls_regup-dmbtr.


lv_dmbtr = lv_dmbtr + ls_regup-dmbtr.

* Profit Center
IF gs_final-pcenter IS INITIAL.
gs_final-pcenter = VALUE #( lt_acdoca[ belnr = ls_regup-vblnr
gjahr = ls_regup-gjahr ]-prctr OPTIONAL ).
gs_final-pcenter_desc = VALUE #( lt_cepct[ prctr = VALUE
#( lt_acdoca[ belnr = ls_regup-vblnr

gjahr = ls_regup-gjahr

]-prctr OPTIONAL
)
]-ktext OPTIONAL
).
ENDIF. " GS_FINAL-PCENTER

CLEAR : ls_regup.

ENDLOOP.

lv_dmbtr = abs( lv_dmbtr ).

IF gs_final-trans_type EQ gc_i.
gs_final-pay_prd_code = 'IFT_INDIVIDUAL'.
gs_final-paymt_typ = 'IFT'.
ENDIF.

* Split Amount if Greaterthan 10Lakhs


WHILE lv_dmbtr >= 1000000.

*--------------------------------------------------------------------*
* RBL - Payment_Production Mode
*--------------------------------------------------------------------*

* IF ( lv_dmbtr > 200000 AND lv_dmbtr < 1000000 ) AND gs_final-


trans_type NE gc_i.
IF lv_dmbtr >= 200000 AND gs_final-trans_type NE gc_i.

gs_final-trans_type = gc_r.
gs_final-pay_prd_code = 'RTGS_INDIVIDUAL'.
gs_final-paymt_typ = 'RTGS'.

ELSEIF gs_final-trans_type NE gc_i.

gs_final-trans_type = gc_n.
gs_final-pay_prd_code = 'NEFT_INDIVIDUAL'.
gs_final-paymt_typ = 'NEFT'.

ENDIF.

* gs_final-amt = gs_final-pay_amt = gs_final-dmbtr = 1000000.


WRITE : '1000000' TO gs_final-amt ,
'1000000' TO gs_final-pay_amt ,
'1000000' TO gs_final-dmbtr .

lv_dmbtr = lv_dmbtr - 1000000.


ADD 1 TO lv_srno.
gs_final-paymt_ref = gs_final-srno = lv_srno.

* IF gs_final-trans_type IS INITIAL.
* gs_final-trans_type = gc_r.
* ENDIF.

APPEND gs_final TO gt_final.


lv_flag = gc_x.
ENDWHILE.

IF lv_dmbtr IS NOT INITIAL OR lv_flag IS INITIAL.


* gs_final-amt = gs_final-pay_amt = gs_final-dmbtr = lv_dmbtr.
WRITE : lv_dmbtr TO gs_final-amt , ##UOM_IN_MES
lv_dmbtr TO gs_final-pay_amt , ##UOM_IN_MES
lv_dmbtr TO gs_final-dmbtr . ##UOM_IN_MES

REPLACE : ',' IN gs_final-amt WITH '',


',' IN gs_final-pay_amt WITH '',
',' IN gs_final-dmbtr WITH ''.

* SPLIT : gs_final-amt AT '.' INTO gs_final-amt lv_str1,


* gs_final-pay_amt AT '.' INTO gs_final-pay_amt lv_str2,
* gs_final-dmbtr AT '.' INTO gs_final-dmbtr lv_str3.

CONDENSE : gs_final-amt ,
gs_final-pay_amt ,
gs_final-dmbtr .

ADD 1 TO lv_srno.
gs_final-paymt_ref = gs_final-srno = lv_srno.

IF lv_dmbtr >= 200000 AND gs_final-trans_type NE gc_i.


gs_final-trans_type = gc_r.
gs_final-pay_prd_code = 'RTGS_INDIVIDUAL'.
gs_final-paymt_typ = 'RTGS'.
ELSEIF gs_final-trans_type NE gc_i.
gs_final-trans_type = gc_n.
gs_final-pay_prd_code = 'NEFT_INDIVIDUAL'.
gs_final-paymt_typ = 'NEFT'.
ENDIF.

APPEND gs_final TO gt_final.


ENDIF.

**--------------------------------------------------------------------*
** RBL - Payment_Production Mode
**--------------------------------------------------------------------*
* IF lv_dmbtr_tmp > 200000.
* gs_final-pay_prd_code = 'RTGS_INDIVIDUAL'.
* gs_final-paymt_typ = 'RTGS'.
* ELSE.
* gs_final-pay_prd_code = 'NEFT_INDIVIDUAL'.
* gs_final-paymt_typ = 'NEFT'.
* ENDIF.
** RTGS
* IF lv_dmbtr_tmp > 200000 . "AND gs_final-trans_type IS INITIAL.
* MODIFY gt_final FROM gs_final TRANSPORTING "trans_type
* pay_prd_code
* paymt_typ
* WHERE lifnr = ls_reguh-lifnr AND
* vblnr = ls_reguh-vblnr.
*
** NEFT
* ELSE. "IF gs_final-trans_type IS INITIAL.
* MODIFY gt_final FROM gs_final TRANSPORTING "trans_type
* pay_prd_code
* paymt_typ
* WHERE lifnr = ls_reguh-lifnr AND
* vblnr = ls_reguh-vblnr.
* ENDIF.

CLEAR: gs_final,
ls_reguh.

ENDIF.

CLEAR : lv_bankcountry ,
lv_bankkey ,
ls_bank_address ,
ls_bank_detail ,
ls_return1 .

CLEAR :lv_vendorno ,
lv_companycode ,
ls_generaldetail,
ls_companydetail,
ls_return2 .

CLEAR : lv_dmbtr ,
lv_dmbtr_tmp .

REFRESH : lt_bankdetail ,
lt_vendoribandetail.

ENDLOOP.

CLEAR : lv_srno.

ELSE.

MESSAGE | No Records available for the given input | TYPE 'E'. " DISPLAY LIKE
'I'.

ENDIF.

ENDMETHOD.

* ALV Display
METHOD : display_alv.

* Populate the Final Internal Table


CASE gc_x.
WHEN pr_bank.

CALL METHOD gv_ref->pop_final_tab.

WHEN pr_fi.

CALL METHOD gv_ref->pop_final_tab_fi.

WHEN OTHERS.

ENDCASE.
** ALV Processing
* CALL METHOD gv_ref->alv_processing .

* Call Screen
CALL SCREEN 100.

ENDMETHOD.

ENDCLASS.

CLASS lcl_validate IMPLEMENTATION.

METHOD m_validate_housebank.

CLEAR : p_bnkid.

IF NOT s_hbnk-low IS INITIAL AND sy-ucomm EQ 'ONLI'.

* Validate House Bank Account .


IF gt_t012k IS NOT INITIAL AND s_hbnk-low IS NOT INITIAL.
DATA(ls_t012k) = VALUE #( gt_t012k[ hbkid = s_hbnk-low ] OPTIONAL ).
ENDIF.

IF ls_t012k IS INITIAL. " AND s_hbnk-low IS NOT INITIAL.


MESSAGE | House Bank - { s_hbnk-low } does not exists. | TYPE 'E' ."DISPLAY
LIKE 'I'..
ELSE.

* Set the Corresponding House Bank Id.


p_bnkid = ls_t012k-hktid.

ENDIF.

ELSEIF sy-ucomm EQ 'ONLI'.

MESSAGE | Please provide the House Bank to continue.| TYPE 'E' . "DISPLAY
LIKE 'I'.
ENDIF.

ENDMETHOD.

* Validate the Document Number


METHOD m_validate_docno.

IF pr_fi IS NOT INITIAL AND sy-ucomm EQ 'ONLI'.

* IF s_docno IS NOT INITIAL.


*
* ELSE.
* MESSAGE | Please input the FI Document Number to continue | TYPE 'E'.
* ENDIF.
IF pc_adv IS INITIAL AND pc_paymt IS INITIAL AND pc_fi_gl IS INITIAL.
MESSAGE | Checkmark atleast one transaction type( F-48 / F-53 / FB50 ) to
continue. | TYPE 'E'. " DISPLAY LIKE 'E'.
ENDIF.

ENDIF.

IF s_hbnk-low IS NOT INITIAL.

p_bnkid = VALUE #( gt_t012k[ hbkid = s_hbnk-low ]-hktid OPTIONAL ).


bank_des = VALUE #( gt_t012k[ hbkid = s_hbnk-low ]-text1 OPTIONAL ).
DATA(bnk_acno) = VALUE #( gt_t012k[ hbkid = s_hbnk-low ]-bankn OPTIONAL ).

* REPLACE |({ bnk_acno+0(3) }| IN bank_des WITH ''.


* bank_des = bank_des && |( { bnk_acno } )|.

ENDIF.

ENDMETHOD.

ENDCLASS.

*&---------------------------------------------------------------------*
*& Include ZMT_R_FI_BANKAPPL_FORM
*&---------------------------------------------------------------------*
*&---------------------------------------------------------------------*
*& Form F_DYN_SCRN
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& --> p1 text
*& <-- p2 text
*&---------------------------------------------------------------------*
FORM f_dyn_scrn .

* Dynamic Selection Screen


CASE gc_x.

* If Automatic Payment Transaction Radiobutton selected - Disable FI Transactions


WHEN pr_bank.

LOOP AT SCREEN.
IF screen-group1 = 'M2'. " FI - Transactions.
screen-active = 0.
MODIFY SCREEN.
ENDIF.

IF screen-name EQ 'P_BNKID'.
screen-input = 0.
MODIFY SCREEN.
ENDIF.
ENDLOOP.

* If FI Transactions Radiobutton selected - Disable Automatic Payment Transaction


WHEN pr_fi.

LOOP AT SCREEN.
IF screen-group1 = 'M1'. " Automatic Payment Transactions
screen-active = 0.
MODIFY SCREEN.
ENDIF.

IF screen-name EQ 'P_BNKID'.
screen-input = 0.
MODIFY SCREEN.
ENDIF.

ENDLOOP.

WHEN OTHERS.

ENDCASE.

ENDFORM.
*&---------------------------------------------------------------------*
*& Form F_DOWNLOAD_EMPTY_INDEX_RECORDS
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& --> p1 text
*& <-- p2 text
*&---------------------------------------------------------------------*
FORM f_download_empty_index_records .

DATA : lt_final TYPE STANDARD TABLE OF typ_final,


lt_fcat TYPE lvc_t_fcat.

REFRESH : lt_final,
lt_fcat.
lt_final = gt_final.
lt_fcat = gt_fcat.

READ TABLE lt_fcat INTO DATA(ls_fcat) INDEX 1.


IF ls_fcat IS NOT INITIAL.
ls_fcat-tabname = 'LT_FINAL'.
ls_fcat-tech = abap_false.
MODIFY lt_fcat FROM ls_fcat TRANSPORTING tabname tech WHERE tech IS NOT
INITIAL.
ENDIF.

DELETE lt_final WHERE ( index IS NOT INITIAL OR box IS INITIAL ).

IF lt_final IS NOT INITIAL.

* Download the Template


TRY.
DATA: o_salv TYPE REF TO cl_salv_table.
* Create SALV object
cl_salv_table=>factory( IMPORTING
r_salv_table = o_salv
CHANGING
t_table = lt_final ).

*** Create field catalog


** DATA(o_cols) = o_salv->get_columns( ).
** DATA(o_aggr) = o_salv->get_aggregations( ).
** DATA(it_fcat) =
cl_salv_controller_metadata=>get_lvc_fieldcatalog( r_columns = o_cols
**
r_aggregations = o_aggr ).

* Create CL_SALV_EX_RESULT_DATA_TABLE
DATA(o_salv_ex_res) = cl_salv_ex_util=>factory_result_data_table( r_data
= REF #( lt_final )

t_fieldcatalog = lt_fcat ).

DATA: lv_xml_bytes TYPE xstring.


* CL_SALV_EX_RESULT_DATA_TABLE -> XML (Bytes)
* For CSV: is_format = if_salv_bs_lex_format=>mc_format_csv
cl_salv_bs_lex=>export_from_result_data_table( EXPORTING
is_format =
if_salv_bs_lex_format=>mc_format_xlsx
ir_result_data_table =
o_salv_ex_res
IMPORTING
er_result_file =
lv_xml_bytes ).

* If byte data exists


IF xstrlen( lv_xml_bytes ) > 0.
DATA: lv_size TYPE i.
DATA: it_raw_data TYPE xml_rawdata.

* xstring (Bytes) -> RAW (iTab)


cl_scp_change_db=>xstr_to_xtab( EXPORTING
im_xstring = lv_xml_bytes
IMPORTING
ex_size = lv_size
ex_xtab = it_raw_data ).

IF lines( it_raw_data ) > 0.


DATA: lv_action TYPE i.
DATA: lv_filename TYPE string.
DATA: lv_fullpath TYPE string.
DATA: lv_path TYPE string.

cl_gui_frontend_services=>file_save_dialog( EXPORTING
default_extension =
'xlsx'
default_file_name =
'ZRS_INDEX_RECS.xlsx'
file_filter = |
Excel file (*.xlsx)\|*.xlsx\|{ cl_gui_frontend_services=>filetype_all }|
prompt_on_overwrite =
abap_true
CHANGING
filename =
lv_filename
path =
lv_path
fullpath =
lv_fullpath
user_action =
lv_action ).

IF lv_action EQ cl_gui_frontend_services=>action_ok.
cl_gui_frontend_services=>gui_download( EXPORTING
filename =
lv_fullpath
filetype =
'BIN'
bin_filesize =
lv_size " Size is important for correctly writing the Excel file
CHANGING
data_tab =
it_raw_data
EXCEPTIONS
file_write_error =
1
no_batch =
2
gui_refuse_filetransfer =
3
invalid_type =
4
no_authority =
5
unknown_error =
6
header_not_allowed =
7
separator_not_allowed =
8
filesize_not_allowed =
9
header_too_long =
10
dp_error_create =
11
dp_error_send =
12
dp_error_write =
13
unknown_dp_error =
14
access_denied =
15
dp_out_of_memory =
16
disk_full =
17
dp_timeout =
18
file_not_found =
19
dataprovider_exception =
20
control_flush_error =
21
not_supported_by_gui =
22
error_no_gui =
23
OTHERS =
24 ).
IF sy-subrc = 0.
ELSE.
ENDIF.
ENDIF.
ENDIF.
ENDIF.

CATCH cx_root INTO DATA(e_txt).


MESSAGE e_txt->get_text( ) TYPE 'S'.
ENDTRY.

ELSE.

MESSAGE 'CheckMark atleast one record, to proceed with the download.' TYPE 'E'.

ENDIF.

ENDFORM. " F_DOWNLOAD_EMPTY_INDEX_RECORDS


*&---------------------------------------------------------------------*
*& Form F_UPLOAD_FILL_INDEX_RECORDS
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& --> p1 text
*& <-- p2 text
*&---------------------------------------------------------------------*
FORM f_upload_fill_index_records .

DATA : lv_file TYPE ibipparms-path.


DATA : lt_raw TYPE truxs_t_text_data,
lt_final TYPE TABLE OF typ_final.

CALL FUNCTION 'F4_FILENAME'


EXPORTING
program_name = syst-cprog
dynpro_number = syst-dynnr
* FIELD_NAME = ' '
IMPORTING
file_name = lv_file.

* Load the file and Convert EXCEL Data to SAP Data(Excel to Internal Table)
IF lv_file IS NOT INITIAL.

CLEAR : lt_raw.

* * Get data from excel file


CALL METHOD cl_gui_frontend_services=>gui_upload
EXPORTING
filename = CONV string( lv_file )
filetype = 'ASC'
has_field_separator = 'X'
dat_mode = ''
CHANGING
data_tab = lt_raw
EXCEPTIONS
file_open_error = 1
file_read_error = 2
no_batch = 3
gui_refuse_filetransfer = 4
invalid_type = 5
no_authority = 6
unknown_error = 7
bad_data_format = 8
header_not_allowed = 9
separator_not_allowed = 10
header_too_long = 11
unknown_dp_error = 12
access_denied = 13
dp_out_of_memory = 14
disk_full = 15
dp_timeout = 16
not_supported_by_gui = 17
error_no_gui = 18
OTHERS = 19.

IF sy-subrc EQ 0.

* * Get data from excel file


CALL FUNCTION 'TEXT_CONVERT_XLS_TO_SAP'
EXPORTING
* I_FIELD_SEPERATOR =
i_line_header = 'X'
i_tab_raw_data = lt_raw
i_filename = lv_file
TABLES
i_tab_converted_data = lt_final
EXCEPTIONS
conversion_failed = 1
OTHERS = 2.
IF sy-subrc <> 0.
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
LEAVE LIST-PROCESSING.
ENDIF.

ENDIF. " SY-SUBRC


ENDIF. " LV_FILE

IF gt_final IS INITIAL.

MESSAGE 'No records considered or File is in open mode. Close the file and re-
run the Transaction' TYPE 'E'.

ELSE.
LOOP AT lt_final ASSIGNING FIELD-SYMBOL(<lfs_final>) WHERE box IS NOT INITIAL.

READ TABLE gt_final ASSIGNING FIELD-SYMBOL(<fs_final>) WITH KEY box =


<lfs_final>-box
srno =
<lfs_final>-srno
trans_type =
<lfs_final>-trans_type
* lifnr
= <lfs_final>-lifnr
* vblnr
= <lfs_final>-vblnr
* cust_ref_no
= <lfs_final>-cust_ref_no
* benf_code
= <lfs_final>-benf_code
* bene_acno
= <lfs_final>-bene_acno
* pcenter
= <lfs_final>-pcenter
.
IF <fs_final> IS ASSIGNED.
<fs_final>-index = <lfs_final>-index.
ENDIF. " <FS_FINAL>

ENDLOOP. " GT_FINAL

ENDIF.

ENDFORM. " F_UPLOAD_FILL_INDEX_RECORDS

You might also like