FORM frm_down_cwpd .
PERFORM frm_save_dialog.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form frm_save_dialog
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& --> p1 text
*& <-- p2 text
*&---------------------------------------------------------------------*
FORM frm_save_dialog .
* 选择文件。
DATA: l_name LIKE wwwdatatab,
l_mine LIKE w3mime OCCURS 10,
l_title TYPE string,
l_filename TYPE string,
l_path TYPE string,
l_fullpath TYPE rlgrap-filename.
* " 工厂描述
SELECT a~werks ,name1,butxt
FROM t001w
JOIN t001 ON t001~bukrs = t001w~bwkey
JOIN @gt_data AS a ON a~werks = t001w~werks
INTO TABLE @DATA(lt_werks_des).
SORT lt_werks_des BY werks.
LOOP AT gt_data INTO DATA(gs_data) WHERE checkbox = 'X' GROUP BY ( iblnr = gs_data-iblnr ) .
CLEAR:gt_data_cp,gt_data_ycl.
CLEAR:l_name ,
l_mine ,
l_title ,
l_filename,
l_path ,
l_fullpath.
LOOP AT gt_data INTO DATA(gs_data_cp) WHERE checkbox = 'X' AND iblnr = gs_data-iblnr AND zcwph+0(2) = 'CP' GROUP BY ( iblnr = gs_data-iblnr ).
LOOP AT GROUP gs_data_cp INTO DATA(gv_data_cp).
MOVE-CORRESPONDING gv_data_cp TO lv_data_cp.
COLLECT lv_data_cp INTO gt_data_cp.
ENDLOOP.
* APPEND gs_data_cp TO gt_data_cp.
ENDLOOP.
LOOP AT gt_data INTO DATA(gs_data_ycl) WHERE checkbox = 'X' AND iblnr = gs_data-iblnr AND zcwph+0(2) = 'CJ' GROUP BY ( iblnr = gs_data-iblnr ).
LOOP AT GROUP gs_data_ycl INTO DATA(gv_data_ycl).
MOVE-CORRESPONDING gv_data_ycl TO lv_data_ycl.
COLLECT lv_data_ycl INTO gt_data_ycl.
ENDLOOP.
* APPEND gs_data_ycl TO gt_data_ycl.
ENDLOOP.
* LOOP AT gt_data INTO DATA(gs_data_cp) WHERE checkbox = 'X' AND iblnr = gs_data-iblnr AND zcwph+0(2) = 'CP'.
* APPEND gs_data_cp TO gt_data_cp.
* ENDLOOP.
* LOOP AT gt_data INTO DATA(gs_data_ycl) WHERE checkbox = 'X' AND iblnr = gs_data-iblnr AND zcwph+0(2) = 'CJ'.
* APPEND gs_data_ycl TO gt_data_ycl.
* ENDLOOP.
READ TABLE lt_werks_des INTO DATA(ls_werks_des) WITH KEY werks = gs_data-werks BINARY SEARCH.
PERFORM frm_open USING '财务盘点导出' 'ZMMRP0159' l_fullpath.
*-- 打开excel模板
PERFORM frm_open_excel USING l_fullpath.
*-- 向excel写入成品信息
PERFORM frm_write_excel_cp_sheet USING ls_werks_des-butxt gs_data." 向EXCEL中写入数据
* 写入原材料信息
PERFORM frm_write_excel_ycl_sheet USING ls_werks_des-butxt gs_data." 向EXCEL中写入数据
* 设置单元格边框。
* PERFORM frm_range_borders.
SET PROPERTY OF gv_excel 'Visible' = 1.
* 保存数据并释放对象。
PERFORM frm_save_excel USING l_fullpath.
ENDLOOP.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form frm_open
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& --> P_
*& --> P_
*& --> L_FULLPATH
*&---------------------------------------------------------------------*
FORM frm_open USING VALUE(p_value1) VALUE(p_value2) p_value3 TYPE rlgrap-filename.
DATA: lo_objdata LIKE wwwdatatab,
lc_filename TYPE string,
lc_fullpath TYPE string,
lc_path TYPE string,
ls_destination LIKE rlgrap-filename,
ls_objnam TYPE string,
li_rc LIKE sy-subrc,
ls_errtxt TYPE string.
DATA:p_objid TYPE wwwdatatab-objid,
p_dest LIKE sapb-sappfad.
DATA lv_xstring TYPE xstring.
p_objid = p_value2. " 此处为EXCEL模板名称d
CONCATENATE p_value1 sy-datum '-' sy-uzeit'.XLS' INTO lc_filename.
CALL METHOD cl_gui_frontend_services=>file_save_dialog " 调用保存对话框
EXPORTING
default_extension = 'XLS'
default_file_name = lc_filename
CHANGING
filename = lc_filename
path = lc_path
fullpath = lc_fullpath
EXCEPTIONS
cntl_error = 1
error_no_gui = 2
not_supported_by_gui = 3
OTHERS = 4.
IF lc_fullpath = ''.
MESSAGE '不能打开excel' TYPE 'E'.
ENDIF.
IF sy-subrc = 0.
p_dest = lc_fullpath.
* concatenate p_objid '.XLS' into ls_objnam.
CONDENSE ls_objnam NO-GAPS.
SELECT SINGLE relid objid FROM wwwdata INTO CORRESPONDING FIELDS OF lo_objdata
WHERE srtf2 = 0 AND relid = 'MI' AND objid = p_objid.
* 检查表wwwdata中是否存在所指定的模板文件
IF sy-subrc NE 0 OR lo_objdata-objid EQ space. " 如果不存在,则给出错误提示
MESSAGE '模板文件' && ls_objnam && '不存在' TYPE 'E'.
ENDIF.
ls_destination = p_dest. " 保存路径
*2. 如果存在,调用DOWNLOAD_WEB_OBJECT 函数下载模板到路径下
CALL FUNCTION 'DOWNLOAD_WEB_OBJECT'
EXPORTING
key = lo_objdata
destination = ls_destination
IMPORTING
rc = li_rc.
IF li_rc NE 0.
* MESSAGE e045 WITH ls_objnam ." 模板文件:' ls_objnam '下载失败
ENDIF.
p_value3 = ls_destination.
ENDIF.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form frm_open_excel
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& --> L_FULLPATH
*&---------------------------------------------------------------------*
FORM frm_open_excel USING pa_path.
* 创建应用程序对象
CREATE OBJECT gv_excel 'Excel.Application'.
* 创建工作簿
CALL METHOD OF
gv_excel
'Workbooks' = gv_book.
* 打开指定路径的工作簿。
CALL METHOD OF
gv_book
'Open' = gv_book
EXPORTING
#1 = pa_path.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form frm_write_excel_cp_sheet
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& --> LS_WERKS_DES_NAME1
*& --> GS_DATA
*&---------------------------------------------------------------------*
FORM frm_write_excel_cp_sheet USING p_werks_des p_head TYPE ty_data.
* TYPES BEGIN OF ty_cp.
* TYPES:werks TYPE ztmm0105-werks,
* zzsyb TYPE mara-zzsyb, " 事业部
* crnam TYPE ztmm0105-crnam, " 盘点人
* zcwph TYPE ztmm0105-zcwph, " 财务盘点编号
* matnr TYPE ztmm0105-matnr, "
* matnr_txt TYPE makt-maktx, "
* mes_batch TYPE ztmm0105-mes_batch, "
* lgort TYPE ztmm0105-lgort, "
* zzsyb_txt TYPE ztmm0001-zsybm, "
* meins TYPE ztmm0105-meins, "
* clabs TYPE mchb-clabs,
* ceinm TYPE mchb-ceinm,
* labst TYPE ztmm0105-labst,
* dimng TYPE ztmm0105-dimng.
* TYPES END OF ty_cp.
* DATA:lw_cp_tab TYPE ty_cp.
* DATA:lt_cp_tab TYPE TABLE OF ty_cp.
* DATA(lt_data) = gt_data_cp.
* DELETE lt_data WHERE checkbox IS INITIAL.
* MOVE-CORRESPONDING lt_data TO lt_cp_tab.
* 获取人员信息SHEET页签
DATA:l_num TYPE int4.
CALL METHOD OF
gv_book
'Sheets' = gv_sheet
EXPORTING
#1 = 1.
*-- 设置excel可见
CALL METHOD OF
gv_excel
'Worksheets' = gv_sheet
EXPORTING
#1 = 1.
CALL METHOD OF
gv_sheet
'Activate'.
l_num = 6.
IF p_werks_des IS NOT INITIAL.
PERFORM frm_write_cell USING 1 1 p_werks_des .
ENDIF.
DATA lv_cell_02 TYPE string.
DATA lv_cell_03 TYPE string.
CLEAR:lv_cell_02,lv_cell_03.
lv_cell_02 = '2025年中(' && p_head-crdat+4(2) &&'月)盘点表 表单编号:' && p_head-iblnr.
lv_cell_03 = '数据截止日期:' && p_head-crdat && '-' && p_head-crtim+0(2) && ':' && p_head-crtim+2(2) && ':'&& p_head-crtim+4(2) && ' 盘点对象:' && p_head-zzsyb_txt.
PERFORM frm_write_cell USING 2 1 lv_cell_02 .
PERFORM frm_write_cell USING 3 1 lv_cell_03 .
LOOP AT gt_data_cp INTO DATA(lw_cp_tab).
IF lw_cp_tab-zmeng IS NOT INITIAL. " 无条码
DATA(lv_sp) = lw_cp_tab-zmeng.
ELSEIF lw_cp_tab-scmng IS NOT INITIAL." 抽盘
lv_sp = lw_cp_tab-scmng.
ELSEIF lw_cp_tab-remng IS NOT INITIAL." 复盘
lv_sp = lw_cp_tab-remng.
ELSEIF lw_cp_tab-itmng IS NOT INITIAL." 初盘
lv_sp = lw_cp_tab-itmng.
ENDIF.
* 向EXCEL中写数据。
PERFORM frm_write_cell USING l_num 1 lw_cp_tab-zcwph .
PERFORM frm_write_cell USING l_num 2 lw_cp_tab-matnr ."
PERFORM frm_write_cell USING l_num 3 lw_cp_tab-matnr_txt .
PERFORM frm_write_cell USING l_num 4 lw_cp_tab-mes_batch .
PERFORM frm_write_cell USING l_num 5 lw_cp_tab-werks .
PERFORM frm_write_cell USING l_num 6 lw_cp_tab-lgort .
PERFORM frm_write_cell USING l_num 7 lw_cp_tab-zzsyb_txt .
PERFORM frm_write_cell USING l_num 8 lw_cp_tab-meins .
PERFORM frm_write_cell USING l_num 9 lw_cp_tab-clabs .
PERFORM frm_write_cell USING l_num 10 lw_cp_tab-ceinm .
PERFORM frm_write_cell USING l_num 11 lw_cp_tab-labst .
PERFORM frm_write_cell USING l_num 12 lv_sp .
PERFORM frm_write_cell USING l_num 13 lw_cp_tab-dimng .
l_num = l_num + 1.
ENDLOOP.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form frm_write_excel_ycl_sheet
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& --> LS_WERKS_DES_NAME1
*& --> GS_DATA
*&---------------------------------------------------------------------*
FORM frm_write_excel_ycl_sheet USING p_werks_des p_head TYPE ty_data.
* TYPES BEGIN OF ty_cp.
* TYPES:werks TYPE ztmm0105-werks,
* zzsyb TYPE mara-zzsyb, " 事业部
* crnam TYPE ztmm0105-crnam, " 盘点人
* zcwph TYPE ztmm0105-zcwph, " 财务盘点编号
* matnr TYPE ztmm0105-matnr, "
* matnr_txt TYPE makt-maktx, "
* mes_batch TYPE ztmm0105-mes_batch, "
* lgort TYPE ztmm0105-lgort, "
* zzsyb_txt TYPE ztmm0001-zsybm, "
* meins TYPE ztmm0105-meins, "
* clabs TYPE mchb-clabs,
* ceinm TYPE mchb-ceinm,
* labst TYPE ztmm0105-labst,
* dimng TYPE ztmm0105-dimng.
* TYPES END OF ty_cp.
* DATA:lw_cp_tab TYPE ty_cp.
* DATA:lt_cp_tab TYPE TABLE OF ty_cp.
* DATA(lt_data) = gt_data_ycl.
* DELETE lt_data WHERE checkbox IS INITIAL.
* MOVE-CORRESPONDING lt_data TO lt_cp_tab.
* 获取人员信息SHEET页签
DATA:l_num TYPE int4.
CALL METHOD OF
gv_book
'Sheets' = gv_sheet
EXPORTING
#1 = 2.
*-- 设置excel可见
CALL METHOD OF
gv_excel
'Worksheets' = gv_sheet
EXPORTING
#1 = 2.
CALL METHOD OF
gv_sheet
'Activate'.
l_num = 6.
IF p_werks_des IS NOT INITIAL.
PERFORM frm_write_cell USING 1 1 p_werks_des .
ENDIF.
DATA lv_cell_02 TYPE string.
DATA lv_cell_03 TYPE string.
CLEAR:lv_cell_02,lv_cell_03.
lv_cell_02 = '2025年中(' && p_werks_des+0(2) &&')盘点表 表单编号:' && p_head-iblnr.
lv_cell_03 = '数据截止日期:' && p_head-crdat && '-' && p_head-crtim+0(2) && ':' && p_head-crtim+2(2) && ':'&& p_head-crtim+4(2) && ' 类型:原材料类型' .
PERFORM frm_write_cell USING 2 1 lv_cell_02 .
PERFORM frm_write_cell USING 3 1 lv_cell_03 .
LOOP AT gt_data_ycl INTO DATA(lw_cp_tab).
IF lw_cp_tab-zmeng IS NOT INITIAL. " 无条码
DATA(lv_sp) = lw_cp_tab-zmeng.
ELSEIF lw_cp_tab-scmng IS NOT INITIAL." 抽盘
lv_sp = lw_cp_tab-scmng.
ELSEIF lw_cp_tab-remng IS NOT INITIAL." 复盘
lv_sp = lw_cp_tab-remng.
ELSEIF lw_cp_tab-itmng IS NOT INITIAL." 初盘
lv_sp = lw_cp_tab-itmng.
ENDIF.
* 向EXCEL中写数据。
PERFORM frm_write_cell USING l_num 1 lw_cp_tab-zcwph .
PERFORM frm_write_cell USING l_num 2 lw_cp_tab-werks ."
PERFORM frm_write_cell USING l_num 3 lw_cp_tab-lgort .
PERFORM frm_write_cell USING l_num 4 lw_cp_tab-lgort_txt .
PERFORM frm_write_cell USING l_num 5 lw_cp_tab-matnr .
PERFORM frm_write_cell USING l_num 6 lw_cp_tab-matnr_txt .
PERFORM frm_write_cell USING l_num 7 lw_cp_tab-bin .
PERFORM frm_write_cell USING l_num 8 lw_cp_tab-zgyspc .
PERFORM frm_write_cell USING l_num 9 lw_cp_tab-meins .
PERFORM frm_write_cell USING l_num 10 lw_cp_tab-clabs .
PERFORM frm_write_cell USING l_num 11 lw_cp_tab-ceinm .
PERFORM frm_write_cell USING l_num 12 lw_cp_tab-labst .
PERFORM frm_write_cell USING l_num 13 lv_sp .
PERFORM frm_write_cell USING l_num 14 lw_cp_tab-dimng .
CLEAR:lv_sp.
l_num = l_num + 1.
ENDLOOP.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form frm_write_cell
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& --> P_1
*& --> P_1
*& --> P_WERKS_DES
*&---------------------------------------------------------------------*
FORM frm_write_cell USING pa_row
pa_col
pa_val.
CALL METHOD OF
gv_excel
'Cells' = gv_cell
EXPORTING
#1 = pa_row
#2 = pa_col.
SET PROPERTY OF gv_cell 'Value' = pa_val.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form frm_save_excel
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& --> L_FULLPATH
*&---------------------------------------------------------------------*
FORM frm_save_excel USING p_l_fullpath.
SET PROPERTY OF gv_excel 'DisplayAlerts' = 0.
DATA: lv_codepage TYPE cpcodepage.
* CALL METHOD OF
* gv_book
* 'SAVE'
* EXPORTING
* #1 = pa_fullpath.
* CALL METHOD OF
* gv_book
* 'SAVE'.
lv_codepage = '4110'.
CALL METHOD OF gv_book 'SaveAs'
EXPORTING
#1 = p_l_fullpath.
* #2 = -4143 " xlWorkbookNormal
* #3 = 0 " No password
* #4 = 1 " No write reservation password
* #5 = 0 " No read-only recommended
* #6 = 0 " No create backup
* #7 = 1 " Add to MRU
* #8 = lv_codepage. " 指定编码
CALL METHOD OF
gv_book
'Exit' = gv_book.
CALL METHOD OF gv_book 'Close'
EXPORTING
#1 = 0.
* 退出应用程序
CALL METHOD OF gv_excel 'QUIT'.
* 释放用到的对象
FREE OBJECT gv_cell.
FREE OBJECT gv_range.
FREE OBJECT gv_borders.
FREE OBJECT gv_rows. "not used
FREE OBJECT gv_sheet.
FREE OBJECT gv_book.
FREE OBJECT gv_excel.
ENDFORM.