我正在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.
我希望报告能在几秒钟内出来,而不是几分钟内发布几个材料代码。替代代码或对当前代码的改进将不胜感激。
DATA materials TYPE RANGE OF matnr.
SELECT
matnr AS material,
COUNT(*) AS count
FROM ltap
INTO TABLE @DATA(result)
WHERE matnr IN materials
AND qdatu >= @from_date
GROUP BY matnr.
确保列MATNR
上有索引。在当前的 S/4HANA 中,有一个适合HW6
,但它仅在 SAP HANA 上部署,在旧版本中可能不可用。