SAP FICO成本分解功能

一、功能逻辑

SAP FICO成本分解功能

SAP FICO成本分解功能

SAP FICO成本分解功能

二、功能界面

SAP FICO成本分解功能

物料编码 工厂 年度 期间 材料成本 直接人工 模具费用 外发加工费 其他制费

三、功能代码

*&———————————————————————*
*& 程序名: 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.

© 版权声明

相关文章

暂无评论

none
暂无评论...