MM-自动创建信息记录(维护阶梯价格)

*&---------------------------------------------------------------------*
*& Report ZMMR124
*&---------------------------------------------------------------------*
*& Author              :  NathanSun
*& Create Date         :  2019-10-06
*& Program Type        :  Report
*& Description         :  自动创建信息记录(维护阶梯价格)
*&------------------------------------------------------------------
REPORT ZMMR124.
TABLES:SSCRFIELDS.
TYPE-POOLS:SLIS.

"定义ALV输出所需变量
DATAS_LAYOUT    TYPE SLIS_LAYOUT_ALV,
      GT_FIELDCAT TYPE SLIS_T_FIELDCAT_ALV.
DATALS_STYLE TYPE LVC_S_STYL,
      LT_STYLE TYPE TABLE OF LVC_S_STYL.

DATA RETURN           LIKE BAPIRET2 OCCURS WITH HEADER LINE.
DATAGT_EXDATA TYPE ALSMEX_TABLINE OCCURS WITH HEADER LINE.
DATAIW_CELLCOLOR TYPE LVC_T_SCOL WITH HEADER LINE.
DATA L_FILENAME TYPE STRING .
DATA L_MUBAN TYPE STRING .
DATA GV_FULLPATH TYPE STRING .
DATA GV_PATH TYPE STRING .
DATA GV_NAME TYPE STRING .
DATA:MESSAGE TYPE  BAPI_MSG .
DATA:SUBRC   LIKE  SYST-SUBRC .
DATA:FLAG    TYPE C .
DATA:KSTBM   TYPE KSTBM .
DATA:MESSTAB LIKE  BDCMSGCOLL OCCURS WITH HEADER LINE.

TYPESBEGIN OF GTS_DATA,
         LIFNR    TYPE  BDCDATA-FVAL,            "供应商号码
         MATNR    TYPE  BDCDATA-FVAL,            "物料编码
         EKORG    TYPE  BDCDATA-FVAL,            "采购组织
         WERKS    TYPE  BDCDATA-FVAL,            "工厂
         ESOKZ    TYPE  BDCDATA-FVAL,            "信息记录类型
         IDNLF    TYPE  BDCDATA-FVAL,            "供应商物料编码
         URZLA    TYPE  BDCDATA-FVAL,            "产地
         MFRNR    TYPE  BDCDATA-FVAL,            "制造商
         APLFZ    TYPE  BDCDATA-FVAL,            "计划交货时间(采购周期)
         EKGRP    TYPE  BDCDATA-FVAL,            "采购组
         NORBM    TYPE  BDCDATA-FVAL,            "标准用量
         MINBM    TYPE  BDCDATA-FVAL,            "最小订单數量
         RDPRF    TYPE  BDCDATA-FVAL,            "最小包装量
         MEINS    TYPE  BDCDATA-FVAL,            "采购单位
         UMREN    TYPE  BDCDATA-FVAL,            "数量转换 (订购單位)
         UMREZ    TYPE  BDCDATA-FVAL,            "数量转换 (基础计量单位)
         MWSKZ    TYPE  BDCDATA-FVAL,            "税码
         NETPR    TYPE  BDCDATA-FVAL,            "净价
         WAERS    TYPE  BDCDATA-FVAL,            "币别
         PEINH    TYPE  BDCDATA-FVAL,            "价格单位
         DATAB    TYPE  BDCDATA-FVAL,            "有效期(从)
         DATBI    TYPE  BDCDATA-FVAL,            "有效期(至)
         INCO1    TYPE  BDCDATA-FVAL,            "国际贸易条款
         INCO2    TYPE  BDCDATA-FVAL,            "国际贸易调控解释通则
         KSCHL    TYPE  BDCDATA-FVAL,            "关税条件类型
         KBETR    TYPE  BDCDATA-FVAL,            "关税百分比
         KSTBM_02 TYPE  BDCDATA-FVAL,            "数量 1
         KBETR_02 TYPE  BDCDATA-FVAL,            "价格 1
         KSTBM_03 TYPE  BDCDATA-FVAL,            "数量 2
         KBETR_03 TYPE  BDCDATA-FVAL,            "价格 2
         KSTBM_04 TYPE  BDCDATA-FVAL,            "数量 3
         KBETR_04 TYPE  BDCDATA-FVAL,            "价格 3
         KSTBM_05 TYPE  BDCDATA-FVAL,            "数量 4
         KBETR_05 TYPE  BDCDATA-FVAL,            "价格 4

         C1       TYPE  BDCDATA-FVAL,
         C2       TYPE  BDCDATA-FVAL,
         C3       TYPE  BDCDATA-FVAL,

         TYPBOD   TYPE  CHAR4,                   "消息图标
         MESSAGED TYPE  BAPI_MSG,                "报错信息
         TYPBO    TYPE  CHAR4,                   "消息图标
         MESSAGE  TYPE  BAPI_MSG,                "报错信息
         STYLE    TYPE  LVC_T_STYL,              "控制不可编辑
       END OF GTS_DATA.

DATAFLAG1     TYPE C.
DATAGT_DATA   TYPE TABLE OF GTS_DATA WITH HEADER LINE.
DATAGT_DATA_A TYPE TABLE OF GTS_DATA WITH HEADER LINE.

SELECTION-SCREENFUNCTION KEY 1.

SELECTION-SCREEN BEGIN OF BLOCK B1 WITH FRAME.
PARAMETERSP_FILE LIKE RLGRAP-FILENAME .
SELECTION-SCREEN END OF BLOCK B1.

IF P_FILE IS INITIAL .
  MESSAGE  '没有选择文件!TYPE 'E'.
ENDIF.

AT SELECTION-SCREEN ON VALUE-REQUEST FOR P_FILE.
  CALL FUNCTION 'WS_FILENAME_GET'
    EXPORTING
      MASK             ',Excel Files,*.xls,All Files,*.*.'(101)
      TITLE            '选择文件'(100)
    IMPORTING
      FILENAME         P_FILE
    
EXCEPTIONS
      INV_WINSYS       1
      NO_BATCH         2
      SELECTION_CANCEL 3
      SELECTION_ERROR  4
      OTHERS           5.
  IF SY-SUBRC <> AND SY-SUBRC <> 3.
    MESSAGE  '选择文件出错!TYPE 'E'.
  ENDIF.

*&---------------------------------------------------------------------*
*& Form FOM_GETDATA
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& -->  p1        text
*& <--  p2        text
*&---------------------------------------------------------------------*
FORM FOM_GETDATA .

  CLEAR GT_EXDATA[].
  CALL FUNCTION 'ALSM_EXCEL_TO_INTERNAL_TABLE'    "读取excel文件中的内容
    EXPORTING
      FILENAME    P_FILE
      I_BEGIN_COL 
'1'
      I_BEGIN_ROW '6'
      I_END_COL   '50'
      I_END_ROW   '5000'
    TABLES
      INTERN      GT_EXDATA[].
  SORT GT_EXDATA BY ROW COL VALUE.

**---整理到内表数据
  CLEAR GT_DATA[] .
  LOOP AT GT_EXDATA.

    CLEAR FLAG .
    AT END OF ROW .
      FLAG 'X'.
    ENDAT .

    CASE GT_EXDATA-COL.
      WHEN 1.
        GT_DATA-LIFNR GT_EXDATA-VALUE.
      WHEN 2.
        GT_DATA-MATNR GT_EXDATA-VALUE.
      WHEN 3.
        GT_DATA-EKORG GT_EXDATA-VALUE.
      WHEN 4.
        GT_DATA-WERKS GT_EXDATA-VALUE.
      WHEN 5.
        GT_DATA-ESOKZ GT_EXDATA-VALUE.
      WHEN 6.
        GT_DATA-IDNLF GT_EXDATA-VALUE.
      WHEN 7.
        GT_DATA-URZLA GT_EXDATA-VALUE.
      WHEN 8.
        GT_DATA-MFRNR GT_EXDATA-VALUE.
      WHEN 9.
        GT_DATA-APLFZ GT_EXDATA-VALUE.
      WHEN 10.
        GT_DATA-EKGRP GT_EXDATA-VALUE.
      WHEN 11.
        GT_DATA-NORBM GT_EXDATA-VALUE.
      WHEN 12.
        GT_DATA-MINBM GT_EXDATA-VALUE.
      WHEN 13.
        GT_DATA-RDPRF GT_EXDATA-VALUE.
      WHEN 14.
        GT_DATA-MEINS GT_EXDATA-VALUE.
      WHEN 15.
        GT_DATA-UMREN GT_EXDATA-VALUE.
      WHEN 16.
        GT_DATA-UMREZ GT_EXDATA-VALUE.
      WHEN 17.
        GT_DATA-MWSKZ GT_EXDATA-VALUE.
      WHEN 18.
        GT_DATA-NETPR GT_EXDATA-VALUE.
      WHEN 19.
        GT_DATA-WAERS GT_EXDATA-VALUE.
      WHEN 20.
        GT_DATA-PEINH GT_EXDATA-VALUE.
      WHEN 21.
        GT_DATA-DATAB GT_EXDATA-VALUE.
      WHEN 22.
        GT_DATA-DATBI GT_EXDATA-VALUE.
      WHEN 23.
        GT_DATA-INCO1 GT_EXDATA-VALUE.
      WHEN 24.
        GT_DATA-INCO2 GT_EXDATA-VALUE.
      WHEN 25.
        GT_DATA-KSCHL GT_EXDATA-VALUE.
      WHEN 26.
        GT_DATA-KBETR GT_EXDATA-VALUE.
      WHEN 27.
        GT_DATA-KSTBM_02 GT_EXDATA-VALUE.
      WHEN 28.
        GT_DATA-KBETR_02 GT_EXDATA-VALUE.
      WHEN 29.
        GT_DATA-KSTBM_03 GT_EXDATA-VALUE.
      WHEN 30.
        GT_DATA-KBETR_03 GT_EXDATA-VALUE.
      WHEN 31.
        GT_DATA-KSTBM_04 GT_EXDATA-VALUE.
      WHEN 32.
        GT_DATA-KBETR_04 GT_EXDATA-VALUE.
      WHEN 33.
        GT_DATA-KSTBM_05 GT_EXDATA-VALUE.
      WHEN 34.
        GT_DATA-KBETR_05 GT_EXDATA-VALUE.
    ENDCASE.

    IF FLAG IS NOT INITIAL.
      APPEND GT_DATA."append要加在最后一列.
      CLEAR GT_DATA.
    ENDIF.

  ENDLOOP.

  LOOP AT GT_DATA.

    CLEAR LT_STYLE[] .
    IF GT_DATA-LIFNR IS INITIAL
      OR GT_DATA-MATNR IS INITIAL
      OR GT_DATA-EKORG IS INITIAL
      OR GT_DATA-WERKS IS INITIAL
      OR GT_DATA-ESOKZ IS INITIAL
      OR GT_DATA-APLFZ IS INITIAL
      OR GT_DATA-EKGRP IS INITIAL
*      OR GT_DATA-NORBM IS INITIAL
      OR GT_DATA-MWSKZ IS INITIAL
      OR GT_DATA-NETPR IS INITIAL
      OR GT_DATA-WAERS IS INITIAL
      OR GT_DATA-PEINH IS INITIAL
      OR GT_DATA-DATAB IS INITIAL
      OR GT_DATA-DATBI IS INITIAL
      .

      GT_DATA-TYPBOD '@0A@'.
      LS_STYLE-FIELDNAME 'TYPBOD'.
      LS_STYLE-STYLE CL_GUI_ALV_GRID=>MC_STYLE_BUTTON.
      APPEND LS_STYLE TO LT_STYLE.
      GT_DATA-STYLE LT_STYLE.
      GT_DATA-MESSAGED =  '存在未被填写的必输字段!'.
    ELSE .
      GT_DATA-TYPBOD '@08@'.
      LS_STYLE-FIELDNAME 'TYPBOD'.
      LS_STYLE-STYLE CL_GUI_ALV_GRID=>MC_STYLE_BUTTON.
      APPEND LS_STYLE TO LT_STYLE.
      GT_DATA-STYLE LT_STYLE.
      GT_DATA-MESSAGED =  '数据准备完毕!'.
    ENDIF.

    IF GT_DATA-ESOKZ '1'.
      GT_DATA-C1 'X'.
      GT_DATA-C2 ''.
      GT_DATA-C3 ''.
    ELSEIF GT_DATA-ESOKZ '2'.
      GT_DATA-C1 ''.
      GT_DATA-C2 'X'.
      GT_DATA-C3 ''.
    ELSEIF GT_DATA-ESOKZ '4'.
      GT_DATA-C1 ''.
      GT_DATA-C2 ''.
      GT_DATA-C3 'X'.
    ENDIF.

    MODIFY GT_DATA.
    CLEAR GT_DATA .
  ENDLOOP.

ENDFORM.
FORM FOM_UPDATA .

*字段RCTMS-MWERT(5)不是一个输入字段
  LOOP AT GT_DATA.
    CLEAR SUBRC .
    CLEAR MESSAGE .
    CLEAR MESSTAB[] .
    CALL FUNCTION 'ZF_ME11_01'
      EXPORTING
        CTU          'X'
        MODE         'N'
        UPDATE       'L'
        NODATA       '/'
        LIFNR_001    GT_DATA-LIFNR
        MATNR_002    
GT_DATA-MATNR
        EKORG_003    
GT_DATA-EKORG
        WERKS_004    
GT_DATA-WERKS
        NORMB_005    
GT_DATA-C1
        LOHNB_006    
GT_DATA-C2
        KONSI_007    
GT_DATA-C3
        IDNLF_008    
GT_DATA-IDNLF
        URZLA_009    
GT_DATA-URZLA
        MFRNR_010    
GT_DATA-MFRNR
*       VERKF_011    = 'JT'
*       TELF1_012    = '12345678'
        MEINS_013    GT_DATA-MEINS
        UMREZ_014    
GT_DATA-UMREZ
        UMREN_015    
GT_DATA-UMREN
        APLFZ_016    
GT_DATA-APLFZ
        EKGRP_017    
GT_DATA-EKGRP
        NORBM_018    
GT_DATA-NORBM
        MINBM_019    
GT_DATA-MINBM
        WEBRE_020    
'X'
        MWSKZ_021    GT_DATA-MWSKZ
        IPRKZ_022    
'D'
        RDPRF_023    GT_DATA-RDPRF
        NETPR_024    
GT_DATA-NETPR
        WAERS_025    
GT_DATA-WAERS
        PEINH_026    
GT_DATA-PEINH
        BPRME_027    
GT_DATA-MEINS
        BPUMZ_028    
GT_DATA-UMREZ
        BPUMN_029    
GT_DATA-UMREN
        INCO1_030    
GT_DATA-INCO1
        INCO2_L_031  
GT_DATA-INCO2
        DATAB_032    
GT_DATA-DATAB
        DATBI_033    
GT_DATA-DATBI
        SELKZ_01_034 
'X'
        DATAB_035    GT_DATA-DATAB
        DATBI_036    
GT_DATA-DATBI
        KSTBM_02_037 
GT_DATA-KSTBM_02
        KSTBM_03_038 
GT_DATA-KSTBM_03
        KSTBM_04_039 
GT_DATA-KSTBM_04
        KSTBM_05_040 
GT_DATA-KSTBM_05
        KBETR_02_041 
GT_DATA-KBETR_02
        KBETR_03_042 
GT_DATA-KBETR_03
        KBETR_04_043 
GT_DATA-KBETR_04
        KBETR_05_044 
GT_DATA-KBETR_05
        DATAB_045    
GT_DATA-DATAB
        DATBI_046    
GT_DATA-DATBI
        DATAB_047    
GT_DATA-DATAB
        DATBI_048    
GT_DATA-DATBI
        KSCHL_02_049 
GT_DATA-KSCHL
        KBETR_02_050 
GT_DATA-KBETR
        DATAB_051    
GT_DATA-DATAB
        DATBI_052    
GT_DATA-DATBI
      
IMPORTING
        SUBRC        SUBRC
        
MESSAGE      MESSAGE
      TABLES
        MESSTAB      MESSTAB[].
    .

    IF MESSAGE IS NOT INITIAL .
      GT_DATA-TYPBO '@0A@'.
      CLEAR LT_STYLE[] .
      LS_STYLE-FIELDNAME 'TYPBO'.
      LS_STYLE-STYLE CL_GUI_ALV_GRID=>MC_STYLE_BUTTON.
      APPEND LS_STYLE TO LT_STYLE.
      GT_DATA-STYLE LT_STYLE.
      GT_DATA-MESSAGE MESSAGE .
    ELSE.
      GT_DATA-TYPBO '@08@'.
      CLEAR LT_STYLE[] .
      LS_STYLE-FIELDNAME 'TYPBO'.
      LS_STYLE-STYLE CL_GUI_ALV_GRID=>MC_STYLE_BUTTON.
      APPEND LS_STYLE TO LT_STYLE.
      GT_DATA-STYLE LT_STYLE.
      LOOP AT MESSTAB WHERE MSGV1 IS NOT INITIAL.
        GT_DATA-MESSAGE MESSTAB-MSGV1 .
        CLEAR MESSTAB .
        IF GT_DATA-MESSAGE IS NOT INITIAL.
          EXIT .
        ENDIF.
      ENDLOOP.
*      GT_DATA-MESSAGE =
    ENDIF.

    MODIFY GT_DATA .
    CLEAR GT_DATA.
  ENDLOOP.

ENDFORM.
*&---------------------------------------------------------------------*
*& Form FRM_DISPLAY
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& -->  p1        text
*& <--  p2        text
*&---------------------------------------------------------------------*
FORM FRM_DISPLAY .
  CLEAR S_LAYOUT.
  S_LAYOUT-ZEBRA 'X'.
  S_LAYOUT-COLWIDTH_OPTIMIZE 'X'.
  S_LAYOUT-COLTAB_FIELDNAME 'CELLCOLOR'"单元格颜色内表字段
*  s_layout-box_fieldname    = 'BOX'.
  PERFORM FRM_FILL_FIELD .

  CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
    EXPORTING
      IS_LAYOUT                S_LAYOUT
      IT_FIELDCAT              
GT_FIELDCAT
      I_CALLBACK_PROGRAM       
SY-REPID
      I_CALLBACK_PF_STATUS_SET 
'PF_STATUS_SET'
*     i_callback_html_top_of_page = 'HTML_TOP_OF_PAGE'
      I_CALLBACK_USER_COMMAND  'USER_COMMAND'
    TABLES
      T_OUTTAB                 GT_DATA[].
ENDFORM.

FORM FRM_FILL_FIELD .
  DATA:  WA_FIELDCAT TYPE SLIS_FIELDCAT_ALV.
  DEFINE FILL_FIELD.
    WA_FIELDCAT-FIELDNAME &1.
    WA_FIELDCAT-SELTEXT_L &2.
*    IF WA_FIELDCAT-FIELDNAME =  'MSLJH' OR WA_FIELDCAT-FIELDNAME =  'WCBJH'.
*      WA_FIELDCAT-EMPHASIZE = 'C600'. "设置字段的颜色
*    ENDIF.
*
*    IF WA_FIELDCAT-FIELDNAME =  'MSLMB' OR WA_FIELDCAT-FIELDNAME =  'WCBMB'.
*      WA_FIELDCAT-EMPHASIZE = 'C710'. "设置字段的颜色
*    ENDIF.l
    IF WA_FIELDCAT-FIELDNAME 'TYPBO'
     OR WA_FIELDCAT-FIELDNAME 'TYPAI'
      .
      WA_FIELDCAT-ICON 'X'.
      WA_FIELDCAT-OUTPUTLEN '13'.
    ENDIF.
    IF WA_FIELDCAT-FIELDNAME 'PLNBEZ' OR WA_FIELDCAT-FIELDNAME 'MATNR' .
      WA_FIELDCAT-REF_TABNAME 'MARA'.
      WA_FIELDCAT-REF_FIELDNAME 'MATNR'.
    ENDIF.

    IF WA_FIELDCAT-FIELDNAME 'ARKTX' OR WA_FIELDCAT-FIELDNAME 'WAKTX' .
      WA_FIELDCAT-REF_TABNAME 'VBAP'.
      WA_FIELDCAT-REF_FIELDNAME 'ARKTX'.
    ENDIF.

    IF WA_FIELDCAT-FIELDNAME 'AUFNR' .
      WA_FIELDCAT-REF_TABNAME 'AUFK'.
      WA_FIELDCAT-REF_FIELDNAME 'AUFNR'.
    ENDIF.

    APPEND WA_FIELDCAT TO GT_FIELDCAT.
    CLEAR WA_FIELDCAT.
  END-OF-DEFINITION.
  FILL_FIELD :
        'LIFNR'    '供应商号码',
        'MATNR'    '物料编码',
        'EKORG'    '采购组织',
        'WERKS'    '工厂',
        'ESOKZ'    '信息记录类型',
        'IDNLF'    '供应商物料编码',
        'URZLA'    '产地',
        'MFRNR'    '制造商',
        'APLFZ'    '计划交货时间(采购周期)',
        'EKGRP'    '采购组',
        'NORBM'    '标准用量',
        'MINBM'    '最小订单數量',
        'RDPRF'    '最小包装量',
        'MEINS'    '采购单位',
        'UMREN'    '数量转换 (订购單位)',
        'UMREZ'    '数量转换 (基础计量单位)',
        'MWSKZ'    '税码',
        'NETPR'    '净价',
        'WAERS'    '币别',
        'PEINH'    '价格单位',
        'DATAB'    '有效期(从)',
        'DATBI'    '有效期(至)',
        'INCO1'    '国际贸易条款',
        'INCO2'    '国际贸易调控解释通则',
        'KSCHL'    '关税条件类型',
        'KBETR'    '关税百分比',
        'KSTBM_02' '数量 1',
        'KBETR_02' '价格 1',
        'KSTBM_03' '数量 2',
        'KBETR_03' '价格 2',
        'KSTBM_04' '数量 3',
        'KBETR_04' '价格 3',
        'KSTBM_05' '数量 4',
        'KBETR_05' '价格 4',
        'TYPBOD'   '是否成功',
        'MESSAGED' '报错信息',
        'TYPBO'    '是否成功',
        'MESSAGE'  '信息'.
ENDFORM.

FORM PF_STATUS_SET USING RT_EXTAB TYPE SLIS_T_EXTAB.
  SET PF-STATUS 'STANDARD_FULLSCREEN'.
ENDFORM.

FORM USER_COMMAND USING I_UCOMM LIKE SY-UCOMM
                    IS_SELFIELD 
TYPE SLIS_SELFIELD.
  DATAREF TYPE REF TO CL_GUI_ALV_GRID.
  DATA LV_STABLE TYPE LVC_S_STBL.   "刷新稳定性
  RANGESL_WERKS FOR T001W-WERKS.
  RANGESL_MATNR FOR MARA-MATNR.
  DATA:L_BUKRS TYPE T001K-BUKRS.

  LV_STABLE-ROW '1'.
  LV_STABLE-COL '1'.

  CALL FUNCTION 'GET_GLOBALS_FROM_SLVC_FULLSCR'
    IMPORTING
      E_GRID REF.
  CALL METHOD REF->CHECK_CHANGED_DATA.

  CASE I_UCOMM.
    WHEN 'GO'."表示双击
      CLEAR FLAG1 .
      LOOP AT GT_DATA.
        IF GT_DATA-TYPBOD '@0A@'.
          FLAG1 'X'.
          EXIT .
        ENDIF.
        CLEAR GT_DATA .
      ENDLOOP.
      IF FLAG1 IS INITIAL.
        PERFORM FOM_UPDATA.
      ELSE .
        MESSAGE '数据存在问题,请检查!TYPE 'S' DISPLAY LIKE 'E'.
      ENDIF.

    WHEN 'POST_T'.
  ENDCASE.

  CALL METHOD REF->REFRESH_TABLE_DISPLAY
    
EXPORTING
      IS_STABLE LV_STABLE.
ENDFORM.

*--------------------------------------------------------------------*
*       获取下载到本地的路径
*--------------------------------------------------------------------*
FORM FRM_GET_FULLPATH   CHANGING PV_FULLPATH TYPE STRING
                                 PV_PATH     
TYPE STRING
                                 PV_NAME     
TYPE STRING.

  DATALV_INIT_PATH  TYPE STRING,
        LV_INIT_FNAME TYPE STRING,
        LV_PATH       TYPE STRING,
        LV_FILENAME   TYPE STRING,
        LV_FULLPATH   TYPE STRING.

*&---初始名称(输出的文件名称)
*  concatenate 'Material_Doc_' SY-DATUM '.xslx' into L_INIT_FNAME.
  LV_INIT_FNAME L_FILENAME.

获取桌面路径
  CALL METHOD CL_GUI_FRONTEND_SERVICES=>GET_DESKTOP_DIRECTORY
    
CHANGING
      DESKTOP_DIRECTORY    LV_INIT_PATH
    
EXCEPTIONS
      CNTL_ERROR           1
      ERROR_NO_GUI         2
      NOT_SUPPORTED_BY_GUI 3
      OTHERS               4.
  IF SY-SUBRC <> 0.
    EXIT.
  ENDIF.

*&---用户选择名称、路径
  CALL METHOD CL_GUI_FRONTEND_SERVICES=>FILE_SAVE_DIALOG
    
EXPORTING
*     window_title         = '指定保存文件名'
*     default_extension    = 'DOC'
      DEFAULT_FILE_NAME    LV_INIT_FNAME
      FILE_FILTER          
CL_GUI_FRONTEND_SERVICES=>FILETYPE_EXCEL
*     FILE_FILTER          = CL_GUI_FRONTEND_SERVICES=>FILETYPE_WORD
      INITIAL_DIRECTORY    LV_INIT_PATH
      PROMPT_ON_OVERWRITE  
'X'
    CHANGING
      FILENAME             LV_FILENAME
      PATH                 
LV_PATH
      FULLPATH             
LV_FULLPATH
*     USER_ACTION          =
*     FILE_ENCODING        =
    EXCEPTIONS
      CNTL_ERROR           1
      ERROR_NO_GUI         2
      NOT_SUPPORTED_BY_GUI 3
      OTHERS               4.
  IF SY-SUBRC 0.
    PV_FULLPATH LV_FULLPATH.
    PV_PATH     LV_PATH.
  ENDIF.

ENDFORM.

*--------------------------------------------------------------------*
*       下载文件
*--------------------------------------------------------------------*
FORM FRM_DOWN  USING PR_FILENAME.
  DATALV_OBJDATA     LIKE WWWDATATAB,
        LV_MIME        LIKE W3MIME,
        LV_DESTINATION LIKE RLGRAP-FILENAME,
        LV_OBJNAM      TYPE STRING,
        LV_RC          LIKE SY-SUBRC,
        LV_ERRTXT      TYPE STRING.

  DATALV_FILENAME TYPE STRING,
        LV_RESULT,
        LV_SUBRC    TYPE SY-SUBRC.

  DATALV_OBJID TYPE WWWDATATAB-OBJID .


  LV_OBJID L_MUBAN.  "上传的模版名称

*&---查找文件是否存在。
  SELECT SINGLE RELID OBJID
    
FROM WWWDATA
    
INTO CORRESPONDING FIELDS OF LV_OBJDATA
    
WHERE SRTF2    0
      AND RELID    'MI'
      AND OBJID    LV_OBJID.

*&---判断模版不存在则报错
  IF SY-SUBRC NE OR LV_OBJDATA-OBJID EQ SPACE.
    CONCATENATE '模板文件:LV_OBJID '不存在,请用TCODESMW0进行加载'
    INTO LV_ERRTXT.
    MESSAGE LV_ERRTXT TYPE 'E'.
  ENDIF.

  LV_FILENAME PR_FILENAME.

  "判断本地地址是否已经存在此文件。
  CALL METHOD CL_GUI_FRONTEND_SERVICES=>FILE_EXIST
    
EXPORTING
      FILE                 LV_FILENAME
    RECEIVING
      RESULT               
LV_RESULT
    
EXCEPTIONS
      CNTL_ERROR           1
      ERROR_NO_GUI         2
      WRONG_PARAMETER      3
      NOT_SUPPORTED_BY_GUI 4
      OTHERS               5.
  IF SY-SUBRC <> 0.
    CASE SY-SUBRC.
      WHEN 1.
      WHEN 2.
      WHEN OTHERS.
    ENDCASE.
  ENDIF.

  IF LV_RESULT EQ 'X'.  "如果存在则删除原始文件,重新覆盖
    CALL METHOD CL_GUI_FRONTEND_SERVICES=>FILE_DELETE
      
EXPORTING
        FILENAME             LV_FILENAME
      
CHANGING
        RC                   LV_SUBRC
      
EXCEPTIONS
        FILE_DELETE_FAILED   1
        CNTL_ERROR           2
        ERROR_NO_GUI         3
        FILE_NOT_FOUND       4
        ACCESS_DENIED        5
        UNKNOWN_ERROR        6
        NOT_SUPPORTED_BY_GUI 7
        WRONG_PARAMETER      8
        OTHERS               9.

    IF SY-SUBRC <> 0.
      CASE SY-SUBRC.
        WHEN 1.
        WHEN 2.
        WHEN OTHERS.
      ENDCASE.
    ENDIF.

    IF LV_SUBRC <> 0"如果删除失败,则报错。
      CONCATENATE '同名EXCEL文件已打开' '请关闭该EXCEL后重试。'
      INTO LV_ERRTXT.
      MESSAGE LV_ERRTXT TYPE 'E'.
    ENDIF.
  ENDIF.

  LV_DESTINATION   PR_FILENAME.

*&---下载模版。
  CALL FUNCTION 'DOWNLOAD_WEB_OBJECT'
    EXPORTING
      KEY         LV_OBJDATA
      DESTINATION 
LV_DESTINATION
    
IMPORTING
      RC          LV_RC.
  IF LV_RC NE 0.
    CONCATENATE '模板文件' '下载失败INTO LV_ERRTXT.
    MESSAGE LV_ERRTXT TYPE 'E'.
  ENDIF.
ENDFORM.

INITIALIZATION.
  SSCRFIELDS-FUNCTXT_01 '@49@ 模板下载'.

AT SELECTION-SCREEN .
  CASE SSCRFIELDS-UCOMM.
    WHEN 'FC01'.
      L_FILENAME '信息记录导入模板.xls'.
      L_MUBAN 'ZMMR124'.
*&---下载模板
      PERFORM FRM_GET_FULLPATH CHANGING GV_FULLPATH GV_PATH GV_NAME.
*&---路径为空则退出
      IF GV_FULLPATH IS INITIAL.
        MESSAGE '用户取消操作TYPE 'S'.
        RETURN.
      ENDIF.
      PERFORM FRM_DOWN USING GV_FULLPATH.
    WHEN OTHERS.
  ENDCASE.

START-OF-SELECTION.
  PERFORM FOM_GETDATA.
  PERFORM FRM_DISPLAY.

SAP 采购信息记录阶梯价格获取是指在SAP系统中进行采购操作时,根据采购数量或其他相关条件的不同,获取与之对应的不同价格。这种方式可以让采购部门根据具体情况,以更低的价格购买所需物品。 在SAP系统中,我们可以通过设置多个价格条件和阶梯区间来记录阶梯价格。当采购部门输入采购订单时,系统会根据采购数量自动匹配相应的价格条件和阶梯区间,并计算出相应的价格。这样一来,采购部门无需手动计算价格,系统将自动根据设定的规则和条件为其分配最优惠的价格。 通过采购信息记录阶梯价格获取,企业可以实现以下目标: 1. 精确计算采购价格:系统根据预设的价格条件和阶梯区间,能够准确计算采购物品的价格,避免了手工计算错误导致的成本损失。 2. 优化采购成本:阶梯价格获取可以根据采购数量的不同,为采购部门提供更低的价格选择,从而减少企业采购成本。 3. 控制供应商合作:通过设定不同的价格条件和阶梯区间,可以激励供应商合作,例如设定更大采购数量对应更低的价格,从而促使供应商提供更具竞争力的报价。 总之,SAP采购信息记录阶梯价格获取是企业在采购过程中,使用SAP系统根据不同的采购条件和阶梯区间,获取与之匹配的最优价格的一种方法。它可以精确计算采购价格,优化采购成本,并控制供应商合作,帮助企业实现采购优化与供应链管理的目标。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值