Errores en tiempo de ejecución ABAP

Colapsar
X
 
  • Tiempo
  • Mostrar
Limpiar Todo
nuevos mensajes
  • feredgar
    Junior Member
    • ene
    • 5

    #1

    Errores en tiempo de ejecución ABAP

    Hola:

    estoy generando un reporte en una transacción Zeta el cual al filtrarlo con un rango amplio de proveedores por ejemplo, me marca un error en tiempo de ejecución... este mismo reporte si lo genero por uno o pocos proveedores me lo genera bien... a alguien le ha pasado? como puedo corregirlo? el error es:

    Err.tmpo.ejec. BCD_FIELD_OVERFLOW
    Excep. CX_SY_CONVERSION_OVERFLOW
    Fecha y hora 09.05.2012 12:34:32



    Texto breve
    A calculation field is defined too small.



    ¿Qué ha sucedido?
    Error in the ABAP Application Program

    The current ABAP program "SAPLZMZA" had to be terminated because it has
    come across a statement that unfortunately cannot be executed.



    ¿Qué puede hacer?
    Note down which actions and inputs caused the error.


    To process the problem further, contact you SAP system
    administrator.

    Using Transaction ST22 for ABAP Dump Analysis, you can look
    at and manage termination messages, and you can also
    keep them for a long time.



    Anál.errores
    An exception occurred that is explained in detail below.
    The exception, which is assigned to class 'CX_SY_CONVERSION_OVERFLOW', was not
    caught in
    procedure "ZMM_CALC_DIAS_INVENTARIO" "(FUNCTION)", nor was it propagated by a
    RAISING clause.
    Since the caller of the procedure could not have anticipated that the
    exception would occur, the current program is terminated.
    The reason for the exception is:
    A value generated during processing is too large for the
    field "E_DINV" of the program "SAPLZMZA".



    as para corregir errores
    It may be possible to divide the current process into
    smaller units, so that only smaller values occur.
    Otherwise, as a long-term solution, define the field "E_DINV"
    larger.


    If the error occures in a non-modified SAP program, you may be able to
    find an interim solution in an SAP Note.
    If you have access to SAP Notes, carry out a search with the following
    keywords:

    "BCD_FIELD_OVERFLOW" "CX_SY_CONVERSION_OVERFLOW"
    "SAPLZMZA" or "LZMZAU02"
    "ZMM_CALC_DIAS_INVENTARIO"

    If you cannot solve the problem yourself and want to send an error
    notification to SAP, include the following information:

    1. The description of the current problem (short dump)

    To save the description, choose "System->List->Save->Local File
    (Unconverted)".
    2. Corresponding system log

    Display the system log by calling transaction SM21.
    Restrict the time interval to 10 minutes before and five minutes
    after the short dump. Then choose "System->List->Save->Local File
    (Unconverted)".

    3. If the problem occurs in a problem of your own or a modified SAP
    program: The source code of the program
    In the editor, choose "Utilities->More
    Utilities->Upload/Download->Download".

    4. Details about the conditions under which the error occurred or which
    actions and input led to the error.

    The exception must either be prevented, caught within proedure
    "ZMM_CALC_DIAS_INVENTARIO" "(FUNCTION)", or its possible occurrence must be
    declared in the
    RAISING clause of the procedure.
    To prevent the exception, note the following:

    Gracias....
  • DCErick
    Moderator
    • mar
    • 1090

    #2
    The reason for the exception is:
    A value generated during processing is too large for the
    field "E_DINV" of the program "SAPLZMZA".
    Dile a tu ABAP que te lo arregle .
    -------------------
    ¿Dudas para descargar manuales? Ver este tema -> Cómo descargar manuales de la sección "Descargas" ?

    Comentario

    • Duarco
      Member
      • jun
      • 54

      #3
      Al parecer tu error esta en que hay alguna consulta donde se usan demasiados datos para filtrar la informacion, en este caso parece ser el campo E_DINV, Intena buscar una forma donde la consulta se filtre por rangos de seleccion, es decir, en lugar de filtrar por:

      Campo = 1
      Campo = 2
      Campo = 3
      Campo = 4
      Campo = 5

      filtra:

      Campo este entre 1 y 5


      espero haber sido de ayuda....

      Comentario

      • feredgar
        Junior Member
        • ene
        • 5

        #4
        Gracias, ese campo lo tengo dentro de una función y ahi esta tronando... aunque filtre por rangos, ya hice la prueba... voy a tener que verlo con un abap....
        Saludos.

        Comentario

        • feredgar
          Junior Member
          • ene
          • 5

          #5
          En sí me están sucediendo dos casos en dos transaccioens diferentes. En el primero es una tx ZETA y el detalle del error dice:

          ----------------------------------------------------------------------------------------------------
          |Info posición de cancelación |
          | Termination occurred in the ABAP program "SAPLZMZA" - in |
          | "ZMM_CALC_DIAS_INVENTARIO". |
          | The main program was "ZMM_DATOS_COMPRAS_1_BK ". |
          | |
          | In the source code you have the termination point in line 345 |
          | of the (Include) program "LZMZAU02". |
          | The termination is caused because exception "CX_SY_CONVERSION_OVERFLOW" |
          | occurred in |
          | procedure "ZMM_CALC_DIAS_INVENTARIO" "(FUNCTION)", but it was neither handled |
          | locally nor declared |
          | in the RAISING clause of its signature. |
          | |
          | The procedure is in program "SAPLZMZA "; its source code begins in line |
          | 1 of the (Include program "LZMZAU02 ". |
          ----------------------------------------------------------------------------------------------------

          ----------------------------------------------------------------------------------------------------
          |Detalle código fuente |
          ----------------------------------------------------------------------------------------------------
          |Lín. |Txt.fte. |
          ----------------------------------------------------------------------------------------------------
          | 315| CLEAR: w_sales, w_max_sales. |
          | 316| |
          | 317| |
          | 318|*Venta diaria = ( Acumulado de venta de las últimas 4 semanas ) / 28 días (valor fijo). |
          | 319| w_vta_diaria = t_sales / ( i_wnumb * 7 ). |
          | 320|*Existencia actual en días = ( Existencia en piezas + Stock tránsito ) / Venta diaria |
          | 321| CATCH SYSTEM-EXCEPTIONS bcd_zerodivide = 1 |
          | 322| compute_bcd_overflow = 2. |
          | 323| w_exis_dias = ( existencia + stock ) / w_vta_diaria. |
          | 324| ENDCATCH. |
          | 325|*Inventario en días = Existencia actual en días – Tiempo de entrega del proveedor. |
          | 326|******************** BEGIN OF DELETE JARC 09032012 ********************* |
          | 327|** w_invent_dias = w_exis_dias - tiempo_entrega. |
          | 328|********************* END OF DELETE JARC 09032012 ********************** |
          | 329|******************** BEGIN OF INSERT JARC 09032012 ********************* |
          | 330| w_invent_dias = w_exis_dias. |
          | 331|********************* END OF INSERT JARC 09032012 ********************** |
          | 332|*Pedido en días = ( Cantidad pedida) / Venta diaria ) + Cantidad en pedidos pendientes de re|
          | 333| READ TABLE it_matp WITH KEY matnr = i_matnr. |
          | 334| CATCH SYSTEM-EXCEPTIONS bcd_zerodivide = 1 |
          | 335| compute_bcd_overflow = 2. |
          | 336| w_pedido_dias = ( it_matp-menge ) / w_vta_diaria. |
          | 337| ENDCATCH. |
          | 338|* Días de Inventario = Inventario en días + Pedido en días |
          | 339| w_dias_invent = w_invent_dias + w_pedido_dias. |
          | 340| |
          | 341| IF w_dias_invent < 0. |
          | 342| CLEAR w_dias_invent. |
          | 343| ENDIF. |
          | 344| |
          |>>>>>| MOVE: w_dias_invent TO e_dinv, |
          | 346| w_vta_diaria TO e_vtad, |
          | 347| existencia TO e_stock, |
          | 348| stock TO e_stktr, |
          | 349| it_matp-menge TO e_ppend. |
          | 350| |
          | 351| CLEAR: t_sales. |
          | 352| |
          | 353|ENDFUNCTION. |
          ----------------------------------------------------------------------------------------------------

          en la segunda tx es la mb51 y el detalle con error es:
          ----------------------------------------------------------------------------------------------------
          |Info posición de cancelación |
          | Termination occurred in the ABAP program "RM07DOCS" - in "DATA_SELECTION". |
          | The main program was "RM07DOCS ". |
          | |
          | In the source code you have the termination point in line 334 |
          | of the (Include) program "RM07DOCS_GENERATED". |
          | The termination is caused because exception "CX_SY_OPEN_SQL_DB" occurred in |
          | procedure "DATA_SELECTION" "(FORM)", but it was neither handled locally nor |
          | declared |
          | in the RAISING clause of its signature. |
          | |
          | The procedure is in program "RM07DOCS "; its source code begins in line |
          | 302 of the (Include program "RM07DOCS_GENERATED ". |
          ----------------------------------------------------------------------------------------------------

          ----------------------------------------------------------------------------------------------------
          |Detalle código fuente |
          ----------------------------------------------------------------------------------------------------
          |Lín. |Txt.fte. |
          ----------------------------------------------------------------------------------------------------
          | 304|* Data selection routine for standard access |
          | 305| |
          | 306|* process SELECT command depending on the |
          | 307|* required material selection |
          | 308| if g_cnt_matnr_total > 0 and |
          | 309| g_cnt_matnr_total = g_cnt_matnr_i_eq. |
          | 310|* work with .. for all entries ... |
          | 311| select (g_t_fields) |
          | 312| into corresponding fields of table itab |
          | 313| from mkpf inner join mseg |
          | 314| on mkpf~mandt = mseg~mandt |
          | 315| and mkpf~mblnr = mseg~mblnr |
          | 316| and mkpf~mjahr = mseg~mjahr |
          | 317| for all entries in matnr |
          | 318| where matnr = matnr-low |
          | 319| and MKPF~BKTXT in BKTXT |
          | 320| and MKPF~BUDAT in BUDAT |
          | 321| and MSEG~BWART in BWART |
          | 322| and MSEG~CHARG in CHARG |
          | 323| and MSEG~EBELN in EBELN |
          | 324| and MSEG~KUNNR in KUNNR |
          | 325| and MSEG~LGORT in LGORT |
          | 326| and MSEG~LIFNR in LIFNR |
          | 327| and MSEG~SOBKZ in SOBKZ |
          | 328| and MSEG~UMWRK in UMWRK |
          | 329| and MKPF~USNAM in USNAM |
          | 330| and MKPF~VGART in VGART |
          | 331| and MSEG~WERKS in WERKS |
          | 332| and MKPF~XBLNR in XBLNR |
          | 333|. |
          |>>>>>| else. |
          | 335|* work with the select command as usual |
          | 336| select (g_t_fields) |
          | 337| into corresponding fields of table itab |
          | 338| from mkpf inner join mseg |
          | 339| on mkpf~mandt = mseg~mandt |
          | 340| and mkpf~mblnr = mseg~mblnr |
          | 341| and mkpf~mjahr = mseg~mjahr |
          | 342| WHERE MKPF~BKTXT in BKTXT |
          | 343| and MKPF~BUDAT in BUDAT |
          | 344| and MSEG~BWART in BWART |
          | 345| and MSEG~CHARG in CHARG |
          | 346| and MSEG~EBELN in EBELN |
          | 347| and MSEG~KUNNR in KUNNR |
          | 348| and MSEG~LGORT in LGORT |
          | 349| and MSEG~LIFNR in LIFNR |
          | 350| and MSEG~MATNR in MATNR |
          | 351| and MSEG~SOBKZ in SOBKZ |
          | 352| and MSEG~UMWRK in UMWRK |
          | 353| and MKPF~USNAM in USNAM |
          ----------------------------------------------------------------------------------------------------

          Comentario

          • Mari.Sole
            Senior Member
            • nov
            • 121

            #6
            Hola Feredgar,
            Con respecto a tu error en la transaccion Z deberías ver en la línea:

            >>>>> MOVE: w_dias_invent TO e_dinv.

            Seguramente el valor que está intentando mover de w_dias_invent a e_dinv es muy grande para el tipo de dato definido para variable receptora, por eso se produce el desbordamiento.
            Cambiando el tipo de dato definido para E_DINV debería sortear dicho dump.
            Para más seguridad puedes poner un breakpoint en esa línea de código y ver por debbug que valor intenta mover de una variable a otra y verificar esto que te comento.

            Espero te sea útil la información.

            Saludos.

            Comentario

            Trabajando...