SAP BOM 多层展开及组件成本处理
form sub_get_bom.
LOOP AT gt_output INTO gs_output.
REFRESH:lt_stb.
CALL FUNCTION 'CS_BOM_EXPL_MAT_V2' "多层BOM展开官方方法
EXPORTING
capid = 'PP01'
datuv = sy-datum
emeng = 0
mtnrv = gs_output-matnr
mktls = lv_mktls
mehrs = lv_mehrs
werks = gs_output-werks
stlan = gs_output-stlan
stlal = gs_output-stlal
TABLES
stb = lt_stb
EXCEPTIONS
alt_not_found = 1
call_invalid = 2
material_not_found = 3
missing_authorization = 4
no_bom_found = 5
no_plant_data = 6
no_suitable_bom_found = 7
OTHERS = 8.
"多层BOM,如果第一层的BOM 中有替代料,那么这个替代料展开的下层组件都要删除
sort lt_stb by stufe descending.
clear: ls_stb,lv_tim,lv_stufe,lv_vwegx.
read table lt_stb into ls_stb index 1.
lv_tim = ls_stb-stufe - 1.
lt_stb1 = lt_stb[].
DO lv_tim times.
clear: ls_stb,ls_stb1.
loop at lt_stb into ls_stb.
lv_stufe = ls_stb-stufe - 1.
lv_vwegx = ls_stb-vwegx.
read table lt_stb into ls_stb1 with key stufe = lv_stufe wegxx = lv_vwegx.
if sy-subrc = 0.
if ls_stb1-alpos = 'X' and ls_stb1-ewahr <> '100'.
ls_stb-alpos = 'X'.
ENDIF.
ENDIF.
MODIFY LT_STB FROM LS_STB.
ENDLOOP.
ENDDO.
delete lt_stb where alpos = 'X' and ewahr <> '100'.
CLEAR LS_STB.
loop at lt_stb into ls_stb."取LT_STB带出来的BOM组件的价格
SELECT
MBEW~MATNR,
MBEW~BWKEY,
MBEW~STPRS,
MBEW~LFGJA,
MBEW~LFMON,
MBEW~PEINH
FROM MBEW
APPENDING CORRESPONDING FIELDS OF TABLE @GT_MBEWH
WHERE MATNR = @ls_stb-IDNRK
and BWKEY = @ls_stb-WERKS
and STPRS > '0'.
PERform sub_process_mbew.
ENDLOOP.
CLEAR LS_STB.
clear cost_sum.
clear cost_sumt.
data:substr type string.
LOOP AT lt_stb INTO ls_stb. "在这里计算好成本
clear substr.
substr = ls_stb-idnrk.
if ls_stb-xtlnr <> ''.
continue.
ENDIF.
case substr+0(2).
when 'R8'.
loop at gt_mbewh into gt_mbew.
if gt_mbew-matnr = ls_stb-idnrk and gt_mbew-bwkey = ls_stb-werks and gt_mbew-peinh <> '0'.
perform sub_get_rmenge using ls_stb-idnrk ls_stb-MNGLG.
cost_sum = cost_sum + rmenge * gt_mbew-stprs / gt_mbew-peinh.
clear rmenge.
exit.
endif.
endloop.
when 'S2'.
loop at gt_mbewh into gt_mbew.
if gt_mbew-matnr = ls_stb-idnrk and gt_mbew-bwkey = ls_stb-werks and gt_mbew-peinh <> '0'.
perform sub_get_rmenge using ls_stb-idnrk ls_stb-MNGLG.
cost_sum = cost_sum + rmenge * gt_mbew-stprs / gt_mbew-peinh.
clear rmenge.
exit.
endif.
endloop.
when 'S3'.
loop at gt_mbewh into gt_mbew.
if gt_mbew-matnr = ls_stb-idnrk and gt_mbew-bwkey = ls_stb-werks and gt_mbew-peinh <> '0'.
perform sub_get_rmenge using ls_stb-idnrk ls_stb-MNGLG.
cost_sum = cost_sum + rmenge * gt_mbew-stprs / gt_mbew-peinh.
clear rmenge.
exit.
endif.
endloop.
EXIT.
ENDCASE.
case substr+0(5).
when 'WK101'.
loop at gt_mbewh into gt_mbew.
if gt_mbew-matnr = ls_stb-idnrk and gt_mbew-bwkey = ls_stb-werks and gt_mbew-peinh <> '0'.
perform sub_get_rmenge using ls_stb-idnrk ls_stb-MNGLG.
cost_sum = cost_sum + rmenge * gt_mbew-stprs / gt_mbew-peinh.
clear rmenge.
exit.
endif.
endloop.
"以上,芯片成本累加
when 'WK102'.
loop at gt_mbewh into gt_mbew.
if gt_mbew-matnr = ls_stb-idnrk and gt_mbew-bwkey = ls_stb-werks and gt_mbew-peinh <> '0'.
perform sub_get_rmenge using ls_stb-idnrk ls_stb-MNGLG.
cost_sumT = cost_sumT + rmenge * gt_mbew-stprs / gt_mbew-peinh.
clear rmenge.
exit.
endif.
endloop.
when 'WK103'.
loop at gt_mbewh into gt_mbew.
if gt_mbew-matnr = ls_stb-idnrk and gt_mbew-bwkey = ls_stb-werks and gt_mbew-peinh <> '0'.
perform sub_get_rmenge using ls_stb-idnrk ls_stb-MNGLG.
cost_sumT = cost_sumT + rmenge * gt_mbew-stprs / gt_mbew-peinh.
clear rmenge.
exit.
endif.
endloop.
when 'WK104'.
loop at gt_mbewh into gt_mbew.
if gt_mbew-matnr = ls_stb-idnrk and gt_mbew-bwkey = ls_stb-werks and gt_mbew-peinh <> '0'.
perform sub_get_rmenge using ls_stb-idnrk ls_stb-MNGLG.
cost_sumT = cost_sumT + rmenge * gt_mbew-stprs / gt_mbew-peinh.
clear rmenge.
exit.
endif.
endloop.
when 'WK105'.
loop at gt_mbewh into gt_mbew.
if gt_mbew-matnr = ls_stb-idnrk and gt_mbew-bwkey = ls_stb-werks and gt_mbew-peinh <> '0'.
perform sub_get_rmenge using ls_stb-idnrk ls_stb-MNGLG.
cost_sumT = cost_sumT + rmenge * gt_mbew-stprs / gt_mbew-peinh.
clear rmenge.
exit.
endif.
endloop.
when 'WK106'.
loop at gt_mbewh into gt_mbew.
if gt_mbew-matnr = ls_stb-idnrk and gt_mbew-bwkey = ls_stb-werks and gt_mbew-peinh <> '0'.
perform sub_get_rmenge using ls_stb-idnrk ls_stb-MNGLG.
cost_sumT = cost_sumT + rmenge * gt_mbew-stprs / gt_mbew-peinh.
clear rmenge.
exit.
endif.
endloop.
when 'WK107'.
loop at gt_mbewh into gt_mbew.
if gt_mbew-matnr = ls_stb-idnrk and gt_mbew-bwkey = ls_stb-werks and gt_mbew-peinh <> '0'.
perform sub_get_rmenge using ls_stb-idnrk ls_stb-MNGLG.
cost_sumT = cost_sumT + rmenge * gt_mbew-stprs / gt_mbew-peinh.
clear rmenge.
exit.
endif.
endloop.
when 'R1006'.
loop at gt_mbewh into gt_mbew.
if gt_mbew-matnr = ls_stb-idnrk and gt_mbew-bwkey = ls_stb-werks and gt_mbew-peinh <> '0'.
perform sub_get_rmenge using ls_stb-idnrk ls_stb-MNGLG.
cost_sumT = cost_sumT + rmenge * gt_mbew-stprs / gt_mbew-peinh.
clear rmenge.
exit.
endif.
endloop.
when 'R1014'.
loop at gt_mbewh into gt_mbew.
if gt_mbew-matnr = ls_stb-idnrk and gt_mbew-bwkey = ls_stb-werks and gt_mbew-peinh <> '0'.
perform sub_get_rmenge using ls_stb-idnrk ls_stb-MNGLG.
cost_sumT = cost_sumT + rmenge * gt_mbew-stprs / gt_mbew-peinh.
clear rmenge.
exit.
endif.
endloop.
when 'R1017'.
loop at gt_mbewh into gt_mbew.
if gt_mbew-matnr = ls_stb-idnrk and gt_mbew-bwkey = ls_stb-werks and gt_mbew-peinh <> '0'.
perform sub_get_rmenge using ls_stb-idnrk ls_stb-MNGLG.
cost_sumT = cost_sumT + rmenge * gt_mbew-stprs / gt_mbew-peinh.
clear rmenge.
exit.
endif.
endloop.
when 'R1018'.
loop at gt_mbewh into gt_mbew.
if gt_mbew-matnr = ls_stb-idnrk and gt_mbew-bwkey = ls_stb-werks and gt_mbew-peinh <> '0'.
perform sub_get_rmenge using ls_stb-idnrk ls_stb-MNGLG.
cost_sumT = cost_sumT + rmenge * gt_mbew-stprs / gt_mbew-peinh.
clear rmenge.
exit.
endif.
endloop.
when 'R1025'.
loop at gt_mbewh into gt_mbew.
if gt_mbew-matnr = ls_stb-idnrk and gt_mbew-bwkey = ls_stb-werks and gt_mbew-peinh <> '0'.
perform sub_get_rmenge using ls_stb-idnrk ls_stb-MNGLG.
cost_sumT = cost_sumT + rmenge * gt_mbew-stprs / gt_mbew-peinh.
clear rmenge.
exit.
endif.
endloop.
exit.
ENDCASE.
"以上 计算铜材的成本
GS_OUTPUT-COST_XF = COST_SUM.
GS_OUTPUT-COST_TF = COST_SUMT.
MODIFY GT_OUTPUT FROM GS_OUTPUT.
* MOVE-CORRESPONDING gs_output TO gs_alv. "这个也是不用了 ,这是zpp009 的目标结构,这里换成我自己的
*
* MOVE-CORRESPONDING ls_stb TO gs_alv.
*
*
* APPEND gs_alv TO gt_alv.
ENDLOOP.
ENDLOOP.
endform.
form sub_get_rmenge using idnrk menge. "考虑损耗 rmenge 加上损耗后的实际数量
clear: smenge,rmenge.
sort lt_stb by stufe descending.
clear: lv_tim,lv_stufe,lv_vwegx.
if ls_stb-ausch <> '0' .
smenge = ls_stb-mnglg * ls_stb-ausch / 100. "自己当前级的损耗
endif.
lv_tim = ls_stb-stufe - 1.
lt_stb1 = lt_stb[].
DO lv_tim times. "找父阶料
clear: ls_stb1.
lv_stufe = ls_stb-stufe - 1.
lv_vwegx = ls_stb-vwegx.
read table lt_stb into ls_stb1 with key stufe = lv_stufe wegxx = lv_vwegx."取父级的组件
" ls_stb1-idnrk = ls_stb1-idnrk. "调试时看了下 可以没有
if sy-subrc = 0.
if ls_stb1-ausch <> '0'."父一级也有损耗,
smenge = smenge + ls_stb-mnglg * ls_stb1-ausch / 100 . "MNGLG已经做了换算了,自己当前的耗用量
ENDIF.
ENDIF.
"MODIFY LT_STB FROM LS_STB.
ENDDO.
rmenge = menge + smenge.
endform.
FORM SUB_SELECT_MBEW ." 取成品料的当前成本
clear gs_output.
loop at gt_output into gs_output.
SELECT
MBEW~MATNR,
MBEW~BWKEY,
MBEW~STPRS,
MBEW~LFGJA,
MBEW~LFMON,
MBEW~PEINH
FROM MBEW
APPENDING CORRESPONDING FIELDS OF TABLE @GT_MBEWH
WHERE MATNR = @gS_output-MATNR
and BWKEY = @GS_OUTPUT-WERKS
and STPRS > '0'.
ENDLOOP.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form SUB_SELECT_MBEWH
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& --> p1 text
*& <-- p2 text
*&---------------------------------------------------------------------*
FORM SUB_SELECT_MBEWH ."取成品料的历史成本
clear gs_output.
loop at gt_output into gs_output.
SELECT
MBEWH~MATNR,
MBEWH~BWKEY,
MBEWH~STPRS,
MBEWH~LFGJA,
MBEWH~LFMON,
MBEWH~PEINH
FROM MBEWH
APPENDING CORRESPONDING FIELDS OF TABLE @GT_MBEWH
WHERE MATNR = @gS_output-MATNR
and BWKEY = @GS_OUTPUT-WERKS
and STPRS > '0'.
ENDLOOP.
ENDFORM.
form sub_process_mbew."根据年份和期间拼接后排序,取最新的价格
data: lfgja_a like GT_MBEW-LFGJA.
data: lfmon_a like GT_MBEW-LFmon.
LOOP AT GT_MBEWH INTO GT_MBEW.
clear lfgja_a.
clear lfmon_a.
lfgja_a = GT_MBEW-LFGJA.
lfmon_a = GT_MBEW-LFMON.
GT_MBEW-SORTID = |{ lfgja_a+0(4) }{ lfmon_a+0(2) }| .
MODIFY GT_MBEWH FROM GT_MBEW.
ENDLOOP.
SORT GT_MBEWH BY BWKEY MATNR sortid DESCENDING.
delete adjacent duplicates from gt_mbewh comparing BWKEY MATNR.
endform.
SAP BOM 多层展开及组件成本处理相关推荐
- 【SAP Abap】BOM多级展开函数 CS_BOM_EXPL_MAT_V2 使用详解
SAP ABAP BOM多级展开函数 CS_BOM_EXPL_MAT_V2 使用详解 1.函数入参说明 2.函数出参说明 1.函数入参说明 CALL FUNCTION 'CS_BOM_EXPL_MAT ...
- SAP BOM展开函数CS_BOM_EXPL_MAT_V2
CALL FUNCTION 'CS_BOM_EXPL_MAT_V2' EXPORTING capid = 'PP01' ...
- SAP BOM物料清单详解
BOM全称bill of material,中文名叫物料清单,是指构成一个产品或装配件的完整的结构列表,该列表包含每一个组件部件的编码.描述.数量和单位,BOM已成为PDM/ERP信息化系统的最重要的 ...
- SAP BOM的类二维报表
一个简单BOM的类二维报表. 代码如下: TABLES: MARA, T001W, AUFK.TYPES: BEGIN OF TY_OUTPUT,IDNRK TYPE STPOX-IDNRK, &qu ...
- SAP MM 采购附加费计入物料成本之二
SAP MM 采购附加费计入物料成本之二 本文是基于S4HANA 1909版本的SAP系统来做展示的,系统环境激活了零售行业解决方案,同时展示的物料使用移动平均价作为其价格评估的方式. 1,如下采购订 ...
- SAP MM 采购附加费计入物料成本?
SAP MM 采购附加费计入物料成本? SAP MM 采购流程里,我们可以将采购附加费用比如关税,运费等计入物料的成本里.本文简要展示这个功能. 本文是基于S4HANA 1909版本的SAP系统来做展 ...
- [转]Shared——RN如何实现一个ExpandableList(可展开列表)组件
作者:小石头若海 原文地址:https://segmentfault.com/a/1190000011754908 RN如何实现一个ExpandableList(可展开列表)组件 讨论与分析 首先,我 ...
- 多层bom展开_金蝶K3 WISE BOM多级展开_BOM成本表
/****** Object: StoredProcedure [dbo].[pro_bobang_BOMCost] Script Date: 07/29/2015 16:09:11 ******/ ...
- SAP中BOM基础数量及组件数量单位比例关系的注意事项
下图是BOM展开功能CS11在正式系统和测试系统的截图.从截图中的对比不难看出,最下级的原材料A20981-110在组件的数量为1,实际按BOM中的设定比例折算,应该是1个成品,对应需要0.125件原 ...
最新文章
- python时间函数报错_python3中datetime库,time库以及pandas中的时间函数区别与详解...
- Numba——python面向数组高性能计算库
- 用python画玫瑰花代码-Python | 用turtle库画玫瑰花
- Unity 4.3 2D 教程:新手上路
- CentOS6.5安装Subversion
- 时序数据库InfluxDB
- C/Cpp / 构造函数种类
- axis2 wsdl2java 使用方式
- java使用jeids实现redis2.6的HyperLogLog数据结构的操作
- 七上八下猜数字_猜数字游戏,猜别人心里想的数字
- 文末彩蛋 | 这个 Request URL 长得好不一样
- 激光雷达考试基础知识
- 电商路演投资计划融资报告PPT模板
- iOS 开发怎么入门?
- php使用fleaphp框架做开发。
- 前端开发入门到实战:JavaScript字符串转换数字
- 你应该知道的前端9种图片格式基础知识
- bootload启动流程(四)--Eboot每个函数的详细说明
- 菜鸟的layui学习总结
- 视口锁定解锁lisp_求一个cad 图层锁定和解锁的lisp命令?