abap修改客户主数据值bapi SD_CUSTOMER_MAINTAIN_ALL

本文提供了一个使用SAP BAPI 'SD_CUSTOMER_MAINTAIN_ALL' 更新客户附加数据的具体示例代码。通过该示例,读者可以了解如何在ABAP环境中通过调用此BAPI来实现对客户数据的维护,包括数据准备、参数设置及异常处理。

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

修改客户主数据的bapi"SD_CUSTOMER_MAINTAIN_ALL"的使用案例,代码如下:

  DATA:lt_knvv LIKE TABLE OF knvv WITH HEADER LINE.
  DATA:ls_knvv LIKE knvv.
  DATA:lt_upd LIKE TABLE OF fkuntxt WITH HEADER LINE.
  DATA:ls_upd LIKE fkuntxt.
  DATA:lt_in_knvv LIKE TABLE OF zsekp048 WITH HEADER LINE.
  DATA:ls_in_knvv LIKE zsekp048.
  DATA:lv_kunnr LIKE kna1-kunnr.
  DATA:lt_kna1 LIKE TABLE OF kna1 WITH HEADER LINE.
  DATA:e_sd_cust_1321_done TYPE c.


  DATA:ls_return LIKE bapiret2.

  CHECK t_knvv[] IS NOT INITIAL.
  lt_in_knvv[] t_knvv[].
  LOOP AT lt_in_knvv INTO ls_in_knvv.

    REFRESH lt_upd.
    ls_knvv-kunnr ls_in_knvv-kunnr.
    ls_knvv-vkorg ls_in_knvv-vkorg.
    ls_knvv-vtweg ls_in_knvv-vtweg.
    ls_knvv-spart ls_in_knvv-spart.
    ls_knvv-kvgr1 ls_in_knvv-kvgr1.
    ls_knvv-kvgr2 ls_in_knvv-kvgr2.
    ls_knvv-kvgr3 ls_in_knvv-kvgr3.
    APPEND ls_knvv TO lt_knvv.


    ls_upd-kunnr ls_in_knvv-kunnr.
    ls_upd-bukrs ls_in_knvv-bukrs.
    ls_upd-vkorg ls_in_knvv-vkorg.
    ls_upd-vtweg ls_in_knvv-vtweg.
    ls_upd-spart ls_in_knvv-spart.
    ls_upd-upd_a 'U'.
    ls_upd-upd_b 'U'.
    ls_upd-upd_v 'U'.
    ls_upd-upd_ap 'U'.
    APPEND ls_upd TO lt_upd.
    CLEAR ls_upd.

    CALL FUNCTION 'SD_CUSTOMER_MAINTAIN_ALL'
      EXPORTING
*       I_KNA1                  =
*       I_KNB1                  =
        i_knvv                  ls_knvv
*       I_BAPIADDR1             =
*       I_BAPIADDR2             =
*       I_MAINTAIN_ADDRESS_BY_KNA1          = ' '
*       I_KNB1_REFERENCE        = ' '
*       I_FORCE_EXTERNAL_NUMBER_RANGE       = ' '
*       I_NO_BANK_MASTER_UPDATE = ' '
*       I_CUSTOMER_IS_CONSUMER  = ' '
*       I_RAISE_NO_BTE          = ' '
        pi_postflag             'X'
        pi_cam_changed          'X'
*       PI_ADD_ON_DATA          =
        i_from_customermaster   'X'
      IMPORTING
        e_kunnr                 lv_kunnr
*       o_kna1                  = lt_kna1
        e_sd_cust_1321_done     e_sd_cust_1321_done
      TABLES
*       T_XKNAS                 =
*       T_XKNBK                 =
*       T_XKNB5                 =
*       T_XKNEX                 =
*       T_XKNVA                 =
*       T_XKNVD                 =
*       T_XKNVI                 =
*       T_XKNVK                 =
*       T_XKNVL                 =
*       T_XKNVP                 =
*       T_XKNZA                 =
*       T_YKNAS                 =
*       T_YKNBK                 =
*       T_YKNB5                 =
*       T_YKNEX                 =
*       T_YKNVA                 =
*       T_YKNVD                 =
*       T_YKNVI                 =
*       T_YKNVK                 =
*       T_YKNVL                 =
*       T_YKNVP                 =
*       T_YKNZA                 =
        t_upd_txt               lt_upd
      EXCEPTIONS
        client_error            1
        kna1_incomplete         2
        knb1_incomplete         3
        knb5_incomplete         4
        knvv_incomplete         5
        kunnr_not_unique        6
        sales_area_not_unique   7
        sales_area_not_valid    8
        insert_update_conflict  9
        number_assignment_error 10
        number_not_in_range     11
        number_range_not_extern 12
        number_range_not_intern 13
        account_group_not_valid 14
        parnr_invalid           15
        bank_address_invalid    16
        tax_data_not_valid      17
        no_authority            18
        company_code_not_unique 19
        dunning_data_not_valid  20
        knb1_reference_invalid  21
        cam_error               22
        OTHERS                  23.
    IF sy-subrc EQ 0.
      CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
        EXPORTING
          wait 'X'.

      IF sy-subrc EQ 0.
        ls_return-type 'S'.
        ls_return-id ls_knvv-kunnr.
        ls_return-message '实时更新客户组数据成功,请在SAP系统中查看!'.
        APPEND ls_return TO t_return.
        CLEAR ls_return.
      ENDIF.
    ELSE.
      ls_return-type 'E'.
      ls_return-id ls_knvv-kunnr.
      ls_return-message '实时更新客户组数据失败,请检查数据是否正确!'.
      APPEND ls_return TO t_return.
      CLEAR ls_return.
    ENDIF.

    CLEAR ls_knvv.

    CLEAR ls_in_knvv.
  ENDLOOP.

ENDFUNCTION.

我这里的功能只是修改了客户附加数据的几个字段,需要修改其他什么字段,自己修改传入参数。


### 如何在 SAP 中使用 `cl_md_bp_maintain` 创建客户主数据 #### 准备工作 为了成功创建客户主数据,需准备输入参数并设置必要的字段。这涉及到定义请求结构体来承载所需的信息。 ```abap DATA: ls_request TYPE ZSBC_VENDOR_INFO, ls_response TYPE ZSBC_VENDOR_INFO. ``` #### 设置必要字段 对于客户主数据的创建,确保所有必填字段都已填充适当。特别是当涉及特定类型的业务伙伴(如客户),应指定相应的标识符和其他属性。 ```abap ls_request-partner-central_data-general-data-client = sy-mandt. ls_request-partner-central_data-general-data-number = '10000001'. " 客户编号 ls_request-partner-central_data-general-data-name = 'Example Customer'. ls_request-partner-central_data-address-street = 'Street Name'. ls_request-partner-central_data-address-postal_code= 'Postal Code'. ls_request-partner-central_data-address-city = 'City Name'. " 对于时间依赖性的字段, 如果适用的话 ls_request-partner-central_data-bankdetail-time_dependent = 'X'[^2]. ``` #### 调用方法 `MAINTAIN` 通过实例化类 `CL_MD_BP_MAINTAIN` 并调用其 `MAINTAIN` 方法执行实际操作。此过程会根据传入的数据对象进行相应处理——无论是新增还是修改现有记录。 ```abap DATA(lo_bp_maintain) = NEW cl_md_bp_maintain( ). CALL METHOD lo_bp_maintain->maintain EXPORTING i_data = ls_request IMPORTING e_data = ls_response. IF sy-subrc EQ 0. WRITE: / 'Customer created successfully.'. ELSE. WRITE: / 'Failed to create customer.', ls_response-message_text. ENDIF. ``` 注意,在上述代码片段中,如果遇到税号更新异常情况,即尝试将 BP 税号 CN0 更新却变为 CN5 类型,则可能是因为内部逻辑或配置问题所致[^1];而对于银行代码长度超限的情况,应当验证所提供的银行账号是否符合系统规定的最大字符数限制,并做适当调整以满足要求[^3]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值