使用到的BAPI: RFC_CVI_EI_INBOUND_MAIN

这个BAPI 可以用来创建/修改 供应商和客户。
本篇文章只写了导入供应商的部分,客户也可以通过这个bapi导入的,但是请自行更改使用。
这个bapi比 cmd_ei_api =>maintain_bapi和VMD_EI_API好用一些。
你也可以SE37看到这个bapi里面涉及到很多表。你想导入数据的字段,就可以在这些表里面寻找。一定要根据要导入的数据来设计这个导入程序。

源代码:

TABLES:sscrfields.TYPE-POOLS:truxs,icon,slis.*INCLUDE BDCRECX1_S.
************************************************************************
* GLOBAL STRUCTURES
************************************************************************TYPES: BEGIN OF ty_out,bu_group(4),                          "BP01partner(10),                          "供应商代码-自动创建name_org1(40),                        "名称1name_org2(40),                        "名称2(联系人)bu_sort1(20),                         "检索项:测试客户-wtxstreet(60),                           "地址:街道名称-客户测试post_code1(10),                       "邮政编码:311107city1(40),                            "城市:杭州land1(3),                             "国家:CN  中国regio(3),                             "地区langu(2),                             "语言:ZH 中文
*         name_co(40),                          "联系人tel_number(30),                       "电话:0571-86397805tel_extens(10),                       "电话-分机mob_number(30),                       "移动电话:159581640000fax_number(30),                       "传真fax_extens(10),                       "传真-分机smtp_addr(241),                       "E-mail:494066891@qq.comtaxnum(20),                           "业务伙伴税号bukrs(4),                             "公司代码akont(10),                            "统驭科目:zuawa(3),                             "排序码(3):zterm(4),                             "付款条件:reprf(1), "双重发票校验bank_land(3),                         "银行国家bank_id(15),                        "银行代码bank_no(40),                          "银行账号:BUTOBK_BKREF(40),                        "参考明细
*         bkont           TYPE bu_bkont, "银行控制码bank_name(60),                            "银行名称koinh(60),                            "账户持有人:ekorg(4),                             "采购组织:1020 单泵waers(5),                             "币种:CNY  中国人民币;zterm2(4),                            "默认付款条件webre(1),"基于收货的发票校验dzwels(10),                           "付款方式kalsk(2), "方案组titleletter(50),       "问候statu1          TYPE iconname, "基本数据的状态statu2          TYPE iconname, "公司代码的状态statu3          TYPE iconname, "银行数据的状态statu4          TYPE iconname, "采购数据的状态message1(100),"基本数据的消息ZCUOWU    TYPE C, "错误message2(100),"公司代码的消息message3(100),"银行数据的消息message4(100),"采购数据的消息SEL TYPE C,END OF ty_out.************************************************************************
* INTERNAL TABLES
************************************************************************
*----------数据存储表----------
DATA: gt_out TYPE TABLE OF ty_out,gs_out TYPE ty_out.*"------------ALV-----------------
DATA: gt_fieldcat TYPE lvc_t_fcat, "字段目录gs_fieldcat LIKE LINE OF gt_fieldcat,gs_layout   TYPE lvc_s_layo.*---------------信用段数据-----------------------------------*
DATA: return TYPE ukm_t_monitor_return.SELECTION-SCREEN BEGIN OF BLOCK b3 WITH FRAME TITLE TEXT-001.
PARAMETERS: cb_up RADIOBUTTON GROUP grp3 DEFAULT 'X' USER-COMMAND com1 .
PARAMETERS: cb_down RADIOBUTTON GROUP grp3 .
SELECTION-SCREEN END OF BLOCK b3.SELECTION-SCREEN BEGIN OF BLOCK b1 WITH FRAME TITLE TEXT-002.
PARAMETERS: p_file TYPE rlgrap-filename MODIF ID mg1 MEMORY ID me2 . " 导入文件下载模板
SELECTION-SCREEN END OF BLOCK b1.SELECTION-SCREEN: FUNCTION KEY 1 .
*&---------------------------------------------------------------------*
*& INITIALIZATION/选择屏幕前初始化                                     *
*&---------------------------------------------------------------------*
INITIALIZATION.AT SELECTION-SCREEN OUTPUT.
*&---控制选择条件显示设置M1LOOP AT SCREEN.IF screen-group1 = 'MG1' .
*&---下载模板隐藏IF cb_down = abap_true.screen-active = 0.ENDIF.
*&---上传文件显示IF cb_up = abap_true .screen-active = 1.ENDIF.MODIFY SCREEN.ENDIF.MODIFY SCREEN.ENDLOOP.
*&---文件路径搜索帮助
AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_file.PERFORM frm_get_filename.*&---------------------------------------------------------------------*
*& FORM FRM_GET_FILENAME
*&---------------------------------------------------------------------*
*& TEXT
*&---------------------------------------------------------------------*
*& -->  CB_CENTR        TEXT
*& <--  CB_BANK        TEXT
*&---------------------------------------------------------------------*
FORM frm_get_filename .CALL FUNCTION 'WS_FILENAME_GET'EXPORTINGdef_filename     = p_filemask             = '*.*,*.*,*.XLS,*.XLS,*.XLSX,*.XLSX.' "DEF_PATH = 'C:\'
*     MASK             = '*.TXT,*.TXT.' "DEF_PATH = 'C:\'mode             = 'O'IMPORTINGfilename         = p_fileEXCEPTIONSinv_winsys       = 1no_batch         = 2selection_cancel = 3selection_error  = 4OTHERS           = 5.ENDFORM.*&---------------------------------------------------------------------*
*& Form EXCEL_CREATE
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& -->  p1        text
*& <--  p2        text
*&---------------------------------------------------------------------*
FORM excel_create .
*&---------------------------------------------------------------------*
*& FORM FRM_DOWN_LOAD
*&---------------------------------------------------------------------*
*& TEXT
*&---------------------------------------------------------------------*
*& -->  CB_CENTR        TEXT
*& <--  CB_BANK        TEXT
*&---------------------------------------------------------------------*
*FORM frm_down_load .*&---变量定义DATA: lv_text       TYPE string,                    "MESSAGElv_filename   TYPE string,                    "DOWNLOAD FILE NAMElv_path       TYPE string,                    "DOWNLOAD FILE PATHls_functxt    TYPE smp_dyntxt,                "MENU NAMElv_filepath   TYPE rlgrap-filename VALUE 'C', "FILE PATCHlv_mod(20)    TYPE c VALUE 'ZMB_MMB023',         "MODELlv_fullpath   TYPE string,                    "FULL PATHls_object     TYPE wwwdatatab,                "OBJECT NAMElv_rc         TYPE sy-subrc,                  "RETURN CODElv_title      TYPE string VALUE '保存',    "TITLElv_title_name TYPE string VALUE '供应商主数据导入模板'.       "TITLE NAME*&---调用OS 操作系统对话框CALL METHOD cl_gui_frontend_services=>file_save_dialogEXPORTINGwindow_title              = lv_titledefault_extension         = 'XLSX'default_file_name         = lv_title_name" WITH_ENCODING             =file_filter               = 'EXCEL文件(*.XLS)|*.XLS|全部文件 (*.*)|*.*|'initial_directory         = 'D:\'prompt_on_overwrite       = 'X'CHANGINGfilename                  = lv_filename  "默认文件名称path                      = lv_path   "文件路径fullpath                  = lv_fullpath  "文件路径" USER_ACTION               =" FILE_ENCODING             =EXCEPTIONScntl_error                = 1error_no_gui              = 2not_supported_by_gui      = 3invalid_default_file_name = 4OTHERS                    = 5.IF sy-subrc <> 0.
*   IMPLEMENT SUITABLE ERROR HANDLING HEREENDIF.
*&---操作系统文件路径CONCATENATE lv_pathlv_filename'.XLSX'INTO lv_filepath.
*&---OS长度控制/*&---下载模板IF strlen( lv_filepath ) <> 5.
*&---查询模板.SELECT SINGLErelid objidFROM wwwdataINTO CORRESPONDING FIELDS OF ls_objectWHERE srtf2 = '0'AND objid = lv_mod.                         "SMW0里对象名称IF sy-subrc <> 0 OR ls_object-objid = space .CONCATENATE '模板文件'"'模板文件:'lv_mod'不存在,请用smw0进行加载'"'不存在,请用SMW0进行加载.'INTO lv_text.MESSAGE lv_text TYPE 'E'.STOP.ENDIF.
*&---下载模板CALL FUNCTION 'DOWNLOAD_WEB_OBJECT'EXPORTINGkey         = ls_objectdestination = lv_filepathIMPORTINGrc          = lv_rc.IF lv_rc <> 0.CONCATENATE TEXT-911"''模板文件:'lv_mod'下载失败,请与开发人员联系'"''下载失败,请与开发人员联系.'INTO lv_text.MESSAGE lv_text TYPE 'E'.STOP.ENDIF.
*&---'已下载'MESSAGE '已下载' TYPE 'S'.ELSE.
*&---'已取消下载'MESSAGE '已取消下载' TYPE 'S'.ENDIF.ENDFORM.*************************************************************************
**EVENT  START-OF-SELECTION.
*************************************************************************
START-OF-SELECTION.IF cb_down EQ 'X'.PERFORM excel_create.      "下载模板LEAVE LIST-PROCESSING.ENDIF." PERFORM check_file .        "检查上传文件的格式PERFORM upload_document .   "进行文档上传*************************************************************************
**EVENT  END-OF-SELECTION
*************************************************************************
END-OF-SELECTION.PERFORM frm_output. "导入消息输出
*************************************************************************
**EVENT  END-OF PAGE
*************************************************************************
END-OF-PAGE.*&---------------------------------------------------------------------*
*&      Form  FRM_OUTPUT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM frm_output ."输出PERFORM form_fieldcat."列格式PERFORM form_layout.  "布局设置PERFORM form_showdata.
ENDFORM.
*&---------------------------------------------------------------------*
*&      Form  FORM_FIELDCAT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM form_fieldcat ."列格式 传的参数参PERFORM frm_get_fieldcat USING:'STATU1' '处理数据状态'  '' '' ,'MESSAGE1' '导入数据消息'    '' '' ,'BU_GROUP' '分组'   '' '' ,'PARTNER' '供应商编号'    '' '' ,'NAME_ORG1' '名称1'    '' '' ,'NAME_ORG2' '联系人'   '' '' ,'BU_SORT1' '检索项'   '' '' ,'STREET' '地址街道'   '' '' ,'POST_CODE1' '邮政编码'   '' '' ,'CITY1' '城市'   '' '' ,'LAND1' '国家'   '' '' ,'REGIO' '地区'    '' '' ,'LANGU' '语言'    '' '' ,'TEL_NUMBER' '电话'    '' '' ,'TEL_EXTENS' '电话-分机'    '' '' ,'MOB_NUMBER' '移动电话'   '' '' ,'FAX_NUMBER' '传真'    '' '' ,'FAX_EXTENS' '传真-分机'    '' '' ,'SMTP_ADDR' 'E-mail'    '' '' ,'TAXNUM' '税号'    '' '' ,"'TITLELETTER' '问候'   '' '' ,"'STATU2' '公司状态'    '' '' ,'BUKRS' '公司代码'    '' '' ,'AKONT' '统驭科目'    '' '' ,'ZUAWA' '排序码'   '' '' ,'ZTERM' '付款条件'   '' '' ,
*  'DZWELS' '付款方式''REPRF' '双重发票校验'    '' '' ,
*  'MESSAGE2' '公司消息'    '' '' ," 'STATU3' '银行状态'    '' '' ,'BANK_LAND' '银行国家'    '' '' ,'BANK_ID' '银行代码'    '' '' ,'BANK_NO' '银行账号'    '' '' ,'BUTOBK_BKREF'    '参考明细'   '' '' ,'BANK_NAME' '银行名称'   '' '' ,'KOINH' '账户持有人'    '' '' ,
*  'MESSAGE3' '银行消息'    '' '' ," 'STATU4' '采购状态'   '' '' ,'EKORG' '采购组织'   '' '' ,'WAERS' '货币码'   '' '' ,'ZTERM2' '采购付款条件'   '' '' ,'WEBRE' '发票校验'   '' '' .
*  'MESSAGE4' '采购消息'   '' '' .ENDFORM.
*&---------------------------------------------------------------------*
*&      Form  FRM_GET_FIELDCAT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*      -->pv_fieldname   text
*      -->pv_coltext   text
*      -->pv_ref_table   text
*      -->pv_ref_table   text
*----------------------------------------------------------------------*
FORM frm_get_fieldcat USING "列格式 传参形式pv_fieldname  TYPE anypv_coltext    TYPE anypv_ref_table  TYPE anypv_ref_field  TYPE any.CLEAR gs_fieldcat.gs_fieldcat-fieldname = pv_fieldname.gs_fieldcat-coltext = pv_coltext.gs_fieldcat-scrtext_l = pv_coltext.gs_fieldcat-ref_table = pv_ref_table.gs_fieldcat-ref_field = pv_ref_field.APPEND gs_fieldcat TO gt_fieldcat.ENDFORM.
*&---------------------------------------------------------------------*
*&      Form  FORM_LAYOUT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM form_layout ."布局设置gs_layout-cwidth_opt = 'X'.gs_layout-zebra      = 'X'.gs_layout-box_fname  = 'SEL'.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form OPEN_DIALOG
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& -->  p1        text
*& <--  p2        text
*&---------------------------------------------------------------------*
FORM open_dialog .DATA:lt_file_table TYPE filetable.DATA:ls_file_table TYPE file_table.DATA:l_rc TYPE i.DATA: lv_filter   TYPE string.lv_filter = 'ALL FILES (*.*)|*.*|EXCEL FILES (*.XLS)|*.XLS|WORD FILES(*.DOC)|*.DOC'.CALL METHOD cl_gui_frontend_services=>file_open_dialogEXPORTINGwindow_title            = '选择文件'default_filename        = '*.XLSX'  "默认excel文件"initial_directory       = 'D:\ '  "默认打开D盘,也可以默认空"multiselection          = ''   "文件单选"CHANGINGfile_table              = lt_file_tablerc                      = l_rcEXCEPTIONSfile_open_dialog_failed = 1cntl_error              = 2error_no_gui            = 3not_supported_by_gui    = 4OTHERS                  = 5.IF sy-subrc <> 0.MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgnoWITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.EXIT.ELSE."选择文件框的赋值 将选择的文件地址写入到地址栏"READ TABLE lt_file_table INTO ls_file_table INDEX 1.IF sy-subrc = 0.p_file =  ls_file_table-filename.REFRESH : lt_file_table.CLEAR:ls_file_table.ENDIF.ENDIF.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form CHECK_FILE
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& -->  p1        text
*& <--  p2        text
*&---------------------------------------------------------------------*
FORM check_file .DATA: lv_s1 TYPE string,lv_s2 TYPE string.IF p_file IS NOT INITIAL.SPLIT p_file AT '.' INTO lv_s1 lv_s2.TRANSLATE lv_s2 TO UPPER CASE.IF lv_s2 <> 'XLS' AND lv_s2 <> 'XLSX' AND lv_s2 <> 'TXT'.MESSAGE '文件格式不对!' TYPE 'S' DISPLAY LIKE 'E'.LEAVE  LIST-PROCESSING.ENDIF.ELSE.MESSAGE '文件名不能为空!' TYPE 'S' DISPLAY LIKE 'E'.LEAVE  LIST-PROCESSING.ENDIF.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form UPLOAD_DOCUMENT
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& -->  p1        text
*& <--  p2        text
*&---------------------------------------------------------------------*
FORM upload_document ."定义表格结构内表。"DATA: lt_excel TYPE TABLE OF zalsmex_tabline, "表格结构。"ls_excel TYPE zalsmex_tabline."ALSMEX_TABLINE是具有Excel数据的表行,有三个组件,row col value 。"DATA:get_file TYPE rlgrap-filename."这里参照系统中的结构字段。"MOVE p_file TO get_file."将地址栏的值赋值给GET_FILE""调用此函数,将Excel中的内容以类似坐标的形式存储到LT_EXCEL内表中。""使用ALSM_EXCEL_TO_INTERNAL_TABLE函数导入数据,一个excel文件最大行数只可为9999,如果超出是无法全部读入内表中的,会丢失其余行。“这个函数可以用:ALSM_EXCEL_TO_INTERNAL_TABLE 替代call function 'ZALSM_EXCEL_TO_INTERNAL_TABLE'     EXPORTINGfilename                = get_filei_begin_col             = 1i_begin_row             = 3i_end_col               = 75i_end_row               = 65535TABLESintern                  = lt_excelEXCEPTIONSinconsistent_parameters = 1upload_ole              = 2OTHERS                  = 3.DELETE lt_excel WHERE row = 1."删除第一行抬头。如果excel文件中不存在抬头的话,可不写此句。"IF lt_excel IS INITIAL.CALL FUNCTION 'POPUP_TO_CONFIRM_WITH_MESSAGE'EXPORTING
*       DEFAULTOPTION = 'Y'diagnosetext1 = '数据错误'
*       DIAGNOSETEXT2 = ' '
*       DIAGNOSETEXT3 = ' 'textline1     = 'Excel表格中没有内容!'titel         = '提示'.RETURN.ENDIF.CLEAR:gt_out.FIELD-SYMBOLS:<fs>.SORT lt_excel BY row col.DATA:num_col TYPE i."将转换后的EXCEL内表中数据按照导入模板顺序依次放入内表,"故应将EXCEL模板顺序和内表顺序保持一致LOOP AT lt_excel INTO ls_excel.num_col = ls_excel-col.ASSIGN COMPONENT  num_col  OF STRUCTURE gs_out TO <fs>.<fs> = ls_excel-value.AT END OF row.APPEND gs_out TO gt_out.CLEAR:gs_out.ENDAT.CLEAR:ls_excel.ENDLOOP.*付款条件SELECTSPRAS,ztermINTO TABLE  @DATA(gt_fktj)  " 付款条件FROM  t052uWHERE  spras  = '1'.  SELECTPARTNER,taxnum,taxnumXLINTO TABLE @DATA(GT_SHUIH)FROM DFKKBPTAXNUMWHERE TAXTYPE = 'CN5' OR TAXTYPE = 'CN0' .LOOP AT gt_out  INTO  gs_out .*是否要给号IF gs_out-bu_group  =  'C009' OR  gs_out-bu_group  =  'C010' .   "这个分组各个公司都不一样IF  gs_out-partner  =  ''.gs_out-zcuowu  = 'X'.gs_out-message1 =  '此分组需要给定供应商编号'.ENDIF.ENDIF.*税号是否存在IF  gs_out-taxnum NE ''.READ TABLE  GT_SHUIH INTO DATA(GS_SHUIH) WITH KEY taxnumXL  = gs_out-taxnum.IF sy-subrc EQ 0.gs_out-message1  =   gs_out-message1 &&  '相同税号已经存在,只能修改。'." gs_out-zcuowu  = 'X'.gs_out-partner = GS_SHUIH-partner.ENDIF.CLEAR GS_SHUIH.READ TABLE  GT_SHUIH INTO DATA(GS_SHUIH2) WITH KEY taxnum  = gs_out-taxnum.IF sy-subrc EQ 0.gs_out-message1  =   gs_out-message1 &&  '相同税号已经存在,只能修改。'." gs_out-zcuowu  = 'X'.gs_out-partner = GS_SHUIH2-partner.ENDIF.CLEAR GS_SHUIH2.ELSE.gs_out-message1  =   gs_out-message1 &&  '税号不能为空!'.gs_out-zcuowu  = 'X'.ENDIF."付款条款的检查IF  gs_out-zterm NE ''  .READ TABLE  gt_fktj  INTO DATA(gs_fktj)  WITH KEY zterm  = gs_out-zterm.IF sy-subrc <> 0.gs_out-message1  =   gs_out-message1 &&  '付款条款不存在!'.gs_out-zcuowu  = 'X'.ENDIF.CLEAR :gs_fktj.ENDIF.IF  gs_out-zterm2 NE ''  .READ TABLE  gt_fktj  INTO DATA(gs_fktj2)  WITH KEY zterm  = gs_out-zterm2.IF sy-subrc <> 0.gs_out-message1  =   gs_out-message1 &&  '付款条款不存在!'.gs_out-zcuowu  = 'X'.ENDIF.CLEAR :gs_fktj2.ENDIF.* 分组检查-----IF gs_out-bu_group =  'C001'  ."分组有需要调整哟ELSE.gs_out-message1  =   gs_out-message1 &&  '分组不存在!'.gs_out-zcuowu  = 'X'.ENDIF.MODIFY gt_out FROM gs_out.CLEAR gs_out .ENDLOOP.ENDFORM.*&---------------------------------------------------------------------*
*&      Form  FORM_SHOWDATA
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM form_showdata .CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY_LVC'EXPORTINGi_callback_program       = sy-repidis_layout_lvc            = gs_layouti_save                   = 'A'it_fieldcat_lvc          = gt_fieldcat[]i_callback_pf_status_set = 'FRM_SET_STATUS'i_callback_user_command  = 'USER_COMMAND'TABLESt_outtab                 = gt_outEXCEPTIONSprogram_error            = 1OTHERS                   = 2.
ENDFORM.
*&---------------------------------------------------------------------*
*&      FORM  FRM_SET_STATUS
*&---------------------------------------------------------------------*
*       TEXT
*----------------------------------------------------------------------*
*      -->RT_EXTAB   TEXT
*----------------------------------------------------------------------*
FORM frm_set_status USING rt_extab TYPE slis_t_extab.SET PF-STATUS 'STANDARD' .
ENDFORM. "FRM_SET_STATUS
*---------------------------------------------------------------------*
*       FORM USER_COMMAND                                             *
*---------------------------------------------------------------------*
*       ........                                                      *
*--------------------------------------------------------------------*
*  -->  R_UCOMM                                                       *
*  -->  RS_SELFIELD                                                   *
*---------------------------------------------------------------------*
FORM user_command USING r_ucomm LIKE sy-ucommrs_selfield TYPE slis_selfield.DATA: lr_grid TYPE REF TO cl_gui_alv_grid.CALL FUNCTION 'GET_GLOBALS_FROM_SLVC_FULLSCR'IMPORTINGe_grid = lr_grid.CALL METHOD lr_grid->check_changed_data.rs_selfield-refresh = 'X'.rs_selfield-col_stable = 'X'.rs_selfield-row_stable = 'X'.CASE r_ucomm.WHEN '&IC1' . "双击事件IF rs_selfield-value IS INITIAL."值不为空r_ucomm = '&ETA'.ENDIF.CHECK rs_selfield-value IS NOT INITIAL.READ TABLE gt_out INTO gs_out  INDEX rs_selfield-tabindex.CASE rs_selfield-fieldname.WHEN 'PARTNER'. "CHECK gS_out-partner IS NOT INITIAL.SET PARAMETER ID 'BPA' FIELD gS_out-partner.CALL TRANSACTION 'BP' AND SKIP FIRST SCREEN.WHEN OTHERS.r_ucomm = '&ETA'.ENDCASE.CLEAR gs_out.WHEN 'ZIMPORT'.PERFORM badi_daoru.CALL METHOD lr_grid->refresh_table_display.WHEN OTHERS.ENDCASE.ENDFORM.*&---------------------------------------------------------------------*
*& Form BADI_DAORU
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& -->  p1        text
*& <--  p2        text
*&---------------------------------------------------------------------*
FORM badi_daoru .DATA:ls_cvis_bp_general           TYPE cvis_bp_general,lt_cvis_bp_general           LIKE TABLE OF ls_cvis_bp_general, "一般数据ls_cvis_bp_role              TYPE cvis_bp_role,lt_cvis_bp_role              LIKE TABLE OF cvis_bp_role, "角色ls_cvis_bp_bank_details      TYPE    cvis_bp_bank_details, "lt_cvis_bp_bank_details      LIKE TABLE OF cvis_bp_bank_details, "银行ls_cvis_bp_tax_number        TYPE cvis_bp_tax_number,lt_cvis_bp_tax_number        LIKE TABLE OF ls_cvis_bp_tax_number,ls_cvis_bp_address           TYPE cvis_bp_address,lt_cvis_bp_address           LIKE TABLE OF ls_cvis_bp_address,ls_cvis_bp_address_teleno    TYPE cvis_bp_address_teleno, "电话号码lt_cvis_bp_address_teleno    LIKE TABLE OF ls_cvis_bp_address_teleno,ls_cvis_bp_address_faxno     TYPE cvis_bp_address_faxno,lt_cvis_bp_address_faxno     LIKE TABLE OF ls_cvis_bp_address_faxno, "传真号码ls_cvis_bp_address_email     TYPE cvis_bp_address_email,lt_cvis_bp_address_email     LIKE TABLE OF ls_cvis_bp_address_email, "邮箱号码ls_cvis_bp_return            TYPE cvis_bp_return,lt_cvis_bp_return            LIKE  TABLE OF cvis_bp_return,ls_cvis_supplier_general     TYPE cvis_supplier_general,lt_cvis_supplier_general     TYPE  TABLE OF    cvis_supplier_general,ls_cvis_supplier_company     TYPE cvis_supplier_company,lt_cvis_supplier_company     LIKE TABLE OF cvis_supplier_company,ls_cvis_supplier_purchasing  TYPE cvis_supplier_purchasing,lt_cvis_supplier_purchasing  LIKE TABLE OF cvis_supplier_purchasing, "采购视图ls_cvis_supplier_purchasing2 TYPE cvis_supplier_purchasing2,lt_cvis_supplier_purchasing2 LIKE TABLE OF cvis_supplier_purchasing2, "采购视图ls_sup_purch_functions       TYPE cvis_supplier_purch_func,lt_sup_purch_functions       LIKE TABLE OF cvis_supplier_purch_func,is_supplier_contacts         TYPE cvis_supplier_contacts,it_supplier_contacts         LIKE TABLE OF cvis_supplier_contacts,is_sup_cont_address1         TYPE cvis_supp_cont_address1,it_sup_cont_address1         LIKE  TABLE OF cvis_supp_cont_address1,is_sup_cont_teleno1          TYPE cvis_supp_cont_teleno1,it_sup_cont_teleno1          LIKE  TABLE OF cvis_supp_cont_teleno1,is_sup_cont_fax1             TYPE  cvis_supp_cont_fax1,it_sup_cont_fax1             LIKE TABLE OF cvis_supp_cont_fax1,is_sup_cont_email1           TYPE cvis_supp_cont_email1,it_sup_cont_email1           LIKE TABLE OF cvis_supp_cont_email1,lv_bpartner                  TYPE bu_partner,ls_tb003i                    TYPE tb003i,lt_tb003i                    LIKE TABLE OF ls_tb003i,lv_guid                      TYPE but000-partner_guid,lv_object_task               TYPE bus_ei_object_task, "I为创建,U修改lv_bkvid                     TYPE bu_bkvid,lv_index                     TYPE sy-tabix,lv_category                  TYPE bu_id_category,lv_bezei                     TYPE bezei20,lv_run_id                    TYPE cvi_run_id,lv_lines                     TYPE i.*长文本参数DATA:ls_line  TYPE tline,lt_line  TYPE TABLE OF tline,ls_thead TYPE thead-tdname.DATA:ls_strlen TYPE i,lv_strlen TYPE i,i_subruc  TYPE i.*  CLEAR ls_header.LOOP AT gt_out ASSIGNING FIELD-SYMBOL(<fs_partner>) WHERE sel = 'X'   AND zcuowu = ''."  PERFORM frm_partner_alpha_input CHANGING <fs_partner>-partner.  "业务伙伴加零IF <fs_partner>-partner IS NOT INITIAL.CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'EXPORTINGinput  = <fs_partner>-partnerIMPORTINGoutput = <fs_partner>-partner.ENDIF.*统驭科目:加零IF <fs_partner>-akont IS NOT INITIAL.CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'EXPORTINGinput  = <fs_partner>-akontIMPORTINGoutput = <fs_partner>-akont.ENDIF.*语言IF <fs_partner>-langu IS NOT INITIAL.CALL FUNCTION 'CONVERSION_EXIT_ISOLA_INPUT'EXPORTINGinput            = <fs_partner>-languIMPORTINGoutput           = <fs_partner>-langu     "语言EXCEPTIONSunknown_language = 1OTHERS           = 2.IF sy-subrc <> 0."Implement suitable error handling hereENDIF.ENDIF.*查业务伙伴是否存在CLEAR lv_guid.SELECT SINGLE partner_guid INTO lv_guidFROM but000 WHERE partner = <fs_partner>-partner.*判断是修改还是新建IF sy-subrc = 0.lv_object_task = 'U'.  "修改BPls_cvis_bp_general-bpartnerguid = lv_guid.ELSE.lv_object_task = 'I'.  "创建BP*lv_guid 是 BAPI 的 CHAR 32 格式业务伙伴地址的全局唯一标识CALL FUNCTION 'RS_DME_MG_GENERATE_GUID'IMPORTINGe_guid_16 = lv_guid.
*          E_GUID_32       = ls_cvis_bp_general-bpartnerguid .ENDIF.ls_cvis_bp_general-object_task = lv_object_task.*runid  区分用的IF lv_run_id IS INITIAL.lv_run_id = '2000000' .ELSE.lv_run_id = lv_run_id + 1.ENDIF.* bp_general————————一般数据赋值——————————————————————————————————————ls_cvis_bp_general-run_id = lv_run_id.".'1000000'.ls_cvis_bp_general-category = '2'.*业务分组IF <fs_partner>-bu_group NE ''  .ls_cvis_bp_general-grouping = <fs_partner>-bu_group. "业务合作伙伴组ELSE.ls_cvis_bp_general-grouping = '0001'. "业务合作伙伴组ENDIF.*伙伴编码,名称ls_cvis_bp_general-bpartner = <fs_partner>-partner.ls_cvis_bp_general-name1 = <fs_partner>-name_org1."名称·1ls_cvis_bp_general-name2 = <fs_partner>-name_org2."名称2,联系人*搜索项ls_cvis_bp_general-searchterm1 = <fs_partner>-bu_sort1.APPEND ls_cvis_bp_general TO lt_cvis_bp_general.CLEAR ls_cvis_bp_general.
*
**———————————————————————以上是一般数据的赋值———————————————————————————————————————————————*——ls_cvis_bp_address——————————————BP Address Data——— 地址数据赋值—————————————————————————————————ls_cvis_bp_address-run_id    = lv_run_id. "ls_cvis_bp_address-guid    = lv_guid. "ls_cvis_bp_address-comm_type = 'INT'.ls_cvis_bp_address-langu = sy-langu.ls_cvis_bp_address-street =  <fs_partner>-street."街道IF <fs_partner>-post_code1 = ''.   "为空就填写888ls_cvis_bp_address-postl_cod1  =  '888888'.   ELSE.ls_cvis_bp_address-postl_cod1  =  <fs_partner>-post_code1."邮政编码ENDIF.ls_cvis_bp_address-city  =  <fs_partner>-city1.ls_cvis_bp_address-region = <fs_partner>-regio.ls_cvis_bp_address-country = <fs_partner>-land1.APPEND ls_cvis_bp_address TO lt_cvis_bp_address.CLEAR: ls_cvis_bp_address..*电话号码ls_cvis_bp_address_teleno-run_id    = lv_run_id. "电话号码ls_cvis_bp_address_teleno-country   = <fs_partner>-land1.ls_cvis_bp_address_teleno-telephone = <fs_partner>-tel_number.       "电话ls_cvis_bp_address_teleno-extension = <fs_partner>-tel_extens.       "电话分机号APPEND ls_cvis_bp_address_teleno TO lt_cvis_bp_address_teleno .CLEAR ls_cvis_bp_address_teleno.*移动电话IF <fs_partner>-mob_number IS NOT INITIAL.ls_cvis_bp_address_teleno-run_id    = lv_run_id. "电话号码ls_cvis_bp_address_teleno-country   = <fs_partner>-land1.ls_cvis_bp_address_teleno-telephone = <fs_partner>-mob_number.       "电话ls_cvis_bp_address_teleno-r_3_user  = '2'."是否移动电话APPEND ls_cvis_bp_address_teleno TO lt_cvis_bp_address_teleno .CLEAR ls_cvis_bp_address_teleno.ENDIF.*传真ls_cvis_bp_address_faxno-run_id    = lv_run_id.ls_cvis_bp_address_faxno-country   = <fs_partner>-land1.ls_cvis_bp_address_faxno-fax       = <fs_partner>-fax_number.  "传真ls_cvis_bp_address_faxno-extension = <fs_partner>-fax_extens.  "传真分机号APPEND ls_cvis_bp_address_faxno TO lt_cvis_bp_address_faxno. "传真号码CLEAR ls_cvis_bp_address_faxno.*电子邮件ls_cvis_bp_address_email-run_id = lv_run_id.IF <fs_partner>-smtp_addr IS INITIAL.ls_cvis_bp_address_email-e_mail = '888888@126.COM'."<fs_PARTNER>-ad_smtpadr.  "电子邮件地址ELSE.ls_cvis_bp_address_email-e_mail = <fs_partner>-smtp_addr.  "电子邮件地址ENDIF.APPEND ls_cvis_bp_address_email TO lt_cvis_bp_address_email. "邮箱号码CLEAR  ls_cvis_bp_address_email.***——————————————地址数据赋值————————————————————————————————————————————————————————————————*——————————————————BP角色——————————————————————————————————————————————ls_cvis_bp_role-run_id =  lv_run_id.                  "'1000000'.ls_cvis_bp_role-data_key = 'FLVN00'." 'FLVN00'.APPEND ls_cvis_bp_role TO lt_cvis_bp_role.CLEAR ls_cvis_bp_role.ls_cvis_bp_role-run_id =  lv_run_id.                  "'1000000'.ls_cvis_bp_role-data_key = 'FLVN01'." 'FLVN00'.APPEND ls_cvis_bp_role TO lt_cvis_bp_role.CLEAR ls_cvis_bp_role.ls_cvis_supplier_general-run_id =  lv_run_id.           "供应商一般数据ls_cvis_supplier_general-object_task = lv_object_task.IF  <fs_partner>-partner NE '' .ls_cvis_supplier_general-lifnr =  <fs_partner>-partner.ENDIF.APPEND ls_cvis_supplier_general TO lt_cvis_supplier_general.CLEAR ls_cvis_supplier_general.
*———————————————————BP角色—————————————————————————————————————————————*——税号—————查重和赋值———————————————————————————————————————————————————————————————ls_cvis_bp_tax_number-run_id = lv_run_id.ls_cvis_bp_tax_number-taxtype = 'CN5'.ls_cvis_bp_tax_number-taxnumber = <fs_partner>-taxnum."   ls_cvis_bp_tax_number-taxnumxl = <fs_partner>-taxnum.APPEND ls_cvis_bp_tax_number TO lt_cvis_bp_tax_number.CLEAR ls_cvis_bp_tax_number.*—————税号—————————————————————————————————————————————————————————*————银行信息赋值————————————————————————————————————————————______________________________________IF  <fs_partner>-bank_no NE '' .lv_bkvid = lv_bkvid + 1.CONDENSE lv_bkvid NO-GAPS.lv_index = strlen( lv_bkvid ).lv_index = 4 - lv_index.DO lv_index TIMES.lv_bkvid = '0' && lv_bkvid.ENDDO.ls_cvis_bp_bank_details-run_id  = lv_run_id.ls_cvis_bp_bank_details-bank_ctry  = <fs_partner>-bank_land.     "银行国家ls_cvis_bp_bank_details-data_key  = lv_bkvid.     "银行国家ls_cvis_bp_bank_details-bank_key  = <fs_partner>-bank_id.    "银行代码ls_cvis_bp_bank_details-bank_acct = <fs_partner>-bank_no.    "银行账号ls_cvis_bp_bank_details-bank_ref  = <fs_partner>-butobk_bkref ."参考明细,账号写不下才放尾数在这ls_cvis_bp_bank_details-accountholder = <fs_partner>-koinh."账号持有人。APPEND ls_cvis_bp_bank_details TO lt_cvis_bp_bank_details.CLEAR ls_cvis_bp_bank_details.ENDIF.
*————————银行信息赋值——————————————————————————————————————————————————————————————————————————————*——————————公司代码数据——————————————————————————————————————————————————————————————ls_cvis_supplier_company-run_id = lv_run_id.ls_cvis_supplier_company-bukrs =  <fs_partner>-bukrs. "公司代码ls_cvis_supplier_company-akont =  <fs_partner>-akont. "统驭科目ls_cvis_supplier_company-zuawa =   <fs_partner>-zuawa."排序码ls_cvis_supplier_company-zterm =   <fs_partner>-zterm. "付款条件ls_cvis_supplier_company-reprf  =   <fs_partner>-reprf ."双重发票校验APPEND  ls_cvis_supplier_company TO  lt_cvis_supplier_company.CLEAR  ls_cvis_supplier_company.
*————————————————————————————————————————————————————————————————————*———————采购视图赋值—————————————————————————————————————————————————————————————ls_cvis_supplier_purchasing-run_id = lv_run_id.ls_cvis_supplier_purchasing-ekorg =  <fs_partner>-ekorg. "采购组织ls_cvis_supplier_purchasing-waers =   <fs_partner>-waers.   "币种ls_cvis_supplier_purchasing-zterm =   <fs_partner>-zterm2 ."付款条件ls_cvis_supplier_purchasing-webre =   <fs_partner>-webre ."基于收货的发票校验APPEND ls_cvis_supplier_purchasing TO lt_cvis_supplier_purchasing.CLEAR ls_cvis_supplier_purchasing.*————————————————————————————————————————————————————————————————————————————————————**_____________________________业务伙伴功能————————————————————————————————SELECT SINGLELFA1~LIFNR,LFA1~LAND1,LFM1~EKORG,"采购组织LFB1~BUKRS "公司代码INTO  @DATA(GS_LIFNR)FROM  LFA1LEFT  JOIN  LFB1  ON  LFA1~lifnr = LFB1~lifnrLEFT  JOIN  LFM1  ON  LFA1~lifnr =  LFM1~lifnrWHERE LFA1~lifnr = @<fs_partner>-partnerAND  LFM1~ekorg = @<fs_partner>-ekorgAND  LFB1~bukrs = @<fs_partner>-bukrs.
IF GS_LIFNR-bukrs = '' AND GS_LIFNR-ekorg = '' .ls_sup_purch_functions-run_id  = lv_run_id."   ls_sup_purch_functions-parza  =  1.ls_sup_purch_functions-ekorg  = <fs_partner>-ekorg.ls_sup_purch_functions-parvw  = 'BA'."'OA'.ls_sup_purch_functions-partner =  <fs_partner>-partner.APPEND   ls_sup_purch_functions  TO  lt_sup_purch_functions.CLEAR ls_sup_purch_functions.ls_sup_purch_functions-run_id  = lv_run_id.ls_sup_purch_functions-ekorg  = <fs_partner>-ekorg.ls_sup_purch_functions-parvw  = 'LF'. "'VN'.ls_sup_purch_functions-partner =  <fs_partner>-partner.APPEND   ls_sup_purch_functions  TO  lt_sup_purch_functions.CLEAR ls_sup_purch_functions.ls_sup_purch_functions-run_id  = lv_run_id.ls_sup_purch_functions-ekorg  = <fs_partner>-ekorg.ls_sup_purch_functions-parvw  = 'RS'."'PI'.ls_sup_purch_functions-partner =  <fs_partner>-partner.APPEND   ls_sup_purch_functions  TO  lt_sup_purch_functions.CLEAR ls_sup_purch_functions.
ENDIF.
CLEAR GS_LIFNR.
*————————————————————业务伙伴功能——————————————————————————————————————————
"调取BAPI"CALL FUNCTION 'RFC_CVI_EI_INBOUND_MAIN'EXPORTINGiv_docommit            = 'X'
*         IV_CREATE_APPLOG       =
*         IV_SUPPRESS_TAXJUR_CHECK           =TABLESit_bp_general          = lt_cvis_bp_generalit_bp_role             = lt_cvis_bp_role
*         IT_BP_INDUSTRY         =
*         IT_BP_IDENT_NUMBERS    =it_bp_bank_details     = lt_cvis_bp_bank_detailsit_bp_tax_number       = lt_cvis_bp_tax_number"  IT_BP_TAX_NUMBER_COMMON            =it_bp_address          = lt_cvis_bp_address"  IT_BP_ADDRESS_USAGE    =it_bp_address_teleno   = lt_cvis_bp_address_teleno"IT_BP_ADDRESS_TELENO_REMARKS       =it_bp_address_faxno    = lt_cvis_bp_address_faxnoit_bp_address_email    = lt_cvis_bp_address_emailit_sup_general         = lt_cvis_supplier_generalit_sup_company         = lt_cvis_supplier_companyit_sup_purchasing      = lt_cvis_supplier_purchasingit_sup_purch_functions = lt_sup_purch_functionsct_return              = lt_cvis_bp_return..CLEAR ls_cvis_bp_return.LOOP AT lt_cvis_bp_return INTO ls_cvis_bp_return  WHERE type = 'E' OR type = 'A' .IF sy-subrc = 0.CONCATENATE <fs_partner>-message1 ls_cvis_bp_return-message  sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4INTO <fs_partner>-message1 SEPARATED BY '/'.i_subruc = 1.<fs_partner>-statu1 = '@0A@'.ENDIF.ENDLOOP.LOOP AT lt_cvis_bp_return INTO ls_cvis_bp_return  WHERE type = 'S'.<fs_partner>-partner = ls_cvis_bp_return-object_key.<fs_partner>-message1 =  <fs_partner>-message1 &&  '修改或者导入成功'.<fs_partner>-statu1 = '@08@'.ENDLOOP.
*REFRESH:lt_cvis_bp_general,lt_cvis_bp_role,lt_cvis_bp_bank_details,lt_cvis_bp_tax_number,lt_cvis_bp_address,lt_cvis_bp_address_teleno,lt_cvis_bp_address_faxno,lt_cvis_bp_address_email,lt_cvis_supplier_general,lt_cvis_supplier_company,lt_cvis_supplier_purchasing,lt_cvis_bp_return.CLEAR:lv_category, lv_bkvid,lv_index.ENDLOOP.
ENDFORM.FORM frm_partner_alpha_input CHANGING cv_bpartner.CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'EXPORTINGinput  = cv_bpartnerIMPORTINGoutput = cv_bpartner.ENDFORM.
*&---------------------------------------------------------------------*
*& Form CONVERSION_EXIT_PARVW_INPUT
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*&      <-- LS_HEADER_PARVW
*&---------------------------------------------------------------------*
FORM conversion_exit_parvw_input CHANGING cv_parvw.CALL FUNCTION 'CONVERSION_EXIT_PARVW_INPUT'EXPORTINGinput  = cv_parvwIMPORTINGoutput = cv_parvw.ENDFORM.

使用代码的注意点
1.这个程序是在excel中填写好数据,再导入系统的,导入的格式顺序请你参考源代码中的定义顺序。
2.从excel 的第一列第三行开始写具体的供应商主数据
3.里面有邮政编码和邮箱,没填写就自动填写888了。使用时候要注意。
4.这个代码既可以更新也可创建供应商主数据。
5.一定要根据实际情况去调整程序,不能一味照搬。

分享使我快乐,我是寒武青锋。

记得点赞哟。
鸣谢:彭老师提供帮助。

ABAP 供应商主数据批量导入相关推荐

  1. SAP ABAP 供应商主数据的 查询-创建-修改-锁定 API或BAPI

    文章目录 前言 范例代码 总结 前言 采用BDC创建客商主数据复用性低,且时常发生错误,比如字段必输性调整造成报错等 现通过API或BAPI去查询,创建,修改,锁定 以下为实际做的一个RFC接口 范例 ...

  2. oracle导入excel字段超过4000字符数据_产品思考:B端产品中,为什么批量导入功能很重要?...

    B端产品的重要价值是提高企业的办公效率,在企业的日常工作中批量录入数据的场景很多,所以批量导入是b端设计中很重要的一个功能.本文作者结合案例,分享了自己关于B端产品批量导入功能的思考. 在做b端产品的 ...

  3. SAP中使用LSMW批量导入总账科目

    遗留数据迁移平台,可以导入主数据:科目.资产主数据.物料主数据.供应商.客户主数据.成本中心.内部订单数据.... FSP0 FSS0 分层导入:适合集团和分公司分别维护科目主数据,集团和公司自行维护 ...

  4. SAP RETAIL 对WG22执行LSMW批量导入物料组描述信息时需要前台执行

    SAP RETAIL 对WG22执行LSMW批量导入物料组描述信息时需要前台执行 在SAP RETAIL系统中,物料组的维护不再是后台配置方式了,而是以前台方式作为主数据来维护进入SAP系统上.相关事 ...

  5. SAP MM模块业务流程------物料主数据/供应商主数据/信息维护流程/库存物料采购流程

    物料主数据 新物料申请流程: 提交一个物料主数据电子单----->审批(包括需要在SAP系统添加的主数据)------>SAP系统维护并公布 修改流程: 提交修改物料主数据-------& ...

  6. SAP ABAP 物料主数据的视图维护状态

    SAP ABAP 物料主数据的视图维护状态 引言: 物料主数据的视图维护状态会经常使用,是物料主数据批量创建/修改的逻辑路由. 关键字:SAP ABAP VPSTA PSTAT T132T 文章目录 ...

  7. 客户/供应商主数据批导

    客户/供应商主数据维护中,SAP提供了两个强大的类cmd_ei_api =>maintain_bapi和VMD_EI_API 下面是客户主数据维护的例子,供应商的类似.当客户编码为数据类型时,一 ...

  8. oracle物料 批量导入,3.9批量导入一揽子采购协议

    3.9.1   业务方案描述 一揽子采购协议可以手工维护,也可以批量导入,批量导入一揽子采购协议的功能,以提高价格维护的效率. 采购一揽子协议是区分OU的,不同OU的采购协议需要单独维护. 批量导入一 ...

  9. 3.9 批量导入一揽子采购协议

    3.9.1   业务方案描述 一揽子采购协议可以手工维护,也可以批量导入,批量导入一揽子采购协议的功能,以提高价格维护的效率. 采购一揽子协议是区分OU的,不同OU的采购协议需要单独维护. 批量导入一 ...

最新文章

  1. Dubbo 同步、异步调用的几种方式
  2. 零基础python嵌入式开发_零基础Python入门教程
  3. html 下标签,html标签下
  4. HDOJ1394 Minimum Inversion Number【线段树】
  5. python实现决策树算法sklearn_python sklearn-05:决策树及随机森林
  6. 原来AI可以这样学?让人欲罢不能的AI学习神器!
  7. ios 重复引用 静态库_iOS项目引用静态库文件.a
  8. CentOS7 安装lua环境
  9. 343. 整数拆分(JavaScript)
  10. oracle突然挂了服务全部消失,OracleService服务不见了|OracleServiceXE服务没有了
  11. 移动端vue实现部门结构功能_基于Vue的组织架构树组件
  12. asp.net夜话之十一:web.config详解
  13. java泛型与集合中文版,第8章java泛型与集合类.doc
  14. PostgreSQL创建数据库用户
  15. mysql中的replication_MySQL Replication(主从服务器)配置实例
  16. c++ 使用nacos_使用SpringBoot和Seata实现Dubbo分布式事务管理
  17. 使用java 实现 word 转换成图片
  18. Windows Redis 整理
  19. 微信小程序打印实时日志
  20. SQL高级查询—实验报告

热门文章

  1. 软件质量控制问题与质量控制技术
  2. 修改cmd编码为UTF-8
  3. html5绘制好看的时钟,利用纯html5绘制出来的一款非常漂亮的时钟
  4. 工业智能网关BL110应用之64:如何实现智能楼宇控制BACnet 接入金鸽MQTT云平台
  5. node解决安装包后xx-v命令无效
  6. 化工企业安全生产管理监控预警系统软件
  7. 一文搞懂地域和可用区如何选择
  8. 2021届 联发科技视频一面 嵌入式软件
  9. 软件测试入门篇(五)测试点提炼
  10. 【源码】风向风速图绘制函数WindRose