Mostrar Mensajes

Esta sección te permite ver todos los posts escritos por este usuario. Ten en cuenta que sólo puedes ver los posts escritos en zonas a las que tienes acceso en este momento.


Mensajes - dluis

Páginas: [1] 2
1
Módulos funcionales / Re:Abrir periodo contable
« en: 05 de Enero de 2018, 10:46:21 am »
Hola, me contesto a mi mismo. No hay nada como buscar un poco en Google. Esto esta copiado de otro foro donde explica bien este tema.

---

Lo primero es saber que aunque estemos en la parte del proceso logístico, normalmente lo realiza el área financiera, sin embargo en algún lado se pierde la información y no queda en la empresa o al menos en el área correspondiente.

Segundo, hay que entender que hay dos periodos relevantes:

  • Periodo Contable.
  • Periodo Logístico.

El PERIODO CONTABLE es simple, por la Tx. OB52 lo actualizan, pueden tener todos los periodos del ejercicio abierto si así lo requieren.
El que se pone oscuro es el Periodo Logístico, bien, operacionalmente no se debería abrir periodos anteriores una vez han sido cerrados (Mas que todo por los temas tributarios), sin embargo SAP permite tener hasta dos periodos logísticos abiertos.

En la Tx. MMPV podrán desplazar los PERIODOS LOGÍSTICOS y podrán mantener el periodo anterior abierto o no de acuerdo a los parámetro que ingresen en la siguiente Tx que les quiero explicar. También pueden permitir cantidades y valores negativos en el mes pasado (Utilizado comúnmente en la solución SAP Retail).

Con la MMRV podrán abrir o cerrar las contabilizaciones solo en el periodo anterior, y establecer la forma en que deben quedar los periodos al desplazar un nuevo periodo por la MMPV, es decir, permitir o no contabilizaciones en el mes pasado automáticamente al ejecutar la MMPV.

Hay otra transacción que es la MMPI, al menos yo la he utilizado en la inicialización de los periodos logísticos cuando recién se instala SAP... (Se ejecuta dentro de los programas de inicialización de SAP por así decirlo)

Ahora lo que viene es bueno!. ¿Cómo abrir periodos logísticos anteriores al mes pasado? ....

La transacción es la OMSY!!!! (No se la digan a nadie)...

Esta transacción pertenece al árbol de configuración del sistema (SPRO), por ende, solo la pueden obtener a través del área de sistema y NO SE RECOMIENDA SU UTILIZACIÓN SIN EXPERTOS SAP LOGÍSTICOS llamados consultores MM... este desplazamiento debe realizarse exclusivamente cuando nadie más esté conectado a SAP, es decir, el área de sistemas debe bloquear el acceso a todos los usuarios de la organización durante el proceso. PLOP!!! (Obtén primero el permiso de la gerencia TI, el permiso de los gerente de Finanzas.... y el experto SAP... solo así lograrán su cometido).

¿Porque bloquear el acceso a los usuarios?. R: No van a poder contabilizar nada en el periodo actual y podrían colocar una fecha correspondiente al mes anterior por lo que ya no sería un escenario controlado y podrían generar problemas en finanzas y contabilidad. (Tributariamente!!!)

Espero les sirva de algo esta información.

P.D. La OMSY por ser una transacción de configuración, no podrá ser ejecutada si el mandante está cerrado para configuración..... además el mandante no debe pedir orden de transporte. Una vez finalizado el proceso inmediatamente se debe cerrar el mandante.

2
Módulos funcionales / Abrir periodo contable
« en: 05 de Enero de 2018, 10:32:22 am »
Hola,

No tengo al funcional que está de vacaciones.
¿Alguien me puede explicar un poco el tema de como abrir un periodo contable?

Gracias,

3
Programación ABAP / Re:Como obtengo el "Texto comercial de la tx mm02"
« en: 21 de Noviembre de 2014, 12:59:38 pm »
Hola, mira este enlace.

Tiene que ser algo muy similar... http://www.abap.es/foro/index.php?topic=1015.msg2051#msg2051

4
ALV / Re:color de lineas en alvgrid
« en: 11 de Diciembre de 2013, 10:28:41 am »
Veremos si te he entendido bien...

Crea un campo nuevo tipo flag y marcas con una 'X' la filas donde hayas realizado el doble click y cuando regreses al primer listado graba la línea con la 'X' marcada. Así cuando vuelvas al segundo listado nuevamente sabrás que líneas has mirado y las vuelves a colorear de amarillo.



5
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



6
Programación ABAP / Re: DUMP por entrada masiva en un select
« en: 11 de Marzo de 2011, 01:12:59 pm »
Hola Andrea,

¿Me puedes decir cual es tu variable que contiene tantos registros?

¿Si te pasa lo mismo porque no aplicas la solución que se ha mencionado?


Saludos

7
Programación ABAP / Re: BAPI_PO_CHANGE para cambiar ekpo-bsgru
« en: 23 de Julio de 2010, 09:09:38 am »
Hola, igual es un poco tontería preguntártelo, pero le estas haciendo el LOOP a las posiciones?

Algo así, aunque sería bueno ver mas de tu código para entender el problema.

Código: [Seleccionar]
LOOP AT  it_ekpo.
   CLEAR t_poitem.
*  perform move_to_bapi.
   t_POITEM-po_item = it_ekpo-ebelp.
   t_POITEM-order_reason = '100'.
   APPEND t_poitem.

   CLEAR t_poitemx.
   t_POITEMx-po_item = it_ekpo-ebelp.
   t_POITEMx-po_itemx = 'X'.
   t_POITEMx-order_reason = '100'.
   APPEND t_poitemx.
ENDLOOP.

   CALL FUNCTION 'BAPI_PO_CHANGE'
   EXPORTING
   purchaseorder = it_ekpo-ebeln
   TABLES
   POITEM  = t_POITEM
   POITEMx = t_POITEMx.

Salu2.

8
Programación ABAP / Re: Aplicar nota sap
« en: 19 de Mayo de 2010, 06:14:13 pm »
Hola Lorenzo,

Has intentado aplicar la nota a través de la transacción SNOTE?


9
ALV / Re: Campo Checkbox en REUSE_ALV_GRID_DISPLAY_LVC
« en: 27 de Abril de 2010, 06:48:25 pm »
Hola,

Una primera pregunta... ¿necesitas que te salte el hotspot en un campo checkbox y editable?

Por otro lado, en principio tiene que marcarse el campo con una 'X' sin hacer nada en especial. Quizás nos falta un poco mas de información.

Si quieres pegar el programa aquí lo podremos ojear y comentarte algo.


Un saludo.

10
Módulos funcionales / Re: formulario por mail tras grabar pedido
« en: 24 de Marzo de 2010, 07:09:04 pm »
Encontré algo por la red que explicaba algo sobre la nota numero 852250, en ella viene un zip con unos cuantos smartforms de compras y los programas de control. En ella te explica como instalarlos.

Espero que te sirva. Yo no lo he usado todavía.

11
Formularios / Re: DETALLE de Factura Exportacion en SAPSCRIPT MAIN
« en: 17 de Marzo de 2010, 08:52:58 am »
Hola, lo que yo suelo hacer en estos casos es crearme un nuevo Elemento de Texto en la MAIN.

Son los que tienen en el párrafo la línea de comando /E.

Un ejemplo sería.

Código: [Seleccionar]
* DATOS DE LA POSICION
  LOOP AT TI_ZPROPUESTA.
    COSTO_TOTAL = COSTO_TOTAL + TI_ZPROPUESTA-PREIS.
    ti_zpropuesta-unit = ti_zpropuesta-preis / ti_zpropuesta-menge.
    PERFORM nuevo_elemento USING 'ITEM_LINE_1' 'MAIN'.
  ENDLOOP.

Código: [Seleccionar]
*&---------------------------------------------------------------------*
*&      Form  escribir_formulario: Escribimos en el formulario
*&---------------------------------------------------------------------*
*      -->ELEMENTO DEL FORMULARIO
*      -->VENTANA DEL FORMULARIO
*----------------------------------------------------------------------*

FORM nuevo_elemento USING VALUE(ELEMENTO)
                          VALUE(VENTANA).

  CALL FUNCTION 'WRITE_FORM'
       EXPORTING
            ELEMENT = ELEMENTO
            WINDOW  = VENTANA.

ENDFORM.                    " escribir_formulario


12
Programación ABAP / Re: Texto - Datos Basicos del Material
« en: 09 de Marzo de 2010, 05:21:38 pm »
Puedes utilizar la función READ_TEXT_INLINE, te agrego un ejemplo.



  TYPES: it_lin LIKE  tline.

  DATA: it_lines TYPE TABLE OF it_lin,
        it_inline TYPE TABLE OF it_lin,
        line TYPE it_lin.
  DATA: lf_matnr     LIKE mara-matnr,
        lf_matnr_tmp LIKE  thead-tdname.


  CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
    EXPORTING
      input  = i_datos-matnr
    IMPORTING
      output = lf_matnr.

  MOVE lf_matnr TO lf_matnr_tmp.
  IF p_langu IS INITIAL.
    p_langu = 'S'.
  ENDIF.

  CALL FUNCTION 'READ_TEXT_INLINE'
    EXPORTING
      id              = 'GRUN'
      inline_count    = 1
      language        = p_langu
      name            = lf_matnr_tmp
      object          = 'MATERIAL'
    TABLES
      inlines         = it_inline
      lines           = it_lines
    EXCEPTIONS
      id              = 1
      language        = 2
      name            = 3
      not_found       = 4
      object          = 5
      reference_check = 6
      OTHERS          = 7.

  IF sy-subrc <> 0.
    MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
    WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
  ENDIF.

* READ TABLE it_lines INTO line INDEX 1.

  LOOP AT it_lines INTO line.
    CONCATENATE i_datos-txt_datos_basicos line-tdline
           INTO i_datos-txt_datos_basicos SEPARATED BY space.
  ENDLOOP.


13
Programación ABAP / Re: authority check en una query
« en: 25 de Febrero de 2010, 03:26:24 pm »
Hola,

si entras dentro de la query, en el menu superior vas a:

Pasar a --> Codings

Te saldrá un menú conde puedes entrar y meter el código que quieras.

Saludos.

14
Programación ABAP / Re: DUMP por entrada masiva en un select
« en: 25 de Febrero de 2010, 03:23:08 pm »
Hola.

Yo lo primero que haría sería intentar quitar ese SELECT... ENDSELECT. Y cambiarlo por un LOOP a una tabla interna, mas viendo la cantidad de registros a los que accede.
Pero... sin modificar mucho tu código de pongo un ejemplo de lo que puedes hacer.
Simplemente sería hacer paquetes de 5.000 registros, como por ejemplo...



  RANGES r_matnr_tmp FOR r_matnr.
 
  DATA: lf_lines TYPE i.
  DATA: lf_desde TYPE i,
        lf_hasta TYPE i.

  DO.
    CLEAR: r_matnr_tmp[], r_matnr_tmp.

    lf_desde = lf_hasta + 1.
    lf_hasta = 5000 + lf_hasta.
    APPEND LINES OF r_matnr FROM lf_desde TO lf_hasta TO r_matnr_tmp.


    DESCRIBE TABLE r_matnr_tmp LINES lf_lines.
    IF lf_lines = 0.
      EXIT.
    ENDIF.

    SELECT * FROM cdhdr WHERE objectclas EQ 'MATERIAL'
                          AND objectid   IN r_matnr_tmp.

      CHECK cdhdr-change_ind = 'U'.
      CHECK cdhdr-udate IN s_laeda.
      MOVE-CORRESPONDING cdhdr TO i_cdhdr.
      APPEND i_cdhdr.
    ENDSELECT.

  ENDDO.


15
Programación ABAP / Re: BAPI para modificar unidades de medida de los materiales
« 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.


Páginas: [1] 2