2009/05/12

MATERIAL_UNIT_CONVERSION 基本数量単位への変換の例 ABAP

*-----------------------
*「MATERIAL_UNIT_CONVERSION」汎用モジュールは「基本数量単位への変換」を行ないます
*このPGは代替数量単位の間に換算するための分子と分母を求めます。
*1、数量単位(前)から 【基本数量単位】に変更します。
*2、数量単位(後)から 【基本数量単位】に変更します。
*3、分子と分母を求めます。
*    分子OW_UP = LW_UMREZ * LW_UMREN2.(1の分子*2の分母)
*    分母OW_DOWN = LW_UMREN * LW_UMREZ2.(1の分母*2の分子)
*-----------------------
REPORT ZMM0069 NO STANDARD PAGE HEADING
                                  MESSAGE-ID Z0
                                  LINE-SIZE 132
                                  LINE-COUNT 65(2).

DATA:
LW_UP TYPE I,
LW_DOWN TYPE I,
LW_SUBRC TYPE SY-SUBRC.

PERFORM CONVERT_MATERIAL_UNIT
USING
 'ZZERO_ME112_001'
'KG'
'M3'
CHANGING
LW_UP
LW_DOWN
LW_SUBRC.

WRITE / '上:'.
WRITE LW_UP.
WRITE / '下:'.
WRITE LW_DOWN.

*&---------------------------------------------------------------------*
*&      FORM  CONVERT_MATERIAL_UNIT
*&---------------------------------------------------------------------*
*       数量単位による換算(品目コードがあり)
*----------------------------------------------------------------------*
*      -->IW_MATNR      品目コード
*      -->IW_MEINS_BEF  数量単位(前)
*      -->IW_MEINS_AFT  数量単位(後)
*      <--OW_UP         単位変換用分子
*      <--OW_DOWN       単位変換用分母
*      <--OW_SUBRC      リターンコード
*----------------------------------------------------------------------*
FORM CONVERT_MATERIAL_UNIT USING
                           IW_MATNR TYPE ANY
                           IW_MEINS_BEF TYPE ANY
                           IW_MEINS_AFT TYPE ANY
                           CHANGING
                           OW_UP TYPE ANY
                           OW_DOWN TYPE ANY
                           OW_SUBRC TYPE ANY.

  DATA:
    LW_NUM_IN TYPE I VALUE '10',
    LW_NUM_OUT TYPE I.
  DATA:
    LW_MENGE_BEF TYPE BSEG-MENGE,
    LW_MENGE_AFT TYPE BSEG-MENGE.
  DATA:
    LW_UMREN  TYPE SMEINH-UMREN, "分母
    LW_UMREZ  TYPE SMEINH-UMREZ, "分子
    LW_UMREN2 TYPE SMEINH-UMREN, "分母2
    LW_UMREZ2 TYPE SMEINH-UMREZ. "分子2

  CALL FUNCTION 'MATERIAL_UNIT_CONVERSION'
    EXPORTING
     INPUT                        = LW_NUM_IN
      MATNR                       = IW_MATNR     "品目コード
      MEINH                       = IW_MEINS_BEF  "数量単位(前)
   IMPORTING
     OUTPUT                       = LW_NUM_OUT
     UMREN                        = LW_UMREN
     UMREZ                        = LW_UMREZ
   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 <> 0.
    OW_SUBRC = 1.
    RETURN.
  ENDIF.

  CALL FUNCTION 'MATERIAL_UNIT_CONVERSION'
   EXPORTING
     INPUT                        = LW_NUM_IN
     MATNR                        = IW_MATNR     "品目コード
     MEINH                        = IW_MEINS_AFT  "数量単位(後)
   IMPORTING
     OUTPUT                       = LW_NUM_OUT
     UMREN                        = LW_UMREN2
     UMREZ                        = LW_UMREZ2
   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 <> 0.
    OW_SUBRC = 1.
    RETURN.
  ENDIF.

  OW_UP = LW_UMREZ * LW_UMREN2.    "分子
  OW_DOWN = LW_UMREN * LW_UMREZ2.  "分母

  OW_SUBRC = SY-SUBRC.

  IF OW_DOWN = 0.
    OW_SUBRC = 1.
  ENDIF.

ENDFORM.                    " CONVERT_MATERIAL_UNIT

2 comments: