供应商批量导入


REPORT zmmr084.
************************************************************************
* 功能/技术文档:DANZ-MM-84-批导-供应商批量导入-V01
* 描述:
*
* 变更记录
*
* 修改日期  开发人员  请求号 描述
*----------------------------------------------------------------------*
************************************************************************
* Includes
************************************************************************
INCLUDE zmmr084_top.
INCLUDE zmmr084_sel.
INCLUDE zmmr084_frm.
************************************************************************
* Initialization
************************************************************************
INITIALIZATION.
  functxt-icon_id   = icon_export.
  functxt-quickinfo = '模版下载'.
  functxt-icon_text = '模版下载'.
  sscrfields-functxt_01 = functxt.
************************************************************************
* at selection screen
************************************************************************
AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_flname." SEACH HELP.
  PERFORM frm_get_file USING p_flname.

AT SELECTION-SCREEN.
  IF sscrfields-ucomm = 'FC01'.
    PERFORM frm_get_model USING 'ZMMR084.XLS'.
  ENDIF.
************************************************************************
* Start of Selection
************************************************************************
START-OF-SELECTION.
  IF p_flname IS NOT INITIAL.
    IF p_vendor = 'X'.
      g_flag = 1.
      PERFORM frm_alv_show ."ALV结果展示
*      PERFORM frm_create_vendor."创建供应商
    ELSEIF p_bukrs = 'X'.
      g_flag = 2.
      PERFORM frm_alv_show ."ALV结果展示
*      PERFORM frm_add_bukrs."扩充公司代码
    ENDIF.
  ENDIF.
*&---------------------------------------------------------------------*
*&  包含                ZMMR084_TOP
*&---------------------------------------------------------------------*
************************************************************************
* tables
************************************************************************
TABLES:sscrfields.
************************************************************************
* TYPES
************************************************************************
TYPE-POOLS: slis.
TYPES:BEGIN OF ty_basic_lf,"供应商创建
        "一般数据
        lifnr    LIKE lfa1-lifnr,
        partn    LIKE but000-partner,
        ktokk    LIKE lfa1-ktokk,
        name1    LIKE lfa1-name1,
        sortl    LIKE lfa1-sortl,
        stras    LIKE lfa1-stras,
        ort01    LIKE lfa1-ort01,
        land1    LIKE lfa1-land1,
        spras    LIKE lfa1-spras,
        telf1    LIKE lfa1-telf1,
        telfx    LIKE lfa1-telfx,
        telbx    LIKE lfa1-telbx,
        taxtype  LIKE dfkkbptaxnum-taxtype,
        taxnumxl LIKE dfkkbptaxnum-taxnumxl,
        augrp    LIKE but000-augrp, "权限组
        "公司代码
        bukrs    LIKE lfb1-bukrs,
        kunnr    LIKE lfa1-kunnr,
        akont    LIKE lfb1-akont,
        ztermb   LIKE lfb1-zterm,
        bankl    LIKE lfbk-bankl,
        bankn    LIKE lfbk-bankn,
        reprf    LIKE lfb1-reprf,
        "采购组织
        ekorg    LIKE lfm1-ekorg,
        waers    LIKE lfm1-waers,
        ztermc   LIKE lfm1-zterm,
        webre    LIKE lfm1-webre,
      END OF ty_basic_lf.
TYPES:BEGIN OF ty_basic_bk,"公司代码扩充
        "一般数据
        lifnr LIKE lfa1-lifnr,
        "公司代码
        bukrs LIKE lfb1-bukrs,
        kunnr LIKE lfa1-kunnr,
        akont LIKE lfb1-akont,
        zterm LIKE lfb1-zterm,
        bankl LIKE lfbk-bankl,
        bankn LIKE lfbk-bankn,
        reprf LIKE lfb1-reprf,
      END OF ty_basic_bk.
TYPES:BEGIN OF ty_bankdetail,"银行数据
        lifnr TYPE lifnr,
        banks TYPE banks,
        bankl TYPE bankk,
        bankn TYPE bankn,
      END OF ty_bankdetail.
TYPES:BEGIN OF ty_lfb1,"公司代码
        lifnr TYPE lfb1-lifnr,
        bukrs TYPE lfb1-bukrs,
        akont TYPE lfb1-akont,
        zterm TYPE lfb1-zterm,
        zuawa TYPE lfb1-zuawa,
      END OF ty_lfb1.
* ALV输出
TYPES:BEGIN OF ty_vendor,"创建供应商
        sel         TYPE c,
        lifnr       LIKE lfa1-lifnr,
        partn       LIKE but000-partner,
        ktokk       LIKE lfa1-ktokk,
        name1       LIKE lfa1-name1,
        sortl       LIKE lfa1-sortl,
        stras       LIKE lfa1-stras,
        ort01       LIKE lfa1-ort01,
        land1       LIKE lfa1-land1,
        spras       LIKE lfa1-spras,
        telf1       LIKE lfa1-telf1,
        telfx       LIKE lfa1-telfx,
        telbx       LIKE lfa1-telbx,
        taxtype     LIKE dfkkbptaxnum-taxtype,
        taxnumxl    LIKE dfkkbptaxnum-taxnumxl,
        augrp       LIKE but000-augrp, "权限组
        "公司代码
        bukrs       LIKE lfb1-bukrs,
        kunnr       LIKE lfa1-kunnr,
        akont       LIKE lfb1-akont,
        ztermb      LIKE lfb1-zterm,
        bankl       LIKE lfbk-bankl,
        bankn       LIKE lfbk-bankn,
        reprf       LIKE lfb1-reprf,
        "采购组织
        ekorg       LIKE lfm1-ekorg,
        waers       LIKE lfm1-waers,
        ztermc      LIKE lfm1-zterm,
        webre       LIKE lfm1-webre,
*&----------------附加数据
        num(3)      TYPE c,   "当前行数
        type(1)     TYPE c, "执行结果
        message(60) TYPE c,    "消息
        light(4)    TYPE c,    "执行情况(灯)
      END OF ty_vendor.
TYPES:BEGIN OF ty_bukrs,"扩充公司代码
        sel         TYPE c,
        "一般数据
        lifnr       LIKE lfa1-lifnr,
        "公司代码
        bukrs       LIKE lfb1-bukrs,
        kunnr       LIKE lfa1-kunnr,
        akont       LIKE lfb1-akont,
        zterm       LIKE lfb1-zterm,
        bankl       LIKE lfbk-bankl,
        bankn       LIKE lfbk-bankn,
        reprf       LIKE lfb1-reprf,
*&----------------附加数据
        num(3)      TYPE c,   "当前行数
        type(1)     TYPE c, "执行结果
        message(60) TYPE c,    "消息
        light(4)    TYPE c,    "执行情况(灯)
      END OF ty_bukrs.
************************************************************************
* internal tables
************************************************************************
DATA:gt_data TYPE STANDARD TABLE OF alsmex_tabline WITH HEADER LINE."保存EXCEL数据的内表
FIELD-SYMBOLS: <gs_itab> TYPE alsmex_tabline."同上,结构
DATA:gt_basic_lf TYPE TABLE OF ty_basic_lf, "保存EXCEL导入的原始数据,供应商创建
     gs_basic_lf TYPE ty_basic_lf.
DATA:gt_basic_bk TYPE TABLE OF ty_basic_bk, "保存EXCEL导入的原始数据,公司代码扩充
     gs_basic_bk TYPE ty_basic_bk.
DATA functxt TYPE smp_dyntxt."下载模板按钮要用到的结构
* ALV相关的内表和结构
DATA:gs_fieldcat TYPE slis_fieldcat_alv,
     gt_fieldcat TYPE slis_t_fieldcat_alv,
     g_layout    TYPE slis_layout_alv.
DATA:gt_alv_vendor TYPE TABLE OF ty_vendor,
     gs_alv_vendor TYPE ty_vendor.
DATA:gt_alv_bukrs TYPE TABLE OF ty_bukrs,
     gs_alv_bukrs TYPE ty_bukrs.
************************************************************************
* internal data fields
************************************************************************
DATA g_flag TYPE i.
DATA g_msg TYPE c VALUE IS INITIAL.
DATA g_mode TYPE c VALUE IS INITIAL."业务逻辑判断
DATA g_num TYPE i VALUE 0.
DATA:gs_value TYPE string, "字段格式转换时用到的变量
     gs_code  TYPE string.
CONSTANTS:yes TYPE flag VALUE 'X',
          no  TYPE flag VALUE space.
CONSTANTS:c_insr TYPE flag VALUE 'I',
          c_edit TYPE flag VALUE 'U',
          c_del  TYPE flag VALUE 'D'.
* ALV常量
CONSTANTS c_cns_pf_status    TYPE slis_formname VALUE 'ALV_PF_STATUS'.   "  ALV自定义按钮
CONSTANTS c_cns_user_command TYPE slis_formname VALUE 'ALV_USER_COMMAND'."  ALV自定义按钮响应事件

 

*&---------------------------------------------------------------------*
*&  包含                ZMMR084_SEL
*&---------------------------------------------------------------------*
************************************************************************
* Parameters and Selection Options
************************************************************************
SELECTION-SCREEN BEGIN OF BLOCK blk1 WITH FRAME TITLE TEXT-001.
PARAMETERS: p_flname TYPE rlgrap-filename.
SELECTION-SCREEN END OF BLOCK blk1.
SELECTION-SCREEN BEGIN OF BLOCK blk2 WITH FRAME TITLE TEXT-002.
PARAMETERS p_vendor RADIOBUTTON GROUP rad1.
PARAMETERS p_bukrs RADIOBUTTON GROUP rad1.
SELECTION-SCREEN END OF BLOCK blk2.
SELECTION-SCREEN:FUNCTION KEY 1.

 

*&---------------------------------------------------------------------*
*&  包含                ZMMR084_FRM
*&---------------------------------------------------------------------*
*&---------------------------------------------------------------------*
*&      Form  FRM_GET_FILE
*&---------------------------------------------------------------------*
*       选择要上传的模板文件
*----------------------------------------------------------------------*
*      -->P_P_FLNAME  text
*----------------------------------------------------------------------*
FORM frm_get_file  USING    p_flname.
  CALL FUNCTION 'WS_FILENAME_GET'
    EXPORTING
      mask             = ',EXCEL FILE,*.XLS;*.XLSX;'
      mode             = 'O' "S为保存,O为打开
    IMPORTING
      filename         = p_flname
    EXCEPTIONS
      inv_winsys       = 1
      no_batch         = 2
      selection_cancel = 3
      selection_error  = 4
      OTHERS           = 5.
  IF sy-subrc <> 0.
    EXIT.
    MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
            WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
  ENDIF.
ENDFORM.
*&---------------------------------------------------------------------*
*&      Form  FRM_CREATE_VENDOR
*&---------------------------------------------------------------------*
*       创建供应商
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM frm_create_vendor .
*----------------------------供应商创建-函数参数----------------------------------------*
* 最外层参数
  DATA:lt_extern TYPE cvis_ei_extern_t, "输入参数
       ls_extern TYPE cvis_ei_extern.
  DATA:lt_return TYPE bapiretm, "返回参数
       ls_return TYPE bapireti,
       lt_omsg   TYPE bapiretct,
       ls_omsg   TYPE bapiretc.
* 伙伴
  DATA ls_partner TYPE bus_ei_extern.
  DATA:lt_addr TYPE bus_ei_bupa_address_t, "地址
       ls_addr TYPE bus_ei_bupa_address.
  DATA:lt_smtp TYPE bus_ei_bupa_smtp_t, "电子邮件
       ls_smtp TYPE bus_ei_bupa_smtp.
  DATA:lt_phone TYPE bus_ei_bupa_telephone_t, "电话
       ls_phone TYPE bus_ei_bupa_telephone.
  DATA:lt_fax TYPE bus_ei_bupa_fax_t, "传真
       ls_fax TYPE bus_ei_bupa_fax.
* 供应商
  DATA ls_vendor TYPE vmds_ei_extern.
  DATA:lt_company TYPE vmds_ei_company_t, "公司视图
       ls_company TYPE vmds_ei_company.
  DATA:lt_bankdetail TYPE cvis_ei_bankdetail_t, "银行信息
       ls_bankdetail TYPE cvis_ei_cvi_bankdetail.
  DATA:lt_purchasing TYPE vmds_ei_purchasing_t, "采购视图
       ls_purchasing TYPE vmds_ei_purchasing.
  DATA:lt_purchasing_function TYPE vmds_ei_functions_t, "合作伙伴功能
       ls_purchasing_function TYPE vmds_ei_functions.
* 其它字段
  "取供应商编号的类的方法的参数 cvi_mapper
  DATA: lt_partnerguid_list TYPE bu_partner_guid_t,
        ls_partnerguid_list LIKE LINE OF lt_partnerguid_list,
        lt_vendor_list      TYPE cvis_vend_link_t,
        ls_vendor_list      LIKE LINE OF lt_vendor_list.
  DATA l_bpcat TYPE c VALUE '2'."伙伴类型
  DATA l_bprole1 TYPE c LENGTH 6 VALUE 'FLVN00'."伙伴角色
  DATA l_bprolecat1 TYPE c LENGTH 6 VALUE 'FLVN00'."伙伴角色类型
  DATA l_bprole2 TYPE c LENGTH 6 VALUE 'FLVN01'."伙伴角色
  DATA l_bprolecat2 TYPE c LENGTH 6 VALUE 'FLVN01'."伙伴角色类型
  DATA l_bprole3 TYPE c LENGTH 6 VALUE 'ZLVN00'."伙伴角色
  DATA l_bprolecat3 TYPE c LENGTH 6 VALUE 'FLVN00'."伙伴角色类型
  DATA l_bprole4 TYPE c LENGTH 6 VALUE 'ZLVN01'."伙伴角色
  DATA l_bprolecat4 TYPE c LENGTH 6 VALUE 'FLVN01'."伙伴角色类型
  DATA l_parvw TYPE parvw."用来保存通过函数转换过后的合作伙伴功能字段
  CONSTANTS c_parvw1 TYPE c LENGTH 2 VALUE 'OA'."合作伙伴功能
  CONSTANTS c_parvw2 TYPE c LENGTH 2 VALUE 'VN'."合作伙伴功能
  CONSTANTS c_parvw3 TYPE c LENGTH 2 VALUE 'PI'."合作伙伴功能
* 异常
  DATA l_uuid_error TYPE REF TO cx_uuid_error."调用UUID的相关创建类时可能出现的异常

  g_mode = 'I'.
  IF gs_basic_lf-lifnr IS INITIAL."EXCEL中没有传入供应商编号的情况

    "新增或更新业务伙伴的标识
    ls_partner-header-object_task              = g_mode.
    "通过系统类方法生成一个16位的GUID给业务伙伴
    TRY .
        ls_partner-header-object_instance-bpartnerguid
                  = cl_uuid_factory=>create_system_uuid( )->create_uuid_x16( ).
      CATCH cx_uuid_error .
    ENDTRY.
    "业务伙伴类别
    ls_partner-central_data-common-data-bp_control-category = l_bpcat.
    "简称(搜索项)
    ls_partner-central_data-common-data-bp_centraldata-searchterm1 = gs_basic_lf-sortl.
    ls_partner-central_data-common-data-bp_centraldata-authorizationgroup = gs_basic_lf-augrp.
    "供应商名称(中文)
    ls_partner-central_data-common-data-bp_organization-name1 = gs_basic_lf-name1.
    "为业务伙伴添加角色
    ls_partner-central_data-role-roles[] = VALUE #(
                                                       ( task = g_mode
                                                         data_key = l_bprole1
                                                         data-rolecategory = l_bprolecat1
                                                         )
                                                       ( task = g_mode
                                                         data_key = l_bprole2
                                                         data-rolecategory = l_bprolecat2
                                                         ) ).
    "
    IF gs_basic_lf-taxtype IS NOT INITIAL AND
       gs_basic_lf-taxnumxl IS NOT INITIAL.
      ls_partner-central_data-taxnumber-taxnumbers[] = VALUE #(
                                                         ( task = g_mode
                                                           data_key-taxtype = gs_basic_lf-taxtype
                                                           data_key-taxnumber = gs_basic_lf-taxnumxl
                                                           data_key-taxnumxl = gs_basic_lf-taxnumxl
                                                           ) ).
    ENDIF .
    "银行代码
    IF gs_basic_lf-bankl IS NOT INITIAL OR
       gs_basic_lf-bankn IS NOT INITIAL.
      ls_partner-central_data-bankdetail-bankdetails[] = VALUE #(
                                                                  ( task = g_mode
                                                                   data-bank_ctry = gs_basic_lf-land1
                                                                   data-bank_key = gs_basic_lf-bankl
                                                                   data-bank_acct = gs_basic_lf-bankn
                                                                   )
                                                                    ).
    ENDIF.
* 电子邮件
    ls_smtp-contact-data-e_mail = gs_basic_lf-telbx.
    APPEND ls_smtp TO lt_smtp.
    MOVE-CORRESPONDING lt_smtp TO ls_addr-data-communication-smtp-smtp.
* 传真
    ls_fax-contact-data-fax = gs_basic_lf-telfx.
    APPEND ls_fax TO lt_fax.
    MOVE-CORRESPONDING lt_fax TO ls_addr-data-communication-fax-fax.
* 电话
    ls_phone-contact-data-telephone = gs_basic_lf-telf1.
    APPEND ls_phone TO lt_phone.
    MOVE-CORRESPONDING lt_phone TO ls_addr-data-communication-phone-phone.
* 其它地址信息
    "国家
    ls_addr-data-postal-data-country = gs_basic_lf-land1.
    "语言
    ls_addr-data-postal-data-langu = gs_basic_lf-spras.
    "城市
    ls_addr-data-postal-data-city = gs_basic_lf-ort01.
    "地址
    ls_addr-data-postal-data-street = gs_basic_lf-stras.
    "邮政编码
    ls_addr-data-postal-data-postl_cod1 = '000000'.
    APPEND ls_addr TO lt_addr.
    MOVE-CORRESPONDING lt_addr TO ls_partner-central_data-address-addresses.

    MOVE-CORRESPONDING ls_partner TO ls_extern-partner.

    "供应商编号,标识为创建
    ls_vendor-header-object_task = g_mode.
    "外部界面:中心数据
    ls_vendor-central_data-central-data-kunnr = gs_basic_lf-kunnr."客户
    ls_vendor-central_data-central-data-stenr = gs_basic_lf-taxnumxl."税号
* 公司信息
    ls_company-task = g_mode.
    ls_company-data_key-bukrs = gs_basic_lf-bukrs."公司代码
    "格式化akont输入,在前面加够0.
    PERFORM frm_format_alpha_input USING gs_basic_lf-akont.
    ls_company-data-akont = gs_basic_lf-akont."统驭科目
    ls_company-data-zterm = gs_basic_lf-ztermb."付款条件代码
    ls_company-data-reprf = gs_basic_lf-reprf."双重发票检查
    APPEND ls_company TO lt_company.
    ls_vendor-company_data-company = lt_company.
* 银行信息
*      ls_bankdetail-task = g_mode.
*      ls_bankdetail-data_key-banks = gs_basic_lf-land1. "国家
*      ls_bankdetail-data_key-bankl = gs_basic_lf-bankl. "银行代码
*      ls_bankdetail-data_key-bankn = gs_basic_lf-bankn. "银行帐户
*      APPEND ls_bankdetail TO lt_bankdetail.
*      ls_vendor-central_data-bankdetail-bankdetails = lt_bankdetail.
* 采购组织
    ls_purchasing-task = g_mode.
    ls_purchasing-data_key-ekorg = gs_basic_lf-ekorg."采购组织
    ls_purchasing-data-waers = gs_basic_lf-waers."订单货币
    ls_purchasing-data-zterm = gs_basic_lf-ztermc."付款条件
    ls_purchasing-data-webre = gs_basic_lf-webre."基于收货的发票校验

* 合作伙伴功能
    CALL FUNCTION 'CONVERSION_EXIT_PARVW_INPUT'
      EXPORTING
        input  = c_parvw1
      IMPORTING
        output = l_parvw.
    ls_purchasing_function-task = g_mode.
    ls_purchasing_function-data_key-parvw = l_parvw.
    APPEND ls_purchasing_function TO lt_purchasing_function.
    CLEAR l_parvw.

    CALL FUNCTION 'CONVERSION_EXIT_PARVW_INPUT'
      EXPORTING
        input  = c_parvw2
      IMPORTING
        output = l_parvw.
    ls_purchasing_function-task = g_mode.
    ls_purchasing_function-data_key-parvw = l_parvw.
    APPEND ls_purchasing_function TO lt_purchasing_function.
    CLEAR l_parvw.

    CALL FUNCTION 'CONVERSION_EXIT_PARVW_INPUT'
      EXPORTING
        input  = c_parvw3
      IMPORTING
        output = l_parvw.
    ls_purchasing_function-task = g_mode.
    ls_purchasing_function-data_key-parvw = l_parvw.
    APPEND ls_purchasing_function TO lt_purchasing_function.

    MOVE-CORRESPONDING lt_purchasing_function TO ls_purchasing-functions-functions.
    CLEAR lt_purchasing_function.
    APPEND ls_purchasing TO lt_purchasing.
    ls_vendor-purchasing_data-purchasing = lt_purchasing.
    MOVE-CORRESPONDING ls_vendor TO ls_extern-vendor.
    APPEND ls_extern TO lt_extern.

    CALL FUNCTION 'CVI_EI_INBOUND_MAIN'
      EXPORTING
        i_data   = lt_extern
      IMPORTING
        e_return = lt_return.
    READ TABLE lt_return INTO ls_return INDEX 1.
    READ TABLE ls_return-object_msg WITH KEY type = 'E' TRANSPORTING NO FIELDS.
    IF sy-subrc = 0.
      CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'.
      g_msg = 'E'.
    ELSE.
      READ TABLE ls_return-object_msg WITH KEY type = 'A' TRANSPORTING NO FIELDS.
      IF sy-subrc = 0.
        CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'.
        g_msg = 'E'.
      ELSE.
        CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
          EXPORTING
            wait = 'X'.
        g_msg = 'S'.
      ENDIF.
    ENDIF.

* 根据伙伴GUID取出供应商编号
    ls_partnerguid_list = ls_partner-header-object_instance-bpartnerguid.
    APPEND ls_partnerguid_list TO lt_partnerguid_list.
    lt_vendor_list = cvi_mapper=>get_instance( )->get_assigned_vendors_for_bps(
                                              i_partner_guids = lt_partnerguid_list ).
    IF lt_vendor_list IS NOT INITIAL.
      READ TABLE lt_vendor_list INTO ls_vendor_list INDEX 1 .
    ENDIF.

    "附加数据
    gs_alv_vendor-lifnr = ls_vendor_list-vendor.
    gs_alv_vendor-num = g_num.
    gs_alv_vendor-type = g_msg.
    IF g_msg = 'S'.
      gs_alv_vendor-light = '@5B@'.
      CONCATENATE '供应商'gs_basic_lf-name1'创建成功' INTO gs_alv_vendor-message.
    ELSEIF g_msg = 'E'.
      gs_alv_vendor-light = '@5C@'.
      READ TABLE ls_return-object_msg INTO ls_omsg WITH KEY type = 'E'.
      IF sy-subrc <> 0.
        READ TABLE ls_return-object_msg INTO ls_omsg WITH KEY type = 'A'.
      ENDIF.
      CONCATENATE '供应商'gs_basic_lf-name1'创建失败,原因是:'ls_omsg-message INTO gs_alv_vendor-message.
    ENDIF.
    MODIFY gt_alv_vendor FROM gs_alv_vendor.

    CLEAR:ls_partner,ls_smtp,ls_fax,ls_phone,ls_addr,ls_vendor,ls_company,ls_bankdetail,
        ls_purchasing,ls_purchasing_function,ls_extern,ls_return,ls_partnerguid_list,
        ls_vendor_list.
    REFRESH:lt_smtp,lt_fax,lt_phone,lt_addr,lt_company,lt_bankdetail,lt_purchasing,lt_purchasing_function,
            lt_extern,lt_return,lt_partnerguid_list,lt_vendor_list.
    CLEAR:l_parvw.

  ELSE."EXCEL中传入了供应商编号的情况

    "新增或更新业务伙伴的标识
    ls_partner-header-object_task              = g_mode.
    PERFORM frm_format_alpha_input USING gs_basic_lf-lifnr.
    ls_partner-header-object_instance-bpartner = gs_basic_lf-partn.
    "通过系统类方法生成一个16位的GUID给业务伙伴
    TRY .
        ls_partner-header-object_instance-bpartnerguid
                  = cl_uuid_factory=>create_system_uuid( )->create_uuid_x16( ).
      CATCH cx_uuid_error .
    ENDTRY.
    "业务伙伴类别
    ls_partner-central_data-common-data-bp_control-category = l_bpcat.
    ls_partner-central_data-common-data-bp_control-grouping = gs_basic_lf-ktokk.
    "简称(搜索项)
    ls_partner-central_data-common-data-bp_centraldata-searchterm1 = gs_basic_lf-sortl.
    "供应商名称(中文)
    ls_partner-central_data-common-data-bp_organization-name1 = gs_basic_lf-name1.
    "为业务伙伴添加角色
    ls_partner-central_data-role-roles[] = VALUE #(
                                                       ( task = g_mode
                                                         data_key = l_bprole1
                                                         data-rolecategory = l_bprolecat1
                                                         )
                                                       ( task = g_mode
                                                         data_key = l_bprole2
                                                         data-rolecategory = l_bprolecat2
                                                         ) ).
*        IF gs_basic_lf-bankl IS NOT INITIAL OR
*           gs_basic_lf-bankn IS NOT INITIAL.
*          "银行代码
*          ls_partner-central_data-bankdetail-bankdetails[] = VALUE #(
*                                                                      ( task = g_mode
*                                                                       data-bank_ctry = gs_basic_lf-land1
*                                                                       data-bank_key = gs_basic_lf-bankl
*                                                                       data-bank_acct = gs_basic_lf-bankn
*                                                                       )
*                                                                        ).
*        ENDIF.
* 电子邮件
    ls_smtp-contact-data-e_mail = gs_basic_lf-telbx.
    APPEND ls_smtp TO lt_smtp.
    MOVE-CORRESPONDING lt_smtp TO ls_addr-data-communication-smtp-smtp.
* 传真
    ls_fax-contact-data-fax = gs_basic_lf-telfx.
    APPEND ls_fax TO lt_fax.
    MOVE-CORRESPONDING lt_fax TO ls_addr-data-communication-fax-fax.
* 电话
    ls_phone-contact-data-telephone = gs_basic_lf-telf1.
    APPEND ls_phone TO lt_phone.
    MOVE-CORRESPONDING lt_phone TO ls_addr-data-communication-phone-phone.
* 其它地址信息
    "国家
    ls_addr-data-postal-data-country = gs_basic_lf-land1.
    "语言
    ls_addr-data-postal-data-langu = gs_basic_lf-spras.
    "城市
    ls_addr-data-postal-data-city = gs_basic_lf-ort01.
    "地址
    ls_addr-data-postal-data-street = gs_basic_lf-stras.
    "邮政编码
    ls_addr-data-postal-data-postl_cod1 = '000000'.
    APPEND ls_addr TO lt_addr.
    MOVE-CORRESPONDING lt_addr TO ls_partner-central_data-address-addresses.

    MOVE-CORRESPONDING ls_partner TO ls_extern-partner.
*        ls_extern-ensure_create-create_vendor = 'X'.

    "供应商编号,标识为创建
    ls_vendor-header-object_task = g_mode.
    PERFORM frm_format_alpha_input USING gs_basic_lf-lifnr.
    ls_vendor-header-object_instance-lifnr = gs_basic_lf-lifnr.
    "外部界面:中心数据
    ls_vendor-central_data-central-data-kunnr = gs_basic_lf-kunnr."客户
    ls_vendor-central_data-central-data-stenr = gs_basic_lf-taxnumxl."税号
*        ls_vendor-central_data-central-data-ktokk = gs_basic_lf-ktokk."税号
* 公司信息
    ls_company-task = g_mode.
    ls_company-data_key-bukrs = gs_basic_lf-bukrs."公司代码
    "格式化akont输入,在前面加够0.
    PERFORM frm_format_alpha_input USING gs_basic_lf-akont.
    ls_company-data-akont = gs_basic_lf-akont."统驭科目
    ls_company-data-zterm = gs_basic_lf-ztermb."付款条件代码
    ls_company-data-reprf = gs_basic_lf-reprf."双重发票检查
    APPEND ls_company TO lt_company.
    ls_vendor-company_data-company = lt_company.
* 银行信息
*      ls_bankdetail-task = g_mode.
*      ls_bankdetail-data_key-banks = gs_basic_lf-land1. "国家
*      ls_bankdetail-data_key-bankl = gs_basic_lf-bankl. "银行代码
*      ls_bankdetail-data_key-bankn = gs_basic_lf-bankn. "银行帐户
*      APPEND ls_bankdetail TO lt_bankdetail.
*      ls_vendor-central_data-bankdetail-bankdetails = lt_bankdetail.
* 采购组织
    ls_purchasing-task = g_mode.
    ls_purchasing-data_key-ekorg = gs_basic_lf-ekorg."采购组织
    ls_purchasing-data-waers = gs_basic_lf-waers."订单货币
    ls_purchasing-data-zterm = gs_basic_lf-ztermc."付款条件
    ls_purchasing-data-webre = gs_basic_lf-webre."基于收货的发票校验

* 合作伙伴功能
    CALL FUNCTION 'CONVERSION_EXIT_PARVW_INPUT'
      EXPORTING
        input  = c_parvw1
      IMPORTING
        output = l_parvw.
    ls_purchasing_function-task = g_mode.
    ls_purchasing_function-data_key-parvw = l_parvw.
    APPEND ls_purchasing_function TO lt_purchasing_function.
    CLEAR l_parvw.

    CALL FUNCTION 'CONVERSION_EXIT_PARVW_INPUT'
      EXPORTING
        input  = c_parvw2
      IMPORTING
        output = l_parvw.
    ls_purchasing_function-task = g_mode.
    ls_purchasing_function-data_key-parvw = l_parvw.
    APPEND ls_purchasing_function TO lt_purchasing_function.
    CLEAR l_parvw.

    CALL FUNCTION 'CONVERSION_EXIT_PARVW_INPUT'
      EXPORTING
        input  = c_parvw3
      IMPORTING
        output = l_parvw.
    ls_purchasing_function-task = g_mode.
    ls_purchasing_function-data_key-parvw = l_parvw.
    APPEND ls_purchasing_function TO lt_purchasing_function.

    MOVE-CORRESPONDING lt_purchasing_function TO ls_purchasing-functions-functions.
    CLEAR lt_purchasing_function.
    APPEND ls_purchasing TO lt_purchasing.
    ls_vendor-purchasing_data-purchasing = lt_purchasing.
    MOVE-CORRESPONDING ls_vendor TO ls_extern-vendor.
    APPEND ls_extern TO lt_extern.

    CALL FUNCTION 'CVI_EI_INBOUND_MAIN'
      EXPORTING
        i_data   = lt_extern
      IMPORTING
        e_return = lt_return.
    READ TABLE lt_return INTO ls_return INDEX 1.
    READ TABLE ls_return-object_msg WITH KEY type = 'E' TRANSPORTING NO FIELDS.
    IF sy-subrc = 0.
      CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'.
      g_msg = 'E'.
    ELSE.
      READ TABLE ls_return-object_msg WITH KEY type = 'A' TRANSPORTING NO FIELDS.
      IF sy-subrc = 0.
        CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'.
        g_msg = 'E'.
      ELSE.
        CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
          EXPORTING
            wait = 'X'.
        g_msg = 'S'.
      ENDIF.
    ENDIF.

    "附加数据
    gs_alv_vendor-lifnr = gs_basic_lf-lifnr.
    gs_alv_vendor-num = g_num.
    gs_alv_vendor-type = g_msg.
    IF g_msg = 'S'.
      gs_alv_vendor-light = '@5B@'.
      CONCATENATE '供应商'gs_basic_lf-name1'创建成功' INTO gs_alv_vendor-message.
    ELSEIF g_msg = 'E'.
      gs_alv_vendor-light = '@5C@'.
      READ TABLE ls_return-object_msg INTO ls_omsg WITH KEY type = 'E'.
      IF sy-subrc <> 0.
        READ TABLE ls_return-object_msg INTO ls_omsg WITH KEY type = 'A'.
      ENDIF.
      CONCATENATE '供应商'gs_basic_lf-name1'创建失败,原因是:'ls_omsg-message INTO gs_alv_vendor-message.
    ENDIF.
    MODIFY gt_alv_vendor FROM gs_alv_vendor.

    CLEAR:ls_partner,ls_smtp,ls_fax,ls_phone,ls_addr,ls_vendor,ls_company,ls_bankdetail,
        ls_purchasing,ls_purchasing_function,ls_extern,ls_return.
    REFRESH:lt_smtp,lt_fax,lt_phone,lt_addr,lt_company,lt_bankdetail,lt_purchasing,lt_purchasing_function,
            lt_extern,lt_return.
    CLEAR:l_parvw.

  ENDIF.
ENDFORM.
*&---------------------------------------------------------------------*
*&      Form  FRM_ADD_BUKRS
*&---------------------------------------------------------------------*
*       扩充公司代码
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM frm_add_bukrs .
*-------------------------------公司代码扩充-函数参数-------------------------------------*
* 中间处理时用到的参数
  DATA:lt_bankdetail2   TYPE TABLE OF ty_bankdetail, "从数据表里取出的银行数据
       ls_bankdetail2   TYPE ty_bankdetail,
       ls_bankdetail2_1 TYPE ty_bankdetail.
  DATA:lt_bankdetail4 TYPE TABLE OF ty_bankdetail, "从数据表里取出的银行数据
       ls_bankdetail4 TYPE ty_bankdetail.
  DATA:lt_lfb1 TYPE TABLE OF ty_lfb1, "从数据表中取出的公司代码数据
       ls_lfb1 TYPE ty_lfb1.
* 调用类需要的参数
  DATA ls_master_data TYPE vmds_ei_main.  "最外层参数
  DATA:lt_vendor2 TYPE vmds_ei_extern_t,
       ls_vendor2 TYPE vmds_ei_extern.
  DATA:lt_bankdetail3 TYPE  cvis_ei_bankdetail_t, "银行数据
       ls_bankdetail3 TYPE cvis_ei_cvi_bankdetail.
  DATA:lt_company2 TYPE vmds_ei_company_t,
       ls_company2 TYPE vmds_ei_company.
  DATA:ls_return_message TYPE cvis_message,
       lt_message        TYPE bapiret2_t,
       ls_message        TYPE bapiret2.
  DATA:ls_return_data    TYPE vmds_ei_main, "返回的供应商数据
       lt_return_vendors TYPE vmds_ei_extern_t, "返回的供应商编号
       ls_return_verdors LIKE LINE OF lt_return_vendors.
* 其它字段
  DATA l_ifbukrs TYPE c. "判断是否供应商创建过视图
  DATA l_land1 TYPE c LENGTH 2 VALUE 'CN'."默认国家
  DATA l_lifnr TYPE lifnr VALUE 0. "返回的供应商编号

  g_mode = 'U'.
* 查出所有的银行信息
  SELECT
        lifnr  "供应商或债权人的帐号
        banks  "银行国家代码
        bankl  "银行代码
        bankn  "银行帐户号码
    FROM lfbk
    INTO CORRESPONDING FIELDS OF TABLE lt_bankdetail2.
  SORT lt_bankdetail2 BY lifnr.
* 查出所有公司代码数据
  SELECT
        lifnr
        bukrs
        akont
        zterm
        zuawa
    INTO CORRESPONDING FIELDS OF TABLE lt_lfb1
    FROM lfb1.
  SORT lt_lfb1 BY lifnr bukrs.

  PERFORM frm_format_alpha_input USING gs_basic_bk-lifnr."添加前导零
* 找出对应供应商编号的银行代码数据
  READ TABLE lt_bankdetail2 INTO ls_bankdetail2 WITH KEY lifnr = gs_basic_bk-lifnr BINARY SEARCH.
  IF sy-subrc = 0.
    LOOP AT lt_bankdetail2 INTO ls_bankdetail2_1 FROM sy-tabix .
      IF ls_bankdetail2_1-lifnr = ls_bankdetail2-lifnr.
        MOVE-CORRESPONDING ls_bankdetail2_1 TO ls_bankdetail4.
        APPEND ls_bankdetail4 TO lt_bankdetail4.
      ELSE.
        EXIT.
      ENDIF.
      CLEAR:ls_bankdetail4,ls_bankdetail2_1.
    ENDLOOP.
  ENDIF.

  "查找了LFB1中是否存在公司,即该供应商是否之前创建公司视图
  READ TABLE lt_lfb1 WITH KEY lifnr = gs_basic_bk-lifnr
                              bukrs = gs_basic_bk-bukrs TRANSPORTING NO FIELDS .
  IF sy-subrc = 0.
    CLEAR l_ifbukrs.
    l_ifbukrs = yes."之前有创建过当前传入的公司代码数据
  ENDIF.

* 银行数据
  "将传入的银行数据和根据供应商查找到的数据进行比对,如果相同,则将查找到的内表数据打上删除标记
  LOOP AT lt_bankdetail4 INTO ls_bankdetail4 WHERE bankl = gs_basic_bk-bankl
                                               AND bankn = gs_basic_bk-bankn.
    ls_bankdetail3-task = c_del.                                " 打上删除标记
    ls_bankdetail3-data_key-banks = ls_bankdetail4-banks.      "国家
    ls_bankdetail3-data_key-bankl = ls_bankdetail4-bankl.      "银行代码
    ls_bankdetail3-data_key-bankn = ls_bankdetail4-bankn.      "银行帐户
    APPEND ls_bankdetail3 TO lt_bankdetail3.
    CLEAR:ls_bankdetail3,ls_bankdetail4.
  ENDLOOP.

* 客户通用数据
  ls_vendor2-header-object_task = g_mode."更新标识
  ls_vendor2-header-object_instance-lifnr = gs_basic_bk-lifnr."供应商编号
  ls_vendor2-central_data-central-data-kunnr = gs_basic_bk-kunnr."客户
  ls_vendor2-central_data-central-datax-kunnr = yes.

* 公司代码数据
  "如果之前已经创建了公司视图的话,就对其进行修改,否则对其进行新建
  IF l_ifbukrs = yes.
    ls_company2-task = c_edit.   "如果传入的公司存在,则进行修改
  ELSE.
    ls_company2-task = c_insr.  "如果一个供应商没有公司视图,则进行新建公司视图
  ENDIF.
  ls_company2-data_key-bukrs = gs_basic_bk-bukrs."公司代码
  ls_company2-data-akont = gs_basic_bk-akont.    "统驭科目
  ls_company2-data-zterm = gs_basic_bk-zterm.    "付款条件代码
  ls_company2-data-reprf = gs_basic_bk-reprf.    "付款条件代码
  ls_company2-datax-akont = yes.
  ls_company2-datax-zterm = yes.
  ls_company2-datax-reprf = yes.
  APPEND ls_company2 TO lt_company2.
  ls_vendor2-company_data-company = lt_company2.

  "此时再将传入的数据导入系统中进行赋值
  ls_bankdetail3-task = c_insr.
  ls_bankdetail3-data_key-banks = l_land1."国家
  ls_bankdetail3-data_key-bankl = gs_basic_bk-bankl."银行代码
  ls_bankdetail3-data_key-bankn = gs_basic_bk-bankn."银行帐户 = 合作银行类型
  APPEND ls_bankdetail3 TO lt_bankdetail3.
  CLEAR ls_bankdetail3.
  IF gs_basic_bk-bankl IS NOT INITIAL OR
     gs_basic_bk-bankn IS NOT INITIAL.  "这2个值有其中一个不为空时才加入银行数据
    ls_vendor2-central_data-bankdetail-bankdetails = lt_bankdetail3."银行明细
  ENDIF.
*将整理好的数据添加到供应商主数据中
  APPEND ls_vendor2 TO lt_vendor2.
  ls_master_data-vendors = lt_vendor2.

  CALL METHOD vmd_ei_api=>maintain_bapi
    EXPORTING
      is_master_data         = ls_master_data
    IMPORTING
      es_message_defective   = ls_return_message "错误消息
      es_master_data_correct = ls_return_data. "创建成功返回的供应商数据
  lt_message = ls_return_message-messages.
  lt_return_vendors = ls_return_data-vendors.
  READ TABLE lt_return_vendors INTO ls_return_verdors INDEX 1.
  IF sy-subrc = 0 .
    WRITE ls_return_verdors-header-object_instance TO l_lifnr."读取供应商编号
  ENDIF.
  IF lt_message IS INITIAL.
    CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
      EXPORTING
        wait = 'X'.
    g_msg = 'S'.
  ELSE.
    CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'.
    g_msg = 'E'.
  ENDIF.

  "附加数据
  gs_alv_bukrs-num = g_num.
  gs_alv_bukrs-type = g_msg.
  IF g_msg = 'S'.
    gs_alv_bukrs-light = '@5B@'.
    CONCATENATE '供应商'gs_basic_bk-lifnr'扩充公司代码成功' INTO gs_alv_bukrs-message.
  ELSEIF g_msg = 'E'.
    gs_alv_bukrs-light = '@5C@'.
    CONCATENATE '供应商'gs_basic_bk-lifnr'扩充公司代码失败' INTO gs_alv_bukrs-message.
  ENDIF.
  MODIFY gt_alv_bukrs FROM gs_alv_bukrs.

  CLEAR:ls_bankdetail2,ls_bankdetail3,ls_vendor2,ls_company2,ls_master_data,ls_return_message,
        ls_return_data,ls_return_verdors.
  REFRESH:lt_bankdetail3,lt_company2,lt_vendor2,lt_message,lt_return_vendors,lt_bankdetail2,
          lt_lfb1.
  CLEAR:l_ifbukrs,l_lifnr.

ENDFORM.
*&---------------------------------------------------------------------*
*&      Form  FRM_GET_MODEL
*&---------------------------------------------------------------------*
*       下载模板
*----------------------------------------------------------------------*
*      -->P_0146   text
*----------------------------------------------------------------------*
FORM frm_get_model  USING    p_objid TYPE wwwdata-objid.
  DATA: l_objdata     LIKE wwwdatatab,
        l_destination LIKE rlgrap-filename,
        l_rc          LIKE sy-subrc,
        l_errtxt      TYPE string.
  DATA: l_fullpath  TYPE string,
        l_extension TYPE string,
        l_fname     LIKE rlgrap-filename,
        l_formkey   LIKE  wwwdatatab.

  l_extension = p_objid.
  PERFORM get_file_name USING '.xls'
                              'Excel|*.xls;'
                     CHANGING l_fullpath.
  IF l_fullpath = space.
    MESSAGE '请选择下载文件名' TYPE 'E'.
  ELSE.
    CONCATENATE l_fullpath '' INTO l_fname.
    SELECT SINGLE relid objid
      FROM wwwdata
      INTO CORRESPONDING FIELDS OF l_objdata
      WHERE relid = 'MI'
        AND objid = p_objid .

    IF sy-subrc NE 0 OR l_objdata-objid = space.
      MESSAGE e001(00) WITH '文件不存在!'.
    ELSE.
      CALL FUNCTION 'DOWNLOAD_WEB_OBJECT'
        EXPORTING
          key         = l_objdata
          destination = l_fname
        IMPORTING
          rc          = l_rc
        CHANGING
          temp        = l_fname.
      IF l_rc NE 0.
        MESSAGE e001(00) WITH '文件下载失败!'.
      ENDIF.
    ENDIF.
  ENDIF.
ENDFORM.
*&---------------------------------------------------------------------*
*&      Form  GET_FILE_NAME
*&---------------------------------------------------------------------*
*       获取要下载的文件名字
*----------------------------------------------------------------------*
*      -->P_0274   text
*      -->P_0275   text
*      <--P_L_FULLPATH  text
*----------------------------------------------------------------------*
FORM get_file_name  USING p_extension
                         p_file_filter
                CHANGING p_fullpath.
  DATA: l_filename TYPE string,
        l_path     TYPE string,
        l_fullpath TYPE string,
        l_titile   TYPE string,
        l_init_dir TYPE string.

  CLEAR p_fullpath.
  l_titile    = TEXT-t04.
  l_init_dir  = TEXT-t03.
  CALL METHOD cl_gui_frontend_services=>file_save_dialog
    EXPORTING
      window_title         = l_titile
      default_extension    = '.xls'
      initial_directory    = l_init_dir
      prompt_on_overwrite  = 'X'
      file_filter          = p_file_filter
    CHANGING
      filename             = l_filename
      path                 = l_path
      fullpath             = l_fullpath
    EXCEPTIONS
      cntl_error           = 1
      error_no_gui         = 2
      not_supported_by_gui = 3
      OTHERS               = 4.
  IF sy-subrc <> 0.
    MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
          WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
  ENDIF.
  p_fullpath = l_fullpath.
ENDFORM.
*&---------------------------------------------------------------------*
*&      Form  FRM_FORMAT_ALPHA_INPUT
*&---------------------------------------------------------------------*
*       添加前导零
*----------------------------------------------------------------------*
*      -->P_IM_S_GENERAL_LIFNR  text
*----------------------------------------------------------------------*
FORM frm_format_alpha_input  USING    p1.
  CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
    EXPORTING
      input  = p1
    IMPORTING
      output = p1.
ENDFORM.
*&---------------------------------------------------------------------*
*&      Form  FRM_ALV_SHOW
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*      -->P_G_flag  text
*----------------------------------------------------------------------*
FORM frm_alv_show  .
  PERFORM frm_get_data."数据获取
  PERFORM frm_layout_build."  设置表格样式
  PERFORM frm_field_build. "  建立表头数据
  PERFORM frm_data_out."输出
ENDFORM.
*&---------------------------------------------------------------------*
*&      Form  FRM_GET_DATA
*&---------------------------------------------------------------------*
*       往ALV输出内表里填值
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM frm_get_data .
  IF g_flag = 1.

    CALL FUNCTION 'ZXXX001'
      EXPORTING
        filename                = p_flname
        i_begin_col             = '1' "起始列号
        i_begin_row             = '3' "起始行号
        i_end_col               = '26' "终止列号
        i_end_row               = '65535' "终止行号
        im_sheet_name           = 1
      TABLES
        intern                  = gt_data[]
      EXCEPTIONS
        inconsistent_parameters = 1
        upload_ole              = 2
        OTHERS                  = 3.
    IF gt_data[] IS INITIAL.
      MESSAGE '清单中无数据' TYPE 'E'.
    ENDIF.
    IF sy-subrc <> 0.
      MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
              WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
    ENDIF.

*格式转化
    LOOP AT gt_data ASSIGNING <gs_itab>.
      CASE <gs_itab>-col.
        WHEN '0001'.
          gs_alv_vendor-lifnr = <gs_itab>-value."供应商编号
        WHEN '0002'.
          gs_alv_vendor-partn = <gs_itab>-value."供应商账户组
        WHEN '0003'.
          gs_alv_vendor-ktokk = <gs_itab>-value."供应商账户组
        WHEN '0004'.
          gs_alv_vendor-name1 = <gs_itab>-value."供应商名称
        WHEN '0005'.
          gs_alv_vendor-sortl = <gs_itab>-value."简称(搜索项)
        WHEN '0006'.
          gs_alv_vendor-stras = <gs_itab>-value."地址(中)
        WHEN '0007'.
          gs_alv_vendor-ort01 = <gs_itab>-value."城市
        WHEN '0008'.
          gs_alv_vendor-land1 = <gs_itab>-value."国家
        WHEN '0009'.
          gs_alv_vendor-spras = <gs_itab>-value."语言
        WHEN '0010'.
          gs_alv_vendor-telf1 = <gs_itab>-value."电话
        WHEN '0011'.
          gs_alv_vendor-telfx = <gs_itab>-value."传真
        WHEN '0012'.
          gs_alv_vendor-telbx = <gs_itab>-value."邮箱地址
        WHEN '0013'.
          gs_alv_vendor-taxtype = <gs_itab>-value."税类别
        WHEN '0014'.
          gs_alv_vendor-taxnumxl = <gs_itab>-value."税号
        WHEN '0015'.
          gs_alv_vendor-augrp = <gs_itab>-value."权限组
        WHEN '0016'.
          gs_alv_vendor-bukrs = <gs_itab>-value."公司代码
        WHEN '0017'.
          gs_alv_vendor-kunnr = <gs_itab>-value."客户
        WHEN '0018'.
          gs_alv_vendor-akont = <gs_itab>-value."统驭科目
        WHEN '0019'.
          gs_alv_vendor-ztermb = <gs_itab>-value."付款条件
        WHEN '0020'.
          gs_alv_vendor-bankl = <gs_itab>-value."银行代码
        WHEN '0021'.
          gs_alv_vendor-bankn = <gs_itab>-value."银行帐号
        WHEN '0022'.
          gs_alv_vendor-reprf = <gs_itab>-value."双重发票检查
        WHEN '0023'.
          gs_alv_vendor-ekorg = <gs_itab>-value."采购组织
        WHEN '0024'.
          gs_alv_vendor-waers = <gs_itab>-value."订单货币
        WHEN '0025'.
          gs_alv_vendor-ztermc = <gs_itab>-value."付款条件
        WHEN '0026'.
          gs_alv_vendor-webre = <gs_itab>-value."基于收货的发票校验
      ENDCASE.

      AT END OF row.
        "权限检查
        AUTHORITY-CHECK OBJECT 'ZBUKRS'
                 ID 'BUKRS' FIELD gs_alv_vendor-bukrs.
        IF sy-subrc <> 0.
          MESSAGE ID 'ZMM001' TYPE 'E' NUMBER '19' WITH gs_alv_vendor-bukrs.

        ENDIF.

        AUTHORITY-CHECK OBJECT 'ZAUGRP'
                 ID 'AUGRP' FIELD gs_alv_vendor-augrp.
        IF sy-subrc <> 0.
          MESSAGE ID 'ZMM001' TYPE 'E' NUMBER '20' WITH gs_alv_vendor-augrp.
        ENDIF.



        APPEND gs_alv_vendor TO gt_alv_vendor.
        CLEAR gs_alv_vendor.
      ENDAT.
    ENDLOOP.

  ELSEIF g_flag = 2.

    CALL FUNCTION 'ZXXX001'
      EXPORTING
        filename                = p_flname
        i_begin_col             = '1' "起始列号
        i_begin_row             = '3' "起始行号
        i_end_col               = '8' "终止列号
        i_end_row               = '65535' "终止行号
        im_sheet_name           = 2
      TABLES
        intern                  = gt_data[]
      EXCEPTIONS
        inconsistent_parameters = 1
        upload_ole              = 2
        OTHERS                  = 3.
    IF gt_data[] IS INITIAL.
      MESSAGE '清单中无数据' TYPE 'E'.
    ENDIF.
    IF sy-subrc <> 0.
      MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
              WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
    ENDIF.

*格式转化
    LOOP AT gt_data ASSIGNING <gs_itab>.
      CASE <gs_itab>-col.
        WHEN '0001'.
          gs_alv_bukrs-lifnr = <gs_itab>-value."供应商编号
        WHEN '0002'.
          gs_alv_bukrs-bukrs = <gs_itab>-value."公司代码
        WHEN '0003'.
          gs_alv_bukrs-kunnr = <gs_itab>-value."客户
        WHEN '0004'.
          gs_alv_bukrs-akont = <gs_itab>-value."统驭科目
        WHEN '0005'.
          gs_alv_bukrs-zterm = <gs_itab>-value."付款条件
        WHEN '0006'.
          gs_alv_bukrs-bankl = <gs_itab>-value."银行代码
        WHEN '0007'.
          gs_alv_bukrs-bankn = <gs_itab>-value."银行帐号
        WHEN '0008'.
          gs_alv_bukrs-reprf = <gs_itab>-value."双重发票检查
      ENDCASE.

      AT END OF row.
        APPEND gs_alv_bukrs TO gt_alv_bukrs.
        CLEAR gs_alv_bukrs.
      ENDAT.
    ENDLOOP.

  ENDIF.
ENDFORM.
*&---------------------------------------------------------------------*
*&      Form  FRM_LAYOUT_BUILD
*&---------------------------------------------------------------------*
*       "  设置表格样式
*----------------------------------------------------------------------*
FORM frm_layout_build .
  g_layout-box_fieldname        = 'SEL'.  " 选择模式,在最左端有选择按钮
  g_layout-colwidth_optimize    = 'X'.    " 自动调整列宽
  g_layout-zebra                = 'X'.    " 表格斑马线
ENDFORM.                    "frm_layout_build
*&---------------------------------------------------------------------*
*&      Form  FRM_FIELD_BUILD
*&---------------------------------------------------------------------*
*       "  建立表头数据
*----------------------------------------------------------------------*
FORM frm_field_build .
  IF g_flag = 1.
    "一般数据
*    PERFORM field_set USING 'SEL'  '' '' '15' '' '' .
    PERFORM field_set USING 'LIFNR'  '供应商号' '供应商号' '15' '' '' .
    PERFORM field_set USING 'KTOKK'  '供应商账户组' '供应商账户组' '15' '' '' .
    PERFORM field_set USING 'NAME1'  '供应商名称(中文)' '供应商名称(中文)' '15' '' '' .
    PERFORM field_set USING 'SORTL'  '简称(搜索项)' '简称(搜索项)' '15' '' '' .
    PERFORM field_set USING 'STRAS'  '地址(中)' '地址(中)' '15' '' '' .
    PERFORM field_set USING 'ORT01'  '城市' '城市' '15' '' '' .
    PERFORM field_set USING 'LAND1'  '国家' '国家' '15' '' '' .
    PERFORM field_set USING 'SPRAS'  '语言' '语言' '15' '' '' .
    PERFORM field_set USING 'TELF1'  '电话' '电话' '15' '' '' .
    PERFORM field_set USING 'TELFX'  '传真' '传真' '15' '' '' .
    PERFORM field_set USING 'TELBX'  '邮箱地址' '邮箱地址' '15' '' '' .
    PERFORM field_set USING 'TAXTYPE'  '税类别' '税类别' '15' '' '' .
    PERFORM field_set USING 'TAXNUMXL'  '税号' '税号' '15' '' '' .
    PERFORM field_set USING 'AUGRP'  '权限组' '权限组' '15' '' '' .
    "公司代码
    PERFORM field_set USING 'BUKRS'  '公司代码' '公司代码' '15' '' '' .
    PERFORM field_set USING 'KUNNR'  '客户' '客户' '15' '' '' .
    PERFORM field_set USING 'AKONT'  '统驭科目' '统驭科目' '15' '' '' .
    PERFORM field_set USING 'ZTERMB'  '付款条件' '付款条件' '15' '' '' .
    PERFORM field_set USING 'BANKL'  '银行代码' '银行代码' '15' '' '' .
    PERFORM field_set USING 'BANKN'  '银行帐号' '银行帐号' '15' '' '' .
    PERFORM field_set USING 'REPRF'  '双重发票检查' '双重发票检查' '15' '' '' .
    "采购组织
    PERFORM field_set USING 'EKORG'  '采购组织' '采购组织' '15' '' '' .
    PERFORM field_set USING 'WAERS'  '订单货币' '订单货币' '15' '' '' .
    PERFORM field_set USING 'ZTERMC'  '付款条件' '付款条件' '15' '' '' .
    PERFORM field_set USING 'WEBRE'  '基于收货的发票校验' '基于收货的发票校验' '15' '' '' .
    "附加数据
    PERFORM field_set USING 'NUM'  '当前行数' '当前行数' '15' '' '' .
    PERFORM field_set USING 'TYPE'  '执行结果' '执行结果' '15' '' '' .
    PERFORM field_set USING 'MESSAGE'  '返回消息' '返回消息' '15' '' '' .
    PERFORM field_set USING 'LIGHT'  '执行情况' '执行情况' '15' '' '' .
  ELSEIF g_flag = 2.
    "一般数据
*    PERFORM field_set USING 'SEL'  '' '' '15' '' '' .
    PERFORM field_set USING 'LIFNR'  '供应商号' '供应商号' '15' '' '' .
    "公司代码
    PERFORM field_set USING 'BUKRS'  '公司代码' '公司代码' '15' '' '' .
    PERFORM field_set USING 'KUNNR'  '客户' '客户' '15' '' '' .
    PERFORM field_set USING 'AKONT'  '统驭科目' '统驭科目' '15' '' '' .
    PERFORM field_set USING 'ZTERM'  '付款条件' '付款条件' '15' '' '' .
    PERFORM field_set USING 'BANKL'  '银行代码' '银行代码' '15' '' '' .
    PERFORM field_set USING 'BANKN'  '银行帐号' '银行帐号' '15' '' '' .
    PERFORM field_set USING 'REPRF'  '双重发票检查' '双重发票检查' '15' '' '' .
    "附加数据
    PERFORM field_set USING 'NUM'  '当前行数' '当前行数' '15' '' '' .
    PERFORM field_set USING 'TYPE'  '执行结果' '执行结果' '15' '' '' .
    PERFORM field_set USING 'MESSAGE'  '返回消息' '返回消息' '15' '' '' .
    PERFORM field_set USING 'LIGHT'  '执行情况' '执行情况' '15' '' '' .
  ENDIF.
ENDFORM.                    "frm_field_build
*&---------------------------------------------------------------------*
*&      Form  FRM_DATA_OUT
*&---------------------------------------------------------------------*
*       输出数据
*----------------------------------------------------------------------*
FORM frm_data_out .
  IF g_flag = 1.
    CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
      EXPORTING
        i_callback_program       = sy-repid
        i_callback_pf_status_set = c_cns_pf_status
        i_callback_user_command  = c_cns_user_command
        is_layout                = g_layout
        it_fieldcat              = gt_fieldcat
        i_save                   = 'X'
      TABLES
        t_outtab                 = gt_alv_vendor
      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.
  ELSEIF g_flag = 2.
    CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
      EXPORTING
        i_callback_program       = sy-repid
        i_callback_pf_status_set = c_cns_pf_status
        i_callback_user_command  = c_cns_user_command
        is_layout                = g_layout
        it_fieldcat              = gt_fieldcat
        i_save                   = 'X'
      TABLES
        t_outtab                 = gt_alv_bukrs
      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.
  ENDIF.
ENDFORM.                    "frm_data_out
*&---------------------------------------------------------------------*
*&      Form  FIELD_SET
*&---------------------------------------------------------------------*
FORM field_set USING p_fieldname
                     p_seltext_l
                     p_seltext_s
                     p_outputlen
                     p_ref_fieldname
                     p_ref_tabname
                         .
  IF p_fieldname = 'MESSAGE'.
    gs_fieldcat-key = 'X'.
  ELSEIF p_fieldname = 'TYPE'.
    gs_fieldcat-key = 'X'.
  ELSEIF p_fieldname = 'NUM'.
    gs_fieldcat-key = 'X'.
  ELSEIF p_fieldname = 'LIGHT'.
    gs_fieldcat-key = 'X'.
  ENDIF.
  gs_fieldcat-fieldname     = p_fieldname .
  gs_fieldcat-seltext_l     = p_seltext_l .
  gs_fieldcat-seltext_s     = p_seltext_s .
  gs_fieldcat-outputlen     = p_outputlen .
  gs_fieldcat-ref_fieldname = p_ref_fieldname.
  gs_fieldcat-ref_tabname   = p_ref_tabname.
  APPEND gs_fieldcat TO gt_fieldcat.
  CLEAR gs_fieldcat.
ENDFORM.                    "field_set
*&-------------------------------------------------------------------
*      添加按钮,双击下面的 STANDARD_FULLSCREEN
*--------------------------------------------------------------------
FORM alv_pf_status USING ut_extab TYPE slis_t_extab.
  SET PF-STATUS 'STANDARD_FULLSCREEN' EXCLUDING ut_extab.
ENDFORM. "ALV_PF_STATUS
*--------------------------------------------------------------------
*      自定义事件、双击事件
*--------------------------------------------------------------------
FORM alv_user_command USING u_ucomm LIKE sy-ucomm
                        us_selfield TYPE slis_selfield.
  DATA:l_index TYPE sy-tabix.
  CASE u_ucomm.
    WHEN 'SAVE'."保存数据到数据表
*      PERFORM F_REFRESH_ALV.  "刷新ALV,下面有说明

      PERFORM frm_create.
*   WHEN '&IC1'."双击
** 获取当前ALV所在行数据
*      READ TABLE IT_GW INDEX RS_SELFIELD-TABINDEX.
*      SET PARAMETER ID: 'ANR' FIELD IT_GW-AUFNR.
*      CALL TRANSACTION 'CO03' AND SKIP FIRST SCREEN.
  ENDCASE.
  us_selfield-refresh = 'X'.
ENDFORM.                    "ALV_USER_COMMAND
*&---------------------------------------------------------------------*
*&      Form  FRM_PRINT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM frm_create .
  IF g_flag = 1." 供应商创建
    LOOP AT gt_alv_vendor INTO gs_alv_vendor.
      g_num = g_num + 1.
      MOVE-CORRESPONDING gs_alv_vendor TO gs_basic_lf.
      PERFORM frm_create_vendor.
      CLEAR:gs_alv_vendor,gs_basic_lf.
    ENDLOOP.
  ELSEIF g_flag = 2."公司代码扩充
    LOOP AT gt_alv_bukrs INTO gs_alv_bukrs.
      g_num = g_num + 1.
      MOVE-CORRESPONDING gs_alv_bukrs TO gs_basic_bk.
      PERFORM frm_add_bukrs.
      CLEAR:gs_alv_bukrs,gs_basic_bk.
    ENDLOOP.
  ENDIF.
  CLEAR g_num.
ENDFORM.                    " FRM_CREATE

FORM sub_auth_chk.

ENDFORM.

 


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM