MM-库存周转率报表(开发笔记)

*&---------------------------------------------------------------------*
*& Report ZMMR102
*&---------------------------------------------------------------------*
*& Author              :  NathanSun
*& Create Date         :  2020-02-21
*& Program Type        :  Report
*& Description         :  库存周转率报表
*&---------------------------------------------------------------------*
REPORT ZMMR132.
*&---------------------------------------------------------------------*
*& 包含               YN_TEST02_TOP
*&---------------------------------------------------------------------*
TABLES:MSEG,MARA,MARC,CKMLCR,VBAP,MATDOC.

TYPE-POOLS:SLIS.

"定义ALV输出所需变量
DATAS_LAYOUT    TYPE SLIS_LAYOUT_ALV,
      GT_FIELDCAT TYPE SLIS_T_FIELDCAT_ALV.

TYPESBEGIN OF GTS_DATA,

         VLFAG    TYPE  C,                      "标记字段
         MATNR    TYPE  MSEG-MATNR,             "物料编码
         MAKTX    TYPE  MAKT-MAKTX,             "物料描述
         WERKS    TYPE  MSEG-WERKS,             "工厂
         BDATJ    TYPE  CKMLCR-BDATJ,           "年度
         POPER    TYPE  CKMLCR-POPER,           "月份
         DISPO    TYPE  MARC-DISPO,             "MRP控制员
         SOBSL    TYPE  MARC-SOBSL,             "特殊采购类型
         DSNAM    TYPE  T024D-DSNAM,            "MRP控制员描述
         MTART    TYPE  MARA-MTART,             "物料类型
         MTBEZ    TYPE  T134T-MTBEZ,            "物料类型描述
         MATKL    TYPE  MARA-MATKL,             "物料组
         WGBEZ    TYPE  V023-WGBEZ,             "物料组描述
         EXTWG    TYPE  MARA-EXTWG,             "系列
         MEINSJ   TYPE  MARA-MEINS,             "基本单位

         QCWJG    TYPE  ZCURRA,                 "期初物料工厂价格(5位小数位)
         QMWJG    TYPE  ZCURRA,                 "期末物料工厂价格(5位小数位)

         QCKCS    TYPE  ZQUAN,                  "期初库存数量
         QCKCJ    TYPE  ZCURRA,                 "期初库存金额

         QJCKS    TYPE  ZQUAN,                  "期间出库数量
         QJCKJ    TYPE  ZCURRA,                 "期间出库金额
         QJCKSZ   TYPE  ZQUAN,                  "参与周转率计算的期间出库数量
         QJCKJZ   TYPE  ZCURRA,                 "参与周转率计算的期间出库金额

         QJRKS    TYPE  ZQUAN,                  "期间入库数量
         QJRKJ    TYPE  ZCURRA,                 "期间入库金额
         QMKCS    TYPE  ZQUAN,                  "期末库存数量
         QMKCJ    TYPE  ZCURRA,                 "期末库存金额

         KCZZL    TYPE  CHAR12,                 "库存周转率
         KCZTS    TYPE  ZQUAN,                  "周转天数

         BWART    TYPE  MSEG-BWART,             "移动类型
         SHKZG    TYPE  MSEG-SHKZG,             "借贷方标识
         MENGE    TYPE  MSEG-MENGE,             "数量
         MEINS    TYPE  MSEG-MEINS,             "基本计量单位
         ZKCJE    TYPE  ZCURRA,                 "库存金额

         ZUBIE    TYPE  ZTMM_ST02-ZUBIE,        "类别组
         ZUBMS    TYPE  ZTMM_ST02-ZUBMS,        "类别描述
         ZYDFX    TYPE  ZTMM_ST02-ZYDFX,        "移动方向(OUT/IN
         SHKZG_ST TYPE  ZTMM_ST02-SHKZG_ST,     "借方/贷方标识
         BWART_ST TYPE  ZTMM_ST02-BWART_ST,     "移动类型(库存管理)
         SZDZF    TYPE  ZTMM_ST02-SZDZF,        "正负值(+/-
         ZCYJS    TYPE  ZTMM_ST02-ZCYJS,        "是否参与周转率计算

         MBLNR    TYPE  MSEG-MBLNR,             "凭证中的过帐日期
         MJAHR    TYPE  MSEG-MJAHR,             "凭证中的过帐日期
         ZEILE    TYPE  MSEG-ZEILE,             "凭证中的过帐日期
         BUDAT    TYPE  MKPF-BUDAT,             "凭证中的过帐日期

       END OF GTS_DATA.

DATALV_DATUMU TYPE DATUM .
DATALV_DATUMD TYPE DATUM .
DATALV_DATUML TYPE DATUM .
DATALV_DATUMN TYPE DATUM .

DATALV_YEARL TYPE NUMC4 .
DATALV_YEARN TYPE NUMC4 .
DATALV_POPEL TYPE POPER .
DATALV_POPEN TYPE POPER .
DATALV_DYTS  TYPE CHAR3 .

DATAGT_DATA   TYPE TABLE OF GTS_DATA WITH HEADER LINE.
DATAGT_DATA_A TYPE TABLE OF GTS_DATA WITH HEADER LINE.
DATAGT_DATA_B TYPE TABLE OF GTS_DATA WITH HEADER LINE.
DATAGV_TOP    TYPE SDYDO_TEXT_ELEMENT.

SELECTION-SCREEN BEGIN OF BLOCK B1 WITH FRAME.
SELECT-OPTIONSS_MATNR  FOR  MSEG-MATNR    MODIF ID C1,                        "物料编码
                S_WERKS  FOR  MSEG-WERKS    MODIF ID C1,                        "工厂
                S_MTART  FOR  MARA-MTART    MODIF ID C1,                        "物料类型
                S_MATKL  FOR  MARA-MATKL    MODIF ID C1,                        "物料组
                S_EXTWG  FOR  MARA-EXTWG    MODIF ID C1,                        "系列
                S_DISPO  FOR  MARC-DISPO    MODIF ID C1.                        "MRP控制员
PARAMETERSP_BDATJ TYPE NUMC4 MODIF ID C1 OBLIGATORY,                          "年度
            P_POPER TYPE NUMC2 MODIF ID C1 OBLIGATORY.                          "月份

SELECTION-SCREEN END OF BLOCK B1.
*&---------------------------------------------------------------------*
*& 包含               YN_TEST02_FOM
*&---------------------------------------------------------------------*
*&---------------------------------------------------------------------*
*& 包含               ZFIR092_FOM
*&---------------------------------------------------------------------*
*&---------------------------------------------------------------------*
*&      Form  FRM_EXCLUDE_OPTION
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM FRM_EXCLUDE_OPTION .

** Define the object to be passed to the RESTRICTION parameter
*DATA RESTRICT TYPE SSCR_RESTRICT.
*
** Auxiliary objects for filling RESTRICT
*DATA : OPTLIST TYPE SSCR_OPT_LIST,
*           ASS TYPE SSCR_ASS.
*
** 限制MATNR参数只能使用‘EQ’ ‘BT’.
*  OPTLIST-NAME = 'OBJECTKEY1'.
*  OPTLIST-OPTIONS-EQ = 'X'.
*  OPTLIST-OPTIONS-BT = 'X'.
*  APPEND OPTLIST TO RESTRICT-OPT_LIST_TAB.
*
*  ASS-KIND = 'S'.
*  ASS-NAME = 'S_MONAT'.
*  ASS-SG_MAIN = 'I'.
*  ASS-SG_ADDY = SPACE.
*  ASS-OP_MAIN = 'OBJECTKEY1'.
*  APPEND ASS TO RESTRICT-ASS_TAB.
*
*  CALL FUNCTION 'SELECT_OPTIONS_RESTRICT'
*   EXPORTING
*    RESTRICTION                  = RESTRICT
*   EXCEPTIONS
*     TOO_LATE                     = 1
*     REPEATED                     = 2
*     SELOPT_WITHOUT_OPTIONS       = 3
*     SELOPT_WITHOUT_SIGNS         = 4
*     INVALID_SIGN                 = 5
*     EMPTY_OPTION_LIST            = 6
*     INVALID_KIND                 = 7
*     REPEATED_KIND_A              = 8
*     OTHERS                       = 9
*            .
*
*  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 SCREEN_OUTPUT
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& -->  p1        text
*& <--  p2        text
*&---------------------------------------------------------------------*
FORM SCREEN_OUTPUT .
  LOOP AT SCREEN.
    CASE SCREEN-GROUP1.
      WHEN 'M1'.
        SCREEN-INPUT '0'.
    ENDCASE.
    MODIFY SCREEN.
  ENDLOOP.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form SCREEN_SETTING
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& -->  p1        text
*& <--  p2        text
*&---------------------------------------------------------------------*
FORM SCREEN_SETTING .
* AUTHORITY-CHECK OBJECT 'M_MATE_WRK'
*  ID 'WERKS' FIELD P_WERKS.
*  IF SY-SUBRC <> 0.
*    MESSAGE '您没有工厂:'&& P_WERKS && '  的权限!' TYPE 'E' .
*  ENDIF.
  DATAGT_T001W TYPE TABLE OF T001W WITH HEADER LINE.
  DATA  LV_FLAG TYPE C.
  CLEAR LV_FLAG .
  CLEAR GT_T001W[].
  SELECT WERKS INTO CORRESPONDING FIELDS OF TABLE GT_T001W[] FROM T001W
    
WHERE WERKS IN S_WERKS .
  LOOP AT GT_T001W.
    AUTHORITY-CHECK OBJECT 'M_MSEG_WMB'
     ID 'WERKS' FIELD GT_T001W-WERKS.
    IF SY-SUBRC <> 0.
      LV_FLAG 'X' .
      EXIT .
    ENDIF.
    CLEAR GT_T001W .
  ENDLOOP.
  IF LV_FLAG IS NOT INITIAL.
    MESSAGE '您没有工厂:'&& GT_T001W-WERKS && 的权限!TYPE 'E' .
  ENDIF.

  LV_DATUMD(6) = P_BDATJ && P_POPER .
  IF SY-DATUM(6=< LV_DATUMD(6).
    MESSAGE '不能查询当月及之后的期间!' TYPE 'E' .
  ELSE.
    LV_DATUMD LV_DATUMD(6&& '01'.
    LV_DATUMU(6) = LV_DATUMD(6) .
    LV_DATUMU+6(2) = '27'.
    LV_DATUMU LV_DATUMU + 6.
    LV_DATUMU+6(2) = '01'.
    LV_DATUMU LV_DATUMU 1.

    LV_DATUMN LV_DATUMD .
    LV_DATUML LV_DATUMD 1.

    LV_YEARL LV_DATUML(4).
    LV_YEARN LV_DATUMN(4).
    LV_POPEL LV_DATUML+4(2).
    LV_POPEN LV_DATUMN+4(2).

*当月天数
    LV_DYTS LV_DATUMU+6(2).

  ENDIF.

ENDFORM.
*&---------------------------------------------------------------------*
*& Form FOM_GETDATA
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& -->  p1        text
*& <--  p2        text
*&---------------------------------------------------------------------*
FORM FOM_GETDATA .
  DATA GT_CKMLCR TYPE TABLE OF CKMLCR WITH HEADER LINE.
  DATA GT_MARD   TYPE TABLE OF MARD   WITH HEADER LINE.
  DATA GT_MARDA  TYPE TABLE OF MARD   WITH HEADER LINE.
  DATA GT_MARDH  TYPE TABLE OF MARDH  WITH HEADER LINE.
  DATA GT_MSLB   TYPE TABLE OF MSLB   WITH HEADER LINE.
  DATA GT_MSLBA  TYPE TABLE OF MSLB   WITH HEADER LINE.
  DATA GT_MSLBH  TYPE TABLE OF MSLBH  WITH HEADER LINE.
  DATA GT_MSKU   TYPE TABLE OF MSKU   WITH HEADER LINE.
  DATA GT_MSKUA  TYPE TABLE OF MSKU   WITH HEADER LINE.
  DATA GT_MSKUH  TYPE TABLE OF MSKUH  WITH HEADER LINE.
  DATA GT_MSKA   TYPE TABLE OF MSKA   WITH HEADER LINE.
  DATA GT_MSKAA  TYPE TABLE OF MSKA   WITH HEADER LINE.
  DATA GT_MSKAH  TYPE TABLE OF MSKAH  WITH HEADER LINE.
  DATA GT_MSFD   TYPE TABLE OF MSFD   WITH HEADER LINE.
  DATA GT_MSFDA  TYPE TABLE OF MSFD   WITH HEADER LINE.
  DATA GT_MSFDH  TYPE TABLE OF MSFDH  WITH HEADER LINE.
*  CLEAR GT_DATA[] .
*  SELECT
*    MSEG~MATNR
*    MSEG~WERKS
*    MSEG~BWART
*    MSEG~SHKZG
*    MSEG~MENGE
*    MSEG~MEINS
*    MARC~DISPO
*    MARA~MTART
*    MARA~MATKL
*    MARA~EXTWG
*    ZTMM_ST02~ZUBIE
*    ZTMM_ST02~ZYDFX
*    ZTMM_ST02~ZCYJS
*    ZTMM_ST02~ZUBMS
*    INTO CORRESPONDING FIELDS OF TABLE GT_DATA[]
*    FROM MSEG
*    INNER JOIN MKPF ON MSEG~MBLNR = MKPF~MBLNR AND MSEG~MJAHR = MKPF~MJAHR
*    INNER JOIN ZTMM_ST02 ON ZTMM_ST02~BWART_ST = MSEG~BWART AND ZTMM_ST02~SHKZG_ST = MSEG~SHKZG
*    INNER JOIN MARA ON MARA~MATNR = MSEG~MATNR
*    INNER JOIN MARC ON MARC~MATNR = MSEG~MATNR AND MARC~WERKS = MSEG~WERKS
*    WHERE MKPF~BUDAT >= LV_DATUMD
*      AND MKPF~BUDAT <= LV_DATUMU
*      AND MSEG~MATNR IN S_MATNR
*      AND MSEG~WERKS IN S_WERKS
*      AND MARA~MTART IN S_MTART
*      AND MARA~MATKL IN S_MATKL
*      AND MARA~EXTWG IN S_EXTWG
*      AND MARC~DISPO IN S_DISPO
*      .

  CLEAR GT_DATA[] .
  SELECT
    MARC~MATNR
    MARC
~WERKS
    MARC
~DISPO
    MARC
~SOBSL
    MARA
~MTART
    MARA
~MATKL
    MARA
~EXTWG
    MARA
~MEINS AS MEINSJ
    
INTO CORRESPONDING FIELDS OF TABLE GT_DATA[]
    
FROM MARC
    INNER 
JOIN MARA ON MARA~MATNR MARC~MATNR
*    LEFT  JOIN MSEG ON MSEG~MATNR = MARC~MATNR
    WHERE MARC~MATNR IN S_MATNR
      
AND MARC~WERKS IN S_WERKS
      
AND MARA~MTART IN S_MTART
      
AND MARA~MATKL IN S_MATKL
      
AND MARA~EXTWG IN S_EXTWG
      
AND MARC~DISPO IN S_DISPO
      
.

  IF GT_DATA[] IS NOT INITIAL .
    CLEAR GT_DATA_A[] .
    SELECT
      MSEG~MATNR
      MSEG
~WERKS
      MSEG
~BWART
      MSEG
~SHKZG
      MSEG
~MENGE
      MSEG
~MEINS
      ZTMM_ST02
~ZUBIE
      ZTMM_ST02
~ZYDFX
      ZTMM_ST02
~ZCYJS
      ZTMM_ST02
~ZUBMS
      ZTMM_ST02
~SZDZF
      
INTO CORRESPONDING FIELDS OF TABLE GT_DATA_A[]
      
FROM MSEG
      INNER 
JOIN MKPF ON MSEG~MBLNR MKPF~MBLNR AND MSEG~MJAHR MKPF~MJAHR
      INNER 
JOIN ZTMM_ST02 ON ZTMM_ST02~BWART_ST MSEG~BWART AND ZTMM_ST02~SHKZG_ST MSEG~SHKZG
      
FOR ALL ENTRIES IN GT_DATA[]
      
WHERE MKPF~BUDAT >= LV_DATUMD
        
AND MKPF~BUDAT <= LV_DATUMU
        
AND MSEG~MATNR  GT_DATA-MATNR
        
AND MSEG~WERKS  GT_DATA-WERKS
       
.
  ENDIF.

  LOOP AT GT_DATA_A.

    IF GT_DATA_A-SZDZF '-'.
      GT_DATA_A-MENGE GT_DATA_A-MENGE * -.
    ENDIF.

    MODIFY GT_DATA_A.
    CLEAR GT_DATA_A.
  ENDLOOP.

  LOOP AT GT_DATA.

    CALL FUNCTION 'CONVERSION_EXIT_CUNIT_OUTPUT'
      EXPORTING
        INPUT          GT_DATA-MEINSJ
        
LANGUAGE       'E'
      IMPORTING
        OUTPUT         GT_DATA-MEINSJ
      
EXCEPTIONS
        UNIT_NOT_FOUND 1
        OTHERS         2.
    IF SY-SUBRC <> 0.
* Implement suitable error handling here
    ENDIF.


    SELECT SINGLE MAKTX INTO GT_DATA-MAKTX FROM MAKT
      
WHERE MATNR GT_DATA-MATNR
      
.
    SELECT SINGLE DSNAM INTO GT_DATA-DSNAM FROM T024D
      
WHERE WERKS GT_DATA-WERKS
        
AND DISPO GT_DATA-DISPO
        
.
    SELECT SINGLE MTBEZ INTO GT_DATA-MTBEZ FROM T134T
      
WHERE MTART GT_DATA-MTART
        
.
    SELECT SINGLE WGBEZ INTO GT_DATA-WGBEZ FROM T023T
      
WHERE MATKL GT_DATA-MATKL
        
.
    GT_DATA-BDATJ P_BDATJ.
    GT_DATA-POPER P_POPER.

    LOOP AT GT_DATA_A WHERE MATNR GT_DATA-MATNR
                        
AND WERKS GT_DATA-WERKS
                        
.

      IF GT_DATA_A-ZYDFX 'OUT'.
*        期间出库数量
        GT_DATA-QJCKS GT_DATA-QJCKS + GT_DATA_A-MENGE .

        IF GT_DATA_A-ZCYJS IS NOT INITIAL.
*        参与周转率计算的期间出库数量
          GT_DATA-QJCKSZ GT_DATA-QJCKSZ + GT_DATA_A-MENGE .
        ENDIF.

      ELSEIF GT_DATA_A-ZYDFX 'IN'.
*        期间入库数量
        GT_DATA-QJRKS GT_DATA-QJRKS + GT_DATA_A-MENGE .

      ENDIF.

    ENDLOOP.

    CLEAR GT_CKMLCR[].
    SELECT
      CKMLCR~PEINH
      CKMLCR
~VPRSV
      CKMLCR
~STPRS
      CKMLCR
~PVPRS
      CKMLCR
~WAERS
      CKMLCR
~BDATJ
      CKMLCR
~POPER
      
INTO CORRESPONDING FIELDS OF TABLE GT_CKMLCR[]
      
FROM CKMLCR
      INNER 
JOIN CKMLHD ON CKMLHD~KALNR CKMLCR~KALNR
      
WHERE CKMLHD~MATNR GT_DATA-MATNR
        
AND CKMLHD~BWKEY GT_DATA-WERKS
        
AND CKMLCR~CURTP '10'
        AND ( ( CKMLCR~BDATJ LV_YEARL AND CKMLCR~POPER LV_POPEL OR CKMLCR~BDATJ LV_YEARN AND CKMLCR~POPER LV_POPEN ) )
        .

*  获取期初物料工厂价格
    CLEAR GT_CKMLCR.
    READ TABLE GT_CKMLCR WITH KEY VPRSV 'V' BDATJ LV_YEARL POPER LV_POPEL .
    IF SY-SUBRC 0.
      GT_DATA-QCWJG GT_CKMLCR-PVPRS / GT_CKMLCR-PEINH .
    ELSE.
      READ TABLE GT_CKMLCR WITH KEY VPRSV 'S' BDATJ LV_YEARL POPER LV_POPEL .
      IF SY-SUBRC 0.
        GT_DATA-QCWJG GT_CKMLCR-STPRS / GT_CKMLCR-PEINH .
      ENDIF.
    ENDIF.

*  获取期末物料工厂价格
    CLEAR GT_CKMLCR.
    READ TABLE GT_CKMLCR WITH KEY VPRSV 'V' BDATJ LV_YEARN POPER LV_POPEN .
    IF SY-SUBRC 0.
      GT_DATA-QMWJG GT_CKMLCR-PVPRS / GT_CKMLCR-PEINH .
    ELSE.
      READ TABLE GT_CKMLCR WITH KEY VPRSV 'S' BDATJ LV_YEARN POPER LV_POPEN .
      IF SY-SUBRC 0.
        GT_DATA-QMWJG GT_CKMLCR-STPRS / GT_CKMLCR-PEINH .
      ENDIF.
    ENDIF.

    IF GT_DATA-QMWJG IS INITIAL.
      GT_DATA-QMWJG GT_DATA-QCWJG .
    ENDIF.

*期间出库金额
    GT_DATA-QJCKJ GT_DATA-QJCKS * GT_DATA-QMWJG .

*参与周转率计算的期间出库金额
    GT_DATA-QJCKJZ GT_DATA-QJCKSZ * GT_DATA-QMWJG .

*期间入库金额
    GT_DATA-QJRKJ GT_DATA-QJRKS * GT_DATA-QMWJG .

*----------------------------------------------------------------------------
*期初普通库存(非限制库存LABST、质检库存INSME):
    CLEAR GT_MARD[].
    SELECT *
      
FROM MARD
      
INTO CORRESPONDING FIELDS OF TABLE GT_MARD[]
      
WHERE MATNR GT_DATA-MATNR
        
AND WERKS GT_DATA-WERKS
        
.

    CLEAR GT_MARDH[].
    SELECT *
      
FROM MARDH
      
INTO CORRESPONDING FIELDS OF TABLE GT_MARDH[]
      
WHERE LFGJA > LV_YEARL OR LFGJA LV_YEARL AND LFMON >= LV_POPEL ) )
        AND MATNR GT_DATA-MATNR
        
AND WERKS GT_DATA-WERKS
      
.
    SORT GT_MARDH[] BY MATNR WERKS LGORT LFGJA LFMON .
    DELETE ADJACENT DUPLICATES FROM GT_MARDH[] COMPARING MATNR WERKS LGORT .

    LOOP AT GT_MARD.
      READ TABLE GT_MARDH WITH KEY MATNR GT_MARD-MATNR
                                   WERKS 
GT_MARD-WERKS
                                   LGORT 
GT_MARD-LGORT
                                   
.
      IF SY-SUBRC 0.
        GT_MARD-LABST GT_MARDH-LABST .
        GT_MARD-INSME GT_MARDH-INSME .
      ENDIF.

      GT_DATA-QCKCS GT_DATA-QCKCS + GT_MARD-LABST + GT_MARD-INSME .

      MODIFY GT_MARD .
      CLEAR GT_MARD .
    ENDLOOP.

*期末期初普通库存(非限制库存LABST、质检库存INSME):
    CLEAR GT_MARDA[].
    SELECT *
      
FROM MARD
      
INTO CORRESPONDING FIELDS OF TABLE GT_MARDA[]
      
WHERE MATNR GT_DATA-MATNR
        
AND WERKS GT_DATA-WERKS
        
.

    CLEAR GT_MARDH[].
    SELECT *
      
FROM MARDH
      
INTO CORRESPONDING FIELDS OF TABLE GT_MARDH[]
      
WHERE LFGJA > LV_YEARN OR LFGJA LV_YEARN AND LFMON >= LV_POPEN ) )
        AND MATNR GT_DATA-MATNR
        
AND WERKS GT_DATA-WERKS
      
.
    SORT GT_MARDH[] BY MATNR WERKS LGORT LFGJA LFMON .
    DELETE ADJACENT DUPLICATES FROM GT_MARDH[] COMPARING MATNR WERKS LGORT .

    LOOP AT GT_MARDA.
      READ TABLE GT_MARDH WITH KEY MATNR GT_MARDA-MATNR
                                   WERKS 
GT_MARDA-WERKS
                                   LGORT 
GT_MARDA-LGORT
                                   
.
      IF SY-SUBRC 0.
        GT_MARDA-LABST GT_MARDH-LABST .
        GT_MARDA-INSME GT_MARDH-INSME .
      ENDIF.

      GT_DATA-QMKCS GT_DATA-QMKCS + GT_MARDA-LABST + GT_MARDA-INSME .

      MODIFY GT_MARDA .
      CLEAR GT_MARDA .
    ENDLOOP.
*----------------------------------------------------------------------------
*期初供应商库存(非限制库存LBLAB、质检库存LBINS
    CLEAR GT_MSLB[].
    SELECT *
      
FROM MSLB
      
INTO CORRESPONDING FIELDS OF TABLE GT_MSLB[]
      
WHERE MATNR GT_DATA-MATNR
        
AND WERKS GT_DATA-WERKS
        
.

    CLEAR GT_MSLBH[].
    SELECT *
      
FROM MSLBH
      
INTO CORRESPONDING FIELDS OF TABLE GT_MSLBH[]
      
WHERE LFGJA > LV_YEARL OR LFGJA LV_YEARL AND LFMON >= LV_POPEL ) )
        AND MATNR GT_DATA-MATNR
        
AND WERKS GT_DATA-WERKS
      
.
    SORT GT_MSLBH[] BY MATNR WERKS CHARG SOBKZ LIFNR LFGJA LFMON .
    DELETE ADJACENT DUPLICATES FROM GT_MSLBH[] COMPARING MATNR WERKS CHARG SOBKZ LIFNR.

    LOOP AT GT_MSLB.
      READ TABLE GT_MSLBH WITH KEY MATNR GT_MSLB-MATNR
                                   WERKS 
GT_MSLB-WERKS
                                   CHARG 
GT_MSLB-CHARG
                                   SOBKZ 
GT_MSLB-SOBKZ
                                   LIFNR 
GT_MSLB-LIFNR
                                   
.
      IF SY-SUBRC 0.
        GT_MSLB-LBLAB GT_MSLBH-LBLAB .
        GT_MSLB-LBINS GT_MSLBH-LBINS .
      ENDIF.

      GT_DATA-QCKCS GT_DATA-QCKCS + GT_MSLB-LBLAB + GT_MSLB-LBINS .

      MODIFY GT_MSLB .
      CLEAR GT_MSLB .
    ENDLOOP.

*期末供应商库存(非限制库存LBLAB、质检库存LBINS
    CLEAR GT_MSLBA[].
    SELECT *
      
FROM MSLB
      
INTO CORRESPONDING FIELDS OF TABLE GT_MSLBA[]
      
WHERE MATNR GT_DATA-MATNR
        
AND WERKS GT_DATA-WERKS
        
.

    CLEAR GT_MSLBH[].
    SELECT *
      
FROM MSLBH
      
INTO CORRESPONDING FIELDS OF TABLE GT_MSLBH[]
      
WHERE LFGJA > LV_YEARN OR LFGJA LV_YEARN AND LFMON >= LV_POPEN ) )
        AND MATNR GT_DATA-MATNR
        
AND WERKS GT_DATA-WERKS
      
.
    SORT GT_MSLBH[] BY MATNR WERKS CHARG SOBKZ LIFNR LFGJA LFMON.
    DELETE ADJACENT DUPLICATES FROM GT_MSLBH[] COMPARING MATNR WERKS CHARG SOBKZ LIFNR.

    LOOP AT GT_MSLBA.
      READ TABLE GT_MSLBH WITH KEY MATNR GT_MSLBA-MATNR
                                   WERKS 
GT_MSLBA-WERKS
                                   CHARG 
GT_MSLBA-CHARG
                                   SOBKZ 
GT_MSLBA-SOBKZ
                                   LIFNR 
GT_MSLBA-LIFNR
                                   
.
      IF SY-SUBRC 0.
        GT_MSLBA-LBLAB GT_MSLBH-LBLAB .
        GT_MSLBA-LBINS GT_MSLBH-LBINS .
      ENDIF.

      GT_DATA-QMKCS GT_DATA-QMKCS + GT_MSLBA-LBLAB + GT_MSLBA-LBINS .

      MODIFY GT_MSLBA .
      CLEAR GT_MSLBA .
    ENDLOOP.
*----------------------------------------------------------------------------

*----------------------------------------------------------------------------
*期初客户寄售库存(非限制库存KULAB、质检库存KUINS
    CLEAR GT_MSKU[].
    SELECT *
      
FROM MSKU
      
INTO CORRESPONDING FIELDS OF TABLE GT_MSKU[]
      
WHERE MATNR GT_DATA-MATNR
        
AND WERKS GT_DATA-WERKS
        
.

    CLEAR GT_MSKUH[].
    SELECT *
      
FROM MSKUH
      
INTO CORRESPONDING FIELDS OF TABLE GT_MSKUH[]
      
WHERE LFGJA > LV_YEARL OR LFGJA LV_YEARL AND LFMON >= LV_POPEL ) )
        AND MATNR GT_DATA-MATNR
        
AND WERKS GT_DATA-WERKS
      
.
    SORT GT_MSKUH[] BY MATNR WERKS CHARG SOBKZ KUNNR LFGJA LFMON .
    DELETE ADJACENT DUPLICATES FROM GT_MSKUH[] COMPARING MATNR WERKS CHARG SOBKZ KUNNR .

    LOOP AT GT_MSKU.
      READ TABLE GT_MSKUH WITH KEY MATNR GT_MSKU-MATNR
                                   WERKS 
GT_MSKU-WERKS
                                   CHARG 
GT_MSKU-CHARG
                                   SOBKZ 
GT_MSKU-SOBKZ
                                   KUNNR 
GT_MSKU-KUNNR
                                   
.
      IF SY-SUBRC 0.
        GT_MSKU-KULAB GT_MSKUH-KULAB .
        GT_MSKU-KUINS GT_MSKUH-KUINS .
      ENDIF.

      GT_DATA-QCKCS GT_DATA-QCKCS + GT_MSKU-KULAB + GT_MSKU-KUINS .

      MODIFY GT_MSKU .
      CLEAR GT_MSKU .
    ENDLOOP.

*期末供应商库存(非限制库存KULAB、质检库存KUINS
    CLEAR GT_MSKUA[].
    SELECT *
      
FROM MSKU
      
INTO CORRESPONDING FIELDS OF TABLE GT_MSKUA[]
      
WHERE MATNR GT_DATA-MATNR
        
AND WERKS GT_DATA-WERKS
        
.

    CLEAR GT_MSKUH[].
    SELECT *
      
FROM MSKUH
      
INTO CORRESPONDING FIELDS OF TABLE GT_MSKUH[]
      
WHERE LFGJA > LV_YEARN OR LFGJA LV_YEARN AND LFMON >= LV_POPEN ) )
        AND MATNR GT_DATA-MATNR
        
AND WERKS GT_DATA-WERKS
      
.
    SORT GT_MSKUH[] BY MATNR WERKS CHARG SOBKZ KUNNR LFGJA LFMON.
    DELETE ADJACENT DUPLICATES FROM GT_MSKUH[] COMPARING MATNR WERKS CHARG SOBKZ KUNNR .

    LOOP AT GT_MSKUA.
      READ TABLE GT_MSKUH WITH KEY MATNR GT_MSKUA-MATNR
                                   WERKS 
GT_MSKUA-WERKS
                                   CHARG 
GT_MSKUA-CHARG
                                   SOBKZ 
GT_MSKUA-SOBKZ
                                   KUNNR 
GT_MSKUA-KUNNR
                                   
.
      IF SY-SUBRC 0.
        GT_MSKUA-KULAB GT_MSKUH-KULAB .
        GT_MSKUA-KUINS GT_MSKUH-KUINS .
      ENDIF.

      GT_DATA-QMKCS GT_DATA-QMKCS + GT_MSKUA-KULAB + GT_MSKUA-KUINS .

      MODIFY GT_MSKUA .
      CLEAR GT_MSKUA .
    ENDLOOP.
*----------------------------------------------------------------------------

*----------------------------------------------------------------------------
*期初销售订单库存(非限制库存KALAB、质检库存KAINS
    CLEAR GT_MSKA[].
    SELECT *
      
FROM MSKA
      
INTO CORRESPONDING FIELDS OF TABLE GT_MSKA[]
      
WHERE MATNR GT_DATA-MATNR
        
AND WERKS GT_DATA-WERKS
        
.

    CLEAR GT_MSKAH[].
    SELECT *
      
FROM MSKAH
      
INTO CORRESPONDING FIELDS OF TABLE GT_MSKAH[]
      
WHERE LFGJA > LV_YEARL OR LFGJA LV_YEARL AND LFMON >= LV_POPEL ) )
        AND MATNR GT_DATA-MATNR
        
AND WERKS GT_DATA-WERKS
      
.
    SORT GT_MSKAH[] BY MATNR WERKS LGORT CHARG SOBKZ VBELN POSNR LFGJA LFMON .
    DELETE ADJACENT DUPLICATES FROM GT_MSKAH[] COMPARING MATNR WERKS LGORT CHARG SOBKZ VBELN POSNR .

    LOOP AT GT_MSKA.
      READ TABLE GT_MSKAH WITH KEY MATNR GT_MSKA-MATNR
                                   WERKS 
GT_MSKA-WERKS
                                   LGORT 
GT_MSKA-LGORT
                                   CHARG 
GT_MSKA-CHARG
                                   SOBKZ 
GT_MSKA-SOBKZ
                                   VBELN 
GT_MSKA-VBELN
                                   POSNR 
GT_MSKA-POSNR
                                   
.
      IF SY-SUBRC 0.
        GT_MSKA-KALAB GT_MSKAH-KALAB .
        GT_MSKA-KAINS GT_MSKAH-KAINS .
      ENDIF.

      GT_DATA-QCKCS GT_DATA-QCKCS + GT_MSKA-KALAB + GT_MSKA-KAINS .

      MODIFY GT_MSKA .
      CLEAR GT_MSKA .
    ENDLOOP.

*期末销售订单库存(非限制库存KALAB、质检库存KAINS
    CLEAR GT_MSKAA[].
    SELECT *
      
FROM MSKA
      
INTO CORRESPONDING FIELDS OF TABLE GT_MSKAA[]
      
WHERE MATNR GT_DATA-MATNR
        
AND WERKS GT_DATA-WERKS
        
.

    CLEAR GT_MSKAH[].
    SELECT *
      
FROM MSKAH
      
INTO CORRESPONDING FIELDS OF TABLE GT_MSKAH[]
      
WHERE LFGJA > LV_YEARN OR LFGJA LV_YEARN AND LFMON >= LV_POPEN ) )
        AND MATNR GT_DATA-MATNR
        
AND WERKS GT_DATA-WERKS
      
.
    SORT GT_MSKAH[] BY MATNR WERKS LGORT CHARG SOBKZ VBELN POSNR LFGJA LFMON .
    DELETE ADJACENT DUPLICATES FROM GT_MSKAH[] COMPARING MATNR WERKS LGORT CHARG SOBKZ VBELN POSNR .

    LOOP AT GT_MSKAA.
      READ TABLE GT_MSKAH WITH KEY MATNR GT_MSKAA-MATNR
                                   WERKS 
GT_MSKAA-WERKS
                                   LGORT 
GT_MSKAA-LGORT
                                   CHARG 
GT_MSKAA-CHARG
                                   SOBKZ 
GT_MSKAA-SOBKZ
                                   VBELN 
GT_MSKAA-VBELN
                                   POSNR 
GT_MSKAA-POSNR
                                   
.
      IF SY-SUBRC 0.
        GT_MSKAA-KALAB GT_MSKAH-KALAB .
        GT_MSKAA-KAINS GT_MSKAH-KAINS .
      ENDIF.

      GT_DATA-QMKCS GT_DATA-QMKCS + GT_MSKAA-KALAB + GT_MSKAA-KAINS .

      MODIFY GT_MSKAA .
      CLEAR GT_MSKAA .
    ENDLOOP.
*----------------------------------------------------------------------------

*----------------------------------------------------------------------------
*期初外发供应商销售订单库存(非限制库存FDLAB、质检库存FDINS
    CLEAR GT_MSFD[].
    SELECT *
      
FROM MSFD
      
INTO CORRESPONDING FIELDS OF TABLE GT_MSFD[]
      
WHERE MATNR GT_DATA-MATNR
        
AND WERKS GT_DATA-WERKS
        
.

    CLEAR GT_MSFDH[].
    SELECT *
      
FROM MSFDH
      
INTO CORRESPONDING FIELDS OF TABLE GT_MSFDH[]
      
WHERE LFGJA > LV_YEARL OR LFGJA LV_YEARL AND LFMON >= LV_POPEL ) )
        AND MATNR GT_DATA-MATNR
        
AND WERKS GT_DATA-WERKS
      
.
    SORT GT_MSFDH[] BY MATNR WERKS CHARG SOBKZ LIFNR VBELN POSNR LFGJA LFMON .
    DELETE ADJACENT DUPLICATES FROM GT_MSFDH[] COMPARING MATNR WERKS CHARG SOBKZ LIFNR VBELN POSNR .

    LOOP AT GT_MSFD.
      READ TABLE GT_MSFDH WITH KEY MATNR GT_MSFD-MATNR
                                   WERKS 
GT_MSFD-WERKS
                                   CHARG 
GT_MSFD-CHARG
                                   SOBKZ 
GT_MSFD-SOBKZ
                                   LIFNR 
GT_MSFD-LIFNR
                                   VBELN 
GT_MSFD-VBELN
                                   POSNR 
GT_MSFD-POSNR
                                   
.
      IF SY-SUBRC 0.
        GT_MSFD-FDLAB GT_MSFDH-FDLAB .
        GT_MSFD-FDINS GT_MSFDH-FDINS .
      ENDIF.

      GT_DATA-QCKCS GT_DATA-QCKCS + GT_MSFD-FDLAB + GT_MSFD-FDINS .

      MODIFY GT_MSFD .
      CLEAR GT_MSFD .
    ENDLOOP.

*期末外发供应商销售订单库存(非限制库存FDLAB、质检库存FDINS
    CLEAR GT_MSFDA[].
    SELECT *
      
FROM MSFD
      
INTO CORRESPONDING FIELDS OF TABLE GT_MSFDA[]
      
WHERE MATNR GT_DATA-MATNR
        
AND WERKS GT_DATA-WERKS
        
.

    CLEAR GT_MSFDH[].
    SELECT *
      
FROM MSFDH
      
INTO CORRESPONDING FIELDS OF TABLE GT_MSFDH[]
      
WHERE LFGJA > LV_YEARN OR LFGJA LV_YEARN AND LFMON >= LV_POPEN ) )
        AND MATNR GT_DATA-MATNR
        
AND WERKS GT_DATA-WERKS
      
.
    SORT GT_MSFDH[] BY MATNR WERKS CHARG SOBKZ LIFNR VBELN POSNR LFGJA LFMON .
    DELETE ADJACENT DUPLICATES FROM GT_MSFDH[] COMPARING MATNR WERKS CHARG SOBKZ LIFNR VBELN POSNR .

    LOOP AT GT_MSFDA.
      READ TABLE GT_MSFDH WITH KEY MATNR GT_MSFDA-MATNR
                                   WERKS 
GT_MSFDA-WERKS
                                   CHARG 
GT_MSFDA-CHARG
                                   SOBKZ 
GT_MSFDA-SOBKZ
                                   LIFNR 
GT_MSFDA-LIFNR
                                   VBELN 
GT_MSFDA-VBELN
                                   POSNR 
GT_MSFDA-POSNR
                                   
.
      IF SY-SUBRC 0.
        GT_MSFDA-FDLAB GT_MSFDH-FDLAB .
        GT_MSFDA-FDINS GT_MSFDH-FDINS .
      ENDIF.

      GT_DATA-QMKCS GT_DATA-QMKCS + GT_MSFDA-FDLAB + GT_MSFDA-FDINS .

      MODIFY GT_MSFDA .
      CLEAR GT_MSFDA .
    ENDLOOP.
*----------------------------------------------------------------------------

*期初库存金额
    GT_DATA-QCKCJ GT_DATA-QCKCS * GT_DATA-QCWJG .

*期初库存金额
    GT_DATA-QMKCJ GT_DATA-QMKCS * GT_DATA-QMWJG .

*库存周转率计算
*   如果物料类型为 MARA-MTART =Z004 OR MARC-SOBSL='99',出库数量/(期初数量+期末数量)/2,
*   出库数量为出库类型=OUT 且参与库存周转率计算移动类型的出口库存汇总
    IF GT_DATA-MTART 'Z004' OR GT_DATA-SOBSL '99'.
      IF GT_DATA-QCKCS + GT_DATA-QMKCS <> 0.
        GT_DATA-KCZZL GT_DATA-QJCKSZ / ( ( GT_DATA-QCKCS + GT_DATA-QMKCS ) .
      ENDIF.
    ELSE.
*     否则出库金额/(期初+期末金额)/2  ,出库数量为出库类型=OUT类型  参与库存周转率计算的库存金额汇总
      IF GT_DATA-QCKCJ + GT_DATA-QMKCJ <> 0.
        GT_DATA-KCZZL GT_DATA-QJCKJZ / ( ( GT_DATA-QCKCJ + GT_DATA-QMKCJ ) .
      ENDIF.
    ENDIF.

*库存周转天数计算
    IF GT_DATA-KCZZL <> 0.
      GT_DATA-KCZTS LV_DYTS / GT_DATA-KCZZL.
    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-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'
      I_CALLBACK_HTML_TOP_OF_PAGE 'F_HTML_TOP_OF_PAGE'
      I_HTML_HEIGHT_TOP           8                             "指定ALV表头宽度
    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.

    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.
  IF SY-TCODE 'ZMMR034'."不显示金额
    FILL_FIELD :
          'MATNR'    '物料编码',
          'MAKTX'    '物料描述',
          'WERKS'    '工厂',
          'BDATJ'    '年度',
          'POPER'    '月份',
          'DISPO'    'MRP控制员',
          'DSNAM'    'MRP控制员描述',
          'MTART'    '物料类型',
          'MTBEZ'    '物料类型描述',
          'MATKL'    '物料组',
          'WGBEZ'    '物料组描述',
          'EXTWG'    '系列',
          'MEINSJ'   '基本单位',
          'QCKCS'    '期初库存数量',
*          'QCKCJ'    '期初库存金额',
          'QJCKS'    '期间出库数量',
*          'QJCKJ'    '期间出库金额',
          'QJRKS'    '期间入库数量',
*          'QJRKJ'    '期间入库金额',
          'QMKCS'    '期末库存数量',
*          'QMKCJ'    '期末库存金额',
          'KCZZL'    '库存周转率',
          'KCZTS'    '周转天数'.

  ELSE .
    FILL_FIELD :
          'MATNR'    '物料编码',
          'MAKTX'    '物料描述',
          'WERKS'    '工厂',
          'BDATJ'    '年度',
          'POPER'    '月份',
          'DISPO'    'MRP控制员',
          'DSNAM'    'MRP控制员描述',
          'MTART'    '物料类型',
          'MTBEZ'    '物料类型描述',
          'MATKL'    '物料组',
          'WGBEZ'    '物料组描述',
          'EXTWG'    '系列',
          'MEINSJ'   '基本单位',
          'QCKCS'    '期初库存数量',
          'QCKCJ'    '期初库存金额',
          'QJCKS'    '期间出库数量',
          'QJCKJ'    '期间出库金额',
          'QJRKS'    '期间入库数量',
          'QJRKJ'    '期间入库金额',
          'QMKCS'    '期末库存数量',
          'QMKCJ'    '期末库存金额',
          'KCZZL'    '库存周转率',
          'KCZTS'    '周转天数'.

  ENDIF.

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 '&IC1'."表示双击

    WHEN 'POST_T'.

  ENDCASE.

  CALL METHOD REF->REFRESH_TABLE_DISPLAY
    
EXPORTING
      IS_STABLE LV_STABLE.

ENDFORM.

FORM F_HTML_TOP_OF_PAGE USING PR_DOCUMENT TYPE REF TO CL_DD_DOCUMENT.

  CALL METHOD PR_DOCUMENT->ADD_TEXT(
      TEXT         '库存周转率报表'
*     SAP_FONTSIZE = '1'
      SAP_EMPHASIS CL_DD_DOCUMENT=>HEADING ).

  CALL METHOD PR_DOCUMENT->NEW_LINE( ).

  CALL METHOD PR_DOCUMENT->ADD_TEXT(
      TEXT         '查询时间:&& SY-DATUM(4&& '&& SY-DATUM+4(2&& '&& SY-DATUM+6(2&& ''
      SAP_EMPHASIS CL_DD_DOCUMENT=>HEADING ).

  CALL METHOD PR_DOCUMENT->NEW_LINE( ).

  CALL METHOD PR_DOCUMENT->ADD_TEXT(
      TEXT         '查询期间:&& P_BDATJ && '&& P_POPER && ''
      SAP_EMPHASIS CL_DD_DOCUMENT=>HEADING ).
*  CALL METHOD PR_DOCUMENT->ADD_GAP( WIDTH = 2 ).

ENDFORM.                    "f_html_top_of_page

INITIALIZATION .
  PERFORM FRM_EXCLUDE_OPTION.

AT SELECTION-SCREEN OUTPUT.
  PERFORM SCREEN_OUTPUT.

AT SELECTION-SCREEN.
  PERFORM SCREEN_SETTING.

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

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值