AI生成(ABAPソースコード)
REPORT zsample_parser_demo.
PARAMETERS: p_bukrs TYPE bukrs DEFAULT '1000'.
SELECT-OPTIONS: s_matnr FOR mara-matnr.
TYPES: BEGIN OF ty_result,
bukrs TYPE bukrs,
matnr TYPE matnr,
mtart TYPE mtart,
matkl TYPE matkl,
maktx TYPE maktx,
created_on TYPE erdat,
END OF ty_result.
TYPES: ty_t_result TYPE STANDARD TABLE OF ty_result WITH EMPTY KEY.
DATA: gt_result TYPE ty_t_result,
gs_result TYPE ty_result,
gv_count TYPE i,
gv_msg TYPE string.
CONSTANTS: c_true TYPE abap_bool VALUE abap_true,
c_false TYPE abap_bool VALUE abap_false.
START-OF-SELECTION.
PERFORM initialize.
PERFORM fetch_data USING p_bukrs CHANGING gt_result.
PERFORM validate_data USING gt_result CHANGING gv_msg.
IF gv_msg IS NOT INITIAL.
MESSAGE gv_msg TYPE 'E'.
ENDIF.
PERFORM display_data USING gt_result.
PERFORM finalize.
FORM initialize.
gv_count = 0.
gv_msg = ``.
ENDFORM.
FORM fetch_data USING iv_bukrs TYPE bukrs
CHANGING ct_result TYPE ty_t_result.
DATA: lt_mara TYPE STANDARD TABLE OF mara WITH EMPTY KEY,
ls_mara TYPE mara,
lv_lines TYPE i.
SELECT matnr mtart matkl erdat
FROM mara
INTO TABLE @lt_mara
WHERE matnr IN @s_matnr.
DESCRIBE TABLE lt_mara LINES lv_lines.
IF lv_lines = 0.
gv_msg = |No MARA rows found for selection.|.
RETURN.
ENDIF.
LOOP AT lt_mara INTO ls_mara.
CLEAR gs_result.
gs_result-bukrs = iv_bukrs.
gs_result-matnr = ls_mara-matnr.
gs_result-mtart = ls_mara-mtart.
gs_result-matkl = ls_mara-matkl.
gs_result-created_on = ls_mara-erdat.
SELECT SINGLE maktx
FROM makt
INTO @gs_result-maktx
WHERE matnr = @ls_mara-matnr
AND spras = @sy-langu.
APPEND gs_result TO ct_result.
gv_count = gv_count + 1.
ENDLOOP.
ENDFORM.
FORM validate_data USING it_result TYPE ty_t_result
CHANGING cv_msg TYPE string.
DATA lv_ok TYPE abap_bool VALUE abap_true.
IF lines( it_result ) > 1000.
lv_ok = abap_false.
cv_msg = |Too many rows: { lines( it_result ) }.|.
ENDIF.
READ TABLE it_result INDEX 1 INTO gs_result.
IF sy-subrc = 0 AND gs_result-matnr IS INITIAL.
lv_ok = abap_false.
cv_msg = |First row MATNR is initial.|.
ソース本体 トップレベル
%%{init: {'theme':'base','themeVariables':{
'primaryColor':'white',
'primaryTextColor':'#000000',
'primaryBorderColor':'#000000',
'lineColor':'#808080',
'textColor':'#6A7FABCC',
'fontSize':'14px'}}}%%
%%{ init: { 'flowchart': { 'curve': 'basis','wrap': true,'markdownAutoWrap': true,'wrappingWidth': 500 } } }%%
graph TD;
classDef default fill:#FFFFE0,stroke:#333,stroke-width:2px;
classDef clrPattern1 fill:#FFFF00,stroke:#333,stroke-width:2px;
classDef clrPattern2 fill:#F0E68C,stroke:#333,stroke-width:2px;
classDef clrPattern3 fill:#ADD8E6,stroke:#333,stroke-width:2px;
classDef clrPattern4 fill:#FFD700,stroke:#333,stroke-width:2px;
classDef clrPattern5 fill:#FFC0CB,stroke:#333,stroke-width:2px;
classDef clrPattern6 fill:#ADFF2F,stroke:#333,stroke-width:2px;
classDef clrPattern7 fill:#D3D3D3,stroke:#333,stroke-width:2px;
linkStyle default stroke:#808080,stroke-width:2px;
%%データ設定
T([トップレベル開始])
18(["33行目
メイン処理開始 'L33"]):::clrPattern7
19[["34行目
FORM呼出:initialize 'L34"]]:::clrPattern3
20[["35行目
FORM呼出:fetch_data
┗ 引数(USING):p_bukrs
┗ 変更(CHANGING):gt_result 'L35"]]:::clrPattern3
21[["36行目
FORM呼出:validate_data
┗ 引数(USING):gt_result
┗ 変更(CHANGING):gv_msg 'L36"]]:::clrPattern3
22{"37行目
gv_msg
は初期状態でないか 'L37"}:::clrPattern1
24[/"38行目
MESSAGE gv_msg TYPE 'E' 'L38"/]:::clrPattern6
25(["39行目
そうでない場合 'L39"]):::clrPattern7
26(["39行目
条件文終了 'L39"]):::clrPattern7
27[["40行目
FORM呼出:display_data
┗ 引数(USING):gt_result 'L40"]]:::clrPattern3
28[["41行目
FORM呼出:finalize 'L41"]]:::clrPattern3
%%ルート設定
T-->18
18-->19
19-->20
20-->21
21-->22
22-->|条件文 真へ|24
22-->|条件文 偽へ|25
24-->26
25-->26
26-->27
27-->28
フォーム番号 1:initialize【初期化】
%%{init: {'theme':'base','themeVariables':{
'primaryColor':'white',
'primaryTextColor':'#000000',
'primaryBorderColor':'#000000',
'lineColor':'#808080',
'textColor':'#6A7FABCC',
'fontSize':'14px'}}}%%
%%{ init: { 'flowchart': { 'curve': 'basis','wrap': true,'markdownAutoWrap': true,'wrappingWidth': 500 } } }%%
graph TD;
classDef default fill:#FFFFE0,stroke:#333,stroke-width:2px;
classDef clrPattern1 fill:#FFFF00,stroke:#333,stroke-width:2px;
classDef clrPattern2 fill:#F0E68C,stroke:#333,stroke-width:2px;
classDef clrPattern3 fill:#ADD8E6,stroke:#333,stroke-width:2px;
classDef clrPattern4 fill:#FFD700,stroke:#333,stroke-width:2px;
classDef clrPattern5 fill:#FFC0CB,stroke:#333,stroke-width:2px;
classDef clrPattern6 fill:#ADFF2F,stroke:#333,stroke-width:2px;
classDef clrPattern7 fill:#D3D3D3,stroke:#333,stroke-width:2px;
linkStyle default stroke:#808080,stroke-width:2px;
%%データ設定
29(["44行目
FORM開始:initialize.
'L44"])
30["45行目
gv_count に 0 を代入する 'L45"]
31["46行目
gv_msg に `` を代入する 'L46"]
32(["47行目
FORM終了 'L47"])
%%ルート設定
29-->30
30-->31
31-->32
フォーム番号 2:fetch_data【マスタデータ取得処理】
%%{init: {'theme':'base','themeVariables':{
'primaryColor':'white',
'primaryTextColor':'#000000',
'primaryBorderColor':'#000000',
'lineColor':'#808080',
'textColor':'#6A7FABCC',
'fontSize':'14px'}}}%%
%%{ init: { 'flowchart': { 'curve': 'basis','wrap': true,'markdownAutoWrap': true,'wrappingWidth': 500 } } }%%
graph TD;
classDef default fill:#FFFFE0,stroke:#333,stroke-width:2px;
classDef clrPattern1 fill:#FFFF00,stroke:#333,stroke-width:2px;
classDef clrPattern2 fill:#F0E68C,stroke:#333,stroke-width:2px;
classDef clrPattern3 fill:#ADD8E6,stroke:#333,stroke-width:2px;
classDef clrPattern4 fill:#FFD700,stroke:#333,stroke-width:2px;
classDef clrPattern5 fill:#FFC0CB,stroke:#333,stroke-width:2px;
classDef clrPattern6 fill:#ADFF2F,stroke:#333,stroke-width:2px;
classDef clrPattern7 fill:#D3D3D3,stroke:#333,stroke-width:2px;
linkStyle default stroke:#808080,stroke-width:2px;
%%データ設定
33(["49行目
FORM開始:fetch_data
┗ 引数: iv_bukrs TYPE bukrs
CHANGING ct_result TYPE ty_t_result
'L49"])
37["56行目
SELECT文:
SELECT:
SELECT matnr mtart matkl erdat
FROM mara
INTO TABLE @lt_mara
WHERE matnr IN @s_matnr.
'L56"]:::clrPattern5
38{"62行目
条件式を評価する:
lv_lines = 0 'L62"}:::clrPattern1
40["63行目
gv_msg に |No MARA rows found for selection.| を代入する 'L63"]
41["64行目
ここで処理を終了、ENDFORM にジャンプ 'L64"]
42(["65行目
そうでない場合 'L65"]):::clrPattern7
43(["65行目
条件文終了 'L65"]):::clrPattern7
44[/"67行目
内部テーブル lt_mara をループ処理:
┗ ワークエリア:ls_mara.
'L67"\]:::clrPattern2
45["68行目
変数の初期化:gs_result 'L68"]
46["69行目
gs_result-bukrs に iv_bukrs を代入する 'L69"]
47["70行目
gs_result-matnr に ls_mara-matnr を代入する 'L70"]
48["71行目
gs_result-mtart に ls_mara-mtart を代入する 'L71"]
49["72行目
gs_result-matkl に ls_mara-matkl を代入する 'L72"]
50["73行目
gs_result-created_on に ls_mara-erdat を代入する 'L73"]
51["76行目
SELECT文:
SELECT:
SELECT SINGLE maktx
FROM makt
INTO @gs_result-maktx
WHERE matnr = @ls_mara-matnr
AND spras = @sy-langu.
'L76"]:::clrPattern5
52[/"82行目
gs_resultにct_resultを追加する 'L82"/]:::clrPattern6
53["83行目
gv_count に gv_count + 1 を代入する 'L83"]
54(["84行目
繰返文終了 'L84"]):::clrPattern7
55(["85行目
FORM終了 'L85"])
%%ルート設定
33-->37
37-->38
38-->|条件文 真へ|40
38-->|条件文 偽へ|42
40-->41
41-->|RETURN|55
42-->43
43-->44
44-->|繰返し文継続へ|45
44-->|繰返文終了後の処理へ|55
45-->46
46-->47
47-->48
48-->49
49-->50
50-->51
51-->52
52-->53
53-->54
54-->|繰返文開始へ|44