2005 Aug 20 2:41 PM
Dear all ,
I have created a table control program ,
the module modify which appends the itab is not working,
in change mode , when there is data already in the table control , if we make changes in the table control then it gets modified , but when we trying to add some data newly into the table control , the itab is not gettning updated,
Please help .. its urgent
Dear all ,
I have created a table control program ,
the module modify which appends the itab is not working,
in change mode , when there is data already in the table control , if we make changes in the table control then it gets modified , but when we trying to add some data newly into the table control , the itab is not gettning updated,
Please help .. its urgent
2005 Aug 20 3:18 PM
hi,
if you want to add a new record to the internal table do something like:
Check if the entry already exists with
READ TABLE itab WITH KEY field1 = wa-field.
IF sy-subrc = 0.
MODIFY itab WITH INDEX sy-tabix.
ELSE.
itab-field = wa-field.
APPEND itab.
CLEAR itab.
ENDIF.
2005 Aug 20 3:30 PM
Hi,
instead of
MODIFY itab WITH INDEX sy-tabix.
use
MODIFY itab INDEX sy-tabix.
Best regards.
2005 Aug 20 4:09 PM
Hi
the modify command is not working if i m addi
ng a record newly , its only working if i have a old record in the table control .
2005 Aug 20 5:48 PM
hi,
use:
DATA: l type i, index TYPE i.
CLEAR: l, index.
DESCRIBE TABLE itab LINES l.
IF l = 0.
index = 1.
ELSE.
index = l + 1.
ENDIF.
and then:
MODIFY itab INDEX index.
Regards.
2005 Aug 20 7:03 PM
Hi, something I want to remind you.
If you use a tab control, please check the PBO of your application.
normally, the code in PBI should like following:
PROCESS BEFORE OUTPUT.
* PBO FLOW LOGIC FOR TABLECONTROL 'XXXX'
MODULE XXXXX.
* please aware that the newly date should be added into
* internal table before the following LOOP
* otherwise, it won't reflect on the screen
MODULE ADD_DATA.
LOOP AT IT_TAB
INTO LC_TAB
WITH CONTROL XXXX
CURSOR XXXX-CURRENT_LINE.
ENDLOOP.
MODULE ADD_DATA OUTPUT.
lc_tab-field1 = '1'.
lc_tab-field2 = '2'.
lc_tab-field3 = '3'.
append lc_tab to IT_TAB.
ENDMODULE.
Hope it will be helpful
Thanks
2005 Aug 21 4:19 AM
2005 Aug 20 10:18 PM
Hi,
Please do have a look at this link:
https://www.sdn.sap.com/irj/servlet/prt/portal/prtroot/com.sap.km.cm.docs/library/webas/abap/abap-co... control in abap.pdf
Here you´ll find an example that can be quite helpful.
Best Regards.
2005 Aug 22 4:54 AM
Hi,
Here is the sample code.Kindly reward points by clicking the star on the left of reply,if you find it as useful.
PROCESS BEFORE OUTPUT.
MODULE set_status.
MODULE get_t_ctrl_lines.
LOOP AT i_makt WITH CONTROL t_ctrl CURSOR t_ctrl-current_line.
* Dynamic screen modifications
MODULE set_screen_fields.
ENDLOOP.
*
PROCESS AFTER INPUT.
LOOP AT i_makt.
FIELD i_makt-pick MODULE check.
FIELD i_makt-zmatnr MODULE zmatnr .
ENDLOOP.
MODULE user_command_9000.
In the program, write the following code.
PROGRAM SAPMZTC MESSAGE-ID zz.
***********************************************************************
* Tables Declaration
***********************************************************************
TABLES: zzz_makt.
***********************************************************************
* Internal table Declaration
***********************************************************************
DATA : i_makt TYPE STANDARD TABLE OF zzz_makt WITH HEADER LINE.
***********************************************************************
* Table control Declaration
***********************************************************************
CONTROLS: t_ctrl TYPE TABLEVIEW USING SCREEN '9000'.
***********************************************************************
* Variable Declaration
***********************************************************************
DATA : flg, "Flag to set the change mode
ln TYPE i. "No. of records
*&---------------------------------------------------------------------*
*& Module get_T_CTRL_lines OUTPUT
*&---------------------------------------------------------------------*
* Populating data
*----------------------------------------------------------------------*
MODULE get_t_ctrl_lines OUTPUT.
SELECT zmatnr zmaktx
INTO CORRESPONDING FIELDS OF TABLE i_makt
FROM zzz_makt.
DESCRIBE TABLE i_makt LINES ln.
* To make the vertical scroll bar to come on runtime
t_ctrl-lines = ln + 100.
ENDMODULE. " get_T_CTRL_lines OUTPUT
*&---------------------------------------------------------------------*
*& Module USER_COMMAND_9000 INPUT
*&---------------------------------------------------------------------*
* Triggering event according to the user command
*----------------------------------------------------------------------*
MODULE user_command_9000 INPUT.
DATA :lv_fcode LIKE sy-ucomm, "Function Code
lv_answer(1) type c. "Storing the answer
lv_fcode = sy-ucomm.
CASE lv_fcode.
WHEN 'CHANGE'.
* Setting the flag to make the table control in editable mode[excluding
* primary key].
flg = 'Y'.
WHEN 'DELETE'.
* Setting the flag to make the table control in editable mode after
* deleting the selected line
flg = 'Y'.
* Confirmation of delete
CALL FUNCTION 'POPUP_TO_CONFIRM'
EXPORTING
TITLEBAR = 'Confirm'
text_question = 'Are you sure to delete from database?'
TEXT_BUTTON_1 = 'Yes'(001)
TEXT_BUTTON_2 = 'No'(002)
IMPORTING
ANSWER = lv_answer.
if lv_answer eq '1'.
* Updating the database table from the internal table
UPDATE zzz_makt FROM TABLE i_makt.
* Deleting the selected row from the internal table
DELETE i_makt WHERE pick = 'X'.
* Deleting the selected row from the database table
DELETE FROM zzz_makt WHERE pick = 'X'.
MESSAGE s005 WITH 'Deleted Successfully'.
ENDIF.
WHEN 'SAVE'.
* Inserting new record or updating existing record in database table
* from the internal table
MODIFY zzz_makt FROM TABLE i_makt.
MESSAGE s005 WITH 'Saved Successfully'.
WHEN 'BACK'.
SET SCREEN '0'.
WHEN 'EXIT' OR 'CANCEL'.
* Leaving the program
LEAVE PROGRAM.
ENDCASE.
ENDMODULE. " USER_COMMAND_9000 INPUT
*&---------------------------------------------------------------------*
*& Module set_screen_fields OUTPUT
*&---------------------------------------------------------------------*
* Setting the screen fields
*----------------------------------------------------------------------*
MODULE set_screen_fields OUTPUT.
LOOP AT SCREEN.
IF flg IS INITIAL.
screen-input = 0.
ELSEIF ( flg EQ 'Y' ).
IF ( ( screen-name = 'I_MAKT-ZMAKTX'
OR screen-name = 'I_MAKT-CHECK1' )
AND t_ctrl-current_line LE ln ) .
* Making the screen fields as editable
screen-input = 1.
ELSEIF ( ( screen-name = 'I_MAKT-ZMATNR' )
AND t_ctrl-current_line LE ln ).
* Making the screen field as uneditable
screen-input = 0.
ENDIF.
ENDIF.
* Modifying the screen after making changes
MODIFY SCREEN.
ENDLOOP.
ENDMODULE. " set_screen_fields OUTPUT
*&---------------------------------------------------------------------*
*& Module zmatnr INPUT
*&---------------------------------------------------------------------*
* Appending records to the internal table
*----------------------------------------------------------------------*
MODULE zmatnr INPUT.
MODIFY i_makt INDEX t_ctrl-current_line.
IF t_ctrl-current_line GT ln.
READ TABLE i_makt WITH KEY zmatnr = i_makt-zmatnr.
IF sy-subrc NE 0.
* Inserting record if it does not exist in database
APPEND i_makt.
ELSE.
MESSAGE i005 WITH 'Material Number' i_makt-zmatnr 'already exists'.
ENDIF.
ENDIF.
ENDMODULE. " zmatnr INPUT
*&---------------------------------------------------------------------*
*& Module set_status OUTPUT
*&---------------------------------------------------------------------*
* Setting the GUI status
*----------------------------------------------------------------------*
MODULE set_status OUTPUT.
SET PF-STATUS 'ZSTATUS'.
SET TITLEBAR 'ZTITLE'.
ENDMODULE. " set_status OUTPUT
*&---------------------------------------------------------------------
*& Module CHECK INPUT
*&---------------------------------------------------------------------
* Modify the internal table using the current line in table control
*----------------------------------------------------------------------
MODULE check INPUT.
MODIFY i_makt INDEX t_ctrl-current_line.
ENDMODULE. " CHECK INPUT
| User | Count |
|---|---|
| 3 | |
| 2 | |
| 2 | |
| 1 | |
| 1 | |
| 1 | |
| 1 | |
| 1 | |
| 1 | |
| 1 |