SAP 基本单位与物料计量单位间的转换

基本单位的转换函数

UNIT_CONVERSION_SIMPLE  - 基本单位间的转换(如:1MIN = 60S)

物料单位转换的两个函数

1) MD_CONVERT_MATERIAL_UNIT  -  计量单位之间转换(如:每PCS 等于多少 SET)

2) MATERIAL_UNIT_CONVERSION  - 每基本单位等于多少计量单位(如:KG),如果KZMEINH = ‘X’ 则为每计量单位等于多少基本单位

 

1). MD_CONVERT_MATERIAL_UNIT 函数示例:

*&---------------------------------------------------------------------*
*&      Form  FRM_UT_UNIT_CONVERSION
*&---------------------------------------------------------------------*
*       物料转换基本单位
*----------------------------------------------------------------------*
FORM frm_ut_unit_conversion  USING  value(pv_matnr)     value(pv_meins)
                                     value(pv_in_meins)  value(pv_input)
                           CHANGING  ch_output TYPE ekpo-menge.
 
   DATA : lv_matnr      TYPE mara-matnr,
         lv_in_meins   TYPE mara-meins,
         lv_out_meins  TYPE mara-meins,
         lv_in_value   TYPE menge_d,
         lv_out_value  TYPE menge_d.
 
   lv_matnr     = pv_matnr.
   lv_in_meins  = pv_meins.
   lv_out_meins = pv_in_meins.
   lv_in_value  = pv_input.
 
   CLEAR lv_out_value.
 
*** 直接转换为物料计量单位,如:每PCS等于多少SET
   CALL FUNCTION 'MD_CONVERT_MATERIAL_UNIT'
     EXPORTING
       i_matnr              = lv_matnr
       i_in_me              = lv_in_meins
       i_out_me             = lv_out_meins
       i_menge              = lv_in_value
     IMPORTING
       e_menge              = lv_out_value
     EXCEPTIONS
       error_in_application = 1
       error                = 2
       OTHERS               = 3.
 
ENDFORM .                    " FRM_UT_UNIT_CONVERSION


2). 自定义函数(ZFM_UT_UNIT_CONVERSION)封装上面几个函数:

FUNCTION zfm_ut_unit_conversion.
*"----------------------------------------------------------------------
*"*"Local interface:
*"  IMPORTING
*"     VALUE(IP_MATNR) LIKE  MARA-MATNR DEFAULT SPACE
*"     VALUE(IP_MEINS) LIKE  MARA-MEINS DEFAULT SPACE
*"     VALUE(IP_UNIT_IN) LIKE  T006-MSEHI
*"     VALUE(IP_UNIT_OUT) LIKE  T006-MSEHI
*"     VALUE(IP_VALUE_IN) TYPE  MENGE_D
*"  EXPORTING
*"     VALUE(EP_VALUE_OUT) TYPE  MENGE_D
*"  EXCEPTIONS
*"      OVERFLOW
*"----------------------------------------------------------------------
 
   DATA lv_value_meins TYPE f.
 
   IF ip_matnr IS INITIAL .
 
* 计量单位转换
     CALL FUNCTION 'UNIT_CONVERSION_SIMPLE'
       EXPORTING
         input                = ip_value_in
         round_sign           = 'X'
         unit_in              = ip_unit_in
         unit_out             = ip_unit_out
       IMPORTING
         output               = ep_value_out
       EXCEPTIONS
         conversion_not_found = 1
         division_by_zero     = 2
         input_invalid        = 3
         output_invalid       = 4
         overflow             = 5
         type_invalid         = 6
         units_missing        = 7
         unit_in_not_found    = 8
         unit_out_not_found   = 9
         OTHERS               = 10.
 
     IF sy-subrc = 5.
       RAISE overflow.
     ENDIF .
 
   ELSE .
 
*--------------------------------------------------------------------*
* 这一部分也可以通过 MD_CONVERT_MATERIAL_UNIT 函数换算
*--------------------------------------------------------------------*
 
* 物料计量单位转换:取出每计量单位等于多少基本单位
     CLEAR lv_value_meins.
     CALL FUNCTION 'MATERIAL_UNIT_CONVERSION'
       EXPORTING
         input                = ip_value_in
         kzmeinh              = 'X'
         matnr                = ip_matnr
         meinh                = ip_unit_in
         meins                = ip_meins
       IMPORTING
         output               = lv_value_meins
       EXCEPTIONS
         conversion_not_found = 1
         input_invalid        = 2
         material_not_found   = 3
         meinh_not_found      = 4
         meins_missing        = 5
         no_meinh             = 6
         output_invalid       = 7
         overflow             = 8
         OTHERS               = 9.
 
     IF sy-subrc = 8.
       RAISE overflow.
     ENDIF .
 
* 物料计量单位转换:通过基本单位换算计量单位
     CALL FUNCTION 'MATERIAL_UNIT_CONVERSION'
       EXPORTING
         input                = lv_value_meins
         kzmeinh              = space
         matnr                = ip_matnr
         meinh                = ip_unit_out
         meins                = ip_meins
       IMPORTING
         output               = ep_value_out
       EXCEPTIONS
         conversion_not_found = 1
         input_invalid        = 2
         material_not_found   = 3
         meinh_not_found      = 4
         meins_missing        = 5
         no_meinh             = 6
         output_invalid       = 7
         overflow             = 8
         OTHERS               = 9.
 
     IF sy-subrc = 8.
       RAISE overflow.
     ENDIF .
 
   ENDIF .
 
ENDFUNCTION .


3). 定义Subroutine调用函数:
*&---------------------------------------------------------------------*
*&      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

  • 1
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值