BP的心得

  • BP的概念
  • 业务方案实践
  • 数据处理
  • BP对象的ABAP实现
    • 1.用到的类型对象
    • 2.BP维护主题流程```
    • 3.角色信息
    • 4.BP基本信息
    • 5.BP地址信息
    • 6.供应商信息
    • 7.客户信息
      • 税分类信息
      • 信贷限额信息
    • 总结
  • 一些BP相关的方案设计心得

BP的概念

从后勤物流角度来看,后勤主要主数据是客户主数据和供应商主数据。我们在S/4HANA中学到的第一件事是客户 - 供应商集成(CVI),也称为业务合作伙伴(BP)。
在传统SAP ERP中,客户和供应商是作为两个不同的功能存在的。而在SAP S/4 HANA中,将两者统一维护为Business partner。所以传统的ERP系统中的事务代码都将被废弃,在SAP S/4 HANA 中统一通过事务代码BP使用角色的方式来实现的。
所以,传统SAP ERP 用户在转换为SAP S/4 HANA时,是需要对客户和供应商的主数据做调整的。

以上的官方解释。
个人理解就是不管组织还是个人,都是企业的一个伙伴,也就是BP,当与他发生采购业务时,那么就分配采购角色,维护供应商信息;客户同理;类似的还有UKM信贷角色,房地产管理的各类结算单位,零售业务的SITE角色之类。
业务都基于角色开展,BP是统筹的意思。当然非公司的个人也差不多。

业务方案实践

基于以上BP的个人理解,我个人倾向与把BP/客户/供应商的编码统一处理。当然有些升级项目可能旧数据存在两边的冲突,但还是建议变革做统一。
最简化的配置方案如下:
1.BP分组示例规划:

分组 描述
C001 客户分组1
C002 客户分组2
C003 客户分组3
V001 供应商分组1
V002 供应商分组2
V003 供应商分组3

核心点,客户与供应商的分组也是6个组,两边组1 1对应。
当然如果要做一些字段状态组控制或合作伙伴控制,还可以在客户/供应商账户组层配置。

2.号码段规划如下:
客户/供应商全部一个号码段,号码段为1-ZZZZZZZZZZ,所有的客户/供应商账户组都对应这个无意义的全号分组。

在BP层对BP的分组进行号码段规划,设置合适的编号范围。

在配置 跨应用组件->主数据同步->客户/供应商集成->业务伙伴设置->供应商集成的设置->供应商集成的字段分配->分配键值->定义方向业务伙伴到供应商的编号分配
设置供应商账户组与BP分组的关系,1比1就OK,同时配置相同号码。
客户类似。

实现业务规则就是建BP统一的跨模块的方案,不论是供应商偶尔有销售也许需要扩客户,还是反过来,都可以用统一的BP编码扩充对应角色。

基于这样,才能发挥BP集成角色的意义。

**当然系统支持BP角色与供应商/客户有不同的编码。**那么结果就是BP是多余的,客户供应商还分属不同领域。也就没有BP存在的意义,仅仅是系统要求的。这样不符合BP设计的初衷,不建议。

数据处理

在做批量数据处理时,其实传统的LSMW录屏/MASS批修改还是可以使用的。但是录屏体验其实比较差。
这里如果做期初的数据批处理,如果没有ABAP开发独立程序,建议使用LTMC新功能,用WEB端实现导入。
网上文档有一些,晚点在整理。
关于ABAP实现,下一部分。

BP对象的ABAP实现

目前没发现SAP有对BP的BAPI或者EDI接口,过去客户/供应商的方式基本也无法使用了。
很多项目还是需要这方面的接口,批处理程序,甚至自定义的维护界面,系统内审批功能生效等等业务需求。
下面部分贴些BP处理的代码仅供参考。

1.用到的类型对象

  DATA:lt_data           TYPE cvis_ei_extern_t, ls_data           TYPE cvis_ei_extern, ls_address_help   TYPE bus_ei_bupa_address, ls_address_usages TYPE bus_ei_bupa_addressusage, ls_vend_company   TYPE vmds_ei_company, ls_with_tax       TYPE vmds_ei_wtax_type, ls_role           TYPE bus_ei_bupa_roles, lt_return2        TYPE TABLE OF bapiret2.DATA: lv_guid    TYPE bu_partner_guid.DATA:ls_return        TYPE cvis_bp_return,lv_task          TYPE c,  " I新建  U 更新lv_task_v        TYPE c, " 供应商逻辑处理lv_task_c        TYPE c, " 客户逻辑处理ls_but000        TYPE but000,ls_kna1          TYPE kna1,ls_lfa1          TYPE lfa1,ls_alv           TYPE zscmt0001,lt_bapiret2      TYPE TABLE OF bapiret2,ls_bapiret2      TYPE bapiret2,lv_bp            TYPE bu_partner,lv_create_applog TYPE boolean.

2.BP维护主题流程```

*—判断创建还是修改"信贷限额SELECT SINGLE * INTO ls_but000FROM but000 WHERE partner = cs_data-partner.IF sy-subrc = 0.lv_task = 'U'.ELSE.lv_task = 'I'.ENDIF.lv_bp = cs_data-partner.
*--- 清空全局参数CALL FUNCTION 'BUP_MEMORY_CENTRAL_INIT'.
*--- 生成或者获取全局GUIDCASE lv_task.WHEN 'I'.CALL FUNCTION 'GUID_CREATE'IMPORTINGev_guid_32 = ls_data-partner-header-object_instance-bpartnerguid.WHEN 'U'.SELECT SINGLE partner_guidFROM but000INTO lv_guidWHERE partner = lv_bp.ls_data-partner-header-object_instance-bpartnerguid = lv_guid.ls_data-partner-header-object_instance-bpartner = lv_bp.WHEN OTHERS.ENDCASE.ls_data-partner-header-object_task = lv_task."BP 角色PERFORM f_add_role     USING lv_bpcs_dataCHANGING ls_data."基本视图PERFORM f_add_bp_general USING    lv_bplv_taskcs_dataCHANGING ls_data."一般地址信息/电话 /传真/邮箱PERFORM f_add_bp_address USING    lv_bplv_taskcs_dataCHANGING ls_data."银行信息PERFORM F_BANK_ACC USING   LV_BPCS_DATACHANGING LS_DATA."供应商信息PERFORM f_add_sup_general USING   lv_bplv_taskcs_dataCHANGING ls_data."客户信息PERFORM f_add_cust_general USING lv_bplv_taskcs_dataCHANGING  ls_data."信贷限额PERFORM f_add_ukm_general USING lv_bplv_taskcs_dataCHANGING  ls_data."整合处理  IF lv_task = 'I'.IF lv_task_v = 'X'.SELECT COUNT(*) FROM lfa1 WHERE lifnr = lv_bp.IF sy-subrc <> 0.ls_data-ensure_create-create_vendor   = abap_true.ENDIF.ENDIF.IF lv_task_c = 'X'.SELECT COUNT(*) FROM kna1 WHERE kunnr = lv_bp.IF sy-subrc <> 0.ls_data-ensure_create-create_customer = abap_true.ENDIF.ENDIF.ENDIF.APPEND ls_data TO lt_data."全局数据校验cl_md_bp_maintain=>validate_single(EXPORTING i_data = ls_dataIMPORTING et_return_map = DATA(lt_return_map) )."数据校验消息处理LOOP AT lt_return_map ASSIGNING FIELD-SYMBOL(<ls_return_map>)WHERE type = 'E' OR  type = 'A'.MOVE-CORRESPONDING <ls_return_map> TO et_return.APPEND et_return.ev_status = 'E'.ENDLOOP."数据提交处理IF ev_status = 'E'.RETURN.ELSE.cl_md_bp_maintain=>maintain(EXPORTING i_data = lt_dataIMPORTING e_return = DATA(lt_return) ).ENDIF.

3.角色信息

FORM f_add_role  USINGu_bp  TYPE char10u_alv TYPE zscmt0001CHANGINGc_data TYPE cvis_ei_extern.DATA: lt_but100 TYPE TABLE OF but100,ls_but100 TYPE but100,lt_roles  TYPE bus_ei_bupa_roles_t,ls_roles  TYPE bus_ei_bupa_roles.SELECT *INTO TABLE lt_but100FROM but100WHERE partner = u_bp."财务供应商角色READ TABLE lt_but100 INTO ls_but100 WITH KEY partner = u_bprltyp   = 'FLVN00'.IF sy-subrc <> 0.IF u_alv-flvn00 = 'X'.CLEAR ls_roles.ls_roles-task             = 'I'.ls_roles-data_key         = 'FLVN00'.ls_roles-data-valid_from  = sy-datum      .ls_roles-data-valid_to    = '99991231'    .APPEND ls_roles TO lt_roles.ENDIF.ENDIF."财务客户角色READ TABLE lt_but100 INTO ls_but100 WITH KEY partner = u_bprltyp   = 'FLCU00'.IF sy-subrc <> 0.IF u_alv-flcu00 = 'X'.CLEAR ls_roles.ls_roles-task             = 'I'.ls_roles-data_key         = 'FLCU00'.ls_roles-data-valid_from  = sy-datum      .ls_roles-data-valid_to    = '99991231'    .APPEND ls_roles TO lt_roles.ENDIF.ENDIF."客户角色READ TABLE lt_but100 INTO ls_but100 WITH KEY partner = u_bprltyp   = 'FLCU01'.IF sy-subrc <> 0.IF u_alv-flcu01 = 'X' .CLEAR ls_roles.ls_roles-task             = 'I'.ls_roles-data_key         = 'FLCU01'.ls_roles-data-valid_from  = sy-datum      .ls_roles-data-valid_to    = '99991231'    .APPEND ls_roles TO lt_roles.ENDIF.ENDIF."采购角色READ TABLE lt_but100 INTO ls_but100 WITH KEY partner = u_bprltyp   = 'FLVN01'.IF sy-subrc <> 0 .IF u_alv-flvn01 = 'X' .CLEAR ls_roles.ls_roles-task             = 'I'.ls_roles-data_key         = 'FLVN01'.ls_roles-data-valid_from  = sy-datum      .ls_roles-data-valid_to    = '99991231'    .APPEND ls_roles TO lt_roles.ENDIF.ENDIF."信用角色READ TABLE lt_but100 INTO ls_but100 WITH KEY partner = u_bprltyp   = 'UKM000'.IF sy-subrc <> 0 .IF u_alv-fukm000 = 'X' .CLEAR ls_roles.ls_roles-task             = 'I'.ls_roles-data_key         = 'UKM000'.ls_roles-data-valid_from  = sy-datum      .ls_roles-data-valid_to    = '99991231'    .APPEND ls_roles TO lt_roles.ENDIF.ENDIF.IF lt_roles IS NOT INITIAL.c_data-partner-central_data-role-roles = lt_roles.ENDIF.ENDFORM.

4.BP基本信息

FORM f_add_bp_general  USINGu_bp  TYPE char10u_task TYPE char1u_alv TYPE zscmt0001CHANGING c_data TYPE cvis_ei_extern.c_data-partner-header-object_instance-bpartner = u_bp.c_data-partner-header-object_task = u_task.c_data-partner-central_data-common-data-bp_control-category = '2'."类别c_data-partner-central_data-common-data-bp_control-grouping = u_alv-bu_group."分组 控制视图 号码段c_data-partner-central_data-common-data-bp_centraldata-searchterm1 = u_alv-bu_sort1_txt ."搜索项1
*  c_data-partner-central_data-common-data-bp_centraldata-searchterm2 = u_alv-sortl2 ."名称2 ."搜索项2c_data-partner-central_data-common-data-bp_centraldata-partnerlanguage = u_alv-langu ."语言c_data-partner-central_data-common-data-bp_centraldata-centralblock = u_alv-zdelete."集中冻结c_data-partner-central_data-common-data-bp_organization-name1 = u_alv-name1."'  ."名称1c_data-partner-central_data-common-data-bp_organization-name2 = u_alv-name2 ."名称2
* c_data-partner-central_data-common-data-bp_organization-name3 = u_alv-name3 ."名称3IF u_task = 'U' .c_data-partner-central_data-common-datax-bp_centraldata-searchterm1 = abap_true ."搜索项1
*    c_data-partner-central_data-common-datax-bp_centraldata-searchterm2 = abap_true ."名称2 ."搜索项2c_data-partner-central_data-common-datax-bp_centraldata-partnerlanguage = abap_true .c_data-partner-central_data-common-datax-bp_centraldata-centralblock = abap_true.c_data-partner-central_data-common-datax-bp_organization-name1 = abap_true.c_data-partner-central_data-common-datax-bp_organization-name2 = abap_true ."名称2
*    c_data-partner-central_data-common-datax-bp_organization-name3 = abap_true ."名称3ENDIF.ENDFORM.

5.BP地址信息

FORM f_add_bp_address  USING    u_bp TYPE char10u_task TYPE char1u_alv TYPE zscmt0001CHANGING c_data TYPE cvis_ei_extern.DATA:lv_guid           TYPE bu_partner_guid,ls_but000         TYPE but000,ls_address_help   TYPE bus_ei_bupa_address,ls_address_usages TYPE bus_ei_bupa_addressusage,ls_phone          TYPE bus_ei_bupa_telephone,lt_phone          TYPE bus_ei_bupa_telephone_t,ls_fax            TYPE bus_ei_bupa_fax,lt_fax            TYPE bus_ei_bupa_fax_t,ls_smtp           TYPE bus_ei_bupa_smtp,lt_smtp           TYPE bus_ei_bupa_smtp_t.ls_address_help-task = u_task.CLEAR lv_guid.CASE u_task.WHEN 'U'.SELECT SINGLE address_guidFROM but020INTO lv_guidWHERE partner = u_bp.ls_address_help-data_key-guid = lv_guid.WHEN 'I'.CALL FUNCTION 'GUID_CREATE'IMPORTINGev_guid_32 = ls_address_help-data_key-guid.WHEN OTHERS.ENDCASE.ls_address_help-task          = u_task.ls_address_help-data-postal-data-city             = u_alv-zshi  ."城市ls_address_help-data-postal-data-standardaddress  = 'X'.ls_address_help-data-postal-data-postl_cod1       = u_alv-post_code1."邮政编码/城市ls_address_help-data-postal-data-street           = u_alv-zdizhi.
*  LS_ADDRESS_HELP-DATA-POSTAL-DATA-HOUSE_NO         = U_ALV-HSNM1   ."门牌号ls_address_help-data-postal-data-country          = u_alv-country ."国家ls_address_help-data-postal-data-countryiso       = u_alv-country ."国家
*  LS_ADDRESS_HELP-DATA-POSTAL-DATA-REGION           = U_ALV-REGIO   ."地区ls_address_help-data-postal-data-time_zone        = 'UTC+8'        ."defalutls_address_help-data-postal-data-langu            = u_alv-langu       ."语言ls_address_help-data-postal-data-languiso         = u_alv-langu       ."语言
*  IF U_ALV-POBXCTY IS NOT INITIAL.
*    LS_ADDRESS_HELP-DATA-POSTAL-DATA-POBOX_CTRY = U_ALV-POBXCTY."通讯国家
*    LS_ADDRESS_HELP-DATA-POSTAL-DATA-PO_BOX_REG = U_ALV-POBXREG."通讯地区
*    LS_ADDRESS_HELP-DATA-POSTAL-DATA-POSTL_COD2 = U_ALV-PSTCD2."通讯邮编
*    LS_ADDRESS_HELP-DATA-POSTAL-DATA-PO_BOX_CIT = U_ALV-POBXLOC."通讯城市
*  ENDIF.IF u_task = 'U'.ls_address_help-data-postal-datax-city             = abap_true.ls_address_help-data-postal-datax-standardaddress  = abap_true.ls_address_help-data-postal-datax-postl_cod1       = abap_true.ls_address_help-data-postal-datax-street           = abap_true.
*    LS_ADDRESS_HELP-DATA-POSTAL-DATAX-HOUSE_NO         = ABAP_TRUE.ls_address_help-data-postal-datax-country          = abap_true.ls_address_help-data-postal-datax-countryiso       = abap_true.
*    LS_ADDRESS_HELP-DATA-POSTAL-DATAX-REGION           = ABAP_TRUE.ls_address_help-data-postal-datax-time_zone        = abap_true.ls_address_help-data-postal-datax-langu            = abap_true.ls_address_help-data-postal-datax-langu_iso        = abap_true.
*    IF U_ALV-POBXCTY IS NOT INITIAL.
*      LS_ADDRESS_HELP-DATA-POSTAL-DATAX-POBOX_CTRY = ABAP_TRUE.
*      LS_ADDRESS_HELP-DATA-POSTAL-DATAX-PO_BOX_REG = ABAP_TRUE.
*      LS_ADDRESS_HELP-DATA-POSTAL-DATAX-POSTL_COD2 = ABAP_TRUE.
*      LS_ADDRESS_HELP-DATA-POSTAL-DATAX-PO_BOX_CIT = ABAP_TRUE.
*    ENDIF.ENDIF.APPEND ls_address_help TO c_data-partner-central_data-address-addresses.ENDFORM.

6.供应商信息

FORM f_add_sup_general  USING    u_bp TYPE char10u_task TYPE cu_alv TYPE zscmt0001CHANGING c_data TYPE cvis_ei_extern.DATA: lt_company    TYPE vmds_ei_company_t,ls_company    TYPE vmds_ei_company,lt_purchasing TYPE vmds_ei_purchasing_t,ls_purchasing TYPE vmds_ei_purchasing,lt_functions  TYPE vmds_ei_functions_t."供应商基本数据IF u_alv-flvn00 = 'X' OR  u_alv-flvn01 = 'X'.SELECT SINGLE *INTO @DATA(ls_lfa1)FROM lfa1WHERE lifnr = @u_alv-partner.IF sy-subrc EQ 0.c_data-vendor-header-object_instance-lifnr = u_bp.c_data-vendor-header-object_task = 'U'.IF u_alv-bu_group = 'A001'.c_data-vendor-central_data-central-datax-vbund = abap_true.ENDIF.
*      C_DATA-VENDOR-CENTRAL_DATA-CENTRAL-DATAX-STENR  =  ABAP_TRUE."税号
*      C_DATA-VENDOR-CENTRAL_DATA-CENTRAL-DATAX-STCEG  =  ABAP_TRUE."增值税登记号  20位
*      C_DATA-VENDOR-CENTRAL_DATA-CENTRAL-DATAX-FITYP  =  ABAP_TRUE."税收类型
*      C_DATA-VENDOR-CENTRAL_DATA-CENTRAL-DATAX-STCDT  =  ABAP_TRUE."税号类型\ELSE.c_data-vendor-header-object_task = 'I'.IF u_alv-bu_group = 'A001'.c_data-vendor-central_data-central-data-vbund   =  u_alv-partner+4(6)."贸易伙伴ENDIF.ENDIF.
**    C_DATA-VENDOR-CENTRAL_DATA-CENTRAL-DATA-STCEG   =  U_ALV-STCEG."增值税登记号  20位
*    C_DATA-VENDOR-CENTRAL_DATA-CENTRAL-DATA-FITYP   =  U_ALV-AFITP."税收类型
*    C_DATA-VENDOR-CENTRAL_DATA-CENTRAL-DATA-STCDT   =  U_ALV-ATOID."税号类型ENDIF." 供应商公司数据IF u_alv-flvn00 = 'X'.SELECT SINGLE *INTO @DATA(ls_lfb1)FROM lfb1WHERE lifnr = @u_alv-partnerAND bukrs = @u_alv-bukrs.IF sy-subrc = 0.ls_company-task           =  'U'.ls_company-datax-akont    =  abap_true."统御科目ls_company-datax-zterm    =  abap_true."付款条件
*      LS_COMPANY-DATAX-SPERR    =  ABAP_TRUE."所选公司代码 过账冻结
*      LS_COMPANY-DATAX-GUZTE    =  ABAP_TRUE."信用记录条件
*      LS_COMPANY-DATAX-ALTKN    =  ABAP_TRUE."先前的账户号
*      LS_COMPANY-DATAX-ZWELS    =  ABAP_TRUE."付款方式ELSE.ls_company-task          =  'I'.ENDIF.ls_company-data_key      =  u_alv-bukrs.ls_company-data-akont    =  u_alv-akont_ven."统御科目ls_company-data-zterm    =  u_alv-zterm_ven."付款条件
*    LS_COMPANY-DATA-SPERR    =  U_ALV-SPERB_B."所选公司代码 过账冻结
*    LS_COMPANY-DATA-GUZTE    =  U_ALV-GUZTE."信用记录条件
*    LS_COMPANY-DATA-ALTKN    =  U_ALV-ALTKN."先前的账户号
*    LS_COMPANY-DATA-ZWELS    =  U_ALV-ZWELS."付款方式APPEND ls_company TO lt_company.c_data-vendor-company_data-company = lt_company.ENDIF."供应商采购数据IF u_alv-flvn01 = 'X'.SELECT SINGLE *INTO @DATA(ls_lfm1)FROM lfm1WHERE lifnr = @u_bpAND ekorg = @u_alv-ekorg.IF sy-subrc = 0.ls_purchasing-task   = 'U'.ls_purchasing-datax-waers   = abap_true. "货币.ls_purchasing-datax-kalsk   = abap_true. "方案组.
*      LS_PURCHASING-DATAX-LFABC   = ABAP_TRUE. "供应商等级ls_purchasing-datax-webre   = abap_true. "基于收货的发票验证
*      LS_PURCHASING-DATAX-SPERM   = ABAP_TRUE. "采购冻结在采购组ELSE.ls_purchasing-task   = 'I'.PERFORM f_add_sup_purch_functions USING   u_alv  " 供应商合作伙伴功能CHANGING lt_functions.IF lt_functions IS NOT INITIAL.ls_purchasing-functions-functions = lt_functions.ENDIF.ENDIF.ls_purchasing-data_key     = u_alv-ekorg.ls_purchasing-data-waers   = u_alv-waers. "货币.ls_purchasing-data-kalsk   = u_alv-kalsk. "方案组.
*    LS_PURCHASING-DATA-LFABC   = U_ALV-LFABC. "供应商等级ls_purchasing-data-webre   = u_alv-webre. "基于收货的发票验证
*    LS_PURCHASING-DATA-SPERM   = U_ALV-SPERM_M. "采购冻结在采购组APPEND ls_purchasing TO  lt_purchasing.c_data-vendor-purchasing_data-purchasing = lt_purchasing.ENDIF.ENDFORM.

7.客户信息

FORM f_add_cust_general  USINGu_bp TYPE char10u_task TYPE cu_alv TYPE zscmt0001CHANGING c_data TYPE cvis_ei_extern.DATA: 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_texts     TYPE cvis_ei_text_t,ls_texts     TYPE cvis_ei_text,lt_functions TYPE cmds_ei_functions_t,lt_tax       TYPE cmds_ei_tax_ind_t."客户销售组织数据IF u_alv-flcu01 = 'X' OR u_alv-flcu00 = 'X'.SELECT SINGLE *INTO @DATA(ls_kna1)FROM kna1WHERE kunnr = @u_bp.IF sy-subrc EQ 0.c_data-customer-header-object_instance-kunnr = u_bp.c_data-customer-header-object_task = 'U'.
*      IF u_alv-bu_group = 'A001'.
*        c_data-customer-central_data-central-datax-vbund   =  'X'."贸易伙伴
*      ENDIF.ELSE.c_data-customer-header-object_task = 'I'.c_data-customer-header-object_instance-kunnr = u_bp.
*      IF u_alv-bu_group = 'A001'.
*        c_data-customer-central_data-central-data-vbund   =  u_alv-partner+4(6)."贸易伙伴
*      ENDIF.ENDIF.IF u_alv-flcu01 = 'X'.SELECT SINGLE *INTO @DATA(ls_knvv)FROM knvvWHERE kunnr = @u_bpAND vkorg = @u_alv-vkorgAND vtweg = @u_alv-vtwegAND spart = @u_alv-spart.IF sy-subrc = 0.ls_sales-task = 'U'.
*      ls_sales-datax-kdgrp      = abap_true."运营方式ls_sales-datax-kalks      = abap_true."定价过程ls_sales-datax-konda      = abap_true."客户定价组ls_sales-datax-bzirk      = abap_true."销售地区ls_sales-datax-waers      = abap_true."币种ls_sales-datax-vsbed      = abap_true."装运条件ls_sales-datax-kkber      = abap_true."信控范围ls_sales-datax-vwerk      = abap_true."交货工厂
*        ls_sales-datax-ktgrd      = abap_true."账户分配组
*      ls_sales-datax-aufsd      = abap_true."冻结
*      ls_sales-datax-lifsd      = abap_true."
*      ls_sales-datax-faksd      = abap_true."ELSE.ls_sales-task = 'I'.PERFORM f_add_sale_functions USING      u_alv  " 客户伙伴功能CHANGING   lt_functions.IF lt_functions IS NOT INITIAL.ls_sales-functions-functions = lt_functions.ENDIF.ENDIF.ls_sales-data_key-vkorg   = u_alv-vkorg.ls_sales-data_key-vtweg   = u_alv-vtweg.ls_sales-data_key-spart   = u_alv-spart..
*    ls_sales-data-kdgrp       = u_alv-kdgrp."运营方式ls_sales-data-kalks       = u_alv-kalks."定价过程ls_sales-data-konda       = u_alv-konda."客户定价组ls_sales-data-bzirk       = u_alv-bzirk."销售地区ls_sales-data-waers       = u_alv-waers."币种ls_sales-data-vsbed       = u_alv-vsbed."装运条件ls_sales-data-kkber       = u_alv-kkber."信控范围ls_sales-data-vwerk       = u_alv-werks."交货工厂ls_sales-data-ktgrd       = u_alv-ktgrd."账户分配组*    ls_sales-data-aufsd       = u_alv-aufsd."冻结
*    ls_sales-data-lifsd       = u_alv-lifsd."
*    ls_sales-data-faksd       = u_alv-faksd."APPEND ls_sales TO lt_sales.c_data-customer-sales_data-sales = lt_sales.ENDIF." 客户公司代码IF  u_alv-flcu00 = 'X' .SELECT SINGLE *INTO @DATA(ls_knb1)FROM knb1WHERE kunnr = @u_bpAND bukrs = @u_alv-bukrs.IF sy-subrc = 0.ls_company-task          =  'U'.ls_company-datax-akont    =  abap_true."统御科目ls_company-datax-zterm    =  abap_true."付款条件
*      ls_company-datax-sperr    =  abap_true."所选公司代码 过账冻结ELSE.ls_company-task          =  'I'.ENDIF.ls_company-data_key      =  u_alv-bukrs.ls_company-data-akont    =  u_alv-akont_cus."统御科目ls_company-data-zterm    =  u_alv-zterm_cus."付款条件
*    ls_company-data-sperr    =  u_alv-sperb_b_k."所选公司代码 过账冻结APPEND ls_company TO lt_company.c_data-customer-company_data-company = lt_company.PERFORM f_add_sale_tax_typ USING      u_alv  " 客户伙伴功能u_bpCHANGING   lt_tax.c_data-customer-central_data-tax_ind-tax_ind = lt_tax.ENDIF.ENDIF.
ENDFORM.

合作伙伴信息:

FORM f_add_sale_functions  USING   u_alv   TYPE zscmt0001CHANGING  ct_functions TYPE  cmds_ei_functions_t.DATA: ls_knvp                 TYPE knvp,ls_functions            TYPE cmds_ei_functions,ls_cust_sales_functions TYPE cvis_customer_sales_func.DATA: lv_part_up TYPE zscmt0010-partner.CALL METHOD cvi_default_values_classic=>get_default_cust_functionsEXPORTINGi_account_group  = u_alv-bu_group "账户组RECEIVINGr_functions_list = DATA(lt_partner_function).IF u_alv-zydc_sc_no IS NOT INITIAL.lv_part_up = u_alv-zydc_sc_no.SELECT SINGLE * FROM zscmt0010 INTO @DATA(ls_0010)WHERE partner = @lv_part_up."店中店上上级IF ls_0010-bu_group = 'K006' AND ls_0010-zydc_sc_no IS NOT INITIAL.lv_part_up = ls_0010-zydc_sc_no.ENDIF.ENDIF.LOOP AT lt_partner_function INTO ls_knvp.ls_functions-task = 'I'.ls_functions-data_key-parvw = ls_knvp-parvw.ls_functions-data_key-parza = ls_knvp-parza.
*    LS_FUNCTIONS-DATA-PARTNER = LS_KNVP-PARNR.ls_functions-data-defpa = ls_knvp-defpa.ls_functions-data-knref = ls_knvp-knref.IF lv_part_up IS NOT INITIAL.IF ls_functions-data_key-parvw = 'RE' OR ls_functions-data_key-parvw = 'RG' .ls_functions-data-partner = lv_part_up.
*     ELSE.
*        ls_functions-data-partner = u_alv-partner.ENDIF.
*    ELSE.
*      ls_functions-data-partner = u_alv-partner.ENDIF.APPEND ls_functions TO ct_functions.CLEAR:ls_functions.ENDLOOP.ENDFORM.

税分类信息


FORM f_add_sale_tax_typ USING   u_alv   TYPE zscmt0001u_bp    TYPE char10CHANGING  ct_tax TYPE  cmds_ei_tax_ind_t.DATA: ls_knvi               TYPE knvi,ls_area               TYPE cvis_sales_area,ls_cust_sales_tax_typ TYPE cvis_customer_sales_func,lt_knvi               TYPE TABLE OF knvi,ls_tax                TYPE cmds_ei_tax_ind.SELECT *INTO TABLE lt_knviFROM knviWHERE kunnr = u_bp.ls_area-sales_org    = u_alv-vkorg.ls_area-dist_channel = u_alv-vtweg.ls_area-division     = u_alv-spart.CALL METHOD cvi_default_values_classic=>get_default_cust_tax_indsEXPORTINGi_sales_area     = ls_area "账户组RECEIVINGr_tax_indicators = DATA(lt_partner_tax_typ).LOOP AT lt_partner_tax_typ INTO DATA(ls_partner_tax_typ).READ TABLE lt_knvi INTO ls_knvi WITH KEY aland = ls_partner_tax_typ-alandtatyp = ls_partner_tax_typ-tatyp.IF sy-subrc = 0.ls_tax-task = 'U'.ls_tax-data-taxkd     = u_alv-taxkd.ls_tax-datax-taxkd    = abap_true.DELETE lt_knvi WHERE aland = ls_partner_tax_typ-aland ANDtatyp = ls_partner_tax_typ-tatyp.ELSE.ls_tax-task = 'I'.ENDIF.ls_tax-data-taxkd     = u_alv-taxkd.ls_tax-data_key-aland = ls_partner_tax_typ-aland.ls_tax-data_key-tatyp = ls_partner_tax_typ-tatyp.APPEND ls_tax TO ct_tax.CLEAR ls_tax.ENDLOOP.LOOP AT lt_knvi INTO ls_knvi.ls_tax-task = 'D'.ls_tax-data-taxkd     = ls_knvi-taxkd.ls_tax-data_key-aland = ls_knvi-aland.ls_tax-data_key-tatyp = ls_knvi-tatyp.APPEND ls_tax TO ct_tax.CLEAR ls_tax.ENDLOOP.ENDFORM.

信贷限额信息


FORM f_add_ukm_general USINGu_bp TYPE char10u_task TYPE cu_alv TYPE zscmt0001CHANGING c_data TYPE cvis_ei_extern.DATA:ls_profile  TYPE ukm_ei_bp_cms.DATA:lt_segments TYPE ukmt_ei_bp_cms_sgm.DATA:ls_segments TYPE ukm_ei_bp_cms_sgm.IF u_alv-fukm000 = 'X' AND u_task = 'I'.ls_profile-data-check_rule = '01'.ls_profile-data-limit_rule = 'B2B-EXIST'.ls_profile-data-risk_class = 'A'.ls_profile-data-credit_group = '0001'.ls_profile-datax-check_rule = 'X'.ls_profile-datax-limit_rule = 'X'.ls_profile-datax-risk_class = 'X'.ls_profile-datax-credit_group = 'X'.c_data-partner-ukmbp_data-profile = ls_profile.*    IF u_alv-credit > 0.ls_segments-task = u_task.ls_segments-data_key-partner = u_bp.ls_segments-data_key-credit_sgmnt = 'Z001'.ls_segments-data-credit_limit = u_alv-credit.ls_segments-data-limit_valid_date = '99991231'.APPEND ls_segments TO lt_segments.c_data-partner-ukmbp_data-segments-segments = lt_segments.
*    ENDIF.ENDIF.ENDFORM.

总结

以上代码基本OK,可能有时候客户/供应商有些值为空时获取消息有些异常。有明白的欢迎交流。

一些BP相关的方案设计心得

SAP的标准主数据设计的很全面,同号码授权/分配到组织很灵活。不过在一些行业也会显得很冗余。例如零售。
个人建议通过一些动态指针配置,简化BP的一些字段,不论对自定义界面还是接口还是批导入,可以采用字段配置默认或者映射逻辑去减少模板长度,减少错误可能。

例如如果我们分组配置合理,那么很多时候你的统御科目应该时按分组唯一的,那为什么还必须手填呢?
以下配置可以集成到程序里。

当然如果你的项目是客户手工维护BP,那请无视哈哈。其实屏幕增强也可以实现。

欢迎讨论奥。

SAP BP 业务实践与ABAP 分享相关推荐

  1. SAP最佳业务实践:FI-导言

    SAP最佳业务实践:FI-导言 (2017-08-23 09:21:11) 转载▼ 标签: fi 概览 分类: ERP.MES与企业信息化 ERP是为财务服务的,包括SAP和国内的用友.金蝶都是从财务 ...

  2. SAP最佳业务实践:重复制造(149)-4发料

    1.MF60备料 在此活动中,您为生产备料.如果在生产存储地点有充足的库存可用,将不生成行项目. 必须有库存. 角色:车间主任 后勤- 生产-重复制造 -备料- 拉式清单-触发补货 1. 在 按计划订 ...

  3. 中科大脑知识图谱平台建设及业务实践

    本文首发于 Nebula Graph Community 公众号 "为了支持城市复杂场景下各类需求,中科大脑知识图谱团队设计开发了一套包含本体可视化设计.数据映射.数据抽取.数据写入.图数据 ...

  4. SAP BP最佳业务实践

    1.什么是 SAP Best Practices? SAP BestPractices 包提供量身定做的详细实施文档和预配置系统,以支持一般或特定行业和市场需要的端到端业务流程.基于 building ...

  5. python 支付宝个人账单_金融支付财务融合业务-实践分享1:订单、账单、交易流水、账套知识解构、原理解析...

    本文作者从实际工作实践出发,结合案例等分享了电商金融支付财务融合中的基本概念和相关原理解析,包括:订单.账单.交易流水和账知识解构,供大家一同参考和学习. 从事电商.进销存.金融.支付.财务的产品同学 ...

  6. SAP资产折旧-工作量法业务实践和实操

    文章目录 一.资产折旧概述 二.工作量法业务实践 2.1 相关数值计算 三.工作量法实操 3.1 配置折旧码-AFAMA 3.2 维护工作量-A025 / S_ALR_87009161 3.3 资产折 ...

  7. 机器学习业务实践之路-李博-专题视频课程

    机器学习业务实践之路-7159人已学习 课程介绍         本系列课程为您讲述如何使用机器学习算法解决业务问题,会以实际业务作为出发点,所有实验都提供实验流程以及实验数据,帮您用短的时间学习机器 ...

  8. 神策数据胡士文:数据智能驱动业务实践

    本文根据神策数据算法工程师胡士文,以<数据智能驱动业务实践>为主题的演讲整理而成,将为您重点介绍以下内容: 依据场景解读如何应用数据智能? Case 1:如何通过机器学习,促进付费用户识别 ...

  9. 视频PPT互动问答丨数据驱动的业务实践专题

    2021年11月26日,以"数据驱动的业务实践"为主题的『2021数据技术嘉年华·ON LINE』第四期活动已经圆满结束啦!现在给大家安排上干货满满的PPT资源放送及视频回看,没来 ...

最新文章

  1. mysql 写锁需要等待读锁释放吗_Mysql实战45讲笔记:5、全局锁和表锁
  2. Swift结构体与类
  3. HDFS建筑与shell操作
  4. 必看!Spark 进阶之路之「SparkSQL」入门概述 | 博文精选
  5. 多线程调用同一个对象的方法_这一次,让我们完全掌握Java多线程(2/10)
  6. 软件版本命名规范及各阶段说明
  7. AS技巧合集「编码技巧篇」
  8. DirectSound学习笔记(4):设备性能
  9. 《深入剖析Tomcat》一3.3 小结
  10. 顶级大厂如何做好暗黑模式设计?来看 Ant Design 的规范文档
  11. 问题解决: Google企业邮箱收不到Postfix发的邮件
  12. ftp服务器端口修改,FTP端口:默认为21端口
  13. 八种抽样技术的科学指南
  14. php保存pdf旋转90度,怎么把pdf旋转90度 多个pdf文件页面旋转的方法|支持选择要旋转的页面及旋转角度...
  15. 1068 万绿丛中一点红 (20 分)
  16. python基础题-字符串列表训练
  17. sql cast 和convert用法详解
  18. 阿里正面阻击拼多多?店宝宝:百亿补贴进入新战场
  19. 【原神】各角色Pixiv涩图统计(一). 最多的是谁? R18涩图谁最多?
  20. 博览——万维网的发明者—蒂姆•伯纳斯-李 (一)

热门文章

  1. Spring如何用“声明式事务”保护亿万数据安全?【万字解决并发冲突】
  2. Gradle | Gradle构建之Groovy语言基础
  3. #Tensorflow Process finished with exit code 3#
  4. SpringBoot启动代表出现Process finished with exit code 0
  5. 炫云全新支持优化渲染质量了
  6. 橡胶密封圈的作用和优点
  7. 论文人强烈推荐必备的几个中英文文献网站
  8. 网易云热歌榜评论(爬虫项目)
  9. 从配置,外观,写一篇小米13测评报告
  10. java 全角_java字符全角半角转换