SAP BP客商维护BAPI&&API

15 篇文章 2 订阅
4 篇文章 0 订阅
前情提要

仅列出常用的BAPI,大家可以到具体的函数组中发现更多用法;角色可以创建的时候直接维护,或者单独维护;找不到BAPI的,比如公司代码,使用API来维护。

BAPI清单
创建BP
BAPI功能
BAPI_BUPA_CREATE_FROM_DATA创建BP, 包括中心数据、地址等
BAPI_BUPA_FS_CREATE_FROM_DATA2功能同上,多一个角色分配功能
角色维护
BAPI功能
BAPI_BUPA_ROLES_GET_2获取分配的Role(按日期)
BAPI_BUPA_ROLE_ADD_2添加Role
BAPI_BUPA_ROLE_CHANGE修改已存在的Role属性
BAPI_BUPA_ROLE_EXIST_CHECK_2校验Role是否存在
BAPI_BUPA_ROLE_REMOVE删除已分配的Role
中心数据维护
BAPI功能
BAPI_BUPA_CENTRAL_GETDETAIL获取中心数据
BAPI_BUPA_CENTRAL_CHANGE修改中心数据
地址信息维护
BAPI功能
BAPI_BUPA_ADDRESSES_GET获取所有地址信息
BAPI_BUPA_ADDRESS_ADD添加地址信息
BAPI_BUPA_ADDRESS_CHANGE修改已存在的地址信息
BAPI_BUPA_ADDRESS_GETDETAIL获取某个地址的详细信息
BAPI_BUPA_ADDRESS_GET_NUMBERS获取地址对应的address number
BAPI_BUPA_ADDRESS_REMOVE删除地址信息
银行信息维护
BAPI功能
BAPI_BUPA_BANKDETAILS_GET获取所有的银行信息
BAPI_BUPA_BANKDETAIL_ADD添加银行信息
BAPI_BUPA_BANKDETAIL_CHANGE修改银行信息
BAPI_BUPA_BANKDETAIL_GETDETAIL获取单个银行的详细信息
BAPI_BUPA_BANKDETAIL_NUMBERS获取银行ID
BAPI_BUPA_BANKDETAIL_REMOVE删除银行信息
Identification Number(标识号/证件号码)
BAPI功能
BAPI_IDENTIFICATIONDETAILS_GET获取所有标识号
BAPI_IDENTIFICATION_GET_DETAIL获取单个标识号的详细信息
BAPI_IDENTIFICATION_ADD新增标识号
BAPI_IDENTIFICATION_CHANGE修改标识号
BAPI_IDENTIFICATION_REMOVE删除标识号
API
API功能
CMD_EI_API_EXTRACT读取BP客户信息
VMD_EI_API_EXTRACT读取BP供应商信息
VMD_EI_API维护BP供应商
CMD_EI_API维护BP客户
CL_MD_BP_MAINTAIN维护BP(较全功能)
增强
BADI功能
PARTNER_UPDATEBP创建或修改
ADDRESS_UPDATEBP地址(通信)数据维护
表清单(更新中)

BP
在这里插入图片描述客户
在这里插入图片描述供应商
在这里插入图片描述

API示例代码(维护公司代码)
  • 维护客户
form maintain_cust_company  using  u_bp_basic type zsmdg_bp_input_basic_req
                                  u_bp_comp_tab type zmdg_bp_input_company_req_t
                            changing c_return_table type bapiret2_tab.
  "获取BP关联的客户编码,默认11
  select single partner,
         b~partner_guid,
         customer
    from but000 as b
    inner join cvi_cust_link as c
    on c~partner_guid eq b~partner_guid
    where partner eq @u_bp_basic-bp_header
    into @data(ls_bp_cust).

  data:ls_master_data type cmds_ei_main,
       ls_customer    type cmds_ei_extern,
       ls_central     type cmds_ei_cmd_central,
       ls_company     type cmds_ei_company,
       lt_company     type cmds_ei_company_t,
       ls_message     type cvis_message.

  clear ls_master_data.
  clear ls_customer.

  loop at u_bp_comp_tab into data(ls_bp_comp).
    ls_company-task = 'M'.
    ls_company-data_key-bukrs = ls_bp_comp-company.
    ls_company-data-akont = '1122010000'.
    ls_company-data-loevm = ls_bp_comp-loevm_b.

    ls_company-datax-akont = abap_true.
    ls_company-datax-loevm = abap_true.

    append ls_company to lt_company.
  endloop.

  ls_central-data-ktokd = 'DEBI'.
  ls_central-datax-ktokd = abap_true.

  ls_customer = value #(
    header = value #(
                    object_instance = value #( kunnr = ls_bp_cust-customer )
                    object_task = 'M' )
   central_data = value #(
                            central = ls_central
                            address = value #( postal = value #( data = value #(
                                                                        name = u_bp_basic-zzbpnm
                                                                        city = u_bp_basic-zzcity
                                                                        country = u_bp_basic-ref_posta
                                                                        langu = '1'
                                                                    )
                                                              datax = value #(
                                                                    name = abap_true
                                                                    city = abap_true
                                                                    country = abap_true
                                                                    langu = abap_true
                                                                    )
                                                              )
                                            )
                         )
   company_data = value #(  company = lt_company current_state = abap_true )
  ).
  append ls_customer to ls_master_data-customers.

  cmd_ei_api=>initialize( ).
  cmd_ei_api=>lock( iv_kunnr = ls_bp_cust-customer ).
  cmd_ei_api=>maintain(
  exporting
    is_master_data = ls_master_data
  importing
    es_error = ls_message
   ).
  cmd_ei_api=>unlock( iv_kunnr = ls_bp_cust-customer ).

  read table ls_message-messages transporting no fields with key type = 'E'.
  if sy-subrc ne 0.
    call function 'BAPI_TRANSACTION_COMMIT'
      exporting
        wait = abap_true.
  else.
    call function 'BAPI_TRANSACTION_ROLLBACK'.
  endif.

  append lines of ls_message-messages to c_return_table.
endform.
  • 维护供应商
form maintain_ven_company  using   u_bp_basic type zsmdg_bp_input_basic_req
                                  u_bp_comp_tab type zmdg_bp_input_company_req_t
                            changing c_return_table type bapiret2_tab.
  "获取BP关联的供应商编码,默认11
  select single partner,
                b~partner_guid,
                vendor
  from but000 as b
  inner join cvi_vend_link as v
  on v~partner_guid eq b~partner_guid
  where partner eq @u_bp_basic-bp_header
  into @data(ls_bp_vend).

  data:ls_master_data type vmds_ei_main,
       ls_vendor      type vmds_ei_extern,
       ls_company     type vmds_ei_company,
       lt_company     type vmds_ei_company_t,
       ls_central     type vmds_ei_vmd_central,
       ls_message     type cvis_message.

  clear ls_master_data.
  clear ls_vendor.

  loop at u_bp_comp_tab into data(ls_bp_comp).
    ls_company-task = 'M'.
    ls_company-data_key-bukrs = ls_bp_comp-company.
    ls_company-data-akont = '2202020000'.
    ls_company-data-loevm = ls_bp_comp-loevm_b.

    ls_company-datax-akont = abap_true.
    ls_company-datax-loevm = abap_true.
    append ls_company to lt_company.
  endloop.

  ls_central-data-ktokk = 'KRED'.
  ls_central-datax-ktokk = abap_true.

  ls_vendor = value #(
  header = value #(
  object_instance = value #( lifnr = ls_bp_vend-vendor )
  object_task = 'M' )
  central_data = value #(
                          central = ls_central
                          address = value #( postal = value #( data = value #(
                                                                                name = u_bp_basic-zzbpnm
                                                                                city = u_bp_basic-zzcity
                                                                                country = u_bp_basic-ref_posta
                                                                                langu = '1'
                                                                              )
                                                              datax = value #(
                                                                                name = abap_true
                                                                                city = abap_true
                                                                                country = abap_true
                                                                                langu = abap_true
                                                                              )
                                                               )
                                            )
                                )
  company_data = value #(  company = lt_company  current_state = abap_true )
  ).
  append ls_vendor to ls_master_data-vendors.

  vmd_ei_api=>initialize( ).
  vmd_ei_api=>lock( iv_lifnr = ls_bp_vend-vendor ).
  vmd_ei_api=>maintain(
  exporting
    is_master_data = ls_master_data
  importing
    es_error = ls_message
    ).
  vmd_ei_api=>unlock( iv_lifnr = ls_bp_vend-vendor ).

  read table ls_message-messages transporting no fields with key type = 'E'.
  if sy-subrc ne 0.
    call function 'BAPI_TRANSACTION_COMMIT'
      exporting
        wait = abap_true.
  else.
    call function 'BAPI_TRANSACTION_ROLLBACK'.
  endif.

  append lines of ls_message-messages to c_return_table.
endform.
备注

多个BAPI连续使用的话,好像要单独commit, 比如先创建BP的中心数据,然后按顺序分配维护地址,分配角色,维护银行,维护公司代码等,如果中间步骤出错,可以考虑停止,或者是跳过错误的步骤,进行下一步。

  • 4
    点赞
  • 35
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
SAP供应商冻结BAPI是指在SAP系统中,通过使用SAP的标准业务应用程序接口(BAPI)来冻结供应商账户或者限制其供应商活动。 冻结供应商BAPI通常用于以下情况: 1. 供应商欺诈或违反合同约定的情况下,公司可以选择冻结供应商的账户,以保护自己的利益。 2. 公司存在对供应商的担忧,例如供应商违反了环保法规或者产品质量问题等,公司可以通过调用冻结BAPI来限制供应商的活动,直至问题得到解决。 冻结供应商BAPI通常提供以下功能: 1. 冻结供应商账户:可以通过调用该BAPI来冻结供应商的账户,使其无法继续进行交易或者接收付款。冻结后,供应商在系统中的状态将变为“冻结”,并且无法进行任何操作。 2. 修改供应商限制:可以通过调用该BAPI来修改供应商的限制设置,例如限制供应商的订单数量、订货量或者交易条件等。 使用冻结供应商BAPI时,需要提供供应商的唯一标识符(如供应商编号或者供应商名称)以及希望执行的操作(如冻结账户或者修改限制)。系统将根据提供的信息,在系统中找到对应的供应商,并执行相应的操作。 总之,SAP供应商冻结BAPI是一种用于冻结供应商账户或者限制供应商活动的标准业务应用程序接口,在SAP系统中使用。通过调用该BAPI,公司可以保护自身利益,并对违规的供应商进行控制。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值