Foro de programación ABAP
SAP / ABAP => Programación ABAP => Mensaje iniciado por: molaci 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.
-
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.
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.
-
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.
-
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