itab1:
保存BOM数据
werks
工厂
matnr
物料
stufe
阶层
werks1
工厂
matnr1
子物料
bmeng
用量
程序如下:
data: q type f,
p type f.
data: a like mard-werks,
b like mard-matnr,
c like plaf-gsmng.
form process_data.
clear itab1.
refresh itab1.
clear p.
clear q.
loop at i_itab.
perform bom_data using i_itab-matnr i_itab-werks."" 得到所有物料的BOM表
endloop.
dele itab1 where stufe ne 1. 只保留第一下阶物料
loop at i_itab.
perform decide_data using i_itab-werks i_itab-matnr i_itab-gsmng.
endloop.
endform
form decide_data using r_werks type mard-werks r_matnr type mard-matnr r_gsmng type plaf-gsmng.
read table i_stock with key werks = r_werks matnr = r_matnr."" 如果库存有物料
if sy-subrc eq 0.
q = i_stock-labst - r_gsmng.
"" 库存物料与需求数量比较
if q gt 0 or q eq 0.
i_stock-labst = i_stock-labst - r_gsmng."" 假如库存数量大于需求数量,直接减去,得到库存剩余可用数量(正值的话,表示可以满足需求)
modify i_stock index sy-tabix.
else.
p = r_gsmng -i_stock-labst
"" 假如库存数量小于需求数量 ,剩下需要下阶物料来生产
i_stock-labst = i_stock-labst - r_gsmng. "" 假如库存数量小于需求数量,直接减去,得到库存剩余可用数量(负值的话,表示欠料的数量)
modify i_stock index sy-tabix.
loop at itab1.
if itab1-werks = r_werks and itab1-matnr = r_matnr."" 计算需要的各个下阶物料数量
a = itab1-werks1.
b = itab1-matnr1.
c = itab1-bmeng * p.
perform decide_data using a b c.递归计算子物料
endif.
endloop.
endif.
endif.
endform.
但是,运行的数据总是不对。
请各个大侠看看是什么问题????谢谢~~~~~~~~~