‎2008 Jun 02 9:58 AM
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.
‎2008 Jun 02 10:31 AM
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
‎2008 Jun 02 10:31 AM
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
‎2008 Jun 02 10:31 AM
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
‎2008 Jun 02 10:43 AM
Hi Kashyap,
Refer to the link below:
http://www.saptechnical.com/Tutorials/ABAP/DynamicSScreen/demo.htm
Hope this helps.
Reward if helpful.
Regards,
Sipra