如何转换物料的数量单位

216 阅读1分钟

本文将介绍如何将物料数量转换为另一种计量单位数量的功能模块 MD_CONVERT_MATERIAL_UNIT,计量单位之间转换(如:每 PCS 等于多少 SET)

导入参数包括:

  • 物料代码 ( I_MATNR
  • 源计量单位 (I_IN_ME
  • 目标计量单位 (I_OUT_ME
  • 数量 (I_MENGE

导出参数:

  • E_MENGE:目标数量

我们可以指定物料编号和源度量单位、目标度量单位和数量。这个函数模块会帮我们得到转换后的结果:

例如:

参数名文本设置值
I_MATNR物料编号11006941
I_IN_ME源计量単位KG
I_OUT_ME目标计量単位PC
I_MENGE数量1

主要是在物料的计量单位维护了转换关系,然后才会使用上这个函数,如图:

image.png

然后我们通过运行 SE37 事务码执行 MD_CONVERT_MATERIAL_UNIT,就会得到转换关系后的结果,比如此处测试用的 1KG = 2PC,那么数量为 1000 时,得到的结果就是 2000,如下图:

image.png

也可以写一个简单的程序示例,在我们需要的报表中使用:

DATA: LV_MATNR   TYPE MARA-MATNR,
      LV_IN_ME   TYPE MARA-MEINS,
      LV_OUT_ME  TYPE MARA-MEINS,
      LV_MENGE   TYPE EKPO-MENGE,
      LV_E_MENGE TYPE EKPO-MENGE.

I_MATNR  = '11006162'.
I_IN_ME  = 'KG'.
I_OUT_ME = 'TO'.
I_MENGE  = 1.

CALL FUNCTION 'MD_CONVERT_MATERIAL_UNIT'
  EXPORTING
    I_MATNR              = LV_MATNR
    I_IN_ME              = LV_IN_ME
    I_OUT_ME             = LV_OUT_ME
    I_MENGE              = LV_MENGE
  IMPORTING
    E_MENGE              = LV_E_MENGE
  EXCEPTIONS
    ERROR_IN_APPLICATION = 1
    ERROR                = 2
    OTHERS               = 3
  .


IF SY-SUBRC <> 0.
	MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
     WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ELSE.
ENDIF.

其实,在很多时候官方提供了很有用的功能模块,我们都可以先自己使用通过 SE37 进行使用和探索,然后再封装为自己的工具库,使用起来就很方便,提高代码复用率。

也可以进行封装,如下:

*&---------------------------------------------------------------------*
*&      Form  FRM_UNIT_CONVERSION
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*      -->VALUE(PV_MATNR)  物料
*      -->VALUE(CH_MENGE)  待转换数量
*      -->VALUE(CH_MEINS)  待转换计量单位
*----------------------------------------------------------------------*
FORM frm_unit_conversion USING value(pv_matnr)
                       CHANGING value(ch_menge) value(ch_meins) .
 
   DATA :
          lv_in_meins    TYPE mara-meins,
          lv_out_meins   TYPE mara-meins,
          lv_in_menge    TYPE menge_d,
          lv_out_menge   TYPE menge_d.
 
   CLEAR : lv_in_meins,lv_out_meins, lv_in_menge, lv_out_menge.
 
* 取出物料基本计量单位
   SELECT SINGLE meins INTO lv_out_menge
     FROM mara
     WHERE matnr = pv_matnr.
 
   lv_in_menge = ch_menge.
   lv_in_meins = ch_meins.
 
   CALL FUNCTION 'ZFM_UT_UNIT_CONVERSION'
     EXPORTING
       ip_matnr     = pv_matnr         " 物料
       ip_meins     = lv_out_menge     " 物料计量单位
       ip_unit_in   = lv_in_meins      " 待转换 物料计量单位
       ip_unit_out  = lv_out_menge     " 转换为 物料计量单位
       ip_value_in  = lv_in_menge
     IMPORTING
       ep_value_out = lv_out_menge
     EXCEPTIONS
       overflow     = 1
       OTHERS       = 2.
 
   IF sy-subrc = 0.
 
     ch_menge = lv_out_menge.
 
   ENDIF .
 
   ch_meins = lv_out_meins.
 
ENDFORM .                    "FRM_UNIT_CONVERSION