mm IOS 报表

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值