如何仅对每个客户进行一次交易?例如,我的内部表需要显示客户的第一笔订单和第二笔订单的日期。所以我的内部表格详细信息如下:
但是我的动态Alv的结果是这样的:
例如在客户编号中“ 0001011111”行。有可能只是 使它像这样一行:
KUNNR 1stOrder LITERS1 2ndOrder LITERS2
0001011111 20180811 11 20180814 6
我的代码是这样的:
DATA: new_table TYPE REF TO data,
new_line TYPE REF TO data,
alv_layout TYPE lvc_s_layo,
alv TYPE REF TO cl_gui_alv_grid.
FIELD-SYMBOLS: <l_table> TYPE table,
<l_line> TYPE any,
<l_field> TYPE any.
CALL METHOD cl_alv_table_create=>create_dynamic_table
EXPORTING
it_fieldcatalog = it_fieldcat
IMPORTING
ep_table = new_table.
ASSIGN new_table->* TO <l_table>.
CREATE DATA new_line LIKE LINE OF <l_table>.
ASSIGN new_line->* TO <l_line>.
SORT it_main2 BY kunnr.
DATA(cpy_it_main) = it_main2.
DATA(replicate_it_main) = it_main2.
SORT replicate_it_main BY kunnr erdat1 vbeln.
DELETE ADJACENT DUPLICATES FROM replicate_it_main COMPARING kunnr.
SORT cpy_it_main BY kunnr vbeln.
DELETE ADJACENT DUPLICATES FROM cpy_it_main COMPARING vbeln.
LOOP AT replicate_it_main INTO DATA(wa_replicate).
dateflag = wa_replicate-erdat1.
DATA(cust) = wa_replicate-kunnr.
DATA(x) = 0.
DATA(y) = 0.
LOOP AT it_main2 INTO wa_main2 WHERE kunnr = cust.
DO 2 TIMES.
dateflag2 = wa_main2-erdat1.
ENDDO.
ASSIGN COMPONENT 'KUNNR' OF STRUCTURE <l_line> TO <l_field>.
<l_field> = wa_main2-kunnr.
ASSIGN COMPONENT 'NAME1' OF STRUCTURE <l_line> TO <l_field>.
<l_field> = wa_main2-name1.
ASSIGN COMPONENT 'KTEXT' OF STRUCTURE <l_line> TO <l_field>.
<l_field> = wa_main2-ktext.
ASSIGN COMPONENT 'MONTH' OF STRUCTURE <l_line> TO <l_field>.
<l_field> = wa_main2-month.
ASSIGN COMPONENT 'CGRP2' OF STRUCTURE <l_line> TO <l_field>.
<l_field> = wa_main2-cgrp2.
IF dateflag = dateflag2.
ASSIGN COMPONENT 'ERDAT1' OF STRUCTURE <l_line> TO <l_field>.
<l_field> = wa_main2-erdat1.
ASSIGN COMPONENT 'BRAND1' OF STRUCTURE <l_line> TO <l_field>.
<l_field> = wa_main2-brand1.
ASSIGN COMPONENT 'LITER1' OF STRUCTURE <l_line> TO <l_field>.
<l_field> = wa_main2-liter1.
ASSIGN COMPONENT 'VOLUM1A' OF STRUCTURE <l_line> TO <l_field>.
<l_field> = wa_main2-volum1a.
ASSIGN COMPONENT 'VOLUM2A' OF STRUCTURE <l_line> TO <l_field>.
<l_field> = wa_main2-volum2a.
ASSIGN COMPONENT 'VOLUM3A' OF STRUCTURE <l_line> TO <l_field>.
<l_field> = wa_main2-volum3a.
x = 1.
ELSE.
ASSIGN COMPONENT 'ERDAT2' OF STRUCTURE <l_line> TO <l_field>.
<l_field> = wa_main2-erdat1.
ASSIGN COMPONENT 'BRAND2' OF STRUCTURE <l_line> TO <l_field>.
<l_field> = wa_main2-brand1.
ASSIGN COMPONENT 'LITER2' OF STRUCTURE <l_line> TO <l_field>.
<l_field> = wa_main2-liter1.
ASSIGN COMPONENT 'VOLUM1B' OF STRUCTURE <l_line> TO <l_field>.
<l_field> = wa_main2-volum1a.
ASSIGN COMPONENT 'VOLUM2B' OF STRUCTURE <l_line> TO <l_field>.
<l_field> = wa_main2-volum2a.
ASSIGN COMPONENT 'VOLUM3B' OF STRUCTURE <l_line> TO <l_field>.
<l_field> = wa_main2-volum3a.
y = 1.
ENDIF.
dateflag3 = wa_main2-erdat.
INSERT <l_line> INTO TABLE <l_table>.
CLEAR: <l_line>, wa_main2.
ENDLOOP.
答案 0 :(得分:0)
坦率地说,您的代码似乎有些混乱。但是我认为您会得到多行,因为
INSERT <l_line> INTO TABLE <l_table>
。
使用字段符号时,这是不必要的,因为它们已经指向表条目,因此您已经在修改它。最后插入会在表中添加另一行,因此您将获得两行。
我建议您仔细阅读字段符号的用法,例如this tutorial