0

SAP SQ01/SQ02 でレポートを作成しています。その目的は、指定された時間枠内で製品がピッキングされた回数を表示することです。

データは主にテーブル LTAP から取得されます。マテリアル XYZ が複製された行数をカウントし、その数を追加のフィールドに出力して値を表示できるようにする必要があるだけです。また、このカウントが指定された時間枠で行われるようにしたいと考えています。たとえば、過去 30 日間としましょう。これは、最新で関連性があることを確認するためです。

以下のコードは機能しますが、非常に遅く、たった 1 つのマテリアルのカウントを出力するのに数秒かかります。カウントに基づいて上位 1000 件を出力するレポートが必要です。同じことを達成するためのより効率的な方法はありますか?

データタブ

DATA : YEAR(4) TYPE N,
       MTH(2) TYPE N,
       DAY(2) TYPE N,
       YEAR1(4) TYPE N,
       MTH1(2) TYPE N,
       DAY1(2) TYPE N,
       FROM_DATE LIKE SY-DATUM,
       count1 like LTAP-UMREZ.
FIELD-SYMBOLS <fs_dtab> TYPE STANDARD TABLE.
DATA: sort_f1 TYPE fieldname.

初期化タブ

sort_f1 = 'ltap-matnr'.

レコード処理タブ

YEAR = SY-DATUM(4).
MTH = SY-DATUM+4(2).
DAY = SY-DATUM+6(2).
IF MTH eq 1.
    MTH1 = MTH + 11.
   ELSE.
    MTH1 = MTH - 1.
 ENDIF.
   IF MTH eq 1.
      YEAR1 = YEAR - 1.
        ELSE.
        YEAR1 = YEAR.
   ENDIF.
FROM_DATE(4) = YEAR1.
FROM_DATE+4(2) = MTH1.
FROM_DATE+6(2) = DAY.

タブの後の選択の終了

ASSIGN ('%G00[]') TO <fs_dtab>.
IF <fs_dtab> IS ASSIGNED.
  SORT <fs_dtab> BY (sort_f1)
                 DESCENDING.
  DELETE ADJACENT DUPLICATES FROM <fs_dtab>
  COMPARING (sort_f1).
ENDIF.

追加フィールド コード

LTAP では、フィールド UMREZ に番号「1」が入力されるため、ここではそれを使用して重複をカウントしています。

clear count.
Select sum( UMREZ ) as UMREZ
  from *LTAP into COUNT
  where *LTAP~MATNR eq LTAP-MATNR
  and *LTAP~QDATU GE from_date.

いくつかの材料コードについて、レポートは数分ではなく数秒で出てくると思います。これを達成できる代替コードまたは現在のコードの改善は非常に高く評価されます。

4

1 に答える 1