Как динамически создать имя внутренней таблицы - PullRequest
0 голосов
/ 27 января 2020

Я хочу динамически создать имя ITAB, например, itab_name = | it_itab {time} |. где время равно 1 или 2 или .... Это будет стандартная таблица типов BAPIACGL09.
Что я хочу сделать, это запустить BAPI 'BAPI_ACC_BILLING_POST' более одного раза, и я хочу заполнить структуры и таблицы больше чем один раз, а именно, я хочу иметь GIT_ACCOUNTGL, GIT_ACCOUNTGL01, GIT_ACCOUNTGL02 и c и запускать BAPI столько раз, сколько у меня есть ITAB и структур.
Может кто-нибудь сказать мне, как это сделать?
Спасибо

Ответы [ 2 ]

4 голосов
/ 27 января 2020

Используйте таблицу таблиц. Каждая строка представляет один из обозначений, которые вы описываете. Обращайтесь к таблицам по их индексу, а не по какому-либо имени.

TYPES table_type TYPE STANDARD TABLE OF bapiacgl09 WITH EMPTY KEY.
TYPES collection_type TYPE STANDARD TABLE OF table_type WITH EMPTY KEY.

DATA all_results TYPE collection_type.

" collect the results
DO 100 TIMES.
  DATA(single_result) = " call bapi
  INSERT single_result INTO TABLE all_results.
ENDDO.

" access a specific result by index
DATA(forty_second_result) = all_results[ 42 ].

" iterate all results
LOOP AT all_results INTO single_result.
ENDLOOP.
0 голосов
/ 27 января 2020

Это зависит от того, что вы называете «Dynami c», но одна возможность, основанная на предложении Флориана (с использованием таблицы, в моем случае «таблицы сложной структуры»), такова:

TYPES : BEGIN OF ty_bapiarglist,
          " arguments passed to the BAPI
          accountgl TYPE STANDARD TABLE OF bapiacgl01 WITH EMPTY KEY,
          " ...
          " arguments returned by the BAPI
          return    TYPE STANDARD TABLE OF bapiret2 WITH EMPTY KEY,
          " ...
        END OF ty_bapiarglist.

DATA: bapiarglist  TYPE ty_bapiarglist,
      bapiarglists TYPE TABLE OF ty_bapiarglist.

"++++++++++++++
" Call BAPI
" Fill lists of arguments
"++++++++++++++

LOOP AT someitab...

  " fill arguments to transmit
  " bapiarglist-accountgl = ...

  CALL FUNCTION 'BAPI_ACC_BILLING_POST'
     ...
     TABLES
       accountgl = bapiarglist-accountgl
       return    = bapiarglist-return
       ...

  APPEND bapiarglist TO bapiarglists.

ENDLOOP.

"++++++++++++++
" Later usage
"++++++++++++++

LOOP AT bapiarglists INTO bapiarglist.
  ...
ENDLOOP.
...