库存查询算法
SAP 庫存查詢算法 SAP 的后臺有關(guān)庫存的表,是一種很有意思的表。庫存表分兩種,一種是當(dāng)前庫存表,另一種是歷史庫存表。例如有MARD\MCHB\MSPR\MKOL等表,對應(yīng)的歷史庫存表就是MARDH\MCHBH\MSPRH\MKOLH。當(dāng)前庫存表表示的是,某款物料在當(dāng)前時間的庫存,表里的年份月份字段表示的是某款物料從當(dāng)時到現(xiàn)在的庫存,也就是說從當(dāng)時到現(xiàn)在一直沒有發(fā)生過物料移動。舉個例子,某物料在當(dāng)前表里的年份月份字段是201006,則表示這款物料從2010年6月到系統(tǒng)當(dāng)前時間一直都沒有做過出入庫。數(shù)量不變。
而歷史庫存表表示的是,某款物料在歷史上的庫存記錄。如某款物料在201006是10個,201105是6個,201201是7個,則表示這款物料在上述3個時間發(fā)生過物料移動。
那么這就會引發(fā)一個問題,如果有一個報表需求,要求按照時間月份來查詢物料在當(dāng)期的庫存。這個時候遵循的原則是,先到歷史庫存表里面去找。最好是從前往后推,即從某物料的最早的記錄往屏幕輸入時間推。如果推不到,則根據(jù)屏幕輸入的年份月份查找當(dāng)前庫存表。
gt_mard 是與mard 同樣結(jié)構(gòu)內(nèi)表,gt_mardh是與mardh同樣結(jié)構(gòu)的內(nèi)表。
核心算法就是通過mardh的年份來推到屏幕輸入年份,如果推到了,就繼續(xù)推月份,兩者如果都能推到,則mardh的這條物料記錄就是該屏幕輸入月的庫存;否則,就以當(dāng)前庫存mard中的數(shù)據(jù)作為該屏幕輸入時間的庫存。
而歷史庫存表表示的是,某款物料在歷史上的庫存記錄。如某款物料在201006是10個,201105是6個,201201是7個,則表示這款物料在上述3個時間發(fā)生過物料移動。
那么這就會引發(fā)一個問題,如果有一個報表需求,要求按照時間月份來查詢物料在當(dāng)期的庫存。這個時候遵循的原則是,先到歷史庫存表里面去找。最好是從前往后推,即從某物料的最早的記錄往屏幕輸入時間推。如果推不到,則根據(jù)屏幕輸入的年份月份查找當(dāng)前庫存表。
gt_mard 是與mard 同樣結(jié)構(gòu)內(nèi)表,gt_mardh是與mardh同樣結(jié)構(gòu)的內(nèi)表。
核心算法就是通過mardh的年份來推到屏幕輸入年份,如果推到了,就繼續(xù)推月份,兩者如果都能推到,則mardh的這條物料記錄就是該屏幕輸入月的庫存;否則,就以當(dāng)前庫存mard中的數(shù)據(jù)作為該屏幕輸入時間的庫存。
總結(jié)
- 上一篇: 统计内表行数常用的三种方法
- 下一篇: SAP复合角色更改后扩展到派生节点