ABAP Dynamic table example
Get your Nimbus
Save to Nimbus
SAVE TO NIMBUS
2019-1-5 19:24:20
Full screen
Share

ABAP Dynamic table example

REPORT  zys_dyn_table.

DATA: lt_components TYPE cl_abap_structdescr=>component_table,
       r_table      TYPE REF TO data, "
ссылка для таблицы
       r_area       TYPE REF TO data. "
ссылка для структуры таблицы

FIELD-SYMBOLS: <table> TYPE STANDARD TABLE, "
будущая таблица
               <struc> TYPE ANY, "
структура таблицы
               <value> TYPE ANY. "
любое поле структуры

"
сформируем минимальный набор полей таблицы
PERFORM add_struc_item USING 'F1' 'STRING' CHANGING lt_components.
PERFORM add_struc_item USING 'F2' 'STRING' CHANGING lt_components.

"
создадим ссылку на таблицу
PERFORM create_table USING lt_components CHANGING r_table.

ASSIGN r_table->* TO <table>."
свяжем таблицу с реальной переменной

CREATE DATA r_area LIKE LINE OF <table>."
ссылка на структуру
ASSIGN r_area->* TO <struc>.
"структура

"простейший
пример заполнения строки динамической таблицы
APPEND INITIAL LINE TO <table> ASSIGNING <struc>.

ASSIGN COMPONENT 'F1' OF STRUCTURE <struc> TO <value>.
<value> = 'Value 1'.

ASSIGN COMPONENT 'F2' OF STRUCTURE <struc> TO <value>.
<value> = 'Value 2'.

"
простейший вывод на экран
LOOP AT <table> ASSIGNING <struc>.
  DO.
    ASSIGN COMPONENT sy-index OF STRUCTURE <struc> TO <value>.
    IF sy-subrc = 0.
      WRITE: <value>, '|'.
    ELSE.
      EXIT.
    ENDIF.
  ENDDO.
ENDLOOP.

"
подпрограмма добавления элемента структуры
FORM add_struc_item
    USING p_field TYPE cl_abap_structdescr=>component-name
          p_type TYPE any
 CHANGING pt_component TYPE cl_abap_structdescr=>component_table .

  DATA: ls_component LIKE LINE OF pt_component.

  ls_component-name = p_field.
  ls_component-type ?=  cl_abap_typedescr=>describe_by_name( p_type ).
  APPEND ls_component TO pt_component.
ENDFORM.

"
подпрограмма создания ссылки на динамическую таблтцу
FORM create_table USING pt_components TYPE cl_abap_structdescr=>component_table
      CHANGING p_table TYPE REF TO data.

  DATA: r_struc_typ   TYPE REF TO cl_abap_structdescr,
        r_dyntable_typ TYPE REF TO cl_abap_tabledescr,
        r_dyntable TYPE REF TO data,
        r_dynstruc TYPE REF TO data.

  r_struc_typ ?= cl_abap_structdescr=>create( p_components = pt_components ).
  r_dyntable_typ = cl_abap_tabledescr=>create( p_line_type = r_struc_typ ).

  CREATE DATA p_table TYPE HANDLE r_dyntable_typ.

ENDFORM.
 
Report as spam
<%= '<' %>script src="/dist/polyfill.dll.js"<%= '>' %><%= '<' %>/script<%= '>' %> <%= '<' %>script src="/dist/vendor.dll.js"<%= '>' %><%= '<' %>/script<%= '>' %>