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

Table control, itab not appending

Former Member
0 Likes
1,711

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

8 REPLIES 8
Read only

former_member182371
Active Contributor
0 Likes
1,136

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.

Read only

former_member182371
Active Contributor
0 Likes
1,136

Hi,

instead of

MODIFY itab WITH INDEX sy-tabix.

use

MODIFY itab INDEX sy-tabix.

Best regards.

Read only

0 Likes
1,136

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 .

Read only

former_member182371
Active Contributor
0 Likes
1,136

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.

Read only

Former Member
0 Likes
1,136

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

Read only

0 Likes
1,136

Please post your relevant code here so that we can help.

Read only

former_member182371
Active Contributor
0 Likes
1,136

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.

Read only

jayanthi_jayaraman
Active Contributor
0 Likes
1,136

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