总帐凭证导入EXCEL,并且批量输入(FB50)的BDC
来源:互联网 发布:java编写计算器教程 编辑:程序博客网 时间:2024/05/21 08:45
总帐凭证批量输入BDC示例,其中关于循环添加项目的部分,没有做便于大家清楚不循环前是怎样的个状态,
*&---------------------------------------------------------------------**& Report Z_TEST_FB50*&*&---------------------------------------------------------------------**&*&*&---------------------------------------------------------------------*REPORT Z_TEST_FB50.DATA: BEGIN OF ITAB OCCURS 0, BLDAT LIKE BKPF-BLDAT, "凭证日期 WAERS LIKE BKPF-WAERS, "公司代码 1000/2000 BUDAT LIKE BKPF-BUDAT, "过帐日期 XBLNR LIKE BKPF-XBLNR, "参照 BKTXT LIKE BKPF-BKTXT, "抬头文本 BVORG LIKE BKPF-BVORG, "往来凭证号 HKONT LIKE BSEG-HKONT, "科目 SHKZG LIKE BSEG-SHKZG, "借/贷 H/S WRBTR LIKE BSEG-WRBTR, "金额 MWSKZ like BSEG-MWSKZ, "税金 ZUONR LIKE BSEG-ZUONR, "项目分配编号 SGTXT LIKE BSEG-SGTXT, "项目文本 KOSTL LIKE BSEG-KOSTL, "成本中心 PRCTR LIKE BSEG-PRCTR, "利润中心 END OF ITAB.DATA BEGIN OF IT_BDC OCCURS 0. "IT_BDC是定义了内表,该内表就是存放BDC的操作步骤 INCLUDE STRUCTURE BDCDATA.DATA END OF IT_BDC.DATA: BEGIN OF GT_MESSTAB OCCURS 10. "message table INCLUDE STRUCTURE BDCMSGCOLL.DATA: END OF GT_MESSTAB.DATA: MESSTAB LIKE BDCMSGCOLL OCCURS 0 WITH HEADER LINE."MESSTAB中保存的是执行完BDC系统的返回信息DATA: WA_MESSTAB LIKE BDCMSGCOLL, LC_INFORECORD(10) TYPE C.DATA: LC_LINE TYPE I.DATA: BEGIN OF WA_RE_VAL, ZZBID(18) TYPE C, STATUS(10) TYPE C, TEXT(100) TYPE C, END OF WA_RE_VAL.DATA: GV_GROUP(12) TYPE C VALUE 'FB50L_ORD', "BDC Name GV_USER(12) TYPE C, "BDC User GV_KEEP(1) TYPE C VALUE 'X', " ' '=Delete,'X'=keep after processing GV_HOLDDATE LIKE SY-DATUM. "DateTYPE-POOLS: slis.DATA: i_fieldcat TYPE slis_t_fieldcat_alv WITH HEADER LINE, "slis_t_fieldcat_alv WITH HEADER LINE,slis_t_fieldcat_alv i_fieldcat_alv TYPE slis_t_fieldcat_alv WITH HEADER LINE, i_events TYPE slis_t_event, "alv事件 w_events LIKE LINE OF i_events, gd_tab_group TYPE slis_t_sp_group_alv,* gd_layout TYPE lvc_s_layo, "slis_layout_alv, gd_layout TYPE slis_layout_alv, usercommand TYPE slis_fieldname VALUE 'USERCOMMAND', gd_repid LIKE sy-repid.CONSTANTS: c_begin_row TYPE i VALUE 1, "Beginning row of excel file c_begin_col TYPE i VALUE 1, "Beginning column of excel file c_end_row TYPE i VALUE 9999, "Ending row of excel file c_end_col TYPE i VALUE 55. "Ending column of excel filePARAMETERS: BDCTYPE(1) TYPE C DEFAULT 'B' NO-DISPLAY,* BDCMODE LIKE BDCRUN-BDC_AMODUS DEFAULT 'A' NO-DISPLAY. BDCMODE LIKE BDCRUN-BDC_AMODUS DEFAULT 'N' NO-DISPLAY.SELECTION-SCREEN BEGIN OF BLOCK b2 WITH FRAME TITLE t2.*PARAMETERS:cc AS CHECKBOX DEFAULT 'X'.PARAMETERS: pc_file(80).SELECTION-SCREEN END OF BLOCK b2.INITIALIZATION.* t1 = '查询条件'. t2 = '文件上传'.AT SELECTION-SCREEN ON VALUE-REQUEST FOR pc_file. PERFORM sub_find USING pc_file.*&---------------------------------------------------------------------**& Form sub_find*&---------------------------------------------------------------------** text*----------------------------------------------------------------------** -->PC_FILE text*----------------------------------------------------------------------*FORM sub_find USING pc_file.* Data for open dialog DATA: l_filetab TYPE filetable, l_rc TYPE i. CLEAR l_filetab. REFRESH l_filetab.* Open dialog CALL METHOD cl_gui_frontend_services=>file_open_dialog EXPORTING* WINDOW_TITLE = 'SAP Custom - Open File'* DEFAULT_EXTENSION = default_filename = '*.xls'* FILE_FILTER = '*.xls' initial_directory = 'd:\' multiselection = '' CHANGING file_table = l_filetab rc = l_rc EXCEPTIONS cntl_error = 1 error_no_gui = 2 not_supported_by_gui = 3 OTHERS = 4.* Get file path CHECK l_rc EQ 1. READ TABLE l_filetab INDEX 1 INTO pc_file.ENDFORM.START-OF-SELECTION. PERFORM uploaddata. "从PC中上传文件到内表中 PERFORM layout_build. "2.用于定义ALV表单的相关格式、属性 PERFORM fields_build. "3.用来定义表单中的各个列的相关信息,比如列名等 PERFORM display_data. "4.用来显示ALV表单END-OF-SELECTION.*---------------------------------FORM TOOLBAR USING rt_extab TYPE slis_t_extab. "调用的FORM SET PF-STATUS 'TOOLBAR1'.ENDFORM. "PF_STATUS_SET*&---------------------------------------------------------------------**& 2.RFORM uploaddata. "从PC中上传文件到内表中*&---------------------------------------------------------------------*FORM uploaddata. DATA: BEGIN OF i_excel OCCURS 0. INCLUDE STRUCTURE alsmex_tabline. DATA: END OF i_excel. DATA: l_answer(1) TYPE c. DATA: l_column TYPE i. FIELD-SYMBOLS: <fs>. DATA: l_pathname LIKE rlgrap-filename. MOVE pc_file TO l_pathname. CALL FUNCTION 'ALSM_EXCEL_TO_INTERNAL_TABLE' EXPORTING filename = l_pathname i_begin_col = c_begin_col i_begin_row = c_begin_row i_end_col = c_end_col i_end_row = c_end_row TABLES intern = i_excel EXCEPTIONS inconsistent_parameters = 1 upload_ole = 2 OTHERS = 3. IF sy-subrc <> 0. MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4. ELSE. IF i_excel[] IS INITIAL. CALL FUNCTION 'POPUP_TO_CONFIRM_WITH_MESSAGE' EXPORTING* DEFAULTOPTION = 'Y' diagnosetext1 = 'No data in excel'* DIAGNOSETEXT2 = ' '* DIAGNOSETEXT3 = ' ' textline1 = 'No data in excel'* TEXTLINE2 = ' ' titel = 'Confirm'* START_COLUMN = 25* START_ROW = 6* CANCEL_DISPLAY = 'X' IMPORTING answer = l_answer. ELSE. DELETE i_excel WHERE row = '0001'. SORT i_excel BY row col. LOOP AT i_excel. MOVE i_excel-col TO l_column. ASSIGN COMPONENT l_column OF STRUCTURE ITAB TO <fs>. MOVE i_excel-value TO <fs>. AT END OF row. APPEND ITAB. CLEAR ITAB. ENDAT. ENDLOOP. ENDIF. ENDIF.ENDFORM. "UPLOADDATA*&---------------------------------------------------------------------**& 1.执行用户命令*&---------------------------------------------------------------------*FORM usercommand USING ucomm TYPE sy-ucomm selfield TYPE slis_selfield. CASE sy-ucomm.* WHEN 'DELE'. WHEN 'SCPZ'. PERFORM FRM_BDC_CALL. ENDCASE.ENDFORM. "USER_COMMAND*&---------------------------------------------------------------------**& 2.Form layout_build 设置alv显示格式和属性*&---------------------------------------------------------------------*FORM layout_build .** i_layout-detail_popup = 'X'. "是否弹出详细信息窗口** i_layout-no_vline = ' '. "这个用来设置列间隔线* i_layout-colwidth_optimize = 'X'. "优化列宽选项是否设置* i_layout-detail_initial_lines = 'X'. "show also initial lines* i_layout-detail_titlebar = '详细内容'. "设置弹出窗口的标题栏** i_layout-f2code = '&ETA'. "设置触发弹出详细信息窗口的功能码,这里是双击*gd_layout-info_fieldname = 'COLOR'. "颜色值* i_layout-no_colhead = ' '.* gd_repid = sy-repid. "程序为当前程序* gd_layout-stylefname = 'FIELD_STYLE'.* gd_layout-zebra = 'X'.ENDFORM. "layout_build*&---------------------------------------------------------------------**& 3.Form fields_build 设置报表显示列属性信息*&---------------------------------------------------------------------*FORM fields_build . REFRESH i_fieldcat_alv. gd_repid = sy-repid. CLEAR i_fieldcat. DATA colnum TYPE i. i_fieldcat-fieldname = 'BLDAT'. i_fieldcat-seltext_s = '凭证日期'. i_fieldcat-seltext_m = '凭证日期'. i_fieldcat-seltext_l = '凭证日期'. i_fieldcat-outputlen = 15. i_fieldcat-key = 'X'. APPEND i_fieldcat TO i_fieldcat_alv. CLEAR i_fieldcat. colnum = colnum + 1. i_fieldcat-col_pos = colnum. i_fieldcat-fieldname = 'WAERS'. i_fieldcat-seltext_s = '公司代码'. i_fieldcat-seltext_m = '公司代码'. i_fieldcat-seltext_l = '公司代码'.* i_fieldcat-outputlen = 20.* i_fieldcat-key = 'X'. APPEND i_fieldcat TO i_fieldcat_alv. CLEAR i_fieldcat. colnum = colnum + 1. i_fieldcat-col_pos = colnum. i_fieldcat-fieldname = 'BUDAT'. i_fieldcat-seltext_s = '过帐日期'. i_fieldcat-seltext_m = '过帐日期'. i_fieldcat-seltext_l = '过帐日期'. APPEND i_fieldcat TO i_fieldcat_alv. CLEAR i_fieldcat. colnum = colnum + 1. i_fieldcat-col_pos = colnum. i_fieldcat-fieldname = 'XBLNR'. i_fieldcat-seltext_s = '参照'. i_fieldcat-seltext_m = '参照'. i_fieldcat-seltext_l = '参照'. APPEND i_fieldcat TO i_fieldcat_alv. CLEAR i_fieldcat. colnum = colnum + 1. i_fieldcat-col_pos = colnum. i_fieldcat-fieldname = 'BKTXT'. i_fieldcat-seltext_s = '抬头文本'. i_fieldcat-seltext_m = '抬头文本'. i_fieldcat-seltext_l = '抬头文本'. APPEND i_fieldcat TO i_fieldcat_alv. CLEAR i_fieldcat. colnum = colnum + 1. i_fieldcat-col_pos = colnum. i_fieldcat-fieldname = 'BVORG'. i_fieldcat-seltext_s = '往来凭证号'. i_fieldcat-seltext_m = '往来凭证号'. i_fieldcat-seltext_l = '往来凭证号'. APPEND i_fieldcat TO i_fieldcat_alv. CLEAR i_fieldcat. colnum = colnum + 1. i_fieldcat-col_pos = colnum. i_fieldcat-fieldname = 'HKONT'. i_fieldcat-seltext_s = '科目'. i_fieldcat-seltext_m = '科目'. i_fieldcat-seltext_l = '科目'. APPEND i_fieldcat TO i_fieldcat_alv. CLEAR i_fieldcat. colnum = colnum + 1. i_fieldcat-col_pos = colnum. i_fieldcat-fieldname = 'SHKZG'. i_fieldcat-seltext_s = '借/贷'. i_fieldcat-seltext_m = '借/贷'. i_fieldcat-seltext_l = '借/贷'. APPEND i_fieldcat TO i_fieldcat_alv. CLEAR i_fieldcat. colnum = colnum + 1. i_fieldcat-col_pos = colnum. i_fieldcat-fieldname = 'WRBTR'. i_fieldcat-seltext_s = '金额'. i_fieldcat-seltext_m = '金额'. i_fieldcat-seltext_l = '金额'. APPEND i_fieldcat TO i_fieldcat_alv. CLEAR i_fieldcat. colnum = colnum + 1. i_fieldcat-col_pos = colnum. i_fieldcat-fieldname = 'ZUONR'. i_fieldcat-seltext_s = '项目分配编号'. i_fieldcat-seltext_m = '项目分配编号'. i_fieldcat-seltext_l = '项目分配编号'. APPEND i_fieldcat TO i_fieldcat_alv. CLEAR i_fieldcat. colnum = colnum + 1. i_fieldcat-col_pos = colnum. i_fieldcat-fieldname = 'SGTXT'. i_fieldcat-seltext_s = '项目文本'. i_fieldcat-seltext_m = '项目文本'. i_fieldcat-seltext_l = '项目文本'. APPEND i_fieldcat TO i_fieldcat_alv. CLEAR i_fieldcat. colnum = colnum + 1. i_fieldcat-col_pos = colnum. i_fieldcat-fieldname = 'KOSTL'. i_fieldcat-seltext_s = '成本中心'. i_fieldcat-seltext_m = '成本中心'. i_fieldcat-seltext_l = '成本中心'. APPEND i_fieldcat TO i_fieldcat_alv. CLEAR i_fieldcat. colnum = colnum + 1. i_fieldcat-col_pos = colnum. i_fieldcat-fieldname = 'PRCTR'. i_fieldcat-seltext_s = '利润中心'. i_fieldcat-seltext_m = '利润中心'. i_fieldcat-seltext_l = '利润中心'. APPEND i_fieldcat TO i_fieldcat_alv. CLEAR i_fieldcat.ENDFORM. "fields_build*&---------------------------------------------------------------------**& 4.Form display_data 用来显示ALV表单*&---------------------------------------------------------------------*FORM display_data . CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY' EXPORTING* I_CALLBACK_USER_COMMAND = 'USER_COMMAND' "用户触发事件* i_callback_pf_status_set = 'PF_STATUS_SET'(001) "调用用户事件和按钮事件 i_callback_program = gd_repid "当前程序 is_layout = gd_layout "子函数layout_build填充的格式定义 it_fieldcat = i_fieldcat_alv[] "子函数fields填充的各列 it_events = i_events[] " i_grid_title = '' i_callback_user_command = usercommand "3.处理事务 i_save = 'A' i_callback_pf_status_set = 'TOOLBAR' TABLES t_outtab = ITAB. "假设数据都在h_itab内表中 IF sy-subrc <> 0.* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO* WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4. ENDIF.ENDFORM. " display_data*&———————————————————————**& Form FRM_BDC_CALL*&———————————————————————** 循环的把EXCEL里面的数据放到系统里面*———————————————————————-*FORM FRM_BDC_CALL. "LOOP AT IT_ITAB INTO WA_ITAB. "UNAME1 = SY-UNAME. SY-UNAME = 'GM000SYM'. "可以更改成有权限的用户帐号来执行。 GV_USER = SY-UNAME. CALL FUNCTION 'BDC_OPEN_GROUP' EXPORTING CLIENT = SY-MANDT GROUP = GV_GROUP HOLDDATE = GV_HOLDDATE KEEP = GV_KEEP USER = GV_USER. PERFORM FRM_BDC_FB50. "FB50的具体BDC执行过程 CALL FUNCTION 'BDC_CLOSE_GROUP'.ENDFORM. "FRM_BDC_CALL*&———————————————————————**& Form FRM_BDC_FB50*&———————————————————————** FB50的BDC*———————————————————————-*FORM FRM_BDC_FB50. DATA: L_MODE TYPE C VALUE 'N'."BDC执行的模式 PERFORM BDC_DYNPRO USING 'SAPMF05A' '1001'. PERFORM BDC_FIELD USING 'BDC_OKCODE' '=BU'.* PERFORM BDC_FIELD USING ‘BDC_SUBSCR’‘SAPMF05A 1010HEAD′. PERFORM BDC_FIELD USING 'ACGL_HEAD-BLDAT' '2012-12-04'. PERFORM BDC_FIELD USING 'ACGL_HEAD-WAERS' 'HKD'. PERFORM BDC_FIELD USING 'ACGL_HEAD-BUDAT' '2012-12-05'. PERFORM BDC_FIELD USING 'ACGL_HEAD-XBLNR' '参照'. PERFORM BDC_FIELD USING 'ACGL_HEAD-BKTXT' '抬头文本'. PERFORM BDC_FIELD USING 'ACGL_HEAD-BVORG' '往来凭证号'.*************************以下这部分可以循环添*********************************** PERFORM BDC_FIELD USING 'ACGL_ITEM-HKONT(01)' '700245'. PERFORM BDC_FIELD USING 'ACGL_ITEM-SHKZG(01)' 'S'. PERFORM BDC_FIELD USING 'ACGL_ITEM-WRBTR(01)' '100'. PERFORM BDC_FIELD USING 'ACGL_ITEM-MWSKZ(01)' 'J0'. PERFORM BDC_FIELD USING 'ACGL_ITEM-ZUONR(01)' '项目分配编号'. PERFORM BDC_FIELD USING 'ACGL_ITEM-SGTXT(01)' '项目文本'. PERFORM BDC_FIELD USING 'ACGL_ITEM-KOSTL(01)' '8001052'. PERFORM BDC_FIELD USING 'ACGL_ITEM-PRCTR(01)' '900098'. PERFORM BDC_FIELD USING 'ACGL_ITEM-HKONT(02)' '700245'. PERFORM BDC_FIELD USING 'ACGL_ITEM-SHKZG(02)' 'H'. PERFORM BDC_FIELD USING 'ACGL_ITEM-WRBTR(02)' '100'. PERFORM BDC_FIELD USING 'ACGL_ITEM-MWSKZ(02)' 'J0'. PERFORM BDC_FIELD USING 'ACGL_ITEM-ZUONR(02)' '项目分配编号'. PERFORM BDC_FIELD USING 'ACGL_ITEM-SGTXT(02)' '项目文本3'. PERFORM BDC_FIELD USING 'ACGL_ITEM-KOSTL(02)' '8000002'. PERFORM BDC_FIELD USING 'ACGL_ITEM-PRCTR(02)' '900098'.*************************以下这部分可以循环添*********************************** CALL TRANSACTION 'FB50' USING IT_BDC MODE L_MODE UPDATE 'S' MESSAGES INTO MESSTAB. "S-代表同步执行,既立刻执行; N-后台执行 IF SY-SUBRC = 0. COMMIT WORK.*读信息记录编号 READ TABLE MESSTAB INTO WA_MESSTAB WITH KEY MSGTYP = 'S'. MESSAGE ID WA_MESSTAB-MSGID TYPE 'S' NUMBER WA_MESSTAB-MSGNR INTO WA_RE_VAL-TEXT WITH WA_MESSTAB-MSGV1 WA_MESSTAB-MSGV2 WA_MESSTAB-MSGV3 WA_MESSTAB-MSGV4. WRITE:/ WA_RE_VAL-TEXT. ELSE.*执行失败,写失败原因 ROLLBACK WORK. READ TABLE MESSTAB INTO WA_MESSTAB WITH KEY MSGTYP = 'E'. MESSAGE ID WA_MESSTAB-MSGID TYPE 'E' NUMBER WA_MESSTAB-MSGNR INTO WA_RE_VAL-TEXT WITH WA_MESSTAB-MSGV1 WA_MESSTAB-MSGV2 WA_MESSTAB-MSGV3 WA_MESSTAB-MSGV4. WRITE:/ WA_RE_VAL-TEXT. ENDIF. REFRESH MESSTAB. CLEAR: WA_MESSTAB,WA_RE_VAL,IT_BDC,IT_BDC[].ENDFORM.*&———————————————————————**& Form BDC_DYNPRO*&———————————————————————** 填写程序与屏幕*———————————————————————-** –> PR_PROGRAM 程序* –> PR_DYNPRO 屏幕*———————————————————————-*FORM BDC_DYNPRO USING PR_PROGRAM PR_DYNPRO. CLEAR IT_BDC. IT_BDC-PROGRAM = PR_PROGRAM. IT_BDC-DYNPRO = PR_DYNPRO. IT_BDC-DYNBEGIN = 'X'. APPEND IT_BDC.ENDFORM. " BDC_DYNPRO*&———————————————————————**& Form BDC_FIELD*&———————————————————————** 填写字段与值*———————————————————————-** –> PR_FNAM 字段* –> PR_FVAL 值*———————————————————————-*FORM BDC_FIELD USING PR_FNAM PR_FVAL. CLEAR IT_BDC. IT_BDC-FNAM = PR_FNAM. IT_BDC-FVAL = PR_FVAL. APPEND IT_BDC.ENDFORM. "FRM_BDC_FIELD
- 总帐凭证导入EXCEL,并且批量输入(FB50)的BDC
- BDC的批量导入
- 批量导入凭证时,凭证的分割
- 总帐凭证和总帐余额
- 总帐凭证和总帐余额
- 总帐凭证和总帐余额
- 总帐凭证和总帐余额
- 销售订单行项目批量导入(BDC)
- EBS查询子分类帐与总帐凭证的金额差异
- SAP FB50 由操作习惯引起的 财务凭证-成本中心-功能范围 异常
- 总帐科目的批量传输与复制
- 总帐科目的批量传输与复制
- FI 清帐,未清帐,客户凭证和供应商凭证以及总帐和明细帐的关系
- 总帐科目LSMW导入'/'的问题
- BAPI for FB50 成本中心总帐批导
- FI_ITEMS_MASS_CHANGE 批量更新 凭证文本 (凭证被锁、一些项目没更改到的解决方法)
- ABAP BDC 可输入不同事务码的通用BDC
- .net 下批量导入excel的数据
- Ubuntu11.10 kvm Fix: failed to find romfile "pxe-rtl8139.bin"
- Android 开机自启动应用
- 设计模式学习-----观察者模式
- Android Intent Action 大全
- android4.0 MediaPlayer的notify监听机制的全面剖析
- 总帐凭证导入EXCEL,并且批量输入(FB50)的BDC
- java setBinaryStream error for mysql
- VS2008 MFC 配置GDI+
- Hex与浮点数相互转换,支持LINUX平台
- Mac下清理软件CleanMyMac破解版
- Fatfs文件系统分析(3)-底层接口分析
- 别让抱怨毁了你的工作生活
- Linux下使用smartCOM调试串口
- MouseEvent事件