Autor Tema: BAPI para modificar unidades de medida de los materiales  (Leído 13061 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado molaci

  • Usuario Sr.
  • ****
  • Mensajes: 113
    • Ver Perfil
BAPI para modificar unidades de medida de los materiales
« en: 17 de Febrero de 2010, 10:35:52 am »
Hola, Existe alguna BAPI para modificar como si fuera a través de la MM02 las Unidades de Medida?

Gracias.

Desconectado dluis

  • Usuario Jr
  • **
  • Mensajes: 27
    • Ver Perfil
Re: BAPI para modificar unidades de medida de los materiales
« Respuesta #1 en: 17 de Febrero de 2010, 11:45:34 am »
Hola,

puedes utilizar la siguiente bapi: BAPI_MATERIAL_SAVEDATA


Te copio el código de un programa muy sencillo, lo que hace es cargar desde un fichero una serie de materiales con los campos de las unidades de materiales.


Este es el programa.
Código: [Seleccionar]

REPORT zcarga_conversiones_modif NO STANDARD PAGE HEADING
LINE-SIZE 130.


TABLES: marm.
*********************************************************************
**************** Declaracion de tablas       ************************
*-------> definicion de tablas

*-------> tablas internas
DATA: BEGIN OF ti_mater OCCURS 0,
       matnr(18),           " material
       umrem(6),            " cantidad en U.M. Alternativa
       meinh(3),            " Unidad de medida alternativa
       umrez(6),            " CAntidad en U.M. Base
       ean11(18),           " Codigo EAN
       numtp(2),            " Tipo EAN
       laeng(17),
       breit(17),
       hoehe(17),
       meabm(3),
       volum(17),
       voleh(3),
       brgew(17),
       gewei(3),
       azsub(10),
       mesub(3),
      END OF ti_mater.

************************ declaracion de variables *******************

DATA: bapi_head LIKE bapimathead,
      bapi_return LIKE bapiret2.

DATA: BEGIN OF unitsofmeasure OCCURS 100.
        INCLUDE STRUCTURE bapi_marm.
DATA: END OF unitsofmeasure.

DATA: BEGIN OF unitsofmeasurex OCCURS 100.
        INCLUDE STRUCTURE bapi_marmx.
DATA: END OF unitsofmeasurex.


*********************************************************************
**************** Pantalla de seleccion inicial  *********************
*********************************************************************
SELECTION-SCREEN SKIP 1.
SELECTION-SCREEN BEGIN OF BLOCK blk_1 WITH FRAME TITLE text-001.
*
**-----------> fichero
PARAMETERS: p_fich LIKE rlgrap-filename DEFAULT 'C:\UNIDADES.TXT'.
SELECTION-SCREEN END OF BLOCK blk_1.

**************** Programa Principal *********************************
*********************************************************************

START-OF-SELECTION.

* Carga de datos desde el fichero
  PERFORM cargar_datos_de_excel.

* Modificamos las unidades de medida.
  PERFORM bapi_material_savedata.



END-OF-SELECTION.

*&---------------------------------------------------------------------*
*&      Form  CARGAR_DATOS_DE_EXCEL
*&---------------------------------------------------------------------*
FORM cargar_datos_de_excel.
* cargamos los datos del fichero de excel guardado en formato de
* texto con tabulaciones
  CLEAR: ti_mater.
  REFRESH: ti_mater.
  CALL FUNCTION 'UPLOAD'
       EXPORTING
*           CODEPAGE                = 'IBM '
            filename                = p_fich
            filetype                = 'DAT'
       TABLES
            data_tab                = ti_mater
       EXCEPTIONS
            conversion_error        = 1
            invalid_table_width     = 2
            invalid_type            = 3
            no_batch                = 4
            unknown_error           = 5
            gui_refuse_filetransfer = 6
            OTHERS                  = 7.

ENDFORM.                    " CARGAR_DATOS_DE_EXCEL

*&---------------------------------------------------------------------*
*&      Form  BAPI_MATERIAL_SAVEDATA
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM bapi_material_savedata .

  LOOP AT ti_mater.
    CLEAR: unitsofmeasure,   unitsofmeasurex,
           unitsofmeasure[], unitsofmeasurex[].

* Cabecera
    bapi_head-material = ti_mater-matnr.

* Unidades de Medida
    unitsofmeasure-alt_unit    = ti_mater-meinh.
    unitsofmeasurex-alt_unit   = ti_mater-meinh.

    unitsofmeasure-alt_unit_iso    = ti_mater-meinh.
    unitsofmeasurex-alt_unit_iso   = ti_mater-meinh.

    unitsofmeasure-numerator   = ti_mater-umrez.
    unitsofmeasurex-numerator  = 'X'.

    unitsofmeasure-denominatr  = ti_mater-umrem.
    unitsofmeasurex-denominatr = 'X'.
    APPEND unitsofmeasure.
    APPEND unitsofmeasurex.


    CALL FUNCTION 'BAPI_MATERIAL_SAVEDATA'
     EXPORTING
       headdata = bapi_head
*      clientdata = bapi_mara1
*      clientdatax = bapi_marax
*      plantdata = bapi_marc1
*      plantdatax = bapi_marcx
*      FORECASTPARAMETERS =
*      FORECASTPARAMETERSX =
*      PLANNINGDATA =
*      PLANNINGDATAX =
*      STORAGELOCATIONDATA =
*      STORAGELOCATIONDATAX =
*      valuationdata = bapi_mbew1
*      valuationdatax = bapi_mbewx
*      WAREHOUSENUMBERDATA =
*      WAREHOUSENUMBERDATAX =
*      SALESDATA = BAPI_MVKE1
*      SALESDATAX = BAPI_MVKEX
*      STORAGETYPEDATA =
*      STORAGETYPEDATAX =
     IMPORTING
       return = bapi_return
     TABLES
*      materialdescription = int_makt
       unitsofmeasure = unitsofmeasure
       unitsofmeasurex = unitsofmeasurex
*      INTERNATIONALARTNOS =
*      MATERIALLONGTEXT =
*      TAXCLASSIFICATIONS =
*      RETURNMESSAGES =
*      PRTDATA =
*      PRTDATAX =
*      EXTENSIONIN =
*      EXTENSIONINX =
                          .

    IF bapi_return-type = 'E'.
      WRITE:/ 'Error Message: ', bapi_return-number, bapi_return-id.
    ENDIF.

  ENDLOOP.

ENDFORM.                    " BAPI_MATERIAL_SAVEDATA


Un saludo y espero que te sirva de algo.


Desconectado luar2330

  • Novato
  • *
  • Mensajes: 6
    • Ver Perfil
Re: BAPI para modificar unidades de medida de los materiales
« Respuesta #2 en: 01 de Junio de 2011, 08:34:39 pm »

Hola dLuis,

               Una pregunta esta bapi, BAPI_MATERIAL_SAVEDATA, me podria servir para modificar los EANs, adicionales que tiene el material como insertar nuevos, borrar y cambiar el EAN, principal. Porque en la tabla MEAN estan los EANs, adicionales de un material y en esta tabla tambien esta el EAN, que esta como principal.

De antemano gracias y saludos.

Dejo mi correo, raul2330@hotmail.com

Saludos.

Desconectado dluis

  • Usuario Jr
  • **
  • Mensajes: 27
    • Ver Perfil
Re: BAPI para modificar unidades de medida de los materiales
« Respuesta #3 en: 02 de Junio de 2011, 09:44:49 am »
Hola Raul,

te pego un perform donde tengo actualizados los EAN a nivel de maestro de material. Entiendo que tiene que modificar tambien la MEAN, pero mejor compruebalo tu mismo.

Te remarco en rojo donde muevo los EAN... Saludos.

*&---------------------------------------------------------------------*
*&      Form  BAPI_ACTUALIZAR_MATERIAL
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
FORM bapi_actualizar_material .

  DATA: mara_tmp LIKE mara.
  DATA: marm_tmp LIKE marm.
  DATA: lf_add(1).

  DATA: lf_idioma         TYPE sy-langu .
  DATA: lf_peso_bruto_umb LIKE marm-brgew.
  DATA: lf_brgew_uv       LIKE marm-brgew.
  DATA: lf_ntgew_umb      LIKE mara-ntgew.
  DATA: lf_ntgew_uv       LIKE marm-brgew.



  CLEAR: bapi_marm,   bapi_marmx,
         bapi_marm[], bapi_marmx[], lf_add.

  SELECT SINGLE * INTO mara_tmp FROM mara
          WHERE matnr = i_alv-matnr.


*-- Cabecera
  bapi_head-material = i_alv-matnr.

*-- Actualizamos datos del material a nivel de mandante
*   bapi_mara1-net_weight       = i_alv-uc_ntgew.  " Peso Neto
*   bapi_marax-net_weight       = 'X'.
*   bapi_mara1-doc_type         = i_alv-marca.     " Marca
*   bapi_marax-doc_type         = 'X'.
  IF mara_tmp-mhdhb <> i_alv-mhdhb.
    bapi_mara1-shelf_life       = i_alv-mhdhb.     "Duración conserv.
    bapi_marax-shelf_life       = 'X'.
  ENDIF.


*-- Actualizamos la Descripción del Material
  CALL FUNCTION 'CONVERSION_EXIT_ISOLA_INPUT'
    EXPORTING
      input            = i_alv-idioma
    IMPORTING
      output           = lf_idioma
    EXCEPTIONS
      unknown_language = 1
      OTHERS           = 2.

*  REFRESH it_makt.
*  it_makt-langu     = lf_idioma.
*  it_makt-matl_desc = i_alv-maktx.
*  APPEND it_makt.


  CLEAR lf_add.
  SELECT SINGLE * INTO marm_tmp FROM marm
          WHERE matnr = i_alv-matnr
            AND meinh = 'UC'.
*-- Actualizamos las medidas de las Unidades de Consumo
  IF marm_tmp-umrez <> i_alv-uc_unidades.
    bapi_marm-numerator     = i_alv-uc_unidades.
    bapi_marmx-numerator    = 'X'.
    lf_add = 'X'.
  ENDIF.
  IF marm_tmp-laeng <> i_alv-uc_laeng.
    bapi_marm-length        = i_alv-uc_laeng.   " Longitud
    bapi_marmx-length       = 'X'.
    lf_add = 'X'.
  ENDIF.
  IF marm_tmp-breit <> i_alv-uc_breit.
    bapi_marm-width         = i_alv-uc_breit.   " Ancho
    bapi_marmx-width        = 'X'.
    lf_add = 'X'.
  ENDIF.
  IF marm_tmp-hoehe <> i_alv-uc_hoehe.
    bapi_marm-height        = i_alv-uc_hoehe.   " Altura
    bapi_marmx-height       = 'X'.
    lf_add = 'X'.
  ENDIF.
  IF marm_tmp-brgew <> i_alv-uc_brgew.
    bapi_marm-gross_wt      = i_alv-uc_brgew.   " Peso Bruto
    bapi_marmx-gross_wt     = 'X'.
    lf_add = 'X'.
  ENDIF.
  IF marm_tmp-ean11 <> i_alv-ean_uc.
    bapi_marm-ean_upc       = i_alv-ean_uc.
    bapi_marmx-ean_upc      = 'X'.

    lf_add = 'X'.
  ENDIF.
  IF lf_add = 'X'.
    bapi_marm-alt_unit      = 'UC'.
    bapi_marmx-alt_unit     = 'UC'.
    bapi_marm-alt_unit_iso  = 'UC'.
    bapi_marmx-alt_unit_iso = 'UC'.

    APPEND bapi_marm.
    APPEND bapi_marmx.
  ENDIF.



  CLEAR lf_add.
  SELECT SINGLE * INTO marm_tmp FROM marm
          WHERE matnr = i_alv-matnr
            AND meinh = 'UV'.
*-- Actualizamos las medidas de las Unidades de Venta (Agrupaciones)
  IF marm_tmp-umrez <> i_alv-uv_unidades.
    bapi_marm-numerator     = i_alv-uv_unidades.
    bapi_marmx-numerator    = 'X'.
    lf_add = 'X'.
  ENDIF.
  IF marm_tmp-laeng <> i_alv-uv_laeng.
    bapi_marm-length        = i_alv-uv_laeng.   " Longitud
    bapi_marmx-length       = 'X'.
    lf_add = 'X'.
  ENDIF.
  IF marm_tmp-breit <> i_alv-uv_breit.
    bapi_marm-width         = i_alv-uv_breit.   " Ancho
    bapi_marmx-width        = 'X'.
    lf_add = 'X'.
  ENDIF.
  IF marm_tmp-hoehe <> i_alv-uv_hoehe.
    bapi_marm-height        = i_alv-uv_hoehe.   " Altura
    bapi_marmx-height       = 'X'.
    lf_add = 'X'.
  ENDIF.
  IF marm_tmp-brgew <> i_alv-uv_brgew.
    bapi_marm-gross_wt      = i_alv-uv_brgew.   " Peso Bruto
    bapi_marmx-gross_wt     = 'X'.
    lf_add = 'X'.
  ENDIF.
  IF marm_tmp-ean11 <> i_alv-ean_uv.
    bapi_marm-ean_upc       = i_alv-ean_uv.
    bapi_marmx-ean_upc      = 'X'.

    lf_add = 'X'.
  ENDIF.
  IF lf_add = 'X'.
    bapi_marm-alt_unit      = 'UV'.
    bapi_marmx-alt_unit     = 'UV'.
    bapi_marm-alt_unit_iso  = 'UV'.
    bapi_marmx-alt_unit_iso = 'UV'.
    APPEND bapi_marm.
    APPEND bapi_marmx.
  ENDIF.


  CLEAR lf_add.
  SELECT SINGLE * INTO marm_tmp FROM marm
          WHERE matnr = i_alv-matnr
            AND meinh = 'UV'.
*-- Actualizamos las medidas de los Palets
  bapi_marm-numerator = i_alv-uv_unidades * i_alv-pal_cpp *
                                            i_alv-pal_cpc.
  bapi_marmx-numerator = 'X'.
  IF marm_tmp-laeng <> i_alv-pal_laeng.
    bapi_marm-length        = i_alv-pal_laeng.   " Longitud
    bapi_marmx-length       = 'X'.
    lf_add = 'X'.
  ENDIF.
  IF marm_tmp-breit <> i_alv-pal_breit.
    bapi_marm-width         = i_alv-pal_breit.   " Ancho
    bapi_marmx-width        = 'X'.
    lf_add = 'X'.
  ENDIF.
  IF marm_tmp-hoehe <> i_alv-pal_hoehe.
    bapi_marm-height        = i_alv-pal_hoehe.   " Altura
    bapi_marmx-height       = 'X'.
    lf_add = 'X'.
  ENDIF.
  IF marm_tmp-brgew <> i_alv-pal_brgew.
    bapi_marm-gross_wt      = i_alv-pal_brgew.   " Peso Bruto
    bapi_marmx-gross_wt     = 'X'.
    lf_add = 'X'.
  ENDIF.
  IF lf_add = 'X'.
    bapi_marm-alt_unit      = 'PAL'.
    bapi_marmx-alt_unit     = 'PAL'.
    bapi_marm-alt_unit_iso  = 'PAL'.
    bapi_marmx-alt_unit_iso = 'PAL'.
    APPEND bapi_marm.
    APPEND bapi_marmx.
  ENDIF.


  CLEAR lf_add.
  SELECT SINGLE * INTO marm_tmp FROM marm
          WHERE matnr = i_alv-matnr
            AND meinh = 'UF'.
*-- Actualizamos los EAN del la Unidad Ficticea.
  IF marm_tmp-ean11 <> i_alv-ean_uf.
    bapi_marm-alt_unit      = 'UF'.
    bapi_marmx-alt_unit     = 'UF'.
    bapi_marm-alt_unit_iso  = 'UF'.
    bapi_marmx-alt_unit_iso = 'UF'.
    bapi_marm-ean_upc       = i_alv-ean_uf.
    bapi_marmx-ean_upc      = 'X'.

    APPEND bapi_marm.
    APPEND bapi_marmx.
  ENDIF.


  CLEAR lf_add.
  SELECT SINGLE * INTO marm_tmp FROM marm
          WHERE matnr = i_alv-matnr
            AND meinh = 'CPP'.
*-- Actualizamos las Unidades de medida base de las "Capas Por Palet"
  IF marm_tmp-umrez <> i_alv-pal_cpp.
    bapi_marm-alt_unit      = 'CPP'.
    bapi_marmx-alt_unit     = 'CPP'.
    bapi_marm-alt_unit_iso  = 'CPP'.
    bapi_marmx-alt_unit_iso = 'CPP'.
    bapi_marm-numerator     = i_alv-pal_cpp.
    bapi_marmx-numerator    = 'X'.
    APPEND bapi_marm.
    APPEND bapi_marmx.
  ENDIF.

  CLEAR lf_add.
  SELECT SINGLE * INTO marm_tmp FROM marm
          WHERE matnr = i_alv-matnr
            AND meinh = 'CPC'.
*-- Actualizamos las Unidades de medida base de las "Cajas Por Capa"
  IF marm_tmp-umrez <> i_alv-pal_cpc.
    bapi_marm-alt_unit      = 'CPC'.
    bapi_marmx-alt_unit     = 'CPC'.
    bapi_marm-alt_unit_iso  = 'CPC'.
    bapi_marmx-alt_unit_iso = 'CPC'.
    bapi_marm-numerator     = i_alv-pal_cpc.
    bapi_marmx-numerator    = 'X'.
    APPEND bapi_marm.
    APPEND bapi_marmx.
  ENDIF.



*-- Calculamos el Peso bruto de la Unidad de medida Base del Material
  CLEAR: lf_peso_bruto_umb, lf_brgew_uv, lf_ntgew_umb, lf_ntgew_uv.
  SELECT SINGLE * FROM mara
                 WHERE matnr = i_alv-matnr.
  SELECT SINGLE * FROM marm
                 WHERE matnr = i_alv-matnr
                   AND meinh = 'UV'.
* Calculamos el Peso Neto de la UV.
  CALL FUNCTION 'MEINH_BRGEW'
    EXPORTING
      bme_ntgew = mara-ntgew
      ame_brgew = marm-brgew
      bme_gewei = mara-gewei
      ame_gewei = marm-gewei
      umrez     = marm-umrez
      umren     = marm-umren
      p_message = 'N'
    IMPORTING
      ame_ntgew = lf_ntgew_uv
    EXCEPTIONS
      OTHERS    = 1.

  lf_brgew_uv  = marm-brgew.
  lf_ntgew_umb = mara-ntgew.
  lf_peso_bruto_umb = lf_brgew_uv * lf_ntgew_umb / lf_ntgew_uv.


*    bapi_marm-alt_unit      = mara-meins.
*    bapi_marmx-alt_unit     = 'X'.
*    bapi_marm-alt_unit_iso  = mara-meins.
*    bapi_marmx-alt_unit_iso = 'X'.
*    bapi_marm-gross_wt      = lf_peso_bruto_umb.   " Peso Bruto UMB
*    bapi_marmx-gross_wt     = 'X'.
*    APPEND bapi_marm.
*    APPEND bapi_marmx.



*-- Plant - Purchasing
*   bapi_marc1-plant     = i_alv-werks.
*   bapi_marcx-plant     = 'X'.



  CLEAR: ls_return, lt_returnmessages, lt_returnmessages[].
  CALL FUNCTION 'BAPI_MATERIAL_SAVEDATA'
   EXPORTING
     headdata             = bapi_head
     clientdata           = bapi_mara1
     clientdatax          = bapi_marax
*    plantdata            = bapi_marc1
*    plantdatax           = bapi_marcx
*    FORECASTPARAMETERS   =
*    FORECASTPARAMETERSX  =
*    PLANNINGDATA         =
*    PLANNINGDATAX        =
*    STORAGELOCATIONDATA  =
*    STORAGELOCATIONDATAX =
*    valuationdata        = bapi_mbew1
*    valuationdatax       = bapi_mbewx
*    WAREHOUSENUMBERDATA  =
*    WAREHOUSENUMBERDATAX =
*    SALESDATA            = BAPI_MVKE1
*    SALESDATAX           = BAPI_MVKEX
*    STORAGETYPEDATA      =
*    STORAGETYPEDATAX     =
   IMPORTING
     return               = ls_return
   TABLES
     materialdescription  = it_makt
     unitsofmeasure       = bapi_marm
     unitsofmeasurex      = bapi_marmx
     returnmessages       = lt_returnmessages
*    INTERNATIONALARTNOS  =
*    MATERIALLONGTEXT     =
*    TAXCLASSIFICATIONS   =
*    RETURNMESSAGES       =
*    PRTDATA              =
*    PRTDATAX             =
*    EXTENSIONIN          =
*    EXTENSIONINX         =
                           .


  IF ls_return-type = 'E'.
    gf_err_bapi_material_savedata = 'E'.

    LOOP AT lt_returnmessages WHERE id     <> 'MK'
                                AND number <> '102'
                                AND number <> '103'.

      CALL FUNCTION 'POPUP_DISPLAY_MESSAGE'
        EXPORTING
          titel = 'Log'
          msgid = lt_returnmessages-id
          msgty = 'I'
          msgno = lt_returnmessages-number
          msgv1 = lt_returnmessages-message_v1
          msgv2 = lt_returnmessages-message_v2
          msgv3 = lt_returnmessages-message_v3
          msgv4 = lt_returnmessages-message_v4.

    ENDLOOP.
  ENDIF.

  CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'.

ENDFORM.                    " BAPI_ACTUALIZAR_MATERIAL