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

mard里记载的是当前库存的数量,但是期间并不一定是当月。比如你物料4月一整月都没有库存数量变化(没收没发),那么5月初你看mard里的条目期间数还是4月而非5月。
当某个期间发生货物移动的时候,系统在更新mard数据的之前(这个表是实时更新的),会检查此笔业务过账期间和mard里对应记录的期间是否一致,也就是看这是不是本期间第一笔移动。如果是,copy表mard里对应记录到mardh,然后把mard记录改成当期(也可能是先删后建),然后再作更新数量数据的操作。如果不是第一笔记录,也就是mard期间和mseg期间一致,则不作copy记录只更新mard数量。

这样处理貌似减少了冗余数据,不过给编程取历史库存增加了很大的工作量,个人觉得不算明智之举。
库存方面的表
mbew  --当前库存
mbewh  --历史库存

EBEWH  --销售订单库存的评估:历史

mard--查主库存
mardh--主库存历史记录
mslb--特殊库存O
mkol--特殊库存K/M
mska--特殊库存E
msku--特殊库存V/W
mcha
mchb

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

库存表: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_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.

下面在获取数据的时候,直接可以READ TABLE ........  BINARY SEARCH .

原文:https://blog.csdn.net/champaignwolf/article/details/85272463

原文地址:https://www.cnblogs.com/psapfans/p/10477803.html

时间: 2024-11-09 22:02:01

SAP 取月度期初库存和月度期末库存(历史库存)的相关文章

SAP WM 有无保存WM Level历史库存的Table?

SAP WM 有无保存WM Level历史库存的Table? 前日下班回家的路上,收到一个前客户内部顾问同行发过来的微信,问我在SAP系统里哪个表是用来存储WM Level历史库存的. 这个问题问住了我!我承诺去查查,然后给反馈. 标准的SAP系统对于历史库存的报表支持,仅仅是从IM 层面来考虑的(MB5B等). 笔者从事SAP这么多年,所参与的项目中,有关历史库存的报表需求,都是从IM层面来考虑方案的.比如笔者在之前的AKM项目,D 项目上做过库存查询方面的报表,以及上半年的SY项目上花了很多

MM52 历史库存及历史金额查询

"表:TABLES:MSEG,LFA1,MARA,EKPO,EKKO,MARD,EKBE,EKET.************************************************************************* Modification Log************************************************************************* Date Ver. Programmer Descriptions* -

仓储接口-批次库存-总库存

生产环境: 1.中央库存-总库存 https://cis-gateway.yunshanmeicai.com/api/inventorySumProvideService/com.sprucetec.cis.service.provide.InventorySumProvideService/queryInventorySumsBySkuIds {"cityId":15,"ownerId":1668,"size":100,"skuIds

我是如何一步步编码完成万仓网ERP系统的(十四)库存 3.库存日志

https://www.cnblogs.com/smh188/p/11533668.html(我是如何一步步编码完成万仓网ERP系统的(一)系统架构) https://www.cnblogs.com/smh188/p/11534451.html(我是如何一步步编码完成万仓网ERP系统的(二)前端框架) https://www.cnblogs.com/smh188/p/11535449.html(我是如何一步步编码完成万仓网ERP系统的(三)登录) https://www.cnblogs.com/

Odoo 库存管理-库存移动(Stock Move)新玩法

库存移动(Stock Move)新玩法 Odoo的库存移动不仅仅是存货在两个“存货地点”之间的移动的基本概念了,他们可以被“串联”在一起,可以用来生成或改变其对应的拣货单 (Picking).链式库存移动被广泛应用在各类库存操作中比如:多步收货或多步发货操作,多仓库间的配.补货操作等:而不仅限于之前OpenERP中 MTO供货类型产品的发货等待对应供应商收货这样的链式库存移动的应用场景了.我们会描述如何通过“推”,“拉”规则来创建这些链式库存移动. 库存移动与拣货单的关联 仓管人员手动进行的库存

MB5B MM历史库存详解

SAP MM 特殊库存之T库存初探

笔者所在的A项目里,销售业务广泛启用了POD功能.VL02N对交货单做了发货过账后物权并没有转移,而是将自有E库存转为一个叫做在途库存的特殊库存里.等到货物到了客户那里,客户确认实际收货数量后,才去系统上执行VLPOD事务,过账后,物权才会转移到客户方那里. 笔者之前所做过的项目里,SD模块的POD功能很少启用.所以笔者比较少去关注这个功能,也基本很少去关注因这个功能启用后导致库存管理方面的一些不同的地方.A项目给了笔者一个机会,去关注与研习所谓的T库存(在途库存). 如下交货单的凭证流, 物料

「SAP技术」为正常库存管理的物料做成本中心采购会是什么结果?

SAP 为正常库存管理的物料做成本中心采购会是什么结果? 这种采购可以正常进行,收货后SAP会更新采购订单里指定的费用类科目,而库存数量和库存价值都不会增加. 1, 如下物料号,是正常做库存管理的物料, 物料类型4002,在工厂SZCC下做完整的库存管理, 2, 该物料在SZCC下的库存, 3,创建了如下的采购订单,把'账户分配类别'字段值设置为K, 输入成本中心和一个费用类的总账科目, 4, MIGO对该采购订单执行收货, 在'何处'选项卡里,不出现存储地点字段,保存, 5, 看库存,库存数据

openerp 6.0.2库存业务

一.复式库存(Double-Entry Stock Management)和库存移动(Stock Move) OpenERP的库存管理采取了独特的复式库存(Double-Entry Stock Management).什么是复式库存?就是每一笔库存变动,同时记录库存减少和库存增加.例如卖了10辆自行车给客户,OpenERP会在你的库位(Location,这个概念后面再说)减去10辆自行车,再在客户库位(Customers Location)增加10辆自行车.因此,任何时候,OpenERP的所有库