Application Development 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: 

urgent requirement for an example for dynamic ALV

Former Member
0 Kudos

hi all

there is any urgent requirement for a report where i have to populate coloums dynamicaly so can any one help me in this please

6 REPLIES 6

Former Member
0 Kudos

Hi,

Go through this

REPORT yusmm_text1 NO STANDARD PAGE HEADING

LINE-SIZE 199.

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

  • T A B L E S

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

TABLES: MARA,

MAKT,

THEAD.

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

  • GLOBAL TYPE-POOLS

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

TYPE-POOLS : SLIS.

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

  • GLOBAL TYPES

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

TYPES : BEGIN OF TP_FINAL,

MATNR TYPE MARA-MATNR,

BEGRU TYPE MARA-BEGRU,

MTART TYPE MARA-MTART,

MAKTX TYPE MAKT-MAKTX,

SPRAS TYPE MAKT-SPRAS,

LTXT(2000) TYPE C ,

SRNO TYPE N ,

END OF TP_FINAL.

TYPES : BEGIN OF TP_T002,

SPRAS TYPE T002-SPRAS,

LAISO TYPE T002-LAISO,

SRNO TYPE N ,

END OF TP_T002.

TYPES : BEGIN OF TP_MARA_MAKT,

MATNR TYPE MARA-MATNR,

BEGRU TYPE MARA-BEGRU,

MTART TYPE MARA-MTART,

SPRAS TYPE MAKT-SPRAS,

MAKTX TYPE MAKT-MAKTX,

END OF TP_MARA_MAKT.

Types: BEGIN OF tp_matnr,

matnr TYPE mara-matnr,

END OF tp_matnr.

  • ********************************************************************

  • GLOBAL ELEMENTARY VARIABLES

*

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

DATA : gv_date TYPE sy-datum.

DATA : gv_repid TYPE sy-repid.

DATA : g_var1(10) TYPE C.

DATA : gv_index TYPE sy-tabix.

DATA: gv_strg TYPE string,

gv_strg1(2000) TYPE C.

DATA : gv_lang TYPE sy-langu.

DATA : g_v(3) TYPE N .

DATA : gv_lines(3) TYPE N .

DATA : gv_var(3) TYPE N .

DATA : gv_var1(3) TYPE N.

DATA: gv_str TYPE STRING.

DATA: gv_str1 TYPE STRING.

DATA : gv_li TYPE I,

gv_lit TYPE I,

gv_lin TYPE I.

DATA: g_var11(3) TYPE N,

gv_li1(3) TYPE N,

g_var2(3) TYPE N.

DATA : gv_i1 TYPE I.

DATA : gv_i TYPE I.

DATA: gl_lenght TYPE I.

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

  • GLOBAL STRUCTURES

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

DATA: T_NEWTABLE TYPE REF TO DATA,

T_NEWLINE TYPE REF TO DATA,

T_FLDCAT1 TYPE SLIS_T_FIELDCAT_ALV,

T_FLDCAT TYPE LVC_T_FCAT,

WA_IT_FLDCAT TYPE LVC_S_FCAT,

WA_IT_FLDCAT1 TYPE SLIS_FIELDCAT_ALV,

WA_COLNO(2) TYPE N,

WA_FLNAME(5) TYPE C,

L_LT TYPE SLIS_LAYOUT_ALV.

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

  • GLOBAL INTERNAL TABLES (WITH INCLUDE STRUCTURE)

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

DATA : IG_MARA_MAKT TYPE STANDARD TABLE OF TP_MARA_MAKT,

WG_MARA_MAKT TYPE TP_MARA_MAKT.

DATA : IG_T002 TYPE STANDARD TABLE OF TP_T002,

WG_T002 TYPE TP_T002.

DATA : IG_FINAL TYPE STANDARD TABLE OF TP_FINAL,

WG_FINAL TYPE TP_FINAL.

data : IG_MATNR TYPE STANDARD TABLE OF TP_MATNR WITH HEADER LINE,

WG_MATNR TYPE TP_MATNR.

DATA:BEGIN OF IG_THEAD OCCURS 0.

INCLUDE STRUCTURE THEAD .

DATA: END OF IG_THEAD.

DATA:BEGIN OF IG_TLINE OCCURS 0.

INCLUDE STRUCTURE TLINE .

DATA:END OF IG_TLINE.

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

  • FIELD-SYMBOLS

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

FIELD-SYMBOLS: <T_DYNTABLE> TYPE STANDARD TABLE,"Dynamic internal

"tablename

<FS_DYNTABLE>, "Field symbol to create work area

<FS_FLDVAL> TYPE ANY. " Field symbol to assign values

*----


COMPULSORY

FIELD-SYMBOLS: <FS_DATA> TYPE REF TO DATA,

<FS_DATA1> TYPE REF TO DATA,

<FS_2> TYPE STANDARD TABLE,

<FS_22> TYPE STANDARD TABLE,

<FS_1>,

<FS_11>,

<F>,

<FA>,

<LWA_LINE_WA>,

<LWA_LINE_WA1>.

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

  • ------- Create Dyn Table From FC

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

DATA: LT_DATA TYPE REF TO DATA,

LT_DATA1 TYPE REF TO DATA,

LWA_LINE TYPE REF TO DATA,

LWA_LINE1 TYPE REF TO DATA,

LI_FIELD_CAT TYPE LVC_T_FCAT,

LWA_FIELD_CAT TYPE LVC_S_FCAT.

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

  • PARAMETERS & SELECT-OPTIONS

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

SELECTION-SCREEN : BEGIN OF BLOCK B1 WITH FRAME TITLE TEXT-001.

SELECT-OPTIONS : S_SPRAS FOR MAKT-SPRAS NO INTERVALS DEFAULT 'EN'

OBLIGATORY ,

S_MATNR FOR MARA-MATNR,

S_MTART FOR MARA-MTART.

PARAMETERS: GP_SIZE TYPE I DEFAULT '200'.

SELECTION-SCREEN : END OF BLOCK B1.

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

  • INITIALIZATION

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

INITIALIZATION.

gv_repid = sy-repid.

gv_date = sy-datum.

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

  • AT SELECTION-SCREEN

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

AT SELECTION-SCREEN.

IF GP_SIZE < 0.

  • MESSAGE E002(00).

ENDIF.

IF GP_SIZE > 50000.

  • MESSAGE W130(26) WITH TEXT-004.

SET CURSOR FIELD 'gp_size'.

ENDIF.

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

  • START-OF-SELECTION

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

START-OF-SELECTION.

PERFORM FIELDCAT.

PERFORM LAYOUT.

PERFORM DATA_FETCH.

PERFORM READ_DATA_TO_FINAL.

SORT ig_final BY matnr spras.

gv_lin = gv_li.

gv_li = gv_li - 2.

LOOP AT ig_final INTO wg_final.

ASSIGN COMPONENT 1 OF STRUCTURE <LWA_LINE_WA1> TO <FA>.

<FA> = 'Material Number'.

ASSIGN COMPONENT 2 OF STRUCTURE <LWA_LINE_WA1> TO <FA>.

<FA> = 'Authorization Group'.

g_VAR11 = wg_final-srno + 2.

gv_li1 = gv_li1 + 2.

MOVE : g_var11 TO gv_i1.

ASSIGN COMPONENT g_var11 OF STRUCTURE <LWA_LINE_WA1> TO <FA>.

<FA> = 'MatDesc'.

g_var2 = g_var11 + gv_lines.

ASSIGN COMPONENT g_var2 OF STRUCTURE <LWA_LINE_WA1> TO <FA>.

<FA> = 'BasicData'.

APPEND <LWA_LINE_WA1> TO <FS_22>.

EXIT.

ENDLOOP.

LOOP AT ig_final INTO wg_final.

AT NEW matnr.

gv_index = sy-tabix.

ASSIGN COMPONENT 1 OF STRUCTURE <LWA_LINE_WA> TO <F>.

<F> = wg_final-matnr.

ENDAT.

AT NEW MATNR.

GV_INDEX = SY-TABIX.

ASSIGN COMPONENT 1 OF STRUCTURE <LWA_LINE_WA1> TO <FA>.

<FA> = wg_final-matnr.

ENDAT.

ASSIGN COMPONENT 2 OF STRUCTURE <LWA_LINE_WA> TO <F>.

<F> = wg_final-begru.

ASSIGN COMPONENT 2 OF STRUCTURE <LWA_LINE_WA1> TO <FA>.

<FA> = wg_final-begru.

gv_var = wg_final-srno + 2.

gv_li = gv_li + 2.

MOVE : gv_var TO gv_i.

ASSIGN COMPONENT gv_var OF STRUCTURE <LWA_LINE_WA> TO <F>.

<F> = wg_final-maktx.

ASSIGN COMPONENT gv_var OF STRUCTURE <LWA_LINE_WA1> TO <FA>.

<FA> = wg_final-maktx.

gv_var1 = gv_var + gv_lines .

ASSIGN COMPONENT gv_var1 OF STRUCTURE <LWA_LINE_WA> TO <F>.

<F> = wg_final-ltxt.

ASSIGN COMPONENT gv_var1 OF STRUCTURE <LWA_LINE_WA1> TO <FA>.

<FA> = wg_final-ltxt.

AT END OF matnr.

APPEND <LWA_LINE_WA> TO <FS_2>.

CLEAR <LWA_LINE_WA>.

ENDAT.

AT END OF matnr.

APPEND <LWA_LINE_WA1> TO <FS_22>.

CLEAR <LWA_LINE_WA1>.

ENDAT.

ENDLOOP.

PERFORM display..

&----


*& Form data_fetch

&----


  • text

----


  • --> p1 text

  • <-- p2 text

----


FORM DATA_FETCH .

SELECT matnr

from mara up to gp_size rows

appending corresponding fields of table ig_matnr

where matnr in s_matnr

and mtart in s_mtart.

loop at ig_matnr.

SELECT MARA~MATNR

MARA~BEGRU

MARA~MTART

MAKT~SPRAS

MAKT~MAKTX FROM MARA INNER JOIN MAKT

ON MARAMATNR = MAKTMATNR

appending corresponding fields of TABLE ig_mara_makt UP TO GP_SIZE

ROWS

WHERE makt~spras IN s_spras

AND mara~matnr IN s_matnr

AND mara~mtart IN s_mtart

AND mara~matnr EQ ig_matnr-matnr.

endloop.

IF sy-subrc = 0.

SORT ig_mara_makt.

ENDIF.

ENDFORM. " data_fetch

&----


*& Form read_data_to_final

&----


  • text

----


  • --> p1 text

  • <-- p2 text

----


FORM READ_DATA_TO_FINAL .

LOOP AT ig_mara_makt INTO wg_mara_makt .

wg_final-MATNR = wg_mara_makt-MATNR.

wg_final-BEGRU = wg_mara_makt-BEGRU.

wg_final-MTART = wg_mara_makt-MTART.

wg_final-SPRAS = wg_mara_makt-SPRAS.

wg_final-MAKTX = wg_mara_makt-MAKTX.

READ TABLE ig_t002 INTO wg_t002 WITH KEY spras = wg_final-spras.

IF sy-subrc = 0.

wg_final-srno = wg_t002-srno.

ENDIF.

CLEAR ig_thead[].

ig_thead-TDOBJECT = 'MATERIAL'.

ig_thead-TDNAME = wg_final-matnr.

ig_thead-TDID = 'GRUN'.

ig_thead-TDSPRAS = wg_final-spras.

CALL FUNCTION 'TEXT_READ'

EXPORTING

I_HEADER = IG_THEAD

I_READONLY = 'X'

IMPORTING

E_HEADER = IG_THEAD

TABLES

T_LINES = IG_TLINE[]

EXCEPTIONS

NOTFOUND = 1.

IF sy-subrc EQ 0.

LOOP AT ig_tline.

gv_strg = ig_tline-tdline.

IF gv_strg1 <> ' '.

CONCATENATE gv_strg1 ';' gv_strg INTO gv_strg1.

ELSE.

gv_strg1 = gv_strg.

ENDIF.

ENDLOOP.

wg_final-ltxt = gv_strg1.

APPEND wg_final TO ig_final.

CLEAR wg_final.

gv_strg1 = ' '.

ELSE.

APPEND wg_final TO ig_final.

ENDIF.

ENDLOOP.

ENDFORM. " read_data_to_final

" read_data_to_final

&----


*& Form layout

&----


  • text

----


  • --> p1 text

  • <-- p2 text

----


FORM LAYOUT .

CLEAR L_LT.

L_LT-ZEBRA = 'X'.

L_LT-COLWIDTH_OPTIMIZE = 'X'.

L_LT-WINDOW_TITLEBAR = 'MATERIAL DETAILS'.

ENDFORM. " layout

&----


*& Form fieldcat

&----


  • text

----


  • --> p1 text

  • <-- p2 text

----


FORM FIELDCAT .

SELECT SPRAS

LAISO FROM t002 INTO CORRESPONDING FIELDS OF TABLE ig_t002

WHERE spras IN s_spras.

DESCRIBE TABLE ig_t002 LINES gv_lines.

LOOP AT ig_t002 INTO wg_t002.

g_v = g_v + 1.

Wg_t002-srno = g_v.

MODIFY ig_t002 FROM wg_t002 TRANSPORTING SRNO.

ENDLOOP.

LOOP AT ig_t002 INTO wg_t002.

CLEAR WA_IT_FLDCAT.

MOVE SY-INDEX TO WA_COLNO.

CONCATENATE 'MD-' wg_t002-LAISO

WA_COLNO

INTO WA_FLNAME.

WA_IT_FLDCAT-FIELDNAME = WA_FLNAME.

WA_IT_FLDCAT-DATATYPE = 'CHAR'.

WA_IT_FLDCAT-SELTEXT = WA_FLNAME.

WA_IT_FLDCAT-INTLEN = 250.

WA_IT_FLDCAT-TABNAME = '<FS_2>'.

APPEND WA_IT_FLDCAT TO T_FLDCAT.

CLEAR wg_t002.

ENDLOOP.

LOOP AT ig_t002 INTO wg_t002.

CLEAR WA_IT_FLDCAT.

MOVE SY-INDEX TO WA_COLNO.

CONCATENATE 'BD-' wg_t002-LAISO

WA_COLNO

INTO WA_FLNAME.

WA_IT_FLDCAT-FIELDNAME = WA_FLNAME.

WA_IT_FLDCAT-DATATYPE = 'CHAR'.

WA_IT_FLDCAT-SELTEXT = WA_FLNAME.

WA_IT_FLDCAT-INTLEN = 250.

WA_IT_FLDCAT-TABNAME = '<FS_2>'.

APPEND WA_IT_FLDCAT TO T_FLDCAT.

CLEAR wg_t002.

ENDLOOP.

MOVE 'MATNR' TO WA_FLNAME.

WA_IT_FLDCAT-FIELDNAME = WA_FLNAME.

WA_IT_FLDCAT-DATATYPE = 'CHAR'.

WA_IT_FLDCAT-SELTEXT = 'Material No'.

WA_IT_FLDCAT-INTLEN = 18.

WA_IT_FLDCAT-TABNAME = '<FS_2>'.

INSERT WA_IT_FLDCAT INTO T_FLDCAT INDEX 1.

MOVE 'BEGRU' TO WA_FLNAME.

WA_IT_FLDCAT-FIELDNAME = WA_FLNAME.

WA_IT_FLDCAT-DATATYPE = 'CHAR'.

WA_IT_FLDCAT-SELTEXT = 'Authorization Group'.

WA_IT_FLDCAT-INTLEN = 4.

WA_IT_FLDCAT-TABNAME = '<FS_2>'.

INSERT WA_IT_FLDCAT INTO T_FLDCAT INDEX 2.

DESCRIBE TABLE T_FLDCAT LINES gv_li.

ASSIGN LT_DATA TO <FS_DATA>.

  • Creating the Dynamic Internal Table

CALL METHOD CL_ALV_TABLE_CREATE=>CREATE_DYNAMIC_TABLE

EXPORTING

IT_FIELDCATALOG = T_FLDCAT " Fieldcatalogue

IMPORTING

EP_TABLE = <FS_DATA> " Dynamic Internal Table

EXCEPTIONS

GENERATE_SUBPOOL_DIR_FULL = 1

OTHERS = 2.

  • Assign Dyn Table To Field Sumbol

ASSIGN <FS_DATA>->* TO <FS_1>.

  • Assigning the Internal Table TYPE ANY to Standard internal Table

ASSIGN <FS_1> TO <FS_2>.

  • Creating a Workarea

CREATE DATA LWA_LINE LIKE LINE OF <FS_2> .

  • Assigning the Content to the workares as a Pointer

ASSIGN LWA_LINE->* TO <LWA_LINE_WA>.

LOOP AT T_FLDCAT INTO WA_IT_FLDCAT.

WA_IT_FLDCAT1-FIELDNAME = WA_IT_FLDCAT-FIELDNAME.

WA_IT_FLDCAT1-TABNAME = WA_IT_FLDCAT-TABNAME.

WA_IT_FLDCAT1-SELTEXT_L = WA_IT_FLDCAT-SELTEXT.

  • WA_IT_FLDCAT1-REF_TABNAME = 'MARC'.

APPEND WA_IT_FLDCAT1 TO T_FLDCAT1.

CLEAR : WA_IT_FLDCAT,WA_IT_FLDCAT1.

ENDLOOP.

ASSIGN LT_DATA1 TO <FS_DATA1>.

CALL METHOD CL_ALV_TABLE_CREATE=>CREATE_DYNAMIC_TABLE

EXPORTING

IT_FIELDCATALOG = T_FLDCAT " Fieldcatalogue

IMPORTING

EP_TABLE = <FS_DATA1> " Dynamic Internal table

EXCEPTIONS

GENERATE_SUBPOOL_DIR_FULL = 1

OTHERS = 2.

  • Assign Dyn Table To Field Sumbol

ASSIGN <FS_DATA1>->* TO <FS_11>.

  • Assigning the Internal Table TYPE ANY to Standard internal Table

ASSIGN <FS_11> TO <FS_22>.

  • Creating a Workarea

CREATE DATA LWA_LINE1 LIKE LINE OF <FS_22> .

  • Assigning the Content to the workares as a Pointer

ASSIGN LWA_LINE1->* TO <LWA_LINE_WA1>.

ENDFORM. " fieldcat

&----


*& Form show

&----


  • text

----


  • --> p1 text

  • <-- p2 text

----


FORM Display .

CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'

EXPORTING

  • I_INTERFACE_CHECK = ' '

  • I_BYPASSING_BUFFER = ' '

  • I_BUFFER_ACTIVE = ' '

I_CALLBACK_PROGRAM = GV_REPID

I_CALLBACK_PF_STATUS_SET = 'PF_STATUS_SET'

I_CALLBACK_USER_COMMAND = 'USER_COMMAND'

  • I_CALLBACK_TOP_OF_PAGE = ' '

  • I_CALLBACK_HTML_TOP_OF_PAGE = ' '

  • I_CALLBACK_HTML_END_OF_LIST = ' '

  • I_STRUCTURE_NAME =

  • I_BACKGROUND_ID = ' '

  • I_GRID_TITLE =

  • I_GRID_SETTINGS =

IS_LAYOUT = L_LT

IT_FIELDCAT = T_FLDCAT1[]

  • IT_EXCLUDING =

  • IT_SPECIAL_GROUPS =

  • IT_SORT =

  • IT_FILTER =

  • IS_SEL_HIDE =

  • I_DEFAULT = 'X'

  • I_SAVE = ' '

  • IS_VARIANT =

  • IT_EVENTS =

  • IT_EVENT_EXIT =

  • IS_PRINT =

  • IS_REPREP_ID =

  • I_SCREEN_START_COLUMN = 0

  • I_SCREEN_START_LINE = 0

  • I_SCREEN_END_COLUMN = 0

  • I_SCREEN_END_LINE = 0

  • I_HTML_HEIGHT_TOP = 0

  • I_HTML_HEIGHT_END = 0

  • IT_ALV_GRAPHICS =

  • IT_HYPERLINK =

  • IT_ADD_FIELDCAT =

  • IT_EXCEPT_QINFO =

  • IR_SALV_FULLSCREEN_ADAPTER =

  • IMPORTING

  • E_EXIT_CAUSED_BY_CALLER =

  • ES_EXIT_CAUSED_BY_USER =

TABLES

T_OUTTAB = <FS_2>

  • EXCEPTIONS

  • PROGRAM_ERROR = 1

  • OTHERS = 2

.

IF SY-SUBRC <> 0.

  • MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO

  • WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.

ENDIF.

ENDFORM. " display

*&----


*&----


FORM PF_STATUS_SET USING RS_EXTAB TYPE SLIS_T_EXTAB.

SET PF-STATUS 'DISPLAY' .

ENDFORM. "PF_STATUS_SET

*&----


*& Form Name: user_command *

*& Form Desc: For Handling USER_COMMAND *

*&----


FORM USER_COMMAND USING IF_UCOMM TYPE SY-UCOMM

IS_SELFIELD TYPE SLIS_SELFIELD.

CASE IF_UCOMM.

WHEN 'DOWNLOAD'.

CALL FUNCTION 'POPUP_TO_CONFIRM'

EXPORTING

  • TITLEBAR = ' '

  • DIAGNOSE_OBJECT = ' '

TEXT_QUESTION = 'Data download to excel'

  • TEXT_BUTTON_1 = 'Ja'(001)

  • ICON_BUTTON_1 = ' '

  • TEXT_BUTTON_2 = 'Nein'(002)

  • ICON_BUTTON_2 = ' '

  • DEFAULT_BUTTON = '1'

  • DISPLAY_CANCEL_BUTTON = 'X'

  • USERDEFINED_F1_HELP = ' '

  • START_COLUMN = 25

  • START_ROW = 6

  • POPUP_TYPE =

  • IMPORTING

  • ANSWER =

  • TABLES

  • PARAMETER =

  • EXCEPTIONS

  • TEXT_NOT_FOUND = 1

  • OTHERS = 2

.

IF SY-SUBRC <> 0.

  • MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO

  • WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.

ENDIF.

CALL FUNCTION 'GUI_DOWNLOAD'

EXPORTING

  • BIN_FILESIZE =

FILENAME = 'C:\Material-Text.xls'

FILETYPE = 'ASC'

  • APPEND = ' '

WRITE_FIELD_SEPARATOR = 'X'

  • HEADER = '00'

TRUNC_TRAILING_BLANKS = 'X'

  • WRITE_LF = 'X'

  • COL_SELECT = ' '

  • COL_SELECT_MASK = ' '

DAT_MODE = 'X'

IMPORTING

FILELENGTH = GL_LENGHT

TABLES

DATA_TAB = <FS_22>

  • EXCEPTIONS

  • FILE_WRITE_ERROR = 1

  • NO_BATCH = 2

  • GUI_REFUSE_FILETRANSFER = 3

  • INVALID_TYPE = 4

  • NO_AUTHORITY = 5

  • UNKNOWN_ERROR = 6

  • HEADER_NOT_ALLOWED = 7

  • SEPARATOR_NOT_ALLOWED = 8

  • FILESIZE_NOT_ALLOWED = 9

  • HEADER_TOO_LONG = 10

  • DP_ERROR_CREATE = 11

  • DP_ERROR_SEND = 12

  • DP_ERROR_WRITE = 13

  • UNKNOWN_DP_ERROR = 14

  • ACCESS_DENIED = 15

  • DP_OUT_OF_MEMORY = 16

  • DISK_FULL = 17

  • DP_TIMEOUT = 18

  • FILE_NOT_FOUND = 19

  • DATAPROVIDER_EXCEPTION = 20

  • CONTROL_FLUSH_ERROR = 21

  • OTHERS = 22

.

IF SY-SUBRC <> 0.

  • MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO

  • WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.

ENDIF.

IF GL_LENGHT NE 0.

MESSAGE S398(00) WITH 'DATA downloaded to EXCEL'.

ENDIF.

ENDCASE.

ENDFORM. "user_command

Thanks

Former Member
0 Kudos

Pl. refer this prog.

REPORT z_alv_dynamic_data.

>********************************************************************

  • This report displays data from SAP tables, views (like SE16) *

  • FM : REUSE_ALV_GRID_DISPLAY *

----


TABLES:

dd02l, " SAP tables

dd03l. " Table Fields

TYPE-POOLS: slis. " ALV Global Types

SELECTION-SCREEN :

BEGIN OF LINE, COMMENT 1(35) v_1 FOR FIELD p_table. "#EC NEEDED

PARAMETERS p_table LIKE dd03l-tabname OBLIGATORY MEMORY ID dtb.

SELECTION-SCREEN END OF LINE.

SELECTION-SCREEN :

BEGIN OF LINE, COMMENT 1(35) v_2 FOR FIELD p_max. "#EC NEEDED

PARAMETERS p_max(2) TYPE n DEFAULT '20' OBLIGATORY.

SELECTION-SCREEN END OF LINE.

----


AT SELECTION-SCREEN.

SELECT SINGLE * FROM dd02l WHERE tabname = p_table

AND as4local = 'A'

AND as4vers = '0000'.

IF sy-subrc NE 0.

  • Table & is not active in the Dictionary

MESSAGE e402(mo) WITH p_table.

ELSEIF dd02l-tabclass = 'INTTAB'.

  • & is a structure, not a table

MESSAGE e403(mo) WITH p_table.

ENDIF.

----


INITIALIZATION.

v_1 = 'Table'.

v_2 = 'Maximum of records'.

----


START-OF-SELECTION.

PERFORM f_display_data.

----


  • Form F_DISPLAY_DATA

----


FORM f_display_data.

  • Macro definition

DEFINE m_sort.

add 1 to ls_sort-spos.

ls_sort-fieldname = &1.

ls_sort-up = 'X'.

append ls_sort to lt_sort.

END-OF-DEFINITION.

DATA:

l_long TYPE i,

lp_struct TYPE REF TO data,

lp_table TYPE REF TO data, " Pointer to dynamic table

of_sdescr TYPE REF TO cl_abap_structdescr,

ls_lvc_cat TYPE lvc_s_fcat,

lt_lvc_cat TYPE lvc_t_fcat, " Field catalog

ls_fieldcat TYPE slis_fieldcat_alv,

lt_fieldcat TYPE slis_t_fieldcat_alv, " Field catalog

ls_layout TYPE slis_layout_alv,

lt_sort TYPE slis_t_sortinfo_alv, " Sort table

ls_sort TYPE slis_sortinfo_alv.

FIELD-SYMBOLS :

<fieldcat> TYPE slis_fieldcat_alv,

<lt_data> TYPE table, " Data to display

<fs> TYPE ANY,

<components> TYPE abap_compdescr.

  • Dynamic creation of a structure

CREATE DATA lp_struct TYPE (p_table).

ASSIGN lp_struct->* TO <fs>.

  • Fields Structure

of_sdescr ?= cl_abap_typedescr=>describe_by_data( <fs> ).

LOOP AT of_sdescr->components ASSIGNING <components>.

  • Field MANDT not displayed

IF sy-tabix = 1 AND <components>-name = 'MANDT'.

CONTINUE. " Next loop

ENDIF.

  • Build Fieldcatalog

ls_lvc_cat-fieldname = <components>-name.

ls_lvc_cat-ref_table = p_table.

APPEND ls_lvc_cat TO lt_lvc_cat.

  • Build Fieldcatalog

ls_fieldcat-fieldname = <components>-name.

ls_fieldcat-ref_tabname = p_table.

APPEND ls_fieldcat TO lt_fieldcat.

ENDLOOP.

  • Create internal table

CALL METHOD cl_alv_table_create=>create_dynamic_table

EXPORTING it_fieldcatalog = lt_lvc_cat

IMPORTING ep_table = lp_table.

ASSIGN lp_table->* TO <lt_data>.

  • Read data

SELECT * FROM (p_table) UP TO p_max ROWS

INTO CORRESPONDING FIELDS OF TABLE <lt_data>

ORDER BY PRIMARY KEY.

IF <lt_data>[] IS INITIAL.

  • No table entries found for specified key

MESSAGE i429(mo).

EXIT.

ENDIF.

  • Read key field to Build Sort Table

SELECT * FROM dd03l WHERE tabname = p_table

AND fieldname <> '.INCLUDE'

AND as4vers = '0000'

AND as4local = 'A'

ORDER BY position.

READ TABLE lt_fieldcat ASSIGNING <fieldcat>

WITH KEY fieldname = dd03l-fieldname.

CHECK sy-subrc EQ 0.

ADD dd03l-leng TO l_long.

IF dd03l-keyflag = 'X'.

  • Build Sort Table

m_sort dd03l-fieldname.

<fieldcat>-key = 'X'.

ELSEIF l_long > 150.

<fieldcat>-tech = 'X'.

ENDIF.

ENDSELECT.

ls_layout-zebra = 'X'.

ls_layout-colwidth_optimize = 'X'.

CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'

EXPORTING

is_layout = ls_layout

it_fieldcat = lt_fieldcat

it_sort = lt_sort

TABLES

t_outtab = <lt_data>.

ENDFORM. " F_DISPLAY_DATA

                              • END OF PROGRAM Z_ALV_DYNAMIC_DATA *********************

Regards,

Joy.

GauthamV
Active Contributor
0 Kudos

hi,

check BALV* in se38.u can find lots of alv examples .

reward all hlpful answers.

Former Member
0 Kudos

If you know the structure or table name use the below code

data: descr_struc_ref TYPE REF TO cl_abap_structdescr.

descr_struc_ref ?= cl_abap_typedescr=>describe_by_name('SFLIGHT' ).

or

Build the field catalog and use the internal table to build dynamically

LOOP AT itab .

ls_alv_cat-fieldname = itab-fieldname.

ls_alv_cat-ref_table = p_tablen.

ls_alv_cat-ref_field = itab-fieldname.

ls_alv_cat-seltext = itab-fieldtext.

ls_alv_cat-reptext = itab-fieldtext.

APPEND ls_alv_cat TO i_alv_cat.

ENDLOOP.

*internal table build

CALL METHOD cl_alv_table_create=>create_dynamic_table

EXPORTING

it_fieldcatalog = i_alv_cat

IMPORTING

ep_table = d_ref.

ASSIGN d_ref->* TO <f_fs>.

Regards

Kannaiah

Former Member
0 Kudos

hi

go to this link

http://saptechnical.com/Tutorials/ALV/DynamicALV/Demo.htm

it explains clearly

Reward if usefull

Cheers

snehi

Former Member
0 Kudos

Hi,

FUNCTION z_bspl_grid_create1 .

*"----


""Global Interface:

*" IMPORTING

*" VALUE(IS_SETTINGS) LIKE RFBILA_ALV_SETTINGS STRUCTURE

*" RFBILA_ALV_SETTINGS

*" VALUE(IT_LIST_COMMENTARY) TYPE SLIS_T_LISTHEADER OPTIONAL

*" REFERENCE(I_GRID_TITLE) TYPE LVC_TITLE OPTIONAL

*" REFERENCE(IS_GRID_SETTINGS) TYPE LVC_S_GLAY OPTIONAL

*"----


CALL FUNCTION 'RGRE_ERGSL_TEXT_GET'

EXPORTING

language = is_settings-fs_language

balance_version = is_settings-fs_version

text_type = ' ' "<<< means all texts

TABLES

text_tab = gt_ergsl_text.

  • save RFBILA ALV SETTINGS

gs_settings = is_settings.

PERFORM bspl_grid_totals_calculate TABLES gt_rsthie

gt_bspldata

gt_gridtotals

USING is_settings.

PERFORM bspl_grid_outtab_fill TABLES gt_rsthie

gt_bspldata

gt_gridtotals

gt_ergsl_text

gt_edit_settings

gt_gridouttab

USING is_settings.

*Modifications by kallam-----

DATA z_gridouttab LIKE gt_gridouttab OCCURS 0 WITH HEADER LINE.

DATA: BEGIN OF itab OCCURS 0,

racct LIKE gt_gridouttab-racct,

ergsl LIKE gt_gridouttab-ergsl,

text LIKE gt_gridouttab-text,

rbukrs LIKE gt_gridouttab-rbukrs,

repval LIKE gt_gridouttab-repval,

END OF itab.

*modifications by shanker

DATA: BEGIN OF itab1 OCCURS 0,

ergsl LIKE gt_gridouttab-ergsl,

rbukrs LIKE gt_gridouttab-rbukrs,

racct LIKE gt_gridouttab-racct,

text LIKE gt_gridouttab-text,

repval LIKE gt_gridouttab-repval,

END OF itab1.

DATA: BEGIN OF itab2 OCCURS 0,

ergsl LIKE gt_gridouttab-ergsl,

text LIKE gt_gridouttab-text,

END OF itab2.

DATA : BEGIN OF comp_itab OCCURS 0,

rbukrs LIKE gt_gridouttab-rbukrs,

END OF comp_itab.

DATA num_cols TYPE i.

*Second time modifications

TYPE-POOLS: slis,abap.

DATA: dy_table TYPE REF TO data,

dy_line TYPE REF TO data,

xfc TYPE lvc_s_fcat,

ifc TYPE lvc_t_fcat,

it_alvfc TYPE slis_t_fieldcat_alv,

wa_alvfc TYPE slis_fieldcat_alv.

*local data declarations

*DATA: L_CB_PROGRAM LIKE SY-REPID VALUE 'SAPLBSPL'.

DATA: l_cb_program LIKE sy-repid VALUE 'SAPLZFUNC_FI'.

DATA: ls_variant LIKE disvariant.

DATA: ls_layout TYPE slis_layout_alv.

DATA: lt_fieldcat TYPE slis_t_fieldcat_alv.

DATA: lt_sort TYPE slis_t_sortinfo_alv .

DATA: ls_print TYPE slis_print_alv.

*data:FS_LAYOUT TYPE LVC_S_LAYO.

TYPES: BEGIN OF res_itab,

racct LIKE gt_gridouttab-racct, "Account Number

ergsl LIKE gt_gridouttab-ergsl, "Financial Statement Item

text LIKE gt_gridouttab-text, "Text field

END OF res_itab.

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

*modifications by shanker

DATA: i TYPE i,

total TYPE umsav VALUE 0,

total1 TYPE umsav VALUE 0,

sub_tot TYPE umsav VALUE 0,

sub_tot1 TYPE umsav VALUE 0,

sub_tot2 TYPE umsav VALUE 0,

co_subtot1000(13) TYPE c,

co_subtot1005(13) TYPE c,

co_subtot1006(13) TYPE c,

co_subtot1007(13) TYPE c,

co_subtot1008(13) TYPE c,

co_subtot1201(13) TYPE c,

co_subtot1202(13) TYPE c,

co_subtot1301(13) TYPE c,

co_subtot1302(13) TYPE c,

co_subtot1401(13) TYPE c,

co_subtot1501(13) TYPE c,

*declaration of grand totals

gr_tot1000(13) TYPE c,

gr_tot1005(13) TYPE c,

gr_tot1006(13) TYPE c,

gr_tot1007(13) TYPE c,

gr_tot1008(13) TYPE c,

gr_tot1201(13) TYPE c,

gr_tot1202(13) TYPE c,

gr_tot1301(13) TYPE c,

gr_tot1302(13) TYPE c,

gr_tot1401(13) TYPE c,

gr_tot1501(13) TYPE c,

*declaration of super grand totals

ggr_tot1000(13) TYPE c,

ggr_tot1005(13) TYPE c,

ggr_tot1006(13) TYPE c,

ggr_tot1007(13) TYPE c,

ggr_tot1008(13) TYPE c,

ggr_tot1201(13) TYPE c,

ggr_tot1202(13) TYPE c,

ggr_tot1301(13) TYPE c,

ggr_tot1302(13) TYPE c,

ggr_tot1401(13) TYPE c,

ggr_tot1501(13) TYPE c.

FIELD-SYMBOLS: <dyn_table> TYPE STANDARD TABLE,

<dyn_table1> TYPE STANDARD TABLE,

<dyn_wa>,

<dyn_wa1>,

<dyn_field>,

  • <DYN_WA2>, "shank

<dyn_field1>.

*************************************by shanker

*commented by kallam-----

  • CALL FUNCTION 'REUSE_ALV_FIELDCATALOG_MERGE'

  • EXPORTING

  • I_PROGRAM_NAME = L_CB_PROGRAM

    • I_INTERNAL_TABNAME = LT_FIELDCAT

  • I_STRUCTURE_NAME = 'BSPL_GRID_FIELDCAT'

  • I_CLIENT_NEVER_DISPLAY = 'X'

    • I_INCLNAME = 'LBSPLU04'

    • I_BYPASSING_BUFFER =

    • I_BUFFER_ACTIVE =

  • CHANGING

  • CT_FIELDCAT = LT_FIELDCAT

  • EXCEPTIONS

  • INCONSISTENT_INTERFACE = 1

  • PROGRAM_ERROR = 2

  • OTHERS = 3.

*

  • IF SY-SUBRC <> 0.

  • MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO

  • WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.

  • ENDIF.

*

PERFORM bspl_grid_alv_interface_set

TABLES lt_fieldcat

USING is_settings

CHANGING l_cb_program

ls_variant

ls_layout.

PERFORM bspl_grid_sortinfos_set TABLES lt_sort[].

PERFORM bspl_grid_newpage_set TABLES gt_gridouttab.

PERFORM bspl_grid_printinfos_set USING ls_print.

*Modified on 26/02/2008 -


begin

  • PERFORM GET_NUM_OF_COMPANY_CODES.

  • PERFORM GET_STRUCTURE.

  • PERFORM CREATE_DYNAMIC_ITAB.

  • PERFORM GET_DATA.

  • PERFORM WRITE_OUT.

*end on 26/02/2008

&----


*& Form get_num_of_company_codes

&----


  • text

----


*FORM GET_NUM_OF_COMPANY_CODES.

z_gridouttab[] = gt_gridouttab[].

LOOP AT z_gridouttab.

itab-racct = z_gridouttab-racct. " G/L Account

itab-ergsl = z_gridouttab-ergsl. " FS item

itab-text = z_gridouttab-text. " Test for P/L item

itab-rbukrs = z_gridouttab-rbukrs." Company code

comp_itab-rbukrs = z_gridouttab-rbukrs.

itab-repval = z_gridouttab-repval.

APPEND itab. "shanker

  • COLLECT ITAB.

APPEND comp_itab.

CLEAR itab.

CLEAR comp_itab.

ENDLOOP.

SORT comp_itab BY rbukrs.

DELETE ADJACENT DUPLICATES FROM comp_itab.

LOOP AT comp_itab.

IF comp_itab-rbukrs EQ ''.

DELETE comp_itab.

ENDIF.

ENDLOOP.

DESCRIBE TABLE comp_itab LINES num_cols.

*modifications by shanker

  • ITAB1[] = ITAB[].

DATA: lv_ergsl LIKE itab-ergsl,

lv_text LIKE itab-text.

LOOP AT itab.

  • IF SY-TABIX = '1'.

  • LV_ERGSL = ITAB-ERGSL.

  • LV_text = ITAB-text.

MOVE itab-ergsl TO itab2-ergsl.

MOVE itab-text TO itab2-text.

APPEND itab2.

  • ENDIF.

*IF ITAB-ERGSL NE LV_ERGSL.

  • MOVE ITAB-ERGSL TO ITAB2-ERGSL.

  • APPEND ITAB2.

  • LV_ERGSL = ITAB-ERGSL.

  • ENDIF.

MOVE-CORRESPONDING itab TO itab1.

APPEND itab1.

ENDLOOP.

DELETE ADJACENT DUPLICATES FROM itab2 COMPARING ergsl .

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

  • SORT ITAB1 BY RACCT RBUKRS.

  • DELETE ADJACENT DUPLICATES FROM ITAB1 COMPARING RACCT .

*ENDFORM. "GET_NUM_OF_COMPANY_CODES

*Get table structure

*FORM GET_STRUCTURE.

DATA : idetails TYPE abap_compdescr_tab,

xdetails TYPE abap_compdescr.

DATA : ref_table_des TYPE REF TO cl_abap_structdescr.

DATA fld_pos TYPE i VALUE 1.

*shanker modi start

  • Get the structure of the table.

ref_table_des ?=

cl_abap_typedescr=>describe_by_name( 'RES_ITAB' ).

idetails[] = ref_table_des->components[].

LOOP AT idetails INTO xdetails.

CLEAR xfc.

xfc-col_pos = fld_pos.

xfc-fieldname = xdetails-name .

IF sy-tabix = 1.

xfc-seltext = 'Account Number'.

ELSEIF sy-tabix = 2.

xfc-seltext = 'FS Item'.

xfc-key = 'X'.

ELSE.

  • xfc-seltext = 'Text for B/S P&L item'.

xfc-seltext = 'Text item'.

xfc-outputlen = 25.

ENDIF.

xfc-datatype = xdetails-type_kind.

xfc-inttype = xdetails-type_kind.

xfc-intlen = xdetails-length.

  • xfc-decimals = xdetails-decimals.

APPEND xfc TO ifc.

fld_pos = fld_pos + 1.

ENDLOOP.

DO num_cols TIMES.

CLEAR xfc.

READ TABLE comp_itab INDEX sy-index.

xfc-fieldname = comp_itab-rbukrs .

xfc-seltext = comp_itab-rbukrs .

xfc-col_pos = fld_pos.

xfc-outputlen = 15.

*modifications by shanker

xfc-do_sum = 'X'.

XFC-DATATYPE = 'CURR'.

  • xfc-datatype = 'CHAR'.

xfc-just = 'R'.

APPEND xfc TO ifc.

fld_pos = fld_pos + 1.

ENDDO.

CLEAR xfc.

xfc-fieldname = 'RECORD_TOTAL' .

xfc-seltext = 'Record_total'.

xfc-col_pos = fld_pos.

xfc-outputlen = 15.

  • XFC-DO_SUM = 'X'. "Display column total

XFC-DATATYPE = 'CURR'.

  • xfc-datatype = 'CHAR'.

xfc-just = 'R'.

APPEND xfc TO ifc.

*ENDFORM. "get_structure

&----


*& Form create_dynamic_itab

&----


  • text

----


*FORM CREATE_DYNAMIC_ITAB.

*Create dynamic internal table and assign to FS

CALL METHOD cl_alv_table_create=>create_dynamic_table

EXPORTING

it_fieldcatalog = ifc

IMPORTING

ep_table = dy_table.

ASSIGN dy_table->* TO <dyn_table>.

  • Create dynamic work area and assign to FS

CREATE DATA dy_line LIKE LINE OF <dyn_table>.

ASSIGN dy_line->* TO <dyn_wa>.

*modifications by shanker

*----


*Create dynamic internal table and assign to FS

CALL METHOD cl_alv_table_create=>create_dynamic_table

EXPORTING

it_fieldcatalog = ifc

IMPORTING

ep_table = dy_table.

ASSIGN dy_table->* TO <dyn_table1>.

  • Create dynamic work area and assign to FS

CREATE DATA dy_line LIKE LINE OF <dyn_table1>.

ASSIGN dy_line->* TO <dyn_wa1>.

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

*ENDFORM. "create_dynamic_itab

&----


*& Form get_data

&----


  • text

----


*FORM GET_DATA.

LOOP AT itab1. " assigning <fs_itab1>.

ASSIGN COMPONENT 'RACCT' OF STRUCTURE <dyn_wa> TO <dyn_field>.

<dyn_field> = itab1-racct.

ASSIGN COMPONENT 'ERGSL' OF STRUCTURE <dyn_wa> TO <dyn_field>.

<dyn_field> = itab1-ergsl.

ASSIGN COMPONENT 'TEXT' OF STRUCTURE <dyn_wa> TO <dyn_field>.

<dyn_field> = itab1-text.

i = 4.

CLEAR comp_itab.

LOOP AT comp_itab.

ASSIGN COMPONENT i OF STRUCTURE <dyn_wa> TO <dyn_field>.

IF itab1-rbukrs EQ comp_itab-rbukrs.

<dyn_field> = itab1-repval.

sub_tot = itab1-repval.

IF itab1-rbukrs EQ '1000'.

co_subtot1000 = co_subtot1000 + itab1-repval.

ELSEIF itab1-rbukrs EQ '1005'.

co_subtot1005 = co_subtot1005 + itab1-repval.

ELSEIF itab1-rbukrs EQ '1006'.

co_subtot1006 = co_subtot1006 + itab1-repval.

ELSEIF itab1-rbukrs EQ '1007'.

co_subtot1007 = co_subtot1007 + itab1-repval.

ELSEIF itab1-rbukrs EQ '1008'.

co_subtot1008 = co_subtot1008 + itab1-repval.

ELSEIF itab1-rbukrs EQ '1201'.

co_subtot1201 = co_subtot1201 + itab1-repval.

ELSEIF itab1-rbukrs EQ '1202'.

co_subtot1202 = co_subtot1202 + itab1-repval.

ELSEIF itab1-rbukrs EQ '1301'.

co_subtot1301 = co_subtot1301 + itab1-repval.

ELSEIF itab1-rbukrs EQ '1302'.

co_subtot1302 = co_subtot1302 + itab1-repval.

ELSEIF itab1-rbukrs EQ '1401'.

co_subtot1401 = co_subtot1401 + itab1-repval.

ELSEIF itab1-rbukrs EQ '1501'.

co_subtot1501 = co_subtot1501 + itab1-repval.

ENDIF.

ELSEIF itab1-ergsl = '10 - 29'

OR itab1-ergsl = '10 - 22'

OR itab1-ergsl = '28 - 289'

OR itab1-ergsl = '311 - 399'

OR itab1-ergsl = '3410'

OR itab1-ergsl = '3499'

OR itab1-ergsl = '51 - 59'

OR itab1-ergsl = '610 - 619' AND itab1-racct NE space.

<dyn_field> = space.

sub_tot = 0.

*subtot assignment

ELSEIF itab1-racct EQ space AND itab1-ergsl NE space." AND itab1-text EQ space." AND I = 4.

IF '1000' EQ comp_itab-rbukrs.

<dyn_field> = co_subtot1000.

gr_tot1000 = gr_tot1000 + co_subtot1000.

co_subtot1000 = 0.

ENDIF.

IF '1005' EQ comp_itab-rbukrs.

<dyn_field> = co_subtot1005 .

gr_tot1005 = gr_tot1005 + co_subtot1005.

co_subtot1005 = 0.

ENDIF.

IF '1006' EQ comp_itab-rbukrs.

<dyn_field> = co_subtot1006 .

gr_tot1006 = gr_tot1006 + co_subtot1006.

co_subtot1006 = 0.

ENDIF.

IF '1007' EQ comp_itab-rbukrs.

<dyn_field> = co_subtot1007.

gr_tot1007 = gr_tot1007 + co_subtot1007.

co_subtot1007 = 0.

ENDIF.

IF '1008' EQ comp_itab-rbukrs.

<dyn_field> = co_subtot1008.

gr_tot1008 = gr_tot1008 + co_subtot1008.

co_subtot1008 = 0.

ENDIF.

IF '1201' EQ comp_itab-rbukrs.

<dyn_field> = co_subtot1201 .

gr_tot1201 = gr_tot1201 + co_subtot1201.

co_subtot1201 = 0.

ENDIF.

IF '1202' EQ comp_itab-rbukrs.

<dyn_field> = co_subtot1202 .

gr_tot1202 = gr_tot1202 + co_subtot1202.

co_subtot1202 = 0.

ENDIF.

IF '1301' EQ comp_itab-rbukrs.

<dyn_field> = co_subtot1301 .

gr_tot1301 = gr_tot1301 + co_subtot1301.

co_subtot1301 = 0.

ENDIF.

IF '1302' EQ comp_itab-rbukrs.

<dyn_field> = co_subtot1302 .

gr_tot1302 = gr_tot1302 + co_subtot1302.

co_subtot1302 = 0.

ENDIF.

IF '1401' EQ comp_itab-rbukrs.

<dyn_field> = co_subtot1401 .

gr_tot1401 = gr_tot1401 + co_subtot1401.

co_subtot1401 = 0.

ENDIF.

IF '1501' EQ comp_itab-rbukrs.

<dyn_field> = co_subtot1501 .

gr_tot1501 = gr_tot1501 + co_subtot1501.

co_subtot1501 = 0.

ENDIF.

ELSE.

<dyn_field> = 0.

sub_tot = 0.

ENDIF.

*shan

IF itab1-ergsl eq '331 - 349'.

IF '1000' EQ comp_itab-rbukrs.

<dyn_field> = co_subtot1000.

gr_tot1000 = gr_tot1000 + co_subtot1000.

co_subtot1000 = 0.

ENDIF.

IF '1005' EQ comp_itab-rbukrs.

<dyn_field> = co_subtot1005 .

gr_tot1005 = gr_tot1005 + co_subtot1005.

co_subtot1005 = 0.

ENDIF.

IF '1006' EQ comp_itab-rbukrs.

<dyn_field> = co_subtot1006 .

gr_tot1006 = gr_tot1006 + co_subtot1006.

co_subtot1006 = 0.

ENDIF.

IF '1007' EQ comp_itab-rbukrs.

<dyn_field> = co_subtot1007.

gr_tot1007 = gr_tot1007 + co_subtot1007.

co_subtot1007 = 0.

ENDIF.

IF '1008' EQ comp_itab-rbukrs.

<dyn_field> = co_subtot1008.

gr_tot1008 = gr_tot1008 + co_subtot1008.

co_subtot1008 = 0.

ENDIF.

IF '1201' EQ comp_itab-rbukrs.

<dyn_field> = co_subtot1201 .

gr_tot1201 = gr_tot1201 + co_subtot1201.

co_subtot1201 = 0.

ENDIF.

IF '1202' EQ comp_itab-rbukrs.

<dyn_field> = co_subtot1202 .

gr_tot1202 = gr_tot1202 + co_subtot1202.

co_subtot1202 = 0.

ENDIF.

IF '1301' EQ comp_itab-rbukrs.

<dyn_field> = co_subtot1301 .

gr_tot1301 = gr_tot1301 + co_subtot1301.

co_subtot1301 = 0.

ENDIF.

IF '1302' EQ comp_itab-rbukrs.

<dyn_field> = co_subtot1302 .

gr_tot1302 = gr_tot1302 + co_subtot1302.

co_subtot1302 = 0.

ENDIF.

IF '1401' EQ comp_itab-rbukrs.

<dyn_field> = co_subtot1401 .

gr_tot1401 = gr_tot1401 + co_subtot1401.

co_subtot1401 = 0.

ENDIF.

IF '1501' EQ comp_itab-rbukrs.

<dyn_field> = co_subtot1501 .

gr_tot1501 = gr_tot1501 + co_subtot1501.

co_subtot1501 = 0.

ENDIF.

endif.

IF itab1-racct eq space and itab1-ergsl eq '51 - 59' and itab1-text = 'SALES'.

IF '1000' EQ comp_itab-rbukrs.

<dyn_field> = co_subtot1000.

gr_tot1000 = gr_tot1000 + co_subtot1000.

co_subtot1000 = 0.

ENDIF.

IF '1005' EQ comp_itab-rbukrs.

<dyn_field> = co_subtot1005 .

gr_tot1005 = gr_tot1005 + co_subtot1005.

co_subtot1005 = 0.

ENDIF.

IF '1006' EQ comp_itab-rbukrs.

<dyn_field> = co_subtot1006 .

gr_tot1006 = gr_tot1006 + co_subtot1006.

co_subtot1006 = 0.

ENDIF.

IF '1007' EQ comp_itab-rbukrs.

<dyn_field> = co_subtot1007.

gr_tot1007 = gr_tot1007 + co_subtot1007.

co_subtot1007 = 0.

ENDIF.

IF '1008' EQ comp_itab-rbukrs.

<dyn_field> = co_subtot1008.

gr_tot1008 = gr_tot1008 + co_subtot1008.

co_subtot1008 = 0.

ENDIF.

IF '1201' EQ comp_itab-rbukrs.

<dyn_field> = co_subtot1201 .

gr_tot1201 = gr_tot1201 + co_subtot1201.

co_subtot1201 = 0.

ENDIF.

IF '1202' EQ comp_itab-rbukrs.

<dyn_field> = co_subtot1202 .

gr_tot1202 = gr_tot1202 + co_subtot1202.

co_subtot1202 = 0.

ENDIF.

IF '1301' EQ comp_itab-rbukrs.

<dyn_field> = co_subtot1301 .

gr_tot1301 = gr_tot1301 + co_subtot1301.

co_subtot1301 = 0.

ENDIF.

IF '1302' EQ comp_itab-rbukrs.

<dyn_field> = co_subtot1302 .

gr_tot1302 = gr_tot1302 + co_subtot1302.

co_subtot1302 = 0.

ENDIF.

IF '1401' EQ comp_itab-rbukrs.

<dyn_field> = co_subtot1401 .

gr_tot1401 = gr_tot1401 + co_subtot1401.

co_subtot1401 = 0.

ENDIF.

IF '1501' EQ comp_itab-rbukrs.

<dyn_field> = co_subtot1501 .

gr_tot1501 = gr_tot1501 + co_subtot1501.

co_subtot1501 = 0.

ENDIF.

endif.

*endshank

*Grand total assignment

IF itab1-racct EQ space AND itab1-ergsl eq '10 - 19' "ASSETS

or itab1-ergsl eq '211 - 223'

or itab1-ergsl eq '10 - 22'

or itab1-ergsl eq '231 - 241'

or itab1-ergsl eq '311 - 324' "LIABILITIES & EQUITY

  • or itab1-ergsl eq '331 - 349'

  • or itab1-ergsl eq '51 - 59'

or itab1-ergsl eq '3410'

or itab1-ergsl eq '3499'.

IF '1000' EQ comp_itab-rbukrs.

<dyn_field> = gr_tot1000.

ggr_tot1000 = ggr_tot1000 + gr_tot1000.

gr_tot1000 = 0.

ENDIF.

IF '1005' EQ comp_itab-rbukrs.

<dyn_field> = gr_tot1005.

ggr_tot1005 = ggr_tot1005 + gr_tot1005.

gr_tot1005 = 0.

ENDIF.

IF '1006' EQ comp_itab-rbukrs.

<dyn_field> = gr_tot1006.

ggr_tot1006 = ggr_tot1006 + gr_tot1006.

gr_tot1006 = 0.

ENDIF.

IF '1007' EQ comp_itab-rbukrs.

<dyn_field> = gr_tot1007.

ggr_tot1007 = ggr_tot1007 + gr_tot1007.

gr_tot1007 = 0.

ENDIF.

IF '1008' EQ comp_itab-rbukrs.

<dyn_field> = gr_tot1008.

ggr_tot1008 = ggr_tot1008 + gr_tot1008.

gr_tot1008 = 0.

ENDIF.

IF '1201' EQ comp_itab-rbukrs.

<dyn_field> = gr_tot1201.

ggr_tot1201 = ggr_tot1201 + gr_tot1201.

gr_tot1201 = 0.

ENDIF.

IF '1202' EQ comp_itab-rbukrs.

<dyn_field> = gr_tot1202.

ggr_tot1202 = ggr_tot1202 + gr_tot1202.

gr_tot1202 = 0.

ENDIF.

IF '1301' EQ comp_itab-rbukrs.

<dyn_field> = gr_tot1301.

ggr_tot1301 = ggr_tot1301 + gr_tot1301.

gr_tot1301 = 0.

ENDIF.

IF '1302' EQ comp_itab-rbukrs.

<dyn_field> = gr_tot1302.

ggr_tot1302 = ggr_tot1302 + gr_tot1302.

gr_tot1302 = 0.

ENDIF.

IF '1401' EQ comp_itab-rbukrs.

<dyn_field> = gr_tot1401.

ggr_tot1401 = ggr_tot1401 + gr_tot1401.

gr_tot1401 = 0.

ENDIF.

IF '1501' EQ comp_itab-rbukrs.

<dyn_field> = gr_tot1501.

ggr_tot1501 = ggr_tot1501 + gr_tot1501.

gr_tot1501 = 0.

ENDIF.

endif.

*shanker

*end shanker

*Super grand total assignment

IF itab1-racct EQ space AND itab1-ergsl eq '10 - 29' "ASSETS

or itab1-ergsl eq '311 - 399'. "LIABILITIES & EQUITY

IF '1000' EQ comp_itab-rbukrs.

<dyn_field> = ggr_tot1000.

ggr_tot1000 = 0.

ENDIF.

IF '1005' EQ comp_itab-rbukrs.

<dyn_field> = ggr_tot1005.

ggr_tot1005 = 0.

ENDIF.

IF '1006' EQ comp_itab-rbukrs.

<dyn_field> = ggr_tot1006.

ggr_tot1006 = 0.

ENDIF.

IF '1007' EQ comp_itab-rbukrs.

<dyn_field> = ggr_tot1007.

ggr_tot1007 = 0.

ENDIF.

IF '1008' EQ comp_itab-rbukrs.

<dyn_field> = ggr_tot1008.

ggr_tot1008 = 0.

ENDIF.

IF '1201' EQ comp_itab-rbukrs.

<dyn_field> = ggr_tot1201.

ggr_tot1201 = 0.

ENDIF.

IF '1202' EQ comp_itab-rbukrs.

<dyn_field> = ggr_tot1202.

ggr_tot1202 = 0.

ENDIF.

IF '1301' EQ comp_itab-rbukrs.

<dyn_field> = ggr_tot1301.

ggr_tot1301 = 0.

ENDIF.

IF '1302' EQ comp_itab-rbukrs.

<dyn_field> = ggr_tot1302.

ggr_tot1302 = 0.

ENDIF.

IF '1401' EQ comp_itab-rbukrs.

<dyn_field> = ggr_tot1401.

ggr_tot1401 = 0.

ENDIF.

IF '1501' EQ comp_itab-rbukrs.

<dyn_field> = gr_tot1501.

ggr_tot1501 = 0.

ENDIF.

endif.

if itab1-ergsl eq '10 - 29' and itab1-racct eq space and itab1-text eq 'A S S E T S'.

<dyn_field> = ''.

endif.

IF itab1-text eq '= = = = = ='

or itab1-text eq '================='

or itab1-text eq '= = = = = = = = = = = = ='.

<dyn_field> = space.

endif.

i = i + 1.

total = total + sub_tot.

ENDLOOP.

  • Record total field assignment

ASSIGN COMPONENT i OF STRUCTURE <dyn_wa> TO <dyn_field>.

IF total NE space.

<dyn_field> = total.

ELSE.

<dyn_field> = space.

ENDIF.

APPEND <dyn_wa> TO <dyn_table>.

  • COLLECT <dyn_wa> INTO <dyn_table>.

CLEAR <dyn_wa>.

total = 0.

ENDLOOP.

*----


*shanker commented begin

  • SORT ITAB1 BY ergsl .

  • DATA: FLAG1 TYPE C,

  • FLAG2 TYPE C,

  • LV_RACCT LIKE ITAB1-RACCT.

*

    • DELETE ADJACENT DUPLICATES FROM ITAB1 COMPARING text .

*

*LOOP AT ITAB2.

  • LOOP AT ITAB1 WHERE ERGSL = ITAB2-ERGSL. " assigning <fs_itab1>.

  • LV_RACCT = ITAB1-RACCT.

    • CHECK ITAB1-RBUKRS IS NOT INITIAL.

*IF ITAB1-RACCT IS NOT INITIAL.

  • ASSIGN COMPONENT 'RACCT' OF STRUCTURE <DYN_WA> TO <DYN_FIELD>.

  • <DYN_FIELD> = ITAB1-RACCT.

  • ASSIGN COMPONENT 'ERGSL' OF STRUCTURE <DYN_WA> TO <DYN_FIELD>.

  • <DYN_FIELD> = ITAB1-ERGSL.

*

  • ASSIGN COMPONENT 'TEXT' OF STRUCTURE <DYN_WA> TO <DYN_FIELD>.

  • <DYN_FIELD> = ITAB1-TEXT.

*

  • FLAG2 = 'X'.

*ELSE.

  • ASSIGN COMPONENT 'ERGSL' OF STRUCTURE <DYN_WA> TO <DYN_FIELD>.

  • <DYN_FIELD> = ITAB1-ERGSL.

*

  • ASSIGN COMPONENT 'TEXT' OF STRUCTURE <DYN_WA> TO <DYN_FIELD>.

  • <DYN_FIELD> = ITAB1-TEXT.

*ENDIF.

    • ASSIGN COMPONENT 'RACCT' OF STRUCTURE <DYN_WA1> TO <DYN_FIELD1>.

    • <DYN_FIELD1> = ITAB1-RACCT.

*IF FLAG2 IS NOT INITIAL.

  • ASSIGN COMPONENT 'ERGSL' OF STRUCTURE <DYN_WA1> TO <DYN_FIELD1>.

  • <DYN_FIELD1> = ITAB1-ERGSL.

*

  • ASSIGN COMPONENT 'TEXT' OF STRUCTURE <DYN_WA1> TO <DYN_FIELD1>.

  • <DYN_FIELD1> = ' '.

*ENDIF.

  • AT END OF ERGSL.

  • IF ITAB1-RBUKRS IS NOT INITIAL AND LV_RACCT IS NOT INITIAL.

  • FLAG1 = 'X'.

  • ENDIF.

  • ENDAT.

*

    • IF FLAG1 = 'X'.

    • ASSIGN COMPONENT 'TEXT' OF STRUCTURE <DYN_WA> TO <DYN_FIELD>.

    • <DYN_FIELD> = 'SUB TOTAL'.

    • ENDIF.

**modifications by shanker

*IF ITAB1-RACCT IS NOT INITIAL.

  • I = 4.

  • CLEAR COMP_ITAB.

  • LOOP AT COMP_ITAB.

  • ASSIGN COMPONENT I OF STRUCTURE <DYN_WA> TO <DYN_FIELD>.

*

  • IF ITAB1-RBUKRS EQ COMP_ITAB-RBUKRS.

  • <DYN_FIELD> = ITAB1-REPVAL.

  • SUB_TOT1 = ITAB1-REPVAL.

  • ELSE.

  • <DYN_FIELD> = 0.

  • SUB_TOT1 = 0.

  • ENDIF.

*

  • I = I + 1.

  • TOTAL = TOTAL + SUB_TOT1.

  • ENDLOOP.

*

  • ASSIGN COMPONENT I OF STRUCTURE <DYN_WA> TO <DYN_FIELD>.

  • <DYN_FIELD> = TOTAL.

*

  • APPEND <DYN_WA> TO <DYN_TABLE>.

  • CLEAR <DYN_WA>.

  • ELSE.

  • I = 4.

  • CLEAR COMP_ITAB.

  • LOOP AT COMP_ITAB.

  • ASSIGN COMPONENT I OF STRUCTURE <DYN_WA> TO <DYN_FIELD>.

*

  • IF ITAB1-RBUKRS EQ COMP_ITAB-RBUKRS.

  • <DYN_FIELD> = SPACE.

  • ELSE.

  • <DYN_FIELD> = SPACE.

  • ENDIF.

*

  • I = I + 1.

  • ASSIGN COMPONENT I OF STRUCTURE <DYN_WA> TO <DYN_FIELD>.

  • <DYN_FIELD> = SPACE.

  • ENDLOOP.

*

  • APPEND <DYN_WA> TO <DYN_TABLE>.

  • CLEAR <DYN_WA>.

  • ENDIF.

*

  • CLEAR TOTAL.

  • SUB_TOT = SUB_TOT + ITAB1-REPVAL.

  • I = 4.

  • AT END OF RBUKRS.

  • IF ITAB1-RBUKRS IS NOT INITIAL.

  • CLEAR COMP_ITAB.

  • LOOP AT COMP_ITAB.

  • ASSIGN COMPONENT I OF STRUCTURE <DYN_WA1> TO <DYN_FIELD1>.

*

  • IF ITAB1-RBUKRS EQ COMP_ITAB-RBUKRS.

  • <DYN_FIELD1> = SUB_TOT.

  • SUB_TOT2 = SUB_TOT.

  • CLEAR SUB_TOT.

  • ELSE.

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

    • <DYN_FIELD> = 0.

  • ENDIF.

  • I = I + 1.

  • ENDLOOP.

  • TOTAL1 = TOTAL1 + SUB_TOT2.

  • ENDIF.

  • IF FLAG1 = 'X' AND FLAG2 = 'X'.

  • ASSIGN COMPONENT I OF STRUCTURE <DYN_WA1> TO <DYN_FIELD>.

  • <DYN_FIELD> = TOTAL1.

  • APPEND <DYN_WA1> TO <DYN_TABLE>.

  • CLEAR <DYN_WA1>.

  • CLEAR: TOTAL1, SUB_TOT2.

*

  • CLEAR FLAG1. CLEAR FLAG2.

  • ENDIF.

  • ENDAT.

  • ENDLOOP.

*ENDLOOP.

*shanker comment end

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

LOOP AT ifc INTO xfc.

wa_alvfc-fieldname = xfc-fieldname.

wa_alvfc-seltext_s = xfc-seltext.

wa_alvfc-col_pos = xfc-col_pos.

wa_alvfc-outputlen = xfc-outputlen.

  • wa_alvfc-do_sum = xfc-do_sum.

wa_alvfc-datatype = xfc-datatype.

APPEND wa_alvfc TO it_alvfc.

ENDLOOP.

  • u2022 Call ABAP List Viewer (ALV)

CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'

EXPORTING

i_callback_program = l_cb_program

i_callback_pf_status_set = 'BSPL_GRID_PF_STATUS_SET'

i_callback_user_command = 'BSPL_GRID_USER_COMMAND'

i_callback_top_of_page = 'BSPL_GRID_TOP'

i_callback_html_top_of_page = 'BSPL_GRID_TOP_HTML'

i_grid_title = i_grid_title

i_grid_settings = is_grid_settings

is_layout = ls_layout

it_fieldcat = it_alvfc

i_default = 'X'

i_save = 'A'

is_variant = ls_variant

is_print = ls_print

  • IT_SORT = LT_SORT

TABLES

t_outtab = <dyn_table>.

*<dyn_table>

  • CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'

  • EXPORTING

    • I_INTERFACE_CHECK = ' '

    • I_BUFFER_ACTIVE = ' '

  • I_CALLBACK_PROGRAM = L_CB_PROGRAM

  • I_CALLBACK_PF_STATUS_SET = 'BSPL_GRID_PF_STATUS_SET'

  • I_CALLBACK_USER_COMMAND = 'BSPL_GRID_USER_COMMAND'

  • I_CALLBACK_TOP_OF_PAGE = 'BSPL_GRID_TOP'

  • I_CALLBACK_HTML_TOP_OF_PAGE = 'BSPL_GRID_TOP_HTML'

    • I_CALLBACK_HTML_END_OF_LIST = ' '

    • I_STRUCTURE_NAME = 'BSPL_GRID_FIELDCAT'

    • I_BACKGROUND_ID = ' '

    • I_GRID_TITLE = T011T-VSTXT

  • I_GRID_TITLE = I_GRID_TITLE

  • I_GRID_SETTINGS = IS_GRID_SETTINGS

  • IS_LAYOUT = LS_LAYOUT

  • IT_FIELDCAT = it_alvfc

    • IT_FIELDCAT = LT_FIELDCAT

    • IT_EXCLUDING =

    • IT_SPECIAL_GROUPS =

  • IT_SORT = LT_SORT

    • IT_FILTER =

    • IS_SEL_HIDE =

  • I_DEFAULT = 'X'

  • I_SAVE = 'A'

  • IS_VARIANT = LS_VARIANT

    • IT_EVENTS =

    • IT_EVENT_EXIT =

  • IS_PRINT = LS_PRINT

    • IS_REPREP_ID =

    • I_SCREEN_START_COLUMN = 0

    • I_SCREEN_START_LINE = 0

    • I_SCREEN_END_COLUMN = 0

    • I_SCREEN_END_LINE = 0

    • IMPORTING

    • E_EXIT_CAUSED_BY_CALLER =

    • ES_EXIT_CAUSED_BY_USER =

  • TABLES

  • T_OUTTAB = <dyn_table>

  • T_OUTTAB = GT_GRIDOUTTAB

  • EXCEPTIONS

  • PROGRAM_ERROR = 1

  • OTHERS = 2.

*

IF sy-subrc <> 0.

MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno

WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.

ENDIF.

*Modification.----


end

PERFORM call_badi_exit TABLES gt_gridouttab

it_list_commentary.

ENDFUNCTION.

&----


*& Form BSPL_GRID_OUTTAB_FILL1

&----


  • text

----


  • -->PT_NODE text

  • -->PT_DATA text

  • -->PT_TOTALS text

  • -->PT_TEXT text

  • -->PT_EDIT text

  • -->PT_OUTTAB text

  • -->VALUE(PS_SETTINGS) text

----


FORM bspl_grid_outtab_fill1

TABLES pt_node TYPE tt_rsthie

pt_data TYPE tt_bspl_data

pt_totals TYPE tt_grid_totals

pt_text TYPE tt_ergsl_text

pt_edit TYPE tt_edit_settings

pt_outtab TYPE tt_grid_outtab

USING value(ps_settings) LIKE rfbila_alv_settings.

  • local data declaration

DATA: lt_predecessor TYPE tt_grid_predecessor WITH HEADER LINE.

DATA: l_id LIKE rsthie-id.

DATA: l_fberflg LIKE con_x.

DATA: l_fber_tlevel LIKE rsthie-tlevel.

DATA: ls_node_saknr TYPE ts_node_saknr.

LOOP AT pt_node ASSIGNING <rsthie>.

CASE <rsthie>-type.

WHEN con_top.

WHEN con_bpos.

CLEAR: l_fberflg.

PERFORM bspl_grid_bpos_to_outtab TABLES pt_totals

pt_text

pt_edit

pt_outtab

lt_predecessor

USING <rsthie>

ps_settings

CHANGING l_id.

WHEN con_acct.

ls_node_saknr = <rsthie>-name.

CHECK: g_list_state = con_acct.

CHECK: l_fberflg IS INITIAL

OR l_fber_tlevel = <rsthie>-tlevel.

PERFORM bspl_grid_acct_to_outtab TABLES pt_totals

pt_outtab

pt_data

USING <rsthie>

ps_settings

CHANGING l_id.

WHEN con_fber.

l_fberflg = con_x.

l_fber_tlevel = <rsthie>-tlevel.

PERFORM bspl_grid_fber_to_outtab TABLES pt_totals

pt_outtab

pt_data

USING <rsthie>

ps_settings

CHANGING l_id.

WHEN con_ccod.

CHECK: g_list_state = con_ccod.

CHECK: l_fberflg IS INITIAL

OR l_fber_tlevel = <rsthie>-tlevel.

PERFORM bspl_grid_ccod_to_outtab TABLES pt_totals

pt_outtab

pt_data

USING <rsthie>

ps_settings

ls_node_saknr

CHANGING l_id.

WHEN con_busa.

WHEN con_leaf.

ENDCASE.

ENDLOOP.

  • IF NOT ( LT_PREDECESSOR[] IS INITIAL ).

    • put totals of remaining predecessors to OUTTAB

  • PERFORM BSPL_GRID_PREDECESSOR_2_OUTTAB

  • TABLES PT_TOTALS

  • PT_TEXT

  • PT_EDIT

  • PT_OUTTAB

  • LT_PREDECESSOR

  • USING '01' "<<< TLEVEL

  • PS_SETTINGS

  • CHANGING L_ID.

  • ENDIF.

ENDFORM. " BSPL_GRID_OUTTAB_FILL