玩龙天子 发表于 2015-9-22 07:21:21

SAP 取月度期初库存和月度期末库存(历史库存)

  SAP 取月度期初库存和月度期末库存(历史库存)
  http://blog.iyunv.com/lbxp521/article/details/6729266
  
  有很多人在做库存进销存的时候,感觉期初库存和期末库存比较难搞定,感觉要去取货物移动的数据来获取期初库存和期末库存,其实不然,只要理解原理就可以快速取出期初库存和期末库存
  库存表:MARDH MARD MSKUH MSKU MSLBH MSLB MSKAH MSKA
  下面以MARDH MARD为例,如果一个物料在2011年9月份做了一笔货物移动,则会自动在MARDH中更新2011年8月份的期末库存,假如在2011年9月份一直没有做货物移动,则不会更新MARDH中8月份的期末库存
  
  假如我想获得2011年7月份的库存,则需要先在MARH中查找7月份的库存,找不到找8月份的库存,找不到找9月份的库存,以此类推,最后都找不到,则用MARD中的库存
  
  * 下面代码为获取8月份的期初库存和8月份的期末库存
  
  PARAMETERS:
* 会计年度
p_gjahrLIKE bkpf-gjahr OBLIGATORY DEFAULT '2011',
* 期间
p_monatLIKE bkpf-monat OBLIGATORY DEFAULT '08'.
  
  DATA:
v_gjahrLIKE bkpf-gjahr,    " 上月期间年度
v_monatLIKE bkpf-monat.   " 上月期间月份
  
  * 获取上月度年度和月份
IF p_monat = '01'.
    v_monat = '12'.
    v_gjahr = p_gjahr - 1.
ELSE.
    v_monat = p_monat - 1.
    v_gjahr = p_gjahr.
ENDIF.
  
  DATA: BEGIN OF typ_mardh,
      p_string(6) TYPE c.
          INCLUDE STRUCTURE mardh .
DATA: END OF typ_mardh.
DATA: i_mardh LIKE TABLE OF typ_mardh WITH HEADER LINE.   " 期末数据
DATA: n_mardh LIKE TABLE OF typ_mardh WITH HEADER LINE.   " 当前库存
DATA: m_mardh LIKE TABLE OF typ_mardh WITH HEADER LINE.   " 上月期初数据
  
  * 查找库存历史表
SELECT   *
  FROM mardh
    INTO CORRESPONDING FIELDS OF TABLE m_mardh
   WHERE ( lfgja > v_gjahr OR ( lfgja = v_gjahr AND lfmon >= v_monat ) ).
  LOOP AT m_mardh .
    CONCATENATE m_mardh-lfgja m_mardh-lfmon INTO m_mardh-p_string .
    MODIFY m_mardh .
    IF m_mardh-p_string >= p_estring .
      MOVE-CORRESPONDING m_mardh TO i_mardh.
      APPEND i_mardh .
    ENDIF.
ENDLOOP.
  
  SELECT   *
  FROM mard
    INTO CORRESPONDING FIELDS OF TABLE n_mardh .
  
  LOOP AT n_mardh .
    CONCATENATE n_mardh-lfgja n_mardh-lfmon INTO n_mardh-p_string .
    MODIFY n_mardh .
    MOVE-CORRESPONDING n_mardh TO m_mardh.
    APPEND m_mardh .
    MOVE-CORRESPONDING n_mardh TO i_mardh.
    APPEND i_mardh .
ENDLOOP.
  
  * 期初库存都在表M_MARDH
  SORT m_mardh BY matnr werks lgort lfgja lfmon .
DELETE ADJACENT DUPLICATES FROM m_mardh COMPARING matnr werks lgort.
  * 期末库存都在表I_MARDH
SORT i_mardh BY matnr werks lgort lfgja lfmon .
DELETE ADJACENT DUPLICATES FROM i_mardh COMPARING matnr werks lgort.
  
  下面在获取数据的时候,直接可以READ TABLE ........BINARY SEARCH .
页: [1]
查看完整版本: SAP 取月度期初库存和月度期末库存(历史库存)