SAP-MM物料主数据报表

*&---------------------------------------------------------------------*
*& Report  ZMMR004
*&
*&---------------------------------------------------------------------*
* 模块名称            MM
*程序ID              ZMMR004
*程序名称            物料主数据报表
*事务代码            ZMMR004
*&
*&---------------------------------------------------------------------*
*<处理概要>
* 。
*&---------------------------------------------------------------------*
* <更新记录>
*更新日期       变更管理No.   更新人          更新内容
*&---------------------------------------------------------------------*
* 2016/05/04      0000        xiaoaman            CREATE
*&
*&---------------------------------------------------------------------*
REPORT  ZMMR004.
*----------------------------------------------------------------------*
*        DECLARATIVE ELEMENTS                                          *
*----------------------------------------------------------------------*
TABLES:
  MARA,MAKT,MARC,MVKE,MBEW,KLAH.

TYPES:
  BEGIN OF TAB_TYPE,
    PARA TYPE STRING,
    DOBJ TYPE STRING,
  END OF TAB_TYPE.

*常量定义
CONSTANTS:CNS_TEMPNAME LIKE WWWDATA-OBJID VALUE 'ZMMI003',    "服务器模板名称
          CNS_PATH     LIKE RLGRAP-FILENAME VALUE 'C:\SAPTMP\'. "本地处理临时文件夹

DATA: BEGIN OF GT_ITAB OCCURS 0,
        MATNR      LIKE MARA-MATNR,          "物料号
        MAKTX      LIKE MAKT-MAKTX,          "物料描述
        MAKTX_L    TYPE CHAR200,             "物料描述长描述-20170427 add
        WERKS      LIKE MARC-WERKS,          "工厂
        MATKL      LIKE MARA-MATKL,          "物料组
        WGBEZ      LIKE T023T-WGBEZ,         "物料组描述
        MTART      LIKE MARA-MTART,          "物料类型
        BISMT      LIKE MARA-BISMT,          "旧物料号
        MEINS      LIKE MARA-MEINS,          "基本单位
        EXTWG      LIKE MARA-EXTWG,          "外部物料组
        PSTAT      LIKE MARA-PSTAT,           "维护状态
        BRGEW      LIKE MARA-BRGEW,        "毛重
        GEWEI      LIKE MARA-GEWEI,        "重量单位
        NTGEW      LIKE MARA-NTGEW,        "净重
        VOLUM      LIKE MARA-VOLUM,        "体积
        VOLEH      LIKE MARA-VOLEH,        "体积单位
        CL_VARIANT LIKE KLAH-CLASS,     "变式分类
        CL_BATCH   LIKE KLAH-CLASS,     "批次分类
        CL_MATNR   LIKE KLAH-CLASS,     "物料分类

        LGORT      LIKE RMMG1-LGORT,       "库存地点
        VKORG      LIKE MVKE-VKORG,        "销售组织
        VTWEG      LIKE MVKE-VTWEG,        "分销渠道
*视图选择
        XEIK1      TYPE C,                 "基本数据视图
        XEIE1      TYPE C,                 "采购视图
        XEID1      TYPE C,                 "物料需求计划(MRP)视图
        XEIL1      TYPE C,                 "存储视图
        XEIA1      TYPE C,                 "工作计划视图
        XEIV1      TYPE C,                 "销售视图
        XEIQ1      TYPE C,                 "质量管理视图
        XEIB1      TYPE C,                 "会计视图
        XEIG1      TYPE C,                 "成本视图
        XEIC1      TYPE C,                 "仓库视图 -20170427 add
*仓库视图
        LGNUM      TYPE MLGN-LGNUM,         "仓库号
        LTKZA      TYPE MLGN-LTKZA,         "库存出库
        LTKZE      TYPE MLGN-LTKZE,         "库存入库
        LGBKZ      TYPE MLGN-LGBKZ,         " 仓库区标识


*采购视图
        EKGRP      LIKE MARC-EKGRP,        "采购组
        EKNAM      LIKE T024-EKNAM,        "采购组描述
        BSTME      LIKE MARA-BSTME,        "采购单位
        MAABC      LIKE MARC-MAABC,        "ABC标识
        KAUTB      LIKE MARC-KAUTB,        "标识: "允许自动采购订单"
        XCHPF      LIKE MARA-XCHPF,        "批次管理
        KORDB      LIKE MARC-KORDB,        "源清单
        USEQU      LIKE MARC-USEQU,        "配额安排
        PO_TEXT    TYPE CHAR100,         "采购文本
*质量视图
        QMATV      LIKE MARC-QMATV,        "检验设置
        SSQSS      LIKE MARC-SSQSS,        "QM控制码
        ART        LIKE RMQAM-ART,         "检验类型
        APA        LIKE RMQAM-APA,         "首选类型
        AKTIV      LIKE RMQAM-AKTIV,       "检验激活
        QMPUR      LIKE MARA-QMPUR,        "采购激活
*MRP视图
        DISMM      LIKE MARC-DISMM,        "MRP 类型
        MINBE      LIKE MARC-MINBE,        "重订货点
        BSTRF      LIKE MARC-BSTRF,        "舍入值
        DISPO      LIKE MARC-DISPO,        "MRP控制者
        DISLS      LIKE MARC-DISLS,        "批量
        BSTMI      LIKE MARC-BSTMI,        "最小批量
        BSTFE      LIKE MARC-BSTFE,        "固定批量大小
        MABST      LIKE MARC-MABST,        "最大库存水平
        BESKZ      LIKE MARC-BESKZ,        "采购类型
        SOBSL      LIKE MARC-SOBSL,        "特殊采购类
        KZECH      LIKE MARC-KZECH,        "在生产/处理订单中批量输入的确定
        RGEKZ      LIKE MARC-RGEKZ,        "反冲
        DISGR      LIKE MARC-DISGR,        "MRP组
        LGPRO      LIKE MARC-LGPRO,        "生产库存地点
        LGFSB      LIKE MARC-LGFSB,        "外部采购仓储地点
        KZKUP      LIKE MARC-KZKUP,        "物料是联产品
        DZEIT      LIKE MARC-DZEIT,        "自制生产
        PLIFZ      LIKE MARC-PLIFZ,        "计划交货时间
        WEBAZ      LIKE MARC-WEBAZ,        "收货处理时间
        FHORI      LIKE MARC-FHORI,        "计划边际码
        FXHOR      LIKE MARC-FXHOR,        "计划时界
        EISBE      LIKE MARC-EISBE,        "安全库存
        STRGR      LIKE MARC-STRGR,        "策略组
        MTVFP      LIKE MARC-MTVFP,        "可用性检查
        EPRIO      LIKE MARC-EPRIO,        "库存确定组
        ALTSL      LIKE MARC-ALTSL,        "选择方法
        SBDKZ      LIKE MARC-SBDKZ,        "独立/集中
        SAUFT      LIKE MARC-SAUFT,        "重复制造
        SFEPR      LIKE MARC-SFEPR,        "重复制造参数
        FEVOR      LIKE MARC-FEVOR,        "生产调度员
        SFCPF      LIKE MARC-SFCPF,        "生产计划参数
        KZAUS      LIKE MARC-KZAUS,        "非连续标识
        KAUSF      LIKE MARC-KAUSF,        "部件废品率%
        AUSDT      LIKE MARC-AUSDT,        "有效期
        NFMAT      LIKE MARC-NFMAT,        "后续物料
        UEETK      LIKE MARC-UEETK,        "无限制过量交货
        UEETO      LIKE MARC-UEETO,        "过度交货允差
        MHDRZ      LIKE MARA-MHDRZ,        "最小剩余货架寿命
        MHDHB      LIKE MARA-MHDHB,        "总货架寿命
        LZEIH      LIKE MARC-LZEIH,        "时间单位
        IPRKZ      LIKE MARA-IPRKZ,        "SLED的期间标识
        VRMOD      LIKE MARC-VRMOD,        "消耗模式
        VINT1      LIKE MARC-VINT1,        "逆向消耗期间
        VINT2      LIKE MARC-VINT2,        "向前消耗期间
        MISKZ      LIKE MARC-MISKZ,        "综合MRP
        MATGR      TYPE MARC-MATGR,        "物料分组
*销售视图
        MAGRV      LIKE MARA-MAGRV,        "包装组
        DWERK      LIKE MVKE-DWERK,        "交货工厂
        TRAGR      LIKE MARA-TRAGR,        "运输组
        LADGR      LIKE MARC-LADGR,        "装载组
        VERSG      LIKE MVKE-VERSG,        "物料统计组 20170427 add
        KONDM      LIKE MVKE-KONDM,        "物料定价组
        SPART      LIKE MARA-SPART,        "部门(生产线) 产品组
        TATYP      LIKE BAPI_MLAN-TAX_TYPE_1, "税种类 'MWST'
        TAXKM      LIKE BAPI_MLAN-TAXCLASS_1, "物料的税分类
        VRKME      LIKE MVKE-VRKME,        "销售单位
        KTGRM      LIKE MVKE-KTGRM,        "科目设置组
        MTPOS      LIKE MVKE-MTPOS,        "项目类别组
*        VERSG      LIKE MVKE-VERSG,        "物料统计组
*会计和成本视图
        BWTTY      LIKE MBEW-BWTTY,        "评估类别
        BKLAS      LIKE MBEW-BKLAS,        "评估分类
        VPRSV      LIKE MBEW-VPRSV,        "价格控制
        VERPR      LIKE MBEW-VERPR,        "移动平均价
        STPRS      LIKE MBEW-STPRS,        "标准价
        PEINH      LIKE MBEW-PEINH,        "价格单位
        LOSGR      LIKE MARC-LOSGR,        "成本核算批量
        HRKFT      LIKE MBEW-HRKFT,        "原始组
        KOSGR      LIKE MBEW-KOSGR,        "间接费分组
        AWSLS      LIKE MARC-AWSLS,        "差异码
        PRCTR      LIKE MARC-PRCTR,        "利润中心
        NCOST      LIKE MARC-NCOST,        "无成本核算
        EKALR      LIKE MBEW-EKALR,        "用QS的成本估算
        HKMAT      LIKE MBEW-HKMAT,        "物料来源
        MMSTA      LIKE MARC-MMSTA,        "特定工厂的物料状态
        ZPLP1      LIKE MBEW-ZPLP1,        "计划价格1
        ZPLD1      LIKE MBEW-ZPLD1,        "计划价格日期1
        ZPLP2      LIKE MBEW-ZPLP2,        "计划价格2
        ZPLD2      LIKE MBEW-ZPLD2,        "计划价格日期2
        MLAST      LIKE CKMLHD-MLAST,       "价格确定 20170427 add
      END OF GT_ITAB.
DATA: GS_ITAB LIKE TABLE OF GT_ITAB WITH HEADER LINE.
DATA: GB_ITAB LIKE TABLE OF GT_ITAB WITH HEADER LINE.

DATA: GV_FILENAME TYPE STRING.
DATA: BEGIN OF IT_FIELD OCCURS 0 ,
        FIELD(100),
      END OF IT_FIELD.
DATA: GT_MBEW   TYPE TABLE OF MBEW WITH HEADER LINE.    "物料主数据会计和成本
DATA: GT_MVKE   TYPE TABLE OF MVKE WITH HEADER LINE.    "销售视图
DATA: GV_EDIT   TYPE STRING.              "是否可以编辑 02 表示可以编辑,03表示显示。
DATA: GV_ID     TYPE C LENGTH 10 VALUE 'TEXTS'.
DATA: GV_DOBJ   TYPE STANDARD TABLE OF TAB_TYPE WITH HEADER LINE.             "程序间数据传递
DATA: GV_PROG  TYPE STRING,
      GV_BLDAT TYPE STRING,
      GV_BUDAT TYPE STRING,
      GV_WERKS TYPE MSEG-WERKS,
      GV_MATNR TYPE MSEG-MATNR.
DATA: GV_POS TYPE I.

DATA: CL_DESCR  TYPE REF TO CL_ABAP_STRUCTDESCR.
FIELD-SYMBOLS:<FS_COMP> TYPE ABAP_COMPDESCR.
FIELD-SYMBOLS:<FS_NAME> TYPE ANY.

*定义ALV输出所需要的保存列名的内表和结构
TYPE-POOLS: SLIS.
DATA: LT_FIELDCAT     TYPE LVC_S_FCAT OCCURS 0.
DATA: LS_FIELDCAT     TYPE LVC_S_FCAT.
DATA: LB_FIELDCAT     TYPE TABLE OF LVC_S_FCAT WITH HEADER LINE.
DATA: LS_LAYOUT       TYPE LVC_S_LAYO.
DATA: GT_EVENT      TYPE SLIS_T_EVENT WITH HEADER LINE,
      GT_EVENT_EXIT TYPE SLIS_T_EVENT_EXIT WITH HEADER LINE.
DATA: LT_SORT         TYPE SLIS_T_SORTINFO_ALV WITH HEADER LINE.
DATA: LT_TOP_OF_PAGE  TYPE SLIS_T_LISTHEADER.
DATA: LS_EDIT TYPE LVC_S_STYL,
      LT_EDIT TYPE LVC_T_STYL.
DATA: REF_GRID        TYPE REF TO CL_GUI_ALV_GRID.

*----------------------------------------------------------------------*
*        SELECTION-SCREEN                                              *
*----------------------------------------------------------------------*
SELECTION-SCREEN: BEGIN OF BLOCK BLK1 WITH FRAME TITLE TEXT-001.
PARAMETERS:     P_PFILE TYPE LOCALFILE.   " MEMORY ID M07004ID.   "001
SELECT-OPTIONS:
                S_WERKS   FOR MARC-WERKS DEFAULT '1000' NO INTERVALS MEMORY ID WRK,
                S_MATNR   FOR MARA-MATNR MEMORY ID MAT,
                S_MATKL   FOR MARA-MATKL,
                S_MTART   FOR MARA-MTART,
                S_EKGRP   FOR MARC-EKGRP,
                S_DISMM   FOR MARC-DISMM,
                S_BESKZ   FOR MARC-BESKZ,
                S_VKORG   FOR MVKE-VKORG.
SELECTION-SCREEN : END OF BLOCK BLK1.
SELECTION-SCREEN: BEGIN OF BLOCK BLK2 WITH FRAME TITLE TEXT-002.
PARAMETERS:     P_SALES AS CHECKBOX,      "按销售视图查询
                P_CKST  AS CHECKBOX,      "仓库视图
                P_DOWN  AS CHECKBOX.      "下载到TXT文本文件
SELECTION-SCREEN : END OF BLOCK BLK2.
*----------------------------------------------------------------------*
*        INITIALIZATION                                                *
*----------------------------------------------------------------------*
INITIALIZATION.

*----------------------------------------------------------------------*
*        AT SELECTION-SCREEN                                           *
*----------------------------------------------------------------------*
AT SELECTION-SCREEN OUTPUT.

*  LOOP AT SCREEN.
*    IF SCREEN-NAME = 'S_CRTP'.
*      SCREEN-ACTIVE = '0'.
*    ENDIF.
*    MODIFY SCREEN.
*  ENDLOOP.
*----------------------------------------------------------------------*
*        AT LINE-SELECTION                                             *
*----------------------------------------------------------------------*
AT LINE-SELECTION.

AT SELECTION-SCREEN ON VALUE-REQUEST FOR P_PFILE.
  PERFORM FRM_INPUT_HELP CHANGING P_PFILE.
*----------------------------------------------------------------------*
*        START-OF-SELECTION                                            *
*----------------------------------------------------------------------*
START-OF-SELECTION.
  PERFORM FRM_CHECK_AUTHORITY.
  IF P_DOWN = 'X'.
    PERFORM FRM_GET_DATA.
    PERFORM FRM_EXPORT_DATA. "导出数据
  ELSE.
    PERFORM FRM_GET_DATA.
    PERFORM SUB_SHOW_ALV.
  ENDIF.

*----------------------------------------------------------------------*
*        END-OF-SELECTION                                              *
*----------------------------------------------------------------------*
END-OF-SELECTION.

*----------------------------------------------------------------------*
*       CLASS lcl_event_receiver DEFINITION
*----------------------------------------------------------------------*
*
*----------------------------------------------------------------------*
CLASS LCL_EVENT_RECEIVER DEFINITION.
  PUBLIC SECTION.
    METHODS HANDLE_MODIFY
                  FOR EVENT DATA_CHANGED_FINISHED OF CL_GUI_ALV_GRID
      IMPORTING E_MODIFIED ET_GOOD_CELLS.
ENDCLASS.                    "LCL_EVENT_RECEIVER DEFINITION
*----------------------------------------------------------------------*
*       CLASS LCL_EVENT_RECEIVER IMPLEMENTATION
*----------------------------------------------------------------------*
*
*----------------------------------------------------------------------*
CLASS LCL_EVENT_RECEIVER IMPLEMENTATION.
  METHOD HANDLE_MODIFY.
*    DATA STBL TYPE LVC_S_STBL.
*    "回车事件添加程序
*    STBL-ROW = 'X'." 基于行的稳定刷新
*    STBL-COL = 'X'." 基于列稳定刷新
*    CALL METHOD REF_GRID->REFRESH_TABLE_DISPLAY
*      EXPORTING
*        IS_STABLE = STBL.
  ENDMETHOD.                    "HANDLE_MODIFY
ENDCLASS.                    "LCL_EVENT_RECEIVER IMPLEMENTATION
DATA  GT_EVENT_RECEIVER TYPE REF TO LCL_EVENT_RECEIVER .
*&---------------------------------------------------------------------*
*&      Form  FRM_INPUT_HELP
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*      <--P_P_FILE  text
*----------------------------------------------------------------------*
FORM FRM_INPUT_HELP  CHANGING P_O_FILE.
  DATA:
    LTD_FILETABLE TYPE FILETABLE,
    LTH_FILETABLE TYPE LINE OF FILETABLE,
    LW_RC         TYPE I.

  CALL METHOD CL_GUI_FRONTEND_SERVICES=>FILE_OPEN_DIALOG
    CHANGING
      FILE_TABLE              = LTD_FILETABLE
      RC                      = LW_RC
    EXCEPTIONS
      FILE_OPEN_DIALOG_FAILED = 1
      CNTL_ERROR              = 2
      ERROR_NO_GUI            = 3
      NOT_SUPPORTED_BY_GUI    = 4
      OTHERS                  = 5.

  IF SY-SUBRC = 0.
    READ TABLE LTD_FILETABLE INTO LTH_FILETABLE INDEX 1.
    P_O_FILE = LTH_FILETABLE-FILENAME.
  ELSE.
    MESSAGE ID SY-MSGID TYPE 'I' NUMBER SY-MSGNO
          DISPLAY LIKE 'E'
          WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
    LEAVE LIST-PROCESSING.
  ENDIF.
ENDFORM.
*&---------------------------------------------------------------------*
*&      Form  FRM_EXPORT_DATA
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM FRM_EXPORT_DATA.
  DATA: W_FLAG TYPE C.
  DATA: LENGTH TYPE I.
  GV_FILENAME = P_PFILE.
  PERFORM FRM_BUILD_FDCAT.

  CL_DESCR ?= CL_ABAP_TYPEDESCR=>DESCRIBE_BY_DATA( GT_ITAB ).
  LOOP AT CL_DESCR->COMPONENTS ASSIGNING <FS_COMP>.
    W_FLAG = ''.
    LOOP AT LB_FIELDCAT WHERE FIELDNAME = <FS_COMP>-NAME.
      IT_FIELD-FIELD = LB_FIELDCAT-SCRTEXT_M.
      APPEND IT_FIELD.
      W_FLAG = 'X'.
    ENDLOOP.
    IF W_FLAG = ''.
      IT_FIELD-FIELD = <FS_COMP>-NAME.
      APPEND IT_FIELD.
    ENDIF.
  ENDLOOP.
  IF GV_FILENAME IS NOT INITIAL.
*--将内表数据导出到 TXT
    CALL FUNCTION 'GUI_DOWNLOAD'
      EXPORTING
        CONFIRM_OVERWRITE     = 'X'      "如果文件存在 弹出是否覆盖文件的对话框
        WRITE_FIELD_SEPARATOR = 'X'      "加入字段分隔符 TAB
        FILENAME              = GV_FILENAME "文件名 必须为 STRING 类型
        FILETYPE              = 'DAT'
      IMPORTING
        FILELENGTH            = LENGTH
      TABLES
        DATA_TAB              = GT_ITAB  "内表
        FIELDNAMES            = IT_FIELD
      EXCEPTIONS
        FILE_WRITE_ERROR      = 1
        FILE_NOT_FOUND        = 2.
  ELSE.
    MESSAGE S021(ZMM_MSG) WITH GV_WERKS DISPLAY LIKE 'E'.
  ENDIF.
ENDFORM.
*&---------------------------------------------------------------------*
*&      Form  FRM_GET_DATA
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM FRM_GET_DATA.
  DATA:LT_MLGN TYPE STANDARD TABLE OF MLGN,
       LS_MLGN TYPE MLGN.
  DATA: W_IDX TYPE I.
  DATA: W_MAKTX LIKE MAKT-MAKTX,
        W_MATNR LIKE MARC-MATNR,
        W_LSORT LIKE LFA1-SORTL,
        W_EKNAM LIKE T024-EKNAM,
        W_WGBEZ LIKE T023T-WGBEZ.
  DATA: W_OBJECT       LIKE BAPI1003_KEY-OBJECT,
        W_CLASS        LIKE BAPI1003_KEY-CLASSNUM,
        W_KLART        LIKE BAPI1003_KEY-CLASSTYPE,
        W_CLASS_STATUS LIKE BAPI1003_KEY-STATUS,
        W_TABLE        TYPE TABELLE.
  DATA: LF_INT TYPE INT4,
        TL_INT TYPE I.
  DATA: T0           TYPE P DECIMALS 3,
        TM           TYPE I,
        TM1          TYPE I,
        L_TIME_TOTAL TYPE P DECIMALS 3,
        L_TIME_OFF   TYPE P DECIMALS 3.
*订单长文本
  DATA:NAME LIKE THEAD-TDNAME.
  DATA:IT_LINES LIKE TABLE OF TLINE WITH HEADER LINE.
  DATA:HEADER LIKE THEAD.
  CLEAR: GT_ITAB[],GS_ITAB,GB_ITAB[].
  SELECT A~MATNR B~MTART B~BISMT B~MEINS B~MATKL B~EXTWG B~BRGEW B~GEWEI B~NTGEW
    B~VOLUM B~VOLEH A~WERKS A~EKGRP B~BSTME A~XCHPF A~MAABC A~KORDB A~USEQU A~QMATV
    A~SSQSS B~QMPUR A~DISMM A~MINBE A~BSTRF A~DISPO A~DISLS A~BSTMI A~BSTFE A~MABST
    A~BESKZ A~SOBSL A~KZECH A~RGEKZ A~DISGR A~LGPRO A~LGFSB A~KZKUP A~DZEIT A~PLIFZ
    A~WEBAZ A~FHORI A~FXHOR A~EISBE A~STRGR A~MTVFP A~EPRIO A~ALTSL A~SBDKZ A~SAUFT
    A~SFEPR A~FEVOR A~SFCPF A~KZAUS A~KAUSF A~AUSDT A~NFMAT A~UEETK A~UEETO B~MHDRZ
    B~MHDHB A~LZEIH B~IPRKZ A~VRMOD A~VINT1 A~VINT2 A~MISKZ A~MATGR B~MAGRV B~TRAGR
    A~LADGR B~SPART A~LOSGR A~AWSLS A~PRCTR A~NCOST A~MMSTA B~PSTAT A~KAUTB
    INTO CORRESPONDING FIELDS OF TABLE GB_ITAB FROM MARC AS A
    INNER JOIN MARA AS B ON A~MATNR = B~MATNR
    WHERE A~MATNR IN S_MATNR AND A~WERKS IN S_WERKS AND A~EKGRP IN S_EKGRP
    AND A~DISMM IN S_DISMM AND A~BESKZ IN S_BESKZ AND B~MATKL IN S_MATKL AND
    B~MTART IN S_MTART.
  DESCRIBE TABLE GB_ITAB LINES TL_INT.
  IF GB_ITAB[] IS NOT INITIAL.
    REFRESH LT_MLGN.
    SELECT MATNR LGNUM LTKZA LTKZE LGBKZ FROM MLGN
      INTO CORRESPONDING FIELDS OF TABLE LT_MLGN
     FOR ALL ENTRIES IN GB_ITAB
     WHERE MATNR = GB_ITAB-MATNR.
  ENDIF.

  LOOP AT GB_ITAB INTO GS_ITAB.
    GET RUN TIME FIELD DATA(T1).
    CLEAR: W_EKNAM,W_LSORT,W_MAKTX,W_WGBEZ,W_MATNR.
    W_MATNR = GS_ITAB-MATNR.
    SELECT SINGLE MAKTX INTO GS_ITAB-MAKTX FROM MAKT
      WHERE MATNR = W_MATNR AND SPRAS = '1'.
    CALL FUNCTION 'CONVERSION_EXIT_MATN1_OUTPUT'
      EXPORTING
        INPUT        = GS_ITAB-MATNR                       "物料号
      IMPORTING
        OUTPUT       = GS_ITAB-MATNR
      EXCEPTIONS
        LENGTH_ERROR = 1
        OTHERS       = 2.
    SELECT SINGLE WGBEZ INTO GS_ITAB-WGBEZ FROM T023T     "物料组描述
      WHERE MATKL = GS_ITAB-MATKL.
    SELECT SINGLE EKNAM INTO GS_ITAB-EKNAM FROM T024     "采购组描述
      WHERE EKGRP = GS_ITAB-EKGRP.


    "变式分类  300
    SELECT SINGLE C~CLASS INTO GS_ITAB-CL_VARIANT FROM INOB AS A
      INNER JOIN KSSK AS B ON A~CUOBJ = B~OBJEK AND A~KLART = B~KLART
      INNER JOIN KLAH AS C ON C~CLINT = B~CLINT
      WHERE A~OBJEK = W_MATNR AND A~KLART = '300' AND A~OBTAB = 'MARA'.

    "批次分类 022
    SELECT SINGLE C~CLASS INTO GS_ITAB-CL_BATCH FROM INOB AS A
      INNER JOIN KSSK AS B ON A~CUOBJ = B~OBJEK AND A~KLART = B~KLART
      INNER JOIN KLAH AS C ON C~CLINT = B~CLINT
      WHERE A~OBJEK = W_MATNR AND A~KLART = '022' AND A~OBTAB = 'MARA'.

    "物料分类 001
    SELECT SINGLE A~CLASS INTO GS_ITAB-CL_MATNR FROM KLAH AS A
      INNER JOIN KSSK AS B ON A~CLINT = B~CLINT AND A~KLART = B~KLART
      WHERE B~OBJEK = W_MATNR AND B~KLART = '001'.

    "维护状态
    IF GS_ITAB-PSTAT CP '*K*'.
      GS_ITAB-XEIK1 = 'X'.      "基本数据视图
    ENDIF.
    IF GS_ITAB-PSTAT CP '*E*'.
      GS_ITAB-XEIE1 = 'X'.      "采购视图
    ENDIF.
    IF GS_ITAB-PSTAT CP '*D*'.
      GS_ITAB-XEID1 = 'X'.      "物料需求计划(MRP)视图
    ENDIF.
    IF GS_ITAB-PSTAT CP '*L*'.
      GS_ITAB-XEIL1 = 'X'.      "存储视图
    ENDIF.
    IF GS_ITAB-PSTAT CP '*A*'.
      GS_ITAB-XEIA1 = 'X'.      "工作计划视图
    ENDIF.
    IF GS_ITAB-PSTAT CP '*V*'.
      GS_ITAB-XEIV1 = 'X'.      "销售视图
    ENDIF.
    IF GS_ITAB-PSTAT CP '*Q*'.
      GS_ITAB-XEIQ1 = 'X'.      "质量管理视图
    ENDIF.
    IF GS_ITAB-PSTAT CP '*B*'.
      GS_ITAB-XEIB1 = 'X'.      "会计视图
    ENDIF.
    IF GS_ITAB-PSTAT CP '*G*'.
      GS_ITAB-XEIG1 = 'X'.      "成本视图
    ENDIF.
    IF GS_ITAB-PSTAT CP '*S*'.
      GS_ITAB-XEIC1 = 'X'.      "仓库视图
    ENDIF.
*物料长文本获取
    FREE IT_LINES.
    NAME = W_MATNR.
    CALL FUNCTION 'READ_TEXT'
      EXPORTING
        CLIENT                  = SY-MANDT
        ID                      = 'GRUN'
        LANGUAGE                = SY-LANGU
        NAME                    = NAME
        OBJECT                  = 'MATERIAL'
      IMPORTING
        HEADER                  = HEADER
      TABLES
        LINES                   = IT_LINES
      EXCEPTIONS
        ID                      = 1
        LANGUAGE                = 2
        NAME                    = 3
        NOT_FOUND               = 4
        OBJECT                  = 5
        REFERENCE_CHECK         = 6
        WRONG_ACCESS_TO_ARCHIVE = 7
        OTHERS                  = 8.
    LOOP AT IT_LINES.
      CONCATENATE GS_ITAB-MAKTX_L IT_LINES-TDLINE INTO GS_ITAB-MAKTX_L.
*      EXIT.
    ENDLOOP.
    CONDENSE GS_ITAB-MAKTX_L NO-GAPS.
*价格确定
    SELECT SINGLE MLAST FROM CKMLHD INTO GS_ITAB-MLAST WHERE MATNR = W_MATNR AND BWKEY = GS_ITAB-WERKS.

    SELECT SINGLE * INTO CORRESPONDING FIELDS OF GT_MBEW FROM MBEW
      WHERE MATNR = W_MATNR AND BWKEY = S_WERKS+3(4).
    GS_ITAB-BWTTY = GT_MBEW-BWTTY.        "评估类别
    GS_ITAB-BKLAS = GT_MBEW-BKLAS.        "评估分类
    GS_ITAB-VPRSV = GT_MBEW-VPRSV.        "价格控制
    GS_ITAB-VERPR = GT_MBEW-VERPR.        "移动平均价
    GS_ITAB-STPRS = GT_MBEW-STPRS.        "标准价
    GS_ITAB-PEINH = GT_MBEW-PEINH.        "价格单位
    GS_ITAB-HRKFT = GT_MBEW-HRKFT.        "原始组
    GS_ITAB-KOSGR = GT_MBEW-KOSGR.        "间接费分组
    GS_ITAB-EKALR = GT_MBEW-EKALR.        "用QS的成本估算
    GS_ITAB-HKMAT = GT_MBEW-HKMAT.        "物料来源
    GS_ITAB-ZPLP1 = GT_MBEW-ZPLP1.        "计划价格1
    GS_ITAB-ZPLD1 = GT_MBEW-ZPLD1.        "计划价格日期1
    GS_ITAB-ZPLP2 = GT_MBEW-ZPLP2.        "计划价格2
    GS_ITAB-ZPLD2 = GT_MBEW-ZPLD2.        "计划价格日期2


    "显示销售视图数据
    IF P_SALES = 'X'.
      SELECT * INTO CORRESPONDING FIELDS OF TABLE GT_MVKE FROM MVKE
        WHERE VKORG IN S_VKORG AND MATNR = W_MATNR.
      LOOP AT GT_MVKE.
        GS_ITAB-DWERK = GT_MVKE-DWERK.        "交货工厂
        GS_ITAB-VRKME = GT_MVKE-VRKME.        "销售单位
        GS_ITAB-KTGRM = GT_MVKE-KTGRM.        "科目设置组
        GS_ITAB-MTPOS = GT_MVKE-MTPOS.        "项目类别组
        GS_ITAB-VKORG = GT_MVKE-VKORG.        "销售组织
        GS_ITAB-VTWEG = GT_MVKE-VTWEG.        "分销渠道
        GS_ITAB-VERSG = GT_MVKE-VERSG.        "物料统计组
*        *************** 20170427
****税分类 税收类别
        DATA:LV_LAND1 TYPE T001W-LAND1.
        CLEAR LV_LAND1.
        SELECT SINGLE LAND1 FROM T001W INTO LV_LAND1 WHERE WERKS = GS_ITAB-DWERK.
        SELECT SINGLE TAXM1 FROM MLAN INTO GS_ITAB-TAXKM WHERE MATNR = W_MATNR AND ALAND = LV_LAND1.
        SELECT SINGLE TATYP FROM TSTL INTO GS_ITAB-TATYP WHERE TALND = LV_LAND1.
        IF P_CKST = 'X'.
          CLEAR LS_MLGN.
          READ TABLE LT_MLGN INTO LS_MLGN WITH KEY MATNR = W_MATNR.
          IF SY-SUBRC = 0.
            LOOP AT LT_MLGN INTO LS_MLGN WHERE MATNR = W_MATNR.
              GS_ITAB-LGNUM   =  LS_MLGN-LGNUM.
              GS_ITAB-LTKZA   =  LS_MLGN-LTKZA.
              GS_ITAB-LTKZE   =  LS_MLGN-LTKZE.
              GS_ITAB-LGBKZ   =  LS_MLGN-LGBKZ.
              APPEND  GS_ITAB TO GT_ITAB.
            ENDLOOP.
          ELSE.
            APPEND  GS_ITAB TO GT_ITAB.
          ENDIF.
        ELSE.
          APPEND  GS_ITAB TO GT_ITAB.
        ENDIF.
*      ************20170427
      ENDLOOP.
      IF GT_MVKE[] IS INITIAL.
        IF P_CKST = 'X'.
          CLEAR LS_MLGN.
          READ TABLE LT_MLGN INTO LS_MLGN WITH KEY MATNR = W_MATNR.
          IF SY-SUBRC = 0.
            LOOP AT LT_MLGN INTO LS_MLGN WHERE MATNR = W_MATNR.
              GS_ITAB-LGNUM   =  LS_MLGN-LGNUM.
              GS_ITAB-LTKZA   =  LS_MLGN-LTKZA.
              GS_ITAB-LTKZE   =  LS_MLGN-LTKZE.
              GS_ITAB-LGBKZ   =  LS_MLGN-LGBKZ.
              APPEND  GS_ITAB TO GT_ITAB.
            ENDLOOP.
          ELSE.
            APPEND  GS_ITAB TO GT_ITAB.
          ENDIF.
        ELSE.
          APPEND  GS_ITAB TO GT_ITAB.
        ENDIF.
      ENDIF.
    ELSE.
      IF P_CKST = 'X'.
        CLEAR LS_MLGN.
        READ TABLE LT_MLGN INTO LS_MLGN WITH KEY MATNR = W_MATNR.
        IF SY-SUBRC = 0.
          LOOP AT LT_MLGN INTO LS_MLGN WHERE MATNR = W_MATNR.
            GS_ITAB-LGNUM   =  LS_MLGN-LGNUM.
            GS_ITAB-LTKZA   =  LS_MLGN-LTKZA.
            GS_ITAB-LTKZE   =  LS_MLGN-LTKZE.
            GS_ITAB-LGBKZ   =  LS_MLGN-LGBKZ.
            APPEND  GS_ITAB TO GT_ITAB.
          ENDLOOP.
        ELSE.
          APPEND  GS_ITAB TO GT_ITAB.
        ENDIF.
      ELSE.
        APPEND  GS_ITAB TO GT_ITAB.
      ENDIF.
    ENDIF.
    CLEAR: GS_ITAB.
    GET RUN TIME FIELD DATA(T2).
    T0 = ( T2 - T1 ) / 500000 .
    TM1 = ( TL_INT - LF_INT ) * T0 .


    LF_INT = LF_INT + 1.
    IF TM1 <> TM.
      TM = TM1.
      PERFORM SHOW_PROGRESSBAR USING LF_INT TL_INT TM.
    ENDIF.
  ENDLOOP.
  SORT GT_ITAB BY MATNR VKORG VTWEG ASCENDING.
ENDFORM.                  "FRM_GET_DATA
*&---------------------------------------------------------------------*
*&      Form  FRM_PROCESS_DATA
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM FRM_PROCESS_DATA.

ENDFORM.                    " FRM_PROCESS_DATA

*&---------------------------------------------------------------------*
*&      Form  FRM_BUILD_FDCAT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
FORM FRM_BUILD_FDCAT .
  REFRESH: LT_FIELDCAT.

  PERFORM FRM_ALV_FIELDCAT  USING:  'WERKS' '工厂' '' '5' ,
                                    'VKORG' '销售组织' '' '5' ,
                                    'VTWEG' '分销渠道' '' '3' ,
                                    "基本视图
                                    'MATNR' '物料号' '' '8' ,
                                    'MAKTX' '物料描述' '' '35' ,
                                    'MAKTX_L' '物料描述(长文本)' '' '35' ,
                                    'MATKL' '物料组' '' '5' ,
                                    'WGBEZ' '物料组描述' '' '10' ,
                                    'MTART' '物料类型' '' '5' ,
                                    'BISMT' 'UL号' '' '10' ,
                                    'EXTWG' '外部物料组' '' '5' ,
                                    'MEINS' '基本计量单位' '' '3' ,
                                    'BRGEW' '毛重' '' '5' ,
                                    'GEWEI' '重量单位' '' '3' ,
                                    'NTGEW' '净重' '' '5' ,
                                    'VOLUM' '体积' '' '5' ,
                                    'VOLEH' '体积单位' '' '3' ,

                                    'CL_VARIANT' '变式分类' '' '' ,
                                    'CL_BATCH' '批次分类' '' '' ,
                                    'CL_MATNR' '物料分类' '' '' ,

                                    'XEIK1' '基本数据视图' '' '2' ,
                                    'XEIE1' '采购视图' '' '2' ,
                                    'XEID1' '物料需求计划' '' '2' ,
                                    'XEIL1' '存储视图' '' '2' ,
                                    'XEIA1' '工作计划视图' '' '2' ,
                                    'XEIV1' '销售视图' '' '2' ,
                                    'XEIQ1' '质量管理视图' '' '2' ,
                                    'XEIB1' '会计视图' '' '2' ,
                                    'XEIG1' '成本视图' '' '2' ,
                                    'XEIC1' '仓库视图' '' '2' ,
                                    "仓库视图
                                    'LGNUM' '仓库号' '' '4' ,
                                    'LTKZA' '库存出库' '' '4' ,
                                    'LTKZE' '库存入库' '' '4' ,
                                    'LGBKZ' '仓库区标识' '' '4' ,

                                    "采购视图
                                    'EKGRP' '采购组' '' '4' ,
                                    'EKNAM' '采购组的描述' '' '10' ,
                                    'MAABC' 'ABC标识' '' '2' ,
                                    'XCHPF' '批次管理' '' '2' ,
                                    'KAUTB' '自动建立采购' '' '2' ,
                                    'KORDB' '源清单' '' '2' ,
                                    'USEQU' '配额安排' '' '2' ,
                                    'PO_TEXT' '采购文本' '' '10' ,
                                    "质理视图
                                    'QMATV' '检验设置' '' '2' ,
                                    'SSQSS' 'QM控制码' '' '4' ,
                                    'QMPUR' '采购激活' '' '2' ,

                                    "MRP视图
                                    'DISMM' 'MRP 类型' '' '3' ,
                                    'MINBE' '重订货点' '' '3' ,
                                    'BSTRF' '舍入值' '' '5' ,
                                    'DISPO' 'MRP控制者' '' '4' ,
                                    'DISLS' '批量' '' '3' ,
                                    'BSTMI' '最小批量' '' '5' ,
                                    'BSTFE' '固定批量大小' '' '5' ,
                                    'MABST' '最大库存水平' '' '5' ,
                                    'BESKZ' '采购类型' '' '2' ,
                                    'SOBSL' '特殊采购类' '' '3' ,
                                    'KZECH' '在生产/处理订单中批量输入的确定' '' '3' ,
                                    'RGEKZ' '反冲' '' '2' ,
                                    'DISGR' 'MRP组' '' '3' ,
                                    'LGPRO' '生产库存地点' '' '5' ,
                                    'LGFSB' '外部采购仓储地点' '' '5' ,
                                    'KZKUP' '物料是联产品' '' '2' ,
                                    'DZEIT' '自制生产' '' '2' ,
                                    'PLIFZ' '计划交货时间' '' '2' ,
                                    'WEBAZ' '收货处理时间' '' '2' ,
                                    'FHORI' '计划边际码' '' '4' ,
                                    'FXHOR' '计划时界' '' '2' ,
                                    'EISBE' '安全库存' '' '5' ,
                                    'STRGR' '策略组' '' '3' ,
                                    'MTVFP' '可用性检查' '' '3' ,
                                    'EPRIO' '库存确定组' '' '4' ,
                                    'ALTSL' '选择方法' '' '2' ,
                                    'SBDKZ' '独立/集中' '' '2' ,
                                    'SAUFT' '重复制造' '' '2' ,
                                    'SFEPR' '重复制造参数' '' '2' ,
                                    'FEVOR' '生产调度员' '' '4' ,
                                    'SFCPF' '生产计划参数' '' '2' ,
                                    'KZAUS' '非连续标识' '' '2' ,
                                    'KAUSF' '部件废品率%' '' '3' ,
                                    'AUSDT' '有效期' '' '8' ,
                                    'NFMAT' '后续物料' '' '2' ,
                                    'UEETK' '无限制过量交货' '' '2' ,
                                    'UEETO' '过度交货允差' '' '4' ,
                                    'MHDRZ' '最小剩余货架寿命' '' '3' ,
                                    'MHDHB' '总货架寿命' '' '3' ,
                                    'LZEIH' '时间单位' '' '2' ,
                                    'IPRKZ' 'SLED的期间标识' '' '2' ,
                                    'VRMOD' '消耗模式' '' '3' ,
                                    'VINT1' '逆向消耗期间' '' '4' ,
                                    'VINT2' '向前消耗期间' '' '4' ,
                                    'MISKZ' '综合MRP' '' '2' ,
                                    'MATGR' '旧物料号' '' '10' ,
                                    "销售视图
                                    'MAGRV' '包装组' '' '3' ,
                                    'DWERK' '交货工厂' '' '5' ,
                                    'TRAGR' '运输组' '' '4' ,
                                    'LADGR' '装载组' '' '4' ,
                                    'VERSG' '物料统计组' '' '4' ,
                                    'SPART' '部门(生产线) 产品组' '' '3' ,
                                    'TATYP' '税种类' '' '2' ,
                                    'TAXKM' '物料的税分类' '' '2' ,
                                    'VRKME' '销售单位' '' '3' ,
                                    'KTGRM' '科目设置组' '' '3' ,
                                    'MTPOS' '项目类别组' '' '4' ,
                                    "会计和成本视图
                                    'BWTTY' '评估类别' '' '2' ,
                                    'BKLAS' '评估分类' '' '2' ,
                                    'VPRSV' '价格控制' '' '2' ,
                                    'MLAST' '价格确定' '' '2' ,
                                    'VERPR' '移动平均价' '' '5' ,
                                    'STPRS' '标准价' '' '5' ,
                                    'PEINH' '价格单位' '' '5' ,
                                    'LOSGR' '成本核算批量' '' '5' ,
                                    'HRKFT' '原始组' '' '3' ,
                                    'KOSGR' '间接费分组' '' '3' ,
                                    'AWSLS' '差异码' '' '5' ,
                                    'PRCTR' '利润中心' '' '6' ,
                                    'NCOST' '无成本核算' '' '2' ,
                                    'EKALR' '用QS的成本估算' '' '2' ,
                                    'HKMAT' '物料来源' '' '2' ,
                                    'MMSTA' '特定工厂的物料状态' '' '3' ,
                                    'ZPLP1' '计划价格1' '' '5' ,
                                    'ZPLD1' '计划价格日期1' '' '10' ,
                                    'ZPLP2' '计划价格2' '' '5' ,
                                    'ZPLD2' '计划价格日期2' '' '10' .
ENDFORM.                    " FRM_BUILD_FDCAT
*&---------------------------------------------------------------------*
*&      Form  FRM_ALV_FIELDCAT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
FORM FRM_ALV_FIELDCAT
  USING PR_FNAME
        PR_SCRTEXT_M
        PR_NO_ZERO
        PR_OUTLEN.
  CLEAR:LS_FIELDCAT.
  GV_POS = GV_POS + 1.
  LS_FIELDCAT-COL_POS       = GV_POS.
  LS_FIELDCAT-FIELDNAME     = PR_FNAME.           "字段名
  LS_FIELDCAT-SCRTEXT_M     = PR_SCRTEXT_M.       "字段中描述
  LS_FIELDCAT-NO_ZERO       = PR_NO_ZERO.         "数值为0 不显示
  LS_FIELDCAT-OUTPUTLEN     = PR_OUTLEN.          "列的字符宽度
  APPEND LS_FIELDCAT TO LT_FIELDCAT.
  APPEND LS_FIELDCAT TO LB_FIELDCAT.

ENDFORM.                    " FRM_ALV_FIELDCAT

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

  PERFORM FRM_BUILD_FDCAT.

  GT_EVENT-NAME = 'CALLER_EXIT'.   "slis_ev_caller_exit_at_start事件
  GT_EVENT-FORM = 'FM_BUTTON'.
  APPEND GT_EVENT .

************************************************************
*为ALV结构赋值
  "LS_LAYOUT-CWIDTH_OPT  = 'X'. "优化宽度
  LS_LAYOUT-ZEBRA       = 'X'. "斑马线输出
  LS_LAYOUT-SEL_MODE    = 'A'.  "单元格的选择,可以多选单元格 多行,多列,任何单元格多选 用户可以使用最左边的选择按钮来选择多行
  LS_LAYOUT-STYLEFNAME  = 'STYLE'.

************************************************************
  CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY_LVC'
    EXPORTING
      I_CALLBACK_PROGRAM          = SY-REPID
      IS_LAYOUT_LVC               = LS_LAYOUT
      IT_FIELDCAT_LVC             = LT_FIELDCAT
      I_CALLBACK_USER_COMMAND     = 'MYCOMMAND'       "alv 交互(双击、回车)事件
      I_CALLBACK_PF_STATUS_SET    = 'MYSTATUS'        "alv 上加自定义按纽
      I_CALLBACK_HTML_TOP_OF_PAGE = 'ALV_TOP_OF_PAGE' "自定义ALV表头
      I_SAVE                      = 'U'
      IT_EVENTS                   = GT_EVENT[]
      I_HTML_HEIGHT_TOP           = 12
    TABLES
      T_OUTTAB                    = GT_ITAB
    EXCEPTIONS
      PROGRAM_ERROR               = 1
      OTHERS                      = 2.
ENDFORM.                    " SUB_SHOW_ALV
*&---------------------------------------------------------------------*
*&---------------------------------------------------------------------*
*&      Form  MYSTATUS
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*      -->RT_EXTAB   text
*----------------------------------------------------------------------*
FORM  MYSTATUS USING
      RT_EXTAB TYPE SLIS_T_EXTAB."定义GUI状态必须写
  DATA: BEGIN OF TAB OCCURS 0,
          FCODE LIKE RSMPE-FUNC,
        END OF TAB.

* 设置隐藏工具栏按钮Function Key

  SET PF-STATUS 'MYSTATUS1' EXCLUDING TAB IMMEDIATELY.
ENDFORM.                    "MYSTATUS
*&---------------------------------------------------------------------*
*&      Form  ALV_TOP_OF_PAGE
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*      -->CL_DD      text
*      -->p2         text
*----------------------------------------------------------------------*
FORM ALV_TOP_OF_PAGE USING CL_DD TYPE REF TO CL_DD_DOCUMENT.
  DATA: M_P TYPE I.
  DATA: W_LINE TYPE STRING.
  DATA: M_BUFF TYPE STRING.
*表头其实完全可以是一个html文件,自己使用html语言进行格式控制
  M_BUFF = '<html>'.
  CALL METHOD CL_DD->HTML_INSERT
    EXPORTING
      CONTENTS = M_BUFF
    CHANGING
      POSITION = M_P.
  M_BUFF = '<center><B>物料主数据报表</B></center>'.
  CALL METHOD CL_DD->HTML_INSERT
    EXPORTING
      CONTENTS = M_BUFF
    CHANGING
      POSITION = M_P.
  DESCRIBE TABLE GT_ITAB LINES DATA(WT_LINE).
  W_LINE = WT_LINE.
  CONCATENATE  '<table width="1200"><tr><td>操作日期:' SY-DATUM
  '  显示条数:' W_LINE
   '  </td><td><div align="right">操作用户:'
  SY-UNAME'</div></td></tr></table>' INTO M_BUFF.

  CALL METHOD CL_DD->HTML_INSERT
    EXPORTING
      CONTENTS = M_BUFF
    CHANGING
      POSITION = M_P.

ENDFORM.                    "ALV_TOP_OF_PAGE
*&---------------------------------------------------------------------*
*&      Form  MYCOMMAND
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*      -->R_UCOMM      text
*      -->RS_SELFIELD  text
*----------------------------------------------------------------------*
FORM MYCOMMAND
USING R_UCOMM LIKE SY-UCOMM
      RS_SELFIELD TYPE SLIS_SELFIELD.
  DATA: L_GRID TYPE REF TO CL_GUI_ALV_GRID.
  DATA: W_LGORT TYPE MSEG-LGORT.
  DATA: W_ERR_CELLS TYPE LVC_T_MODI.
  DATA: STBL TYPE LVC_S_STBL.
  CALL FUNCTION 'GET_GLOBALS_FROM_SLVC_FULLSCR'
    IMPORTING
      E_GRID = L_GRID.
  CALL METHOD L_GRID->CHECK_CHANGED_DATA.
  CASE R_UCOMM.
    WHEN 'REFRESH'.
      PERFORM FRM_GET_DATA.           "刷新
    WHEN '&IC1'.
      READ TABLE GT_ITAB INTO GS_ITAB INDEX RS_SELFIELD-TABINDEX.
      CASE RS_SELFIELD-FIELDNAME.
        WHEN 'MATNR'.
          IF GS_ITAB-MATNR IS NOT INITIAL.
            SET PARAMETER ID : 'MAT' FIELD GS_ITAB-MATNR.
            CALL TRANSACTION 'MM03' AND SKIP FIRST SCREEN.
          ENDIF.
      ENDCASE.
  ENDCASE.
  "稳定刷新
  STBL-ROW = 'X'." 基于行的稳定刷新
  STBL-COL = 'X'." 基于列稳定刷新
  CALL METHOD L_GRID->REFRESH_TABLE_DISPLAY
    EXPORTING
      IS_STABLE = STBL.
ENDFORM.                    "MYCOMMAND


FORM SHOW_PROGRESSBAR USING UPCT TOTAL TM TYPE I.


  DATA:  FBAR TYPE C LENGTH 13,
         FMSG TYPE C LENGTH 150.
  CONSTANTS:
    PERCENT1 TYPE C VALUE '▏',
    PERCENT2 TYPE C VALUE '▎',
    PERCENT3 TYPE C VALUE '▍',
    PERCENT4 TYPE C VALUE '▌',
    PERCENT5 TYPE C VALUE '▋',
    PERCENT6 TYPE C VALUE '▊',
    PERCENT7 TYPE C VALUE '▉',
    PERCENT8 TYPE C VALUE '█'.
  DATA:
    FMOD   TYPE N,
    FTIM   TYPE I,
    FCNT   TYPE P DECIMALS 3,
    FFIELD TYPE C LENGTH 10,
    FIDX   TYPE C LENGTH 3,
    FTOAL  TYPE C LENGTH 5,
    FCUR   TYPE C LENGTH 5,
    FTM    TYPE C LENGTH 8.
  FIELD-SYMBOLS: <FS> TYPE C.
  FCNT = ( UPCT / TOTAL ) * 100.
  FTIM = FCNT DIV 8.
  FMOD = FCNT MOD 8.
  CLEAR: FBAR.
  DO FTIM TIMES.
    CONCATENATE FBAR PERCENT8 INTO FBAR.
  ENDDO.
  IF FMOD NE 0.
    CONCATENATE 'percent' FMOD INTO FFIELD.
    ASSIGN (FFIELD) TO <FS>.
    CONCATENATE FBAR <FS> INTO FBAR.
  ENDIF.
  FIDX = ( UPCT / TOTAL ) * 100.
  FTOAL = TOTAL.
  FCUR = UPCT.
  FTM = TM.
  CONCATENATE '总条数: ' FTOAL '  完成条数: '
  FCUR '剩余时间: ' FTM 'S  百分比进度: ' FIDX '%  ' FBAR
  INTO FMSG.
  CALL FUNCTION 'SAPGUI_PROGRESS_INDICATOR'
    EXPORTING
      PERCENTAGE = TOTAL
      TEXT       = FMSG.

.ENDFORM.                    "show_progressb
*&---------------------------------------------------------------------*
*&---------------------------------------------------------------------*
*&      Form  fm_button
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*      -->E_GRID     text
*----------------------------------------------------------------------*
FORM FM_BUTTON USING E_GRID TYPE SLIS_DATA_CALLER_EXIT.

  CALL FUNCTION 'GET_GLOBALS_FROM_SLVC_FULLSCR'
    IMPORTING
      E_GRID = REF_GRID.
* 设置enter事件
  CALL METHOD REF_GRID->REGISTER_EDIT_EVENT
    EXPORTING
      I_EVENT_ID = CL_GUI_ALV_GRID=>MC_EVT_ENTER
    EXCEPTIONS
      ERROR      = 1
      OTHERS     = 2.
  CREATE OBJECT GT_EVENT_RECEIVER.
  SET HANDLER   GT_EVENT_RECEIVER->HANDLE_MODIFY FOR REF_GRID.
ENDFORM.                    "FM_BUTTON
*&---------------------------------------------------------------------*
*&      Form  FRM_CHECK_AUTHORITY
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM FRM_CHECK_AUTHORITY .
  DATA:  LT_WERKS TYPE STANDARD TABLE OF T_WERKS,
         LS_WERKS TYPE T_WERKS.
  AUTHORITY-CHECK OBJECT 'M_BEST_WRK' ID 'WERKS' FIELD GV_WERKS.
  IF SY-SUBRC <> 0.
    MESSAGE S001(ZMM_MSG) WITH GV_WERKS DISPLAY LIKE 'E'.
    STOP.
  ENDIF.



ENDFORM.                    " FRM_CHECK_AUTHORITY----------------------*REPORT ZMMR004.

  • 8
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小啊曼

你的鼓励将是我创作的最大动力!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值