ABAP New open SQL:少し複雑なテーブル結合をしてみる

今回は、従来(ABAP 7.3以前)では有効化エラーとなってしまうけれど、
New open SQLだから書ける!という類のテーブル結合を書いてみます。
BSEGテーブルに、勘定科目の名称を付加する。

L084:  SELECT
L085:      t0~bukrs,
L086:      t0~belnr,
L087:      t0~gjahr,
L088:      t0~buzei,
L089:      t0~shkzg,
L090:      t0~dmbtr,
L091:      t2~waers AS waers_d,
L092:      t0~wrbtr,
L093:      t1~waers,
L094:      t0~hkont,
L095:      t3~txt20
L096:    FROM bseg AS t0
L097:    INNER JOIN bkpf AS t1
L098:       ON t1~bukrs = t0~bukrs
L099:      AND t1~belnr = t0~belnr
L100:      AND t1~gjahr = t0~gjahr
L101:    INNER JOIN t001 AS t2
L102:       ON t2~bukrs = t0~bukrs
L103:    INNER JOIN skat AS t3 "注目
L104:       ON t3~ktopl = t2~ktopl "注目
L105:      AND t3~saknr = t0~hkont "注目
L106:      AND t3~spras = @sy-langu
L107:    ORDER BY
L108:      t0~bukrs,
L109:      t0~belnr,
L110:      t0~gjahr,
L111:      t0~buzei
L112:    INTO TABLE @DATA(lt_data).

注目すべきは、
SKAT:勘定コード表: テキストとT001:会社コードの結合条件と
SKAT:勘定コード表: テキストとBSEG:会計伝票明細の結合条件
つまり、3つのテーブルにまたがる結合条件を記述しているのです。
これを、従来からある(Classic) Open SQLで書くと有効化時にエラーが発生します。


少しプログラムを改変しました。(20171018)
L001:*&---------------------------------------------------------------------*
L002:*& Report Y_SQL_CONSOLE
L003:*&---------------------------------------------------------------------*
L004:*&
L005:*&---------------------------------------------------------------------*
L006:REPORT y_sql_console.
L007:
L008:*-----------------------------------------------------------------------
L009:* グローバル変数
L010:*-----------------------------------------------------------------------
L011:DATA gv_subrc TYPE sy-subrc.
L012:
L013:*-----------------------------------------------------------------------
L014:* 選択画面
L015:*-----------------------------------------------------------------------
L016:DATA gv_char1 TYPE char10.
L017:TYPES gtrt_char1 LIKE RANGE OF gv_char1.
L018:SELECT-OPTIONS s_char1 FOR gv_char1.
L019:
L020:DATA gv_char2 TYPE char10.
L021:TYPES gtrt_char2 LIKE RANGE OF gv_char2.
L022:SELECT-OPTIONS s_char2 FOR gv_char2.
L023:
L024:DATA gv_numc1 TYPE numc08.
L025:TYPES gtrt_numc1 LIKE RANGE OF gv_numc1.
L026:SELECT-OPTIONS s_numc1 FOR gv_numc1.
L027:
L028:DATA gv_numc2 TYPE numc08.
L029:TYPES gtrt_numc2 LIKE RANGE OF gv_numc2.
L030:SELECT-OPTIONS s_numc2 FOR gv_numc2.
L031:
L032:DATA gv_dats1 TYPE dats.
L033:TYPES gtrt_dats1 LIKE RANGE OF gv_dats1.
L034:SELECT-OPTIONS s_dats1 FOR gv_dats1.
L035:
L036:DATA gv_dats2 TYPE dats.
L037:TYPES gtrt_dats2 LIKE RANGE OF gv_dats2.
L038:SELECT-OPTIONS s_dats2 FOR gv_dats2.
L039:
L040:DATA gv_tims1 TYPE tims.
L041:TYPES gtrt_tims1 LIKE RANGE OF gv_tims1.
L042:SELECT-OPTIONS s_tims1 FOR gv_tims1.
L043:
L044:DATA gv_tims2 TYPE tims.
L045:TYPES gtrt_tims2 LIKE RANGE OF gv_tims2.
L046:SELECT-OPTIONS s_tims2 FOR gv_tims2.
L047:
L048:*-----------------------------------------------------------------------
L049:* 主処理
L050:*-----------------------------------------------------------------------
L051:START-OF-SELECTION.
L052:  PERFORM start_of_selection
L053:    USING
L054:      s_char1
L055:      s_char2

L056:      s_numc1
L057:      s_numc2

L058:      s_dats1
L059:      s_dats2

L060:      s_tims1
L061:      s_tims2

L062:    CHANGING
L063:      gv_subrc.
L064:
L065:*-----------------------------------------------------------------------
L066:* サブルーチン
L067:*-----------------------------------------------------------------------
L068:FORM start_of_selection
L069:    USING
L070:      urt_char1 TYPE gtrt_char1
L071:      urt_char2 TYPE gtrt_char2
L072:      urt_numc1 TYPE gtrt_numc1
L073:      urt_numc2 TYPE gtrt_numc2
L074:      urt_dats1 TYPE gtrt_dats1
L075:      urt_dats2 TYPE gtrt_dats2
L076:      urt_tims1 TYPE gtrt_tims1
L077:      urt_tims2 TYPE gtrt_tims2
L078:    CHANGING
L079:      cv_subrc TYPE sy-subrc.
L080:*-----------------------------------------------------------------------
L081:* ここに、SQL文を書いてね☆
L082:* 格納する内部テーブルは、lt_dataにしてね☆
L083:* lt_dataをインライン定義すると、楽ちんだ☆
L084:  SELECT
L085:      t0~bukrs,
L086:      t0~belnr,
L087:      t0~gjahr,
L088:      t0~buzei,
L089:      t0~shkzg,
L090:      t0~dmbtr,
L091:      t2~waers AS waers_d,
L092:      t0~wrbtr,
L093:      t1~waers,
L094:      t0~hkont,
L095:      t3~txt20
L096:    FROM bseg AS t0
L097:    INNER JOIN bkpf AS t1
L098:       ON t1~bukrs = t0~bukrs
L099:      AND t1~belnr = t0~belnr
L100:      AND t1~gjahr = t0~gjahr
L101:    INNER JOIN t001 AS t2
L102:       ON t2~bukrs = t0~bukrs
L103:    INNER JOIN skat AS t3 "注目
L104:       ON t3~ktopl = t2~ktopl "注目
L105:      AND t3~saknr = t0~hkont "注目
L106:      AND t3~spras = @sy-langu
L107:    ORDER BY
L108:      t0~bukrs,
L109:      t0~belnr,
L110:      t0~gjahr,
L111:      t0~buzei
L112:    INTO TABLE @DATA(lt_data).
L113:*-----------------------------------------------------------------------
L114:  TRY.
L115:      cl_salv_table=>factory(
L116:        IMPORTING
L117:          r_salv_table = DATA(lo_alv)
L118:        CHANGING
L119:          t_table  = lt_data ).
L120:    CATCH cx_salv_msg INTO DATA(lx_salv_msg).
L121:      cv_subrc = 8.
L122:      RETURN.
L123:  ENDTRY.
L124:  DATA(lo_functions) = lo_alv->get_functions( ).
L125:  lo_functions->set_all( ).
L126:  DATA(lo_selections) = lo_alv->get_selections( ).
L127:  lo_selections->set_selection_mode(
L128:  EXPORTING
L129:  value = if_salv_c_selection_mode=>multiple ).
L130:  lo_alv->display( ).
L131:
L132:  cv_subrc = 0.
L133:ENDFORM.


検索キーワード
ABAP
ABAP 7.4
ABAP 7.40
ABAP 7.5
ABAP 7.50
SQL
Open SQL
New Open SQL
SAP HANA
Code to Data
Code Pushdown
INNER JOIN

以上