さて、今回もフィールドシンボルを使ったソースコードの紹介です。
今回は、在庫履歴テーブルを基に、12か月分を横1行に並ぶように、値を編集するロジックです。
これには、「ASSIGN COMPONENT (変数) OF STRUCTURE (構造) TO (フィールドシンボル).」の命令を使用します。
(変数)には、フィールドシンボルに割り当てる(構造)の項目位置(左から何番目か)または項目IDを定義します。
(構造)には、フィールドシンボルに割り当てる構造そのものを設定します。
(フィールドシンボル)は、当然、割当先のフィールドシンボルです。
下記、ソースコードには、方法1と方法2で(変数)への値の設定方法を現しています。
どちらも結果は同じになります。
REPORT zxxxxxxxxx.
* 品目マスタ保管場所セグメント: 履歴
TYPES: BEGIN OF typ_mardh,
matnr TYPE mardh-matnr,
lfmon TYPE mardh-lfmon,
labst TYPE mardh-labst,
END OF typ_mardh.
DATA: it_mardh TYPE STANDARD TABLE OF typ_mardh.
DATA: w_lfmon TYPE mardh-lfmon.
TYPES: BEGIN OF typ_month,
labst01 TYPE mardh-labst,
labst02 TYPE mardh-labst,
labst03 TYPE mardh-labst,
labst04 TYPE mardh-labst,
labst05 TYPE mardh-labst,
labst06 TYPE mardh-labst,
labst07 TYPE mardh-labst,
labst08 TYPE mardh-labst,
labst09 TYPE mardh-labst,
labst10 TYPE mardh-labst,
labst11 TYPE mardh-labst,
labst12 TYPE mardh-labst,
END OF typ_month.
DATA: st_month TYPE typ_month.
DATA: w_fld TYPE dd03l-fieldname.
DATA: w_index TYPE i.
FIELD-SYMBOLS <f_st> TYPE typ_mardh.
FIELD-SYMBOLS <f_itm>.
PARAMETERS p_matnr TYPE mard-matnr OBLIGATORY.
PARAMETERS p_werks TYPE mard-werks OBLIGATORY.
PARAMETERS p_lgort TYPE mard-lgort OBLIGATORY.
SELECT matnr lfmon labst
FROM mardh
INTO TABLE it_mardh
WHERE matnr = p_matnr
AND werks = p_werks
AND lgort = p_lgort.
CHECK sy-subrc = 0.
* 方法1
DO 12 TIMES.
ADD 1 TO w_index.
w_lfmon = w_index.
READ TABLE it_mardh ASSIGNING <f_st>
WITH KEY lfmon = w_lfmon.
CHECK sy-subrc = 0.
ASSIGN COMPONENT w_index OF STRUCTURE st_month TO <f_itm>.
CHECK sy-subrc = 0.
<f_itm> = <f_st>-labst.
ENDDO.
CLEAR: w_lfmon, st_month.
* 方法2
DO 12 TIMES.
ADD 1 TO w_lfmon.
READ TABLE it_mardh ASSIGNING <f_st>
WITH KEY lfmon = w_lfmon.
CHECK sy-subrc = 0.
CONCATENATE 'LABST' w_lfmon INTO w_fld.
ASSIGN COMPONENT w_fld OF STRUCTURE st_month TO <f_itm>.
CHECK sy-subrc = 0.
<f_itm> = <f_st>-labst.
ENDDO.
フィールドシンボルのソースコード紹介は、今回で終了です。
さてさて、次回のテーマは・・・これから考えます
