domingo, 8 de septiembre de 2013

Bapis para cambiar la unidad de medida

La unidad de medida base, es la base para la gestión de stock y evaluación. Las cantidades de material disponible o en almacén (cuantos) se cuentan utilizando la unidad de medida base. toda cantidad que este medida en otra unidad, se convierte a la unidad de medida base para el calculo.

Todo material en Sap, tiene asignada una unidad de medida base. Se puede ver la unidad de medida base asignada a un material en el maestro de materiales, transacción MM03, en la pestaña de Datos básicos 1.

Unidad de medida base para el material en le maestro de materiales
En la base de datos, esta información se encuentra en el campo  MARA-MEINS.

Se pueden definir otras unidades de medida alternativa para el material y su factor de conversión en el Maestro de Materiales -> Datos adicionales -> Unidades de medida.

Unidades de medida alternativa y su relación
La información sobre las unidades de medida alternativa esta almacenada en la tabla MARM: Unidades de medida para el material.

En Abap, cuando necesitemos realizar alguna conversion entre unidades de medida podemos utilizar:

MATERIAL_UNIT_CONVERSION

Esta bapi, convierte una cantidad de un material en unidades de medida base a una unidad de medida alternativa y viceversa. Es obligatorio que una de las dos unidades de medida implicadas en la conversión sea la unidad de medida base del material (MARA-MEINS).


*&---------------------------------------------------------------------*
*&      Form  convert_unit_con_material
*&---------------------------------------------------------------------*
*  pi_um_inicial / pi_um_final: 1 de ellas, debe ser la UMB del material
*&---------------------------------------------------------------------*
FORM convert_unit_con_material USING pi_matnr       TYPE mara-matnr
                                     pi_cantida_ini TYPE gsmng
                                     pi_um_inicial  TYPE t006-msehi
                                     pi_um_final    TYPE t006-msehi
                               CHANGING po_cantida_fin TYPE gsmng.

   call function 'MATERIAL_UNIT_CONVERSION'
         exporting
              input                = pi_cantida_ini
*              kzmeinh              = 'X'
              matnr                = pi_matnr
              meinh                = pi_um_inicial
              meins                = pi_um_final
*              type_umr             = '3'
         importing
              output               = po_cantida_fin
         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.
*   Mensaje de error
  ENDIF.

ENDFORM.

UNIT_CONVERSION_SIMPLE

Con esta bapi no es necesario especificar el material ni la unidad de medida base. Convierte la cantidad  que indiquemos de una unidad de medida a otra. También permite redondear el resultado.

Los factores de conversión de las unidades de medida se configuran en:
   SPRO -> Sap Netweaver -> Parametrizaciones generales -> Verificar unidades de medida

*&---------------------------------------------------------------------*
*&      Form  convert_unit_sin_material
*&---------------------------------------------------------------------*
FORM convert_unit_sin_material USING pi_cantida_ini TYPE gsmng
                                     pi_um_inicial  TYPE t006-msehi
                                     pi_um_final    TYPE t006-msehi
                               CHANGING po_cantida_fin TYPE gsmng.


  CALL FUNCTION 'UNIT_CONVERSION_SIMPLE'
    EXPORTING
      input                = pi_cantida_ini
*     NO_TYPE_CHECK        = 'X'
*     ROUND_SIGN           = ' '
      unit_in              = pi_um_inicial
      unit_out             = pi_um_final
    IMPORTING
*     ADD_CONST            =
*     DECIMALS             =
*     DENOMINATOR          =
*     NUMERATOR            =
      output               = po_cantida_fin
    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 <> 0.
*   Mensaje de error
  ENDIF.

ENDFORM.                    "convert_unit_sin_material

RS_CONV_EX_2_IN_NO_DD

No es una bapi para conversión entre unidades. Convierte un string a tipo cantidad, muy útil cuando la fuente de los datos es un fichero de texto plano y necesitas convertir los datos para poder trabajar con ellos.

*&---------------------------------------------------------------------*
*&      Form  convert_to_quan
*&---------------------------------------------------------------------*
FORM convert_to_quan  USING    p_mengec TYPE c
                      CHANGING p_mengei LIKE marc-eisbe.


  CONDENSE p_mengec NO-GAPS.
  CALL FUNCTION 'RS_CONV_EX_2_IN_NO_DD'
    EXPORTING
      input_external                    = p_mengec
*   CONVERT                           =
*   CURRENCY                          = ' '
   IMPORTING
     output_internal                   = p_mengei
   EXCEPTIONS
     input_not_numerical               = 1
     too_many_decimals                 = 2
     more_than_one_sign                = 3
     ill_thousand_separator_dist       = 4
     too_many_digits                   = 5
     sign_for_unsigned                 = 6
     too_large                         = 7
     too_small                         = 8
     invalid_date_format               = 9
     invalid_date                      = 10
     invalid_time_format               = 11
     invalid_time                      = 12
     invalid_hex_digit                 = 13
     unexpected_error                  = 14
     input_too_long                    = 15
     no_decimals                       = 16
     invalid_float                     = 17
     illegal_type                      = 18
     conversion_exit_error             = 19
     OTHERS                            = 20.


ENDFORM.                    " convert_to_quan

1 comentario:

  1. Muchas gracias por la información, me ha sido muy util.

    ResponderEliminar