一个PS报表中的需求,要求求销售订单的计划成本,其中就包括计划物料成本,比较确准的计算主法就是遍历BOM,求出物料成本. 如果在创建销售订单时项目BOM可以产生,且用户进行了成本估算,则完全可以从系统表中取出系统计算的计划成本,此法简单且快,但可惜不是所有的销售订单都能满足. 代码如下:
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
本文介绍了一种通过遍历物料清单(BOM)来计算销售订单计划成本的方法,并提供了一个具体的ABAP实现示例,该方法适用于所有类型的销售订单。
1148

被折叠的 条评论
为什么被折叠?



