Вы можете запускать SQL-запросы, включая объединение на MongoDB с mongo_fdw из Postgres.
Я создал рабочий пример с данными. Я верю, это определенно поможет вам. значения динамического поля вычисляются и результат отображается в конце.
TYPES: BEGIN OF ty_itab,
currency TYPE c,
fieldk TYPE i,
fieldt TYPE i,
fieldh TYPE i,
END OF ty_itab.
TYPES: BEGIN OF ty_structure,
fieldk TYPE i,
fieldt TYPE i,
fieldh TYPE i,
END OF ty_structure.
DATA: itab TYPE TABLE OF ty_itab,
ls_structure TYPE ty_structure.
itab = VALUE #( ( currency = 'H' fieldk = 10 fieldt = 20 fieldh = 30 )
( currency = 'H' fieldk = 50 fieldt = 60 fieldh = 70 )
( currency = 'T' fieldk = 100 fieldt = 120 fieldh = 150 )
( currency = 'K' fieldk = 300 fieldt = 400 fieldh = 500 ) ).
LOOP AT itab ASSIGNING FIELD-SYMBOL(<fs>).
CASE <fs>-currency.
WHEN 'K'. ADD <fs>-fieldk TO ls_structure-fieldk.
WHEN 'T'. ADD <fs>-fieldt TO ls_structure-fieldt.
WHEN 'H'. ADD <fs>-fieldh TO ls_structure-fieldh.
ENDCASE.
ENDLOOP.
cl_demo_output=>display( ls_structure ).
Улучшена производительность со статической ссылкой на компоненты:
TYPES: BEGIN OF ty_structure,
fieldk TYPE i,
fieldt TYPE i,
fieldh TYPE i,
END OF ty_structure.
DATA: itab TYPE TABLE OF ty_structure,
mystructure TYPE ty_structure,
currency TYPE c LENGTH 1.
LOOP AT itab ASSIGNING FIELD-SYMBOL(<fs>).
CASE currency.
WHEN 'K'. ADD <fs>-fieldk TO mystructure-fieldk.
WHEN 'T'. ADD <fs>-fieldt TO mystructure-fieldt.
WHEN 'H'. ADD <fs>-fieldh TO mystructure-fieldh.
ENDCASE.
ENDLOOP.
Если вы хотите упростить код, вы можете использовать макрос (встроенный код):
LOOP AT itab ASSIGNING FIELD-SYMBOL(<fs>).
DEFINE m_add.
IF currency = 'K'.
ADD <fs>-field&1 TO mystructure-field&1.
ENDIF.
END-OF-DEFINITION.
m_add : K, T, H.
ENDLOOP.
Используйте приведенный ниже фрагмент кода
LOOP AT ITAB ASSIGNING <fs-structure>.
*-- determination of field name logic goes here let's say you have
*-- field name is in variable lv_field
ASSIGN COMPONENT (lv_field) of STRUCTURE <fs-structure> to <fs-field>.
IF <fs-field> IS ASSIGNED.
<fs-field> = 'the value you want to assign'.
ENDIF.
ENDLOOP.
Надеюсь, это прояснится.
Допустим, вы хотите вычислять на основе других полей в той же структуре
LOOP AT ITAB ASSIGNING <fs-structure>.
*-- determination of field name logic goes here let's say you have
*-- field name is in variable lv_field1 and other is lv_field2
ASSIGN COMPONENT (lv_field1) of STRUCTURE <fs-structure> to <fs-field1>.
ASSIGN COMPONENT (lv_field2) of STRUCTURE <fs-structure> to <fs-field2>.
IF <fs-field1> IS ASSIGNED ANDV<fs-field2> IS ASSIGNED .
<fs-field1> = <fs-field1> + <fs-field1>.
ENDIF.
ENDLOOP.
Примечание: код написан, чтобы дать представление о том, как действовать дальше в этом выпуске. Как указала Сандра, это может привести к проблемам с компиляцией, пожалуйста, исправьте при необходимости. Я попытался ответить на вопрос только о выпуске мобильного устройства. У меня нет доступа к компилятору / системе в настоящее время.