- March 20, 2026
- Kishore Thutaram
-
- 0
Update Credit Card details from the customer master to the Sales order during creation or change
Business Requirement: Update the credit card details from the customer master during sales order creation by generating a billing plan
Steps: User Exit -> MV45AFZZ
Form routine: MOVE_FIELD_TO_VBAK
Implement the code below
Constants : lc_parvw_py TYPE parvw VALUE 'RG',
lc_parvw_we TYPE parvw VALUE 'WE',
lc_parvw_ag TYPE parvw VALUE 'AG',
lc_procudere TYPE abssche_cm VALUE '000002',
lc_insert TYPE updkz VALUE 'I',
lc_fpart TYPE fpart VALUE '03',
lc_fptyp TYPE fptyp_fp VALUE '1',
lc_trtyp_create TYPE trtyp VALUE 'H'.
DATA : ls_fplt TYPE fpltvb,
lt_fplt TYPE STANDARD TABLE OF fpltvb,
lt_fplt_old TYPE STANDARD TABLE OF fpltvb,
lt_fpla_old TYPE STANDARD TABLE OF fplavb,
lt_fpla TYPE STANDARD TABLE OF fplavb,
ls_fpla TYPE fplavb,
ls_cust_ccard TYPE vckun.
if xvbkd IS NOT INITIAL.
DATA(ls_xvbkd) = xvbkd[ 1 ].
READ TABLE xfplt INTO DATA(ls_xfplt) INDEX 1.
*--*Check Billing plan procedure as credit card and net value is not initial
IF ls_xvbkd-abssc = lc_procudere AND vbak-netwr IS NOT INITIAL.
*--*Trigger Only if billing plan is initial
IF ls_xfplt-fplnr IS INITIAL. "billing plan check
IF gv_execution_flag IS INITIAL. "this enhancemnt should execute only once- User can go for manual deletion
*--*Read Partner info
DATA(ls_xvbpa) = VALUE #( xvbpa[ parvw = lc_parvw_py ] OPTIONAL ). "Payer
IF ls_xvbpa-kunnr IS INITIAL.
ls_xvbpa = VALUE #( it_xvbpa[ parvw = lc_parvw_we ] OPTIONAL ). " Shipto
IF ls_xvbpa-kunnr IS INITIAL.
ls_xvbpa = VALUE #( it_xvbpa[ parvw = lc_parvw_ag ] OPTIONAL ). "Sold-To
ENDIF.
ENDIF.
SELECT SINGLE *
FROM vckun INTO @ls_cust_ccard
WHERE kunnr = @ls_xvbpa-kunnr
AND ccdef = @abap_true.
IF sy-subrc NE 0.
ls_xvbpa = VALUE #( it_xvbpa[ parvw = lc_parvw_we ] OPTIONAL ). " Shipto
SELECT SINGLE *
FROM vckun INTO @ls_cust_ccard
WHERE kunnr = @ls_xvbpa-kunnr
AND ccdef = @abap_true.
IF sy-subrc NE 0.
ls_xvbpa = VALUE #( it_xvbpa[ parvw = lc_parvw_ag ] OPTIONAL ). "Sold-To
SELECT SINGLE *
FROM vckun INTO @ls_cust_ccard
WHERE kunnr = @ls_xvbpa-kunnr
AND ccdef = @abap_true.
ENDIF.
ENDIF.
*--*Assign customer-credit card
*--*Payment Card Master
IF sy-subrc EQ 0.
SELECT SINGLE ccins, "Payment cards: Card type
ccnum, "Payment cards: Card type
ccname,"Payment cards: Name of cardholder
datbi "Payment Cards: Valid To
FROM ccard INTO @DATA(ls_ccrad)
WHERE ccins = @ls_cust_ccard-ccins
AND ccnum = @ls_cust_ccard-ccnum.
IF sy-subrc EQ 0.
*--* Update FPLT
ls_fplt-ccins = ls_cust_ccard-ccins.
ls_fplt-ccnum = ls_cust_ccard-ccnum_mask.
ls_fplt-datbi = ls_ccrad-datbi.
ls_fplt-ccname = ls_ccrad-ccname.
ls_fplt-dp_token = ls_cust_ccard-ccnum.
ls_fplt-updkz = lc_insert.
*--*Update FPLA
ls_fpla-updkz = lc_insert.
ls_fpla-fpart = lc_fpart.
ls_fpla-fptyp = lc_fptyp.
APPEND ls_fpla TO xfpla.
CLEAR ls_fpla.
*--* Generate Billing Plan
CALL FUNCTION 'BILLING_SCHEDULE_GENERATE'
EXPORTING
i_fplnr = vbak-rplnr
i_waers = vbak-waerk
i_fpart = lc_fpart
i_upd_fpla = abap_true
i_upd_fplt = abap_true
i_fpla_only = ' '
IMPORTING
e_fplnr = vbak-rplnr
TABLES
fpla_new = lt_fpla
fpla_old = lt_fpla_old
fplt_new = lt_fplt
fplt_old = lt_fplt_old.
*--*Update Billing Plan
xfpla = lt_fpla.
IF xfpla IS NOT INITIAL.
xfpla[ 1 ]-fpltu = '000001'.
ENDIF.
CALL FUNCTION 'BILLING_SCHEDULE_MAINTAIN'
EXPORTING
i_fplt = ls_fplt
i_upd_fplt = abap_true
i_fplnr = vbak-rplnr
TABLES
fpla_old = lt_fpla_old
fpla_new = lt_fpla
fplt_old = lt_fplt_old
fplt_new = xfplt.
gv_execution_flag = abap_true.
ENDIF.
ENDIF.
* ENDIF.
ENDIF.
ENDIF.
ENDIF.
ENDIF.






























