0

I am trying to remove rows that have empty values in one column segment. The table is declared dynamically so it does not have a standard type that I can use in DATA declaration like I used to do (DATA table_x TYPE BSEG). I tried to create structure based of the imported table but I receive an error:

The data object "LS_DYN_TABLE" does not have a structure and therefore does not have a component called "SEGMENT"

Is there any way to declare dynamically a structure so I can loop through a table, remove rows and pass filtered table further?

    DATA:
      dy_table          TYPE REF TO data.


    FIELD-SYMBOLS:

      <dyn_table>  TYPE STANDARD TABLE,
      <fs_segment> TYPE any.

    IF ID  = '1234'.


      me->method_that_import_desired_table( IMPORTING et_table = dy_table ).
      ASSIGN dy_table->* TO <dyn_table>.
      DATA(ls_dyn_table) = dy_table.
      LOOP AT <dyn_table> ASSIGNING FIELD-SYMBOL(<fs_row>).
        
        IF ls_dyn_table-segment IS INITIAL.
          CONTINUE.
        ENDIF.
      ENDLOOP.
    ENDIF.
Sandra Rossi
  • 11,934
  • 5
  • 22
  • 48
  • Does this answer your question (SOLUTION 2)? [Looping through a dynamic internal table](https://stackoverflow.com/questions/72462216/looping-through-a-dynamic-internal-table) – Sandra Rossi Jul 13 '23 at 13:16

1 Answers1

0

When you loop the internal table, you have to assign the field segment dynamically and check if it has a value:

LOOP AT <dyn_table>
     ASSIGNING FIELD-SYMBOL(<fs_row>).
  DATA(tabix) = sy-tabix. "note row index in internal table
  ASSIGN COMPONENT 'SEGMENT'
         OF STRUCTURE <fs_row>
         TO FIELD-SYMBOL(<segment>). 
  IF sy-subrc EQ 0 AND
     <segment> IS INITIAL.
    DELETE <dyn_table> INDEX tabix. "delete by row index
  ENDIF.
ENDLOOP.
József Szikszai
  • 4,791
  • 3
  • 14
  • 24