ABAP物料批次层单位转换
物料在批次层级启用双单位之后,报表需要对物料进行单位转换,标准的转换函数MD_CONVERT_MATERIAL_UNIT就不在实用。跟踪标准事务码MMBE时发现会调用MURC_ALL_BATCH_FACTORS_NEW函数进行批次的单位转换,该函数要求输入对象号参数,所以将该函数再次封装
FUNCTION ZCONVERT_MATERIAL_UNIT_CHARG.
*"----------------------------------------------------------------------
"“局部接口:
*” IMPORTING
*" VALUE(IF_MATNR) TYPE MATNR OPTIONAL
*" VALUE(IF_MEINS) TYPE MARA-MEINS OPTIONAL
*" VALUE(IF_MEINH) TYPE MARM-MEINH OPTIONAL
*" TABLES
*" ET_CONV_TAB STRUCTURE RMMME2 OPTIONAL
*"----------------------------------------------------------------------
TYPES:
BEGIN OF GTY_S_MCHA_OBJEK, "批次对象
WERKS TYPE WERKS_D,
CHARG TYPE CHARG_D,
OBJEK TYPE INOB-OBJEK,
END OF GTY_S_MCHA_OBJEK,
BEGIN OF GTY_S_OBJEK,
OBJEK TYPE INOB-OBJEK,
END OF GTY_S_OBJEK.
DATA:
LS_MCHA_KEY TYPE MCHA_KEY,
LS_MCHA_OBJEK TYPE GTY_S_MCHA_OBJEK,
LS_OBJEK TYPE GTY_S_OBJEK.
DATA:LS_TAB TYPE RMMME2.
RANGES: MS_CHARG_SAVE FOR MCHB-CHARG, "Begin P40K053180
MS_WERKS_SAVE FOR MARCV-WERKS.
-
Global data
DATA:
GT_MCHA_OBJEK TYPE STANDARD TABLE OF GTY_S_MCHA_OBJEK,
GT_OBJEK TYPE STANDARD TABLE OF GTY_S_OBJEK.SORT ET_CONV_TAB BY WERKS CHARG.
DELETE ADJACENT DUPLICATES FROM ET_CONV_TAB COMPARING WERKS CHARG.
LS_MCHA_KEY-MATNR = IF_MATNR.
LOOP AT ET_CONV_TAB INTO LS_TAB. "批次对象 -
Build object key
LS_MCHA_KEY-WERKS = LS_TAB-WERKS.
LS_MCHA_KEY-CHARG = LS_TAB-CHARG.
LS_OBJEK-OBJEK = LS_MCHA_KEY.
APPEND LS_OBJEK TO GT_OBJEK. -
Build mcha object table
LS_MCHA_OBJEK-WERKS = LS_TAB-WERKS.
LS_MCHA_OBJEK-CHARG = LS_TAB-CHARG.
LS_MCHA_OBJEK-OBJEK = LS_MCHA_KEY.
APPEND LS_MCHA_OBJEK TO GT_MCHA_OBJEK.
ENDLOOP. -
获取批次转换比例
CALL FUNCTION ‘MURC_ALL_BATCH_FACTORS_NEW’
EXPORTING
IF_MATNR = IF_MATNR -
IF_KZDCH =
-
IF_KZDWS = IF_MEINS = IF_MEINS IF_MEINH = IF_MEINH
TABLES
IT_SEL_CHARG = MS_CHARG_SAVE
IT_SEL_WERKS = MS_WERKS_SAVE
IT_MCHA_OBJEK = GT_MCHA_OBJEK -
IT_MCH1_OBJEK = IT_OBJEK = GT_OBJEK ET_CONV_TAB = ET_CONV_TAB
EXCEPTIONS
NOT_FOUND = 1
NO_BATCH_CONVERSION = 2
OTHERS = 3
.
IF SY-SUBRC <> 0. -
Implement suitable error handling here
ENDIF.
ENDFUNCTION.