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

Dynamic Report

Former Member
0 Likes
523

Hi experts,

I want to create dynamic report where in i'l give group codes in selection screen.Accordingly no of columns will be displayed.Suppose if i enter three groupcodes then three columns,likewise.

please suggests useful logic.

Useful answers will be rewarded.

Thanks.

1 ACCEPTED SOLUTION
Read only

Former Member
0 Likes
493

Hi Kashyap,

As i see it, the answer for your problem is dynamic table which will be created and filled according to your input while program running.

Here is a excelent link for it.

/people/rich.heilman2/blog/2005/07/27/dynamic-internal-tables-and-structures--abap

Hope i helped

Regards

Yossi Rozenberg

3 REPLIES 3
Read only

Former Member
0 Likes
494

Hi Kashyap,

As i see it, the answer for your problem is dynamic table which will be created and filled according to your input while program running.

Here is a excelent link for it.

/people/rich.heilman2/blog/2005/07/27/dynamic-internal-tables-and-structures--abap

Hope i helped

Regards

Yossi Rozenberg

Read only

Former Member
0 Likes
493

your part of the code is present in routine

perform dynamic_table.

&----


*& Report ZCS_NAC_MAT_CHARACTERISTICS

*&

*************************************************************************

  • 2/ Description ...: Business requirement is to get all materials

  • without any characteristic values maintained in SAP

  • which are given in the selection screen.

*************************************************************************

REPORT znac_material_char.

TYPE-POOLS : abap,

slis.

TABLES : kssk,

klah,

mara,

makt,

cabn,

t134,

t023.

DATA : i_fieldcat TYPE slis_t_fieldcat_alv ,

wa_fieldcat TYPE slis_fieldcat_alv.

DATA : w_layout TYPE slis_layout_alv.

DATA : st_layout TYPE slis_layout_alv.

DATA : t_header TYPE slis_t_listheader,

w_header TYPE slis_listheader.

TYPES : BEGIN OF ty_cabn,

atinn TYPE cabn-atinn,

atnam TYPE cabn-atnam,

END OF ty_cabn.

DATA : i_cabn TYPE STANDARD TABLE OF ty_cabn WITH HEADER LINE.

DATA : w_cabn LIKE i_cabn.

TYPES : BEGIN OF ty_ausp,

objek TYPE ausp-objek,

atinn TYPE ausp-atinn,

klart TYPE ausp-klart,

END OF ty_ausp.

DATA : i_ausp TYPE STANDARD TABLE OF ty_ausp WITH HEADER LINE.

DATA : w_ausp LIKE i_ausp.

TYPES : BEGIN OF ty_mara,

matnr TYPE mara-matnr,

mtart TYPE mara-mtart,

matkl TYPE mara-matkl,

prdha TYPE mara-prdha,

mstae TYPE mara-mstae,

mstde TYPE mara-mstde,

END OF ty_mara.

DATA : i_mara TYPE STANDARD TABLE OF ty_mara WITH HEADER LINE.

DATA : w_mara LIKE i_mara.

DATA : i_mara_temp TYPE STANDARD TABLE OF ty_mara WITH HEADER LINE.

DATA : w_mara_temp LIKE i_mara_temp.

TYPES :BEGIN OF ty_data,

atnam TYPE cabn-atnam,

atinn TYPE cabn-atinn,

objek TYPE ausp-objek,

klart TYPE ausp-klart,

matnr TYPE mara-matnr,

maktx TYPE makt-maktx,

mtart TYPE mara-mtart,

matkl TYPE mara-matkl,

prdha TYPE mara-prdha,

mstae TYPE mara-mstae,

mstde TYPE mara-mstde,

END OF ty_data.

DATA : i_data TYPE STANDARD TABLE OF ty_data WITH HEADER LINE.

DATA : w_data LIKE i_data.

DATA : i_class TYPE STANDARD TABLE OF sclass WITH HEADER LINE.

DATA : w_class LIKE i_class.

DATA : i_class_temp TYPE STANDARD TABLE OF sclass WITH HEADER LINE.

DATA : w_class_temp LIKE i_class_temp.

DATA : i_objdata TYPE STANDARD TABLE OF clobjdat WITH HEADER LINE.

DATA : w_objdata LIKE i_objdata.

TYPES : BEGIN OF ty_objdata_temp.

TYPES: matnr TYPE mara-matnr.

TYPES: maktx TYPE makt-maktx.

INCLUDE STRUCTURE clobjdat.

TYPES : prdha TYPE mara-prdha.

TYPES : mstde TYPE mara-mstde.

TYPES : END OF ty_objdata_temp.

DATA : i_objdata_temp TYPE STANDARD TABLE OF ty_objdata_temp WITH HEADER LINE.

DATA : w_objdata_temp LIKE i_objdata_temp.

FIELD-SYMBOLS: <t_dyntable> TYPE STANDARD TABLE,

<fs_dyntable>,

<fs_fldval> TYPE ANY.

DATA: t_newtable TYPE REF TO data,

t_newline TYPE REF TO data,

fs_fldcat TYPE slis_t_fieldcat_alv,

t_fldcat1 TYPE lvc_t_fcat,

wa_it_fldcat TYPE lvc_s_fcat,

wa_colno(2) TYPE n,

wa_flname(30) TYPE c.

DATA: fieldname(20) TYPE c.

DATA: fieldvalue(40) TYPE c.

DATA: index(3) TYPE c,

v_time(60) TYPE c.

DATA: wa_cat LIKE LINE OF fs_fldcat.

CONSTANTS : c_nac TYPE klah-class VALUE 'NAC',

c_klart TYPE ausp-klart VALUE '001',

c_check TYPE c VALUE 'X' .

SELECTION-SCREEN BEGIN OF BLOCK b1 WITH FRAME TITLE text-000.

SELECTION-SCREEN BEGIN OF LINE.

SELECTION-SCREEN COMMENT (28) text-001 .

SELECT-OPTIONS: s_atnam FOR cabn-atnam NO INTERVALS OBLIGATORY. " Characteristic name

SELECTION-SCREEN END OF LINE.

SELECTION-SCREEN END OF BLOCK b1 .

SELECTION-SCREEN BEGIN OF BLOCK b2 WITH FRAME TITLE text-002.

SELECT-OPTIONS: s_matnr FOR mara-matnr. " material Number

SELECT-OPTIONS: s_mtart FOR mara-mtart. " material type

SELECT-OPTIONS: s_matkl FOR mara-matkl. " material type

SELECT-OPTIONS: s_mstae FOR mara-mstae. " X-Plant material status

PARAMETERS : s_date LIKE sy-datum OBLIGATORY DEFAULT sy-datum . " date

SELECTION-SCREEN END OF BLOCK b2 .

AT SELECTION-SCREEN ON s_atnam.

SELECT SINGLE * FROM cabn WHERE atnam IN s_atnam.

IF sy-subrc <> 0.

MESSAGE text-003 TYPE 'E'.

ENDIF.

AT SELECTION-SCREEN ON s_matnr.

SELECT SINGLE * FROM mara WHERE matnr IN s_matnr.

IF sy-subrc <> 0.

MESSAGE text-004 TYPE 'E'.

ENDIF.

AT SELECTION-SCREEN ON s_mtart.

SELECT SINGLE * FROM t134 WHERE mtart IN s_mtart.

IF sy-subrc <> 0.

MESSAGE text-005 TYPE 'E'.

ENDIF.

AT SELECTION-SCREEN ON s_matkl.

SELECT SINGLE * FROM t023 WHERE matkl IN s_matkl.

IF sy-subrc <> 0.

MESSAGE text-006 TYPE 'E'.

ENDIF.

START-OF-SELECTION.

PERFORM get_data.

PERFORM get_data_keydate.

PERFORM material_all_charname.

PERFORM get_classification.

PERFORM dynamic_table.

&----


*& Form dynamic_table

&----


  • text

----


  • --> p1 text

  • <-- p2 text

----


FORM dynamic_table.

PERFORM fieldcatalog.

PERFORM dynamic_table_create.

PERFORM final_data.

PERFORM final_fieldcatalog.

PERFORM layout_build.

PERFORM grid_display.

ENDFORM. " fieldcat

&----


*& Form layout_build

&----


  • text

----


FORM layout_build .

st_layout-zebra = c_check.

st_layout-no_vline = ''.

st_layout-colwidth_optimize = c_check.

st_layout-detail_popup = c_check.

st_layout-detail_initial_lines = c_check.

st_layout-detail_titlebar = text-021.

ENDFORM. " layout_build

&----


*& Form alv_top_of_page

&----


  • text

----


FORM alv_top_of_page.

REFRESH t_header.

CLEAR t_header.

w_header-typ = 'H'. "H=Header, S=Selection, A=Action

w_header-key = ' '.

w_header-info = text-019.

APPEND w_header TO t_header.

CONCATENATE sy-datum4(2) '-' sy-datum6(2) '-' sy-datum0(4) ' / ' sy-uzeit0(2) ':' sy-uzeit2(2) ':' sy-uzeit4(2) INTO v_time.

w_header-typ = 'S'. "H=Header, S=Selection, A=Action

w_header-key = text-020.

w_header-info = v_time.

APPEND w_header TO t_header.

CALL FUNCTION 'REUSE_ALV_COMMENTARY_WRITE'

EXPORTING

it_list_commentary = t_header.

ENDFORM. "alv_top_of_page

&----


*& Form grid_display

&----


  • text

----


  • --> p1 text

  • <-- p2 text

----


FORM grid_display .

CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'

EXPORTING

i_callback_program = sy-repid

i_callback_top_of_page = 'ALV_TOP_OF_PAGE'

it_fieldcat = fs_fldcat

is_layout = st_layout

i_default = c_check

i_save = 'A'

  • it_events = v_events[]

TABLES

t_outtab = <t_dyntable>.

ENDFORM. " grid_display

&----


*& Form FINAL_FIELDCATALOG

&----


  • text

----


  • --> p1 text

  • <-- p2 text

----


FORM final_fieldcatalog .

wa_cat-fieldname = text-009.

wa_cat-seltext_m = text-015.

wa_cat-outputlen = 18.

APPEND wa_cat TO fs_fldcat.

wa_cat-fieldname = text-011.

wa_cat-seltext_m = text-016.

wa_cat-outputlen = 40.

APPEND wa_cat TO fs_fldcat.

LOOP AT s_atnam.

CLEAR wa_cat.

wa_cat-fieldname = s_atnam-low.

wa_cat-seltext_m = s_atnam-low.

wa_cat-outputlen = '15'.

APPEND wa_cat TO fs_fldcat.

ENDLOOP.

wa_cat-fieldname = text-012.

wa_cat-seltext_m = text-017.

wa_cat-outputlen = 18.

APPEND wa_cat TO fs_fldcat.

wa_cat-fieldname = text-013.

wa_cat-seltext_m = text-018.

wa_cat-outputlen = 8.

APPEND wa_cat TO fs_fldcat.

ENDFORM. " FINAL_FIELDCATALOG

&----


*& Form FIELDCATALOG

&----


  • text

----


  • --> p1 text

  • <-- p2 text

----


FORM fieldcatalog .

wa_it_fldcat-fieldname = text-009.

wa_it_fldcat-datatype = text-010.

wa_it_fldcat-intlen = 18.

APPEND wa_it_fldcat TO t_fldcat1.

wa_it_fldcat-fieldname = text-011.

wa_it_fldcat-datatype = text-010.

wa_it_fldcat-intlen = 40.

APPEND wa_it_fldcat TO t_fldcat1.

LOOP AT s_atnam.

CLEAR wa_it_fldcat.

wa_it_fldcat-fieldname = s_atnam-low.

wa_it_fldcat-datatype = text-010.

wa_it_fldcat-intlen = 30.

APPEND wa_it_fldcat TO t_fldcat1.

ENDLOOP.

wa_it_fldcat-fieldname = text-012.

wa_it_fldcat-datatype = text-010.

wa_it_fldcat-intlen = 18.

APPEND wa_it_fldcat TO t_fldcat1.

wa_it_fldcat-fieldname = text-013.

wa_it_fldcat-datatype = text-014.

wa_it_fldcat-intlen = 8.

APPEND wa_it_fldcat TO t_fldcat1.

ENDFORM. " FIELDCATALOG

&----


*& Form DYNAMIC_TABLE_CREATE

&----


  • text

----


  • --> p1 text

  • <-- p2 text

----


FORM dynamic_table_create .

  • Create dynamic internal table and assign to FS

CALL METHOD cl_alv_table_create=>create_dynamic_table

EXPORTING

it_fieldcatalog = t_fldcat1

IMPORTING

ep_table = t_newtable.

ASSIGN t_newtable->* TO <t_dyntable>.

  • Create dynamic work area and assign to FS

CREATE DATA t_newline LIKE LINE OF <t_dyntable>.

ASSIGN t_newline->* TO <fs_dyntable>.

ENDFORM. " DYNAMIC_TABLE_CREATE

&----


*& Form FINAL_DATA

&----


  • text

----


  • --> p1 text

  • <-- p2 text

----


FORM final_data .

LOOP AT i_objdata_temp INTO w_objdata_temp.

*assign w_objdata_temp-matnr to <fs_dyntable>.

AT NEW matnr.

wa_flname = text-009.

fieldvalue = w_objdata_temp-matnr.

CONDENSE fieldvalue NO-GAPS.

ASSIGN COMPONENT wa_flname

OF STRUCTURE <fs_dyntable> TO <fs_fldval>.

<fs_fldval> = fieldvalue.

ENDAT.

wa_flname = text-011.

fieldvalue = w_objdata_temp-maktx.

CONDENSE fieldvalue NO-GAPS.

ASSIGN COMPONENT wa_flname

OF STRUCTURE <fs_dyntable> TO <fs_fldval>.

<fs_fldval> = fieldvalue.

wa_flname = w_objdata_temp-atnam.

fieldvalue = w_objdata_temp-ausp1.

CONDENSE fieldvalue NO-GAPS.

ASSIGN COMPONENT wa_flname

OF STRUCTURE <fs_dyntable> TO <fs_fldval>.

<fs_fldval> = fieldvalue.

wa_flname = text-012.

fieldvalue = w_objdata_temp-prdha.

CONDENSE fieldvalue NO-GAPS.

ASSIGN COMPONENT wa_flname

OF STRUCTURE <fs_dyntable> TO <fs_fldval>.

<fs_fldval> = fieldvalue.

wa_flname = text-013.

fieldvalue = w_objdata_temp-mstde.

CONDENSE fieldvalue NO-GAPS.

ASSIGN COMPONENT wa_flname

OF STRUCTURE <fs_dyntable> TO <fs_fldval>.

<fs_fldval> = fieldvalue.

AT END OF matnr.

APPEND <fs_dyntable> TO <t_dyntable>.

ENDAT.

ENDLOOP.

ENDFORM. " FINAL_DATA

&----


*& Form GET_CLASSIFICATION

&----


  • text

----


  • --> p1 text

  • <-- p2 text

----


FORM get_classification .

LOOP AT i_data INTO w_data.

SELECT SINGLE * FROM klah WHERE class = c_nac.

IF sy-subrc = 0.

IF w_data-mstde >= klah-vondt.

CALL FUNCTION 'CLAF_CLASSIFICATION_OF_OBJECTS'

EXPORTING

class = c_nac

classtext = c_check

classtype = c_klart

clint = 0

features = c_check

language = sy-langu

object = w_data-objek

TABLES

t_class = i_class

t_objectdata = i_objdata

EXCEPTIONS

no_classification = 1

no_classtypes = 2

invalid_class_type = 3

OTHERS = 4.

  • LOOP AT i_class INTO w_class.

  • MOVE w_class TO w_class_temp.

  • APPEND w_class_temp TO i_class_temp.

  • ENDLOOP .

LOOP AT s_atnam.

READ TABLE i_objdata INTO w_objdata WITH KEY atnam = s_atnam-low.

IF sy-subrc = 0.

MOVE w_data-matnr TO w_objdata_temp-matnr.

MOVE w_data-maktx TO w_objdata_temp-maktx.

MOVE-CORRESPONDING w_objdata TO w_objdata_temp.

MOVE w_data-prdha TO w_objdata_temp-prdha.

MOVE w_data-mstde TO w_objdata_temp-mstde.

APPEND w_objdata_temp TO i_objdata_temp.

ENDIF.

ENDLOOP.

ENDIF.

ENDIF.

ENDLOOP.

ENDFORM. " GET_CLASSIFICATION

&----


*& Form GET_DATA

&----


  • text

----


  • --> p1 text

  • <-- p2 text

----


FORM get_data .

SELECT atinn atnam FROM cabn INTO TABLE i_cabn WHERE atnam IN s_atnam.

IF NOT i_cabn[] IS INITIAL.

SELECT objek atinn klart FROM ausp INTO TABLE i_ausp

FOR ALL ENTRIES IN i_cabn

WHERE objek IN s_matnr

AND atinn = i_cabn-atinn

AND klart = c_klart.

SORT i_ausp BY atinn objek.

IF NOT i_ausp[] IS INITIAL.

IF s_matnr[] IS INITIAL.

SELECT matnr mtart matkl prdha mstae mstde FROM mara INTO TABLE i_mara FOR ALL ENTRIES IN i_ausp WHERE matnr = i_ausp-objek+0(18)

AND mtart IN s_mtart

AND matkl IN s_matkl

AND mstae IN s_mstae.

  • and mstde = s_date.

ELSE.

SELECT matnr mtart matkl prdha mstae mstde FROM mara INTO TABLE i_mara WHERE matnr IN s_matnr

AND mtart IN s_mtart

AND matkl IN s_matkl

AND mstae IN s_mstae.

  • and mstde = s_date.

ENDIF.

ENDIF.

ENDIF.

IF s_atnam-low IS INITIAL.

LOOP AT i_cabn INTO w_cabn.

IF w_cabn-atnam IS NOT INITIAL.

s_atnam-sign = 'I'.

s_atnam-option = 'EQ'.

s_atnam-low = w_cabn-atnam.

s_atnam-high = ' '.

APPEND s_atnam.

ENDIF.

ENDLOOP.

ENDIF.

ENDFORM. " GET_DATA

&----


*& Form GET_DATA_KEYDATE

&----


  • text

----


  • --> p1 text

  • <-- p2 text

----


FORM get_data_keydate .

LOOP AT i_mara INTO w_mara.

IF w_mara-mstde = text-007.

w_mara-mstde = text-008.

ENDIF.

CASE w_mara-mstae.

WHEN '03'.

IF w_mara-mstde = text-008.

MOVE w_mara TO w_mara_temp.

APPEND w_mara_temp TO i_mara_temp.

ELSEIF w_mara-mstde > s_date.

MOVE w_mara TO w_mara_temp.

APPEND w_mara_temp TO i_mara_temp.

ENDIF.

WHEN '04'.

IF w_mara-mstde >= s_date.

MOVE w_mara TO w_mara_temp.

APPEND w_mara_temp TO i_mara_temp.

ELSEIF w_mara-mstde = text-008.

MOVE w_mara TO w_mara_temp.

APPEND w_mara_temp TO i_mara_temp.

ENDIF.

ENDCASE.

ENDLOOP.

ENDFORM. " GET_DATA_KEYDATE

&----


*& Form material_all_charname

&----


  • text

----


  • --> p1 text

  • <-- p2 text

----


FORM material_all_charname .

LOOP AT i_cabn INTO w_cabn.

LOOP AT i_ausp INTO w_ausp WHERE atinn = w_cabn-atinn.

READ TABLE i_mara_temp INTO w_mara_temp WITH KEY matnr = w_ausp-objek+0(18).

IF sy-subrc = 0.

SELECT SINGLE * FROM makt WHERE matnr = w_mara_temp-matnr.

IF sy-subrc = 0.

MOVE w_cabn-atnam TO w_data-atnam.

MOVE w_cabn-atinn TO w_data-atinn.

MOVE w_ausp-objek TO w_data-objek.

MOVE w_ausp-klart TO w_data-klart.

CALL FUNCTION 'CONVERSION_EXIT_ALPHA_OUTPUT'

EXPORTING

input = w_mara_temp-matnr

IMPORTING

OUTPUT = w_mara_temp-matnr.

MOVE w_mara_temp-matnr TO w_data-matnr.

MOVE makt-maktx TO w_data-maktx.

MOVE w_mara_temp-mtart TO w_data-mtart.

MOVE w_mara_temp-matkl TO w_data-matkl.

MOVE w_mara_temp-prdha TO w_data-prdha.

MOVE w_mara_temp-mstae TO w_data-mstae.

MOVE w_mara_temp-mstde TO w_data-mstde.

APPEND w_data TO i_data.

ENDIF.

ENDIF.

ENDLOOP.

ENDLOOP.

SORT i_data BY matnr.

DELETE ADJACENT DUPLICATES FROM i_data COMPARING matnr.

ENDFORM. " material_all_charname

Read only

Former Member
0 Likes
493

Hi Kashyap,

Refer to the link below:

http://www.saptechnical.com/Tutorials/ABAP/DynamicSScreen/demo.htm

Hope this helps.

Reward if helpful.

Regards,

Sipra