ABAP 中历史库存

来源:互联网 发布:sony相机软件下载 编辑:程序博客网 时间:2024/04/29 03:14

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

这样处理貌似减少了冗余数据,不过给编程取历史库存增加了很大的工作量,个人觉得不算明智之举。
库存方面的表
mbew     mbewh
mard--查主库存    mardh--主库存历史记录
mslb--特殊库存O  mkol--特殊库存K/M     mska--特殊库存E          msku--特殊库存V/W
mcha  mchb

无论移动平均价(Moving Average Price MAP)是否有更改,MBEWH表都会更新。

MBEWH表记录了MBEW表的历史数据,而MBEW是物料评估(Material Valuation)表。

MBEW表记录了当前的物料价格,当物料价格被重估(比如更新物料当前移动平均价)时,SAP系统会将当前价格写入MBEWH表中,而将新价格写入MBEW中。

当前的价格总是记录在表MBEW中,当某一期间(Period)的第一项操作更新了物料数量或价值,则SAP系统会向表MBEWH写入一条记录,以第一项操作之前的余额、价格控制为标准。

在MBEWH表中代表上一期间记录的数字储存在“当前期间”LFMON字段中。

例:当在3期间发生第一笔过账(比如收货),则系统会在MBEWH表中的“当前期间”LFMON字段写入数字2,数量和价值更新到“总库存(Total Stock)”和“总价值(Total Value)”字段,并且等于发生在3期间的数量和价值。

若在连续几个期间内未发生过账,则表MBEWH不会为每个期间创建记录。

MBEW、MBEWH与MCHBH的区别:

MBEW:查看当前账期的移动平均价

MBEWH:查看历史账期的移动平均价

表MBEWH记录了所有的库存价值,而表MCHBH则只代表了未限制库存的价值。

如何查看当前移动平均价:

事务代码:S_P00_07000139

每次物料重估后的最新移动平均价。

 

用户/客户有几百种“历史库存报表需求”的理由,而且是可以查任意时间的。

可惜的是,SAP系统并没有现成的所谓的History Stock,其实也没有必要,这违背了数据库设计的冗余规则。

我看到过的SAP系统中关于“历史库存报表”或“时点库存报表”的方案无外乎有两种:
一、使用作业的办法,定期(一般是每天)抓取作业执行时刻的库存信息,存储在自定义表格中;
二,查询业务单据或物料凭证的明细,再累计出待查时刻的余额。

方法一的好处在于,查询历史数据速度较快。但是,这相当的占用存储资源;
其二,我们不能保证这定期的作业的确定性,硬件维护、系统性能都可能使这预定的“时刻”出现偏差,如果某一次没能抓取该时刻的库存,对整个报表来说,是数据的缺失;
其三,最初设计的抓取数据的方式、方法,极有可能在新需求的压力下被修改,或者被推翻,这仍然不能满足需要。

方法二的好处在于,它解决了上一个方案的第二和第三个问题。不过,这个报表运行起来就像回到了石器时代。这对于业务数据量大的SAP系统的影响是致命的,因为它不但失去了

用户的信任,更可怕的是它会动摇管理层的信心。

或许有第三个方案,有人会想到信息记录(LIS),SAP有一大堆积于LIS的库存分析报表,不过,用过的人都知道,它极不可信。这种报表成就了日常对数的用户与支持者或实施者

之间旷日持久的拉锯战,虽然OSS里面有若干针对LIS报表的修正方案。

我在一次对数的过程中尝试了第四种方案,那就是带H的月累表:MARCH、MARDH、MBEWH等。分析了一下这些表格的更新逻辑,它不是将每一种物料每一个期间都更新到表中的。

然后,摸索出一条使用标准程序来获得历史库存的途径。相关TCODE是,MB5B、MB51,不使用MB5T。

  

状态

库存级别

查询方式

有价库存

在库

S.Loc

MB5B(Valued Option)

在途(采购、两步移库)

Plant

MB5B(Valued Option)

质检

S.Loc

MB5B(Valued Option)

冻结

S.Loc

MB5B(Valued Option)

其他特殊库存

Plant

MB5B(Valued Option)

零价库存

在库

S.Loc

MB5B(S.Loc Option)

在途(采购、两步移库)

Plant

MB51累计

质检

S.Loc

MB5B(S.Loc Option)

冻结

S.Loc

MB5B(S.Loc Option)

其他特殊库存

Plant

MB5B(S.Loc Option)

 

 

库存: 
1. BAPI_MATERIAL_AVAILABILITY 获得商品可用库存 
2. CO_ZA_AVAILABILITY_CHECK 
3.AVAILABILITY_CHECK_CONTROLLER 
4.AVAILABILITY_CHECK 
库存管理: 
BAPI_GOODSMVT_GETDETAIL 显示货物移动的明细 
BAPI_GOODSMVT_GETITEMS 显示物料凭证的详细清单 
BAPI_GOODSMVT_CREATE 货物移动过帐,入库,出库 
BAPI_GOODSMVT_CANCEL 冲销货物移动

 

BAPI_MATERIAL_SAVEDATA建立/更改物料主檔BAPI_OBJCL_CREATE建立/更改物料主檔分類BAPI_OBJCL_CHANGE建立/更改物料主檔分類CLMM_MAINTAIN_CLASSIFICATIONS批量建立/更改物料主檔分類CLAF_CLASSIFICATION_OF_OBJECTS顯示物料主檔分類特性值BAPI_MATERIAL_EXISTENCECHECK檢查物料主檔是否存在BAPI_MATERIAL_GETLIST顯示物料主檔明細  BAPI_PO_CREATE1建立采購單BAPI_PO_CHANGE更改采購單BAPI_PO_GETDETAIL顯示采購單明細BAPI_PO_RELEASE核發采購單BAPI_REQUISITION_CREATE建立請購單BAPI_REQUISITION_CHANGE更改請購單BAPI_REQUISITION_GETDETAIL顯示請購單明細BAPI_REQUISITION_RELEASE_GEN核發請購單  BAPI_CHARACT_CREATE建立特性BAPI_CHARACT_CHANGE更改特性BAPI_CHARACT_DELETE刪除特性BAPI_CHARACT_RENAME重新命名特性BAPI_CHARACT_GETDETAIL讀取特性屬性BAPI_CHARACT_ADDLONGTEXT設定特性或數值的長文BAPI_CHARACT_REMOVELONGTEXT刪除特性或數值的長文BAPI_CHARACT_GETLONGTEXT讀取數值的特性長文CARD_CHARACTERISTIC_READ顯示特性值的值列表  BAPI_CLASS_CREATE建立類別BAPI_CLASS_CHANGE變更類別BAPI_CLASS_DELETE刪除類別BAPI_CLASS_GETDETAIL讀取類別資訊(取分類下特性及特性值)BAPI_CLASS_EXISTENCECHECK檢查物件存在性  BAPI_VENDOR_GETDETAIL顯示供應商明細BAPI_VENDOR_EXISTENCECHECK檢查存在性  BAPI_MATERIALGROUP_GET_LIST讀取物料群組/物料群組說明  BAPI_GOODSMVT_CREATE過帳物料異動BAPI_GOODSMVT_CANCEL沖帳(取消)物料異動BAPI_GOODSMVT_GETDETAIL顯示物料異動明細BAPI_GOODSMVT_GETITEMS顯示物料文件的明細清單
  

MBEW和MBEWH的更新机制

假 设有某料从period 1开始就一直没有做交易,那时库存是100,MAP假设是1RMB/PC,一直到现在period 4, 你收了100个,2RMB/PC,系统会在每个跨期间的第一笔交易将历史记录写入MBEWH,假设period 2,3无交易,MBEWH将增加一笔 period 3, 100 PC, MAP 1RMB ,同时MBEW的current period/year从2006/period 1改成2006/03, 即MBEWH总是会在post第一笔当前期间时总是保存上期间的stock value 和MAP . MBEWH几个月没数据说明物料几个月没移动. MBEWH总是会在post第一笔当前期间的物料移动时总是保存上期间的total stock value 和MAP ,如果中间可能没有period记录说明这n-1个period该物料没有做任何移动

通常看库存报表可能会用到如下几个T-code:

MMBE:MARD-LABST(Valuated stock with unrestricted use)
       MB52:MARD-LABST

MB51:MSEG:ERFMG累加

MM03:MBEW-LBKUM (Total valuated stock)
       MB5L:MBEW-SALK3 (Value of total valuated stock)

MC.9:S032-MBWBEST(Quantity of valuated stock)
       S032-WBWBEST(Value of valuated stock)
你看到上面几个典型T-code实际上是从不同table读数据的.

***我强烈建议那些号称MM资深顾问的人最少花点时间去了解下三支程序.
   PO,收货和发票校验逻辑,我指的是内部逻辑.
研究过SAPMM07M和SAPLMIGO(两者对应分别对应MB1A等T-code和MIGO等)一定
会知道通常如果MARD,MSEG,MBEW的数据对不上那SAP就有问题了,知道什么时候
material doc.no and FI doc No获得(这时候实际上还没有save到表中,这很容易解释
为什么Doc no跳号,如果你愿意你可象放慢镜头一样,故意制造出doc no跳号的case),
你也了解materail movement是如何update到DB table中的.

再次申明,使用Mard,MSEG,MBEW的T-code看库存数据一般会一致,但是 MC.9等使用了LIS table的就不一定了
熟悉LIS的朋友肯定熟悉此两表
TMC4:Global Control Elements: LIS Info Structure
TMCAE:Features of Application
而且知道通常S031,S032的update rule是Synchronous Updating (V1 Update)
是的,它是由MB1*的include 程序RMCSV3VB完成的.就是说在物料移动时实时update那么为什么
MC.9看到的库存还会和MB1*或MMBE看到的不同呢?原因有很多,比如你更该了material type, Material group等,


出现问题了,当然你必须更新信息机构的数据.
更新S012 PURCHASE DATA.
OLI3 - Statistical setup of info structures from purchasing documents 
重组Purchase Doc to LIS.
NPRT - Log for Setup of Statistical Data 
NPRT to check REsetup log.
MC26允许你看到LIS, QIS,SIS的更新情况,无论是LIS,QIS,SIS...,库存如不一致就应该update一下了.

关于如何更新IS系统下面有一堆T-code
(OLI1-9),实际上后台你也可看到.

---------------------------------------


一.for WM相关(部分):
LS09 Display Material Data for Stor.Type
LS24 Display Quants for Material
LS25 Display Quants per Storage Bin
LS26 Warehouse stocks per material
LS27 Display quants for storage unit
LS28 Display storage units / bin
LT0G Return delivery to stock
LX02 Stock list
二.库存重新估价
J1A3 MM goods issue revaluation(重新估价)
J1A5 MM Warehouse stock report
J1AI Asset Revaluation (Inflation)

三.关于物料价格(及其更改)
MR21 Price Change
MR22 Material Debit/Credit
CK24            Mark/change Standard Cost
CKMTOPSTOCKVAL Materials w/ Highest Inventory Value
MRN8 Lowest Value: Price Variances
四.关于库存分析.
MMBE(MB53): 显示单个库存(可将0库存的sto.过滤)
MB52: Warehouse Stocks on Hand (不能By date)
MB54:Consignment Stocks
MB51/MB59:Material Doc. List (查看物料凭证,可by posting date)
MB5B: Stocks for Posting Date
** By Selection date可分时段查询库存MB5B
MB5K Stock Consistency Check
MB5L(MB5W) 显示 Stock Values Balances
** MB5L是从物料评估层看物料价值.比如某plant 1100的valuation clas是12110101
** 如果你使用MB52 by plant 1100和MB5L的12110101(物料总帐科目)价值不同就有问题了.
MB5T Stock in transit CC(转储)
**通常跨公司转储使用MB1B 311同plant转,301跨plant(且可跨company)转.
**内部公司关联贸易如果考虑MRP,一般不直接使用MB1B而开PO,这样open PO就考虑了.

MBBS Display valuated special stock
MBGR Displ. Material Docs. by Mvt. Reason(有问题的库存)
MBLB Stocks at Subcontractor

MBST Cancel Material Document
**通常MBST是整单的,比如PO 101收货错误,如整单可使用MBST,或一个个使用102.
**MBST能找到cancelling mat.doc的对应的反向mvtype .
MBSM Display Cancelled Material Docs.

物料历史.
MRN9 Balance Sheet Values by Account (各种价值)
MM60 Materials List 
MM04            material Changed History(物料被更改的历史记录)
MM06            mark Material deleted flat (将物料设置删除标志)
MMAM Change Material Type
**MMAM怎样的material type才可change比如从SFG转到FG,条件是什么?我知道.
MCE9   Purchasing Function(转到MM_PUR功能菜单)
MCE3   Vendor Analysis Selection
MCE5   MatGrp Analysis Selection
MCE7   Material Analysis Selection
MCW2
ME2M             Material by Purchase Order 
---------------------------------------------------------------
库存相关表格:
MKOL :Special Stocks from Vendor
MKOLH:Special Stocks from Vendor: History

MSCA :Sales Orders on Hand with Vendor
MSCAH:Sales Order Stock at Vendor: History

MSKA :Sales Order Stock
MSKAH:Sales Order Stock: History

MSKU :Special Stocks at Customer
MSKUH:Special Stocks at Customer: History

MSLB :Special Stocks at Vendor
MSLBH:Special Stocks at Vendor: History

MARA :Plant Data for Material(物料plant相关master data)
MARCH:Material Master C Segment: History

MARD :Material Master Storage Location(常规库存在此表)
MARDH:Material Master Storage Location Segment: History

MBEW :对应material master data的account1-2,costing1-2 view.
MBEWH:Material Valuation: History

MCHB :       Batch Stocks
MCHBH      Batch Stocks: History

MCH1       Batches (if Batch Management Cross-Plant)
MCHA       Batches

0 0
原创粉丝点击