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

来源:互联网 发布:风云直播网络电视 编辑:程序博客网 时间:2024/04/29 17:04

一个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  CNYWRITE: '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