cancel
Showing results for 
Search instead for 
Did you mean: 

Arithmetical errors or conversion errors found in routine

xiaofang_liu
Explorer
0 Kudos

Hello guys,

I met this problem when I using further processing to load data from DSO01 to DSO02.

I searched on forum and found many articles about this issue.

Most of them are related to 2lis, condition rate etc.

But my scenario is different:

We don't extract data use SAP BI content.

The data source is a customized datasource for PP.

The error didn't happened from datasource to DSO.

It is like:

datasource -----PSA---, DSO01(data mart)----- DSO02(data mart)

From PSA-dso01 is ok,

The error happened at  DSO01----- DSO02 .

The process chain ran well for a long time.

But yesterday it failed on the step of further processing from DSO01 to DSO02(data mart was used).

I expanded the Processing (data packet): Errors have occurred section in   Detail tab of monitor and found the error message as:

Arithmetical errors or conversion errors found in routine ROUTINE_0003 record 1433

I turn back to datamart and check corresponding data package and couldn't find any corrupted/non-logic data.

Because I use datamart and further processing so ,I was unable to use simulate update to check.

I also checked all the routine in update rules, but all the routine is simple routine. I can't find any point which can cause /0 situation.

We use BW 3.x and BW 7.0

Can anyone help me?

I pasted one of the routine.

______________________________________________

FORM compute_data_field

  TABLES   MONITOR STRUCTURE RSMONITOR "user defined monitoring

  USING    COMM_STRUCTURE LIKE /BIC/CS8SGPPDS01

           RECORD_NO LIKE SY-TABIX

           RECORD_ALL LIKE SY-TABIX

           SOURCE_SYSTEM LIKE RSUPDSIMULH-LOGSYS

  CHANGING RESULT LIKE /BIC/ASGPPDS0200-/BIC/SGEXTR_IN

           RETURNCODE LIKE SY-SUBRC "Do not use!

           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

   lt_zp-sign = 'I'.

   lt_zp-option = 'BT'.

   lt_zp-low = 'ZP10'.

   lt_zp-high = 'ZP99'.

   append lt_zp.

* CONDITION 1 : si class number= Z9Z011 et A4Z90012(A4BATCH) is differen

* to initial.

      select single /bic/A4Z90012 /bic/A4Z90013 /bic/A4Z90014 into

         (ls_batch-/bic/A4Z90012, ls_batch-/bic/A4Z90013,

         ls_batch-/bic/A4Z90014)

         from /BIC/MA4BATCMAT

        where /BIC/A4BATCMAT = COMM_STRUCTURE-/BIC/A4BATCHin

        AND   /BIC/A0MATNR   = COMM_STRUCTURE-/BIC/A0MATNR.

case COMM_STRUCTURE-/BIC/A4CLASNUM.

     when 'Z9Z011'.

       IF ls_batch-/bic/A4Z90012 <> '0.00'.

         RESULT = ( ( ls_batch-/bic/A4Z90012 / 100 ) *

                       COMM_STRUCTURE-/BIC/SGQTYIN  ).

       ELSEIF ls_batch-/bic/A4Z90012 = '0.00'.

         RESULT = ( ls_batch-/bic/A4Z90013 / 100 ) *

                      COMM_STRUCTURE-/BIC/SGQTYIN .

       ENDIF.

     when 'Z9Z003' or 'Z9Z010'.

      lv_sqrt = ( c_value2

             -

        c_value3 * ( c_value4 +

        ( COMM_STRUCTURE-/BIC/A4Z9_14IN  ) ) ).

      lv_sqrt = sqrt( abs( lv_sqrt ) ).

  RESULT  = ( COMM_STRUCTURE-/BIC/A4Z9_14IN   )

                * ( c_value1 - lv_sqrt ) *

                 COMM_STRUCTURE-/BIC/SGQTYIN.

       when others.

    endcase.

* if abort is not equal zero, the update process will be canceled

  ABORT = 0.

*$*$ end of routine - insert your code only before this line         *-*

*

ENDFORM.

FORM compute_data_field

  TABLES   MONITOR STRUCTURE RSMONITOR "user defined monitoring

  USING    COMM_STRUCTURE LIKE /BIC/CS8SGPPDS01

           RECORD_NO LIKE SY-TABIX

           RECORD_ALL LIKE SY-TABIX

           SOURCE_SYSTEM LIKE RSUPDSIMULH-LOGSYS

  CHANGING RESULT LIKE /BIC/ASGPPDS0200-/BIC/SGEXTR_IN

           RETURNCODE LIKE SY-SUBRC "Do not use!

           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

   lt_zp-sign = 'I'.

   lt_zp-option = 'BT'.

   lt_zp-low = 'ZP10'.

   lt_zp-high = 'ZP99'.

   append lt_zp.

   

* CONDITION 1 : si class number= Z9Z011 et A4Z90012(A4BATCH) is differen

* to initial.

      select single /bic/A4Z90012 /bic/A4Z90013 /bic/A4Z90014 into

         (ls_batch-/bic/A4Z90012, ls_batch-/bic/A4Z90013,

         ls_batch-/bic/A4Z90014)

         from /BIC/MA4BATCMAT

        where /BIC/A4BATCMAT = COMM_STRUCTURE-/BIC/A4BATCHin

        AND   /BIC/A0MATNR   = COMM_STRUCTURE-/BIC/A0MATNR.

     

case COMM_STRUCTURE-/BIC/A4CLASNUM.

     when 'Z9Z011'.

       IF ls_batch-/bic/A4Z90012 <> '0.00'.

         RESULT = ( ( ls_batch-/bic/A4Z90012 / 100 ) *

                       COMM_STRUCTURE-/BIC/SGQTYIN  ).

       ELSEIF ls_batch-/bic/A4Z90012 = '0.00'.

         RESULT = ( ls_batch-/bic/A4Z90013 / 100 ) *

                      COMM_STRUCTURE-/BIC/SGQTYIN .

       ENDIF.

     when 'Z9Z003' or 'Z9Z010'.

      lv_sqrt = ( c_value2

             -

        c_value3 * ( c_value4 +

        ( COMM_STRUCTURE-/BIC/A4Z9_14IN  ) ) ).

      lv_sqrt = sqrt( abs( lv_sqrt ) ).

  RESULT  = ( COMM_STRUCTURE-/BIC/A4Z9_14IN   )

                * ( c_value1 - lv_sqrt ) *

                 COMM_STRUCTURE-/BIC/SGQTYIN.

      when others.

    endcase.

 

* if abort is not equal zero, the update process will be canceled

  ABORT = 0.

*$*$ end of routine - insert your code only before this line         *-*

*

ENDFORM.

Accepted Solutions (0)

Answers (1)

Answers (1)

amine_lamkaissi
Active Contributor
0 Kudos

Hi Xiaofang,


In my opinion, you may have some invalid or corrupted values.
The best thing to do is to set a breakpoint at subroutine “ ROUTINE_0003" and see what is wrong.


Amine

xiaofang_liu
Explorer
0 Kudos

The problem is:

I was unable to use simulate update to debug the routine since there isn't PSA exists.

I have checked the record indicated by error msg,but the record is intact.