库存---历史结存量计算方法

来源:互联网 发布:db数据库修改器汉化版 编辑:程序博客网 时间:2024/05/19 02:28

mard里记载的是当前库存的数量,但是期间并不一定是当月。比如你物料4月一整月都没有库存数量变化(没收没发),那么5月初你看mard里的条目期间数还是4月而非5月。

 

当某个期间发生货物移动的时候,系统在更新mard数据的之前(这个表是实时更新的),会检查此笔业务过账期间和mard里对应记录的期间是否一致,也就是看这是不是本期间第一笔移动。如果是,copymard里对应记录到mardh,然后把mard记录改成当期(也可能是先删后建),然后再作更新数量数据的操作。如果不是第一笔记录,也就是mard期间和mseg期间一致,则不作copy记录只更新mard数量。

 

有很多人在做库存进销存的时候,感觉期初库存和期末库存比较难搞定,感觉要去取货物移动的数据来获取期初库存和期末库存,其实不然,只要理解原理就可以快速取出期初库存和期末库存。

 

库存表:MARDH MARD MSKUH MSKU MSLBH MSLB MSKAH MSKA

 

下面以MARDH MARD为例,如果一个物料在20119月份做了一笔货物移动,则会自动在MARDH中更新20118月份的期末库存,假如在20119月份一直没有做货物移动,则不会更新MARDH8月份的期末库存

假如我想获得20117月份的库存,则需要先在MARH中查找7月份的库存,找不到找8月份的库存,找不到找9月份的库存,以此类推,最后都找不到,则用MARD中的库存

 

下面代码为获取8月份的期初库存和8月份的期末库存

PARAMETERS:

会计年度

  p_gjahr  LIKE bkpf-gjahr OBLIGATORY DEFAULT '2011',

期间

  p_monat  LIKE bkpf-monat OBLIGATORY DEFAULT '08'.

 

DATA:

  v_gjahr  LIKE bkpf-gjahr,    " 上月期间年度

  v_monat  LIKE 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.
原创粉丝点击