Application Development and Automation Discussions
Join the discussions or start your own on all things application development, including tools and APIs, programming models, and keeping your skills sharp.
cancel
Showing results for 
Search instead for 
Did you mean: 
Read only

Insert or Update - Update Fails?

Former Member
0 Likes
1,317

Hi Frorums

When I execute this code, the insert works into my table however, the update does not, it causes the program to abort.


FORM UPDATE_ZPRDCOPATOT .
  DATA: LV_SALES LIKE ZPRDCOPATOT-ZGROSSALES,
        LV_COST  LIKE ZPRDCOPATOT-ZINTPRICE.


  TOT_REC-ZPERIOD = GV_PERIOD.
  TOT_REC-ZDISTCHAN = GV_CURR_CHANNEL.
  TOT_REC-ZGROSSALES = GV_TOTAL_SALES.
  TOT_REC-ZINTPRICE = GV_TOTAL_COST.

  SELECT * FROM
    ZPRDCOPATOT WHERE ZPERIOD = GV_PERIOD AND ZDISTCHAN = GV_CURR_CHANNEL.
  ENDSELECT.

  IF sy-subrc = 4.
    INSERT INTO ZPRDCOPATOT VALUES TOT_REC.
  ELSEIF SY-SUBRC EQ 0.
    TOT_REC-ZGROSSALES = TOT_REC-ZGROSSALES + ZPRDCOPATOT-ZGROSSALES.
    TOT_REC-ZINTPRICE = TOT_REC-ZINTPRICE + ZPRDCOPATOT-ZINTPRICE.
    MODIFY TOT_REC.
    UPDATE ZPRDCOPATOT SET
    ZGROSSALES = TOT_REC-ZGROSSALES
    ZINTPRICE  = TOT_REC-ZINTPRICE
    WHERE ZPERIOD = GV_PERIOD AND ZDISTCHAN = GV_CURR_CHANNEL.

  ENDIF.
  CLEAR: GV_TOTAL_SALES, GV_TOTAL_COST.

ENDFORM.                    " UPDATE_ZPRDCOPATOT

Edited by: keith warnock on Jul 30, 2009 6:06 PM

1 ACCEPTED SOLUTION
Read only

Former Member
0 Likes
1,256

Hi,

When I execute this code, the insert works into my table however, the update does not, it causes the program to abort.


 FORM UPDATE_ZPRDCOPATOT .
   DATA: LV_SALES LIKE ZPRDCOPATOT-ZGROSSALES,
         LV_COST  LIKE ZPRDCOPATOT-ZINTPRICE.
 
 
   TOT_REC-ZPERIOD = GV_PERIOD.
   TOT_REC-ZDISTCHAN = GV_CURR_CHANNEL.
   TOT_REC-ZGROSSALES = GV_TOTAL_SALES.
   TOT_REC-ZINTPRICE = GV_TOTAL_COST.
 
   SELECT * FROM
     ZPRDCOPATOT WHERE ZPERIOD = GV_PERIOD AND ZDISTCHAN = GV_CURR_CHANNEL.
   ENDSELECT.
 
   IF sy-subrc = 4.
     INSERT INTO ZPRDCOPATOT VALUES TOT_REC.
   ELSEIF SY-SUBRC EQ 0.
     TOT_REC-ZGROSSALES = TOT_REC-ZGROSSALES + ZPRDCOPATOT-ZGROSSALES.
     TOT_REC-ZINTPRICE = TOT_REC-ZINTPRICE + ZPRDCOPATOT-ZINTPRICE.
     MODIFY TOT_REC.
     UPDATE ZPRDCOPATOT SET
     ZGROSSALES = TOT_REC-ZGROSSALES
     ZINTPRICE  = TOT_REC-ZINTPRICE
     "WHERE ZPERIOD = GV_PERIOD AND ZDISTCHAN = GV_CURR_CHANNEL.                                    "comment this
      WHERE ZPERIOD = ZPRDCOPATOT- ZPERIOD   AND ZDISTCHAN = ZPRDCOPATOT-ZDISTCHAN.  "Write this
 
   ENDIF.
   CLEAR: GV_TOTAL_SALES, GV_TOTAL_COST.
 
 ENDFORM.                    " UPDATE_ZPRDCOPATOT
 

Prabhudas

Prabhudas

> Edited by: keith warnock on Jul 30, 2009 6:06 PM

Hi Frorums

When I execute this code, the insert works into my table however, the update does not, it causes the program to abort.


FORM UPDATE_ZPRDCOPATOT .
  DATA: LV_SALES LIKE ZPRDCOPATOT-ZGROSSALES,
        LV_COST  LIKE ZPRDCOPATOT-ZINTPRICE.


  TOT_REC-ZPERIOD = GV_PERIOD.
  TOT_REC-ZDISTCHAN = GV_CURR_CHANNEL.
  TOT_REC-ZGROSSALES = GV_TOTAL_SALES.
  TOT_REC-ZINTPRICE = GV_TOTAL_COST.

  SELECT * FROM
    ZPRDCOPATOT WHERE ZPERIOD = GV_PERIOD AND ZDISTCHAN = GV_CURR_CHANNEL.
  ENDSELECT.

  IF sy-subrc = 4.
    INSERT INTO ZPRDCOPATOT VALUES TOT_REC.
  ELSEIF SY-SUBRC EQ 0.
    TOT_REC-ZGROSSALES = TOT_REC-ZGROSSALES + ZPRDCOPATOT-ZGROSSALES.
    TOT_REC-ZINTPRICE = TOT_REC-ZINTPRICE + ZPRDCOPATOT-ZINTPRICE.
    MODIFY TOT_REC.
    UPDATE ZPRDCOPATOT SET
    ZGROSSALES = TOT_REC-ZGROSSALES
    ZINTPRICE  = TOT_REC-ZINTPRICE
    WHERE ZPERIOD = GV_PERIOD AND ZDISTCHAN = GV_CURR_CHANNEL.

  ENDIF.
  CLEAR: GV_TOTAL_SALES, GV_TOTAL_COST.

ENDFORM.                    " UPDATE_ZPRDCOPATOT

Edited by: keith warnock on Jul 30, 2009 6:06 PM

8 REPLIES 8
Read only

Former Member
0 Likes
1,257

Hi,

When I execute this code, the insert works into my table however, the update does not, it causes the program to abort.


 FORM UPDATE_ZPRDCOPATOT .
   DATA: LV_SALES LIKE ZPRDCOPATOT-ZGROSSALES,
         LV_COST  LIKE ZPRDCOPATOT-ZINTPRICE.
 
 
   TOT_REC-ZPERIOD = GV_PERIOD.
   TOT_REC-ZDISTCHAN = GV_CURR_CHANNEL.
   TOT_REC-ZGROSSALES = GV_TOTAL_SALES.
   TOT_REC-ZINTPRICE = GV_TOTAL_COST.
 
   SELECT * FROM
     ZPRDCOPATOT WHERE ZPERIOD = GV_PERIOD AND ZDISTCHAN = GV_CURR_CHANNEL.
   ENDSELECT.
 
   IF sy-subrc = 4.
     INSERT INTO ZPRDCOPATOT VALUES TOT_REC.
   ELSEIF SY-SUBRC EQ 0.
     TOT_REC-ZGROSSALES = TOT_REC-ZGROSSALES + ZPRDCOPATOT-ZGROSSALES.
     TOT_REC-ZINTPRICE = TOT_REC-ZINTPRICE + ZPRDCOPATOT-ZINTPRICE.
     MODIFY TOT_REC.
     UPDATE ZPRDCOPATOT SET
     ZGROSSALES = TOT_REC-ZGROSSALES
     ZINTPRICE  = TOT_REC-ZINTPRICE
     "WHERE ZPERIOD = GV_PERIOD AND ZDISTCHAN = GV_CURR_CHANNEL.                                    "comment this
      WHERE ZPERIOD = ZPRDCOPATOT- ZPERIOD   AND ZDISTCHAN = ZPRDCOPATOT-ZDISTCHAN.  "Write this
 
   ENDIF.
   CLEAR: GV_TOTAL_SALES, GV_TOTAL_COST.
 
 ENDFORM.                    " UPDATE_ZPRDCOPATOT
 

Prabhudas

Prabhudas

> Edited by: keith warnock on Jul 30, 2009 6:06 PM

Read only

0 Likes
1,256

Hello,

I made the code change but still got the same error... Here it is:

short text:

Error in an ABAP/4 statement when processing an internal table.

The dump, shows the program failing right at the update statement.

Read only

0 Likes
1,256

Hi,


    MODIFY TOT_REC.  "Comment this and check 
     UPDATE ZPRDCOPATOT SET
     ZGROSSALES = TOT_REC-ZGROSSALES
      WHERE ZPERIOD = ZPRDCOPATOT-ZPERIOD   AND ZDISTCHAN = ZPRDCOPATOT-ZDISTCHAN.  
   

Prabhudas

Read only

0 Likes
1,256

THE MODIFY TOT_REC was the issue.

Thanks ALL

Read only

former_member585060
Active Contributor
0 Likes
1,256

Hi,

In your code after SELECT statement try with sy-dbcnt value. See below code

SELECT * FROM
    ZPRDCOPATOT WHERE ZPERIOD = GV_PERIOD AND ZDISTCHAN = GV_CURR_CHANNEL.
  ENDSELECT.
 
  IF sy-dbcnt = 0.         " ----> Do this change
    INSERT INTO ZPRDCOPATOT VALUES TOT_REC.
  ELSEIF sy-dbcnt EQ 1.        " ----> Do this change
    TOT_REC-ZGROSSALES = TOT_REC-ZGROSSALES + ZPRDCOPATOT-ZGROSSALES.
    TOT_REC-ZINTPRICE = TOT_REC-ZINTPRICE + ZPRDCOPATOT-ZINTPRICE.
    MODIFY TOT_REC.
    UPDATE ZPRDCOPATOT SET
    ZGROSSALES = TOT_REC-ZGROSSALES
    ZINTPRICE  = TOT_REC-ZINTPRICE
    WHERE ZPERIOD = GV_PERIOD AND ZDISTCHAN = GV_CURR_CHANNEL.
 
  ENDIF.

Regards

Bala Krishna

Read only

0 Likes
1,256

Hello,

That change did not work either:

Here is the error analysis:

You attempted to change, delete or create a line in the

internal table "\PROGRAM=ZSD_SLSORD_HIST_2COPA\DATA=IT_IPDATA", but no v

cursor exists

for the table.

Possible reasons:

1. The relevent ABAP/4 statement does not include the addition

"...INDEX...", although the statement is not

inside a "LOOP...ENDLOOP" loop processing this table.

2. The relevent ABAP/4 statement was called from within a

"LOOP...ENDLOOP" loop after a DELETE

"\PROGRAM=ZSD_SLSORD_HIST_2COPA\DATA=IT_IPDATA".

Read only

0 Likes
1,256

Hi,

In your code ZGROSSALES, ZINTPRICE after ENDSELECT does this fields have the values?

Just try keeping the ENDSELECT statement after ENDIF. as below.

SELECT * FROM
    ZPRDCOPATOT WHERE ZPERIOD = GV_PERIOD AND ZDISTCHAN = GV_CURR_CHANNEL.
  
 
  IF sy-dbcnt = 0.         
    INSERT INTO ZPRDCOPATOT VALUES TOT_REC.
  ELSEIF sy-dbcnt EQ 1.       
    TOT_REC-ZGROSSALES = TOT_REC-ZGROSSALES + ZPRDCOPATOT-ZGROSSALES.
    TOT_REC-ZINTPRICE = TOT_REC-ZINTPRICE + ZPRDCOPATOT-ZINTPRICE.
    MODIFY TOT_REC.
    UPDATE ZPRDCOPATOT SET
    ZGROSSALES = TOT_REC-ZGROSSALES
    ZINTPRICE  = TOT_REC-ZINTPRICE
    WHERE ZPERIOD = GV_PERIOD AND ZDISTCHAN = GV_CURR_CHANNEL.
 
  ENDIF.

ENDSELECT.

Regards

Bala Krishna

Read only

Former Member
0 Likes
1,256

Hi,

Update with set expression will works fine, if the data records are exists already it will updates.

in your where condition you are checking two fields that condition is statisfying or not please check it once.

for example below code I tried working fine.

tables: mara.

data: it_mara type standard table of mara with header line.

it_mara-matnr = '100-100'.

it_mara-matkl = '001'.

update mara set

matkl = it_mara-matkl

where matnr = it_mara-matnr.

if sy-subrc = 0.

endif.

regards,

Ganesh