ABAP – Select * and INNER JOIN … INTO CORRESPONDING FIELDS OF TABLE если необходимы все поля только из одной таблицы

Если нужно выбрать все поля одной таблицы и только несколько полей другой (объединенной) таблицы, или имена полей совпадают необходимо указать все обязательные поля вручную. Невозможно написать SELECT TAB_1 ~ * TAB_2 ~ FIELD_1 TAB_2 ~ FIELD_2… . Можно сделать это проще :

types: tt_fields type table of char300.
FORM ADD_TABFIELDS_FOR_SELECTION  using iv_tabname
                                 changing ct_fields type tt_fields.
data:lt_dfies  type dfies_tab,
     str type string,
     lv_tabname type ddobjname.
field-symbols: <fs_dfies> like line of lt_dfies.
  lv_tabname = iv_tabname.

  call function 'DDIF_FIELDINFO_GET'
    exporting
      tabname   = lv_tabname
    tables
      dfies_tab = lt_dfies.

* append each field as line of tabname~fieldname of the itab
  loop at lt_dfies assigning <fs_dfies>.
    concatenate <fs_dfies>-tabname '~'  <fs_dfies>-fieldname into str.
    append str to ct_fields.
  endloop.
ENDFORM.

data: lt_fields TYPE tt_fields.
* Получаем поля таблицы vbak Получаем поля для vbak для select
   perform add_tabfields_for_selection using 'VBAK'
                                      changing lt_fields.
      select (lt_fields)
        from kna1 inner join vbak on vbak~kunnr = kna1~kunnr
        into corresponding fields of table gt_vbak
        where ( vbtyp = 'G' or vbtyp = 'C' or vbtyp = 'H' or vbtyp = 'I' or vbtyp = 'K' or vbtyp = 'L' )
          and bstdk in sbstdk and vbeln in svbeln and vbak~kunnr in skunnr
          and vkbur in svkbur and vkgrp in svkgrp and auart in sauart and bstnk in sbstnk and vkorg in svkorg and land1 in land1.


1

Добавить комментарий