我如何总结或收集同一领域的数据?

时间:2017-06-22 00:18:25

标签: sap abap

您好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.

我的代码中的任何配置?

2 个答案:

答案 0 :(得分:2)

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

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之后(通过主键进行求和),您将不会有任何重复。

答案 1 :(得分:-1)

这一切都取决于你如何定义内部表格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。 数据:monat type monat,         dmbtr型dmbtr,       结束了it_zfi_vbrp_bseg。

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