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

本文介绍了一种通过遍历物料清单(BOM)来计算销售订单计划成本的方法,并提供了一个具体的ABAP实现示例,该方法适用于所有类型的销售订单。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一个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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值