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

相关文章

Oracle数据库使用 listagg去重删除重复数据的方法汇总

《Oracle数据库使用listagg去重删除重复数据的方法汇总》文章介绍了在Oracle数据库中使用LISTAGG和XMLAGG函数进行字符串聚合并去重的方法,包括去重聚合、使用XML解析和CLO... 目录案例表第一种:使用wm_concat() + distinct去重聚合第二种:使用listagg,

Python实现将实体类列表数据导出到Excel文件

《Python实现将实体类列表数据导出到Excel文件》在数据处理和报告生成中,将实体类的列表数据导出到Excel文件是一项常见任务,Python提供了多种库来实现这一目标,下面就来跟随小编一起学习一... 目录一、环境准备二、定义实体类三、创建实体类列表四、将实体类列表转换为DataFrame五、导出Da

Python实现数据清洗的18种方法

《Python实现数据清洗的18种方法》本文主要介绍了Python实现数据清洗的18种方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学... 目录1. 去除字符串两边空格2. 转换数据类型3. 大小写转换4. 移除列表中的重复元素5. 快速统

Python数据处理之导入导出Excel数据方式

《Python数据处理之导入导出Excel数据方式》Python是Excel数据处理的绝佳工具,通过Pandas和Openpyxl等库可以实现数据的导入、导出和自动化处理,从基础的数据读取和清洗到复杂... 目录python导入导出Excel数据开启数据之旅:为什么Python是Excel数据处理的最佳拍档

Python在固定文件夹批量创建固定后缀的文件(方法详解)

《Python在固定文件夹批量创建固定后缀的文件(方法详解)》文章讲述了如何使用Python批量创建后缀为.md的文件夹,生成100个,代码中需要修改的路径、前缀和后缀名,并提供了注意事项和代码示例,... 目录1. python需求的任务2. Python代码的实现3. 代码修改的位置4. 运行结果5.

在Pandas中进行数据重命名的方法示例

《在Pandas中进行数据重命名的方法示例》Pandas作为Python中最流行的数据处理库,提供了强大的数据操作功能,其中数据重命名是常见且基础的操作之一,本文将通过简洁明了的讲解和丰富的代码示例,... 目录一、引言二、Pandas rename方法简介三、列名重命名3.1 使用字典进行列名重命名3.编

使用IntelliJ IDEA创建简单的Java Web项目完整步骤

《使用IntelliJIDEA创建简单的JavaWeb项目完整步骤》:本文主要介绍如何使用IntelliJIDEA创建一个简单的JavaWeb项目,实现登录、注册和查看用户列表功能,使用Se... 目录前置准备项目功能实现步骤1. 创建项目2. 配置 Tomcat3. 项目文件结构4. 创建数据库和表5.

使用SpringBoot创建一个RESTful API的详细步骤

《使用SpringBoot创建一个RESTfulAPI的详细步骤》使用Java的SpringBoot创建RESTfulAPI可以满足多种开发场景,它提供了快速开发、易于配置、可扩展、可维护的优点,尤... 目录一、创建 Spring Boot 项目二、创建控制器类(Controller Class)三、运行

Python使用Pandas库将Excel数据叠加生成新DataFrame的操作指南

《Python使用Pandas库将Excel数据叠加生成新DataFrame的操作指南》在日常数据处理工作中,我们经常需要将不同Excel文档中的数据整合到一个新的DataFrame中,以便进行进一步... 目录一、准备工作二、读取Excel文件三、数据叠加四、处理重复数据(可选)五、保存新DataFram

使用Java解析JSON数据并提取特定字段的实现步骤(以提取mailNo为例)

《使用Java解析JSON数据并提取特定字段的实现步骤(以提取mailNo为例)》在现代软件开发中,处理JSON数据是一项非常常见的任务,无论是从API接口获取数据,还是将数据存储为JSON格式,解析... 目录1. 背景介绍1.1 jsON简介1.2 实际案例2. 准备工作2.1 环境搭建2.1.1 添加