客户信贷额度相关
1.查询客户信贷使用情况
函数:UKM_COMMTS_READ
FUNCTION zfmsd_credit_to_bi. *"---------------------------------------------------------------------- *"*"本地接口: *" EXPORTING *" VALUE(EV_TYPE) TYPE BAPI_MTYP *" VALUE(EV_MSG) TYPE BAPI_MSG *" TABLES *" IT_IN STRUCTURE ZSSD0047 *" ET_DATA STRUCTURE ZSSD0048 *"---------------------------------------------------------------------- DATA:lt_ukm_totals TYPE TABLE OF ukm_totals, ls_ukm_totals LIKE LINE OF lt_ukm_totals. IF it_in[] IS INITIAL. ev_type = 'E'. ev_msg = '信用段与客户必填'. ENDIF. IF it_in[] IS NOT INITIAL. "助记码 SELECT partner, bu_sort1 FROM but000 FOR ALL ENTRIES IN @it_in[] WHERE partner = @it_in-kunnr INTO TABLE @DATA(lt_but000). SORT lt_but000 BY partner. "客户名称 SELECT kunnr, name1, name2 FROM kna1 FOR ALL ENTRIES IN @it_in[] WHERE kunnr = @it_in-kunnr INTO TABLE @DATA(lt_kna1). SORT lt_kna1 BY kunnr. "应收单未审批金额 SELECT credit_sgmnt,partner,zysdamount FROM ztsd0027 FOR ALL ENTRIES IN @it_in[] WHERE credit_sgmnt = @it_in-credit_sgmnt AND partner = @it_in-kunnr INTO TABLE @DATA(lt_ztsd0027). SORT lt_ztsd0027 BY credit_sgmnt partner. ENDIF. LOOP AT it_in[] ASSIGNING FIELD-SYMBOL(<fs_in>). et_data-kunnr = <fs_in>-kunnr. et_data-credit_sgmnt = <fs_in>-credit_sgmnt. "助记码 READ TABLE lt_but000 INTO DATA(ls_but000) WITH KEY partner = <fs_in>-kunnr BINARY SEARCH. IF sy-subrc EQ 0. et_data-sort1 = ls_but000-bu_sort1. ENDIF. "客户名称 READ TABLE lt_kna1 INTO DATA(ls_kna1) WITH KEY kunnr = <fs_in>-kunnr BINARY SEARCH. IF sy-subrc EQ 0. et_data-name1 = ls_kna1-name1 && ls_kna1-name2. ENDIF. CALL FUNCTION 'UKM_COMMTS_READ' EXPORTING i_partner = <fs_in>-kunnr i_segment = <fs_in>-credit_sgmnt TABLES et_ukm_totals = lt_ukm_totals. LOOP AT lt_ukm_totals INTO ls_ukm_totals WHERE partner = <fs_in>-kunnr AND credit_sgmnt = <fs_in>-credit_sgmnt. "信贷风险类别 et_data-comm_typ = ls_ukm_totals-comm_typ. "信贷风险类别描述 SELECT SINGLE comm_typ_txt FROM ukmcomm_typest INTO et_data-comm_typ_txt WHERE comm_typ = et_data-comm_typ AND langu = sy-langu. "信用敞口金额 IF et_data-comm_typ = '500'. "公司的期初上线方案导致重复信贷数据,重复信贷数据扣除的表是ZTSD0027,而在前台重复信贷金额会记录在500计费凭证值中 "传给外围时需要扣除 READ TABLE lt_ztsd0027 INTO DATA(ls_ztsd0027) WITH KEY credit_sgmnt = <fs_in>-credit_sgmnt partner = <fs_in>-kunnr BINARY SEARCH. IF sy-subrc EQ 0. et_data-amount = ls_ukm_totals-amount - ls_ztsd0027-zysdamount. ELSE. et_data-amount = ls_ukm_totals-amount. ENDIF. ELSE. et_data-amount = ls_ukm_totals-amount. ENDIF. APPEND et_data TO et_data[]. CLEAR:ls_ukm_totals. ENDLOOP. IF sy-subrc NE 0. APPEND et_data TO et_data[]. ENDIF. CLEAR:lt_ukm_totals,ls_but000,ls_kna1,et_data. ENDLOOP. ENDFUNCTION.
2.信贷额度检查时,扣减未审批金额
前提:BP中维护客户的信用规则是B2B-EXIST(无限额计算的公式)
BP模拟信用检查时:
1.在类CL_UKM_CREDIT_CHECK_SIMU-->CHECK_CREDIT_WORTHINESS中调用信用检查方法前,将对应的客户和信用段传进内存.
2.在类CL_IM_UKM_CHECK_010-->IF_EX_UKM_CHECK_STEP~CHECK_STEP中将对应的信贷额度进行扣减或增加
结果:
客户下达销售订单或交货单计算信贷额度增强:
1.在类CL_UKM_XI_FACADE_R3_50-->IF_UKM_CREDIT_QUERY_R3~CHECK_CREDIT中调用信用检查方法前,将对应的客户和信用段传进内存.
第二步跟上述BP代码一致,结果也可自行测
3.增加信贷类别计算时增加相应信贷类别额度计算
1.增加信用曝光类别:
2.增加负债类别
3.创建BADI实施,增加信用类别数据
METHOD if_ex_ukm_fill~fill_fields. DATA: ls_in LIKE LINE OF is_notification. READ TABLE is_notification INTO DATA(ls_data) INDEX 1. "Without this conditional transaction UKM_CASE will dump. IF sy-tcode NE 'UKM_CASE' AND sy-tcode NE 'UKM_MY_DCDS'. CLEAR ls_in. SELECT * FROM ytest_credit INTO TABLE @DATA(lt_credit). LOOP AT lt_credit INTO DATA(ls_credit). ls_in-partner = ls_credit-partner. ls_in-credit_sgmnt = ls_credit-credit_sgmnt. ls_in-comm_typ = 'Z01'. ls_in-amount = ls_credit-amount. ls_in-currency = ls_credit-currency. APPEND ls_in TO is_notification. ENDLOOP. * ls_in-partner = '0001019367'. "BP * ls_in-credit_sgmnt = '1000'. "Credit segment * ls_in-comm_typ = 'Z01'. "Liability category * ls_in-amount = '1300'. "Value added to Credit Exposure * ls_in-currency = 'USD'. "Currency * ls_in-objkey = 'TFBV-00003-3000000001-31001588'. "Object key will be showed in reports * ls_in-objtype = 'MATNR'. "Customized object type * ls_in-date = '20200805'. "Date since BP is carrying debt, it will influence CM behaviour * * APPEND ls_in TO is_notification. * * CLEAR ls_in. * ls_in-partner = '0001019367'. * ls_in-credit_sgmnt = '1000'. * ls_in-comm_typ = 'Z01'. * ls_in-amount = '5200'. * ls_in-currency = 'USD'. * ls_in-objkey = 'TFBV-00003-3000000002-31001589'. * ls_in-objtype = 'MATNR'. * ls_in-date = '20200805'. * * APPEND ls_in TO is_notification. ENDIF. EXPORT ukm_item = is_notification TO MEMORY ID 'UKM_ITEM'. ENDMETHOD.