事务内部表中仅动态alv中的一行

时间:2018-08-24 07:25:08

标签: sap abap hana alv

如何仅对每个客户进行一次交易?例如,我的内部表需要显示客户的第一笔订单和第二笔订单的日期。所以我的内部表格详细信息如下:enter image description here

但是我的动态Alv的结果是这样的:

enter image description here

  

例如在客户编号中“ 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.

1 个答案:

答案 0 :(得分:0)

坦率地说,您的代码似乎有些混乱。但是我认为您会得到多行,因为

INSERT <l_line> INTO TABLE <l_table>

使用字段符号时,这是不必要的,因为它们已经指向表条目,因此您已经在修改它。最后插入会在表中添加另一行,因此您将获得两行。

我建议您仔细阅读字段符号的用法,例如this tutorial