• 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.
   
    

Kishore Thutaram

SAP Solution Architect | 16+ Years' Experience in SAP | Sharing Practical SAP Knowledge | Engineering Graduate with Expertise in SAP Architecture

https://fiowelt.com