Application Development and Automation Discussions
Join the discussions or start your own on all things application development, including tools and APIs, programming models, and keeping your skills sharp.
cancel
Showing results for 
Search instead for 
Did you mean: 
Read only

filling dynamic internal table

Former Member
0 Likes
427

I have one internal table like below:

DATE KUNNR Qty

21/11/2006 A 10

22/11/2006 A 100

23/11/2006 B 20

21/11/2006 B 100

from this internal table I want to display like this:

Date A B <= different kunnr becomes columns

21/11/2006 10 100

22/11/2006 100 0

23/11/2006 0 20

i have written creation of internal table. now i want to fill that internal table as shown above.

How can I do that?

this is the code:


REPORT  zhkkdyntbl.

TYPE-POOLS:
  slis.

DATA:
  table LIKE dd02l-tabname,
  fieldcat TYPE lvc_t_fcat,
  gt_fieldcat TYPE slis_t_fieldcat_alv WITH HEADER LINE,
  fcat TYPE lvc_s_fcat,
  table_pointer TYPE REF TO data,
  line_pointer TYPE REF TO data.

FIELD-SYMBOLS:
  <table> TYPE STANDARD TABLE,
  <line> TYPE ANY,
  <field> TYPE ANY.

DATA:
  BEGIN OF int_data OCCURS 0,
    dt LIKE sy-datum,
    kunnr LIKE kna1-kunnr,
    qty LIKE vbrp-fkimg,
  END OF int_data.

START-OF-SELECTION.

  int_data-dt = '20061121'.
  int_data-kunnr = 'A'.
  int_data-qty = 10.
  APPEND int_data.
  CLEAR int_data.

  int_data-dt = '20061122'.
  int_data-kunnr = 'A'.
  int_data-qty = 100.
  APPEND int_data.
  CLEAR int_data.

  int_data-dt = '20061123'.
  int_data-kunnr = 'B'.
  int_data-qty = 20.
  APPEND int_data.
  CLEAR int_data.

  int_data-dt = '20061122'.
  int_data-kunnr = 'B'.
  int_data-qty = 100.
  APPEND int_data.
  CLEAR int_data.

  fcat-fieldname = 'DT'.
  fcat-seltext = 'Date'.
  APPEND fcat TO fieldcat.
  CLEAR fcat.

  SORT int_data BY kunnr.

  LOOP AT int_data.
    ON CHANGE OF int_data-kunnr.
      fcat-fieldname = int_data-kunnr.
      fcat-seltext = int_data-kunnr.
      APPEND fcat TO fieldcat.
      CLEAR fcat.
    ENDON.
  ENDLOOP.

*Create dynamic table in memory based upon fieldcat
  CALL METHOD cl_alv_table_create=>create_dynamic_table
    EXPORTING
      it_fieldcatalog = fieldcat
    IMPORTING
      ep_table        = table_pointer.

* pointer field symbol to internal table
  ASSIGN table_pointer->* TO <table>.

1 ACCEPTED SOLUTION
Read only

RichHeilman
Developer Advocate
Developer Advocate
0 Likes
384

Please add the following code in BOLD to your program.




*create dynamic table in memory based upon fieldcat
  call method cl_alv_table_create=>create_dynamic_table
           exporting
                    it_fieldcatalog = fieldcat
           importing
                    ep_table        = table_pointer.
* pointer field symbol to internal table
  assign table_pointer->* to <table>.

<b>  create data line_pointer like line of <table>.
  assign line_pointer->* to <line>.



* Sort by date, customer,
  sort int_data by dt kunnr.

* Build dynamic internal table
  loop at int_data.

    at new dt.
      collect <line> into <table>.
      clear <line>.
    endat.

    assign component 'DT' of structure <line> to <field>.
    if sy-subrc  = 0.
      <field> = int_data-dt.
    endif.

    assign component int_data-kunnr of structure <line> to <field>.
    if sy-subrc  = 0.
      <field> = int_data-qty.
    endif.

    at last.
      collect <line> into <table>.
      clear <line>.
    endat.

  endloop.



* Write out data from dynamic table.
  loop at <table> into <line>.
    do.
      assign component  sy-index  of structure <line> to <field>.
      if sy-subrc <> 0.
        exit.
      endif.
      if sy-index = 1.
        write:/ <field>.
      else.
        write: <field>.
      endif.
    enddo.
  endloop.</b>

Regards,

Rich Heilman

1 REPLY 1
Read only

RichHeilman
Developer Advocate
Developer Advocate
0 Likes
385

Please add the following code in BOLD to your program.




*create dynamic table in memory based upon fieldcat
  call method cl_alv_table_create=>create_dynamic_table
           exporting
                    it_fieldcatalog = fieldcat
           importing
                    ep_table        = table_pointer.
* pointer field symbol to internal table
  assign table_pointer->* to <table>.

<b>  create data line_pointer like line of <table>.
  assign line_pointer->* to <line>.



* Sort by date, customer,
  sort int_data by dt kunnr.

* Build dynamic internal table
  loop at int_data.

    at new dt.
      collect <line> into <table>.
      clear <line>.
    endat.

    assign component 'DT' of structure <line> to <field>.
    if sy-subrc  = 0.
      <field> = int_data-dt.
    endif.

    assign component int_data-kunnr of structure <line> to <field>.
    if sy-subrc  = 0.
      <field> = int_data-qty.
    endif.

    at last.
      collect <line> into <table>.
      clear <line>.
    endat.

  endloop.



* Write out data from dynamic table.
  loop at <table> into <line>.
    do.
      assign component  sy-index  of structure <line> to <field>.
      if sy-subrc <> 0.
        exit.
      endif.
      if sy-index = 1.
        write:/ <field>.
      else.
        write: <field>.
      endif.
    enddo.
  endloop.</b>

Regards,

Rich Heilman