一、功能逻辑



二、功能界面

| 物料编码 | 工厂 | 年度 | 期间 | 材料成本 | 直接人工 | 模具费用 | 外发加工费 | 其他制费 |
三、功能代码
*&———————————————————————*
*& 程序名: ZRPFI_039
*&
*&———————————————————————*
*& 创建者(公司)/日期:
*& 程序描述:
*& 1.成本组件分解
*& 2.
*&———————————————————————*
*& 版本/修改者(公司)/日期//修改描述
*& 1
* 如果模板更新请到SMW0更新 ZRPFI_039.XLS模板
*&———————————————————————*
REPORT ZRPFI_039.
” 成本组件分解
TABLES: SSCRFIELDS.
*&——-alv类型定义
DATA: FIELDCATALOG TYPE SLIS_T_FIELDCAT_ALV WITH HEADER LINE,
GD_TAB_GROUP TYPE SLIS_T_SP_GROUP_ALV,
GD_LAYOUT TYPE SLIS_LAYOUT_ALV,
GD_REPID LIKE SY-REPID.
DATA: FUNCTXT TYPE SMP_DYNTXT.
TYPES:BEGIN OF TY_UPLOAD_DATA,
MATERIAL TYPE MARA-MATNR, ” 物料号
PLANT TYPE MARC-WERKS, ” 工厂
YEAR(4) TYPE C, ” 年度
PERIOD(3) TYPE C, ” 记帐期间
* VAL_TYPE TYPE STRING, ” 评估类型
KST001 TYPE STRING,
KST002 TYPE STRING,
* KST003 TYPE STRING,
KST004 TYPE STRING,
* KST005 TYPE STRING,
KST006 TYPE STRING,
* KST007 TYPE STRING,
KST008 TYPE STRING,
* KST009 TYPE STRING,
* KST010 TYPE STRING,
*&————-显示结果字段
TYPE(1) TYPE C, “消息类型
MESSAGE(60) TYPE C, “消息
LIGHT(4) TYPE C, “执行情况
ZSEL(1) TYPE C,
END OF TY_UPLOAD_DATA.
DATA:GT_UPLOAD_DATA TYPE STANDARD TABLE OF TY_UPLOAD_DATA,
GW_UPLOAD_DATA TYPE TY_UPLOAD_DATA.
FIELD-SYMBOLS : <FLS_DATA> LIKE LINE OF GT_UPLOAD_DATA.
DATA:L_FLAG TYPE C. ” 标识
*&———检查物料和工厂存在否
TYPES : BEGIN OF TY_MARC,
MATNR TYPE MARC-MATNR,
WERKS TYPE MARC-WERKS,
END OF TY_MARC.
DATA : GT_MARC TYPE TABLE OF TY_MARC.
DATA : GS_MARC LIKE LINE OF GT_MARC.
SELECTION-SCREEN BEGIN OF BLOCK B1 WITH FRAME TITLE TEXT-002.
PARAMETERS: P_FILE TYPE RLGRAP-FILENAME .”导入文件
SELECTION-SCREEN END OF BLOCK B1.
SELECTION-SCREEN COMMENT 01(20) TEXT-H01.
SELECTION-SCREEN: FUNCTION KEY 1.
INITIALIZATION.
FUNCTXT-ICON_ID = ICON_EXPORT.
FUNCTXT-QUICKINFO = '模版下载'(001).
FUNCTXT-ICON_TEXT = '模版下载'(001).
SSCRFIELDS-FUNCTXT_01 = FUNCTXT.
AT SELECTION-SCREEN ON VALUE-REQUEST FOR P_FILE.
PERFORM FRM_BROWSER_FILE.
AT SELECTION-SCREEN.
*&————–模板下载
IF SSCRFIELDS-UCOMM = 'FC01'.
* PERFORM TEMP_EXCEL_GET USING 'ZRPFI_039.XLS'.
PERFORM FRM_DOWNLOAD_TEMP USING 'ZRPFI_039'.
ELSEIF SSCRFIELDS-UCOMM = 'ONLI'.
IF P_FILE IS NOT INITIAL.
PERFORM FRM_UPLOAD_DATA.
*&————检查数据
PERFORM FRM_CHECK_DATA.
*&————-alv展示批导钱的数据
PERFORM BUILD_FIELDCATALOG.
PERFORM BUILD_LAYOUT.
PERFORM DISPLAY_ALV_REPORT.
ENDIF.
ENDIF.
*&———————————————————————*
*& Form FRM_BROWSER_FILE
*&———————————————————————*
* text
*———————————————————————-*
* –> p1 text
* <– p2 text
*———————————————————————-*
FORM FRM_BROWSER_FILE .
DATA V_MATERIAL LIKE RLGRAP-FILENAME.
CALL FUNCTION 'WS_FILENAME_GET'
EXPORTING
MASK = ',*.* ,*.*.'
MODE = '0'
TITLE = '请选择要上传的信息文件'
IMPORTING
FILENAME = V_MATERIAL
EXCEPTIONS
INV_WINSYS = 1
NO_BATCH = 2
SELECTION_CANCEL = 3
SELECTION_ERROR = 4
OTHERS = 5.
IF SY-SUBRC <> 0.
ENDIF.
P_FILE = V_MATERIAL.
ENDFORM. ” FRM_BROWSER_FILE
*&———————————————————————*
*& Form FRM_UPLOAD_DATA
*&———————————————————————*
* text
*———————————————————————-*
* –> p1 text
* <– p2 text
*———————————————————————-*
FORM FRM_UPLOAD_DATA .
DATA: L_RAW TYPE TRUXS_T_TEXT_DATA.
* 从EXCEL上传到内表
CALL FUNCTION 'TEXT_CONVERT_XLS_TO_SAP'
EXPORTING
* I_FIELD_SEPERATOR =
I_LINE_HEADER = 'X'
I_TAB_RAW_DATA = L_RAW
I_FILENAME = P_FILE
TABLES
I_TAB_CONVERTED_DATA = GT_UPLOAD_DATA
EXCEPTIONS
CONVERSION_FAILED = 1
OTHERS = 2.
IF SY-SUBRC <> 0.
MESSAGE ID SY-MSGID TYPE 'S' NUMBER SY-MSGNO WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4 DISPLAY LIKE 'E'.
STOP.
ENDIF.
“DELETE gt_upload_data INDEX 1.
ENDFORM. ” FRM_UPLOAD_DATA
*&———————————————————————*
*& Form FRM_BAPI
*&———————————————————————*
* text
*———————————————————————-*
FORM FRM_BAPI .
DATA:LT_CKML_T_CHANGE_CCS TYPE STANDARD TABLE OF CKML_S_CHANGE_CCS,
LW_CKML_S_CHANGE_CCS TYPE CKML_S_CHANGE_CCS.
*
* DATA: IT_CKMLPP TYPE CKI_T_CKMLPP,
* IT_CKMLCR TYPE CKI_T_CKMLCR.
* DATA:BEGIN OF LS_ENTITRIES ,
* MATNR TYPE CKMLHD-MATNR,
* BWKEY TYPE CKMLHD-BWKEY,
* JAHRPER TYPE CKMLHD-JAHRPER,
* END OF LS_ENTITRIES.
*
* DATA:LT_ENTITRIES LIKE TABLE OF LS_ENTITRIES.
* 数据检查
*获取上传数据,转换数据
LOOP AT GT_UPLOAD_DATA ASSIGNING <FLS_DATA> WHERE TYPE IS INITIAL.
LW_CKML_S_CHANGE_CCS-MATERIAL = <FLS_DATA>-MATERIAL.
LW_CKML_S_CHANGE_CCS-PLANT = <FLS_DATA>-PLANT.
* lw_ckml_s_change_ccs-val_type = <fls_data>-val_type.
LW_CKML_S_CHANGE_CCS-YEAR = <FLS_DATA>-YEAR.
LW_CKML_S_CHANGE_CCS-PERIOD = <FLS_DATA>-PERIOD.
LW_CKML_S_CHANGE_CCS-CATEGORY = 'ZU'.
LW_CKML_S_CHANGE_CCS-CURR_TYPE = '10'.”<fls_data>-VAL_TYPE.
LW_CKML_S_CHANGE_CCS-KST001 = <FLS_DATA>-KST001.
LW_CKML_S_CHANGE_CCS-KST002 = <FLS_DATA>-KST002.
* LW_CKML_S_CHANGE_CCS-KST003 = <FLS_DATA>-KST003.
LW_CKML_S_CHANGE_CCS-KST004 = <FLS_DATA>-KST004.
* LW_CKML_S_CHANGE_CCS-KST005 = <FLS_DATA>-KST005.
LW_CKML_S_CHANGE_CCS-KST006 = <FLS_DATA>-KST006.
* LW_CKML_S_CHANGE_CCS-KST007 = <FLS_DATA>-KST007.
LW_CKML_S_CHANGE_CCS-KST008 = <FLS_DATA>-KST008.
* LW_CKML_S_CHANGE_CCS-KST009 = <FLS_DATA>-KST009.
* LW_CKML_S_CHANGE_CCS-KST010 = <FLS_DATA>-KST010.
APPEND LW_CKML_S_CHANGE_CCS TO LT_CKML_T_CHANGE_CCS.
CLEAR LW_CKML_S_CHANGE_CCS.
ENDLOOP.
” 通过导入的物料编码、工厂字段查找表CKMLHD,取CKMLHD-KALNR;通过字段值KALNR,
” 查找表MLCD,KALNR、BDATJ=会计年度、POPER=输入的会计期间、CATEG=‘ZU’、PTYP=‘B+‘,
” 取MLCD-BVALT作为函数的PROC_ALT字段值
” 备选采购/过程
TYPES: BEGIN OF TY_MLDOC,
MATNR TYPE CKMLHD-MATNR,
BWKEY TYPE CKMLHD-BWKEY,
KALNR TYPE MLDOC-KALNR,
* bdatj TYPE mlcd-bdatj,
* poper TYPE mlcd-poper,
* JAHRPER TYPE MLDOC-JAHRPER,
BVALT TYPE MLCD-BVALT,
* untper TYPE MLDOC-untper,
* CURTP TYPE MLDOC-CURTP,
END OF TY_MLDOC.
DATA:LT_MLDOC TYPE STANDARD TABLE OF TY_MLDOC WITH HEADER LINE.
IF LT_CKML_T_CHANGE_CCS IS NOT INITIAL.
* SELECT
* ckmlhd~matnr
* ckmlhd~bwkey
* mlcd~kalnr
* mlcd~bdatj
* mlcd~poper
* mlcd~bvalt
* mlcd~untper
* mlcd~curtp
* INTO CORRESPONDING FIELDS OF TABLE lt_mlcd
* FROM mlcd INNER JOIN ckmlhd
* ON mlcd~kalnr = ckmlhd~kalnr
* FOR ALL ENTRIES IN lt_ckml_t_change_ccs
* WHERE matnr = lt_ckml_t_change_ccs-material
* AND bwkey = lt_ckml_t_change_ccs-plant
* AND bdatj = lt_ckml_t_change_ccs-year
* AND poper = lt_ckml_t_change_ccs-period
* AND categ = 'ZU'
* AND ptyp = 'B+'.
SELECT
CKMLHD~MATNR
CKMLHD~BWKEY
MLDOC~KALNR
* MLDOC~BDATJ
* MLDOC~POPER
MLDOC~BVALT
* MLDOC~untper
* MLDOC~CURTP
INTO CORRESPONDING FIELDS OF TABLE LT_MLDOC
FROM MLDOC INNER JOIN CKMLHD
ON MLDOC~KALNR = CKMLHD~KALNR
FOR ALL ENTRIES IN LT_CKML_T_CHANGE_CCS
WHERE MATNR = LT_CKML_T_CHANGE_CCS-MATERIAL
AND BWKEY = LT_CKML_T_CHANGE_CCS-PLANT
* AND BDATJ = LT_CKML_T_CHANGE_CCS-YEAR
* AND POPER = LT_CKML_T_CHANGE_CCS-PERIOD
AND CATEG = 'ZU'
AND PTYP = 'B+'.
ENDIF.
* IF LT_MLCD[] IS NOT INITIAL.
* SELECT * INTO CORRESPONDING FIELDS OF TABLE IT_CKMLPP FROM CKMLPP
* FOR ALL ENTRIES IN LT_MLCD
* WHERE KALNR = LT_MLCD-KALNR
* AND BDATJ = LT_MLCD-BDATJ
* AND POPER = LT_MLCD-POPER
* AND UNTPER = LT_MLCD-UNTPER.
*
* SELECT * INTO CORRESPONDING FIELDS OF TABLE IT_CKMLCR FROM CKMLCR
* FOR ALL ENTRIES IN LT_MLCD
* WHERE KALNR = LT_MLCD-KALNR
* AND BDATJ = LT_MLCD-BDATJ
* AND POPER = LT_MLCD-POPER
* AND UNTPER = LT_MLCD-UNTPER
* AND CURTP = LT_MLCD-CURTP.
* ENDIF.
LOOP AT LT_CKML_T_CHANGE_CCS INTO LW_CKML_S_CHANGE_CCS.
READ TABLE LT_MLDOC WITH KEY MATNR = LW_CKML_S_CHANGE_CCS-MATERIAL
BWKEY = LW_CKML_S_CHANGE_CCS-PLANT.
* BDATJ = LW_CKML_S_CHANGE_CCS-YEAR
* POPER = LW_CKML_S_CHANGE_CCS-PERIOD.
IF SY-SUBRC = 0.
LW_CKML_S_CHANGE_CCS-PROC_ALT = LT_MLDOC-BVALT. ” 备选采购/过程
MODIFY LT_CKML_T_CHANGE_CCS FROM LW_CKML_S_CHANGE_CCS.
ENDIF.
ENDLOOP.
*
* CALL METHOD CL_FINS_ACDOC_ML_UTIL=>SET_CKML_BUFFER
* EXPORTING
* IT_CKMLPP = IT_CKMLPP
* IT_CKMLCR = IT_CKMLCR.
” 调用BAPI
IF LT_CKML_T_CHANGE_CCS IS NOT INITIAL.
CALL FUNCTION 'CKMMC_MANCHANG_AUTOMATED'
EXPORTING
IT_CCS = LT_CKML_T_CHANGE_CCS
* I_KONGR =
* I_RUN_TYPE =
* I_RUN_APPL =
I_KEART = 'H'.
MESSAGE ID SY-MSGID TYPE 'S'
NUMBER SY-MSGNO WITH SY-MSGV1 SY-MSGV2 INTO <FLS_DATA>-MESSAGE.
IF SY-SUBRC = 0 .
<FLS_DATA>-TYPE = 'S'.
COMMIT WORK AND WAIT.
ELSE.
<FLS_DATA>-TYPE = 'E'.
ENDIF.
CASE : <FLS_DATA>-TYPE.
WHEN 'S'.
<FLS_DATA>-LIGHT = '@5B@'.
WHEN 'W'.
<FLS_DATA>-LIGHT = '@5D@'. “黄灯
WHEN 'E'.
<FLS_DATA>-LIGHT = '@5C@'.
ENDCASE.
ENDIF.
* IF sy-subrc = 0.
* “WRITE : / '期初库存成本组件分解,导入成功'.
* MESSAGE '期初库存成本组件分解,导入成功' TYPE 'S'.
* ELSE.
* “WRITE : / '期初库存成本组件分解,导入失败'.
* MESSAGE '期初库存成本组件分解,导入成功' TYPE 'S'.
* ENDIF.
ENDFORM. ” FRM_BAPI
*FORM TEMP_EXCEL_GET 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 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.
L_FILENAME = '成本组件分解_导入模板.xls'.
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.
*&———————————————————————*
*& Form BUILD_FIELDCATALOG
*&———————————————————————*
* text
*———————————————————————-*
* –> p1 text
* <– p2 text
*———————————————————————-*
FORM BUILD_FIELDCATALOG .
CLEAR: FIELDCATALOG.
DEFINE BUILD_FIELDCAT.
fieldcatalog-fieldname = &1.
fieldcatalog-seltext_m = &2.
fieldcatalog-outputlen = &3.
IF fieldcatalog-fieldname = 'LIGHT'.
fieldcatalog-key = 'X'.
ENDIF.
IF fieldcatalog-fieldname = 'MATERIAL'.
fieldcatalog-no_zero = 'X'.
ENDIF.
APPEND fieldcatalog TO fieldcatalog.
CLEAR fieldcatalog.
END-OF-DEFINITION.
BUILD_FIELDCAT 'LIGHT' '结果信息灯' 10.
BUILD_FIELDCAT 'MESSAGE' '消息' 25.
BUILD_FIELDCAT 'MATERIAL' '物料号' 12.
BUILD_FIELDCAT 'PLANT ' '工厂' 4.
BUILD_FIELDCAT 'YEAR ' '年度' 4.
BUILD_FIELDCAT 'PERIOD ' '记帐期间' 8.
* BUILD_FIELDCAT 'VAL_TYPE' '评估类型' 8.
BUILD_FIELDCAT 'KST001' '材料成本' 12.
BUILD_FIELDCAT 'KST002' '直接人工' 12.
* BUILD_FIELDCAT 'KST003' '成本字段3' 12.
BUILD_FIELDCAT 'KST004' '模具费用' 12.
* BUILD_FIELDCAT 'KST005' '成本字段5' 12.
BUILD_FIELDCAT 'KST006' '外发加工费' 12.
* BUILD_FIELDCAT 'KST007' '成本字段7' 12.
BUILD_FIELDCAT 'KST008' '其他制费' 14.
* BUILD_FIELDCAT 'KST009' '成本字段9' 12.
* BUILD_FIELDCAT 'KST010' '成本字段10' 12.
BUILD_FIELDCAT 'TYPE' '结果' 4.
ENDFORM.
*&———————————————————————*
*& Form BUILD_LAYOUT
*&———————————————————————*
* text
*———————————————————————-*
* –> p1 text
* <– p2 text
*———————————————————————-*
FORM BUILD_LAYOUT .
GD_LAYOUT-ZEBRA = 'X'.
GD_LAYOUT-BOX_FIELDNAME = 'ZSEL'.
ENDFORM.
*&———————————————————————*
*& Form DISPLAY_ALV_REPORT
*&———————————————————————*
* text
*———————————————————————-*
* –> p1 text
* <– p2 text
*———————————————————————-*
FORM DISPLAY_ALV_REPORT .
GD_REPID = SY-REPID.
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
EXPORTING
I_CALLBACK_PROGRAM = GD_REPID
IS_LAYOUT = GD_LAYOUT
IT_FIELDCAT = FIELDCATALOG[] “输出的列信息
I_SAVE = 'A' “变式可保存
I_CALLBACK_PF_STATUS_SET = 'FRM_SET_STATUS' “状态栏
I_CALLBACK_USER_COMMAND = 'FRM_USER_COMMAND' “按钮处理
TABLES
T_OUTTAB = GT_UPLOAD_DATA “输出内容内表
EXCEPTIONS
PROGRAM_ERROR = 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.
ENDFORM.
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.
* 取得当前alv的grid
CALL FUNCTION 'GET_GLOBALS_FROM_SLVC_FULLSCR'
IMPORTING
E_GRID = L_GRID.
CALL METHOD L_GRID->CHECK_CHANGED_DATA.
RS_SELFIELD-REFRESH = 'X'.
CASE R_UCOMM.
WHEN 'SAVE'.
PERFORM FRM_BAPI.
WHEN OTHERS.
ENDCASE.
RS_SELFIELD-REFRESH = 'X'.
RS_SELFIELD-COL_STABLE = 'X'.
RS_SELFIELD-ROW_STABLE = 'X'.
ENDFORM. “user_command
FORM FRM_SET_STATUS USING PT_EXTAB TYPE SLIS_T_EXTAB .
SET PF-STATUS 'STANDARD'.
ENDFORM. “Frm_SET_STATUS
*&———————————————————————*
*& Form FRM_CHECK_DATA
*&———————————————————————*
* text
*———————————————————————-*
* –> p1 text
* <– p2 text
*———————————————————————-*
FORM FRM_CHECK_DATA .
CLEAR : GT_MARC.
IF GT_UPLOAD_DATA IS INITIAL.
MESSAGE '清单无数据' TYPE 'E'.
ENDIF.
LOOP AT GT_UPLOAD_DATA ASSIGNING <FLS_DATA>.
*&———-物料加前导零
CALL FUNCTION 'CONVERSION_EXIT_MATN1_INPUT'
EXPORTING
INPUT = <FLS_DATA>-MATERIAL
IMPORTING
OUTPUT = <FLS_DATA>-MATERIAL
EXCEPTIONS
LENGTH_ERROR = 1
OTHERS = 2.
IF SY-SUBRC <> 0.
* Implement suitable error handling here
ENDIF.
SELECT
MATNR
WERKS
INTO TABLE GT_MARC
FROM MARC
FOR ALL ENTRIES IN GT_UPLOAD_DATA
WHERE
MATNR = GT_UPLOAD_DATA-MATERIAL
AND WERKS = GT_UPLOAD_DATA-PLANT
.
SORT GT_MARC BY MATNR WERKS.
READ TABLE GT_MARC WITH KEY MATNR = <FLS_DATA>-MATERIAL
WERKS = <FLS_DATA>-PLANT
TRANSPORTING NO FIELDS BINARY SEARCH.
IF SY-SUBRC <> 0.
<FLS_DATA>-LIGHT = '@5C@'.
<FLS_DATA>-TYPE = 'E'.
CONCATENATE '物料' <FLS_DATA>-MATERIAL '在工厂' <FLS_DATA>-PLANT '下不存在'
INTO <FLS_DATA>-MESSAGE.
ENDIF.
ENDLOOP.
ENDFORM.
*&———————————————————————*
*& Form frm_download_temp
*&———————————————————————*
*& text
*&———————————————————————*
*& –> P_
*& –> TEXT_004
*&———————————————————————*
FORM FRM_DOWNLOAD_TEMP USING P_TEMPLATE.
DATA: LV_FNAME TYPE STRING,
LV_TITLE TYPE STRING,
LV_PATH TYPE STRING,
LV_FPATH TYPE STRING,
LV_FILE TYPE RLGRAP-FILENAME.
DATA: LS_WDATB LIKE WWWDATATAB.
DATA: LV_SUBRC TYPE SY-SUBRC.
LV_TITLE = '模板下载' .
LV_FNAME = '成本组件分解导入模板.xls'.
CALL METHOD CL_GUI_FRONTEND_SERVICES=>FILE_SAVE_DIALOG
EXPORTING
WINDOW_TITLE = LV_TITLE
DEFAULT_EXTENSION = 'xls'
DEFAULT_FILE_NAME = LV_FNAME
* INITIAL_DIRECTORY = 'C:'
FILE_FILTER = 'Excel文件(*.xls)|*.xls|全部文件 (*.*)|*.*|'
PROMPT_ON_OVERWRITE = 'X'
CHANGING
FILENAME = LV_FNAME
PATH = LV_PATH
FULLPATH = LV_FPATH
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.
ELSE.
SELECT SINGLE RELID OBJID
FROM WWWDATA
INTO CORRESPONDING FIELDS OF LS_WDATB
WHERE SRTF2 = 0
AND RELID = 'MI'
AND OBJID = P_TEMPLATE.
IF LS_WDATB IS INITIAL.
MESSAGE E398(00) WITH '模板文件不存在!'.
ELSE.
LV_FILE = LV_FPATH.
IF LV_FILE IS NOT INITIAL.
CALL FUNCTION 'DOWNLOAD_WEB_OBJECT'
EXPORTING
KEY = LS_WDATB
DESTINATION = LV_FILE
IMPORTING
RC = LV_SUBRC.
IF LV_SUBRC NE 0.
MESSAGE E398(00) WITH '模板下载失败!'.
ELSE.
MESSAGE S398(00) WITH '下载成功'.
ENDIF.
ENDIF.
ENDIF.
ENDIF.
ENDFORM.





