Sei sulla pagina 1di 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 } , vikas.kale@metroshoe.com
|.
ELSE.
gs_final-notf_email = |vikas.kale@metroshoe.com|.
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 } , vikas.kale@metroshoe.com
|.
ELSE.
gs_final-notf_email = |vikas.kale@metroshoe.com|.
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

Potrebbero piacerti anche