Как зацикливаться на таблице, только имея ссылку на данные

Я использую функциональный модуль RSAQ_QUERY_CALL, возвращая таблицу:

DATA: gr_data TYPE REF TO data.

CALL FUNCTION 'RSAQ_QUERY_CALL'
     EXPORTING
       query          = 'ZXXXXXXXX'
       usergroup      = 'XXX'
       VARIANT        = 'TEST'
       SKIP_SELSCREEN = 'X'
       DATA_TO_MEMORY = 'X'
     IMPORTING
       ref_to_ldata   = gr_data
     EXCEPTIONS
       OTHERS         = 11.

Как теперь перейти к этому столу?

Что я пробовал:

  • присвоить символу поля
  • передача символа поля вместо dref

Оба не работали.


person inetphantom    schedule 05.09.2016    source источник
comment
Какой код вы пробовали, каковы были проблемы / сообщения об ошибках?   -  person vwegert    schedule 05.09.2016
comment
Мои попытки были очень неудачными, я получал синтаксические ошибки и сообщения о несовместимости типов. Я удалил эти попытки, ища другие возможности, но не нашел, так как структура таблицы не исправлена.   -  person inetphantom    schedule 05.09.2016


Ответы (2)


Я нашел решение (спросив старшего разработчика ..)

FIELD-SYMBOLS: <gt_data> type table,
               <row>     type any.

ASSIGN gr_data->* to <gt_data>.

LOOP AT <gt_data> ASSIGNING <row>.

  DO.
    ASSIGN COMPONENT sy-index OF STRUCTURE <row> TO <field>.
    IF sy-subrc <> 0.
      EXIT. " last field of row
    ENDIF.

    WRITE : / 'Field', sy-index, ':', <field>.

  ENDDO.
    
ENDLOOP.
person inetphantom    schedule 05.09.2016
comment
Если вы хотите сделать это типизированным, вы можете использовать методы классов ABAP RTTS, которые работают как фабрика. Стол можно осмотреть. Затем вы можете получить тип таблицы, а на следующем шаге вы можете создать структуру или символ поля на основе типа структуры таблицы. Таким образом можно сделать хорошие общие вещи. - person icbytes; 05.09.2016

Обратитесь к этому коду:

    FIELD-SYMBOLS: <gt_data> type table,
                   <fs_value> type any.
    ASSIGN gref_data->* to <gt_data>.
    LOOP AT <gt_data> ASSIGNING <fs_value>.
         write:<fs_value>.                 "Here you will get row by row
    ENDLOOP.
person Leelaprasad Kolapalli    schedule 22.09.2016