S4 SD 信贷更新

背景:ECC升级到S4之后,KNKK表被替换成UKMBP_CMS_SGM和 UKMBP_CMS,信贷更新函数CREDITLIMIT_CHANGE也无法使用。

https://community.sap.com/t5/supply-chain-management-blog-posts-by-sap/conversion-of-credit-management-to-sap-s-4hana/ba-p/13439084

https://community.sap.com/t5/supply-chain-management-blog-posts-by-sap/fscm-credit-management-update-s-4-bp-role-sap-credit-management-ukm000/ba-p/13577971

  FORM frm_create  TABLES   pt_create STRUCTURE  gw_output.
  CONSTANTS: lc_error   TYPE c VALUE 'E',
            lc_success TYPE c VALUE 'S'.
   DATA:lo_facade       TYPE REF TO cl_ukm_facade,
      lo_partner      TYPE REF TO cl_ukm_business_partner,
       lo_bupa_factory TYPE REF TO cl_ukm_bupa_factory.
   DATA: lo_account       TYPE REF TO cl_ukm_account,
         ls_bp_credit_sgm TYPE ukm_s_bp_cms_sgm,
         ls_ukm_s_bp_cms  TYPE ukm_s_bp_cms.
   DATA ls_bupa_error     TYPE mds_ctrls_error.
  DATA lv_credit_sgmnt   TYPE ukm_credit_sgmnt .
  
   DATA lo_bupa TYPE REF TO cl_im_mds_bupa_lock .
  DATA: lv_upd_umk TYPE cdpos-chngind,
         lv_sybrc   TYPE sy-subrc,
         lv_message TYPE string,
         lw_create  LIKE gw_output,
         lt_ukmt    TYPE TABLE OF ukm_ei_bp_cms_sgm,
         lt_cms_sgm TYPE TABLE OF ukmbp_cms_sgm,
         ls_cms_sgm TYPE ukmbp_cms_sgm,
         lt_log     TYPE TABLE OF zzift002,
        lw_log     TYPE zzift002,
        lt_return  TYPE ukm_t_monitor_return.
  
   IF  pt_create[] IS NOT INITIAL.
    REFRESH:lt_log.
     SELECT * INTO CORRESPONDING FIELDS OF TABLE lt_cms_sgm
                        FROM ukmbp_cms_sgm
                         FOR ALL ENTRIES IN pt_create
                       WHERE partner = pt_create-kunnr .
  LOOP AT pt_create INTO lw_create.
  READ TABLE lt_cms_sgm  INTO ls_cms_sgm WITH KEY partner = lw_create-kunnr.
  IF sy-subrc = 0.
    CONTINUE .
  ENDIF.

  CLEAR:ls_bupa_error,lt_return[],lv_message .

  IF lo_bupa IS INITIAL .
    CREATE OBJECT lo_bupa.
  ENDIF.

  lo_bupa->if_ex_bupa_lock~lock(
    EXPORTING
      iv_partner = lw_create-kunnr
    CHANGING
      cs_error   = ls_bupa_error ).

  IF ls_bupa_error-is_error IS INITIAL .


    "set & fetch Parent data
    lo_facade = cl_ukm_facade=>create( i_activity = cl_ukm_cnst_eventing=>bp_maintenance ).
    lo_bupa_factory = lo_facade->get_bupa_factory( ).
    lo_partner = lo_bupa_factory->get_business_partner( lw_create-kunnr ).

    ls_ukm_s_bp_cms-check_rule       = '01'.          "信用检查的规则
    ls_ukm_s_bp_cms-limit_rule       = 'B2B-EXIST'.   "计算得分和信用额度的规则
    ls_ukm_s_bp_cms-risk_class       = 'Z01'. "风险类别
    ls_ukm_s_bp_cms-risk_class_chgdt = sy-datum. "风险类更改日期
    ls_ukm_s_bp_cms-rating_chg_date  = sy-datum. "风险类更改日期
    ls_ukm_s_bp_cms-rating_val_date  = '99991231' .
    lo_partner->set_bp_cms(
      EXPORTING
        is_bp_cms = ls_ukm_s_bp_cms
    ).

    "Fetch & update credit segment data
    lv_credit_sgmnt = '1010'.
    lo_account = lo_bupa_factory->get_credit_account(
      i_partner      = lw_create-kunnr
      i_credit_sgmnt = lv_credit_sgmnt ).

    ls_bp_credit_sgm-credit_limit     = '0.01'  .      "金额
    ls_bp_credit_sgm-limit_chg_date   = sy-datum.
    ls_bp_credit_sgm-limit_valid_date = '99991231'.    "有效终止日期

    lo_account->set_bp_cms_sgm(
      EXPORTING
        is_bp_cms_sgm = ls_bp_credit_sgm
    ).

    lt_return[] = lo_bupa_factory->save_all(
      EXPORTING
        i_upd_task = lv_upd_umk ).


    LOOP AT lt_return INTO DATA(ls_return)
          WHERE MSGTY = 'E' OR MSGTY = 'A'.
      lv_message =  lv_message && ls_return-message.
    ENDLOOP.

    IF  lv_message IS INITIAL.
      CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
        EXPORTING
          wait = 'X'. 

      lw_create-zcjzt = '创建客户信贷限额成功'. 
    ELSE.
      CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'.
      lv_sybrc = 4. 

     lw_create-zcjzt = '创建失败'. 
      lw_log-ifflg = 'E'."
    ENDIF .
      lo_bupa->if_ex_bupa_lock~unlock(
        EXPORTING
          iv_partner = lw_create-kunnr
        CHANGING
          cs_error   = ls_bupa_error ).
  ELSE.
    lw_create-zcjzt = '锁定客户失败'.
    lw_log-ifflg = 'E'."
  ENDIF . 

ENDLOOP.

LOOP AT gt_output INTO gw_output.
  READ TABLE pt_create[] INTO lw_create WITH KEY kunnr = gw_output-kunnr.
  IF sy-subrc = 0.
    gw_output-zcjzt        = lw_create-zcjzt.
    gw_output-credit_limit = lw_create-credit_limit . "信贷限额
    gw_output-risk_class   = lw_create-risk_class.    "风险类别
  ENDIF.
  MODIFY gt_output FROM gw_output TRANSPORTING zcjzt credit_limit risk_class.
ENDLOOP.
  IF lt_log[] IS NOT INITIAL.
    MODIFY zzift002 FROM TABLE lt_log.
  ENDIF.  
 ENDIF.
ENDFORM.

posted on 2025-12-16 16:38  加西亚1986  阅读(4)  评论(0)    收藏  举报

导航