SAP BAPI-创建供应商客户主数据

2024-08-28 17:12

本文主要是介绍SAP BAPI-创建供应商客户主数据,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

1. 批量创建供应商主数据

使用BAPI批量创建供应商主数据

先创建供应商一般主数据,再根据一般主数据扩展到公司代码层级

  CLASS LCL_VMD_BAPI DEFINITION.
    PUBLIC SECTION.
      CLASS-DATA:
        GR_MAIN     TYPE VMDS_EI_MAIN,
        LS_MAIN1    TYPE VMDS_EI_MAIN,
        LS_MAIN2    TYPE VMDS_EI_MAIN,
        LS_MESG     TYPE CVIS_MESSAGE,
        LS_MESG1    TYPE CVIS_MESSAGE,

        CGT_VEND    TYPE VMDS_EI_EXTERN_T,
        CGR_VEND    TYPE VMDS_EI_EXTERN,

        CGR_COMPANY TYPE VMDS_EI_COMPANY,
        CGT_COMPANY TYPE VMDS_EI_COMPANY_T.

      CLASS-METHODS:
        MAIN_LFA1 IMPORTING" I_KTOKD   TYPE KTOKD
                            I_LIFNR   TYPE LIFNR
                            I_NAME    TYPE BAPIAD1VL-NAME
                            I_LANGU   TYPE BAPIAD1VL-LANGU
                            I_COUNTRY TYPE BAPIAD1VL-COUNTRY
                            I_CITY    TYPE BAPIAD1VL-PO_BOX_CIT
                            I_SORT1   TYPE BAPIAD1VL-SORT1
                  EXPORTING E_LIFNR   TYPE LIFNR
                            E_ERR_MSG TYPE CLIKE,

        MAIN_LFB1 IMPORTING I_LIFNR   TYPE LIFNR
                            I_BUKRS   TYPE BUKRS
                  EXPORTING E_MESSAGE TYPE CLIKE.

    PRIVATE SECTION.
      CLASS-METHODS:
        DATAX,
        SET_X IMPORTING I_DATANAME TYPE CLIKE,
        CLEAR.
  ENDCLASS.

  CLASS lcl_vmd_bapi IMPLEMENTATION.
    METHOD main_lfa1.
      CLEAR e_err_msg.

*     主数据
      cgr_vend-header-object_task = 'I'.                 "I  创建、U  更改、D  删除、M  更改
      cgr_vend-header-object_instance-lifnr    = i_lifnr."供应商编号
      cgr_vend-central_data-central-data-ktokk = 'Z300'. "供应商帐户组

*     地址数据
      cgr_vend-central_data-address-task                = 'I'.              "I  创建、U  更改、D  删除、M  更改
      cgr_vend-central_data-address-postal-data-title   = '0004'.           "女士和先生
      cgr_vend-central_data-address-postal-data-name    = i_name. "供应商名称
      cgr_vend-central_data-address-postal-data-langu   = i_langu."SY-LANGU
      cgr_vend-central_data-address-postal-data-country = i_country."'CN' 国家
      cgr_vend-central_data-address-postal-data-po_box_cit = i_city."城市
      cgr_vend-central_data-address-postal-data-sort1   = i_sort1."排序字段

*     X 字段设值
      datax( ).

      APPEND cgr_vend TO cgt_vend.
      gr_main-vendors = cgt_vend.                 "供应商 (Tab.) 的复杂外部接口

*     Create custmer
      CALL METHOD vmd_ei_api=>maintain_bapi
        EXPORTING
*         IV_TEST_RUN              = P_TEST
          iv_collect_messages      = 'X'
          is_master_data           = gr_main
        IMPORTING
          es_master_data_correct   = ls_main1
          es_message_correct       = ls_mesg1
          es_master_data_defective = ls_main2
          es_message_defective     = ls_mesg.

      IF ls_mesg IS INITIAL.
        CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
          EXPORTING
            wait = abap_true.
*          IMPORTING
*            RETURN = LT_RETURN.

*       手动更新
        UPDATE lfa1
           SET zz_type = '10'                     "供应商类型2:供应商
         WHERE lifnr = i_lifnr.

        READ TABLE ls_main1-vendors
              INTO cgr_vend
             INDEX 1.
        IF sy-subrc = 0.
          e_lifnr = cgr_vend-header-object_instance-lifnr."供应商编号
        ELSE.

        ENDIF.
      ELSE.
        CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'.

        READ TABLE ls_mesg-messages
              INTO DATA(lr_message)
             INDEX 1.
        IF sy-subrc = 0.
          e_err_msg = lr_message-message.
        ELSE.

        ENDIF.
      ENDIF.

      clear( ).
    ENDMETHOD.

    METHOD main_lfb1.
      CLEAR e_message.

*     主数据
      cgr_vend-header-object_task = 'U'.                "I  创建、U  更改、D  删除、M  更改
      cgr_vend-header-object_instance-lifnr = i_lifnr."供应商编码

      cgr_company-task = 'I'.                       "I  创建、U  更改、D  删除、M  更改
      cgr_company-data_key-bukrs = i_bukrs.          "公司代码
      cgr_company-data-akont = '2202060100'.        "统御科目

*     X 字段设值
      datax( ).

      APPEND cgr_company TO cgt_company.
      cgr_vend-company_data-company = cgt_company.

      APPEND cgr_vend TO cgt_vend.
      gr_main-vendors = cgt_vend."客户 (Tab.) 的复杂外部接口

*     Create custmer
      CALL METHOD vmd_ei_api=>maintain_bapi
        EXPORTING
*         IV_TEST_RUN              = P_TEST
          iv_collect_messages      = 'X'
          is_master_data           = gr_main
        IMPORTING
          es_master_data_correct   = ls_main1
          es_message_correct       = ls_mesg1
          es_master_data_defective = ls_main2
          es_message_defective     = ls_mesg.

      IF ls_mesg IS INITIAL.
        CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
          EXPORTING
            wait = abap_true.

        READ TABLE ls_main1-vendors
              INTO cgr_vend
             INDEX 1.
        IF sy-subrc = 0.

        ELSE.

        ENDIF.
      ELSE.
        CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'.
        READ TABLE ls_mesg-messages
              INTO DATA(lr_message)
             INDEX 1.
        IF sy-subrc = 0.
          e_message = lr_message-message.
        ELSE.

        ENDIF.
      ENDIF.

      clear( ).
    ENDMETHOD.

    METHOD datax.
      set_x( 'CGR_VEND-CENTRAL_DATA-CENTRAL-DATA' ).
      set_x( 'CGR_VEND-CENTRAL_DATA-ADDRESS-POSTAL-DATA' ).
    ENDMETHOD.

    METHOD set_x.
      DATA: l_ref_descr   TYPE REF TO cl_abap_structdescr,
            lt_components TYPE abap_compdescr_tab,
            l_dataxname   TYPE char200.

      FIELD-SYMBOLS:
        <l_data>       TYPE any,
        <l_datax>      TYPE any,
        <l_datafield>  TYPE any,
        <l_dataxfield> TYPE any.

      l_dataxname = i_dataname && 'X'.

      ASSIGN (i_dataname)  TO <l_data>.
      ASSIGN (l_dataxname) TO <l_datax>.
      IF sy-subrc = 0.
        l_ref_descr ?= cl_abap_typedescr=>describe_by_data( <l_data> ).
        lt_components = l_ref_descr->components[].
      ENDIF.

      LOOP AT lt_components INTO DATA(lr_component).
        ASSIGN COMPONENT lr_component-name OF STRUCTURE <l_data> TO <l_datafield>.
        IF <l_datafield> IS NOT INITIAL.
          ASSIGN COMPONENT lr_component-name OF STRUCTURE <l_datax> TO <l_dataxfield>.
          IF sy-subrc = 0.
            <l_dataxfield> = abap_true.
          ELSE.

          ENDIF.
        ENDIF.
      ENDLOOP.
    ENDMETHOD.

    METHOD clear.
      CLEAR:
        gr_main    ,
        ls_main1   ,
        ls_main2   ,
        ls_mesg    ,
        ls_mesg1   ,
        cgt_vend   ,
        cgr_vend   ,
        cgr_company,
        cgt_company.
    ENDMETHOD.
  ENDCLASS.

2. 批量创建客户主数据

使用BAPI批量创建客户主数据,

先创建客户的一般主数据,再根据一般主数据扩展到公司代码层级。

CLASS lcl_cmd_bapi DEFINITION.
    PUBLIC SECTION.
      CLASS-DATA:
        gr_main     TYPE cmds_ei_main,
        ls_main1    TYPE cmds_ei_main,
        ls_main2    TYPE cmds_ei_main,
        ls_mesg     TYPE cvis_message,
        ls_mesg1    TYPE cvis_message,

        cgt_cust    TYPE cmds_ei_extern_t,
        cgr_cust    TYPE cmds_ei_extern,

        cgr_company TYPE cmds_ei_company,
        cgt_company TYPE cmds_ei_company_t.

      CLASS-METHODS:
        main_kna1 IMPORTING i_ktokd   TYPE ktokd
                            i_name    TYPE name1
                            i_langu   TYPE langu
                            i_country TYPE land1
                            i_city    TYPE ort01
                            i_sort1   TYPE clike "AD_SORT1
                            i_bankl   TYPE bankk OPTIONAL
                            i_zbank   TYPE ze_zbank OPTIONAL
                            i_stceg   TYPE stceg
                            i_vbund   TYPE vbund
                  EXPORTING e_kunnr   TYPE kunnr
                            e_message TYPE clike,




*         CHANGING CR_ALV TYPE ZTFI0352,
        main_knb1 IMPORTING i_kunnr   TYPE kunnr
                            i_bukrs   TYPE bukrs
                  EXPORTING e_message TYPE clike.

    PRIVATE SECTION.
      CLASS-METHODS:
        datax,
        set_x IMPORTING i_dataname TYPE clike,
        clear.
  ENDCLASS.

  CLASS lcl_cmd_bapi IMPLEMENTATION.
    METHOD main_kna1.
      DATA: ls_banks TYPE cvis_ei_cvi_bankdetail, "银行详细数据
            lt_banks TYPE cvis_ei_bankdetail_t.
*   主数据

      cgr_cust-header-object_task = 'I'.            "I  创建、U  更改、D  删除、M  更改
      cgr_cust-central_data-central-data-ktokd = i_ktokd."'0001' 客户帐户组
      cgr_cust-central_data-central-data-stceg = i_stceg."'增值税登记号      "ADD C-XIAOX06 16.02.2022 10:54:22
      cgr_cust-central_data-central-data-vbund = i_vbund."'增值税登记号      "ADD C-XIAOX06 16.02.2022 10:54:22
*  银行详细数据
      IF i_zbank IS NOT INITIAL.
        ls_banks-task           = 'I'.              " 删除
*        LS_BANKS-DATA-BKONT     = ''. " 银行账号类型
*        LS_BANKS-DATAX-BKONT    = 'X'.
        ls_banks-data-koinh     = i_name. "账户持有人
        ls_banks-datax-koinh    = 'X'.
        ls_banks-data_key-bankn = i_zbank.
        ls_banks-data_key-bankl = i_bankl.
        ls_banks-data_key-banks = i_country.
        IF i_zbank+18(20) IS NOT INITIAL.
          ls_banks-data-bkref  = i_zbank+18(20).
          ls_banks-datax-bkref = 'X'.
        ENDIF.
        APPEND ls_banks TO lt_banks.

        cgr_cust-central_data-bankdetail-bankdetails = lt_banks.
      ENDIF.

*     地址数据
      cgr_cust-central_data-address-task                   = 'I'.              "I  创建、U  更改、D  删除、M  更改
      cgr_cust-central_data-address-postal-data-title      = '0003'.           "关键字 '3'公司
      cgr_cust-central_data-address-postal-data-name       = i_name. "客户名称
      cgr_cust-central_data-address-postal-data-langu      = i_langu."SY-LANGU
      cgr_cust-central_data-address-postal-data-country    = i_country."'CN' 国家
      cgr_cust-central_data-address-postal-data-city       = i_city."城市
      cgr_cust-central_data-address-postal-data-sort1      = i_sort1."I_EHSLX && CR_ALV-EHSBM.         "排序字段

*     X 字段设值
      datax( ).

      APPEND cgr_cust TO cgt_cust.
      gr_main-customers = cgt_cust.                 "客户 (Tab.) 的复杂外部接口

*     Create custmer
      CALL METHOD cmd_ei_api=>maintain_bapi
        EXPORTING
*         IV_TEST_RUN              = P_TEST
          iv_collect_messages      = 'X'
          is_master_data           = gr_main
        IMPORTING
          es_master_data_correct   = ls_main1
          es_message_correct       = ls_mesg1
          es_master_data_defective = ls_main2
          es_message_defective     = ls_mesg.

      IF ls_mesg IS INITIAL.
        CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
          EXPORTING
            wait = abap_true.
*         IMPORTING
*           RETURN   =
.

        READ TABLE ls_main1-customers
              INTO cgr_cust
             INDEX 1.
        IF sy-subrc = 0.
          e_kunnr = cgr_cust-header-object_instance-kunnr."客户编号
        ELSE.

        ENDIF.
        "更新KNBK银行账号增强字段
        IF i_zbank IS NOT INITIAL.
          UPDATE knbk
             SET zbank = i_zbank
           WHERE kunnr = e_kunnr
             AND bankl = i_bankl
             AND banks = i_country
             AND bankn = i_zbank+0(18).
          IF sy-subrc = 0.
            COMMIT WORK.
          ENDIF.
        ENDIF.
      ELSE.
        CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'.

        READ TABLE ls_mesg-messages
              INTO DATA(lr_message)
             INDEX 1.
        IF sy-subrc = 0.
          e_message = lr_message-message.
        ELSE.

        ENDIF.
      ENDIF.

      clear( ).
    ENDMETHOD.

    METHOD main_knb1.
*   主数据
      cgr_cust-header-object_task = 'U'.                "I  创建、U  更改、D  删除、M  更改
      cgr_cust-header-object_instance-kunnr = i_kunnr."客户编码

      cgr_company-task = 'I'.                       "I  创建、U  更改、D  删除、M  更改
      cgr_company-data_key-bukrs = i_bukrs.          "公司代码
      cgr_company-data-akont = '1122010901'.        "统御科目

*     X 字段设值
      datax( ).

      APPEND cgr_company TO cgt_company.
      cgr_cust-company_data-company = cgt_company.

      APPEND cgr_cust TO cgt_cust.
      gr_main-customers = cgt_cust."客户 (Tab.) 的复杂外部接口

*     Create custmer
      CALL METHOD cmd_ei_api=>maintain_bapi
        EXPORTING
*         IV_TEST_RUN              = P_TEST
          iv_collect_messages      = 'X'
          is_master_data           = gr_main
        IMPORTING
          es_master_data_correct   = ls_main1
          es_message_correct       = ls_mesg1
          es_master_data_defective = ls_main2
          es_message_defective     = ls_mesg.

      IF ls_mesg IS INITIAL.
        CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
          EXPORTING
            wait = abap_true.

        READ TABLE ls_main1-customers
              INTO cgr_cust
             INDEX 1.
        IF sy-subrc = 0.

        ELSE.

        ENDIF.
      ELSE.
        CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'.
        READ TABLE ls_mesg-messages
              INTO DATA(lr_message)
             INDEX 1.
        IF sy-subrc = 0.
          e_message = lr_message-message.
        ELSE.

        ENDIF.
      ENDIF.

      clear( ).
    ENDMETHOD.

    METHOD datax.
      set_x( 'CGR_CUST-CENTRAL_DATA-CENTRAL-DATA' ).
      set_x( 'CGR_CUST-CENTRAL_DATA-ADDRESS-POSTAL-DATA' ).
    ENDMETHOD.

    METHOD set_x.
      DATA: l_ref_descr   TYPE REF TO cl_abap_structdescr,
            lt_components TYPE abap_compdescr_tab,
            l_dataxname   TYPE char200.

      FIELD-SYMBOLS:
        <l_data>       TYPE any,
        <l_datax>      TYPE any,
        <l_datafield>  TYPE any,
        <l_dataxfield> TYPE any.

      l_dataxname = i_dataname && 'X'.

      ASSIGN (i_dataname)  TO <l_data>.
      ASSIGN (l_dataxname) TO <l_datax>.
      IF sy-subrc = 0.
        l_ref_descr ?= cl_abap_typedescr=>describe_by_data( <l_data> ).
        lt_components = l_ref_descr->components[].
      ENDIF.

      LOOP AT lt_components INTO DATA(lr_component).
        ASSIGN COMPONENT lr_component-name OF STRUCTURE <l_data> TO <l_datafield>.
        IF <l_datafield> IS NOT INITIAL.
          ASSIGN COMPONENT lr_component-name OF STRUCTURE <l_datax> TO <l_dataxfield>.
          IF sy-subrc = 0.
            <l_dataxfield> = abap_true.
          ELSE.

          ENDIF.
        ENDIF.
      ENDLOOP.
    ENDMETHOD.

    METHOD clear.
      CLEAR:
        gr_main    ,
        ls_main1   ,
        ls_main2   ,
        ls_mesg    ,
        ls_mesg1   ,
        cgt_cust   ,
        cgr_cust   ,
        cgr_company,
        cgt_company.
    ENDMETHOD.
  ENDCLASS. 

这篇关于SAP BAPI-创建供应商客户主数据的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1115382

相关文章

大模型研发全揭秘:客服工单数据标注的完整攻略

在人工智能(AI)领域,数据标注是模型训练过程中至关重要的一步。无论你是新手还是有经验的从业者,掌握数据标注的技术细节和常见问题的解决方案都能为你的AI项目增添不少价值。在电信运营商的客服系统中,工单数据是客户问题和解决方案的重要记录。通过对这些工单数据进行有效标注,不仅能够帮助提升客服自动化系统的智能化水平,还能优化客户服务流程,提高客户满意度。本文将详细介绍如何在电信运营商客服工单的背景下进行

基于MySQL Binlog的Elasticsearch数据同步实践

一、为什么要做 随着马蜂窝的逐渐发展,我们的业务数据越来越多,单纯使用 MySQL 已经不能满足我们的数据查询需求,例如对于商品、订单等数据的多维度检索。 使用 Elasticsearch 存储业务数据可以很好的解决我们业务中的搜索需求。而数据进行异构存储后,随之而来的就是数据同步的问题。 二、现有方法及问题 对于数据同步,我们目前的解决方案是建立数据中间表。把需要检索的业务数据,统一放到一张M

关于数据埋点,你需要了解这些基本知识

产品汪每天都在和数据打交道,你知道数据来自哪里吗? 移动app端内的用户行为数据大多来自埋点,了解一些埋点知识,能和数据分析师、技术侃大山,参与到前期的数据采集,更重要是让最终的埋点数据能为我所用,否则可怜巴巴等上几个月是常有的事。   埋点类型 根据埋点方式,可以区分为: 手动埋点半自动埋点全自动埋点 秉承“任何事物都有两面性”的道理:自动程度高的,能解决通用统计,便于统一化管理,但个性化定

使用SecondaryNameNode恢复NameNode的数据

1)需求: NameNode进程挂了并且存储的数据也丢失了,如何恢复NameNode 此种方式恢复的数据可能存在小部分数据的丢失。 2)故障模拟 (1)kill -9 NameNode进程 [lytfly@hadoop102 current]$ kill -9 19886 (2)删除NameNode存储的数据(/opt/module/hadoop-3.1.4/data/tmp/dfs/na

异构存储(冷热数据分离)

异构存储主要解决不同的数据,存储在不同类型的硬盘中,达到最佳性能的问题。 异构存储Shell操作 (1)查看当前有哪些存储策略可以用 [lytfly@hadoop102 hadoop-3.1.4]$ hdfs storagepolicies -listPolicies (2)为指定路径(数据存储目录)设置指定的存储策略 hdfs storagepolicies -setStoragePo

Hadoop集群数据均衡之磁盘间数据均衡

生产环境,由于硬盘空间不足,往往需要增加一块硬盘。刚加载的硬盘没有数据时,可以执行磁盘数据均衡命令。(Hadoop3.x新特性) plan后面带的节点的名字必须是已经存在的,并且是需要均衡的节点。 如果节点不存在,会报如下错误: 如果节点只有一个硬盘的话,不会创建均衡计划: (1)生成均衡计划 hdfs diskbalancer -plan hadoop102 (2)执行均衡计划 hd

【Prometheus】PromQL向量匹配实现不同标签的向量数据进行运算

✨✨ 欢迎大家来到景天科技苑✨✨ 🎈🎈 养成好习惯,先赞后看哦~🎈🎈 🏆 作者简介:景天科技苑 🏆《头衔》:大厂架构师,华为云开发者社区专家博主,阿里云开发者社区专家博主,CSDN全栈领域优质创作者,掘金优秀博主,51CTO博客专家等。 🏆《博客》:Python全栈,前后端开发,小程序开发,人工智能,js逆向,App逆向,网络系统安全,数据分析,Django,fastapi

【Python编程】Linux创建虚拟环境并配置与notebook相连接

1.创建 使用 venv 创建虚拟环境。例如,在当前目录下创建一个名为 myenv 的虚拟环境: python3 -m venv myenv 2.激活 激活虚拟环境使其成为当前终端会话的活动环境。运行: source myenv/bin/activate 3.与notebook连接 在虚拟环境中,使用 pip 安装 Jupyter 和 ipykernel: pip instal

在cscode中通过maven创建java项目

在cscode中创建java项目 可以通过博客完成maven的导入 建立maven项目 使用快捷键 Ctrl + Shift + P 建立一个 Maven 项目 1 Ctrl + Shift + P 打开输入框2 输入 "> java create"3 选择 maven4 选择 No Archetype5 输入 域名6 输入项目名称7 建立一个文件目录存放项目,文件名一般为项目名8 确定

烟火目标检测数据集 7800张 烟火检测 带标注 voc yolo

一个包含7800张带标注图像的数据集,专门用于烟火目标检测,是一个非常有价值的资源,尤其对于那些致力于公共安全、事件管理和烟花表演监控等领域的人士而言。下面是对此数据集的一个详细介绍: 数据集名称:烟火目标检测数据集 数据集规模: 图片数量:7800张类别:主要包含烟火类目标,可能还包括其他相关类别,如烟火发射装置、背景等。格式:图像文件通常为JPEG或PNG格式;标注文件可能为X