最近有个新报表需求,又学会了新的知识给大家分享,当然我自己也记录一下:
厂内物流费用分摊依据统计表:
入库清单:根据物料凭证行项目进行展示,可以展示工厂、过账日期、存储位置(库存标识符)、库存物料、数量、移动类型、事务代码等情况。(写入EXCEL第1个sheet页,命名为入库清单)
交货清单:根据交货单行项目进行展示,可以展示工厂、过账日期、交货单号、物料编码、物料描述、移动类型、运输方式、交货数量、参考凭证、参考项目、发出库位、发出库位描述、调入库位、调入库位描述等情况。(写入EXCEL第2个sheet页,命名为交货清单)
各厂统计表:根据入库清单、交货清单,通过EXCEL公式自动计算,分别计算出各厂的分摊依据。(EXCEL第3-6个sheet页)
首先取数逻辑部分就不细说,取数逻辑很简单,数据存放到了两个gt内,
之后到了分页过程:
FORM frm_edit_table .
DATA:
lv_menge TYPE string."当期实际产量
CLEAR gs_table.
* BREAK-POINT.
gs_line_table-sheet_name = TEXT-001.
LOOP AT gt_table INTO gs_table.
lv_menge = gs_table-menge.
PERFORM sub_put_sign_in_front CHANGING lv_menge.
CONCATENATE
gs_table-werks cl_abap_char_utilities=>horizontal_tab"
gs_table-budat cl_abap_char_utilities=>horizontal_tab"
gs_table-lgort_sid cl_abap_char_utilities=>horizontal_tab"
gs_table-matbf cl_abap_char_utilities=>horizontal_tab"
lv_menge cl_abap_char_utilities=>horizontal_tab"
gs_table-bwart cl_abap_char_utilities=>horizontal_tab"
gs_table-tcode2 cl_abap_char_utilities=>horizontal_tab"
INTO ls_data-line.
CONDENSE ls_data-line NO-GAPS .
APPEND ls_data TO gs_line_table-line.
ENDLOOP.
APPEND gs_line_table TO gt_line.
ENDFORM.
数据类型不符,用lv_menge 代替了gs_table-menge
处理代码块如下:
PERFORM sub_put_sign_in_front CHANGING lv_menge.
FORM sub_put_sign_in_front CHANGING p_value TYPE string.
DATA:
lv_value TYPE string,
lv_text.
SEARCH p_value FOR '-'.
IF sy-subrc = 0 AND sy-fdpos <> 0.
SPLIT p_value AT '-' INTO lv_value lv_text.
CONDENSE lv_value.
CLEAR p_value.
CONCATENATE '-'
lv_value
INTO p_value.
ELSE.
CONDENSE p_value.
ENDIF.
ENDFORM.
最后用于下载的内表gt line 首先定义的结构:
debug内容如下
这样,我们就把最终基础表数据处理好,到达下一步,下载模板
通用代码直接copy就可以了
FORM frm_download_exl .
DATA:
lv_obj TYPE REF TO cl_gui_frontend_services,
lt_excel_itab TYPE string OCCURS 0 WITH HEADER LINE,
lv_gen_fnam TYPE char20,
lv_gen_path TYPE localfile,
lv_filename TYPE string,
lv_message TYPE char100,
lv_fullpath TYPE string VALUE 'C:\',
lv_path TYPE string VALUE 'C:\',
ls_objs TYPE wwwdatatab.
SELECT SINGLE wwwdata~relid
wwwdata~objid
INTO CORRESPONDING FIELDS OF ls_objs
FROM wwwdata
WHERE relid = 'MI'
AND objid = 'ZFI093'
AND srtf2 = 0.
IF sy-subrc <> 0.
MESSAGE s208(00)
WITH '模板不存在,请维护ZFI093!'
DISPLAY LIKE 'E'.
LEAVE LIST-PROCESSING.
ENDIF.
CREATE OBJECT lv_obj .
CALL METHOD lv_obj->file_save_dialog
EXPORTING
default_extension = 'XLSX' "默认保存文件格式
default_file_name = lv_filename "默认文件名称
CHANGING
filename = lv_filename
path = lv_path
fullpath = lv_fullpath.
IF sy-subrc <> 0 .
MESSAGE s208(00)
WITH '保存文件出错'
DISPLAY LIKE 'E'.
LEAVE LIST-PROCESSING.
ELSEIF lv_fullpath IS INITIAL.
LEAVE LIST-PROCESSING.
ENDIF.
lv_gen_path = lv_path.
REPLACE '.XLS' WITH space INTO lv_filename.
CONDENSE lv_filename NO-GAPS.
lv_gen_fnam = lv_filename.
CALL FUNCTION 'ZDOWNLOAD_TO_EXCEL_MULSHEET'
EXPORTING
excel_id = 'ZFI093'
path = lv_gen_path
show_excel = '' "是否显示EXCEL
excel_fname = lv_gen_fnam "EXCEL FILE NAME
top_left_range = 'A2' "起始列
IMPORTING
e_message = lv_message "返回错误日志
TABLES
line = gt_line "数据内容
EXCEPTIONS
excel_error = 1
OTHERS = 2.
ENDFORM.
多sheet页的功能在很多模块也很常用例如生产日报月报班报、班日台账、质量报告单、财务结算表等,掌握方法加以理解,就能运用到各个方向,第一次写博客,希望大家给予支持建议!abap小白,希望可以一起学习。
本文含有隐藏内容,请 开通VIP 后查看