ABAP 供应商主数据批量导入
使用到的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 供应商主数据批量导入相关推荐
- SAP ABAP 供应商主数据的 查询-创建-修改-锁定 API或BAPI
文章目录 前言 范例代码 总结 前言 采用BDC创建客商主数据复用性低,且时常发生错误,比如字段必输性调整造成报错等 现通过API或BAPI去查询,创建,修改,锁定 以下为实际做的一个RFC接口 范例 ...
- oracle导入excel字段超过4000字符数据_产品思考:B端产品中,为什么批量导入功能很重要?...
B端产品的重要价值是提高企业的办公效率,在企业的日常工作中批量录入数据的场景很多,所以批量导入是b端设计中很重要的一个功能.本文作者结合案例,分享了自己关于B端产品批量导入功能的思考. 在做b端产品的 ...
- SAP中使用LSMW批量导入总账科目
遗留数据迁移平台,可以导入主数据:科目.资产主数据.物料主数据.供应商.客户主数据.成本中心.内部订单数据.... FSP0 FSS0 分层导入:适合集团和分公司分别维护科目主数据,集团和公司自行维护 ...
- SAP RETAIL 对WG22执行LSMW批量导入物料组描述信息时需要前台执行
SAP RETAIL 对WG22执行LSMW批量导入物料组描述信息时需要前台执行 在SAP RETAIL系统中,物料组的维护不再是后台配置方式了,而是以前台方式作为主数据来维护进入SAP系统上.相关事 ...
- SAP MM模块业务流程------物料主数据/供应商主数据/信息维护流程/库存物料采购流程
物料主数据 新物料申请流程: 提交一个物料主数据电子单----->审批(包括需要在SAP系统添加的主数据)------>SAP系统维护并公布 修改流程: 提交修改物料主数据-------& ...
- SAP ABAP 物料主数据的视图维护状态
SAP ABAP 物料主数据的视图维护状态 引言: 物料主数据的视图维护状态会经常使用,是物料主数据批量创建/修改的逻辑路由. 关键字:SAP ABAP VPSTA PSTAT T132T 文章目录 ...
- 客户/供应商主数据批导
客户/供应商主数据维护中,SAP提供了两个强大的类cmd_ei_api =>maintain_bapi和VMD_EI_API 下面是客户主数据维护的例子,供应商的类似.当客户编码为数据类型时,一 ...
- oracle物料 批量导入,3.9批量导入一揽子采购协议
3.9.1 业务方案描述 一揽子采购协议可以手工维护,也可以批量导入,批量导入一揽子采购协议的功能,以提高价格维护的效率. 采购一揽子协议是区分OU的,不同OU的采购协议需要单独维护. 批量导入一 ...
- 3.9 批量导入一揽子采购协议
3.9.1 业务方案描述 一揽子采购协议可以手工维护,也可以批量导入,批量导入一揽子采购协议的功能,以提高价格维护的效率. 采购一揽子协议是区分OU的,不同OU的采购协议需要单独维护. 批量导入一 ...
最新文章
- Dubbo 同步、异步调用的几种方式
- 零基础python嵌入式开发_零基础Python入门教程
- html 下标签,html标签下
- HDOJ1394 Minimum Inversion Number【线段树】
- python实现决策树算法sklearn_python sklearn-05:决策树及随机森林
- 原来AI可以这样学?让人欲罢不能的AI学习神器!
- ios 重复引用 静态库_iOS项目引用静态库文件.a
- CentOS7 安装lua环境
- 343. 整数拆分(JavaScript)
- oracle突然挂了服务全部消失,OracleService服务不见了|OracleServiceXE服务没有了
- 移动端vue实现部门结构功能_基于Vue的组织架构树组件
- asp.net夜话之十一:web.config详解
- java泛型与集合中文版,第8章java泛型与集合类.doc
- PostgreSQL创建数据库用户
- mysql中的replication_MySQL Replication(主从服务器)配置实例
- c++ 使用nacos_使用SpringBoot和Seata实现Dubbo分布式事务管理
- 使用java 实现 word 转换成图片
- Windows Redis 整理
- 微信小程序打印实时日志
- SQL高级查询—实验报告