cancel
Showing results for 
Search instead for 
Did you mean: 

Update values in AlV grid display after entering value

Former Member
0 Kudos

Hi,

I have an issue in ALV grid display.

Let me explain.

i have 8 fields to display in which one is editiable.

Fields are: date

material,

material Description,

Opening Stock,

Closing stock- ( this field is editiable)

Closing stock,

Received Stock,

Actual production.

Actual production = Closing stock + removal stock

- receipt stock - opening stock.

when i change the value of closing stock and press enter, actual production should get update, the new values should display.

Thany you in advance.

Accepted Solutions (1)

Accepted Solutions (1)

Former Member
0 Kudos

Hi Nasser,

Use events tab in ALV.

In the user_command, make the calculation in the internal table for the entries where the values has been changed. And then display the ALV again using the function module or methods.

Thanks,

Arun

Answers (2)

Answers (2)

uwe_schieferstein
Active Contributor

Hello Naseer

The most important information in order to answer your question is missing:

Are you using fm-based or OO-based ALV lists?

I assume you are using fm-based.

In this case you need to define the USER_COMMAND routine (see documenation of fm) in your report. There make the recalcuations and finally set CHANGING parameter RS_SELFIELD-REFRESH = 'X'.

Using OO-based ALV this task is simply done by calling go_grid->check_changed_data( ) at PAI. This method transfers the changed data from the ALV frontend to your itab in the backend (= ABAP report). Redo your calculations and call method go_grid->refresh_table_display( ) before displaying the ALV again.

Regards

Uwe

Former Member
0 Kudos

Hi,

Please refer the code below:


REPORT z_demo_alv_jg.*******************************************************************
* TYPE-POOLS                                                      *
*******************************************************************
TYPE-POOLS: slis. *******************************************************************
* INTERNAL TABLES/WORK AREAS/VARIABLES     *
*******************************************************************
DATA: i_fieldcat TYPE slis_t_fieldcat_alv,
      i_index TYPE STANDARD TABLE OF i WITH HEADER LINE,
      w_field TYPE slis_fieldcat_alv,
      p_table LIKE dd02l-tabname,
      dy_table TYPE REF TO data,
      dy_tab TYPE REF TO data,
      dy_line TYPE REF TO data.*******************************************************************
* FIELD-SYMBOLS                                                   *
*******************************************************************
FIELD-SYMBOLS: <dyn_table> TYPE STANDARD TABLE,
               <dyn_wa> TYPE ANY,
               <dyn_field> TYPE ANY,
               <dyn_tab_temp> TYPE STANDARD TABLE.*******************************************************************
* SELECTION SCREEN                                                *
*******************************************************************
PARAMETERS: tabname(30) TYPE c,
            lines(5)  TYPE n.*******************************************************************
* START-OF-SELECTION                                              *
*******************************************************************
START-OF-SELECTION.* Storing table name
  p_table = tabname.* Create internal table dynamically with the stucture of table name
* entered in the selection screen
  CREATE DATA dy_table TYPE STANDARD TABLE OF (p_table).
  ASSIGN dy_table->* TO <dyn_table>.
  IF sy-subrc <> 0.
    MESSAGE i000(z_zzz_ca_messages) WITH ' No table found'.    LEAVE TO LIST-PROCESSING.
  ENDIF.
* Create workarea for the table
  CREATE DATA dy_line LIKE LINE OF <dyn_table>.
  ASSIGN dy_line->* TO <dyn_wa>.* Create another temp. table
  CREATE DATA dy_tab TYPE STANDARD TABLE OF (p_table).
  ASSIGN dy_tab->* TO <dyn_tab_temp>.  SORT i_fieldcat BY col_pos.* Select data from table
  SELECT * FROM (p_table)
  INTO TABLE <dyn_table>
  UP TO lines ROWS.  REFRESH <dyn_tab_temp>.* Display report
  CALL FUNCTION 'REUSE_ALV_LIST_DISPLAY'
    EXPORTING
      i_callback_program       = sy-repid
      i_structure_name         = p_table
      i_callback_user_command  = 'USER_COMMAND'
      i_callback_pf_status_set = 'SET_PF_STATUS'
    TABLES
      t_outtab                 = <dyn_table>
    EXCEPTIONS
      program_error            = 1
      OTHERS                   = 2.  IF sy-subrc <> 0.  ENDIF.*&-----------------------------------------------------------------*
*&      Form  SET_PF_STATUS
*&-----------------------------------------------------------------*
*       Setting custom PF-Status
*------------------------------------------------------------------*
*      -->RT_EXTAB   Excluding table
*------------------------------------------------------------------*
FORM set_pf_status USING rt_extab TYPE slis_t_extab.  SET PF-STATUS 'Z_STANDARD'.ENDFORM.                    "SET_PF_STATUS*&----------------------------------------------------------------*
*&      Form  user_command
*&-----------------------------------------------------------------*
*       Handling custom function codes
*------------------------------------------------------------------*
*      -->R_UCOMM      Function code value
*      -->RS_SELFIELD  Info. of cursor position in ALV
*------------------------------------------------------------------*
FORM user_command  USING    r_ucomm LIKE sy-ucomm
        			    rs_selfield TYPE slis_selfield.* Local data declaration
  DATA: li_tab TYPE REF TO data,
        l_line TYPE REF TO data.* Local field-symbols
  FIELD-SYMBOLS:<l_tab> TYPE table,
                <l_wa>  TYPE ANY.* Create table
  CREATE DATA li_tab TYPE STANDARD TABLE OF (p_table).
  ASSIGN li_tab->* TO <l_tab>.* Create workarea
  CREATE DATA l_line LIKE LINE OF <l_tab>.
  ASSIGN l_line->* TO <l_wa>.  CASE r_ucomm.*   When a record is selected
    WHEN '&IC1'.*     Read the selected record
      READ TABLE <dyn_table> ASSIGNING <dyn_wa> INDEX
      rs_selfield-tabindex.      IF sy-subrc = 0.*       Store the record in an internal table
        APPEND <dyn_wa> TO <l_tab>.*       Fetch the field catalog info
        CALL FUNCTION 'REUSE_ALV_FIELDCATALOG_MERGE'
          EXPORTING
            i_program_name         = 'Z_DEMO_PDF_JG'
            i_structure_name       = p_table
          CHANGING
            ct_fieldcat            = i_fieldcat
          EXCEPTIONS
            inconsistent_interface = 1
            program_error          = 2
            OTHERS                 = 3.
        IF sy-subrc = 0.*         Make all the fields input enabled except key fields
          w_field-input = 'X'.          MODIFY i_fieldcat FROM w_field TRANSPORTING input
          WHERE key IS INITIAL.        ENDIF.*       Display the record for editing purpose
        CALL FUNCTION 'REUSE_ALV_LIST_DISPLAY'
          EXPORTING
            i_callback_program    = sy-repid
            i_structure_name      = p_table
            it_fieldcat           = i_fieldcat
            i_screen_start_column = 10
            i_screen_start_line   = 15
            i_screen_end_column   = 200
            i_screen_end_line     = 20
          TABLES
            t_outtab              = <l_tab>
          EXCEPTIONS
            program_error         = 1
            OTHERS                = 2.        IF sy-subrc = 0.*         Read the modified data
          READ TABLE <l_tab> INDEX 1 INTO <l_wa>.*         If the record is changed then track its index no.
*         and populate it in an internal table for future
*         action
          IF sy-subrc = 0 AND <dyn_wa> <> <l_wa>.
            <dyn_wa> = <l_wa>.
            i_index = rs_selfield-tabindex.
            APPEND i_index.
          ENDIF.
        ENDIF.      ENDIF.*   When save button is pressed
    WHEN 'SAVE'.*     Sort the index table
      SORT i_index.*     Delete all duplicate records
      DELETE ADJACENT DUPLICATES FROM i_index.      LOOP AT i_index.*       Find out the changes in the internal table
*       and populate these changes in another internal table
        READ TABLE <dyn_table> ASSIGNING <dyn_wa> INDEX i_index.
        IF sy-subrc = 0.
          APPEND <dyn_wa> TO <dyn_tab_temp>.
        ENDIF.      ENDLOOP.*     Lock the table
      CALL FUNCTION 'ENQUEUE_E_TABLE'
        EXPORTING
          mode_rstable   = 'E'
          tabname        = p_table
        EXCEPTIONS
          foreign_lock   = 1
          system_failure = 2
          OTHERS         = 3.      IF sy-subrc = 0.*       Modify the database table with these changes
        MODIFY (p_table) FROM TABLE <dyn_tab_temp>.        REFRESH <dyn_tab_temp>.*       Unlock the table
        CALL FUNCTION 'DEQUEUE_E_TABLE'
          EXPORTING
            mode_rstable = 'E'
            tabname      = p_table.      ENDIF.
  ENDCASE.  rs_selfield-refresh = 'X'.ENDFORM.                    "user_command

Thanks,

Sriram Ponna.