SAP Help SAP Modify ABAP statement and source code examples to update an internal table and dictionary values
ABAP MODIFY statement to update SAP data within database and internal tables
Changing values within an internal table using the MODIFY statement is a very powerfull yet simple process to perform.
The ABAP code snippets below demonstrate various differnet ways of using the ABAP MODIFY statement. First
it populates an intenal table with data and then performs the following functionality on it using the MODIFY
syntax:
- Change the value of a specific field within that internal table with and without a header line.
- With and without specifying the index of the record being updated and do you need to use the INDEX addition
- When to use MODIFY and when to use APPEND
- Modify database table from work area
- Modify database table from internal table
Using field symbol
loop at it_ekpo assigning field-symbol(<fs1>).
<fs1>-netpr = '222'.
endloop.
Using work area
loop at it_ekpo into data(wa_ekpo4).
wa_ekpo4-netpr = '555'.
MODIFY it_ekpo from wa_ekpo4 index sy-tabix.
endloop.
Update internal table using the ABAP MODIFY statement command
*&-----------------------------------------------------------* *& Report ZMODIFYITAB * *&-----------------------------------------------------------* *& Example of Modifying an internal table value * *&-----------------------------------------------------------* *&-Created By details----------------------------------------* *& Author : www.SAP Development * *& SAP ABAP development * *&-----------------------------------------------------------* Report ZMODIFYITAB. type-pools: slis. "ALV Declarations *Data Declaration *---------------------------------------------------------------------------------* TYPES: BEGIN OF t_ekpo, ebeln TYPE ekpo-ebeln, ebelp TYPE ekpo-ebelp, statu TYPE ekpo-statu, aedat TYPE ekpo-aedat, matnr TYPE ekpo-matnr, menge TYPE ekpo-menge, meins TYPE ekpo-meins, netpr TYPE ekpo-netpr, peinh TYPE ekpo-peinh, END OF t_ekpo. DATA: it_ekpo TYPE STANDARD TABLE OF t_ekpo INITIAL SIZE 0, wa_ekpo TYPE t_ekpo, it_ekpo2 TYPE STANDARD TABLE OF t_ekpo INITIAL SIZE 0 WITH HEADER LINE. DATA: gd_tabix type sy-tabix. ************************************************************** *Start-of-selection. START-OF-SELECTION. select ebeln ebelp statu aedat matnr menge meins netpr peinh up to 10 rows from ekpo into table it_ekpo. ************************************************************** *End-of-selection. END-OF-SELECTION. * Modify data within internal table loop using the index and TRANSPORTING additions loop at it_ekpo into wa_ekpo. gd_tabix = sy-tabix. wa_ekpo-netpr = '100'. MODIFY it_ekpo INDEX gd_tabix FROM wa_ekpo TRANSPORTING netpr. endloop. * This example could also look like this...But if you are only updating one field * the above code helps performance by specifying that field loop at it_ekpo into wa_ekpo. gd_tabix = sy-tabix. wa_ekpo-netpr = '100'. MODIFY it_ekpo INDEX gd_tabix FROM wa_ekpo. endloop. * If you wanted to go even more old school and had a itab with a * header line you could even reduce the code to loop at it_ekpo2. gd_tabix = sy-tabix. it_ekpo2-netpr = '100'. MODIFY it_ekpo2 INDEX gd_tabix. endloop.
Do i need the "INDEX gd_tabix" for all the above examples??
The simple answer is no and the following code should work just fine!! loop at it_ekpo into wa_ekpo.
wa_ekpo-netpr = '100'.
MODIFY it_ekpo FROM wa_ekpo TRANSPORTING netpr.
* or MODIFY it_ekpo FROM wa_ekpo.
endloop.
....But and the only reason I say "should" is because on many occasions the above code has not worked as expected and has not updated the data I expected it too... This may have been for many reasons including me having a bit of a dumb moment or something else all together causing the issue but I now always include the index value if using MODIFY. I also dont rely on MODIFY to ADD new rows either. i.e. I check if the record exists and if not I use the APPEND statement, see code below.
Should you use a FIELD-SYMBOL assigning instead of the MODIFY
For this specific task (i.e. looping around an internal table and updating values), especially if you take into account the potential issue highlighted above you probably should just use a field symbol instead of the MODIFY command. But I know some people dont really like using these, unless it is for something that can only be done effectively with a field symbol. Just for info this is how the ABAP code would look if you replicated the MODIFY functionality using a FIELD-SYMBOL:FIELD-SYMBOLS: <fs_ekpo> LIKE LINE OF it_ekpo. LOOP AT it_ekpo ASSIGNING. -netpr = '444'. ENDLOOP.
Add and modify a row in internal table
You would not use the modify command to add an entry to an internal table, this would be done using the APPEND command. When updating an itab simply read the table first to check if an entry exists with required key and then MODIFY or APPEND based on the result:READ it_ekpo into wa_ekpo with key ebeln = ld_ebeln. if sy-subrc eq 0. MODIFY it_ekpo from wa_ekpo index sy-tabix. else. APPEND wa_ekpo to it_ekpo. endif.
MODIFY a database table from a work area structure
The below abap code demonstrates how to add or update a SAP database table row with the contents of a work area (structure).* Updates database table Zdtable with the contents of wa_itab
MODIFY Zdtable FROM wa_itab.
If you only want to update a single field within a database table you might want to use the UPDATE command instead.
Make changes to a database table from an internal table
The below abap code shows how to add or update a SAP database table row with the contents of a internal table us8ng the MODIFY statement.* Updates database table Zdtable with the contents of it_itab
MODIFY Zdtable FROM TABLE it_itab.