SAP知识——历史库存的逻辑

SAP的库存报表一直都是很令人头疼的。

因为出入库业务非常复杂,导致库存逻辑也非常复杂,本文仅对库存逻辑中的历史库存部分,进行详细的解释,并提供一些实用高效的代码,希望能帮到大家。

示例


以普通库存的普通库存数量为例,直接上例子。

物料:A

工厂:0001

库存地点:0100

时间来到2017年5月,为物料A在库存地点初始化库存,假设数量为100。此时:

  • MARD表

对主键A-0001-0100,产生一条记录,其LFGJA、LFMON的值为2017、05,数量(这里均指普通库存数量)为100。

  • MARDH表

对主键A-0001-0100-2017-04,产生一条记录,其数量值均为0

(MARDH比MARD的主键字段多了年度和月份)

(注意:

这里说的2017年5月,指的是在2017年5月时,做当期的账务。

而如果在2018年2月打开2017年5月的账期,并且在2017年5月进行初始化库存记账的话,MARD表中的年月是201802,MARDH表中的数据则会有两条,多出一条A-0001-0100-2017-05的数据,数量值为100)

时间来到2017年6月,物料A在0001-0100出库数量10

  • MARD表

对主键A-0001-0100,年月变为201706,数量值变为90

  • MARDH表

新增一条A-0001-0100-2017-05的记录,数量值为100

(年月为上一个月)

时间来到2017年7月和8月,物料A无任何变化

  • MARD表

无变化

  • MARDH表

无变化

时间来到2017年9月,物料A在0001-0100出库数量20

  • MARD表

对主键A-0001-0100,年月变为201709,数量值变为70

  • MARDH表

新增一条A-0001-0100-2017-08的记录,数量值为90

(年月为上一个月)

之后,物料A的库存一直未变化,时间来到2018年2月6日

这时候打开2018年3月的账期,在2018年3月出库数量5。

  • MARD表

对主键A-0001-0100,年月为201803,数量值为65

  • MARDH表

存在四条记录

A-0001-0100-2017-04 0

A-0001-0100-2017-05 100

A-0001-0100-2017-08 90

A-0001-0100-2018-02 70(刚刚新增的)

而实际情况中,月底的库存情况如下:

201704 0

201705 100

201706 90(6月出库10)

201707 90

201708 90

201709 70(9月出库20)

201710 70

201711 70

201712 70

201801 70

201802 70

201803 65(3月出库5,且假设3月不再有出库)

结合到表MARD和MARDH,我们发现取201704、201705、201708、201802的月底库存,还都是很方便的,因为MARDH中有对应的主键。

但是如果要取2017年6月底的库存,该怎么办呢?

分析解释


根据实际库存的结果和MARDH表的数据,我们可以分析得知,如果要取物料在某月底的库存数据,要在表MARDH中寻找月份大于等于查询月份,且与查询月份最接近的数据

即:

要取201706月底的数据,就要找MARDH中大于等于201706且与之最接近的201708的数据,结果为90。

要取201711月底的数据,就要找MARDH中大于等于201711且与之最接近的201802的数据,结果为70。

要取201611月底的数据,就要找MARDH中大于等于201611且与之最接近的201704的数据,结果为0。

在这里有个ABAP的知识如下:

  • 取某一个月月底的普通库存数据

select single * into ls_mardh from mardh where 

matnr = 'A' 

and werks = '0001'

and lgort = '0100' 

and ( lfgja > p_lfgja or ( lfgja = p_lfgja and lfmon >= p_lfmon) ).

  • 取多个物料多个月月底的普通库存数据

select * into table lt_mardh from mardh where 

matnr in s_matnr

and werks in s_werks

and lgort in s_lgort.

sort lt_mardh by matnr werks lgort lfgja lfmon.

"先根据二分查找,查找到大于等于当前条目且最接近当前条目的索引

read table lt_mardh with key …… binary search transporting no fields.

(请详细测试或查看帮助系统,以了解二分查找的这个神奇作用)

"根据索引读取内表

read table lt_mardh index sy-tabix into ls_mardh.

if sy-subrc = 0

and ls_mardh-matnr = p_matnr 

and ls_mardh-werks = p_werks 

and ls_mardh-lgort = p_lgort.

"ls_mardh就是你要找的数据

endif.

但是问题还没有结束。

假如从现在开始到了2018年10月,我们对物料A在0001-0100无任何变动,那么表MARD和MARDH的数据也就不会变。

按照刚才的逻辑,我们只能取到该物料在201802及以前的数据,而201803及以后的库存一直都是65,存在于表MARD中。

所以,按照上述办法,在MARDH表中取不到库存数据的时候,MARD的数据就是其库存数据

这样,在上面判断if sy-subrc = 0 and....的代码后面,我们可以加上ELSE,在ELSE里面,取MARD表的数据即可。

总结


1、取物料在某月底的库存数据时,首先要在表MARDH中寻找月份大于等于查询月份,且与查询月份最接近的数据

2、按照第一条,在MARDH表中取不到库存数据的时候,MARD的数据就是其库存数据

3、MARD表中的年、月,表示物料数量上一次发生变化时的年、月

4、MSPR、MSKA、MCHB等表中的库存逻辑,与MARD基本一致,也都存在对应的H表

5、MBEW、QBEW、EBEW等库存价值的逻辑,也是差不多的,也都存在对应的H表。但不应想当然的认为,对于同样一个物料,MARD和MBEW的年月是一致的。因为数量变更影响库存数量,数量变更和价值变更都会影响MBEW。而价值变更的来源不一定是数量变更

6、二分查找的妙用,还是请测试一下以加深理解吧


IOS/ANDROID用户打赏——赞赏码

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 199,636评论 5 468
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 83,890评论 2 376
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 146,680评论 0 330
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 53,766评论 1 271
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 62,665评论 5 359
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,045评论 1 276
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,515评论 3 390
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,182评论 0 254
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,334评论 1 294
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,274评论 2 317
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,319评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,002评论 3 315
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,599评论 3 303
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,675评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,917评论 1 255
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,309评论 2 345
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 41,885评论 2 341

推荐阅读更多精彩内容