首页 > 代码库 > 客户/供应商主数据批导

客户/供应商主数据批导

客户/供应商主数据维护中,SAP提供了两个强大的类cmd_ei_api=>maintain_bapi和VMD_EI_API

下面是客户主数据维护的例子,供应商的类似。当客户编码为数据类型时,一定要将客户编码补0,否则系统会出现莫名其妙的错误。

*&---------------------------------------------------------------------*
*& 程序名称:ZSDB0002
*& 作者     

*& 开发日期:
*& 请求号  :
*& 描述    :
*& 开发申请:
*& 变更记录
*&
** 修改日期 开发人员  请求号 描述
*&---------------------------------------------------------------------*
REPORT  zsdb0002 MESSAGE-ID zl_mess.
INCLUDE ZSDB0002_VAR_INCLUDE.
INCLUDE ZSDB0002_SCREEN_INCLUDE.
INCLUDE ZSDB0002_FILE_INCLUDE.

 

  *&---------------------------------------------------------------------*
*&  Include           ZSDB0002_VAR_INCLUDE
*&---------------------------------------------------------------------*

TYPES:BEGIN OF ty_basis,
      ktokd   TYPE  kna1-ktokd  ,
      kunnr   TYPE  kna1-kunnr  ,
      chhu    type  LENGTH 4,
      name1   TYPE  adrc-name1  ,
      name2   TYPE  adrc-name2  ,
      sortl   TYPE  kna1-sortl  ,
      sort2   TYPE  adrc-sort2  ,
      street  TYPE  adrc-street ,
      land1   TYPE  kna1-land1  ,
      regio   TYPE  kna1-regio  ,
      tel     TYPE  adrc-tel_number ,
      fax     TYPE  adrc-fax_number ,
      smtp    TYPE  adr6-smtp_addr  ,
      remark  TYPE  adrct-remark  ,
      stceg   TYPE  kna1-stceg  ,
      kukla   TYPE  kna1-kukla  ,
      brsch   TYPE  kna1-brsch  ,
      umsa1   TYPE  kna1-umsa1  ,
      uwaer   TYPE  kna1-uwaer  ,
      umjah   TYPE  kna1-umjah  ,
      katr1   TYPE  kna1-katr1  ,
      katr2   TYPE  kna1-katr2  ,
      katr3   TYPE  kna1-katr3  ,
      katr6   TYPE  kna1-katr6  ,
      zbz     TYPE  tdline  ,
      zywgg   TYPE  tdline  ,
       name11 TYPE  knvk-name1  ,
      telf11  TYPE  knvk-telf1  ,
      name12  TYPE  knvk-name1  ,
      telf12  TYPE  knvk-telf1  ,
      name13  TYPE  knvk-name1  ,
      telf13  TYPE  knvk-telf1  ,
  END OF ty_basis.

  TYPES:BEGIN OF ty_com,
     ktokd   TYPE  kna1-ktokd  ,
     kunnr   TYPE  kna1-kunnr  ,
     bukrs   TYPE  knb1-bukrs  ,
     akont   TYPE  knb1-akont  ,
  END OF ty_com.
    TYPES:BEGIN OF ty_org,
      ktokd   TYPE  kna1-ktokd  ,
      kunnr   TYPE  kna1-kunnr  ,
      vkorg   TYPE  knvv-vkorg  ,
      vtweg   TYPE  knvv-vtweg  ,
      spart   TYPE  knvv-spart  ,
      bzirk   TYPE  knvv-bzirk  ,
      vkbur   TYPE  knvv-vkbur  ,
      vkgrp   TYPE  knvv-vkgrp  ,
      kdgrp   TYPE  knvv-kdgrp  ,
      klabc   TYPE  knvv-klabc  ,
      waers   TYPE  knvv-waers  ,
      konda   TYPE  knvv-konda  ,
      pltyp   TYPE  knvv-pltyp  ,
      versg   TYPE  knvv-versg  ,
      vsbed   TYPE  knvv-vsbed  ,
      vwerk   TYPE  knvv-vwerk  ,
      inco1   TYPE  knvv-inco1  ,
      inco2   TYPE  knvv-inco2  ,
      zterm   TYPE  knvv-zterm  ,
      ktgrd   TYPE  knvv-ktgrd  ,
       taxkd   TYPE  knvi-taxkd  ,

      kvgr1   TYPE  knvv-kvgr1  ,
      kvgr2   TYPE  knvv-kvgr2  ,
      zczyq   TYPE  tdline  ,
      zqyg    TYPE  tdline  ,
      zmdg    TYPE  tdline  ,
      zdttj   TYPE  tdline  ,
       zbz     TYPE  tdline  ,
      END OF ty_org.
TYPES:BEGIN OF ty_data,
      ktokd   TYPE  kna1-ktokd  ,
      kunnr   TYPE  kna1-kunnr  ,
      bukrs   TYPE  knb1-bukrs  ,
      vkorg   TYPE  knvv-vkorg  ,
      vtweg   TYPE  knvv-vtweg  ,
      spart   TYPE  knvv-spart  ,
      chhu    type  LENGTH 4,
      name1   TYPE  adrc-name1  ,
      name2   TYPE  adrc-name2  ,
      sortl   TYPE  kna1-sortl  ,
      sort2   TYPE  adrc-sort2  ,
      street  TYPE  adrc-street ,
      land1   TYPE  kna1-land1  ,
      regio   TYPE  kna1-regio  ,
      tel     TYPE  adrc-tel_number ,
      fax     TYPE  adrc-fax_number ,
      smtp    TYPE  adr6-smtp_addr  ,
      remark  TYPE  adrct-remark  ,
      stceg   TYPE  kna1-stceg  ,
      kukla   TYPE  kna1-kukla  ,
      brsch   TYPE  kna1-brsch  ,
      umsa1   TYPE  kna1-umsa1  ,
      uwaer   TYPE  kna1-uwaer  ,
      umjah   TYPE  kna1-umjah  ,

      name11  TYPE  knvk-name1  ,
      telf11  TYPE  knvk-telf1  ,
      name12  TYPE  knvk-name1  ,
      telf12  TYPE  knvk-telf1  ,
      name13  TYPE  knvk-name1  ,
      telf13  TYPE  knvk-telf1  ,
      katr1   TYPE  kna1-katr1  ,
      katr2   TYPE  kna1-katr2  ,
      katr3   TYPE  kna1-katr3  ,
      katr6   TYPE  kna1-katr6  ,
      zbz     TYPE  tdline  ,
      zywgg   TYPE  tdline  ,
      akont   TYPE  knb1-akont  ,
      bzirk   TYPE  knvv-bzirk  ,
      vkbur   TYPE  knvv-vkbur  ,
      vkgrp   TYPE  knvv-vkgrp  ,
      kdgrp   TYPE  knvv-kdgrp  ,
      klabc   TYPE  knvv-klabc  ,
      waers   TYPE  knvv-waers  ,
      konda   TYPE  knvv-konda  ,
      pltyp   TYPE  knvv-pltyp  ,
      versg   TYPE  knvv-versg  ,
      vsbed   TYPE  knvv-vsbed  ,
      vwerk   TYPE  knvv-vwerk  ,
      inco1   TYPE  knvv-inco1  ,
      inco2   TYPE  knvv-inco2  ,
      zterm   TYPE  knvv-zterm  ,
      ktgrd   TYPE  knvv-ktgrd  ,
      taxkd   TYPE  knvi-taxkd  ,
      kvgr1   TYPE  knvv-kvgr1  ,
      kvgr2   TYPE  knvv-kvgr2  ,
      zczyq   TYPE  tdline  ,
      zqyg    TYPE  tdline  ,
      zmdg    TYPE  tdline  ,
      zdttj   TYPE  tdline  ,
  END OF ty_data.
TYPES:BEGIN OF ty_partner,
      kunnr     TYPE kna1-kunnr,
      vkorg     TYPE  knvv-vkorg  ,
      vtweg     TYPE  knvv-vtweg  ,
      spart     TYPE  knvv-spart  ,
      parvw_we  TYPE knvp-parvw,
      kunnr_we  TYPE kna1-kunnr,
      parvw_zp  TYPE knvp-parvw,
      kunnr_zp  TYPE kna1-kunnr,
      parvw_sm  TYPE knvp-parvw,
      kunnr_sm  TYPE kna1-kunnr,
  END OF ty_partner.
  TYPES:BEGIN OF ty_knvp,
        kunnr type knvp-kunnr,
        vkorg type knvp-vkorg,
        vtweg type knvp-vtweg,
        spart type knvp-spart,
    END OF ty_knvp.
    data:w_knvp type ty_knvp.
    TYPES:BEGIN OF ty_log,
         row   type i,
         vkorg type knvv-vkorg,
         vtweg type knvv-vtweg,
         spart type knvv-spart,
         kunnr type kna1-kunnr,
         type  type bapiret2-type,
         mesg  type bapiret2-message,
         color type LENGTH 6,
      END OF ty_log.
DATA:
      t_log type STANDARD TABLE OF ty_log,
      w_log type ty_log.
DATA:
      t_data TYPE STANDARD TABLE OF ty_data,
      w_data TYPE ty_data.
data:
      t_partner TYPE STANDARD TABLE OF ty_partner,
      w_partner type ty_partner.
DATA:lv_flg.
DATA:g_parnr TYPE parnr..
DATA:ls_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,
     lt_msg TYPE bapiret2_t,
     lwa_msg TYPE bapiret2,
     lt_cust TYPE cmds_ei_extern_t,
     lwa_cust TYPE cmds_ei_extern,
     lwa_sale TYPE cmds_ei_sales,
     lt_sale TYPE cmds_ei_sales_t,
     lt_functions TYPE cmds_ei_functions_t,
     lwa_functions TYPE cmds_ei_functions,
     lt_company TYPE cmds_ei_company_t,
     lt_text TYPE cvis_ei_text_t,
     lwa_text TYPE cvis_ei_text,
     lt_content TYPE tline_tab,
     lwa_content TYPE tline,
     lwa_tax TYPE cmds_ei_tax_ind,
     lt_tax TYPE cmds_ei_tax_ind_t,
     lt_remark TYPE cvis_ei_rem_t,
     lwa_remark TYPE cvis_ei_rem,
     lt_tel TYPE cvis_ei_tlx_t,
     lwa_tel TYPE cvis_ei_tlx_str,
     lt_fax TYPE cvis_ei_fax_t,
     lwa_fax TYPE cvis_ei_fax_str,
     lt_mail TYPE cvis_ei_smtp_t,
     lwa_mail TYPE cvis_ei_smtp_str,
     lt_tel01 TYPE cvis_ei_ttx_t,
     lwa_tel01 TYPE cvis_ei_ttx_str,
     lt_contact TYPE cmds_ei_contacts_t,
     lwa_contact TYPE cmds_ei_contacts,
     lt_version TYPE cvi_ei_version_type1_t,
     lwa_version TYPE cvi_ei_version_type1,
     lt_phone TYPE cvis_ei_phone_t,
     lwa_phone TYPE cvis_ei_phone_str,
     lt_phone1 TYPE cvis_ei_phone_t,
     lwa_phone1 TYPE cvis_ei_phone_str,
     lwa_company TYPE cmds_ei_company.
CONSTANTS:con_insert TYPE VALUE ‘I‘,
          con_update TYPE VALUE ‘M‘.
DATA:t_tpakd TYPE STANDARD TABLE OF tpakd,
      w_tpakd TYPE tpakd.
DATAit_fieldcat TYPE slis_t_fieldcat_alv,
      g_layout    TYPE slis_layout_alv,
      g_repid     TYPE sy-repid,
      g_title     TYPE lvc_title.
DATAwa_fieldcat LIKE LINE OF it_fieldcat.
data:
      t_basis type STANDARD TABLE OF ty_basis,
      w_basis type ty_basis,
      w_org   type ty_org,
      t_org   type STANDARD TABLE OF ty_org,
      t_com type STANDARD TABLE OF ty_com,
      w_com TYPE ty_com.

 

  *&---------------------------------------------------------------------*
*&  Include           ZSDB0002_SCREEN_INCLUDE
*&---------------------------------------------------------------------*

SELECTION-SCREEN BEGIN OF BLOCK b0 WITH FRAME TITLE title3.

PARAMETERS:p_test TYPE AS CHECKBOX DEFAULT ‘X‘.
*PARAMETERS:p_mod type AS LISTBOX VISIBLE LENGTH 10.
PARAMETERSp_master TYPE RADIOBUTTON GROUP g2 DEFAULT ‘X‘"不下载日志
            p_ptner TYPE RADIOBUTTON GROUP g2.

SELECTION-SCREEN END OF BLOCK b0.
SELECTION-SCREEN BEGIN OF BLOCK b1 WITH FRAME TITLE title1.
PARAMETERSp_fn LIKE rlgrap-filename MEMORY ID zrf"主数据文件路径
*PARAMETERS:p_test TYPE AS CHECKBOX DEFAULT ‘X‘.
SELECTION-SCREEN END OF BLOCK b1.
*SELECTION-SCREEN BEGIN OF BLOCK b2 WITH FRAME TITLE title2.
*PARAMETERS: p_not TYPE RADIOBUTTON GROUP g1 DEFAULT ‘X‘, "不下载日志
           p_all TYPE RADIOBUTTON GROUP g1, "下载全部日志
           p_eonly TYPE RADIOBUTTON GROUP g1, "仅下载出错日志
           p_logfn LIKE rlgrap-filename. "日志文件路径
*SELECTION-SCREEN END OF BLOCK b2.

INITIALIZATION.
  title1 ‘数据文件‘.
 title2 ‘处理日志‘.
  title3 ‘导入模式‘.
CONCATENATE ‘C:LOG_SD_CUSTOMS_MASTER‘ sy-datum ‘-‘ sy-uzeit ‘.txt‘ INTO p_logfn.

AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_fn.
  PERFORM frm_get_fn"取主数据文件路径


*AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_logfn.
 PERFORM frm_get_logfn.  "取日志文件路径

AT SELECTION-SCREEN.
  PERFORM frm_chech_filename."检测文件名

START-OF-SELECTION.
  IF p_ptner ‘X‘.
    PERFORM frm_upload_data TABLES t_partner."上传文件到内表
    PERFORM frm_fill_partner_data.
   PERFORM frm_write_log.
    PERFORM frm_shor_message.
  ELSEIF p_master ‘X‘.
    PERFORM frm_upload_data TABLES t_data.."上传文件到内表
    PERFORM frm_fill_data."将数据填充内表
PERFORM frm_write_log.
     PERFORM frm_shor_message.
  ENDIF.

 

  *&---------------------------------------------------------------------*
*&  Include           ZSDB0002_FILE_INCLUDE
*&---------------------------------------------------------------------*
*&---------------------------------------------------------------------*
*&      Form  frm_get_fn
*&---------------------------------------------------------------------*
      text
*----------------------------------------------------------------------*
FORM frm_get_fn .

  CALL FUNCTION ‘WS_FILENAME_GET‘
    EXPORTING
    DEF_FILENAME     ‘ 
    DEF_PATH         ‘ 
      mask             ‘,*.txt.‘
      mode             ‘O‘
      title            ‘客户主数据‘
    IMPORTING
      filename         p_fn
    RC               =
    EXCEPTIONS
      inv_winsys       1
      no_batch         2
      selection_cancel 3
      selection_error  4
      OTHERS           5.
  IF sy-subrc <> 0.
   MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
           WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
  ENDIF.

ENDFORM                   "frm_get_fn
*&---------------------------------------------------------------------*
*&      Form  frm_get_logfn
*&---------------------------------------------------------------------*
      text
*----------------------------------------------------------------------*
*FORM frm_get_logfn .
*
 CALL FUNCTION ‘WS_FILENAME_GET‘
   EXPORTING
**     DEF_FILENAME     ‘ 
**     DEF_PATH         ‘ 
     mask             ‘,*.txt.‘
     mode             ‘O‘
     title            ‘日志文件‘
   IMPORTING
     filename         p_logfn
**     RC               =
   EXCEPTIONS
     inv_winsys       1
     no_batch         2
     selection_cancel 3
     selection_error  4
     OTHERS           5.
 IF sy-subrc <> 0.
**    MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
**            WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
 ENDIF.
*
*ENDFORM.                    "frm_get_logfn
*&---------------------------------------------------------------------*
*&      Form  frm_chech_filename
*&---------------------------------------------------------------------*
      text
*----------------------------------------------------------------------*
FORM frm_chech_filename .
  IF p_fn IS INITIAL.
    MESSAGE i010."主数据文件,路径和文件名,不能为空!
    STOP.
  ENDIF.
ENDFORM                   "frm_chech_filename
*&---------------------------------------------------------------------*
*&      Form  frm_upload_data
*&---------------------------------------------------------------------*
      text
*----------------------------------------------------------------------*
FORM frm_upload_data TABLES fu_data.

  REFRESH  fu_data[].
  CALL FUNCTION ‘WS_UPLOAD‘
    EXPORTING
    CODEPAGE                      ‘ 
      filename                      p_fn
      filetype                      ‘DAT‘
    HEADLEN                       ‘ 
    LINE_EXIT                     ‘ 
    TRUNCLEN                      ‘ 
    USER_FORM                     ‘ 
    USER_PROG                     ‘ 
    DAT_D_FORMAT                  ‘ 
  IMPORTING
    FILELENGTH                    =
    TABLES
      data_tab                      fu_data[]
    EXCEPTIONS
      conversion_error              1
      file_open_error               2
      file_read_error               3
      invalid_type                  4
      no_batch                      5
      unknown_error                 6
      invalid_table_width           7
      gui_refuse_filetransfer       8
      customer_error                9
      no_authority                  10
      OTHERS                        11
            .
  IF sy-subrc <> 0.
    MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
            WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
  ENDIF.


  IF fu_data[] IS INITIAL.
    MESSAGE ‘文件为空!‘ TYPE ‘I‘.
    STOP.
  ENDIF.

ENDFORM                   "frm_upload_data

*&---------------------------------------------------------------------*
*&      Form  frm_fill_partner
*&---------------------------------------------------------------------*
      text
*----------------------------------------------------------------------*
FORM frm_fill_partner_data.
 REFRESH lt_cust.
  DATA:lt_data TYPE STANDARD TABLE OF ty_knvp,
       lw_data TYPE ty_knvp.
  REFRESH lt_data.
  LOOP AT t_partner INTO w_partner.
    lwa_cust-header-object_task ‘C‘.
    CALL FUNCTION ‘CONVERSION_EXIT_ALPHA_INPUT‘
      EXPORTING
        input  w_partner-kunnr
      IMPORTING
        output lwa_cust-header-object_instance-kunnr.
   lwa_cust-header-object_instance-kunnr w_partner-kunnr.
    CLEAR lwa_sale.
    REFRESH lt_sale.
    lwa_sale-task ‘U‘.
    lwa_sale-data_key-vkorg w_partner-vkorg.
    lwa_sale-data_key-vtweg w_partner-vtweg.
    lwa_sale-data_key-spart w_partner-spart.
   lwa_cust-central_data-central-data-ktokd ‘Z002‘."账户组
       lwa_cust-central_data-central-datax-ktokd ‘X‘.
    REFRESH lt_functions.
    CLEAR w_knvp.
    MOVE-CORRESPONDING w_partner TO w_knvp.
    PERFORM frm_fill_partner01 USING w_partner-parvw_zp w_partner-kunnr_zp w_knvp.
    PERFORM frm_fill_partner01 USING w_partner-parvw_sm w_partner-kunnr_sm w_knvp.
    PERFORM frm_fill_partner01 USING w_partner-parvw_we w_partner-kunnr_we w_knvp.

    lwa_sale-functions-functions lt_functions.

    APPEND lwa_sale TO lt_sale.
    CLEAR lwa_sale.
    lwa_cust-sales_data-sales lt_sale.
    REFRESH lt_sale.
    APPEND lwa_cust TO lt_cust.
    MOVE-CORRESPONDING w_partner TO lw_data.
    APPEND lw_data TO lt_data.
    CLEAR lw_data.

    CLEAR lwa_cust.

  ENDLOOP.
  ls_main-customers lt_cust.
  PERFORM  frm_write_data_sap TABLES lt_data.
  FREE ls_main.
  REFRESH lt_cust.
ENDFORM                   "frm_fill_partner
*&---------------------------------------------------------------------*
*&      Form  FRM_INPUT_DATA
*&---------------------------------------------------------------------*
      text
*----------------------------------------------------------------------*
 -->  p1        text
 <--  p2        text
*----------------------------------------------------------------------*
FORM frm_fill_data .
主数据
  DATA:lt_data TYPE STANDARD TABLE OF ty_knvp,
        lw_data TYPE ty_knvp.
  REFRESH lt_cust.
  data:l_kunnr1 type knvp-kunnr.
  DATA:l_kunnr TYPE kna1-kunnr.
  DATA:lt_kna1 TYPE STANDARD TABLE OF kna1.
  DATA:lw_kna1 TYPE kna1.

*切割数据
  "客户+公司信息
  LOOP AT t_data INTO w_data.
    MOVE-CORRESPONDING w_data TO w_basis.
    MOVE-CORRESPONDING w_data TO w_com.
    MOVE-CORRESPONDING w_data TO w_org.
    APPEND w_basis TO t_basis.
    APPEND w_com TO t_com.
    APPEND w_org TO t_org.
    CLEAR:w_com,w_org,w_basis,w_data.
  ENDLOOP.
  SORT t_basis BY kunnr.
  SORT t_org   BY kunnr vkorg vtweg spart.
  SORT t_com BY kunnr bukrs.
  "客户+基本信息
  DELETE ADJACENT DUPLICATES FROM t_basis COMPARING kunnr.
  DELETE ADJACENT DUPLICATES FROM t_org COMPARING kunnr vkorg vtweg spart  .
  DELETE ADJACENT DUPLICATES FROM t_com COMPARING kunnr bukrs.
  "客户+销售组织信息

  LOOP AT t_basis INTO w_basis.
    "判定该客户是否存在



    "获取默认合作伙伴
    REFRESH t_tpakd.
    SELECT *
      FROM tpakd
      INTO CORRESPONDING FIELDS OF TABLE t_tpakd
      WHERE ktokd w_basis-ktokd.

    CALL FUNCTION ‘CONVERSION_EXIT_ALPHA_INPUT‘
      EXPORTING
        input  w_basis-kunnr
      IMPORTING
        output lwa_cust-header-object_instance-kunnr.
    CLEAR l_kunnr.
    SELECT SINGLE kunnr
      FROM kna1
      INTO l_kunnr
      WHERE kunnr lwa_cust-header-object_instance-kunnr.
   lwa_cust-header-object_instance-kunnr w_data-kunnr."客户编码

    lwa_cust-central_data-central-data-ktokd w_basis-ktokd."账户组
    IF l_kunnr IS INITIAL.
      lwa_cust-header-object_task ‘I‘.
    ELSE.
      lwa_cust-header-object_task ‘M‘.

    ENDIF.


      lwa_cust-central_data-central-data-brsch w_basis-brsch."行业
      lwa_cust-central_data-central-data-umsa1 w_basis-umsa1.
      lwa_cust-central_data-central-data-kukla w_basis-kukla.
      lwa_cust-central_data-central-data-katr1 w_basis-katr1.
      lwa_cust-central_data-central-data-katr2 w_basis-katr2.
      lwa_cust-central_data-central-data-katr3 w_basis-katr3.
      lwa_cust-central_data-central-data-katr6 w_basis-katr6.
      lwa_cust-central_data-central-data-uwaer w_basis-uwaer.
      lwa_cust-central_data-central-data-stceg w_basis-stceg."增值税号
      lwa_cust-central_data-central-data-umjah w_basis-umjah."货币

      lwa_cust-central_data-central-datax-katr1 ‘X‘.
      lwa_cust-central_data-central-datax-katr2 ‘X‘.
      lwa_cust-central_data-central-datax-katr3 ‘X‘.
      lwa_cust-central_data-central-datax-katr6 ‘X‘.
      lwa_cust-central_data-central-datax-brsch ‘X‘.
      lwa_cust-central_data-central-datax-umsa1 ‘X‘.
      lwa_cust-central_data-central-datax-uwaer ‘X‘."货币
      lwa_cust-central_data-central-datax-umjah ‘X‘."货币
      lwa_cust-central_data-central-data-civve ‘X‘.
      lwa_cust-central_data-central-datax-ktokd ‘X‘.
      lwa_cust-central_data-central-datax-civve ‘X‘.
地址数据
      lwa_cust-central_data-address-task con_insert.
    lwa_cust-central_data-address-postal-data-title w_basis-chhu.
      lwa_cust-central_data-address-postal-data-name w_basis-name1.
      lwa_cust-central_data-address-postal-data-name_2 w_basis-name2.
      lwa_cust-central_data-address-postal-data-street w_basis-street.
      lwa_cust-central_data-address-postal-data-region w_basis-regio.
      lwa_cust-central_data-address-postal-data-langu sy-langu.
      lwa_cust-central_data-address-postal-data-country w_basis-land1.
      lwa_cust-central_data-address-postal-data-sort1 w_basis-sortl.
      lwa_cust-central_data-address-postal-datax-sort1 ‘X‘.
      lwa_cust-central_data-address-postal-data-sort2 w_basis-sort2.
      lwa_cust-central_data-address-postal-datax-sort2 ‘X‘.
    lwa_cust-central_data-address-postal-datax-title ‘X‘.
      lwa_cust-central_data-address-postal-datax-name ‘X‘.
      lwa_cust-central_data-address-postal-datax-name_2 ‘X‘.
      lwa_cust-central_data-address-postal-datax-langu ‘X‘.
      lwa_cust-central_data-address-postal-datax-country ‘X‘.
      lwa_cust-central_data-address-postal-datax-street ‘X‘.
      lwa_cust-central_data-address-postal-datax-region ‘X‘.
*地址注释
      CLEAR lwa_remark.
      REFRESH lt_remark.
      lwa_remark-task con_insert.
      lwa_remark-data-langu sy-langu.
      lwa_remark-data-adr_notes w_basis-remark.
      lwa_remark-datax-langu ‘X‘.
      lwa_remark-datax-adr_notes ‘X‘.
      APPEND lwa_remark TO lt_remark.
      lwa_cust-central_data-address-remark-remarks lt_remark.

*电话
      CLEAR:lwa_phone.
      REFRESH lt_phone.
      lwa_phone-contact-task con_insert.
      lwa_phone-contact-data-telephone w_basis-tel.
      lwa_phone-contact-datax-telephone ‘X‘.
      APPEND lwa_phone TO lt_phone.
      lwa_cust-central_data-address-communication-phone-phone lt_phone.
*传真
      CLEAR:lwa_fax.
      REFRESH lt_fax.
      lwa_fax-contact-task con_insert.
      lwa_fax-contact-data-fax w_basis-fax.
      lwa_fax-contact-datax-fax ‘X‘.
      APPEND lwa_fax TO lt_fax.
      lwa_cust-central_data-address-communication-fax-fax lt_fax.

*电子邮件
      CLEAR:lwa_mail.
      REFRESH lt_mail.
      lwa_mail-contact-task con_insert.
      lwa_mail-contact-data-e_mail w_basis-smtp.
      lwa_mail-contact-datax-e_mail ‘X‘.
      APPEND lwa_mail TO lt_mail.
      lwa_cust-central_data-address-communication-smtp-smtp lt_mail.

*联系人1
*CLEAR:g_parnr.
*CALL FUNCTION ‘NUMBER_GET_NEXT‘
 EXPORTING
   nr_range_nr             ‘AP‘
   object                  ‘PARTNER‘
   quantity                ‘1‘
 IMPORTING
   number                  g_parnr
 EXCEPTIONS
   interval_not_found      1
   number_range_not_intern 2
   object_not_found        3
   quantity_is_0           4
   quantity_is_not_1       5
   interval_overflow       6
   buffer_overflow         7
   OTHERS                  8.
*
*lwa_contact-task ‘I‘.
*lwa_contact-address_type_3-task ‘I‘.
*lwa_contact-data_key-parnr g_parnr.
*lwa_contact-address_type_3-postal-data-firstname ‘aa‘.
*lwa_contact-address_type_3-postal-data-lastname ‘bb‘.
*lwa_contact-address_type_3-postal-datax-firstname ‘X‘.
*lwa_contact-address_type_3-postal-datax-lastname ‘X‘.
*
*"联系人电话
*
*lwa_phone1-contact-task ‘I‘.
*lwa_phone1-contact-data-telephone ‘89999888‘.
*lwa_phone1-contact-data-extension ‘3434343‘.
*lwa_phone1-contact-datax-extension ‘X‘.
*lwa_phone1-contact-datax-telephone ‘X‘.
*APPEND lwa_phone1 TO lt_phone1.
*
*lwa_contact-address_type_3-communication-phone-phone lt_phone1.
*APPEND lwa_contact TO lt_contact.

      REFRESH lt_contact.
      PERFORM frm_fill_contact USING w_basis-name11 w_basis-telf11.
      PERFORM frm_fill_contact USING w_basis-name12 w_basis-telf12.
      PERFORM frm_fill_contact USING w_basis-name13 w_basis-telf13.
      lwa_cust-central_data-contact-contacts lt_contact.

*会计注释
   CLEAR:lwa_text.
    REFRESH lt_text.
   CLEAR:lwa_content.
   REFRESH lt_content.
   lwa_text-task ‘M‘.
   lwa_text-data_key-text_id ‘0002‘.
   lwa_text-data_key-langu sy-langu.
   lwa_content-tdformat ‘*‘.
   lwa_content-tdline ‘TEST001‘.
   APPEND lwa_content TO lt_content.
   CLEAR lwa_content.
   lwa_text-data lt_content.
*
   APPEND lwa_text TO lt_text.

*备注
   REFRESH lt_content.
   CLEAR lwa_content.
   CLEAR lwa_text.
   lwa_text-task ‘M‘.
   lwa_text-data_key-text_id ‘Z301‘.
   lwa_text-data_key-langu sy-langu.
   lwa_content-tdformat ‘*‘.
   lwa_content-tdline ‘TEST002‘.
   APPEND lwa_content TO lt_content.
   CLEAR lwa_content.
   lwa_text-data lt_content.
*
   APPEND lwa_text TO lt_text.
    PERFORM frm_fill_text USING ‘Z301‘ w_basis-zbz.
*有无店招广告
   REFRESH lt_content.
   REFRESH lt_content.
   CLEAR lwa_content.
   CLEAR lwa_text.
   lwa_text-task ‘M‘.
   lwa_text-data_key-text_id ‘Z302‘.
   lwa_text-data_key-langu sy-langu.
   lwa_content-tdformat ‘*‘.
   lwa_content-tdline ‘TEST003‘.
   APPEND lwa_content TO lt_content.
   CLEAR lwa_content.
   lwa_text-data lt_content.
   APPEND lwa_text TO lt_text.
    PERFORM frm_fill_text USING ‘Z302‘ w_basis-zywgg.
    lwa_cust-central_data-text-texts lt_text.

 REFRESH lt_company.
公司代码数据
LOOP AT t_com INTO w_com WHERE kunnr w_basis-kunnr.
 CLEAR lwa_company.

    lwa_company-task ‘M‘.
    lwa_company-data_key-bukrs w_com-bukrs.
   lwa_company-data-zuawa ‘001‘.
    lwa_company-data-akont w_com-akont.
   lwa_company-datax-zuawa ‘X‘.
    lwa_company-datax-akont ‘X‘.
    APPEND lwa_company TO lt_company.
    CLEAR:w_com.
ENDLOOP.
     lwa_cust-company_data-company lt_company.
*销售数据
    "销售数据文本
*称重要求
*tax

    REFRESH lt_sale.

     LOOP AT t_org INTO w_org WHERE kunnr w_basis-kunnr.
 CLEAR lwa_sale.

    REFRESH lt_text.
    PERFORM frm_fill_text USING ‘Z201‘ w_org-zbz.
   REFRESH lt_content.
   CLEAR:lwa_text,lwa_content.
   lwa_text-task ‘M‘.
   lwa_text-data_key-text_id ‘Z201‘.
   lwa_text-data_key-langu sy-langu.
   lwa_content-tdformat ‘*‘.
   lwa_content-tdline w_data-zczyq.
   APPEND lwa_content TO lt_content.
   CLEAR lwa_content.
   lwa_text-data lt_content.
   APPEND lwa_text TO lt_text.
    PERFORM frm_fill_text USING ‘Z202‘ w_org-zbz.
   REFRESH lt_content.
   CLEAR:lwa_text,lwa_content.
   lwa_text-task ‘M‘.
   lwa_text-data_key-text_id ‘Z202‘.
   lwa_text-data_key-langu sy-langu.
   lwa_content-tdformat ‘*‘.
   lwa_content-tdline w_data-zqyg.
   APPEND lwa_content TO lt_content.
   CLEAR lwa_content.
   lwa_text-data lt_content.
   APPEND lwa_text TO lt_text.
    PERFORM frm_fill_text USING ‘Z203‘ w_org-zmdg.
   REFRESH lt_content.
   CLEAR:lwa_text,lwa_content.
   lwa_text-task ‘M‘.
   lwa_text-data_key-text_id ‘Z203‘.
   lwa_text-data_key-langu sy-langu.
   lwa_content-tdformat ‘*‘.
   lwa_content-tdline w_data-zmdg.
   APPEND lwa_content TO lt_content.
   CLEAR lwa_content.
   lwa_text-data lt_content.
   APPEND lwa_text TO lt_text.

   REFRESH lt_content.
*
   lwa_text-task ‘M‘.
   lwa_text-data_key-text_id ‘Z204‘.
   lwa_text-data_key-langu sy-langu.
   lwa_content-tdformat ‘*‘.
   lwa_content-tdline w_data-zmdd.
   APPEND lwa_content TO lt_content.
   CLEAR lwa_content.
   lwa_text-data lt_content.
*
   APPEND lwa_text TO lt_text.

   REFRESH lt_content.
   CLEAR:lwa_text,lwa_content.
   lwa_text-task ‘M‘.
   lwa_text-data_key-text_id ‘Z205‘.
   lwa_text-data_key-langu sy-langu.
   lwa_content-tdformat ‘*‘.
   lwa_content-tdline w_data-zdttj.
   APPEND lwa_content TO lt_content.
   CLEAR lwa_content.
   lwa_text-data lt_content.
   APPEND lwa_text TO lt_text.
    PERFORM frm_fill_text USING ‘Z205‘ w_org-zdttj.
    lwa_sale-texts-texts lt_text.

    lwa_sale-task ‘M‘.
    lwa_sale-data_key-vkorg w_org-vkorg.
    lwa_sale-data_key-vtweg w_org-vtweg.
    lwa_sale-data_key-spart w_org-spart.
    lwa_sale-data-zterm w_org-zterm.
    lwa_sale-data-vkgrp w_org-vkgrp.
    lwa_sale-data-vkbur w_org-vkbur.
    lwa_sale-data-waers w_org-waers.
    lwa_sale-data-kvgr1 w_org-kvgr1.
    lwa_sale-data-kvgr2 w_org-kvgr2.
    lwa_sale-data-inco1 w_org-inco1.
    lwa_sale-data-inco2 w_org-inco2.
    lwa_sale-data-bzirk w_org-bzirk.
    lwa_sale-data-kdgrp w_org-kdgrp."客户组
    lwa_sale-data-versg w_org-versg."客户统计组
    lwa_sale-data-vsbed w_org-vsbed."装运条件
    lwa_sale-data-vwerk w_org-vwerk.
    lwa_sale-data-ktgrd w_org-ktgrd."账户分配
    lwa_sale-data-klabc w_org-klabc."ABC等级
    lwa_sale-data-konda w_org-konda."价格租
    lwa_sale-data-pltyp w_org-pltyp."价格清单
    IF w_org-konda IS NOT INITIAL.
      lwa_sale-datax-konda ‘X‘."价格租
    ENDIF.
    IF w_org-pltyp IS NOT INITIAL.
      lwa_sale-datax-pltyp ‘X‘."价格清单
    ENDIF.
    IF w_org-klabc IS NOT INITIAL.
      lwa_sale-datax-klabc ‘X‘."ABC等级
    ENDIF.
    IF w_org-zterm IS NOT INITIAL.
      lwa_sale-datax-zterm ‘X‘.
    ENDIF.
    IF w_org-vkgrp IS NOT INITIAL.
      lwa_sale-datax-vkgrp ‘X‘.
    ENDIF.
    IF w_org-vkbur IS NOT INITIAL.
      lwa_sale-datax-vkbur ‘X‘.
    ENDIF.
    IF w_org-waers IS NOT INITIAL.
      lwa_sale-datax-waers ‘X‘.
    ENDIF.
    IF w_org-kvgr1 IS NOT INITIAL.
      lwa_sale-datax-kvgr1 ‘X‘.
    ENDIF.
    IF w_org-kvgr2 IS NOT INITIAL.
      lwa_sale-datax-kvgr2 ‘X‘.
    ENDIF.
    IF w_org-inco1 IS NOT INITIAL.
      lwa_sale-datax-inco1 ‘X‘.
    ENDIF.
    IF w_org-inco2 IS NOT INITIAL.
      lwa_sale-datax-inco2 ‘X‘.
    ENDIF.
    IF w_org-bzirk IS NOT INITIAL.
      lwa_sale-datax-bzirk ‘X‘.
    ENDIF.
    IF w_org-kdgrp IS NOT INITIAL.
      lwa_sale-datax-kdgrp ‘X‘."客户组
    ENDIF.
    IF w_org-versg IS NOT INITIAL.
      lwa_sale-datax-versg ‘X‘."客户统计组
    ENDIF.
    IF w_org-vsbed IS NOT INITIAL.
      lwa_sale-datax-vsbed ‘X‘."装运条件
    ENDIF.
    IF w_org-vwerk IS NOT INITIAL.
      lwa_sale-datax-vwerk ‘X‘.
    ENDIF.
    IF w_org-ktgrd IS NOT INITIAL.
      lwa_sale-datax-ktgrd ‘X‘."账户分配
    ENDIF.

    REFRESH lt_functions.
    CLEAR w_knvp.
    MOVE-CORRESPONDING w_org TO w_knvp.

    LOOP AT t_tpakd INTO w_tpakd.
      select SINGLE kunnr FROM knvp INTO l_kunnr1 WHERE kunnr w_basis-kunnr and vkorg w_org-vkorg and vtweg w_org-vtweg and spart w_org-spart.
        if sy-subrc ne 0.
      PERFORM frm_fill_partner USING w_tpakd-parvw lwa_cust-header-object_instance-kunnr w_knvp.
      ENDIF.

    ENDLOOP.
   CLEAR lwa_functions.
   lwa_functions-task ‘I‘.
   lwa_functions-data_key-parvw ‘I‘.
   lwa_functions-data_key-parvw ‘WE‘.
**    lwa_functions-data-partner ‘AY9‘.
   lwa_functions-data-defpa ‘X‘.
   lwa_functions-datax-defpa ‘X‘.
   lwa_functions-datax-partner ‘X‘.
   APPEND lwa_functions TO lt_functions.
*
   CLEAR lwa_functions.
   lwa_functions-task ‘I‘.
   lwa_functions-data_key-parvw ‘I‘.
   lwa_functions-data_key-parvw ‘RG‘.
**    lwa_functions-data-partner ‘AY9‘.
   lwa_functions-data-defpa ‘X‘.
   lwa_functions-datax-defpa ‘X‘.
   lwa_functions-datax-partner ‘X‘.
   APPEND lwa_functions TO lt_functions.
*
*
   CLEAR lwa_functions.
   lwa_functions-task ‘I‘.
   lwa_functions-data_key-parvw ‘I‘.
   lwa_functions-data_key-parvw ‘SM‘.
**    lwa_functions-data-partner ‘GX0001‘.
   lwa_functions-data-defpa ‘X‘.
   lwa_functions-datax-defpa ‘X‘.
   lwa_functions-datax-partner ‘X‘.
   APPEND lwa_functions TO lt_functions.
*
*
   CLEAR lwa_functions.
   lwa_functions-task ‘I‘.
   lwa_functions-data_key-parvw ‘I‘.
   lwa_functions-data_key-parvw ‘AG‘.
   lwa_functions-data-defpa ‘X‘.
   lwa_functions-datax-defpa ‘X‘.
   APPEND lwa_functions TO lt_functions.
*
*
   CLEAR lwa_functions.
   lwa_functions-task ‘I‘.
   lwa_functions-data_key-parvw ‘I‘.
   lwa_functions-data_key-parvw ‘RE‘.
   lwa_functions-data-defpa ‘X‘.
   lwa_functions-datax-defpa ‘X‘.
   APPEND lwa_functions TO lt_functions.

     CLEAR lwa_tax.
    REFRESH lt_tax.
    lwa_tax-task ‘M‘.
    lwa_tax-data_key-aland ‘CN‘.
    lwa_tax-data_key-tatyp ‘MWST‘ .
    lwa_tax-data-taxkd w_org-taxkd.
    lwa_tax-datax-taxkd ‘X‘.
    APPEND lwa_tax TO lt_tax.


    lwa_sale-functions-functions lt_functions.

    APPEND lwa_sale TO lt_sale.
    CLEAR lwa_sale.
    CLEAR:w_org.
endloop.
lwa_cust-central_data-tax_ind-tax_ind lt_tax.
    lwa_cust-sales_data-sales lt_sale.
   lwa_cust-sales_data-CURRENT_STATE ‘X‘.
    REFRESH lt_sale.
    APPEND lwa_cust TO lt_cust.
    MOVE-CORRESPONDING w_basis TO lw_data.
    APPEND lw_data TO lt_data.
    CLEAR lw_data.
    CLEAR lwa_cust.
  ENDLOOP.
  ls_main-customers lt_cust.
  PERFORM frm_write_data_sap TABLES lt_data."创建数据到SAP中
  FREE ls_main.
  REFRESH lt_cust.

ENDFORM                   FRM_INPUT_DATA

*&---------------------------------------------------------------------*
*&      Form  frm_fill_contact
*&---------------------------------------------------------------------*
      text
*----------------------------------------------------------------------*
     -->FU_NAME    text
     -->FU_PHONE   text
*----------------------------------------------------------------------*
FORM frm_fill_contact USING fu_name fu_phone.
  IF fu_name IS NOT INITIAL OR fu_phone IS NOT INITIAL.
    CLEAR lwa_contact.
    CLEAR:g_parnr.
    CALL FUNCTION ‘NUMBER_GET_NEXT‘
      EXPORTING
        nr_range_nr             ‘AP‘
        object                  ‘PARTNER‘
        quantity                ‘1‘
      IMPORTING
        number                  g_parnr
      EXCEPTIONS
        interval_not_found      1
        number_range_not_intern 2
        object_not_found        3
        quantity_is_0           4
        quantity_is_not_1       5
        interval_overflow       6
        buffer_overflow         7
        OTHERS                  8.
    lwa_contact-task ‘I‘.
    lwa_contact-address_type_3-task ‘I‘.
    lwa_contact-data_key-parnr g_parnr.
*lwa_contact-address_type_3-postal-data-firstname ‘aa‘.
    lwa_contact-address_type_3-postal-data-lastname fu_name.
*lwa_contact-address_type_3-postal-datax-firstname ‘X‘.
    lwa_contact-address_type_3-postal-datax-lastname ‘X‘.
    "联系人电话
    CLEAR:lwa_phone1.
    REFRESH lt_phone1.
    lwa_phone1-contact-task ‘I‘.
    lwa_phone1-contact-data-telephone fu_phone.
*lwa_phone1-contact-data-extension ‘3434343‘.
*lwa_phone1-contact-datax-extension ‘X‘.
    lwa_phone1-contact-datax-telephone ‘X‘.
    APPEND lwa_phone1 TO lt_phone1.
    lwa_contact-address_type_3-communication-phone-phone lt_phone1.
    APPEND lwa_contact TO lt_contact.
  ENDIF.
ENDFORM                   "frm_fill_contact

*&---------------------------------------------------------------------*
*&      Form  frm_fill_text
*&---------------------------------------------------------------------*
      text
*----------------------------------------------------------------------*
     -->FU_ID      text
     -->FU_CONTENT text
*----------------------------------------------------------------------*
FORM frm_fill_text USING fu_id fu_content.
  REFRESH lt_content.
  REFRESH lt_content.
  CLEAR lwa_content.
  CLEAR lwa_text.
  lwa_text-task ‘M‘.
  lwa_text-data_key-text_id fu_id.
  lwa_text-data_key-langu sy-langu.
  lwa_content-tdformat ‘*‘.
  lwa_content-tdline fu_content.
  APPEND lwa_content TO lt_content.
  CLEAR lwa_content.
  lwa_text-data lt_content.
  APPEND lwa_text TO lt_text.
ENDFORM                   "frm_fill_text
*&---------------------------------------------------------------------*
*&      Form  FRM_WRITE_DATA_SAP
*&---------------------------------------------------------------------*
      text
*----------------------------------------------------------------------*
 -->  p1        text
 <--  p2        text
*----------------------------------------------------------------------*
FORM frm_write_data_sap TABLES fu_data TYPE STANDARD TABLE.
  DATA:l_ilines TYPE .
  DATA:l_message TYPE string.
  DATA:l_iindex TYPE i.
  FREE:ls_main1,ls_main2,ls_mesg,ls_mesg1.
  DATA:lw_data TYPE ty_knvp.
 FREE:cmd_ei_api=>gt_global_kna1_old.
  DESCRIBE TABLE fu_data[] LINES l_ilines.
  CALL METHOD cmd_ei_api=>maintain_bapi
    EXPORTING
      iv_test_run              p_test
      iv_collect_messages      ‘X‘
      is_master_data           ls_main
    IMPORTING
      es_master_data_correct   ls_main1
      es_message_correct       ls_mesg1
      es_master_data_defective ls_main2
      es_message_defective     ls_mesg.
  REFRESH lt_msg.
  CLEAR lv_flg.
  lt_msg ls_mesg-messages.
  l_iindex 0.
  DO l_ilines TIMES.
    l_iindex l_iindex 1.
    READ TABLE fu_data INTO lw_data INDEX l_iindex.
    READ TABLE lt_msg INTO lwa_msg WITH KEY row l_iindex.
    IF sy-subrc NE 0."没有任何改行的信息,表明成功
      CLEAR w_log.
      CLEAR l_message.
      w_log-row l_iindex.
      w_log-kunnr lw_data-kunnr.
      w_log-type ‘S‘.
      CONCATENATE ‘客户‘ w_log-kunnr ‘创建/修改成功‘ INTO l_message.
      w_log-mesg l_message.
      APPEND w_log TO t_log.
      COMMIT WORK.
    ELSE.
      CLEAR lv_flg.
      LOOP AT lt_msg INTO lwa_msg WHERE row l_iindex.
        CLEAR l_message.
        l_message lwa_msg-message.

   WRITE: lwa_cust-header-OBJECT_INSTANCE-kunnr,lwa_msg-type,l_message.
        IF lwa_msg-type ‘E‘ OR lwa_msg-type ‘A‘.
          CLEAR w_log.
          w_log-row l_iindex.
          w_log-kunnr lw_data-kunnr.
          w_log-type lwa_msg-type.
          w_log-mesg l_message.
          APPEND w_log TO t_log.
          lv_flg ‘X‘.
        ENDIF.
        CLEAR:lwa_msg.
      ENDLOOP.

      IF lv_flg IS INITIAL.
        CLEAR w_log.
        CLEAR l_message.
        w_log-row l_iindex.
        w_log-kunnr lw_data-kunnr.
        w_log-type ‘S‘.
        CONCATENATE ‘客户‘ w_log-kunnr ‘创建/修改成功‘ INTO l_message.
        w_log-mesg l_message.
        APPEND w_log TO t_log.
        COMMIT WORK.
      ELSE.
        ROLLBACK WORK.
      ENDIF.
    ENDIF.
  ENDDO.
 LOOP AT lt_msg INTO lwa_msg.
   CLEAR l_message.
   l_message lwa_msg-message.
*
**    WRITE: lwa_cust-header-OBJECT_INSTANCE-kunnr,lwa_msg-type,l_message.
   IF lwa_msg-type ‘E‘ OR lwa_msg-type ‘A‘.
     CLEAR w_log.
     w_log-kunnr lwa_cust-header-object_instance-kunnr.
     w_log-type lwa_msg-type.
     w_log-mesg l_message.
     APPEND w_log TO t_log.
     lv_flg ‘X‘.
   ENDIF.
   CLEAR:lwa_msg.
 ENDLOOP.
 IF lv_flg IS INITIAL.
   CLEAR w_log.
   CLEAR l_message.
   w_log-kunnr lwa_cust-header-object_instance-kunnr.
   w_log-type ‘S‘.
   CONCATENATE ‘客户‘ w_log-kunnr ‘创建/修改成功‘ INTO l_message.
   w_log-mesg l_message.
   APPEND w_log TO t_log.
   COMMIT WORK.
 ELSE.
   ROLLBACK WORK.
 ENDIF.
 WAIT UP TO ‘0.5‘ SECONDS.
ENDFORM                   FRM_WRITE_DATA_SAP
*&---------------------------------------------------------------------*
*&      Form  frm_fill_partner
*&---------------------------------------------------------------------*
      text
*----------------------------------------------------------------------*
     -->FU_PARVW   text
*----------------------------------------------------------------------*
FORM frm_fill_partner USING fu_parvw fu_kunnr fu_data TYPE ty_knvp.

  DATA:l_parza TYPE knvp-parza.
  CLEAR l_parza.
  CLEAR lwa_functions.
  lwa_functions-task ‘M‘.
  lwa_functions-data_key-parvw ‘M‘.
  lwa_functions-data_key-parvw fu_parvw.


 IF NOT fu_kunnr IS INITIAL.
   SELECT SINGLE MAX( parza )
 FROM knvp
 INTO l_parza
 WHERE kunnr fu_data-kunnr
 AND   vkorg fu_data-vkorg
 AND   vtweg fu_data-vtweg
 AND   spart fu_data-spart
 AND   parvw fu_parvw.
   l_parza l_parza 1.
   lwa_functions-data_key-parza ‘000‘.
    lwa_functions-data-partner fu_kunnr.
    lwa_functions-datax-partner ‘X‘.
 ELSE.
   lwa_functions-data-partner ‘AY9‘.
   lwa_functions-data-defpa ‘X‘.
   lwa_functions-datax-defpa ‘X‘.
   lwa_functions-datax-partner ‘X‘.
 ENDIF.
  APPEND lwa_functions TO lt_functions.


ENDFORM                   "frm_fill_partner
*&---------------------------------------------------------------------*
*&      Form  FRM_INSERT_PARTNER
*&---------------------------------------------------------------------*
      text
*----------------------------------------------------------------------*
 -->  p1        text
 <--  p2        text
*----------------------------------------------------------------------*
FORM frm_insert_partner .
  CALL METHOD cmd_ei_api=>maintain_bapi
    EXPORTING
      iv_test_run              p_test
      iv_collect_messages      ‘X‘
      is_master_data           ls_main
    IMPORTING
      es_master_data_correct   ls_main1
      es_message_correct       ls_mesg1
      es_master_data_defective ls_main2
      es_message_defective     ls_mesg.
  lt_msg ls_mesg-messages.
  LOOP AT lt_msg INTO lwa_msg.
    WRITElwa_msg-type,lwa_msg-message.
    IF lwa_msg-type ‘E‘ OR lwa_msg-type ‘A‘.
      lv_flg ‘X‘.
    ENDIF.
  ENDLOOP.
  IF lv_flg IS INITIAL.

    COMMIT WORK.
  ELSE.
    ROLLBACK WORK.
  ENDIF.

ENDFORM                   FRM_INSERT_PARTNER
*&---------------------------------------------------------------------*
*&      Form  FRM_WRITE_LOG
*&---------------------------------------------------------------------*
      text
*----------------------------------------------------------------------*
 -->  p1        text
 <--  p2        text
*----------------------------------------------------------------------*
FORM frm_write_log .
  LOOP AT t_log INTO w_log.
    IF w_log-type ‘E‘.
      WRITE:w_log-kunnr UNDER w_log-kunnr COLOR COL_NEGATIVE,
              w_log-type UNDER w_log-type COLOR COL_NEGATIVE,
             w_log-mesg UNDER w_log-mesg COLOR COL_NEGATIVE.
    ELSEIF w_log-type ‘A‘.
      WRITE:w_log-kunnr UNDER w_log-kunnr COLOR COL_NEGATIVE,
            w_log-type UNDER w_log-type COLOR COL_NEGATIVE,
           w_log-mesg UNDER w_log-mesg COLOR COL_NEGATIVE.
    ELSEIF w_log-type ‘W‘.
      WRITE:w_log-kunnr UNDER w_log-kunnr COLOR COL_TOTAL,
             w_log-type UNDER w_log-type COLOR COL_TOTAL,
            w_log-mesg UNDER w_log-mesg COLOR COL_TOTAL.
    ELSEIF w_log-type ‘S‘.
      WRITE:w_log-kunnr UNDER w_log-kunnr COLOR COL_POSITIVE ,
            w_log-type UNDER w_log-type COLOR COL_POSITIVE ,
           w_log-mesg UNDER w_log-mesg COLOR COL_POSITIVE .
    ELSE.
     WRITE:/ w_log-kunnr UNDER w_log-kunnr COLOR COL_HEADING ,
           w_log-type UNDER w_log-type COLOR COL_HEADING ,
          w_log-mesg UNDER w_log-mesg COLOR COL_HEADING .
    ENDIF.
    CLEAR w_log.
  ENDLOOP.
ENDFORM                   FRM_WRITE_LOG
*&---------------------------------------------------------------------*
*&      Form  FRM_SHOR_MESSAGE
*&---------------------------------------------------------------------*
      text
*----------------------------------------------------------------------*
 -->  p1        text
 <--  p2        text
*----------------------------------------------------------------------*
FORM frm_shor_message .
  PERFORM frm_layout_build."设置 layout
  PERFORM frm_fieldcat_build."填充 fieldcat
  PERFORM frm_display_data."显示 ALV
ENDFORM                   FRM_SHOR_MESSAGE
*&---------------------------------------------------------------------*
*&      Form  FRM_LAYOUT_BUILD
*&---------------------------------------------------------------------*
      text
*----------------------------------------------------------------------*
 -->  p1        text
 <--  p2        text
*----------------------------------------------------------------------*
FORM frm_layout_build .
  CLEARg_title,g_repid,g_layout.

  g_title ‘日志‘.
  g_repid sy-repid.

  g_layout-info_fieldname ‘COLOR‘.

  g_layout-colwidth_optimize ‘X‘."最优化列宽度
  g_layout-zebra ‘X‘."可选行颜色,如果设置了,出现了间隔色带
 g_layout-no_vline ‘X‘."不显示列间竖线

  g_layout-f2code ‘&ETA‘."双击弹出显示详细信息的窗口
  g_layout-detail_popup ‘X‘."是否弹出详细信息窗口
  g_layout-detail_initial_lines ‘X‘."设置弹出窗口的?
  g_layout-detail_titlebar ‘详细显示‘."设置弹出窗口的标题栏
ENDFORM                   FRM_LAYOUT_BUILD
*&---------------------------------------------------------------------*
*&      Form  FRM_FIELDCAT_BUILD
*&---------------------------------------------------------------------*
      text
*----------------------------------------------------------------------*
 -->  p1        text
 <--  p2        text
*----------------------------------------------------------------------*
FORM frm_fieldcat_build .
  CLEAR it_fieldcat[].

  DEFINE mc_fieldcatt_build.
    clear wa_fieldcat.
    wa_fieldcat-col_pos &1.
    wa_fieldcat-fieldname &2.
   wa_fieldcat-seltext_s &3.
    wa_fieldcat-seltext_m  &3.
    wa_fieldcat-seltext_l  &3.
    append wa_fieldcat to it_fieldcat.
  END-OF-DEFINITION.

  mc_fieldcatt_build:
    ‘1‘ ‘ROW‘ ‘序号‘,
    ‘2‘ ‘KUNNR‘ ‘客户‘,
    ‘3‘ ‘TYPE‘ ‘信息类型‘,
    ‘4‘ ‘MESG‘ ‘信息文本‘.
ENDFORM                   FRM_FIELDCAT_BUILD
*&---------------------------------------------------------------------*
*&      Form  FRM_DISPLAY_DATA
*&---------------------------------------------------------------------*
      text
*----------------------------------------------------------------------*
 -->  p1        text
 <--  p2        text
*----------------------------------------------------------------------*
FORM frm_display_data .
  CALL FUNCTION ‘REUSE_ALV_GRID_DISPLAY‘
    EXPORTING
    I_INTERFACE_CHECK                 ‘ 
    I_BYPASSING_BUFFER                ‘ 
    I_BUFFER_ACTIVE                   ‘ 
      i_callback_program                g_repid
    I_CALLBACK_PF_STATUS_SET          ‘SET_PF_STATUS‘
    I_CALLBACK_USER_COMMAND           ‘USER_COMMEND‘
    I_CALLBACK_TOP_OF_PAGE            ‘ 
    I_CALLBACK_HTML_TOP_OF_PAGE       ‘ 
    I_CALLBACK_HTML_END_OF_LIST       ‘ 
    I_STRUCTURE_NAME                  =
    I_BACKGROUND_ID                   ‘ 
      i_grid_title                      g_title
    I_GRID_SETTINGS                   =
      is_layout                         g_layout
      it_fieldcat                       it_fieldcat[]
    IT_EXCLUDING                      =
    IT_SPECIAL_GROUPS                 =
    IT_SORT                           =
    IT_FILTER                         =
    IS_SEL_HIDE                       =
    I_DEFAULT                         ‘X‘
      i_save                            ‘A‘"可以保存所有变式
    IS_VARIANT                        =
    IT_EVENTS                         =
    IT_EVENT_EXIT                     =
    IS_PRINT                          =
    IS_REPREP_ID                      =
    I_SCREEN_START_COLUMN             0
    I_SCREEN_START_LINE               0
    I_SCREEN_END_COLUMN               0
    I_SCREEN_END_LINE                 0
    I_HTML_HEIGHT_TOP                 0
    I_HTML_HEIGHT_END                 0
    IT_ALV_GRAPHICS                   =
    IT_HYPERLINK                      =
    IT_ADD_FIELDCAT                   =
    IT_EXCEPT_QINFO                   =
    IR_SALV_FULLSCREEN_ADAPTER        =
  IMPORTING
    E_EXIT_CAUSED_BY_CALLER           =
    ES_EXIT_CAUSED_BY_USER            =
    TABLES
      t_outtab                          t_log[]
    EXCEPTIONS
     program_error                     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.
ENDFORM                   FRM_DISPLAY_DATA


*&---------------------------------------------------------------------*
*&      Form  frm_fill_partner01
*&---------------------------------------------------------------------*
      text
*----------------------------------------------------------------------*
     -->FU_PARVW   text
     -->FU_KUNNR   text
     -->FU_DATA    text
*----------------------------------------------------------------------*
FORM frm_fill_partner01 USING fu_parvw fu_kunnr fu_data TYPE ty_knvp.
  IF fu_kunnr IS NOT INITIAL.
    DATA:l_parza TYPE knvp-parza.
    CLEAR l_parza.
    CLEAR lwa_functions.
    lwa_functions-task ‘M‘.
    lwa_functions-data_key-parvw ‘M‘.
    lwa_functions-data_key-parvw fu_parvw.


    IF NOT fu_kunnr IS INITIAL.
      SELECT SINGLE MAXparza )
    FROM knvp
    INTO l_parza
    WHERE kunnr fu_data-kunnr
    AND   vkorg fu_data-vkorg
    AND   vtweg fu_data-vtweg
    AND   spart fu_data-spart
    AND   parvw fu_parvw.
      l_parza l_parza 1.
      lwa_functions-data_key-parza l_parza.
          CALL FUNCTION ‘CONVERSION_EXIT_ALPHA_INPUT‘
      EXPORTING
        input  fu_kunnr
      IMPORTING
        output lwa_functions-data-partner.
     lwa_functions-data-partner fu_kunnr.
      lwa_functions-datax-partner ‘X‘.
    ELSE.
   lwa_functions-data-partner ‘AY9‘.
      lwa_functions-data-defpa ‘X‘.
      lwa_functions-datax-defpa ‘X‘.
      lwa_functions-datax-partner ‘X‘.
    ENDIF.
    APPEND lwa_functions TO lt_functions.
  ENDIF.

ENDFORM                   "frm_fill_partner01