0

我有一个包含 ff 结构的内部表。

 SO   Customer  Materialno  Materialgroup2  Liters
 001  James     1           GroupA          5
 001  James     2           GroupA          10
 001  James     3           GroupB          20
 002  John      2           GroupA          10
 002  John      3           GroupA          10
 002  John      4           GroupB          20
 002  John      5           GroupB          5

​ 我需要按客户、开票凭证和他们的物料组添加它2。​现在内部表的最终输出应该是这样的。

SO   Customer  MaterialGroup2  Liters
001  James     GroupA          15
001  James     GroupB          20
002  John      GroupA          20
002  John      GroupB          25

​</p>

4

2 回答 2

2
rt_result = VALUE #( FOR GROUPS group OF ls_source IN it_source
                     GROUP BY ( so             = ls_source-so
                                customer       = ls_source-customer
                                material_group = ls_source-material_group )
                     ( so             = group-so
                       customer       = group-customer
                       material_group = group-material_group
                       liters         = REDUCE #( INIT lv_liters = 0
                                                  FOR ls_member IN GROUP group
                                                  NEXT lv_liters = lv_liters + ls_member-liters ) ) ).
于 2018-08-13T10:30:03.043 回答
1

REPORT ztest.

TYPES:
  BEGIN OF ts_input,
    so            TYPE char3,
    customer      TYPE char5,
    materialno    TYPE i,
    materialgroup TYPE char6,
    liters        TYPE i,
  END OF ts_input,

  BEGIN OF ts_output,
    so            TYPE char3,
    customer      TYPE char5,
    materialgroup TYPE char6,
    liters        TYPE i,
  END OF ts_output.

DATA:
  lv_liters TYPE i,

  gt_input  TYPE STANDARD TABLE OF ts_input,
  gs_input  TYPE ts_input,
  gt_temp   TYPE STANDARD TABLE OF ts_output,
  gs_temp   TYPE ts_output,
  gt_output TYPE STANDARD TABLE OF ts_output,
  gs_output TYPE ts_output.

START-OF-SELECTION.
  gs_input-so            = '001'.
  gs_input-customer      = 'james'.
  gs_input-materialno    = 1.
  gs_input-materialgroup = 'GroupA'.
  gs_input-liters        = 5.
  APPEND gs_input TO gt_input.
  gs_input-so            = '001'.
  gs_input-customer      = 'james'.
  gs_input-materialno    = 2.
  gs_input-materialgroup = 'GroupA'.
  gs_input-liters        = 10.
  APPEND gs_input TO gt_input.
  gs_input-so            = '001'.
  gs_input-customer      = 'james'.
  gs_input-materialno    = 3.
  gs_input-materialgroup = 'GroupB'.
  gs_input-liters        = 20.
  APPEND gs_input TO gt_input.

  gs_input-so            = '002'.
  gs_input-customer      = 'john'.
  gs_input-materialno    = 2.
  gs_input-materialgroup = 'GroupA'.
  gs_input-liters        = 10.
  APPEND gs_input TO gt_input.
  gs_input-so            = '002'.
  gs_input-customer      = 'john'.
  gs_input-materialno    = 3.
  gs_input-materialgroup = 'GroupA'.
  gs_input-liters        = 10.
  APPEND gs_input TO gt_input.
  gs_input-so            = '002'.
  gs_input-customer      = 'john'.
  gs_input-materialno    = 4.
  gs_input-materialgroup = 'GroupB'.
  gs_input-liters        = 20.
  APPEND gs_input TO gt_input.
  gs_input-so            = '002'.
  gs_input-customer      = 'john'.
  gs_input-materialno    = 5.
  gs_input-materialgroup = 'GroupB'.
  gs_input-liters        = 5.
  APPEND gs_input TO gt_input.

  " move to temp. table, skip MaterialNo
  LOOP AT gt_input INTO gs_input.
    gs_temp-so            = gs_input-so.
    gs_temp-customer      = gs_input-customer.
    gs_temp-materialgroup = gs_input-materialgroup.
    gs_temp-liters        = gs_input-liters.
    APPEND gs_temp TO gt_temp.
  ENDLOOP.


  SORT gt_temp ASCENDING BY so customer materialgroup.

  LOOP AT gt_temp INTO gs_temp.
    AT NEW materialgroup.
      CLEAR lv_liters.
    ENDAT.

    lv_liters = lv_liters + gs_temp-liters.

    AT END OF materialgroup.
      gs_output-so            = gs_temp-so.
      gs_output-customer      = gs_temp-customer.
      gs_output-materialgroup = gs_temp-materialgroup.
      gs_output-liters        = lv_liters.
      APPEND gs_output TO gt_output.
    ENDAT.

  ENDLOOP.

于 2018-08-13T09:46:41.557 回答