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

urgent!!!

Former Member
0 Likes
518

hello experts...

i have a question regarding dynamic table with computations.

i have i_tab with component werks, matnr, menge, uom(meins).. i have to compute each quantity(menge) of matnr to its alternative uom depending on the s_meins(uom) entered in the selection screen. how can i transfer the data to the dynamic table so as the output is an alv with component werks, matnr, menge, meins and the alternative uom or uom's(which depends on the selection screen as entered by the user)?

thank you!

march

1 ACCEPTED SOLUTION
Read only

Former Member
0 Likes
484

hi

good

go through this code hope this would help you to solve your problem

Sample code:

DATA: l_cnt(2) TYPE n,

l_cnt1(3) TYPE n,

l_nam(12),

l_con(18) TYPE c,

l_con1(18) TYPE c,

lf_mat TYPE matnr.

SORT it_bom_expl BY bom_comp bom_mat level.

CLEAR: l_cnt1, <fs_dyn_wa>.

  • Looping the component internal table

LOOP AT it_bom_expl INTO gf_it_bom_expl.

CLEAR: l_cnt1.

AT NEW bom_comp.

CLEAR: l_cnt, <fs_dyn_wa>, lf_mat.

  • For every new bom component the material data is moved to

  • temp material table which will be used for assigning the levels

  • checking the count

it_mat_temp[] = it_mat[].

  • Component data is been assigned to the field symbol which is checked

  • against the field of dynamic internal table and the value of the

  • component number is been passed to the dynamic internal table field

  • value.

ASSIGN COMPONENT c_comp_list OF STRUCTURE <fs_dyn_wa> TO

<fs_check>.

<fs_check> = gf_it_bom_expl-bom_comp.

ENDAT.

AT NEW bom_mat.

CLEAR l_con.

ENDAT.

lf_mat = gf_it_bom_expl-bom_mat.

  • Looping the temp internal table and looping the dynamic internal table

*by reading line by line into workarea, the materialxxn is been assigned

  • to field symbol which will be checked and used.

LOOP AT it_mat_temp.

l_nam = c_mat.

l_cnt1 = l_cnt1 + 1.

CONCATENATE l_nam l_cnt1 INTO l_nam.

LOOP AT <fs_dyn_table2> ASSIGNING <fs_dyn_wa2>.

ASSIGN COMPONENT l_nam OF STRUCTURE <fs_dyn_wa2> TO <fs_xy>.

ENDLOOP.

IF <fs_xy> = lf_mat.

CLEAR lf_mat.

l_con1 = l_con.

ENDIF.

  • Checking whether the material exists for a component and if so it is

  • been assigned to the field symbol which is checked against the field

  • of dynamic internal table and the level of the component number

  • against material is been passed to the dynamic internal table field

  • value.

IF <fs_xy> = gf_it_bom_expl-bom_mat.

ASSIGN COMPONENT l_nam OF STRUCTURE <fs_dyn_wa> TO <fs_check>.

CLEAR l_con.

MOVE gf_it_bom_expl-level TO l_con.

CONCATENATE c_val_l l_con INTO l_con.

CONDENSE l_con NO-GAPS.

IF l_con1 NE space.

CONCATENATE l_con1 l_con INTO l_con SEPARATED BY c_comma.

CLEAR l_con1.

l_cnt = l_cnt - 1.

ENDIF.

<fs_check> = l_con.

l_cnt = l_cnt + 1.

ENDIF.

ENDLOOP.

AT END OF bom_comp.

  • At end of every new bom component the count is moved to the field

  • symbol which is checked against the field of dynamic internal table

  • and the count is been passed to the dynamic internal table field

  • value.

ASSIGN COMPONENT c_count OF STRUCTURE <fs_dyn_wa> TO <fs_check>.

<fs_check> = l_cnt.

INSERT <fs_dyn_wa> INTO TABLE <fs_dyn_table>.

ENDAT.

ENDLOOP.

thanks

mrutyun^

hello experts...

i have a question regarding dynamic table with computations.

i have i_tab with component werks, matnr, menge, uom(meins).. i have to compute each quantity(menge) of matnr to its alternative uom depending on the s_meins(uom) entered in the selection screen. how can i transfer the data to the dynamic table so as the output is an alv with component werks, matnr, menge, meins and the alternative uom or uom's(which depends on the selection screen as entered by the user)?

thank you!

march

2 REPLIES 2
Read only

mahaboob_pathan
Contributor
0 Likes
484

Hi,

check this once.

you may get some idea.

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

  • Date/Author: 26.08.2006 / Alvaro Tejada Galindo. *

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

REPORT Z_DUMMY_ALV.

----


  • TYPE-POOLS *

----


TYPE-POOLS: SLIS.

----


  • TABLES *

----


TABLES: SCARR, SPFLI.

----


  • VARIABLES *

----


DATA: G_FIELDCAT TYPE SLIS_T_FIELDCAT_ALV,

G_SORT TYPE SLIS_T_SORTINFO_ALV WITH HEADER LINE,

GT_PRINT TYPE SLIS_PRINT_ALV,

GS_LAYOUT TYPE SLIS_LAYOUT_ALV,

GT_EVENTS TYPE SLIS_T_EVENT,

G_PROGRAM TYPE SY-REPID,

TAB_NAME TYPE STRING,

W_TABIX TYPE STRING.

----


  • TYPES *

----


TYPES: BEGIN OF TY_SPFLI,

MANDT TYPE SPFLI-MANDT,

CARRID TYPE SPFLI-CARRID,

CONNID TYPE SPFLI-CONNID,

COUNTRYFR TYPE SPFLI-COUNTRYFR,

CITYFROM TYPE SPFLI-CITYFROM,

AIRPFROM TYPE SPFLI-AIRPFROM,

COUNTRYTO TYPE SPFLI-COUNTRYTO,

CITYTO TYPE SPFLI-CITYTO.

TYPES: END OF TY_SPFLI.

TYPES: BEGIN OF TY_STUFF,

TABNAME TYPE TABNAME,

TDREF TYPE REF TO DATA,

END OF TY_STUFF.

DATA T_STUFF TYPE TABLE OF TY_STUFF WITH NON-UNIQUE KEY TABNAME.

DATA: DESCR_STRUCT_REF TYPE REF TO CL_ABAP_STRUCTDESCR,

DATAREF TYPE REF TO DATA,

WA_FCAT TYPE LVC_S_FCAT,

IT_FIELDCATALOG TYPE LVC_T_FCAT.

----


  • FIELD-SYMBOLS *

----


FIELD-SYMBOLS: <LINE> TYPE ANY,

<FIELD> TYPE ANY,

<COMPONENT> TYPE ABAP_COMPDESCR,

<DYN_TABLE> TYPE STANDARD TABLE,

<FS> TYPE ANY,

<DYN_WA>,

<TABLE>.

----


  • INTERNAL TABLES *

----


DATA: T_SPFLI TYPE STANDARD TABLE OF TY_SPFLI WITH HEADER LINE,

T_SPFLI_HEADER TYPE STANDARD TABLE OF TY_SPFLI WITH HEADER LINE,

T_SPFLI_DETAIL TYPE STANDARD TABLE OF TY_SPFLI WITH HEADER LINE.

----


  • MACROS *

----


DEFINE CLEAN_TABLE.

CLEAR &1.

REFRESH &1.

END-OF-DEFINITION.

----


  • SELECTION SCREEN *

----


SELECTION-SCREEN BEGIN OF BLOCK B01 WITH FRAME TITLE TEXT-B01.

SELECT-OPTIONS:

S_CARRID FOR SCARR-CARRID.

SELECTION-SCREEN END OF BLOCK B01.

----


  • PRINCIPAL

----


START-OF-SELECTION.

PERFORM GET_DATA.

PERFORM GENERATE_ALV.

PERFORM GENERATE_ALV_LIST.

----


  • FORM GET_DATA *

----


  • Retrieve data *

----


FORM GET_DATA.

SELECT MANDT CARRID CONNID COUNTRYFR CITYFROM

AIRPFROM COUNTRYTO CITYTO

INTO TABLE T_SPFLI

FROM SPFLI

WHERE CARRID IN S_CARRID.

IF NOT T_SPFLI[] IS INITIAL.

T_SPFLI_HEADER[] = T_SPFLI[].

DELETE ADJACENT DUPLICATES FROM T_SPFLI_HEADER

COMPARING CARRID.

ENDIF.

ENDFORM.

&----


*& Form GENERATE_ALV *

&----


  • Generate the ALV *

----


FORM GENERATE_ALV.

IF NOT T_SPFLI_HEADER[] IS INITIAL.

PERFORM CUSTOM_DATA_ALV USING G_FIELDCAT[].

PERFORM BUILD_SORT.

ENDIF.

ENDFORM. "GENERATE_ALV

&----


*& Form CUSTOM_DATA_ALV *

&----


  • Create ALV Catalog. *

----


FORM CUSTOM_DATA_ALV USING T_FIELDCAT TYPE SLIS_T_FIELDCAT_ALV.

DATA: L_FIELDCAT TYPE SLIS_FIELDCAT_ALV.

CLEAR: T_FIELDCAT.

REFRESH: T_FIELDCAT.

CLEAR L_FIELDCAT.

L_FIELDCAT-TABNAME = 'T_SPFLI'.

L_FIELDCAT-FIELDNAME = 'CARRID'.

L_FIELDCAT-SELTEXT_L = 'Airline carrier ID'.

L_FIELDCAT-COL_POS = 1.

L_FIELDCAT-OUTPUTLEN = 15.

APPEND L_FIELDCAT TO T_FIELDCAT.

CLEAR L_FIELDCAT.

L_FIELDCAT-TABNAME = 'T_SPFLI'.

L_FIELDCAT-FIELDNAME = 'CONNID'.

L_FIELDCAT-SELTEXT_L = 'Flight connection Id'.

L_FIELDCAT-COL_POS = 2.

L_FIELDCAT-OUTPUTLEN = 15.

APPEND L_FIELDCAT TO T_FIELDCAT.

CLEAR L_FIELDCAT.

L_FIELDCAT-TABNAME = 'T_SPFLI'.

L_FIELDCAT-FIELDNAME = 'COUNTRYFR'.

L_FIELDCAT-SELTEXT_L = 'Country key'.

L_FIELDCAT-COL_POS = 3.

L_FIELDCAT-OUTPUTLEN = 15.

APPEND L_FIELDCAT TO T_FIELDCAT.

CLEAR L_FIELDCAT.

L_FIELDCAT-TABNAME = 'T_SPFLI'.

L_FIELDCAT-FIELDNAME = 'CITYFROM'.

L_FIELDCAT-SELTEXT_L = 'City of departure'.

L_FIELDCAT-COL_POS = 4.

L_FIELDCAT-OUTPUTLEN = 15.

APPEND L_FIELDCAT TO T_FIELDCAT.

CLEAR L_FIELDCAT.

L_FIELDCAT-TABNAME = 'T_SPFLI'.

L_FIELDCAT-FIELDNAME = 'AIRPFROM'.

L_FIELDCAT-SELTEXT_L = 'Airport of departure'.

L_FIELDCAT-COL_POS = 5.

L_FIELDCAT-OUTPUTLEN = 15.

APPEND L_FIELDCAT TO T_FIELDCAT.

CLEAR L_FIELDCAT.

L_FIELDCAT-TABNAME = 'T_SPFLI'.

L_FIELDCAT-FIELDNAME = 'COUNTRYTO'.

L_FIELDCAT-SELTEXT_L = 'Country key'.

L_FIELDCAT-COL_POS = 6.

L_FIELDCAT-OUTPUTLEN = 15.

APPEND L_FIELDCAT TO T_FIELDCAT.

CLEAR L_FIELDCAT.

L_FIELDCAT-TABNAME = 'T_SPFLI'.

L_FIELDCAT-FIELDNAME = 'CITYTO'.

L_FIELDCAT-SELTEXT_L = 'Arrival city'.

L_FIELDCAT-COL_POS = 7.

L_FIELDCAT-OUTPUTLEN = 15.

APPEND L_FIELDCAT TO T_FIELDCAT.

ENDFORM. "CUSTOM_DATA_ALV

&----


*& Form BUILD_SORT *

&----


  • Build Sort table *

----


FORM BUILD_SORT.

CLEAR G_SORT.

G_SORT-SPOS = 1.

G_SORT-FIELDNAME = 'CARRID'.

G_SORT-UP = 'X'.

APPEND G_SORT.

ENDFORM.

----


  • FORM GENERATE_ALV_LIST *

----


  • Generate ALV list *

----


FORM GENERATE_ALV_LIST.

DATA L_STUFF TYPE TY_STUFF.

G_PROGRAM = SY-REPID.

CALL FUNCTION 'REUSE_ALV_BLOCK_LIST_INIT'

EXPORTING

I_CALLBACK_PROGRAM = G_PROGRAM.

LOOP AT T_SPFLI_HEADER.

W_TABIX = SY-TABIX.

CLEAN_TABLE T_SPFLI_DETAIL.

LOOP AT T_SPFLI INTO T_SPFLI_DETAIL

WHERE CARRID EQ T_SPFLI_HEADER-CARRID.

APPEND T_SPFLI_DETAIL.

ENDLOOP.

CONCATENATE 'TABLE_' W_TABIX INTO

TAB_NAME.

PERFORM CREATE_TABLE USING 'SPFLI' TAB_NAME.

LOOP AT T_SPFLI_DETAIL ASSIGNING <LINE>.

ASSIGN <DYN_WA> TO <TABLE>.

<TABLE> = <LINE>.

APPEND <DYN_WA> TO <DYN_TABLE>.

ENDLOOP.

PERFORM CREATE_ALV_LIST TABLES <DYN_TABLE>.

ENDLOOP.

CALL FUNCTION 'REUSE_ALV_BLOCK_LIST_DISPLAY'

EXPORTING

IS_PRINT = GT_PRINT.

ENDFORM.

----


  • FORM CREATE_ALV_LIST *

----


  • Create ALV List *

----


FORM CREATE_ALV_LIST TABLES T_TABLE STRUCTURE T_SPFLI_DETAIL.

CALL FUNCTION 'REUSE_ALV_BLOCK_LIST_APPEND'

EXPORTING

IT_FIELDCAT = G_FIELDCAT

IS_LAYOUT = GS_LAYOUT

I_TABNAME = 'T_SPFLI'

IT_EVENTS = GT_EVENTS

TABLES

T_OUTTAB = T_TABLE.

ENDFORM.

----


  • FORM CREATE_TABLE *

----


  • Create dynamic table *

----


FORM CREATE_TABLE USING MY_TAB TAB_NAME.

DATA L_STUFF TYPE TY_STUFF.

CREATE DATA DATAREF TYPE (MY_TAB).

ASSIGN DATAREF->* TO <FS>.

DESCR_STRUCT_REF ?= CL_ABAP_TYPEDESCR=>DESCRIBE_BY_DATA( <FS> ).

CLEAN_TABLE IT_FIELDCATALOG.

LOOP AT DESCR_STRUCT_REF->COMPONENTS ASSIGNING <COMPONENT>.

WA_FCAT-FIELDNAME = <COMPONENT>-NAME.

WA_FCAT-REF_TABLE = MY_TAB.

WA_FCAT-REF_FIELD = <COMPONENT>-NAME.

APPEND WA_FCAT TO IT_FIELDCATALOG.

ENDLOOP.

CALL METHOD CL_ALV_TABLE_CREATE=>CREATE_DYNAMIC_TABLE

EXPORTING

IT_FIELDCATALOG = IT_FIELDCATALOG

IMPORTING

EP_TABLE = DATAREF

EXCEPTIONS

OTHERS = 1.

ASSIGN DATAREF->* TO <DYN_TABLE>.

L_STUFF-TABNAME = TAB_NAME.

CREATE DATA L_STUFF-TDREF LIKE LINE OF <DYN_TABLE>.

ASSIGN L_STUFF-TDREF->* TO <DYN_WA>.

ENDFORM. "CREATE_TABLE

Read only

Former Member
0 Likes
485

hi

good

go through this code hope this would help you to solve your problem

Sample code:

DATA: l_cnt(2) TYPE n,

l_cnt1(3) TYPE n,

l_nam(12),

l_con(18) TYPE c,

l_con1(18) TYPE c,

lf_mat TYPE matnr.

SORT it_bom_expl BY bom_comp bom_mat level.

CLEAR: l_cnt1, <fs_dyn_wa>.

  • Looping the component internal table

LOOP AT it_bom_expl INTO gf_it_bom_expl.

CLEAR: l_cnt1.

AT NEW bom_comp.

CLEAR: l_cnt, <fs_dyn_wa>, lf_mat.

  • For every new bom component the material data is moved to

  • temp material table which will be used for assigning the levels

  • checking the count

it_mat_temp[] = it_mat[].

  • Component data is been assigned to the field symbol which is checked

  • against the field of dynamic internal table and the value of the

  • component number is been passed to the dynamic internal table field

  • value.

ASSIGN COMPONENT c_comp_list OF STRUCTURE <fs_dyn_wa> TO

<fs_check>.

<fs_check> = gf_it_bom_expl-bom_comp.

ENDAT.

AT NEW bom_mat.

CLEAR l_con.

ENDAT.

lf_mat = gf_it_bom_expl-bom_mat.

  • Looping the temp internal table and looping the dynamic internal table

*by reading line by line into workarea, the materialxxn is been assigned

  • to field symbol which will be checked and used.

LOOP AT it_mat_temp.

l_nam = c_mat.

l_cnt1 = l_cnt1 + 1.

CONCATENATE l_nam l_cnt1 INTO l_nam.

LOOP AT <fs_dyn_table2> ASSIGNING <fs_dyn_wa2>.

ASSIGN COMPONENT l_nam OF STRUCTURE <fs_dyn_wa2> TO <fs_xy>.

ENDLOOP.

IF <fs_xy> = lf_mat.

CLEAR lf_mat.

l_con1 = l_con.

ENDIF.

  • Checking whether the material exists for a component and if so it is

  • been assigned to the field symbol which is checked against the field

  • of dynamic internal table and the level of the component number

  • against material is been passed to the dynamic internal table field

  • value.

IF <fs_xy> = gf_it_bom_expl-bom_mat.

ASSIGN COMPONENT l_nam OF STRUCTURE <fs_dyn_wa> TO <fs_check>.

CLEAR l_con.

MOVE gf_it_bom_expl-level TO l_con.

CONCATENATE c_val_l l_con INTO l_con.

CONDENSE l_con NO-GAPS.

IF l_con1 NE space.

CONCATENATE l_con1 l_con INTO l_con SEPARATED BY c_comma.

CLEAR l_con1.

l_cnt = l_cnt - 1.

ENDIF.

<fs_check> = l_con.

l_cnt = l_cnt + 1.

ENDIF.

ENDLOOP.

AT END OF bom_comp.

  • At end of every new bom component the count is moved to the field

  • symbol which is checked against the field of dynamic internal table

  • and the count is been passed to the dynamic internal table field

  • value.

ASSIGN COMPONENT c_count OF STRUCTURE <fs_dyn_wa> TO <fs_check>.

<fs_check> = l_cnt.

INSERT <fs_dyn_wa> INTO TABLE <fs_dyn_table>.

ENDAT.

ENDLOOP.

thanks

mrutyun^