如何汇总或收集同一字段上的数据



嗨,ABAP 用户 我想问一下我是否可以进行什么过程来收集同一字段上的数据? 我只想在dmbtr中汇总或收集属于同一日期的数据,(日期字段monat((工厂代码(

it_zfi_vbrp_bseg_1-num3 = it_zfi_vbrp_bseg_1-werks.
it_zfi_vbrp_bseg_1-num2 = it_zfi_vbrp_bseg_1-dmbtr.
COLLECT it_zfi_vbrp_bseg_1.
DELETE ADJACENT DUPLICATES FROM it_zfi_vbrp_bseg_1 COMPARING ALL FIELDS.
Sort it_zfi_vbrp_bseg_1 by werks.
LOOP AT it_zfi_vbrp_bseg_1 into wa_zfi_vbrp_bseg_1 WHERE monat = '01'.
    IF wa_zfi_vbrp_bseg_1-werks EQ '4030'.
        WRITE:/, AT pos wa_zfi_vbrp_bseg_1-dmbtr. 
             
    ENDIF.
    
ENDLOOP.

我的代码有什么配置吗?

假设您已经使用monat字段扩展了标准bseg表,那么您应该这样做:

TYPES: BEGIN OF ty_zfi_vbrp_bseg_1,
        werks TYPE bseg-werks,
        monat TYPE monat,
        dmbtr TYPE bseg-dmbtr,
       END OF ty_zfi_vbrp_bseg_1.
DATA: it_zfi_vbrp_bseg_1 TYPE TABLE OF ty_zfi_vbrp_bseg_1,
      is_zfi_vbrp_bseg_1 TYPE ty_zfi_vbrp_bseg_1.
SELECT werks, monat, dmbtr
INTO TABLE @DATA(lt_bseg)
FROM bseg
WHERE werks = '4030'.
* summation of months
LOOP AT lt_bseg ASSIGNING FIELD-SYMBOL(<fs_line>).
  CLEAR: is_zfi_vbrp_bseg_1.
  MOVE-CORRESPONDING <fs_line> TO is_zfi_vbrp_bseg_1.
  COLLECT is_zfi_vbrp_bseg_1 INTO it_zfi_vbrp_bseg_1.
ENDLOOP.
* output the results
LOOP AT it_zfi_vbrp_bseg_1 ASSIGNING FIELD-SYMBOL(<zfi_line>).
    IF <zfi_line>-werks EQ '4030'.
        WRITE: / <zfi_line>-werks, <zfi_line>-monat, <zfi_line>-dmbtr.
    ENDIF.
ENDLOOP.

错误代码的几个注意事项:

  1. COLLECT不像单个语句那样工作,应该循环执行。
  2. 为了与语句求和COLLECT您应该声明工作区,以便所有非键字段都是数字。键字段(即使它是隐式键(可以是任何类型的,而不是 Ray 所说的。 N类型也可以。
  3. DELETE ADJACENT DUPLICATES在这里是多余的,因为在COLLECT之后(按主键求和(,您将没有任何重复。

这一切都取决于您如何定义内部表it_zfi_vbrp_bseg_1

要使 COLLECT 正常工作,您需要使用字符类型键后跟压缩字段类型来定义它:

数据:it_zfi_vbrp_bseg_1开始出现 0, werks type werks, 月(2(C型, DMBTR型DMBTR, it_zfi_vbrp_bseg_1结束。

那会起作用。

这不会:

数据:it_zfi_vbrp_bseg_1的开始出现 0。包括结构 VBRP。数据:莫纳特型莫纳特, DMBTR型DMBTR, it_zfi_vbrp_bseg结束。

阅读有关 COLLECT 的帮助并相应地定义汇总表。

相关内容

  • 没有找到相关文章

最新更新