Anuncio

Colapsar
No hay anuncio todavía.

Error aritmético o de conversión interceptado en rutina ROUTINE_0002

Colapsar
X
 
  • Filtrar
  • Tiempo
  • Mostrar
Limpiar Todo
nuevos mensajes

  • Error aritmético o de conversión interceptado en rutina ROUTINE_0002

    Buenas a todo el foro:
    Soy un miembro nuevo; por fín encuentro un verdadero foro de Bw y parece que tiene muy buena pinta, sobre todo por los partícipes del mismo. Por tanto, gracias de antemano a todas aquellas personas que dedican un poquito de su tiempo en resolver dudas al resto de miembros; desde ahora, intentaré hacer lo mismo yo pq sé lo duro que es pelearse con este sistema y no tener nada donde apoyarse.

    Sin querer enrollarme, aquí dejo el problema que me ocurre desde hace poco:

    estoy haciendo cargas de ficheros a un ODS q actualiza automáticamente los datos a un Cubo, pero cuando se actualizan los datos al cubo (al ods llegan bien) el monitor me da el siguiente mensaje de error:

    "Error aritmético o de conversión interceptado en rutina ROUTINE_0002 , registro 289" (a este registro no le pasa nada realmente).

    Posteriormente, borro la carga del cubo y relanzo desde el infopaquete, y los datos se actualizan bien en el cubo pero se duplican; esto me pasa tanto con ficheros con importes en positivo como en negativo. Antes no sucedía este error, por lo que sospecho que tiene q ver con las deltas entre el ODS y el Cubo, pero no doy con el clavo.
    Alguien tiene alguna pista de lo q pueda estar ocurriendo??

    Muchas gracias de nuevo.
    Saludos!

  • #2
    Antes que nada bienvenido!

    Tendrías que indicarnos que rutinas tenés en la regla de transferencia que va del ODS al Infocubo, para analizar si es un error de código.

    Saludos!

    Comentario


    • #3
      gracias por la respuesta Koken

      Pero no creo que sea un problema de las rutinas, dado que con anterioridad he realizado estas cargas (tanto con importe negativo como con positivo) sin que me diera este error. (las rutinas son de hace bastante tiempo)
      Otra razón es porque, al borrar la carga que me da error en el Cubo (en el OdS no la elimino) y relanzar la carga de nuevo desde el infopaquete, se actualizan correctamente en el Cubo ambas cargas (la anterior supuestamente errónea y la nueva), con lo que se me duplican los datos en el mencionado Cubo.

      Aún así, si piensas que pueden ser las rutinas, te las pego por si es un error de código.

      Rutina Coste Alta GRD:
      PROGRAM UPDATE_ROUTINE.
      *$*$ begin of global - insert your declaration only below this line *-*
      * TABLES: ...
      * DATA: ...
      *$*$ end of global - insert your declaration only before this line *-*


      FORM compute_data_field
      TABLES MONITOR STRUCTURE RSMONITOR "user defined monitoring
      USING COMM_STRUCTURE LIKE /BIC/CS8ZCO_011G
      RECORD_NO LIKE SY-TABIX
      RECORD_ALL LIKE SY-TABIX
      SOURCE_SYSTEM LIKE RSUPDSIMULH-LOGSYS
      CHANGING RESULT LIKE /BIC/VZCO_016T-/BIC/ZZ_CTGRD
      UNIT LIKE /BIC/VZCO_016T-CURRENCY
      RETURNCODE LIKE SY-SUBRC
      ABORT LIKE SY-SUBRC. "set ABORT <> 0 to cancel update
      *
      *$*$ begin of routine - insert your code only below this line *-*
      * fill the internal table "MONITOR", to make monitor entries
      TABLES: /bic/az_cca_0900,
      /bic/azco_011g00.

      DATA: d_date TYPE dats,
      aaaa(4) TYPE c,
      mm(2) TYPE c,
      d_peso TYPE f,
      d_peso2 TYPE f.

      * DATA: zzprecio LIKE /bic/az_cca_0900-amount,
      * zzprecio2 LIKE /bic/az_cca_0900-amount,
      * zzcantidad LIKE COMM_STRUCTURE-quantity,
      * zzcantidad_ceco like COMM_STRUCTURE-quantity,
      * zzceco LIKE COMM_STRUCTURE-costcenter,
      * zzfiscper LIKE COMM_STRUCTURE-fiscper.

      * DATA: zzprecio type p decimals 5,
      * zzprecio2 type p decimals 5,
      * zzcantidad type p decimals 5,
      * zzcantidad_ceco type p decimals 5,
      * zzfiscper LIKE COMM_STRUCTURE-fiscper.

      DATA: zzprecio LIKE /bic/az_cca_0900-amount,
      zzprecio2 type p decimals 5,
      zzcantidad type p decimals 5,
      zzcantidad_ceco type p decimals 5,
      zzfiscper LIKE COMM_STRUCTURE-fiscper.

      data: t_zco_011g type standard table of /BIC/AZCO_011G00
      with header line.
      data: AZCO_012O00g type standard table of /BIC/AZCO_012O00
      with header line.
      break-point.
      * result value of the routine
      aaaa = COMM_STRUCTURE-fiscper(4).
      mm = COMM_STRUCTURE-fiscper+5(2).
      CONCATENATE aaaa mm '01' INTO d_date.
      * 1.- Cálculo del coste total del CeCo: COSTE_CECOj

      SELECT SUM( amount ) INTO zzprecio
      FROM /bic/az_cca_0900 WHERE
      co_area = 'SES' AND
      fiscper = COMM_STRUCTURE-fiscper AND
      costcenter = COMM_STRUCTURE-costcenter AND
      curtype = 10.

      if sy-subrc = 0.

      * 2.- Cálculo de la cantidad ponderada por CeCo: QUANTITYj * PESOj

      zzcantidad_ceco = COMM_STRUCTURE-QUANTITY.

      SELECT SINGLE /bic/zz_peso INTO d_peso
      FROM /bic/mzz_grd
      WHERE /bic/zz_grd = COMM_STRUCTURE-/bic/zz_grd
      AND datefrom <= d_date
      AND dateto >= d_date
      AND changed <> 'D'.


      zzcantidad_ceco = zzcantidad_ceco * d_peso.

      * 3.- Cálculo de la cantidad ponderada total de altas GRD.

      refresh t_zco_011g.

      select * into table t_zco_011g
      from /bic/azco_011g00 where
      co_area = 'SES' AND
      fiscper = COMM_STRUCTURE-fiscper AND
      costcenter = COMM_STRUCTURE-costcenter.

      if sy-subrc = 0.

      clear zzprecio2.

      loop at t_zco_011g.

      clear d_peso2.

      SELECT SINGLE /bic/zz_peso INTO d_peso2
      FROM /bic/mzz_grd
      WHERE /bic/zz_grd = t_zco_011g-/bic/zz_grd
      AND datefrom <= d_date
      AND dateto >= d_date
      AND changed <> 'D'.


      zzprecio2 = zzprecio2 + ( t_zco_011g-quantity * d_peso2 ).
      endloop.

      * Peticion de los datos de Otros Procesos

      refresh AZCO_012O00g.

      select * into table AZCO_012O00g
      from /bic/AZCO_012O00 where
      co_area = 'SES' AND
      fiscper = COMM_STRUCTURE-fiscper AND
      costcenter = COMM_STRUCTURE-costcenter.

      if sy-subrc = 0.

      loop at AZCO_012O00g.

      clear d_peso2.

      select single /BIC/ZZ_PESO into d_peso2
      from /BIC/MZZ_OTPROC
      where /BIC/ZZ_OTPROC = AZCO_012O00g-/BIC/ZZ_OTPROC and
      DATEFROM <= d_date and
      DATETO >= d_date and
      CHANGED <> 'D'.

      zzprecio2 = zzprecio2 + ( AZCO_012O00g-QUANTITY * d_peso2 ).

      endloop.

      else.

      RESULT = 0.

      endif.

      RESULT = ( zzprecio * zzcantidad_ceco ) / zzprecio2.

      else.

      RESULT = 0.

      endif.
      else.
      RESULT = 0.
      endif.


      Rutina PESO TOTAL:

      PROGRAM UPDATE_ROUTINE.
      *$*$ begin of global - insert your declaration only below this line *-*
      * TABLES: ...
      * DATA: ...
      *$*$ end of global - insert your declaration only before this line *-*


      FORM compute_data_field
      TABLES MONITOR STRUCTURE RSMONITOR "user defined monitoring
      USING COMM_STRUCTURE LIKE /BIC/CS8ZCO_011G
      RECORD_NO LIKE SY-TABIX
      RECORD_ALL LIKE SY-TABIX
      SOURCE_SYSTEM LIKE RSUPDSIMULH-LOGSYS
      CHANGING RESULT LIKE /BIC/VZCO_016T-/BIC/ZZPESOTOT
      UNIT LIKE /BIC/VZCO_016T-CURRENCY
      RETURNCODE LIKE SY-SUBRC
      ABORT LIKE SY-SUBRC. "set ABORT <> 0 to cancel update
      *
      *$*$ begin of routine - insert your code only below this line *-*
      * fill the internal table "MONITOR", to make monitor entries

      DATA: d_date TYPE dats,
      aaaa(4) TYPE c,
      mm(2) TYPE c,
      d_peso TYPE f,
      zzcantidad like COMM_STRUCTURE-quantity,
      zzfiscper LIKE COMM_STRUCTURE-fiscper.

      aaaa = COMM_STRUCTURE-fiscper(4).
      mm = COMM_STRUCTURE-fiscper+5(2).
      CONCATENATE aaaa mm '01' INTO d_date.

      zzcantidad = COMM_STRUCTURE-QUANTITY.

      SELECT SINGLE /bic/zz_peso INTO d_peso
      FROM /bic/mzz_grd
      WHERE /bic/zz_grd = COMM_STRUCTURE-/bic/zz_grd
      AND datefrom <= d_date
      AND dateto >= d_date
      AND changed <> 'D'.

      if sy-subrc = 0.
      RESULT = zzcantidad * d_peso.
      else.
      RESULT = 0.
      endif.

      Comentario


      • #4
        Cuando hacés la carga nuevamente en el infocubo, borrás previamente el request que falló? porque sino siempre te va a duplicar los datos.

        En cuanto al código debería debuguearlo para testear correctamente su funcionamiento.

        Con que versión de BW estás trabajando?

        Saludos!

        Comentario


        • #5
          gracias koken!!

          la carga primero va a un ODS y posteriormente al cubo; al ODS llega bien siempre, pero al cubo falla. Por tanto, borro esta carga del cubo, pero no del ODS, y cuando repito la carga desde el infopaquete, se actualizan las 2 en el cubo. Sin embargo, si borro tanto la carga del cubo como la del ODS (restaurando la delta que tiene después), si lanzo al carga, llega al ODS bien, pero en el cubo vuelve a fallar. DEbe ser un problema con la incialización delta, que siempre traen quebraderos de cabeza.
          La versión que tengo es la 4.6.

          De nuevo muchas gracias.

          Comentario


          • #6
            Lo de las cargas deltas lo verificás desde r/3, fijate si llegan bien los datos al PSA antes de llegar al ODS, en caso que tu problema sean los deltas dentro de BW, tendrías que chequear el DTP que está enviando los datos del ODS al cubo.

            Suerte con eso!

            Comentario

            Trabajando...
            X