Использовать поле динамической структуры в ABAP

Вы можете запускать SQL-запросы, включая объединение на MongoDB с mongo_fdw из Postgres.

0
задан Jen Mer 17 January 2019 в 14:16
поделиться

3 ответа

Я создал рабочий пример с данными. Я верю, это определенно поможет вам. значения динамического поля вычисляются и результат отображается в конце.

  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 ).
0
ответ дан Umar Abdullah 17 January 2019 в 14:16
поделиться

Улучшена производительность со статической ссылкой на компоненты:

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.
0
ответ дан Sandra Rossi 17 January 2019 в 14:16
поделиться

Используйте приведенный ниже фрагмент кода

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.

Примечание: код написан, чтобы дать представление о том, как действовать дальше в этом выпуске. Как указала Сандра, это может привести к проблемам с компиляцией, пожалуйста, исправьте при необходимости. Я попытался ответить на вопрос только о выпуске мобильного устройства. У меня нет доступа к компилятору / системе в настоящее время.

0
ответ дан Ravi Andela 17 January 2019 в 14:16
поделиться
Другие вопросы по тегам:

Похожие вопросы: