B01 正常库存 8 8
B02 订单库存 8 8
E01 查询条件 8 8
E04 会计期间 8 8

P_DD 订单库存
P_JS 重新运算
P_LGORT 库存地点
P_MATKL 物料组
P_MATNR 物料
P_MONTH 过帐期间
P_MTART 物料类型
P_WERKS 工厂
P_YEAR ?...
P_ZC 正常库存

*&---------------------------------------------------------------------*
*& Report  YMMR0108
*&
*&---------------------------------------------------------------------*
*&
*&
*&---------------------------------------------------------------------*

REPORT  ymmr0108 MESSAGE-ID 1000.
INCLUDE y_alv_func.
INCLUDE zabap_public.

TABLES:mara,marc,mard,mkpf,mseg,mbew,s032,s031,mardh,mska.

DATA : it_show LIKE TABLE OF yios WITH HEADER LINE.
*TYPES:BEGIN OF t_mseg,
* matnr LIKE mseg-matnr,
* lgort LIKE mseg-lgort,
* shkzg LIKE mseg-shkzg,
* menge LIKE mseg-menge,
* maxbudat LIKE mkpf-budat,
*  minbudat LIKE mkpf-budat,
*END OF t_mseg.
DATA:it_s032 TYPE HASHED TABLE OF s032 WITH UNIQUE KEY mandt
ssour
vrsio
werks
lgort
matnr.
DATA:wa_s032 TYPE s031.
**最近24月用量
DATA:dat24 LIKE sy-datum.
*DATA: it_mseg TYPE  HASHED TABLE OF t_mseg  WITH UNIQUE KEY   matnr lgort .
*DATA: wa_mseg TYPE t_mseg.
DATA:it_s031 TYPE HASHED TABLE OF s031 WITH UNIQUE KEY matnr  .
DATA:wa_s031 TYPE s031.
**最近库存结余期间到本月的业务量总和
DATA:it_s031b TYPE HASHED TABLE OF s031 WITH UNIQUE KEY matnr lgort.
DATA:wa_s031b TYPE s031.
**物料所有期间的收发量
DATA:it_s031c TYPE HASHED TABLE OF s031 WITH UNIQUE KEY matnr lgort.
**上月结余库存
DATA:it_mardh TYPE HASHED TABLE OF mardh WITH UNIQUE KEY matnr lgort.
DATA:wa_mardh TYPE mardh.
**订单库存
DATA:BEGIN OF it_mska OCCURS 0.
        INCLUDE STRUCTURE  yios .
DATA:
kalab LIKE  mska-kalab,"非限制使用的估价的库存
kains LIKE  mska-kains,"质量检验中的库存
kaspe LIKE  mska-kaspe."冻结的库存
DATA:END OF it_mska.
**本月订单库存
DATA:it_mska1 TYPE HASHED TABLE OF mska WITH UNIQUE KEY matnr lgort.
**本月前所有库存
DATA:it_mska2 TYPE HASHED TABLE OF mska WITH UNIQUE KEY matnr lgort.
DATA:wa_mska TYPE   mska  .
**物料评估历史
DATA:wa_mbew TYPE mbew.
DATA: v_waers   LIKE t001-waers,
      v_fr_date TYPE d,     "查询期间第一天
      v_to_date TYPE d,     "查询期间月底日
      v_edate   TYPE d.     "上月最后一天,用于取上月期初
DATA: e_buper LIKE  t009b-poper,                            "24个期间前月
e_gjahr LIKE  t009b-bdatj.                                  "24个期间前度
DATA: p_buper LIKE  t009b-poper," 上期间月
p_gjahr LIKE  t009b-bdatj. " 上期间年度
DATA:datnow LIKE sy-datum."当前日期
**最后收发时间
*DATA: it_mseg1 TYPE  HASHED TABLE OF t_mseg  WITH UNIQUE KEY   matnr lgort shkzg.
*it_mska
**当前订单评估

SELECTION-SCREEN BEGIN OF BLOCK erblock WITH FRAME TITLE text-e01.
SELECTION-SCREEN BEGIN OF LINE.
SELECTION-SCREEN COMMENT 1(31) text-e04 FOR FIELD p_year.
PARAMETERS: p_year LIKE t009b-bdatj OBLIGATORY DEFAULT sy-datum(4).
PARAMETERS: p_month LIKE bkpf-monat OBLIGATORY DEFAULT sy-datum+4(2).
SELECTION-SCREEN END   OF LINE.
PARAMETERS: p_werks LIKE s032-werks DEFAULT 'LN01' OBLIGATORY .
SELECT-OPTIONS:p_lgort FOR  s032-lgort.
SELECT-OPTIONS:p_mtart FOR mara-mtart.
SELECT-OPTIONS:p_matkl FOR mara-matkl.
SELECT-OPTIONS:p_matnr FOR mara-matnr.

SELECTION-SCREEN BEGIN OF LINE.

*正常库存
PARAMETERS:p_zc TYPE c RADIOBUTTON GROUP g1  .
SELECTION-SCREEN COMMENT 3(15) text-b01 FOR FIELD p_zc .
SELECTION-SCREEN POSITION 20.
*订单库存
PARAMETERS:p_dd TYPE c RADIOBUTTON GROUP g1     .
SELECTION-SCREEN COMMENT 23(15) text-b02 FOR FIELD p_dd.
SELECTION-SCREEN POSITION 40.
SELECTION-SCREEN END   OF LINE.
.
PARAMETERS: p_js TYPE c AS CHECKBOX.
SELECTION-SCREEN END   OF BLOCK erblock.

INITIALIZATION .
  p_zc = 'X'.

AT SELECTION-SCREEN .

*  IF p_month < 1 OR p_month > 12.
*    MESSAGE '月份错误' TYPE 'E'.
*    EXIT.
*  ENDIF.

AT SELECTION-SCREEN OUTPUT.

START-OF-SELECTION.
  PERFORM check_authority_value.
  IF p_zc = 'X'."正常库存
    CLEAR it_show[].
    IF p_js <> 'X'.
      SELECT * FROM yios INTO CORRESPONDING FIELDS OF TABLE it_show
        WHERE matnr IN p_matnr
      AND mtart IN p_mtart
      AND lgort IN p_lgort
      AND werks = p_werks
      AND bdatj = p_year
      AND bumon = p_month.
    ENDIF.
    IF it_show[] IS INITIAL.
      PERFORM get_data.
      PERFORM pro_data.
    ENDIF.
    PERFORM show_data.
  ELSE."订单库存
    my_exit '此功能尚未开发' 'I' .
*    PERFORM  get_dd_data.

ENDIF.
*

*&---------------------------------------------------------------------*
*&      Form  GET_DATA
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM get_data .
  DATA: fr_spmon LIKE s031-spmon.
  DATA: to_spmon LIKE s031-spmon.
  DATA:month LIKE p_month.
  month = e_buper+1(2).
  CONCATENATE e_gjahr e_buper INTO fr_spmon.
  CONCATENATE p_year p_month INTO to_spmon.
  SELECT
  marc~werks
  s032~lgort
  mara~matkl
  mara~mtart
  mara~matnr
  s032~basme
  s032~letztzug
  s032~letztabg
  s032~letztbew
  s032~letztver
  marc~loggr
  marc~lgfsb
  marc~lgpro
  mara~mstae
  mara~ersda
  makt~maktx
  mbew~vprsv
  mbew~verpr
  mbew~stprs
  mbew~peinh
  INTO CORRESPONDING FIELDS OF TABLE it_show
  FROM  s032
  INNER JOIN mara ON s032~matnr = mara~matnr  AND s032~mandt = mara~mandt
  INNER JOIN marc ON  s032~matnr = marc~matnr AND     s032~werks = marc~werks AND s032~mandt = marc~mandt
  INNER JOIN mbew ON  s032~matnr = mbew~matnr AND  s032~werks =  mbew~bwkey AND s032~mandt = mbew~mandt
  INNER JOIN makt ON mara~matnr = makt~matnr AND spras = 1  AND s032~mandt = makt~mandt
   WHERE mara~matnr IN p_matnr
  AND mara~mtart IN p_mtart
  AND mara~matkl IN p_matkl
  AND marc~werks = p_werks
  AND s032~lgort IN p_lgort
  AND mara~lvorm NE 'X'
  AND marc~lvorm NE 'X'
*  AND s032~lgort NE ''

.

IF it_show[] IS INITIAL .
    my_exit '没有找到物料信息' ''.
  ENDIF.

**查询所有物料的收发历史
  SELECT  matnr lgort
  SUM( mzubb ) AS mzubb"评估的库存收货数
  SUM( wzubb ) AS wzubb"估价的库存收货值
  SUM( magbb ) AS magbb"估价库存发货的数量
  SUM( wagbb ) AS wagbb"已发货的估价的库存值
  SUM( magkb ) AS magkb"已发出的寄售库存数量
  SUM( mgvbr ) AS mgvbr"全部使用数量
  SUM( wgvbr ) AS wgvbr"总使用值
  SUM( muvbr ) AS muvbr"未计划的用途数量
  SUM( wuvbr ) AS wuvbr"未计划的用途数值
  FROM  s031  INTO CORRESPONDING FIELDS OF TABLE   it_s031c
   WHERE matnr   IN p_matnr
  AND werks = p_werks
  AND lgort IN p_lgort
*  AND mandt = sy-mandt
*      AND spmon BETWEEN fr_spmon AND to_spmon
  AND spmon <= to_spmon
    GROUP BY matnr lgort.
*
******本月业务量
**
  SELECT matnr lgort
  mzubb"评估的库存收货数
  wzubb"估价的库存收货值
  magbb"估价库存发货的数量
  wagbb"已发货的估价的库存值
  magkb"已发出的寄售库存数量
  mgvbr"全部使用数量
  wgvbr"总使用值
  muvbr"未计划的用途数量
  wuvbr"未计划的用途数值
  FROM  s031  INTO CORRESPONDING FIELDS OF TABLE it_s031b
  WHERE matnr   IN p_matnr
  AND werks = p_werks
  AND lgort IN p_lgort
  AND spmon = to_spmon
  .

****最近24个月用量

SELECT matnr "lgort
  SUM( mzubb ) AS mzubb"评估的库存收货数
  SUM( wzubb ) AS wzubb"估价的库存收货值
  SUM( magbb ) AS magbb"估价库存发货的数量
  SUM( wagbb ) AS wagbb"已发货的估价的库存值
  SUM( magkb ) AS magkb"已发出的寄售库存数量
  SUM( mgvbr ) AS mgvbr"全部使用数量
  SUM( wgvbr ) AS wgvbr"总使用值
  SUM( muvbr ) AS muvbr"未计划的用途数量
  SUM( wuvbr ) AS wuvbr"未计划的用途数值

FROM  s031  INTO CORRESPONDING FIELDS OF TABLE it_s031
  WHERE matnr   IN p_matnr
  AND werks = p_werks
  AND lgort IN p_lgort
  AND spmon BETWEEN fr_spmon AND to_spmon
  GROUP BY matnr. "lgort.

CLEAR:it_mska1[],it_mska2[].
***总订单库存
*  SELECT
*   mska~lgort
*   mska~matnr
*   SUM(  kalab ) AS kalab "非限制使用的估价的库存
*   SUM(  kains ) AS kains "质量检验中的库存
*   SUM(  kaspe ) AS kaspe "冻结的库存
*   INTO CORRESPONDING FIELDS OF TABLE it_mska1
*   FROM  mska
*   WHERE mska~matnr IN p_matnr
*   AND  mska~werks = p_werks
*   AND  mska~lgort IN p_lgort
*
*   AND mska~lfgja <= p_year
*   AND mska~lfmon <= p_month
*    GROUP BY lgort matnr
*   .
**本月订单库存
*  SELECT
*   mska~lgort
*   mska~matnr
*   mska~kalab"非限制使用的估价的库存
*   mska~kains"质量检验中的库存
*   mska~kaspe"冻结的库存
*   INTO CORRESPONDING FIELDS OF TABLE it_mska2
*   FROM  mska
*   WHERE mska~matnr IN p_matnr
*   AND  mska~werks = p_werks
*   AND  mska~lgort IN p_lgort
*   AND mska~lfgja = p_year
*   AND mska~lfmon = p_month
  .
ENDFORM.                    " GET_DATA

*&---------------------------------------------------------------------*
*&      Form  PRO_DATA
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM pro_data .
  DATA:date1 TYPE d.
  DATA:itemp TYPE int4.
  LOOP AT it_show.
    it_show-bdatj =  p_year.
    it_show-bumon =  p_month.
    CLEAR: wa_s031,wa_s031b,itemp,wa_mardh,wa_mska .
*    DATA: fr_spmon LIKE s031-spmon.
*    DATA: to_spmon LIKE s031-spmon.
**    CONCATENATE wa_mardh-lfgja wa_mardh-lfmon INTO fr_spmon.
*    CONCATENATE p_year p_month INTO to_spmon.
***begin 查询期间库存
** 查询上月结余
*    READ TABLE it_mardh WITH TABLE KEY  matnr = it_show-matnr lgort = it_show-lgort  INTO wa_mardh.
*    IF sy-subrc <> 0."如果上月没有结余说明本月没有业务移动,库存=最近一次月结库存(冻结库存+非限制+质检库存)
*      SELECT * FROM mardh
*      UP TO 1 ROWS
*      INTO CORRESPONDING FIELDS OF wa_mardh
*      WHERE matnr  = it_show-matnr
*      AND werks = p_werks
*      AND lgort  = it_show-lgort
*      AND (
*        lfgja < p_gjahr OR ( lfgja = p_gjahr AND  lfmon < p_buper ) )
*      ORDER BY lfgja DESCENDING lfmon DESCENDING
*      .
*      ENDSELECT.
*      IF sy-subrc <> 0.
*        DELETE it_show.
*        CONTINUE.
*      ENDIF.
*      it_show-mbwbest =  wa_mardh-labst + wa_mardh-insme + wa_mardh-speme.
*      SELECT
*      SUM( mzubb ) AS mzubb"评估的库存收货数
*      SUM( wzubb ) AS wzubb"估价的库存收货值
*      SUM( magbb ) AS magbb"估价库存发货的数量
*      SUM( wagbb ) AS wagbb"已发货的估价的库存值
*      SUM( magkb ) AS magkb"已发出的寄售库存数量
*      SUM( mgvbr ) AS mgvbr"全部使用数量
*      SUM( wgvbr ) AS wgvbr"总使用值
*      SUM( muvbr ) AS muvbr"未计划的用途数量
*      SUM( wuvbr ) AS wuvbr"未计划的用途数值
*      FROM  s031  INTO CORRESPONDING FIELDS OF   wa_s031
*      WHERE matnr  = it_show-matnr
*      AND werks = p_werks
*      AND lgort  = it_show-lgort
**      AND spmon BETWEEN fr_spmon AND to_spmon
*      AND spmon <= to_spmon
*       .
    IF it_show-lgort IS INITIAL.
*      SELECT SUM( lbkum )
*       SUM( salk3 ) FROM ebew
*      INTO (it_show-LBKUM,it_show-SALK3)
*      WHERE matnr = it_show-matnr .
*      IF sy-subrc <> 0 .
*        DELETE it_show.
*        CONTINUE.
*      ENDIF.
*
*      it_show-mbwbest = it_show-LBKUM.
*      it_show-wbwbest = it_show-SALK3.

EXEC SQL .
        select SUM( case when SHKZG = 'S' THEN MENGE ELSE -1*MENGE END ) as LBKUM
       ,SUM( case when SHKZG = 'S' THEN DMBTR ELSE -1*DMBTR END )  as salk3
        from mseg
        into :it_show-LBKUM,:it_show-salk3
        WHERE matnr = :it_show-matnr
        and exists (
        select mblnr from mkpf
        where BUDAT <= :v_to_date
        and mkpf.mblnr = mseg.mblnr
        and mkpf.MJAHR = mseg.MJAHR
        and mkpf.mandt = mseg.mandt
        )
        and SOBKZ = 'E'
        and mseg.mandt  = :sy-mandt
      ENDEXEC.
*      IF sy-subrc <> 0 .
*        DELETE it_show.
*        CONTINUE.
*      ENDIF.
*      it_show-mbwbest = it_show-lbkum.
*      it_show-salk3 =   it_show-lbkum * it_show-verpr / it_show-peinh.

*      it_show-wbwbest =  it_show-salk3 .
    ENDIF.

*     READ TABLE   it_mska1 WITH TABLE KEY matnr = it_show-matnr lgort = it_show-lgort  INTO wa_mska.

READ TABLE  it_s031c WITH TABLE KEY matnr = it_show-matnr lgort = it_show-lgort  INTO wa_s031.
    IF sy-subrc = 0 .
      it_show-mbwbest =   wa_s031-mzubb - wa_s031-magbb  ."+ wa_mska-kalab + wa_mska-kains + wa_mska-kaspe..
      it_show-wbwbest =   wa_s031-wzubb - wa_s031-wagbb .
    ENDIF.
    CLEAR  wa_mska.
*    READ TABLE   it_mska2 WITH TABLE KEY matnr = it_show-matnr lgort = it_show-lgort  INTO wa_mska.
*    READ TABLE  it_s031b WITH TABLE KEY matnr = it_show-matnr lgort = it_show-lgort  INTO wa_s031b.
*    IF sy-subrc = 0 .
*      it_show-sqkc  =   wa_s031b-mzubb + wa_s031b-magbb .
*    ENDIF.
*    IF  it_show-mbwbest IS INITIAL AND  it_show-lbkum IS INITIAL.

IF it_show-lgort IS INITIAL.
      IF it_show-lgfsb IS NOT INITIAL.
        it_show-lgort = it_show-lgfsb.
      ELSE.
        it_show-lgort = it_show-lgpro.

ENDIF.
*      DELETE it_show.
*      CONTINUE.
    ENDIF.
*    ELSE."如果上月有结余库存,库存 = 上月结余(冻结库存+非限制+质检库存) + 本月收货总数 - 本月发货总数。
**上期库存 = 当前库存 - 减去本月收 + 减去本月发
*    CLEAR:wa_s031b.
*    READ TABLE  it_s031b WITH TABLE KEY matnr = it_show-matnr lgort = it_show-lgort  INTO wa_s031b.
*    it_show-mbwbest =  wa_mardh-labst + wa_mardh-insme + wa_mardh-speme + wa_s031b-mzubb - wa_s031b-magbb.
*    it_show-sqkc = wa_mardh-labst + wa_mardh-insme + wa_mardh-speme.
    IF  it_show-mbwbest = 0 AND  it_show-lbkum  = 0  AND  it_show-wbwbest = 0.
      DELETE it_show.
      CONTINUE.
    ENDIF.
*    ENDIF.
*** 期间库存价值
*    SELECT SINGLE vprsv
*      verpr
*      stprs
*      peinh
*      bklas FROM mbew
*    INTO CORRESPONDING FIELDS OF wa_mbew
*    WHERE matnr  = it_show-matnr
*      AND bwkey = p_werks
*      AND lfmon = wa_mardh-lfmon
*      AND lfgja = wa_mardh-lfgja
    .
*    IF sy-subrc <> 0 .
*      DELETE it_show.
*      CONTINUE.
*    ENDIF.

*    IF it_show-vprsv = 'S'.
*      it_show-wbwbest = it_show-wbwbest +  it_show-mbwbest * it_show-stprs / it_show-peinh .
**      it_show-sqkcje =  it_show-sqkcje  + it_show-sqkc * it_show-stprs / it_show-peinh.
*
*    ELSE.
*      it_show-wbwbest =  it_show-wbwbest + it_show-mbwbest * it_show-verpr / it_show-peinh .
**      it_show-sqkcje =  it_show-sqkcje +  it_show-sqkc * it_show-verpr / it_show-peinh.
**
*    ENDIF.

*    READ TABLE  it_s031b WITH TABLE KEY matnr = it_show-matnr lgort = it_show-lgort  INTO wa_s031.

***end 查询期间库存
*** 最近24个月用量
    CLEAR: wa_s031,itemp .
    READ TABLE  it_s031 WITH TABLE KEY matnr = it_show-matnr  INTO wa_s031. "lgort = it_show-lgort
*   SUM( mgvbr ) AS mgvbr"全部使用数量
*   SUM( wgvbr ) AS wgvbr"总使用值
    it_show-l24u = wa_s031-mgvbr .
    it_show-l24v = wa_s031-wgvbr.
**新物料
    itemp = datnow - it_show-ersda.
    IF itemp < 365 .
      it_show-xwl = 'X'.
    ENDIF.
** 收货呆滞天数
    IF  it_show-letztzug IS INITIAL OR  it_show-letztzug = '99991231'.
      it_show-shdzts = 366.
    ELSE.
      it_show-shdzts = datnow  - it_show-letztzug.
    ENDIF.
**发货呆滞天数
    IF  it_show-letztabg IS INITIAL OR  it_show-letztabg = '99991231'.
      IF it_show-xwl = 'X'.

it_show-fhdzts = 1.
      ELSE.
        IF  it_show-shdzts > 365.
          it_show-fhdzts = 365.
        ELSE.
          it_show-fhdzts = it_show-shdzts.
        ENDIF.
      ENDIF.
    ELSE.
      it_show-fhdzts = datnow  - it_show-letztabg.
    ENDIF.
**呆滞天数取收货和发货呆滞天数中小的减一天
    IF it_show-shdzts >  it_show-fhdzts .
      it_show-dzts =     it_show-fhdzts - 1.
    ELSE.
      it_show-dzts =     it_show-shdzts - 1.
    ENDIF.
**obsolete
    PERFORM sub_obsolete.
**inactive
    PERFORM sub_inactive.
**surplus
    PERFORM sub_surplus.
    SHIFT it_show-matnr LEFT DELETING LEADING '0'.
    MODIFY it_show.
  ENDLOOP.
ENDFORM.                    " PRO_DATA
*&---------------------------------------------------------------------*
*&      Form  SUB_OBSOLETE

*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM sub_obsolete .

DATA:mbwbest LIKE it_show-mbwbest,
  wbwbest LIKE it_show-wbwbest.
  mbwbest = it_show-mbwbest + it_show-lbkum.
  wbwbest = it_show-wbwbest + it_show-salk3  .
  IF it_show-mstae IS NOT INITIAL"停用标志
    OR  it_show-maktx CA '停用'"描述中有停用
    OR it_show-lgort = '1002' "电工材料坏料仓
    OR it_show-lgort = '1010' "电工OEM不良品专
    OR it_show-lgort = '1102' "照明材料坏料仓
    OR it_show-lgort = '1203' "变卖废品专用仓
    .
*oqty TYPE p LENGTH 12 DECIMALS 3   ,"  Obsolete Qty
*oamt TYPE p LENGTH 12 DECIMALS 3   ,"   Obsolete Amount
    it_show-oqty =  mbwbest.
    it_show-oamt =  wbwbest.
  ENDIF.
ENDFORM.                    " SUB_OBSOLETE
*&---------------------------------------------------------------------*
*&      Form  sub_inactive
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
FORM sub_inactive.
*iqty TYPE p LENGTH 12 DECIMALS 3   ,"  Inactive Qty
*iamt TYPE p LENGTH 12 DECIMALS 3   ,"  Inactive Amount
  DATA:mbwbest LIKE it_show-mbwbest,
  wbwbest LIKE it_show-wbwbest.
  mbwbest = it_show-mbwbest + it_show-lbkum.
  wbwbest = it_show-wbwbest + it_show-salk3  .
  IF  it_show-xwl IS NOT INITIAL
  AND it_show-oqty = 0
  AND it_show-oamt = 0
  AND
  ( it_show-dzts > 365
  OR it_show-lgort = '1003'"电工物料呆滞仓
  OR it_show-lgort = '1014'"电工成品呆滞仓
  OR it_show-lgort = '1103'"照明物料呆滞仓
  OR it_show-lgort = '1114'"照明成品呆滞仓
  OR it_show-lgort = '1205'"OEM成品呆滞仓
  )
  .
    it_show-iqty =  mbwbest.
    it_show-iamt =  wbwbest.
  ENDIF.
ENDFORM.                    "sub_inactive
*&---------------------------------------------------------------------*
*&      Form  SUB_SURPLUS
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM sub_surplus .
  DATA:mbwbest LIKE it_show-mbwbest,
  wbwbest LIKE it_show-wbwbest.
  mbwbest = it_show-mbwbest + it_show-lbkum.
  wbwbest = it_show-wbwbest + it_show-salk3  .
* New Material is only calculate quatity.
  IF  it_show-xwl = 'X'.
*splusqty TYPE p LENGTH 12 DECIMALS 3   ,"  surplus qty
*splusrsv TYPE p LENGTH 12 DECIMALS 3   ,"   surplus reserve
    it_show-splusqty =   mbwbest.
  ENDIF.
* store-quantity - obsolate - inactive > 24mUes
  IF it_show-oqty = 0 AND it_show-iqty = 0 AND  mbwbest > it_show-l24u.
    it_show-splusqty  =  mbwbest.
  ENDIF.

IF it_show-oamt = 0 AND it_show-iamt = 0 AND  wbwbest > it_show-l24v.
    it_show-splusrsv  =  wbwbest.
  ENDIF.

ENDFORM.                    " SUB_SURPLUS
*&---------------------------------------------------------------------*
*&      Form  SHOW_DATA
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM show_data .

DATA:v_title TYPE string.

v_title = LINES( it_show ).
  CONCATENATE '数据条数:' v_title INTO v_title.
  alv_set_status.
*  alv_set_title  v_title.
  alv_clear_data.
  alv_add_data 'IT_SHOW'  '' ' ' '' 'X' 'CHAR' 'WERKS' '工厂' ."工厂
  alv_add_data 'IT_SHOW'  '' ' ' '' 'X' 'CHAR' 'LGORT' '实际仓位' ."仓位
  alv_add_data 'IT_SHOW'  '' ' ' '' 'X' 'CHAR' 'MTART' '物料类型' ."物料类型
  alv_add_data 'IT_SHOW'  '' ' ' '' 'X' 'CHAR' 'MATNR' '物料' ."物料
  alv_add_data 'IT_SHOW'  '' ' ' '' 'X' 'CHAR' 'MAKTX' '物料描述' ."物料描述
  alv_add_data 'IT_SHOW'  '' ' ' '' 'X' 'CHAR' 'BASME' '单位' ."单位
*  alv_add_data 'IT_SHOW'  'X' ' ' '' 'X' 'CHAR' 'SQKC' '上前库存数量' ."
*  alv_add_data 'IT_SHOW'  'X' ' ' '' 'X' 'CHAR' 'SQKCJE' '上前库存金额' .
  alv_add_data 'IT_SHOW'  'X' ' ' '' 'X' 'CHAR' 'MBWBEST' '当前库存数量' ."
  alv_add_data 'IT_SHOW'  'X' ' ' '' 'X' 'CHAR' 'WBWBEST' '当前库存金额' .
*
  alv_add_data 'IT_SHOW'  'X' ' ' '' 'X' 'CHAR' 'LBKUM' '订单库存' ."
  alv_add_data 'IT_SHOW'  'X' ' ' '' 'X' 'CHAR' 'SALK3' '订单库存金额' .
  alv_add_data 'IT_SHOW'  '' ' ' '' 'X' 'CHAR'  'LETZTBEW' '最近移动'  ."最后一次收货
  alv_add_data 'IT_SHOW'  '' ' ' '' 'X' 'CHAR' 'LETZTZUG' '最后一次收货' ."最后一次收货
  alv_add_data 'IT_SHOW'  '' ' ' '' 'X' 'CHAR' 'LETZTABG' '最后一次发货' ."最后一次发货
  alv_add_data 'IT_SHOW'  '' ' ' '' 'X' 'CHAR' 'LETZTVER' '最后一次消耗' ."最后一次消耗
  alv_add_data 'IT_SHOW'  '' ' ' '' 'X' 'CHAR' 'DZTS' '呆滞天数' ."呆滞天数
  alv_add_data 'IT_SHOW'  '' ' ' '' 'X' 'CHAR' 'XWL' 'New 物料' ."New 物料
  alv_add_data 'IT_SHOW'  '' ' ' '' 'X' 'CHAR' 'SHDZTS' 'Aging Days(收)' ."Aging Days(收)
  alv_add_data 'IT_SHOW'  '' ' ' '' 'X' 'CHAR' 'FHDZTS' 'Aging Days(发)' ."Aging Days(发)
  alv_add_data 'IT_SHOW'  '' ' ' '' 'X' 'CHAR' 'OQTY' 'Obsolete Qty' ."Obsolete Qty
  alv_add_data 'IT_SHOW'  '' ' ' '' 'X' 'CHAR' 'OAMT' 'Obsolete Amount' ."Obsolete Amount
  alv_add_data 'IT_SHOW'  '' ' ' '' 'X' 'CHAR' 'IQTY' 'Inactive Qty' ."Inactive Qty
  alv_add_data 'IT_SHOW'  '' ' ' '' 'X' 'CHAR' 'IAMT' 'Inactive Amount' ."Inactive Amount
  alv_add_data 'IT_SHOW'  'X' ' ' '' 'X' 'CHAR' 'L24U' '最近24个月用量' ."Last 24m Usage
  alv_add_data 'IT_SHOW'  'X' ' ' '' 'X' 'CHAR' 'L24V' '最近24个月用值' ."Last 24m Usage
  alv_add_data 'IT_SHOW'  '' ' ' '' 'X' 'CHAR' 'AFTIOQTY' 'Qty After IO' ."Qty After IO
  alv_add_data 'IT_SHOW'  '' ' ' '' 'X' 'CHAR' 'SPLUSQTY' 'surplus qty' ."surplus qty
  alv_add_data 'IT_SHOW'  '' ' ' '' 'X' 'CHAR' 'SPLUSRSV' 'surplus reserve' ."surplus reserve
  alv_add_data 'IT_SHOW'  '' ' ' '' 'X' 'CHAR' 'LSTPRC' 'Latest Price' ."Latest Price
  alv_add_data 'IT_SHOW'  '' ' ' '' 'X' 'CHAR' 'PRCCST' 'Price vs. Cost' ."Price vs. Cost
  alv_add_data 'IT_SHOW'  '' ' ' '' 'X' 'CHAR' 'LCM' 'LCM' ."LCM
  alv_add_data 'IT_SHOW'  '' ' ' '' 'X' 'CHAR' 'ZP' '展品(Y)' ."展品(Y)
  alv_add_data 'IT_SHOW'  '' ' ' '' 'X' 'CHAR' 'RMK(200)' 'Remark' ."Remark
*  alv_add_data 'IT_SHOW'  '' ' ' '' 'X' 'CHAR' 'VPRSV' '价格控制' ."
*  alv_add_data 'IT_SHOW'  '' ' ' '' 'X' 'CHAR' 'VERPR' '移动平均价' ."
*  alv_add_data 'IT_SHOW'  '' ' ' '' 'X' 'CHAR' 'STPRS' '标准价' .
*  alv_add_data 'IT_SHOW'  '' ' ' '' 'X' 'CHAR' 'PEINH' '价格单位' ."
*  alv_add_data 'IT_SHOW'  '' ' ' '' 'X' 'CHAR' 'LGFSB' '采购仓位' ."
*  alv_add_data 'IT_SHOW'  '' ' ' '' 'X' 'CHAR' 'LGPRO' '自制仓位' ."
*  alv_add_data 'IT_SHOW'  '' ' ' '' 'X' 'CHAR' 'LVORM' '删除标记' ."删除
*  alv_add_data 'IT_SHOW'  '' ' ' '' 'X' 'CHAR' 'MSTAE' '停用状态' ."
  alv_show_data it_show.
ENDFORM.                    " SHOW_DATA

*&---------------------------------------------------------------------*
*&      Form  user_command
*&---------------------------------------------------------------------*
*       text  处理双击事件
*----------------------------------------------------------------------*
*      -->R_UCOMM      text
*      -->RS_SELFIELD  text
*----------------------------------------------------------------------*
FORM user_command  USING r_ucomm LIKE sy-ucomm
                           rs_selfield TYPE slis_selfield.
*

CASE r_ucomm.
    WHEN '&IC1'.
*      CASE rs_selfield-sel_tab_field.
*        WHEN  'ITAB-VBELN'.
*          SET PARAMETER ID 'AUN' FIELD rs_selfield-value.
*          CALL TRANSACTION 'VA03' AND SKIP FIRST SCREEN.
*        WHEN  'ITAB2-VBELN'.
*          SET PARAMETER ID 'AUN' FIELD rs_selfield-value.
*          CALL TRANSACTION 'VA03' AND SKIP FIRST SCREEN.
*      ENDCASE.
    WHEN '&SAV'.
      IF p_dd = 'X'.
        my_exit '订单库存查询时不能保存!' 'I'.
      ENDIF.
      DATA count TYPE i.
      SELECT COUNT( * ) FROM yios INTO count
      WHERE   bdatj = p_year
        AND bumon = p_month.
      IF  count > 0 .
        CALL FUNCTION 'POPUP_TO_CONFIRM_STEP'
          EXPORTING
            defaultoption  = 'Y'
            textline1      = '此期间存在数据,保存将覆盖,点击"是"确认保存,点击"否" 取消保存'
            textline2      = ''
            titel          = '保存提示'
            start_column   = 25
            start_row      = 6
            cancel_display = ''
          IMPORTING
            answer         = ucomm.
        IF ucomm NE 'N'.
          PERFORM save_data.
        ELSE.
          MESSAGE '操作被取消' TYPE 'S'.
        ENDIF.
      ELSE.
        PERFORM save_data.
      ENDIF.

WHEN OTHERS.
  ENDCASE.

ENDFORM.                    "user_command

*
FORM set_pf_status USING rt_extab TYPE slis_t_extab.
  SET PF-STATUS 'ZSTANDARD' .
ENDFORM.                    "set_pf_status
*&---------------------------------------------------------------------*
*&      Form  SAVE_DATA
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM save_data .

MODIFY yios FROM TABLE   it_show.
  msg = LINES( it_show ).
  CONCATENATE '成功保存:' msg '条数据!' INTO msg.
  MESSAGE msg TYPE 'S'.
ENDFORM.                    " SAVE_DATA

**************************< 以下是过程 >********************************

*&---------------------------------------------------------------------*
*&      Form  CHECK_AUTHORITY_VALUE
*&---------------------------------------------------------------------*
FORM check_authority_value .
  DATA: lv_monat(3) TYPE n, v_periv LIKE t001-periv.

AUTHORITY-CHECK OBJECT 'YREPORT'
    ID 'BUKRS' FIELD 'HL01'
    ID 'WERKS' FIELD 'LN01'.
  IF sy-subrc NE 0.
    MESSAGE e005(ymess) WITH 'No Authorization!'.
  ENDIF.

*  CONCATENATE p_gjahr p_monat '01' INTO v_fr_date.       "得到本期间第一天   ZHOUXU V1.0 DEL
  lv_monat = p_month.
  SELECT SINGLE waers periv FROM t001
         INTO (v_waers,v_periv)
         WHERE bukrs = 'HL01'.
*------------------ 得到期间第一天--------------------
  CALL FUNCTION 'FIRST_DAY_IN_PERIOD_GET'                 "取本月期间第一天
    EXPORTING
      i_gjahr = p_year                                     "会计年度
      i_periv = v_periv                                     "会计年度变式K4
      i_poper = lv_monat                                    "期间(3位N)''
    IMPORTING
      e_date  = v_fr_date.

*----------------begin 得到24个月的前的会计年度和月份-----------
  v_edate = v_fr_date - 1.
  DATA:dat TYPE d,     "上个月的第一天,临时变量
  i TYPE i.

dat = v_edate.
  CALL FUNCTION 'DATE_TO_PERIOD_CONVERT'                 "得到上期间会计年度和月份
     EXPORTING
         i_date  = dat
         i_periv = v_periv
     IMPORTING
         e_buper = p_buper
         e_gjahr = p_gjahr.

WHILE i < 24.
    i  = i + 1 .

CALL FUNCTION 'DATE_TO_PERIOD_CONVERT'                 "得到上期间会计年度和月份
     EXPORTING
         i_date  = dat
         i_periv = v_periv
     IMPORTING
         e_buper = e_buper
         e_gjahr = e_gjahr.

CALL FUNCTION 'FIRST_DAY_IN_PERIOD_GET'                 "取本月期间第一天
    EXPORTING
      i_gjahr =  e_gjahr                                     "会计年度
      i_periv = v_periv                                     "会计年度变式K4
      i_poper = e_buper                                     "期间(3位N)''
    IMPORTING
      e_date  = dat.
    dat  = dat - 1 .
  ENDWHILE.
*----------------END   得到24个月的前的会计年度和月份-----------
  CALL FUNCTION 'LAST_DAY_IN_PERIOD_GET'                 "取本月最后一天
    EXPORTING
      i_gjahr = p_year                                   "会计年度
      i_periv = v_periv                                     "会计年度变式K4
      i_poper = lv_monat                                    "期间(3位N)''
    IMPORTING
      e_date  = v_to_date.
  IF v_edate = 0.
    MESSAGE '[会计年度] 或 [会计期间] 输入错误, 请检查输入!' TYPE  'S' .
    STOP.
  ENDIF.
  "得到上月末
  IF v_edate(6) < '200808'.
    MESSAGE '[会计年度] 或 [会计期间] 不能早于上线时间:2008年9月, 请检查输入!' TYPE  'S' .
    STOP.
  ENDIF.
  IF v_to_date > sy-datum.
    datnow =  sy-datum.
  ELSE.
    datnow =  v_to_date .
  ENDIF.
  CALL FUNCTION 'SAPGUI_PROGRESS_INDICATOR'
    EXPORTING
      text = '程序正在运行中,请稍候...'.

ENDFORM.                    " CHECK_AUTHORITY_VALUE
*&---------------------------------------------------------------------*
*&      Form  APPEND_MSEG
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
*FORM append_mseg .
*  INSERT wa_mseg INTO TABLE it_mseg   .
*ENDFORM.                    " APPEND_MSEG

网转 mm IOS 报表相关推荐

  1. 「SAP技术」SAP MM MB5M报表不显示特殊库存数据

    SAP MM MB5M报表不显示特殊库存数据 比如如下物料号F000005451有特殊库存O库存, 该物料批次的有效期, MB5M,输入该物料号执行查询, 查询结果里,不显示O库存,只显示Normal ...

  2. 「SAP技术」SAP MM ME2N报表能按‘order acknowledgement‘查询采购订单

    「SAP技术」SAP MM ME2N报表能按'order acknowledgement'查询采购订单 执行事务代码ME2N, 点击'Dynamic Selections'按钮 ,进入如下界面, 找到 ...

  3. SAP MM MB5L 报表里的差异金额如何调整?

    SAP MM MB5L 报表里的差异金额如何调整? 5月3号,收到财务顾问提出的一个问题,说是MB5L报表里有差异. 如下查询条件, 报表结果里显示有差异, 经查,导致这个差异的原因之一是,一些物料批 ...

  4. SAP MM ME1M报表结果真的不科学?

    SAP MM ME1M报表结果真的不科学? 深入研究后发现,不是SAP ME1M报表不科学,而是笔者对于SAP系统的认识有盲点. 经查,ME1M报表是可以显示PIR里维护的最新价格的.如下方式: 勾选 ...

  5. SAP MM ME1M报表结果不科学?

    SAP MM ME1M报表结果不科学? 做过SAP MM顾问的都知道,报表ME1M可以查询物料的info record列表,即是说可以以列表的形式批量显示多个物料的采购价格主数据. 但是这个报表有个不 ...

  6. SAP MM ME1M 报表的Layout之调整

    SAP MM ME1M 报表的Layout之调整 之所周知,SAP的很多报表都可以是ALV的格式输出,这个格式对于业务而言,界面友好,方便业务人员按照自己的需求去调整报表输出结果,也方便业务人员将输出 ...

  7. SAP MM 采购报表中Delivery Date的显示

    SAP MM 采购报表中Delivery Date的显示 经反复研究与测试,得知ME2L/ME2N/ME2M等报表是无法很友好的显示Delivery Date. 以ME2L为例, Scope of l ...

  8. 网易云音乐ios旧版本安装包_网易云音乐产品分析报告

    本文将从产品概述.市场现状分析.用户分析.产品分析.功能体验和需求优化.总结五个维度,对网易云音乐(ios v5.8.2)进行分析 产品概述 体验环境 体验版本:V5.8.2 体验设备:iphone ...

  9. 网易云音乐 ios android 通用,网易云游戏苹果和安卓不通用吗 | 手游网游页游攻略大全...

    发布时间:2015-10-29 虚荣国服账号IOS和安卓是通用的吗?IOS和安卓数据是互通的吗?虚荣国服即将上架啦,小伙伴们是否非常的期待呢?那么国服之中IOS和安卓是数据互通的吗?下面就和多游小编一 ...

最新文章

  1. R语言pretty函数生成等间距的数值向量实战
  2. C++ 的五个普遍误解
  3. 【爬虫笔记】Scrapy爬虫技术文章网站
  4. SQL SERVER学习笔记(二)数据库管理
  5. 1947-2021 NBA总冠军次数排行榜
  6. 基于DenseNet的图像识别
  7. Formal Verification (三) abstraction strategy、reduce complexity for convergence
  8. android源代码目录详解
  9. mysql 索引 二_MySql索引(二)
  10. 【毕业设计】深度学习图像风格迁移算法研究与实现 - python 卷积神经网络
  11. java使用谷歌api翻译读写Excel
  12. c++按行读取txt
  13. Microsoft Edge 中的ie浏览器图标、右击新标签页打开功能的关闭方法
  14. C# socket通信 接收缓冲区大小设置,以及粘包问题的解决
  15. 【SICP练习】118 练习3.45【待完成】
  16. docker学习——杂记
  17. OverlayScrollbars插件监听滚动条的用法
  18. Linux下BMP图片添加水印
  19. 如何用计算机描绘函数的图象,信息技术应用 用计算机画函数图象课件配套优秀获奖教案...
  20. python3之路 基础

热门文章

  1. “乘客迟到5分钟,滴滴司机无责取消订单”是一个好策略吗?
  2. PMCAFF微课堂 | 奇酷运营总监类类教你如何利用金字塔模型提高用户忠诚度
  3. 【产品干货】衡量移动APP“价值”的9个重要的KPI指标
  4. 【pmcaff】重磅干货,必读的扁平化设计技巧
  5. Linux下MySQL 5.7 主从复制(主从同步)
  6. 设计模式---建造者模式(DesignPattern_Builder)
  7. Java实现二叉树的创建、递归/非递归遍历
  8. WanaCrypt0r勒索蠕虫完全分析报告
  9. mysql中如何把字符串转换成日期类型
  10. 20145234黄斐《信息安全系统设计基础》第二周学习总结