ABAP 创建BP客户主数据

本文档详细介绍了如何在ABAP中使用函数模块CVI_EI_INBOUND_MAIN创建客户主数据,包括填充PARTNER和CUSTOMER相关数据,并展示了如何添加信用等额外信息。通过示例代码,演示了从创建伙伴GUID到维护信用段数据的完整过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

**

ABAP 创建BP客户主数据

**
推荐使用:CVI_EI_INBOUND_MAIN
创建客户主数据后可以添加信用等其他相关数据。

这个函数的导入导出参数如下:

     CALL FUNCTION 'CVI_EI_INBOUND_MAIN'
      EXPORTING
        I_DATA   = LT_DATA
*       I_EXT_DATA       =
      IMPORTING
        E_RETURN = LT_RETURN.

LT_DATA中包含PARTNER和CUSTOMER相关数据。
数据填充可以参照以下DEMO:

**定义调用CVI_EI_INBOUND_MAIN创建的输入参数
DATA:LV_BPARTNERGUID TYPE BU_PARTNER_GUID_BAPI.
DATA:LT_RETURN_TAX TYPE TABLE OF BAPIRET2 WITH HEADER LINE,
     LT_RETURN_FRG TYPE TABLE OF BAPIRET2 WITH HEADER LINE.
DATA:LT_RETURN_UKMBP TYPE UKM_T_MONITOR_RETURN .

DATA : LS_PARTNER   TYPE BUS_EI_EXTERN,
       LS_CUSTOMER TYPE CMDS_EI_EXTERN,
       LT_ADDRESSES     TYPE BUS_EI_BUPA_ADDRESS_T,
       LS_ADDRESSES     TYPE BUS_EI_BUPA_ADDRESS,
       LT_PHONE         TYPE BUS_EI_BUPA_TELEPHONE_T,
       LS_PHONE         TYPE BUS_EI_BUPA_TELEPHONE,
       LT_COMPANY       TYPE CMDS_EI_COMPANY_T,
       LS_COMPANY       TYPE CMDS_EI_COMPANY,
       LT_SALES         TYPE CMDS_EI_SALES_T,
       LS_SALES         TYPE CMDS_EI_SALES,
       LT_TAX_IND       TYPE CMDS_EI_TAX_IND_T,
       LS_TAX_IND       TYPE CMDS_EI_TAX_IND,
       LT_ROLES         TYPE BUS_EI_BUPA_ROLES_T,
       LS_ROLES         TYPE BUS_EI_BUPA_ROLES,
       LT_FUNCTIONS     TYPE CMDS_EI_FUNCTIONS_T,
       LS_FUNCTIONS     TYPE CMDS_EI_FUNCTIONS,
       LT_BANKS         TYPE BUS_EI_BUPA_BANKDETAIL_T,
       LS_BANKS         TYPE BUS_EI_BUPA_BANKDETAIL.

DATA : LS_HEADER       TYPE CMDS_EI_HEADER,
       LS_CENTRAL_DATA TYPE CMDS_EI_CENTRAL_DATA,
       LS_COMPANY_DATA TYPE CMDS_EI_CMD_COMPANY,
       LS_SALES_DATA   TYPE CMDS_EI_CMD_SALES.

DATA : LS_CENTRAL       TYPE CMDS_EI_CMD_CENTRAL.

DATA : LS_DATA   TYPE  CVIS_EI_EXTERN,
       LT_DATA   TYPE  CVIS_EI_EXTERN_T,
       LT_RETURN TYPE  BAPIRETM,
       LS_RETURN TYPE  BAPIRETI,
       LS_MSG    TYPE BAPIRETC.

* 根据伙伴GUID取出客户编号
DATA : LT_PARTNERGUID_LIST TYPE BU_PARTNER_GUID_T,
       LS_PARTNERGUID_LIST LIKE LINE OF LT_PARTNERGUID_LIST.
DATA : LT_CUSTOMER_LIST TYPE CVIS_CUST_LINK_T,
       LS_CUSTOMER_LIST TYPE CVI_CUST_LINK.

"创建信用等相关信息
DATA:   IO_FACADE        TYPE REF TO CL_UKM_FACADE,
        IO_BUPA_FACTORY  TYPE REF TO CL_UKM_BUPA_FACTORY,
        IO_PARTNER       TYPE REF TO CL_UKM_BUSINESS_PARTNER,
        IO_ACCOUNT       TYPE REF TO CL_UKM_ACCOUNT,
        LW_BP_CREDIT_SGM TYPE UKM_S_BP_CMS_SGM.

  DATA: LWA_UKM_S_BP_CMS TYPE UKM_S_BP_CMS.
  DATA: LV_PARTNER      TYPE BU_PARTNER,
        LV_CREDIT_SGMNT TYPE UKM_CREDIT_SGMNT.

  DATA : LTC_RETURN TYPE UKM_T_MONITOR_RETURN,
         LSC_RETURN TYPE UKM_S_MONITOR_RETURN,
         LV_MSG1 TYPE CHAR100.

****数据处理,开始创建客户主数据*************************************************

"创建伙伴GUID
TRY .
    LV_BPARTNERGUID = CL_UUID_FACTORY=>CREATE_SYSTEM_UUID( )->CREATE_UUID_X16( ).
CATCH CX_UUID_ERROR.

    "返回消息
    EV_ZMSG = '客户GUID创建失败!'.
    STATUS = 'S03'.
    EV_ZTYPE = 'E'.
    EXIT.
ENDTRY.

CHECK LV_BPARTNERGUID IS NOT INITIAL.
LS_PARTNER-HEADER-OBJECT_TASK = 'I'.
LS_PARTNER-HEADER-OBJECT_INSTANCE-BPARTNERGUID = LV_BPARTNERGUID.
*LS_PARTNER-HEADER-OBJECT_INSTANCE-BPARTNER = KUNNR ."客户号 导入的客户代码
LS_PARTNER-CENTRAL_DATA-COMMON-DATA-BP_CONTROL-CATEGORY = 2.     "业务伙伴类别
LS_PARTNER-CENTRAL_DATA-COMMON-DATA-BP_CONTROL-GROUPING = KTOKD.  " 账户组
LS_PARTNER-CENTRAL_DATA-COMMON-DATA-BP_ORGANIZATION-NAME1 = NAME1. " 客户名称
LS_PARTNER-CENTRAL_DATA-COMMON-DATA-BP_CENTRALDATA-SEARCHTERM1 = SORTL. "搜素词

*LS_PARTNER-CENTRAL_DATA-BANKDETAIL-DATA-BANK_KEY = BANKL."银行代码

"角色
LS_ROLES-TASK = 'I'.


LS_ROLES-DATA_KEY = 'FLCU01'.   "角色
APPEND LS_ROLES TO LT_ROLES.

LS_ROLES-DATA_KEY = 'FLCU00'.   "角色
APPEND LS_ROLES TO LT_ROLES.

LS_ROLES-DATA_KEY = 'UKM000'.   "角色
APPEND LS_ROLES TO LT_ROLES.

*LS_ROLES-DATA-ROLECATEGORY = 'ZSD001'.
*APPEND LS_ROLES TO LT_ROLES.
LS_PARTNER-CENTRAL_DATA-ROLE-ROLES = LT_ROLES.

****客户地址数据***********************************************
CLEAR : LS_ADDRESSES,LT_ADDRESSES.
LS_ADDRESSES-TASK = 'I'.
LS_ADDRESSES-DATA-POSTAL-DATA-COUNTRY = LAND1. "国家
LS_ADDRESSES-DATA-POSTAL-DATAX-COUNTRY = 'X'.

    CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
    EXPORTING
      INPUT  = REGIO
    IMPORTING
      OUTPUT = REGIO.

LS_ADDRESSES-DATA-POSTAL-DATA-REGION = REGIO. "省份
LS_ADDRESSES-DATA-POSTAL-DATAX-REGION = 'X'.
LS_ADDRESSES-DATA-POSTAL-DATA-STREET = STRAS. "注册地址
LS_ADDRESSES-DATA-POSTAL-DATAX-STREET = 'X'.
LS_ADDRESSES-DATA-POSTAL-DATA-LANGUISO = 'ZH'.
LS_ADDRESSES-DATA-POSTAL-DATA-POSTL_COD1 = PSTLZ . "邮政编码
LS_ADDRESSES-DATA-POSTAL-DATAX-POSTL_COD2 = 'X' .
LS_ADDRESSES-DATA-POSTAL-DATA-CITY = ORT01. "城市
LS_ADDRESSES-DATA-POSTAL-DATAX-CITY = 'X'.
LS_ADDRESSES-DATA-POSTAL-DATA-HOUSE_NO = 'X'. "门牌号
LS_ADDRESSES-DATA-POSTAL-DATAX-HOUSE_NO = HOUSE_NUM1.

CLEAR: LS_PHONE,LT_PHONE.
LS_PHONE-CONTACT-DATA-TELEPHONE =  TELF1 ."电话
LS_PHONE-CONTACT-DATAX-TELEPHONE =  ABAP_TRUE .
APPEND LS_PHONE TO LT_PHONE.

LS_ADDRESSES-DATA-COMMUNICATION-PHONE-PHONE = LT_PHONE.
APPEND LS_ADDRESSES TO LT_ADDRESSES.
LS_PARTNER-CENTRAL_DATA-ADDRESS-ADDRESSES = LT_ADDRESSES.

****客户数据表头************************************************
    LS_HEADER-OBJECT_TASK = 'I'.
    LS_CUSTOMER-HEADER = LS_HEADER.

****中心数据****************************************************
    LS_CENTRAL-DATA-KUKLA  = KUKLA."客户分类
    LS_CENTRAL-DATAX-KUKLA = 'X'.
    LS_CENTRAL-DATA-BRAN2  = BRAN2."行业代码
    LS_CENTRAL-DATAX-BRAN1 = 'X'.
    LS_CENTRAL_DATA-CENTRAL = LS_CENTRAL.
    LS_CENTRAL-DATA-BAHNE   =  BAHNE. "社会信用代码
    LS_CENTRAL-DATAX-BAHNE  = 'X'.
    LS_CENTRAL-DATA-BAHNS   = BAHNS.  "法人电话
    LS_CENTRAL-DATAX-BAHNS  = 'X'.
    LS_CENTRAL-DATA-LOCCO   = LOCCO.  "法人
    LS_CENTRAL-DATAX-LOCCO  = 'X'.


    LS_CENTRAL-DATA-KATR1 =  KATR1. "是否关联客户
    LS_CENTRAL-DATAX-KATR1 =  'X'.
    LS_CENTRAL-DATA-KATR2 =  KATR2. "拦账日
    LS_CENTRAL-DATAX-KATR2 =  'X'.
    LS_CENTRAL-DATA-KATR3 =  KATR3. "对账标识
    LS_CENTRAL-DATAX-KATR3 =  'X'.
    LS_CENTRAL-DATA-KATR4 =  KATR4. "票随货到标识
    LS_CENTRAL-DATAX-KATR4 =  'X'.
    LS_CENTRAL-DATA-KATR5 =  KATR5. "客户与业务员对应标识
    LS_CENTRAL-DATAX-KATR5 =  'X'.
    LS_CENTRAL-DATA-KATR6 =  KATR6. "区域/组代码
    LS_CENTRAL-DATAX-KATR6 =  'X'.
    LS_CENTRAL-DATA-KATR7 =  KATR7. "业务代码
    LS_CENTRAL-DATAX-KATR7 =  'X'.

    LS_CENTRAL_DATA-CENTRAL = LS_CENTRAL.


"客户销售的出发票
    LS_TAX_IND-TASK = 'I'.
    LS_TAX_IND-DATA_KEY-ALAND = 'CN'.
    LS_TAX_IND-DATA_KEY-TATYP = 'MWST'.
    LS_TAX_IND-DATA-TAXKD = TAXKD. "税分类
    LS_TAX_IND-DATAX-TAXKD = 'X'.
    APPEND LS_TAX_IND TO LT_TAX_IND.

    LS_CENTRAL_DATA-TAX_IND-TAX_IND = LT_TAX_IND.

    LS_CUSTOMER-CENTRAL_DATA = LS_CENTRAL_DATA.

****公司代码数据************************************************
IF BUKRS IS NOT INITIAL.
    CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'   " 统驭科目补零
    EXPORTING
      INPUT  = AKONT
    IMPORTING
      OUTPUT = AKONT.

    LS_COMPANY-TASK = 'I'.
    LS_COMPANY-DATA_KEY-BUKRS = BUKRS. " 公司代码
    LS_COMPANY-DATA-AKONT = AKONT. " 统驭科目
    APPEND LS_COMPANY TO LT_COMPANY.
    LS_COMPANY_DATA-COMPANY = LT_COMPANY.
    LS_CUSTOMER-COMPANY_DATA = LS_COMPANY_DATA.
ENDIF.

*****销售数据****************************************************
IF VKORG IS NOT INITIAL .
   LS_SALES-TASK = 'I'.
   LS_SALES-DATA_KEY-VKORG = VKORG. " 销售组织
   LS_SALES-DATA_KEY-VTWEG = '00'. " 分销渠道
   LS_SALES-DATA_KEY-SPART = '00'. " 产品组

   LS_SALES-DATA-KDGRP = KDGRP. "客户组
   LS_SALES-DATAX-KDGRP = ABAP_TRUE.
   LS_SALES-DATA-VKBUR = VKBUR. "销售部门
   LS_SALES-DATAX-VKBUR = ABAP_TRUE.
   LS_SALES-DATA-VKGRP = VKGRP. "销售组
   LS_SALES-DATAX-VKGRP = ABAP_TRUE.
   LS_SALES-DATA-KALKS = KALKS. "客户定价过程
   LS_SALES-DATAX-KALKS = ABAP_TRUE.
   LS_SALES-DATA-VWERK = VWERK. "工厂
   LS_SALES-DATAX-VWERK = ABAP_TRUE.
   LS_SALES-DATA-VSBED = '01'. "装运条件
   LS_SALES-DATAX-VSBED = ABAP_TRUE.
   LS_SALES-DATA-WAERS = WAERS."币种
   LS_SALES-DATAX-WAERS = ABAP_TRUE.
   LS_SALES-DATA-ZTERM = ZTERM."付款条件
   LS_SALES-DATAX-ZTERM = ABAP_TRUE.
   LS_SALES-DATA-KTGRD = KTGRD."客户科目分配组
   LS_SALES-DATAX-KTGRD = ABAP_TRUE.

"Function伙伴功能
   PARVW = 'ZP'.  "销售员类别

   LS_FUNCTIONS-TASK = 'I'.
    CALL FUNCTION 'CONVERSION_EXIT_PARVW_INPUT'
      EXPORTING
        INPUT  = PARVW  "售达方
      IMPORTING
        OUTPUT = LS_FUNCTIONS-DATA_KEY-PARVW.

    CALL FUNCTION 'CONVERSION_EXIT_PARVW_INPUT'
      EXPORTING
        INPUT  = KUNN2  "业务合作伙伴
      IMPORTING
        OUTPUT = LS_FUNCTIONS-DATA-PARTNER.

    APPEND LS_FUNCTIONS TO LT_FUNCTIONS.


   LS_SALES-FUNCTIONS-FUNCTIONS = LT_FUNCTIONS.
   APPEND LS_SALES TO LT_SALES.
   LS_SALES_DATA-SALES = LT_SALES.
   LS_CUSTOMER-SALES_DATA = LS_SALES_DATA.
ENDIF.

*****银行数据****************************************************
  LS_BANKS-DATA-BANK_KEY =  BANKL. "银行代码
  LS_BANKS-DATAX-BANK_KEY =  ABAP_TRUE.
  LS_BANKS-DATA-BANKACCOUNTNAME =  BANKA. "开户行
  LS_BANKS-DATAX-BANKACCOUNTNAME = ABAP_TRUE. "开户行
  LS_BANKS-DATA-BANK_ACCT =  BANKN. "账号
  LS_BANKS-DATAX-BANK_ACCT =  ABAP_TRUE. "
  LS_BANKS-DATA-BANK_CTRY =  'CN'. "银行国家代码
  LS_BANKS-DATAX-BANK_CTRY =  ABAP_TRUE. "
  APPEND LS_BANKS TO LT_BANKS.
  LS_PARTNER-CENTRAL_DATA-BANKDETAIL-BANKDETAILS = LT_BANKS.

"拿到PARTNER和CUSTOMER数据开始创建客户
    LS_DATA-PARTNER = LS_PARTNER.
    LS_DATA-CUSTOMER = LS_CUSTOMER.
    APPEND LS_DATA TO LT_DATA.

    CALL FUNCTION 'CVI_EI_INBOUND_MAIN'
      EXPORTING
        I_DATA   = LT_DATA
*       I_EXT_DATA       =
      IMPORTING
        E_RETURN = LT_RETURN.


    LOOP AT LT_RETURN INTO LS_RETURN.
      LOOP AT LS_RETURN-OBJECT_MSG INTO LS_MSG WHERE TYPE = 'E' OR TYPE = 'A'.
        CONCATENATE EV_ZMSG LS_MSG-MESSAGE INTO EV_ZMSG.
      ENDLOOP.
    ENDLOOP.

    IF EV_ZMSG IS INITIAL.
       CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
        EXPORTING
         WAIT = ABAP_TRUE.

*  根据伙伴GUID取出客户编号
      LS_PARTNERGUID_LIST = LS_PARTNER-HEADER-OBJECT_INSTANCE-BPARTNERGUID.
      APPEND LS_PARTNERGUID_LIST TO LT_PARTNERGUID_LIST.
      LT_CUSTOMER_LIST = CVI_MAPPER=>GET_INSTANCE( )->GET_ASSIGNED_CUSTOMERS_FOR_BPS(
                                                I_PARTNER_GUIDS = LT_PARTNERGUID_LIST ).
      IF LT_CUSTOMER_LIST IS NOT INITIAL.
        READ TABLE LT_CUSTOMER_LIST INTO LS_CUSTOMER_LIST INDEX 1 .
        IF SY-SUBRC EQ 0.
          CONCATENATE '客户' LS_CUSTOMER_LIST-CUSTOMER '创建成功!' INTO EV_ZMSG.
          KUNNR = LS_CUSTOMER_LIST-CUSTOMER.  "导出KUNNR
          EV_ZTYPE = 'S'.
          STATUS = 'S02'.
        ENDIF.
     ENDIF.

    ELSE.

*      EV_ZMSG = '客户创建出错,客户部分数据出错,请检查是否是BP伙伴功能问题。'.
      EV_ZTYPE = 'E'.
      STATUS = 'S03'.
      EXIT.
    ENDIF.


*-------------------------------------------------------------------------------*
"客户创建成功后开始维护税号等数据
 DATA :LT_TAXR TYPE TABLE OF BAPIRET2 WITH HEADER LINE.
 DATA :LV_TAXMSG TYPE CHAR100.
CALL FUNCTION 'BAPI_BUPA_TAX_ADD'
  EXPORTING
    businesspartner       = KUNNR
    taxtype               = 'CN5'
    taxnumber             = TAXNUMXL
  TABLES
   RETURN                = LT_TAXR .

 LOOP AT LT_TAXR WHERE TYPE = 'E' OR TYPE = 'A'.
  CONCATENATE LV_TAXMSG LT_TAXR-MESSAGE INTO LV_TAXMSG.
 ENDLOOP.

 IF LV_TAXMSG IS INITIAL .
  CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
        EXPORTING
         WAIT = ABAP_TRUE.
 ELSE.
  CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK' .
    EV_ZMSG = '客户创建成功,但是税号相关数据创建失败!'.
    EV_ZTYPE = 'E'.
    STATUS = 'S002'.
    EXIT.
 ENDIF.



*-------------------------------------------------------------------------------*
"客户创建成功后开始维护信用段数据

*  创建'MAINTAIN'对象
  IO_FACADE  = CL_UKM_FACADE=>CREATE( I_ACTIVITY = CL_UKM_CNST_EVENTING=>BP_MAINTENANCE ).
  IO_BUPA_FACTORY = IO_FACADE->GET_BUPA_FACTORY( ).

  LV_PARTNER  = KUNNR.
  LV_CREDIT_SGMNT = '6666'. "信用段 默认值


  IO_PARTNER = IO_BUPA_FACTORY->GET_BUSINESS_PARTNER( LV_PARTNER ).
  IO_PARTNER->GET_BP_CMS( IMPORTING ES_BP_CMS =  LWA_UKM_S_BP_CMS ).

  LWA_UKM_S_BP_CMS-RISK_CLASS = RISK_CLASS. "风险类
  LWA_UKM_S_BP_CMS-CHECK_RULE = 'Z1'. "检查规则
  LWA_UKM_S_BP_CMS-LIMIT_RULE = 'ZB2B-EXIST'. "信用规则

  IO_PARTNER->SET_BP_CMS( LWA_UKM_S_BP_CMS ).

  CALL METHOD IO_BUPA_FACTORY->GET_CREDIT_ACCOUNT
    EXPORTING
      I_PARTNER         = LV_PARTNER
      I_CREDIT_SGMNT    = LV_CREDIT_SGMNT
    RECEIVING
      RO_CREDIT_ACCOUNT = IO_ACCOUNT.

  IO_ACCOUNT->GET_BP_CMS_SGM( IMPORTING ES_BP_CMS_SGM = LW_BP_CREDIT_SGM ).

  LW_BP_CREDIT_SGM-CREDIT_LIMIT   = CREDIT_LIMIT."信用额度
  IO_ACCOUNT->SET_BP_CMS_SGM( EXPORTING IS_BP_CMS_SGM = LW_BP_CREDIT_SGM ).

  IO_BUPA_FACTORY->SAVE_ALL( EXPORTING I_UPD_TASK = ABAP_FALSE
  RECEIVING ET_RETURN = LTC_RETURN   ).

  LOOP AT LTC_RETURN INTO LSC_RETURN WHERE MSGTY = 'E' OR MSGTY = 'A'.
    CONCATENATE LV_MSG1 LSC_RETURN-MESSAGE INTO LV_MSG1.
  ENDLOOP.

  IF LV_MSG1 IS INITIAL.
    CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
      EXPORTING
        WAIT = ABAP_TRUE.
  ELSE.
    CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK' .
    EV_ZMSG = '客户创建成功,但是信用相关数据创建失败!'.
    EV_ZTYPE = 'S'.
    STATUS = 'S002'.
  ENDIF.
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值