Abap 如何使用CS_BOM_EXPL_MAT_V2为BOM爆炸获取正确数量的组件?
我的程序有问题。我正在使用功能模块Abap 如何使用CS_BOM_EXPL_MAT_V2为BOM爆炸获取正确数量的组件?,abap,sap-erp,Abap,Sap Erp,我的程序有问题。我正在使用功能模块CS\u BOM\u EXPL\u MAT\u V2获取物料的BOM表。例如,我有一个物料MAT1,它具有ff。物料清单爆炸 MAT1 - COMP1 with Qty 2 - COMP2 with Qty 1 - COMP3 with Qty 1 然后,对于组件COMP1,它还有子组件: COMP1 - SUBCOMP1 with Qty 1 - SUBCOMP2 with Qty 1 因此,在我的程序中,使用CS\u BOM\u EXPL\u MAT\u
CS\u BOM\u EXPL\u MAT\u V2
获取物料的BOM表。例如,我有一个物料MAT1
,它具有ff。物料清单爆炸
MAT1
- COMP1 with Qty 2
- COMP2 with Qty 1
- COMP3 with Qty 1
然后,对于组件COMP1
,它还有子组件:
COMP1
- SUBCOMP1 with Qty 1
- SUBCOMP2 with Qty 1
因此,在我的程序中,使用CS\u BOM\u EXPL\u MAT\u V2
,我希望报告中有SUBCOMP1
=2和SUBCOMP2
=2的数量(因为MAT1
使用了2个COMP1
)。但是我得到的是SUBCOMP1
=1个数量和SUBCOMP2
=1个数量,因为我认为它只考虑COMP1
的BOM,而不考虑COMP1
的数量
运行事务处理CS12
时,物料MAT1
的输出是正确的(SUBCOMP1
=2,SUBCOMP2
=2)
那么,我如何使CS\u BOM\u EXPL\u MAT\u V2
起作用,以便它能够尊重组件的计数,在这种情况下,COMP1
带有数量2,并将值级联到子组件,在这种情况下,SUBCOMP1
和SUBCOMP2
,并将其相乘以返回正确的数量,在这种情况下,两个子组件的数量应为2,如交易CS12
如果FMCS\u BOM\u EXPL\u MAT\u V2
无法实现这一点,请建议其他实现方法
以下是我的FM当前的外观:
CALL FUNCTION 'CS_BOM_EXPL_MAT_V2'
EXPORTING
aumgb = 'X'
capid = 'PP01'
datuv = v_datuv "date input in selection screen
endhl = '1'
mehrs = 'X'
mmory = '1'
mtnrv = v_matnr "material input in selection screen
stlal = v_stlal "alternative BOM input in selection screen
stpst = 0 "Level in multi-bom expl.
svwvo = 'X'
werks = v_werks "plant input in selection screen
vrvso = 'X'
IMPORTING
topmat = gs_top
TABLES
stb = gt_stb
matcat = gt_matca
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
conversion_error = 8
OTHERS = 9.
这是Laurent Fournier在snc.sap.com上给出的答案。它对我很有帮助,所以我想把它保存在这里
I think that you must set multilevel indicator. Take a look at the following code and see if this can help you.
FORM EXPLODE_BOM USING U_DATE
U_MATNR
U_MENGE
U_WERKS
U_MULTI
CHANGING C_SUCCESS.
CLEAR : C_SUCCESS.
CALL FUNCTION 'CS_BOM_EXPL_MAT_V2'
EXPORTING
* FTREL = ' '
* ALEKZ = ' '
* ALTVO = ' '
* AUFSW = ' '
AUMGB = 'X'
* AUMNG = 0
AUSKZ = ' '
* AMIND = ' '
* BAGRP = ' '
* BEIKZ = ' '
* BESSL = ' '
* BGIXO = ' '
* BREMS = ' '
CAPID = 'PP01'
* CHLST = ' '
* COSPR = ' '
* CUOBJ = 000000000000000
* CUOVS = 0
* CUOLS = ' '
DATUV = U_DATE
* DELNL = ' '
* DRLDT = ' '
* EHNDL = ' '
* EMENG = 0
* ERSKZ = ' '
* ERSSL = ' '
* FBSTP = ' '
* KNFBA = ' '
* KSBVO = ' '
* MBWLS = ' '
* MKTLS = 'X'
* MDMPS = ' '
MEHRS = U_MULTI
* MKMAT = ' '
* MMAPS = ' '
* SALWW = ' '
* SPLWW = ' '
* MMORY = ' '
MTNRV = U_MATNR
* NLINK = ' '
* POSTP = ' '
* RNDKZ = ' '
* RVREL = ' '
* SANFR = ' '
* SANIN = ' '
* SANKA = ' '
* SANKO = ' '
* SANVS = ' '
* SCHGT = ' '
* STKKZ = ' '
* STLAL = '1'
* STLAN = '1'
STPST = 0
* SVWVO = 'X'
WERKS = U_WERKS
* NORVL = ' '
* MDNOT = ' '
* PANOT = ' '
* QVERW = ' '
* VERID = ' '
* VRSVO = 'X'
* IMPORTING
* TOPMAT =
* DSTST =
TABLES
STB = BOM_EXPL
* MATCAT =
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
CONVERSION_ERROR = 8
OTHERS = 9
我认为,如果用X标记AUMGB()字段,那么应该在结果中得到计算出的数量。检查名为STB()的表格,字段MNGLG(以基本计量单位计算的部件数量)。字段菜单应该包含基本数量。这个问题在SCN上得到了回答:是的,我知道。我开始写这个帖子。实际上,我把这条评论发给了未来的访问者,他们可能会遇到这个问题,想知道答案在哪里。