模板见文件
*&---------------------------------------------------------------------* *& Report ZFI001 *&---------------------------------------------------------------------* *& *&---------------------------------------------------------------------* REPORT zfid003 . TABLES sscrfields. *&---------------------------------------------------------------------* *& 会计凭证导入 *&---------------------------------------------------------------------* TYPES: BEGIN OF ty_input, number TYPE text20, " comp_code TYPE bapiache09-comp_code, " 公司代码 pstng_date TYPE bapiache09-pstng_date, " 过账日期 * pstng_date TYPE CHAR10, " 过账日期 doc_date TYPE bapiache09-doc_date, " 凭证日期 * doc_date TYPE CHAR10, " 凭证日期 doc_type TYPE bapiache09-doc_type, " 凭证类型 * monat TYPE monat, " 过账期间 bkpf-monat "后台处理 ref_doc_no TYPE bapiache09-ref_doc_no, " 参考凭证号 “参照 header_txt TYPE bapiache09-header_txt, " 凭证抬头文本 currency TYPE bapiaccr09-currency , " 货币码 * exch_rate TYPE bapiaccr09-exch_rate , " 汇率 * numpg TYPE bkpf-numpg, " 页数 * posnr TYPE zzs_fi_fb01_extension2-posnr, " 行项目编号 * bschl TYPE tbsl-bschl, " 记账码 umskz TYPE bseg-umskz , " 特别总账标识 bseg-umskz gl_account TYPE bapiacap09-gl_account , " 科目代码 customer TYPE bapiacar09-customer , " 客户编号 vendor_no TYPE bapiacap09-vendor_no , " 供应商 amt_doccur(31) TYPE c , " 交易货币金额 * dmbtr TYPE bseg-dmbtr , " 本位币金额 bseg-dmbtr 输入外币会带出 " * bus_area TYPE bapiacgl09-bus_area , " 业务范围 * value_date TYPE bapiacgl09-value_date , " 起息日 * zterm TYPE bseg-zterm , "付款条件BSEG-ZTERM zfbdt TYPE bseg-zfbdt , " 基限日期(汇票到期日) costcenter TYPE bapiacgl09-costcenter , " 成本中心 orderid TYPE bapiacgl09-orderid , " 统计型内部订单 zuonr TYPE bapiacgl09-alloc_nmbr, " 分配 bseg-zuonr item_text TYPE bapiacgl09-item_text , " 凭证行文本 xnegp TYPE bseg-xnegp , " 反记账 bseg-xnegp * rstgr TYPE zzs_fi_fb01_extension2-rstgr , " 原因代码 bseg-rstgr xref1 TYPE bseg-xref1 , " 参考代码1 bseg-xref1 xref2 TYPE bseg-xref2 , " 参考代码1 bseg-xref2 * xref3 TYPE bseg-xref3 , " 参考代码1 bseg-xref3 fkber TYPE bseg-fkber, "功能范围 vertn TYPE bseg-vertn, "销售活动项目 vertt TYPE bseg-vertt, "回款类型 * vertt TYPE bseg-vertt, "合同类型 kndnr TYPE ce11000-kndnr, " 客户(获利能力分析) artnr TYPE ce11000-artnr, "产品编号(获利能力分析) vkorg TYPE ce11000-vkorg, "销售机构(获利能力分析) vtweg TYPE ce11000-vtweg, "分销渠道(获利能力分析) spart TYPE ce11000-spart, "品牌(获利能力分析) *&-----用来显示消息的字段 belnr TYPE bseg-belnr, gjahr TYPE bseg-gjahr, bukrs TYPE bseg-bukrs, msg TYPE string, light TYPE c LENGTH 4, type TYPE c LENGTH 1, slbox, END OF ty_input. *TYPES: BEGIN OF ty_tbsl, * bschl TYPE tbsl-bschl, * shkzg TYPE tbsl-shkzg, * END OF ty_tbsl. TYPES: BEGIN OF ty_output, number TYPE text20, " belnr TYPE bseg-belnr, gjahr TYPE bseg-gjahr, bukrs TYPE bseg-bukrs, msg TYPE string, slbox, END OF ty_output. *--------------------------------------------------------------------* * DATA *--------------------------------------------------------------------* DATA: gt_input TYPE STANDARD TABLE OF ty_input. FIELD-SYMBOLS: <gs_input> TYPE ty_input. **记账码对应的正负 *DATA: gt_tbsl TYPE STANDARD TABLE OF ty_tbsl. *FIELD-SYMBOLS: <gs_tbsl> TYPE ty_tbsl. DATA: gt_output TYPE STANDARD TABLE OF ty_output. *ALV DATA: fieldcatalog TYPE slis_t_fieldcat_alv WITH HEADER LINE. DATA: gs_layout TYPE slis_layout_alv. DATA functxt TYPE smp_dyntxt."下载模板按钮要用到的结构 *--------------------------------------------------------------------* * *--------------------------------------------------------------------* SELECTION-SCREEN BEGIN OF BLOCK b1 WITH FRAME TITLE TEXT-001. PARAMETERS: p_file TYPE rlgrap-filename MEMORY ID m1. SELECTION-SCREEN END OF BLOCK b1. SELECTION-SCREEN:FUNCTION KEY 1. *--------------------------------------------------------------------* * *--------------------------------------------------------------------* INITIALIZATION. functxt-icon_id = icon_export. functxt-quickinfo = '模版下载'. functxt-icon_text = '模版下载'. sscrfields-functxt_01 = functxt. *--------------------------------------------------------------------* * *--------------------------------------------------------------------* AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_file. PERFORM f4_help_for_filename. AT SELECTION-SCREEN. IF sscrfields-ucomm = 'FC01'. PERFORM frm_get_model USING 'ZFID003.XLS'. ENDIF. START-OF-SELECTION. * PERFORM f_init. PERFORM check_filename. PERFORM get_data_from_file. " 导入文件数据 END-OF-SELECTION. PERFORM f_alv_fieldcat. PERFORM f_layout. PERFORM f_display. **&---------------------------------------------------------------------* **& FORM F_INIT **&---------------------------------------------------------------------* ** TEXT **----------------------------------------------------------------------* ** --> P1 TEXT ** <-- P2 TEXT **----------------------------------------------------------------------* *FORM f_init . * * FREE: gt_input, * gt_tbsl, * gt_output. * ** 记账码对应的正负 * SELECT bschl * shkzg * INTO TABLE gt_tbsl * FROM tbsl. "过帐码table * *ENDFORM. " F_INIT *&---------------------------------------------------------------------* *& FORM F4_HELP_FOR_FILENAME *&---------------------------------------------------------------------* * 针对文件的SEARCH HELP *----------------------------------------------------------------------* * -->P_FILENAME TEXT *----------------------------------------------------------------------* FORM f4_help_for_filename. DATA: l_file TYPE string, l_file_import TYPE string, l_path_initial TYPE string, lt_filetable TYPE filetable, lw_filetable LIKE LINE OF lt_filetable, l_rc TYPE i. *--------------------------------------------------------------------* * *--------------------------------------------------------------------* l_file = p_file. CALL METHOD cl_gui_frontend_services=>file_open_dialog EXPORTING file_filter = 'EXCEL 文件 (*.XLS;*.XLSX)|*.XLS;*.XLSX' CHANGING file_table = lt_filetable rc = l_rc EXCEPTIONS file_open_dialog_failed = 1 cntl_error = 2 error_no_gui = 3 not_supported_by_gui = 4 OTHERS = 5. IF sy-subrc <> 0. ENDIF. IF l_rc > 0. READ TABLE lt_filetable INTO lw_filetable INDEX 1. IF sy-subrc = 0. p_file = lw_filetable-filename. ENDIF. ENDIF. ENDFORM. *&---------------------------------------------------------------------* *& FORM CHECK_FILENAME *&---------------------------------------------------------------------* * TEXT *----------------------------------------------------------------------* * --> P1 TEXT * <-- P2 TEXT *----------------------------------------------------------------------* FORM check_filename . DATA: l_s1 TYPE string, l_s2 TYPE string. *--------------------------------------------------------------------* * *--------------------------------------------------------------------* SPLIT p_file AT '.' INTO l_s1 l_s2. TRANSLATE l_s2 TO UPPER CASE. IF l_s2 <> 'XLS' AND l_s2 <> 'XLSX'. MESSAGE '文件格式不对!' TYPE 'E'. STOP. ENDIF. ENDFORM. " CHECK_FILENAME *&---------------------------------------------------------------------* *& FORM GET_DATA_FROM_FILE *&---------------------------------------------------------------------* * TEXT *----------------------------------------------------------------------* * --> P1 TEXT * <-- P2 TEXT *----------------------------------------------------------------------* FORM get_data_from_file . DATA: it_raw TYPE truxs_t_text_data, l_line TYPE i. *--------------------------------------------------------------------* * *--------------------------------------------------------------------* CLEAR: gt_input. IF p_file IS INITIAL . MESSAGE '文件路径不存在' TYPE 'E'. ENDIF. CALL FUNCTION 'TEXT_CONVERT_XLS_TO_SAP' EXPORTING i_line_header = 'X' " NOT INCLUDE FILE HEADER i_tab_raw_data = it_raw " WORK TABLE i_filename = p_file TABLES i_tab_converted_data = gt_input[] EXCEPTIONS conversion_failed = 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. IF gt_input IS INITIAL. MESSAGE '上传文件不包含任何有效数据!' TYPE 'E'. STOP. ENDIF. LOOP AT gt_input ASSIGNING <gs_input>. * IF <gs_input>-vertn IS INITIAL. * <gs_input>-vertt = ''. * ELSE. * <gs_input>-vertt = 'A'. * ENDIF. CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT' EXPORTING input = <gs_input>-gl_account IMPORTING output = <gs_input>-gl_account. CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT' EXPORTING input = <gs_input>-customer IMPORTING output = <gs_input>-customer. CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT' EXPORTING input = <gs_input>-vendor_no IMPORTING output = <gs_input>-vendor_no. CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT' EXPORTING input = <gs_input>-costcenter IMPORTING output = <gs_input>-costcenter. CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT' EXPORTING input = <gs_input>-orderid IMPORTING output = <gs_input>-orderid. ENDLOOP. * SORT gt_input BY number posnr. ENDFORM. " GET_DATA_FROM_FILE *&---------------------------------------------------------------------* *& FORM CALL_BAPI *&---------------------------------------------------------------------* * TEXT *----------------------------------------------------------------------* * --> P1 TEXT * <-- P2 TEXT *----------------------------------------------------------------------* FORM call_bapi . DATA: lv_index TYPE sy-tabix. DATA: ls_output TYPE ty_output. DATA l_num TYPE i VALUE 0. DATA: documentheader TYPE bapiache09, accountgl TYPE STANDARD TABLE OF bapiacgl09, " 总账 accountreceivable TYPE STANDARD TABLE OF bapiacar09, " 客户 accountpayable TYPE STANDARD TABLE OF bapiacap09, " 供应商 currencyamount TYPE STANDARD TABLE OF bapiaccr09, " 金额 extension2 TYPE STANDARD TABLE OF bapiparex, return TYPE STANDARD TABLE OF bapiret2, criteria TYPE STANDARD TABLE OF bapiackec9. * LS_RETURN TYPE bapiret2. DATA: ls_accountgl TYPE bapiacgl09, " 总账 ls_accountreceivable TYPE bapiacar09, " 客户 ls_accountpayable TYPE bapiacap09, " 供应商 ls_currencyamount TYPE bapiaccr09, " 金额 ls_criteria TYPE bapiackec9, ls_extension2 TYPE bapiparex, ls_return TYPE bapiret2. DATA ls_zexten LIKE zfid003_01. DATA l_umskz_flag TYPE flag."用来判断要创建的会计凭证是否有特别总账标识 * DATA: ls_zzs_fi_fb01_extension2 TYPE zzs_fi_fb01_extension2. *--------------------------------------------------------------------* * *--------------------------------------------------------------------* DATA: lt_knb1 TYPE TABLE OF knb1, ls_knb1 TYPE knb1. SELECT * INTO TABLE lt_knb1 FROM knb1 FOR ALL ENTRIES IN gt_input WHERE kunnr = gt_input-customer AND bukrs = gt_input-comp_code. SORT lt_knb1 BY kunnr bukrs. DATA: lt_lfb1 TYPE TABLE OF lfb1, ls_lfb1 TYPE lfb1. SELECT * INTO TABLE lt_lfb1 FROM lfb1 FOR ALL ENTRIES IN gt_input WHERE lifnr = gt_input-vendor_no AND bukrs = gt_input-comp_code. SORT lt_lfb1 BY lifnr bukrs. DATA: BEGIN OF ls_skb1, bukrs LIKE skb1-bukrs, saknr LIKE skb1-saknr, xintb LIKE skb1-xintb, END OF ls_skb1. DATA lt_skb1 LIKE TABLE OF ls_skb1 . SELECT bukrs saknr xintb INTO CORRESPONDING FIELDS OF TABLE lt_skb1 FROM skb1 FOR ALL ENTRIES IN gt_input WHERE saknr = gt_input-gl_account . SORT lt_skb1 BY bukrs saknr . LOOP AT gt_input ASSIGNING <gs_input>. l_num = l_num + 1. IF <gs_input>-umskz = 'U' OR <gs_input>-umskz = 'V' OR <gs_input>-umskz = 'W' OR <gs_input>-umskz = 'X' OR <gs_input>-umskz = 'Y' OR <gs_input>-umskz = 'Z' . l_umskz_flag = 'X'. ENDIF. AT NEW number. CLEAR: documentheader, ls_output. FREE: accountgl, accountreceivable, accountpayable, currencyamount, extension2, return. documentheader-comp_code = <gs_input>-comp_code. " 公司代码 documentheader-doc_date = <gs_input>-doc_date. " 凭证日期 documentheader-pstng_date = <gs_input>-pstng_date. " 过账日期 documentheader-doc_type = <gs_input>-doc_type. " 凭证类型 documentheader-ref_doc_no = <gs_input>-ref_doc_no. " 参考凭证号 documentheader-header_txt = <gs_input>-header_txt. " 凭证抬头文本 documentheader-username = sy-uname. " ENDAT. CLEAR: ls_accountgl, ls_accountreceivable, ls_accountpayable, ls_currencyamount, ls_extension2. * ls_zzs_fi_fb01_extension2. "增强中 * ls_zzs_fi_fb01_extension2-posnr = <gs_input>-posnr. " 行项目编号 * ls_zzs_fi_fb01_extension2-bschl = <gs_input>-bschl. " 记账码 * ls_zzs_fi_fb01_extension2-umskz = <gs_input>-umskz. " 特别总账标识 * ls_zzs_fi_fb01_extension2-rstgr = <gs_input>-rstgr. " 原因代码 * ls_zzs_fi_fb01_extension2-xnegp = <gs_input>-xnegp. " 反记账 * ls_zzs_fi_fb01_extension2-zuonr = <gs_input>-zuonr. " 分配 CLEAR ls_zexten . ls_zexten-posnr = l_num. ls_zexten-xnegp = <gs_input>-xnegp. CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT' EXPORTING input = <gs_input>-vertn IMPORTING output = <gs_input>-vertn. ls_zexten-vertn = <gs_input>-vertn. * ls_zexten-umskz = <gs_input>-umskz. IF <gs_input>-vertn IS NOT INITIAL. ls_zexten-vertt = 'A'. ELSE. * ls_zexten-vertt = ''. ENDIF. "回款类型 IF <gs_input>-vertt IS NOT INITIAL . ls_zexten-vertt = <gs_input>-vertt . ENDIF. IF ls_zexten-vertn IS INITIAL AND ls_zexten-vertt IS NOT INITIAL . <gs_input>-msg = '回款类型不为空,请输入款项项目' . <gs_input>-type = 'E'. <gs_input>-light = '@5C@'. RETURN. ENDIF. * ls_zexten-kunnr = <gs_input>-kndnr. * ls_zexten-artnr = <gs_input>-artnr. ls_extension2-structure = 'ZFID003_01'. ls_extension2-valuepart1 = ls_zexten. APPEND ls_extension2 TO extension2. IF <gs_input>-kndnr IS NOT INITIAL. ls_criteria-itemno_acc = l_num. ls_criteria-fieldname = 'KNDNR'. ls_criteria-character = <gs_input>-kndnr. APPEND ls_criteria TO criteria. ENDIF. IF <gs_input>-artnr IS NOT INITIAL. ls_criteria-itemno_acc = l_num. ls_criteria-fieldname = 'ARTNR'. CALL FUNCTION 'CONVERSION_EXIT_MATN1_INPUT' EXPORTING input = <gs_input>-artnr IMPORTING output = <gs_input>-artnr EXCEPTIONS length_error = 1 OTHERS = 2. ls_criteria-character = <gs_input>-artnr. APPEND ls_criteria TO criteria. ENDIF. IF <gs_input>-vkorg IS NOT INITIAL. ls_criteria-itemno_acc = l_num. ls_criteria-fieldname = 'VKORG'. ls_criteria-character = <gs_input>-vkorg. APPEND ls_criteria TO criteria. ENDIF. IF <gs_input>-vtweg IS NOT INITIAL. ls_criteria-itemno_acc = l_num. ls_criteria-fieldname = 'VTWEG'. ls_criteria-character = <gs_input>-vtweg. APPEND ls_criteria TO criteria. ENDIF. IF <gs_input>-spart IS NOT INITIAL. ls_criteria-itemno_acc = l_num. ls_criteria-fieldname = 'SPART'. ls_criteria-character = <gs_input>-spart. APPEND ls_criteria TO criteria. ENDIF. "当FS00的“创建/银行/利息” TAB页勾选了“只能自动过账” 时,对应的总账科目不能通过F-02做账,必须报错 READ TABLE lt_skb1 INTO ls_skb1 WITH KEY bukrs = <gs_input>-comp_code saknr = <gs_input>-gl_account BINARY SEARCH . IF sy-subrc = 0 . IF ls_skb1-xintb = 'X'. CONCATENATE '账户' <gs_input>-gl_account '只能内部记帐到公司代码' <gs_input>-comp_code '中' INTO <gs_input>-msg . <gs_input>-type = 'E'. <gs_input>-light = '@5C@'. RETURN. ENDIF. ENDIF. * * ls_extension2-structure = 'ZZS_FI_FB01_EXTENSION2'. * ls_extension2-valuepart1 = ls_zzs_fi_fb01_extension2. " ZZS_FI_FB01_EXTENSION2超出240位就放VALUEPART2/3/4 * APPEND ls_extension2 TO extension2. IF <gs_input>-customer IS NOT INITIAL. ls_accountreceivable-itemno_acc = l_num. " 行项目编号 ls_accountreceivable-customer = <gs_input>-customer. " 客户 IF <gs_input>-umskz IS NOT INITIAL . ls_accountreceivable-sp_gl_ind = <gs_input>-umskz. " 特别总账标识 ENDIF. * ls_accountreceivable-bus_area = <gs_input>-bus_area. " 业务范围 * IF <gs_input>-zterm IS INITIAL. READ TABLE lt_knb1 INTO ls_knb1 WITH KEY kunnr = <gs_input>-customer bukrs = <gs_input>-comp_code BINARY SEARCH. IF sy-subrc = 0. ls_accountreceivable-pmnttrms = ls_knb1-zterm . " 付款条件 ENDIF. * ELSE. * ls_accountreceivable-pmnttrms = <gs_input>-zterm . " 付款条件 * ENDIF. ls_accountreceivable-bline_date = <gs_input>-zfbdt. " 付款基准日期 ls_accountreceivable-item_text = <gs_input>-item_text. " 凭证行文本 ls_accountreceivable-ref_key_1 = <gs_input>-xref1. " 参考代码1 ls_accountreceivable-ref_key_2 = <gs_input>-xref2. " 参考代码2 IF <gs_input>-zuonr IS NOT INITIAL. ls_accountreceivable-alloc_nmbr = <gs_input>-zuonr. " 分配 ENDIF. IF <gs_input>-gl_account IS NOT INITIAL. ls_accountreceivable-gl_account = <gs_input>-gl_account. " 科目代码 ENDIF. APPEND ls_accountreceivable TO accountreceivable. ELSEIF <gs_input>-vendor_no IS NOT INITIAL. ls_accountpayable-itemno_acc = l_num. " 行项目编号 ls_accountpayable-vendor_no = <gs_input>-vendor_no. " 供应商 IF <gs_input>-umskz IS NOT INITIAL . ls_accountpayable-sp_gl_ind = <gs_input>-umskz. " 特别总账标识 ENDIF. * ls_accountpayable-bus_area = <gs_input>-bus_area. " 业务范围 * IF <gs_input>-zterm IS INITIAL. READ TABLE lt_lfb1 INTO ls_lfb1 WITH KEY lifnr = <gs_input>-vendor_no bukrs = <gs_input>-comp_code BINARY SEARCH. IF sy-subrc = 0. ls_accountpayable-pmnttrms = ls_lfb1-zterm . " 付款条件 ENDIF. * ELSE. * ls_accountpayable-pmnttrms = <gs_input>-zterm . " 付款条件 * ENDIF. ls_accountpayable-bline_date = <gs_input>-zfbdt. " 付款基准日期 ls_accountpayable-item_text = <gs_input>-item_text. " 凭证行文本 ls_accountpayable-ref_key_1 = <gs_input>-xref1. " 参考代码1 ls_accountpayable-ref_key_2 = <gs_input>-xref2. " 参考代码2 IF <gs_input>-zuonr IS NOT INITIAL. ls_accountpayable-alloc_nmbr = <gs_input>-zuonr. " 分配 ENDIF. IF <gs_input>-gl_account IS NOT INITIAL. ls_accountpayable-gl_account = <gs_input>-gl_account. " 科目代码 ENDIF. APPEND ls_accountpayable TO accountpayable. ELSE. ls_accountgl-itemno_acc = l_num. " 行项目编号 ls_accountgl-gl_account = <gs_input>-gl_account. " 科目代码 ls_accountgl-salesorg = <gs_input>-vkorg. " 销售机构 ls_accountgl-distr_chan = <gs_input>-vtweg. " 分销渠道 ls_accountgl-division = <gs_input>-spart. " 品牌 * ls_accountgl-bus_area = <gs_input>-bus_area. " 业务范围 * ls_accountgl-value_date = <gs_input>-value_date. " 起息日 ls_accountgl-costcenter = <gs_input>-costcenter. " 成本中心 ls_accountgl-orderid = <gs_input>-orderid. " 统计型内部订单 ls_accountgl-item_text = <gs_input>-item_text. " 凭证行文本 ls_accountgl-ref_key_1 = <gs_input>-xref1. " 参考代码1 ls_accountgl-ref_key_2 = <gs_input>-xref2. " 参考代码2 * ls_accountgl-ref_key_3 = <gs_input>-xref3. " 参考代码2 IF <gs_input>-zuonr IS NOT INITIAL. ls_accountgl-alloc_nmbr = <gs_input>-zuonr. " 分配 ENDIF. ls_accountgl-func_area = <gs_input>-fkber. " 功能范围 * ls_accountgl-customer = <gs_input>-kndnr. "客户编号 APPEND ls_accountgl TO accountgl. ENDIF. * READ TABLE gt_tbsl ASSIGNING <gs_tbsl> WITH KEY bschl = <gs_input>-bschl. * IF sy-subrc = 0. ls_currencyamount-itemno_acc = l_num. " 行项目编号 ls_currencyamount-currency = <gs_input>-currency. " 货币码 ls_currencyamount-curr_type = '00'. "凭证中输入的币别类型 ls_currencyamount-amt_doccur = <gs_input>-amt_doccur. " 交易货币金额 * ls_currencyamount-exch_rate = <gs_input>-exch_rate. " 汇率 * IF <gs_tbsl>-shkzg = 'H'. * ls_currencyamount-amt_doccur = - ls_currencyamount-amt_doccur. * ENDIF. APPEND ls_currencyamount TO currencyamount. SELECT SINGLE waers INTO @DATA(lv_waers) FROM t001 WHERE bukrs = '1100'. IF <gs_input>-currency <> lv_waers. "输入货币与公司1100币别不一样,即不是CNY CLEAR: ls_currencyamount. * IF ls_currencyamount-exch_rate IS NOT INITIAL OR <gs_input>-dmbtr IS NOT INITIAL. ls_currencyamount-itemno_acc = l_num. " 行项目编号 * ls_currencyamount-currency = <gs_input>-currency. " 货币码 ls_currencyamount-currency = lv_waers. " 货币码 ls_currencyamount-curr_type = '10'. "本位币类型 * ls_currencyamount-amt_doccur = <gs_input>-dmbtr. " 本位币金额 * ls_currencyamount-exch_rate = <gs_input>-exch_rate. " 汇率 * ELSEIF ls_currencyamount-exch_rate IS NOT INITIAL. * ls_currencyamount-amt_doccur = <gs_input>-amt_doccur * ls_currencyamount-exch_rate. * ENDIF. * IF <gs_tbsl>-shkzg = 'H'. * ls_currencyamount-amt_doccur = - ls_currencyamount-amt_doccur. * ENDIF. ls_currencyamount-amt_doccur = - ls_currencyamount-amt_doccur. APPEND ls_currencyamount TO currencyamount. ENDIF. * ENDIF. AT END OF number. CALL FUNCTION 'BAPI_ACC_DOCUMENT_CHECK' EXPORTING documentheader = documentheader TABLES accountgl = accountgl accountreceivable = accountreceivable accountpayable = accountpayable currencyamount = currencyamount criteria = criteria return = return extension2 = extension2. SORT return BY type. READ TABLE return WITH KEY type = 'E' TRANSPORTING NO FIELDS. IF sy-subrc = 0. CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'. LOOP AT return INTO ls_return FROM sy-tabix. IF ls_return-type = 'E'. CONCATENATE <gs_input>-msg ls_return-message INTO <gs_input>-msg. ELSE. EXIT. ENDIF. ENDLOOP. <gs_input>-type = 'E'. <gs_input>-light = '@5C@'. RETURN. ELSE. READ TABLE return WITH KEY type = 'A' TRANSPORTING NO FIELDS. IF sy-subrc = 0. CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'. LOOP AT return INTO ls_return FROM sy-tabix. IF ls_return-type = 'A'. CONCATENATE <gs_input>-msg ls_return-message INTO <gs_input>-msg. ELSE. EXIT. ENDIF. ENDLOOP. <gs_input>-type = 'A'. <gs_input>-light = '@5C@'. RETURN. ELSE. ENDIF. ENDIF. REFRESH return. CLEAR ls_return. * READ TABLE return INTO ls_return WITH KEY type = 'E' . * IF sy-subrc = 0. * LOOP AT return INTO ls_return WHERE type = 'E'. * IF ls_output-msg IS INITIAL. ** ls_output-msg = ls_return-message. * <gs_input>-msg = ls_return-message. * ELSE. * CONCATENATE ls_output-msg ls_return-message INTO ls_output-msg SEPARATED BY '/'. * ENDIF. * <gs_input>-type = 'E'. * ENDLOOP. * RETURN. * ELSE. * CLEAR ls_return. * READ TABLE return INTO ls_return WITH KEY type = 'A' . * IF sy-subrc = 0. * * ENDIF. * ENDIF. CALL FUNCTION 'BAPI_ACC_DOCUMENT_POST' EXPORTING documentheader = documentheader TABLES accountgl = accountgl "总账 accountreceivable = accountreceivable "应收 accountpayable = accountpayable "应付 currencyamount = currencyamount "金额 criteria = criteria extension2 = extension2 "扩展 return = return. * READ TABLE return INTO ls_return WITH KEY type = 'E' . * IF sy-subrc = 0. * CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'. * <gs_input>-type = ls_return-type. * <gs_input>-light = '@5C@'. * <gs_input>-msg = ls_return-message. * RETURN. * ELSE. * READ TABLE return INTO ls_return WITH KEY type = 'A' . * IF sy-subrc = 0. * CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'. * <gs_input>-type = ls_return-type. * <gs_input>-light = '@5C@'. * <gs_input>-msg = ls_return-message. * RETURN. * ELSE. CALL FUNCTION 'BAPI_TRANSACTION_COMMIT' EXPORTING wait = 'X'. READ TABLE return INTO ls_return WITH KEY id = 'RW' number = '605'. IF sy-subrc = 0. <gs_input>-type = 'S'. <gs_input>-light = '@5B@'. <gs_input>-msg = ls_return-message. <gs_input>-belnr = ls_return-message_v2+0(10). <gs_input>-bukrs = ls_return-message_v2+10(4). <gs_input>-gjahr = ls_return-message_v2+14(4). ENDIF. * ENDIF. * ENDIF. CLEAR:documentheader. REFRESH:accountgl , accountreceivable, accountpayable , currencyamount , criteria, extension2 , return. CLEAR ls_return. CLEAR l_num. * IF <gs_input>-type IS NOT INITIAL. * CASE <gs_input>-type. * WHEN 'S'. * <gs_input>-light = '@5B@'. "绿灯 * <gs_input>-msg = '会计凭证创建成功'. * WHEN 'E'. * <gs_input>-light = '@5C@'. "红灯 * WHEN 'W'. * <gs_input>-light = '@5D@'. "黄灯 * ENDCASE. * ENDIF. * ls_output-number = <gs_input>-number. * APPEND ls_output TO gt_output. ENDAT. ENDLOOP. ENDFORM. " CALL_BAPI *&---------------------------------------------------------------------* *& FORM F_ALV_FIELDCAT *&---------------------------------------------------------------------* * TEXT *----------------------------------------------------------------------* * --> P1 TEXT * <-- P2 TEXT *----------------------------------------------------------------------* FORM f_alv_fieldcat . CLEAR: fieldcatalog. DEFINE build_fieldcat. fieldcatalog-fieldname = &1. fieldcatalog-seltext_m = &2. fieldcatalog-outputlen = &3. IF fieldcatalog-fieldname = 'MSG'. fieldcatalog-key = 'X'. ENDIF. IF fieldcatalog-fieldname = 'GL_ACCOUNT' OR fieldcatalog-fieldname = 'CUSTOMER' OR fieldcatalog-fieldname = 'VENDOR_NO' OR fieldcatalog-fieldname = 'ORDERID' . fieldcatalog-no_zero = 'X'. ENDIF. IF fieldcatalog-fieldname = 'MSG' OR fieldcatalog-fieldname = 'LIGHT' OR fieldcatalog-fieldname = 'TYPE' . fieldcatalog-key = 'X'. ENDIF. APPEND fieldcatalog TO fieldcatalog. CLEAR fieldcatalog. END-OF-DEFINITION. build_fieldcat 'NUMBER' '序号' 3. build_fieldcat 'COMP_CODE' '公司代码' 10. build_fieldcat 'PSTNG_DATE' '过账日期' 10. build_fieldcat 'DOC_DATE' '凭证日期' 10. build_fieldcat 'DOC_TYPE' '凭证类型' 10. * build_fieldcat 'MONAT' '过账期间' 10. build_fieldcat 'REF_DOC_NO' '参考凭证号' 10. build_fieldcat 'HEADER_TXT' '抬头文本' 10. build_fieldcat 'CURRENCY' '货币码' 10. * build_fieldcat 'EXCH_RATE' '汇率' 10. * * build_fieldcat 'NUMPG' '页数' 10. * build_fieldcat 'BSCHL' '记账代码' 10. build_fieldcat 'UMSKZ' '特别总账标识' 10. build_fieldcat 'GL_ACCOUNT' '科目编码' 10. build_fieldcat 'CUSTOMER' '客户编号' 10. build_fieldcat 'VENDOR_NO' '供应商' 10. build_fieldcat 'AMT_DOCCUR' '交易货币金额' 10. * build_fieldcat 'DMBTR' '本位币金额' 10. * build_fieldcat 'BUS_AREA' '业务范围' 10. * build_fieldcat 'VALUE_DATE' '起息日' 10. * build_fieldcat 'ZTERM' '付款条件' 10. build_fieldcat 'ZFBDT' '基限日期' 10. build_fieldcat 'COSTCENTER' '成本中心' 10. build_fieldcat 'ORDERID' '统计型内部订单' 10. build_fieldcat 'ZUONR' '分配' 10. build_fieldcat 'ITEM_TEXT' '凭证行文本' 10. build_fieldcat 'XNEGP' '反记账标识' 10. build_fieldcat 'XREF1' '参考代码1(制单人)' 10. build_fieldcat 'XREF2' '参考代码2' 10. * build_fieldcat 'XREF3' '参考代码3' 10. build_fieldcat 'FKBER' '功能范围' 10. build_fieldcat 'VERTN' '款项项目' 10. build_fieldcat 'VERTT' '回款类型' 10. build_fieldcat 'KNDNR' '客户' 10. build_fieldcat 'ARTNR' '产品编号' 10. build_fieldcat 'VKORG' '销售机构' 10. build_fieldcat 'VTWEG' '分销渠道' 10. build_fieldcat 'SPART' '品牌' 10. build_fieldcat 'BELNR' '会计凭证号码' 10. build_fieldcat 'GJAHR' '财年' 10. build_fieldcat 'BUKRS' '公司代码' 10. build_fieldcat 'MSG' '消息' 10. build_fieldcat 'TYPE' '结果' 10. build_fieldcat 'LIGHT' '执行结果' 8. ENDFORM. " F_ALV_FIELDCAT *&---------------------------------------------------------------------* *& FORM F_LAYOUT *&---------------------------------------------------------------------* * TEXT *----------------------------------------------------------------------* FORM f_layout . gs_layout-zebra = 'X'. gs_layout-colwidth_optimize = 'X'. gs_layout-box_fieldname = 'SLBOX'. ENDFORM. " F_LAYOUT *&---------------------------------------------------------------------* *& FORM F_DISPLAY *&---------------------------------------------------------------------* * TEXT *----------------------------------------------------------------------* FORM f_display . * 可以保存格式 DATA:gs_variant TYPE disvariant. gs_variant-report = sy-repid. CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY' EXPORTING i_callback_program = sy-repid i_save = 'A' "可以保存格式 is_variant = gs_variant "LAYOUT参数 可以保存格式 is_layout = gs_layout it_fieldcat = fieldcatalog[] i_callback_pf_status_set = 'FRM_SET_STATUS' "状态栏 i_callback_user_command = 'FRM_USER_COMMAND' "按钮处理 TABLES t_outtab = gt_input EXCEPTIONS program_error = 1 OTHERS = 2. IF sy-subrc <> 0. ENDIF. ENDFORM. "F_DISPLAY FORM frm_set_status USING pt_extab TYPE slis_t_extab . SET PF-STATUS 'STANDARD'. ENDFORM. "Frm_SET_STATUS FORM frm_user_command USING r_ucomm LIKE sy-ucomm rs_selfield TYPE slis_selfield. DATA: l_grid TYPE REF TO cl_gui_alv_grid, l_subrc TYPE sy-subrc. CASE r_ucomm. WHEN 'SAVE'. *&--------------调用BAPI PERFORM call_bapi. rs_selfield-refresh = 'X'. WHEN OTHERS. ENDCASE. ENDFORM. "user_command *&---------------------------------------------------------------------* *& 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. *Messages *---------------------------------------------------------- * * Message class: Hard coded * 文件格式不对!
