Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
* Class Implementation
*--------------------------------------------------------------------*
CLASS lcl_display IMPLEMENTATION.
*--------------------------------------------------------------------*
* Local Types and Declarations
*--------------------------------------------------------------------*
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.
*--------------------------------------------------------------------*
* 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.
*--------------------------------------------------------------------*
* 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
FREE : lt_acdoca_ben_tmp1 ,
lt_acdoca_ben_tmp2 ,
lt_acdoca_ben_tmp3 .
ENDIF.
*--------------------------------------------------------------------*
* 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
REFRESH : lt_acdoca_ben_tmp1.
ENDIF.
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.
*--------------------------------------------------------------------*
* 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.
* 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.
gs_final-ac_hold_name = ls_lfa1-koinh.
ENDIF.
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.
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
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.
ENDIF.
**********************************************************************
* For RBL
**********************************************************************
IF s_hbnk-low CP 'RBL*'.
CONDENSE :gs_final-pay_val_dt.
ENDIF.
**********************************************************************
* For KOTAK
**********************************************************************
gs_final-client_code = 'METRO'.
gs_final-prod_code = 'NETPAY'.
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.
CLEAR : ls_acdoca_bank.
ENDLOOP.
*--------------------------------------------------------------------*
* 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.
*--------------------------------------------------------------------*
* RBL - Payment_Production Mode
*--------------------------------------------------------------------*
gs_final-trans_type = gc_r.
gs_final-pay_prd_code = 'RTGS_INDIVIDUAL'.
gs_final-paymt_typ = 'RTGS'.
gs_final-trans_type = gc_n.
gs_final-pay_prd_code = 'NEFT_INDIVIDUAL'.
gs_final-paymt_typ = 'NEFT'.
ENDIF.
* IF gs_final-trans_type IS INITIAL.
* gs_final-trans_type = gc_r.
* ENDIF.
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
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.
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.
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.
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'
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' )
* 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 )
"edit_mask = 'RR__/__/____' )
* For HDFC
( fieldname = 'MICR_NO' col_pos = '26' coltext = 'MICR Number
'(a27) tech = lvf_hdfc )
* 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
*--------------------------------------------------------------------*
ENDIF.
ENDMETHOD.
ENDMETHOD.
* 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
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.
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
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.
*--------------------------------------------------------------------*
* Process the Data and Populate the Final Internal Table
*--------------------------------------------------------------------*
LOOP AT lt_reguh INTO DATA(ls_reguh).
*--------------------------------------------------------------------*
* 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.
* Vendor(Benificiary) Number
gs_final-bene_code = gs_final-lifnr = ls_reguh-lifnr.
*--------------------------------------------------------------------*
* 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.
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.
**********************************************************************
* For RBL
**********************************************************************
IF s_hbnk-low CP 'RBL*'.
CONDENSE : gs_final-pay_val_dt.
ENDIF.
**********************************************************************
**********************************************************************
* For KOTAK
**********************************************************************
gs_final-client_code = 'METRO'.
gs_final-prod_code = 'NETPAY'.
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
*--------------------------------------------------------------------*
* 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.
IF gs_final-trans_type EQ gc_i.
gs_final-pay_prd_code = 'IFT_INDIVIDUAL'.
gs_final-paymt_typ = 'IFT'.
ENDIF.
*--------------------------------------------------------------------*
* RBL - Payment_Production Mode
*--------------------------------------------------------------------*
gs_final-trans_type = gc_r.
gs_final-pay_prd_code = 'RTGS_INDIVIDUAL'.
gs_final-paymt_typ = 'RTGS'.
gs_final-trans_type = gc_n.
gs_final-pay_prd_code = 'NEFT_INDIVIDUAL'.
gs_final-paymt_typ = 'NEFT'.
ENDIF.
* IF gs_final-trans_type IS INITIAL.
* gs_final-trans_type = gc_r.
* ENDIF.
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.
**--------------------------------------------------------------------*
** 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.
WHEN pr_fi.
WHEN OTHERS.
ENDCASE.
** ALV Processing
* CALL METHOD gv_ref->alv_processing .
* Call Screen
CALL SCREEN 100.
ENDMETHOD.
ENDCLASS.
METHOD m_validate_housebank.
CLEAR : p_bnkid.
ENDIF.
MESSAGE | Please provide the House Bank to continue.| TYPE 'E' . "DISPLAY
LIKE 'I'.
ENDIF.
ENDMETHOD.
ENDIF.
ENDIF.
ENDMETHOD.
ENDCLASS.
*&---------------------------------------------------------------------*
*& Include ZMT_R_FI_BANKAPPL_FORM
*&---------------------------------------------------------------------*
*&---------------------------------------------------------------------*
*& Form F_DYN_SCRN
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& --> p1 text
*& <-- p2 text
*&---------------------------------------------------------------------*
FORM f_dyn_scrn .
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.
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 .
REFRESH : lt_final,
lt_fcat.
lt_final = gt_final.
lt_fcat = gt_fcat.
* 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 ).
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.
ELSE.
MESSAGE 'CheckMark atleast one record, to proceed with the download.' TYPE 'E'.
ENDIF.
* Load the file and Convert EXCEL Data to SAP Data(Excel to Internal Table)
IF lv_file IS NOT INITIAL.
CLEAR : lt_raw.
IF sy-subrc EQ 0.
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.
ENDIF.