Sep 26, 2015

Converting Material Quantities To Different Unit Of Measure In ABAP

Each material in SAP has its standard, base unit of measure (stored in MARA-MEINS). To allow using alternative units, those can be maintained per material in table MARM. A common requirement for ABAPer is to convert material quantity from one unit to another, most likely from an alternative unit to the base one, to be able to summarize the report results.
To do the conversion, SAP provides the function module MATERIAL_UNIT_CONVERSION. Its parameter names are not self-explaining, and for my own purposes I have a simple wrapper form that I use to convert quantities from alternative to base UoM. The form is using data caching technique that I described in one of my earlier posts.

form convert_to_base_uom 
  using    pf_matnr     type matnr 
           pf_menge_in  type gsmng 
           pf_meins_in  type meins 
  changing pf_menge_out type gsmng 
           pf_meins_out type meins. 

* define internal table to cache the base UOM 
  types: begin of lty_meins_rec, 
             matnr type matnr, 
             meins type meins, 
           end of lty_meins_rec. 

  types: 
    lty_meins_tab type hashed table of lty_meins_rec 
          with unique key matnr. 
  data: 
    ls_wa type lty_meins_rec. 

  statics: 
    lt_meins type lty_meins_tab. 

* first, find the base UOM 
  clear pf_meins_out. 
  read table lt_meins into ls_wa 
    with table key matnr = pf_matnr. 
  if sy-subrc = 0. 
    pf_meins_out = ls_wa-meins. 
  else. 
    select single meins 
      from mara 
      into ls_wa-meins 
      where matnr = pf_matnr. 
    if sy-subrc  0.  "doesn't exist. try PC 
      ls_wa-meins = 'ST'. 
    endif. 
    ls_wa-matnr = pf_matnr. 
    pf_meins_out = ls_wa-meins. 
    insert ls_wa into table lt_meins. 
  endif. 

* now convert the qty 
  if pf_meins_in = pf_meins_out. 
    pf_menge_out = pf_menge_in. 
  else. 
    call function 'MATERIAL_UNIT_CONVERSION' 
         exporting 
              input                = pf_menge_in 
              kzmeinh              = 'X' 
              matnr                = pf_matnr 
              meinh                = pf_meins_in 
              meins                = pf_meins_out 
              type_umr             = '3' 
         importing 
              output               = pf_menge_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. 

  endif. 

endform.


ref: https://abaplog.wordpress.com/2007/03/22/converting-material-quantities-to-different-unit-of-measure-in-abap/



No comments :