zoukankan      html  css  js  c++  java
  • 客户主数据批量导入

    *---------------------------------------------------------------------*
    * PROGRAM ID          : ZSDR064                                       *
    * APPLICATION NAME    : SD                                            *
    * AUTHOR              : liugx                                         *
    * TRANSACTION         : ZSDR064                                       *
    * PROGRAM TYPE        : REPORT PROGRAM                                *
    * INPUT FILES         : N/A                                           *
    * OUTPUT FILES        : N/A                                           *
    * Development class   : ZDEV                                          *
    * Message class       :                                               *
    * DESCRIPTION         : 客户导入                                       *
    *---------------------------------------------------------------------*
    *=====================================================================*
    *  000  2017/11/03   NEW PROGRAM                          liugx       *
    REPORT zsdr064.
    
    INCLUDE zsdr064top.
    INCLUDE zsdr064screen.
    INCLUDE zsdr064sub.
    
    INITIALIZATION.
      texta = '参数选择'.
      text_a1 = '导入文件'.
    
    AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_file.
    
      CALL FUNCTION 'F4_FILENAME'
        EXPORTING
          field_name = 'P_FILE'
        IMPORTING
          file_name  = p_file.
    
    
    START-OF-SELECTION.
      IF p_file IS INITIAL.
        MESSAGE '文件路径不能为空!' TYPE 'E'.
      ELSE.
        PERFORM frm_import_data.
      ENDIF.
    
    
    *&---------------------------------------------------------------------*
    *&  包含                ZSDR064TOP
    *&---------------------------------------------------------------------*
    DATA: wa_header          TYPE cmds_ei_header,
          wa_central_data    TYPE cmds_ei_vmd_central_data,
          wa_central_datax   TYPE cmds_ei_vmd_central_data_xflag,
          wa_address         TYPE bapiad1vl,
          wa_addressx        TYPE bapiad1vlx,
          wa_tax_ind_st      TYPE cmds_ei_tax_ind,
          wa_tax_ind         TYPE cmds_ei_cmd_tax_ind,
          wa_bankdetail_st   TYPE cvis_ei_cvi_bankdetail,
          wa_bankdetail      TYPE cvis_ei_bankdetail,
          wa_company_code_st TYPE cmds_ei_company,
          wa_company_code    TYPE cmds_ei_cmd_company,
          wa_functions_st    TYPE cmds_ei_functions,
          wa_functions_t     TYPE cmds_ei_functions_t,
          wa_functions       TYPE cmds_ei_cmd_functions,
          wa_sales_data_st   TYPE cmds_ei_sales,
          wa_sales_data      TYPE cmds_ei_cmd_sales,
          wa_customer        TYPE cmds_ei_extern,
          wa_customers       TYPE cmds_ei_main,
          wa_correct         TYPE cmds_ei_main,
          wa_defective       TYPE cmds_ei_main,
          wa_mes_correct     TYPE cvis_message,
          wa_mes_error       TYPE cvis_message.
    
    CONSTANTS: c_update TYPE c VALUE 'M',
               c_insert TYPE c VALUE 'I'.
    
    *定义OLE变量
    DATA:g_excel TYPE ole2_object,
         g_applica TYPE ole2_object,
         g_sheet TYPE ole2_object,
         g_cell TYPE ole2_object,
         g_workbook TYPE ole2_object.
    
    DATA:p_filepath TYPE string.
    
    
    DATA: it_raw TYPE truxs_t_text_data,
      BEGIN OF record OCCURS 0,
        vkorg TYPE vkorg,"销售组织
        name1 TYPE ad_name1,"名称
        region TYPE regio,"省份
        street TYPE ad_street, "街道 收货地址
        house_num2 TYPE ad_hsnm2,"联系人 补充
        str_suppl3 TYPE ad_strspp3,"电话 街道4
        stkzu TYPE stkzu,"增票,普票
        stceg TYPE stceg,"增值税号
        location TYPE ad_lctn,"开票地址 街道5
        city2 TYPE ad_city2,"开票电话  区域
        banka TYPE banka,"开户银行及帐号
      END OF record.
    
    DATA:it005u LIKE TABLE OF t005u WITH HEADER LINE,
         itvkwz LIKE TABLE OF tvkwz WITH HEADER LINE.
    
    
    *&---------------------------------------------------------------------*
    *&  包含                ZSDR064SCREEN
    *&---------------------------------------------------------------------*
    
    SELECTION-SCREEN BEGIN OF BLOCK b1 WITH FRAME TITLE texta .
    SELECTION-SCREEN  BEGIN OF LINE.
    SELECTION-SCREEN  COMMENT (10) text_a1.
    SELECTION-SCREEN POSITION 18.
    PARAMETERS: p_file TYPE  rlgrap-filename.
    SELECTION-SCREEN  END OF LINE.
    SELECTION-SCREEN  END OF BLOCK b1.
    
    
    *&---------------------------------------------------------------------*
    *&  包含                ZSDR064SUB
    *&---------------------------------------------------------------------*
    *&---------------------------------------------------------------------*
    *&      Form  FRM_IMPORT_DATA
    *&---------------------------------------------------------------------*
    *       text
    *----------------------------------------------------------------------*
    *  -->  p1        text
    *  <--  p2        text
    *----------------------------------------------------------------------*
    FORM frm_import_data .
    
      DATA: it_raw TYPE truxs_t_text_data.
      DATA:messtab LIKE TABLE OF bdcmsgcoll WITH HEADER LINE,
           subrc TYPE syst-subrc.
    
      CALL FUNCTION 'TEXT_CONVERT_XLS_TO_SAP'
        EXPORTING
    *       I_FIELD_SEPERATOR          =
          i_line_header              =  'X'
          i_tab_raw_data             = it_raw
          i_filename                 = p_file
        TABLES
          i_tab_converted_data       = record[]
    *     EXCEPTIONS
    *       CONVERSION_FAILED          = 1
    *       OTHERS                     = 2
                .
      IF sy-subrc <> 0.
        MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
                WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
      ENDIF.
    
    
      SELECT
        *
      INTO
        CORRESPONDING FIELDS OF TABLE it005u
      FROM
        t005u
      WHERE
        spras = 1 AND land1 = 'CN'.
    * A "customer" is made up of 4 Main Sections
    *    1. HEADER
    *    2. CENTRAL_DATA
    *    3. COMPANY_DATA
    *    4  SALES_DATA
    
    
      DATA:bapiret2 LIKE TABLE OF bapiret2 WITH HEADER LINE.
      CLEAR bapiret2[].
      DATA:kunnr TYPE kunnr.
      DATA:bapiret2_t TYPE bapiret2_t.
      LOOP AT record.
        CONDENSE record-name1  NO-GAPS.
        CONDENSE record-region  NO-GAPS.
        CONDENSE record-house_num2  NO-GAPS.
        CONDENSE record-str_suppl3  NO-GAPS.
        CONDENSE record-street  NO-GAPS.
        CONDENSE record-vkorg  NO-GAPS.
        CONDENSE record-stkzu  NO-GAPS.
        CONDENSE record-stceg  NO-GAPS.
        CONDENSE record-location  NO-GAPS.
        CONDENSE record-city2  NO-GAPS.
        CONDENSE record-banka  NO-GAPS.
    
        CLEAR: wa_customer,wa_customers, wa_company_code_st, wa_sales_data_st.
        "判断客户是否存在,如果存在,则不扩充
        SELECT
          SINGLE
          kunnr
        INTO
          kunnr
        FROM
          kna1
        WHERE
          name1 = record-name1.
        IF sy-subrc = 0.
          CLEAR bapiret2.
          bapiret2-type = 'A'.
          CONCATENATE '客户已经存在!编号为:'  kunnr INTO bapiret2-message.
          APPEND bapiret2.
          CONTINUE.
        ENDIF.
        PERFORM import_center_data .
        PERFORM import_company_data.
        PERFORM import_sales_data.
    *  wa_customer-header-object_instance-kunnr = ''.
        wa_customer-header-object_task = c_insert.
        CLEAR:wa_customer-company_data,wa_customer-sales_data.
        wa_customer-company_data = wa_company_code.
        wa_customer-sales_data   = wa_sales_data.
        APPEND wa_customer TO wa_customers-customers.
    
        CALL METHOD cmd_ei_api=>maintain_bapi
          EXPORTING
            iv_collect_messages      = 'X'
            is_master_data           = wa_customers
          IMPORTING
            es_master_data_correct   = wa_correct
            es_message_correct       = wa_mes_correct
            es_master_data_defective = wa_defective
            es_message_defective     = wa_mes_error.
    
        IF wa_mes_error-is_error IS INITIAL.
          CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
            EXPORTING
              wait = abap_true.
    
          LOOP AT wa_correct-customers INTO wa_customer.
            wa_header = wa_customer-header.
            CLEAR bapiret2.
            bapiret2-type = 'S'.
            CONCATENATE '导入成功,客户编码:'wa_header-object_instance INTO bapiret2-message.
            APPEND bapiret2.
          ENDLOOP.
    
    
        ELSE.
          CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'.
          LOOP AT wa_mes_error-messages INTO bapiret2 .
            APPEND bapiret2.
          ENDLOOP.
        ENDIF.
    
      ENDLOOP.
      CALL FUNCTION 'Z_DISP_BAPILOG'
        EXPORTING
          p_title = '导入结果查看'
        TABLES
          return  = bapiret2.
    
    
    ENDFORM.                    " FRM_IMPORT_DATA
    *&---------------------------------------------------------------------*
    *&      Form  FRM_BANK_CREATE
    *&---------------------------------------------------------------------*
    *       text
    *----------------------------------------------------------------------*
    *  -->  p1        text
    *  <--  p2        text
    *----------------------------------------------------------------------*
    FORM frm_bank_create CHANGING bank_key TYPE bapi1011_key-bank_key.
      DATA:address TYPE bapi1011_address .
      address-bank_name = record-banka.
      "从bnka里取最大的银行代码 BANKL 100000001
    
      SELECT
        MAX( bankl )
      INTO
        bank_key
      FROM
        bnka
      WHERE
        banks = 'CN' AND bankl BETWEEN 'I100000001' AND 'I199999999'.
    
      IF bank_key IS INITIAL .
        bank_key = 'I100000001'.
      ENDIF.
      DATA:i_key TYPE i.
      i_key =   bank_key+1(10) + 1."加1
    
      bank_key = i_key.
      CONCATENATE 'I' bank_key INTO bank_key.
      CONDENSE bank_key NO-GAPS.
      CALL FUNCTION 'BAPI_BANK_CREATE'
        EXPORTING
          bank_ctry                 = 'CN'
          bank_key                  = bank_key
          bank_address              = address
    *   BANK_METHOD               =
    *   BANK_FORMATTING           =
    *   BANK_ADDRESS1             =
    *   I_XUPDATE                 = 'X'
    *   I_CHECK_BEFORE_SAVE       =
    * IMPORTING
    *   RETURN                    =
    *   BANKCOUNTRY               =
    *   BANKKEY                   =
                .
      IF sy-subrc = 0.
        CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
          EXPORTING
            wait = abap_true.
      ENDIF.
    
    ENDFORM.                    " FRM_BANK_CREATE
    *&---------------------------------------------------------------------*
    *&      Form  IMPORT_CENTER_DATA
    *&---------------------------------------------------------------------*
    *       text
    *----------------------------------------------------------------------*
    *  -->  p1        text
    *  <--  p2        text
    *----------------------------------------------------------------------*
    FORM import_center_data .
      wa_address-title       = '0003'.
      wa_address-name       = record-name1.
      wa_address-city       = record-region. "城市
      wa_address-postl_cod1 = '999999'.
      wa_address-street     = record-street."街道
      wa_address-house_no2     = record-house_num2."收货人
      wa_address-str_suppl3     = record-str_suppl3."电话
      wa_address-district     = record-city2."开票电话
      wa_address-location     = record-location."开票地址
      wa_address-country    = 'CN'.
      wa_address-langu      = 'ZH'.
    
      READ TABLE it005u WITH KEY bezei = record-region.
      IF sy-subrc = 0.
        wa_address-region = it005u-bland.
      ENDIF.
      "wa_address-region     = '010'."地区
      wa_address-sort1      = record-name1."搜素
    *  wa_address-sort2      = ''.
    *  wa_address-taxjurcode = 'FL0000000'.
      wa_address-time_zone = 'UTC+8'.
    
    * Assign address data directly
      wa_customer-central_data-address-postal-data = wa_address.
      wa_customer-central_data-address-postal-datax = wa_addressx.
    
    * Account account group directly
      wa_customer-central_data-central-data-ktokd = '1000'."客户组
      IF record-stkzu = ''.
        wa_customer-central_data-central-data-stkzu = 'X'."增值税标识
      ENDIF.
      wa_customer-central_data-central-data-stceg = record-stceg."增值税号
    *  wa_customer-central_data-central-datax-ktokd = 'X'.
      DATA:bankl TYPE bankl.
      PERFORM frm_bank_create CHANGING bankl.
    ***银行代码必须存在,用BAPI_BANK_CREATE 创建
      CLEAR:wa_customer-central_data-bankdetail,wa_bankdetail-bankdetails.
      wa_bankdetail_st-task = c_insert.
      wa_bankdetail_st-data_key-banks = 'CN'."国家
      wa_bankdetail_st-data_key-bankl = bankl."银行代码
      wa_bankdetail_st-data_key-bankn = record-banka."银行
      APPEND wa_bankdetail_st TO wa_bankdetail-bankdetails.
      wa_customer-central_data-bankdetail = wa_bankdetail.
    
    ***税
      CLEAR wa_tax_ind-tax_ind.
      wa_tax_ind_st-task = c_insert.
      wa_tax_ind_st-data_key-aland = 'CN'.
      wa_tax_ind_st-data_key-tatyp = 'MWST'.
    
      wa_tax_ind_st-data-taxkd = '1'."必须上税
      APPEND wa_tax_ind_st TO wa_tax_ind-tax_ind.
      wa_customer-central_data-tax_ind = wa_tax_ind.
    ENDFORM.                    " IMPORT_CENTER_DATA
    *&---------------------------------------------------------------------*
    *&      Form  IMPORT_COMPANY_DATA
    *&---------------------------------------------------------------------*
    *       text
    *----------------------------------------------------------------------*
    *  -->  p1        text
    *  <--  p2        text
    *----------------------------------------------------------------------*
    FORM import_company_data .
      CLEAR wa_company_code-company.
      wa_company_code_st-task           = c_insert.
    
      "wa_company_code_st-data_key-bukrs = record-vkorg.
      SELECT
        SINGLE bukrs
      INTO
        wa_company_code_st-data_key-bukrs
      FROM
        tvko
      WHERE
        vkorg = record-vkorg.
      "wa_company_code_st-data-zuawa     = '009'."排序码
      wa_company_code_st-data-akont     = '1122020001'.
    *  wa_company_code_st-data-zwels     = 'ACDETY'.
      wa_company_code_st-data-zterm     = '0004'.
    *  wa_company_code_st-data-zgrup     = '02'.
    *  wa_company_code_st-data-xausz     = '2'.
    *  wa_company_code_st-data-xzver     = 'X'.
    
      APPEND wa_company_code_st TO wa_company_code-company.
    ENDFORM.                    " IMPORT_COMPANY_DATA
    *&---------------------------------------------------------------------*
    *&      Form  IMPORT_SALES_DATA
    *&---------------------------------------------------------------------*
    *       text
    *----------------------------------------------------------------------*
    *  -->  p1        text
    *  <--  p2        text
    *----------------------------------------------------------------------*
    FORM import_sales_data .
      CLEAR wa_sales_data-sales.
      wa_sales_data_st-task             = c_insert.
      wa_sales_data_st-data_key-vkorg   = record-vkorg.
      wa_sales_data_st-data_key-vtweg   = '99'.
      wa_sales_data_st-data_key-spart   = '99'.
    
      wa_sales_data_st-data-kalks       = '1'."客户定价过程
      wa_sales_data_st-data-awahr       = '100'."订单可能性
      wa_sales_data_st-data-inco1       = 'FOB'."国际贸易条
      wa_sales_data_st-data-inco2       = '北京'.
      wa_sales_data_st-data-antlf       = '9'."最大交货
      wa_sales_data_st-data-kzazu       = 'X'.
      wa_sales_data_st-data-vsbed       = '10'."装运条件
      wa_sales_data_st-data-waers       = 'RMB'.
      wa_sales_data_st-data-ktgrd       = '02'."帐户分配组
      wa_sales_data_st-data-zterm       = '0004'."付款条件
    
      wa_sales_data_st-data-versg       = 1."客户统计组
      wa_sales_data_st-data-kdgrp = '23'."客户组
      SELECT SINGLE bzirk INTO wa_sales_data_st-data-bzirk FROM zxd01_regio WHERE regio = wa_address-region.
      "wa_sales_data_st-data-bzirk = '1400'."销售地区
      wa_sales_data_st-data-konda = '10'."价格组
    
      SELECT
        SINGLE
         werks
       INTO
         wa_sales_data_st-data-vwerk
       FROM
         tvkwz
       WHERE
         vtweg = '99' AND vkorg = record-vkorg.
    
    *  wa_sales_data_st-data-vwerk = 8800."交货工厂
    
    ***合作伙伴
      CLEAR:wa_functions_t,wa_functions-functions.
      wa_functions_st-task = c_insert.
      wa_functions_st-data_key-parvw    = 'AG'.
      wa_functions_st-data_key-parza    = '000'.
      APPEND wa_functions_st TO wa_functions_t.
      wa_functions-functions = wa_functions_t.
    
      wa_functions_st-task = c_insert.
      wa_functions_st-data_key-parvw    = 'RE'.
      wa_functions_st-data_key-parza    = '000'.
      APPEND wa_functions_st TO wa_functions_t.
      wa_functions-functions = wa_functions_t.
    
      wa_functions_st-task = c_insert.
      wa_functions_st-data_key-parvw    = 'RG'.
      wa_functions_st-data_key-parza    = '000'.
      APPEND wa_functions_st TO wa_functions_t.
      wa_functions-functions = wa_functions_t.
    
      wa_functions_st-task = c_insert.
      wa_functions_st-data_key-parvw    = 'WE'.
      wa_functions_st-data_key-parza    = '000'.
      APPEND wa_functions_st TO wa_functions_t.
      wa_functions-functions = wa_functions_t.
    
      wa_sales_data_st-functions = wa_functions.
      APPEND wa_sales_data_st TO wa_sales_data-sales.
    ENDFORM.                    " IMPORT_SALES_DATA
  • 相关阅读:
    【Vue教程系列:第一篇】Win7 搭建Vue开发环境
    MVC 之 WebAPI 系列二
    MVC 之 WebAPI 系列一
    Javascript 截取2位小数
    Javascript 处理时间大全
    SpringBoot是如何动起来的?
    超全、超详的Spring Boot配置讲解笔记
    Java数据结构-ArrayList最细致的解析笔记
    Redis 到底是怎么实现“附近的人”这个功能的?
    02--Java Jshell的使用 最适合入门的Java教程
  • 原文地址:https://www.cnblogs.com/mingdashu/p/11106988.html
Copyright © 2011-2022 走看看