インフリー技術情報発信ブログ

ERP(SAP)導入コンサルティング、ABAP開発、ホームページ制作、WEBシステム構築などを手掛ける、株式会社インフリーです。

フィールドシンボル 使ってみよう その3

さて、今回もフィールドシンボルを使ったソースコードの紹介です。

今回は、在庫履歴テーブルを基に、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.



フィールドシンボルのソースコード紹介は、今回で終了です。

さてさて、次回のテーマは・・・これから考えます

インフリー技術情報発信ブログ © 2013 Frontier Theme