2017-06-22 27 views
0

嗨ABAP的用户,我想问一下,我可以做什么过程收集在同一领域的数据?所有我想要做的就是总结或收集属于同日在dmbtr数据,(日期字段monat)(WERKS种植规范)我如何总结或收集同一领域的数据?

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. 

任何配置在我的代码的家伙?

+0

你想总结一个具体的月份或每月的数据(=他们组)? – Suncatcher

+0

是的,先生,我该如何做到这一点? – user7806296

+0

是什么?哪两种选择? – Suncatcher

回答

-1

这一切都归结到你如何定义你的内部表it_zfi_vbrp_bseg_1

对于COLLECT工作,你需要用字符类型键,然后填充字段类型定义它:

数据:开始it_zfi_vbrp_bseg_1发生0, werks type werks, month(2)type c, dmbtr type dmbtr, it_zfi_vbrp_bseg_1的结尾。

这将工作。

这不会:

数据:开始的it_zfi_vbrp_bseg_1发生0 包括结构VBRP。 data:monat type monat, dmbtr type dmbtr, it_zfi_vbrp_bseg的结尾。

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

+0

先生对不起,这是什么意思在几个月(2)类型c?那有什么用? – user7806296

+1

不正确。 'COLLECT'语句完全适用于'n'类型的'monat'类型。 – Suncatcher

1

假设,你已经扩展标准bsegmonat场,那么你应该这样做:

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(它通过主键求和)之后,你将不会有任何嘟嘟声。