您的位置:首页 > 其它

递归方法计划销售订单的计划物料成本

2008-06-19 11:03 447 查看
一个PS报表中的需求,要求求销售订单的计划成本,其中就包括计划物料成本,比较确准的计算主法就是遍历BOM,求出物料成本. 如果在创建销售订单时项目BOM可以产生,且用户进行了成本估算,则完全可以从系统表中取出系统计算的计划成本,此法简单且快,但可惜不是所有的销售订单都能满足. 代码如下:

SPAN {
font-family: "Anonymous";
font-size: 10pt;
color: #000000;
background: #FFFFFF;
}
.L1S31 {
font-style: italic;
color: #808080;
}
.L1S32 {
color: #3399FF;
}
.L1S33 {
color: #4DA619;
}
.L1S52 {
color: #0000FF;
}

DATA: v_vbeln LIKE vbap-vbeln,
v_posnr LIKE vbap-posnr,
v_matnr LIKE vbap-matnr,
v_plcst LIKE vbap-netwr,
v_plcst2 LIKE vbap-netwr,
v_menge LIKE stpo-menge. " 数量初始变量

v_vbeln = '0002000008'.
v_posnr = '000010'.
v_matnr = 'FT820'.
"v_menge = 1.
PERFORM calc_plncst_b USING v_vbeln
v_posnr
v_matnr
v_menge
CHANGING v_plcst.

*               总成本      固定成本  可变成本
* 货物制造成本  133,680.99  32,756.59 100,924.40  CNY

WRITE: 'BOM成本:'  ,v_plcst.

*&---------------------------------------------------------------------*
*&      Form  calc_plncst_b
*&---------------------------------------------------------------------*
*      遍历BOM计算计划物料成本,因为在生产本报表时基本上已经都存在项目BOM了,
*      故此法虽慢,却可满足所有情况.
*----------------------------------------------------------------------*
FORM calc_plncst_b  USING    p_vbeln
p_posnr
p_matnr
p_menge
CHANGING p_plcst.
" 订议BOM展开的结构
DATA: BEGIN OF wa_bom,
idnrk LIKE stpo-idnrk, " 物料号
menge LIKE stpo-menge, " 用量
END OF wa_bom.
DATA: it_bom_fst LIKE TABLE OF wa_bom,
it_bom_temp LIKE TABLE OF wa_bom.
DATA: v_stlnr LIKE kdst-stlnr,
*        v_cst_tmp LIKE vbap-netwr, " 临时成本变量
v_stprs LIKE mbew-stprs.   " 物料标准价格

SELECT SINGLE stlnr INTO v_stlnr
FROM kdst
WHERE vbeln = p_vbeln
AND vbpos = p_posnr
AND matnr = p_matnr.

IF sy-subrc <> 0. "没找到记录,说明是叶子节点
SELECT SINGLE stprs INTO v_stprs
FROM mbew
WHERE matnr = p_matnr.
p_plcst  = p_plcst  + p_menge * v_stprs.
ELSE.   "找到了,接着走(递归)
SELECT idnrk menge INTO CORRESPONDING FIELDS OF TABLE it_bom_fst
FROM stpo
WHERE stlnr = v_stlnr.
FIELD-SYMBOLS: <wa> LIKE wa_bom.
LOOP AT it_bom_fst ASSIGNING <wa>.
PERFORM calc_plncst_b USING p_vbeln
p_posnr
<wa>-idnrk
<wa>-menge
CHANGING p_plcst.
ENDLOOP.
ENDIF.
ENDFORM.                    " calc_plncst_b

[/code]
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: