Wednesday, January 13, 2010

Simple ALV Interactive Report

*&---------------------------------------------------------------------*
*& Report Y_INTERACTIVE_1
*&
*&---------------------------------------------------------------------*
*&
*&
*&---------------------------------------------------------------------*

REPORT y_interactive_alv_1 LINE-SIZE 250
LINE-COUNT 65(3)
NO STANDARD PAGE HEADING.

********************************************************************
*Author: Rama Krishna Ganji
*Program ID: Y_INTERACTIVE_ALV_1
*Program Desc: ALV Interactive Report
*Date: 21-Oct-09
********************************************************************
TABLES: bseg.

TYPE-POOLS: slis.

*declaration for fieldcatalog
DATA: it_fieldcat TYPE slis_t_fieldcat_alv,
wa_fieldcat TYPE slis_fieldcat_alv,
it_fieldcat1 TYPE slis_t_fieldcat_alv,
wa_fieldcat1 TYPE slis_fieldcat_alv,
it_fieldcat2 TYPE slis_t_fieldcat_alv,
wa_fieldcat2 TYPE slis_fieldcat_alv,
it_layout TYPE slis_layout_alv. "Declaration for layout
* declaration for events table where user comand or set PF status will
* be defined
DATA: it_events TYPE slis_t_event,
wa_events TYPE slis_alv_event.

DATA: it_listheader TYPE slis_t_listheader.

*Title displayed when the alv list is displayed
DATA: i_title_bseg TYPE lvc_title VALUE 'BSEG ALV Data'.
DATA: i_title_lfa TYPE lvc_title VALUE 'LFA1 ALV Data'.
DATA: i_title_kna TYPE lvc_title VALUE 'KNA1 ALV Data'.


*****************DECLARATION of InternalTables**************************
*type declaration for values from bseg
TYPES : BEGIN OF ty_bseg,
bukrs TYPE bseg-bukrs, "Company Code
belnr TYPE bseg-belnr, "Document Number
gjahr TYPE bseg-gjahr, "Fiscal Year
lifnr TYPE bseg-lifnr, "Vendor
kunnr TYPE bseg-kunnr, "Customer
koart TYPE bseg-koart, "Accouunt Type
END OF ty_bseg.

DATA : it_bseg TYPE STANDARD TABLE OF ty_bseg INITIAL SIZE 0,
wa_bseg TYPE ty_bseg.

*type declaration for values from LFA1
TYPES: BEGIN OF ty_lfa1,
lifnr TYPE lfa1-lifnr,
name1 TYPE lfa1-name1,
name2 TYPE lfa1-name2,
ort01 TYPE lfa1-ort01,
END OF ty_lfa1.

DATA: it_lfa1 TYPE STANDARD TABLE OF ty_lfa1 INITIAL SIZE 0,
wa_lfa1 TYPE ty_lfa1 .

*type declaration for values from LFA1
TYPES: BEGIN OF ty_lfa,
lifnr TYPE lfa1-lifnr,
name TYPE lfa1-name1,
ort01 TYPE lfa1-ort01,
END OF ty_lfa.

DATA: it_lfa TYPE STANDARD TABLE OF ty_lfa INITIAL SIZE 0,
wa_lfa TYPE ty_lfa .

*type declaration for values from KNA1
TYPES: BEGIN OF ty_kna1,
kunnr TYPE kna1-lifnr,
name1 TYPE kna1-name1,
name2 TYPE kna1-name2,
ort01 TYPE kna1-ort01,
END OF ty_kna1.

DATA: it_kna1 TYPE STANDARD TABLE OF ty_kna1 INITIAL SIZE 0,
wa_kna1 TYPE ty_lfa1 .

*type declaration for values from KNA1
TYPES: BEGIN OF ty_kna,
kunnr TYPE kna1-lifnr,
name TYPE kna1-name1,
ort01 TYPE kna1-ort01,
END OF ty_kna.

DATA: it_kna TYPE STANDARD TABLE OF ty_kna INITIAL SIZE 0,
wa_kna TYPE ty_lfa .



********************selection-screen****************************
SELECTION-SCREEN BEGIN OF BLOCK b1k1 WITH FRAME TITLE text-001.

PARAMETERS : p_bukrs TYPE bseg-bukrs OBLIGATORY .
SELECT-OPTIONS : s_belnr FOR bseg-belnr OBLIGATORY.
PARAMETERS : p_gjahr TYPE bseg-gjahr OBLIGATORY.

SELECTION-SCREEN END OF BLOCK b1k1.

*****************START-OF-SELECTION ***************************


START-OF-SELECTION.


******************************************************************
* CALL FUNCTION 'REUSE_ALV_FIELDCATALOG_MERGE'
******************************************************************

PERFORM alv_fieldcatalog.

******************************************************************
* Fetching the data from BSEG table
******************************************************************
PERFORM event_call.

PERFORM populate_event.

******************************************************************
* Fetching the data from BSEG table
******************************************************************

PERFORM get_bseg.

PERFORM build_listheader USING it_listheader.

*********************************************************************
*CALL FUNCTION 'REUSE_ALV_LIST_DISPLAY'
**********************************************************************

PERFORM alv_list_display.

*&---------------------------------------------------------------------*
*& Form get_bseg
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM get_bseg .
SELECT bukrs
belnr
gjahr
lifnr
kunnr
koart
FROM bseg
INTO CORRESPONDING FIELDS OF TABLE it_bseg
WHERE bukrs = p_bukrs AND
belnr IN s_belnr AND
gjahr = p_gjahr .

IF sy-subrc <> 0.
MESSAGE 'Entered values are wrong'(015) TYPE 'E'.
ENDIF.


ENDFORM. " get_bseg

*&---------------------------------------------------------------------*
*& Form alv_fieldcatalog
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM alv_fieldcatalog .
wa_fieldcat-tabname = 'IT_BSEG'.
wa_fieldcat-fieldname = 'BELNR'.
wa_fieldcat-seltext_m = 'Document No.'(002).
APPEND wa_fieldcat TO it_fieldcat.
CLEAR wa_fieldcat.

wa_fieldcat-tabname = 'IT_BSEG'.
wa_fieldcat-fieldname = 'GJAHR'.
wa_fieldcat-seltext_m = 'Fiscal Year.'(003).
APPEND wa_fieldcat TO it_fieldcat.
CLEAR wa_fieldcat.

wa_fieldcat-tabname = 'IT_BSEG'.
wa_fieldcat-fieldname = 'LIFNR'.
wa_fieldcat-seltext_m = 'Vendor'(004).
APPEND wa_fieldcat TO it_fieldcat.
CLEAR wa_fieldcat.

wa_fieldcat-tabname = 'IT_BSEG'.
wa_fieldcat-fieldname = 'KUNNR'.
wa_fieldcat-seltext_m = 'Customer'(005).
APPEND wa_fieldcat TO it_fieldcat.
CLEAR wa_fieldcat.

wa_fieldcat-tabname = 'IT_BSEG'.
wa_fieldcat-fieldname = 'KOART'.
wa_fieldcat-seltext_m = 'Account Type'(006).
APPEND wa_fieldcat TO it_fieldcat.
CLEAR wa_fieldcat.


ENDFORM. " alv_fieldcatalog
*&---------------------------------------------------------------------*
*& Form alv_list_display
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM alv_list_display .
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
EXPORTING
i_callback_program = sy-repid
* I_CALLBACK_PF_STATUS_SET = ' '
i_callback_user_command = 'USER_COMMAND'
i_callback_top_of_page = 'TOP_OF_PAGE '
i_grid_title = i_title_bseg
* I_GRID_SETTINGS =
* IS_LAYOUT =
it_fieldcat = it_fieldcat[]
* IT_EXCLUDING =
* IT_SPECIAL_GROUPS =
* IT_SORT =
* IT_FILTER =
* IS_SEL_HIDE =
* I_DEFAULT = 'X'
* I_SAVE = ' '
* IS_VARIANT =
it_events = it_events
* IT_EVENT_EXIT =
* IMPORTING
* E_EXIT_CAUSED_BY_CALLER =
* ES_EXIT_CAUSED_BY_USER =
TABLES
t_outtab = it_bseg
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. " alv_list_display
*&---------------------------------------------------------------------*
*& Form event_call
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM event_call .
CALL FUNCTION 'REUSE_ALV_EVENTS_GET'
EXPORTING
i_list_type = 0
IMPORTING
et_events = it_events
EXCEPTIONS
list_type_wrong = 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. " event_call
*&---------------------------------------------------------------------*
*& Form populate_event
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM populate_event .
READ TABLE it_events INTO wa_events WITH KEY name = 'TOP_OF_PAGE'
.
IF sy-subrc = 0.
wa_events-form = 'TOP_OF_PAGE'.
MODIFY it_events FROM wa_events TRANSPORTING form WHERE name =
wa_events-form.
ENDIF.

READ TABLE it_events INTO wa_events WITH KEY name = 'USER_COMMAND'.
IF sy-subrc = 0.
wa_events-form = 'USER_COMMAND'.
MODIFY it_events FROM wa_events TRANSPORTING form WHERE name =
wa_events-name.
ENDIF.
ENDFORM. " populate_event
*&---------------------------------------------------------------------*
*& Form BUILD_LISTHEADER
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->P_IT_LISTHEADER text
*----------------------------------------------------------------------*
FORM build_listheader USING i_listheader TYPE slis_t_listheader.

DATA hline TYPE slis_listheader.
hline-info = 'ALV Interactive Report'(007).
hline-typ = 'H'.

ENDFORM. " BUILD_LISTHEADE

*&---------------------------------------------------------------------*
*& Form TOP_OF_PAGE
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
FORM top_of_page.
CALL FUNCTION 'REUSE_ALV_COMMENTARY_WRITE'
EXPORTING
it_list_commentary = it_listheader
* i_logo =
* I_END_OF_LIST_GRID =
.

ENDFORM. "TOP_OF_PAGE

*&---------------------------------------------------------------------*
*& Form USER_COMMAND
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->R_UCOMM text
* -->RS_SELFIELD text
*----------------------------------------------------------------------*
FORM user_command USING r_ucomm LIKE sy-ucomm
rs_selfield TYPE slis_selfield.

CASE r_ucomm.
WHEN '&IC1'.
IF rs_selfield-fieldname = 'LIFNR'.
READ TABLE it_bseg INTO wa_bseg INDEX rs_selfield-tabindex.
PERFORM build_fieldcatlog_lfa .
PERFORM event_call_lfa.
PERFORM populate_event_lfa.
PERFORM data_retrieval_lfa .
PERFORM build_listheader_lfa USING it_listheader.
PERFORM display_alv_lfa.
ELSEIF rs_selfield-fieldname = 'KUNNR'.
READ TABLE it_bseg INTO wa_bseg INDEX rs_selfield-tabindex.
PERFORM build_fieldcatlog_kna .
PERFORM event_call_lfa.
PERFORM populate_event_lfa.
PERFORM data_retrieval_kna .
PERFORM build_listheader_lfa USING it_listheader.
PERFORM display_alv_kna.
ELSE.
MESSAGE 'Selected right field' TYPE 'E'.

ENDIF.

ENDCASE.
ENDFORM. "USER_COMMAND
*&---------------------------------------------------------------------*
*& Form build_fieldcatlog_bseg
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM build_fieldcatlog_lfa .
REFRESH it_fieldcat1[].
wa_fieldcat1-tabname = 'IT_LFA'.
wa_fieldcat1-fieldname = 'LIFNR'.
wa_fieldcat1-seltext_m = 'Vendor'(004).
APPEND wa_fieldcat1 TO it_fieldcat1.
CLEAR wa_fieldcat1.

wa_fieldcat1-tabname = 'IT_LFA'.
wa_fieldcat1-fieldname = 'NAME'.
wa_fieldcat1-seltext_m = 'Name'(008).
APPEND wa_fieldcat1 TO it_fieldcat1.
CLEAR wa_fieldcat1.

wa_fieldcat1-tabname = 'IT_LFA1'.
wa_fieldcat1-fieldname = 'ORT01'.
wa_fieldcat1-seltext_m = 'City'(009).
APPEND wa_fieldcat1 TO it_fieldcat1.
CLEAR wa_fieldcat1.

ENDFORM. " build_fieldcatlog_LFA1
*&---------------------------------------------------------------------*
*& Form event_call_bseg
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM event_call_lfa .
CALL FUNCTION 'REUSE_ALV_EVENTS_GET'
EXPORTING
i_list_type = 0
IMPORTING
et_events = it_events
EXCEPTIONS
list_type_wrong = 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. " event_call_bseg
*&---------------------------------------------------------------------*
*& Form populate_event_bseg
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM populate_event_lfa .
READ TABLE it_events INTO wa_events WITH KEY name = 'TOP_OF_PAGE'.
IF sy-subrc EQ 0.
wa_events-form = 'TOP_OF_PAGE'.
MODIFY it_events FROM wa_events TRANSPORTING form WHERE name =
wa_events-form.
ENDIF.

ENDFORM. " populate_event_bseg
*&---------------------------------------------------------------------*
*& Form F_TOP_OF_PAGE
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
FORM f_top_of_page.
CALL FUNCTION 'REUSE_ALV_COMMENTARY_WRITE'
EXPORTING
it_list_commentary = it_listheader
* i_logo =
* I_END_OF_LIST_GRID =
.

ENDFORM. "F_TOP_OF_PAGE
*&---------------------------------------------------------------------*
*& Form data_retrieval_bseg
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM data_retrieval_lfa .

REFRESH it_lfa1[].
IF wa_bseg-lifnr IS NOT INITIAL.
SELECT SINGLE lifnr
name1
name2
ort01
FROM lfa1
INTO wa_lfa1
WHERE lifnr = wa_bseg-lifnr.

APPEND wa_lfa1 TO it_lfa1.

IF sy-subrc <> 0.
MESSAGE 'Select Query is wrong'(013) TYPE 'E'.
ENDIF.

REFRESH it_lfa[].
LOOP AT it_lfa1 INTO wa_lfa1.

MOVE-CORRESPONDING wa_lfa1 TO wa_lfa.

CONCATENATE wa_lfa1-name1 wa_lfa1-name2 INTO wa_lfa-name.

APPEND wa_lfa TO it_lfa.

ENDLOOP.



ELSE.
MESSAGE 'Invalid Record' TYPE 'E'.
ENDIF.

ENDFORM. " data_retrieval_bseg
*&---------------------------------------------------------------------*
*& Form build_listheader_lfa
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->P_IT_LISTHEADER text
*----------------------------------------------------------------------*
FORM build_listheader_lfa USING p_it_listheader.
DATA: hline1 TYPE slis_listheader.
hline1-typ = 'H'.
hline1-info = 'CHECKING PGM'(010).
ENDFORM. " build_listheader_lfa
*&---------------------------------------------------------------------*
*& Form display_alv_lfa
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM display_alv_lfa .
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
EXPORTING
* I_INTERFACE_CHECK = ' '
* I_BYPASSING_BUFFER = ' '
* I_BUFFER_ACTIVE = ' '
i_callback_program = sy-repid
* I_CALLBACK_PF_STATUS_SET = ' '
* I_CALLBACK_USER_COMMAND = 'F_USER_COMMAND'
i_callback_top_of_page = '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_title_lfa
* I_GRID_SETTINGS =
* IS_LAYOUT =
it_fieldcat = it_fieldcat1[]
* IT_EXCLUDING =
* IT_SPECIAL_GROUPS =
* IT_SORT =
* IT_FILTER =
* IS_SEL_HIDE =
* I_DEFAULT =
* i_save = 'A'
* IS_VARIANT =
it_events = it_events
TABLES
t_outtab = it_lfa
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_alv_lf
*&---------------------------------------------------------------------*
*& Form build_fieldcatlog_KNa
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM build_fieldcatlog_kna .
REFRESH it_fieldcat2[].
wa_fieldcat2-tabname = 'IT_KNA'.
wa_fieldcat2-fieldname = 'KUNNR'.
wa_fieldcat2-seltext_m = 'Vendor'(004).
APPEND wa_fieldcat2 TO it_fieldcat2.
CLEAR wa_fieldcat2.

wa_fieldcat2-tabname = 'IT_KNA'.
wa_fieldcat2-fieldname = 'NAME'.
wa_fieldcat2-seltext_m = 'Name'(008).
APPEND wa_fieldcat2 TO it_fieldcat2.
CLEAR wa_fieldcat2.

wa_fieldcat2-tabname = 'IT_KNA'.
wa_fieldcat2-fieldname = 'ORT01'.
wa_fieldcat2-seltext_m = 'City'(009).
APPEND wa_fieldcat2 TO it_fieldcat2.
CLEAR wa_fieldcat2.
ENDFORM. " build_fieldcatlog_KNa
*&---------------------------------------------------------------------*
*& Form data_retrieval_KNa
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM data_retrieval_kna .
REFRESH it_kna1[].
IF wa_bseg-kunnr IS NOT INITIAL.
SELECT SINGLE kunnr
name1
name2
ort01
FROM kna1
INTO wa_kna1
WHERE kunnr = wa_bseg-kunnr.

APPEND wa_kna1 TO it_kna1.

IF sy-subrc <> 0.
MESSAGE 'Select Query is wrong'(013) TYPE 'E'.
ENDIF.

REFRESH it_kna[].
LOOP AT it_kna1 INTO wa_kna1.

MOVE-CORRESPONDING wa_kna1 TO wa_kna.

CONCATENATE wa_kna1-name1 wa_kna1-name2 INTO wa_kna-name.

APPEND wa_kna TO it_kna.

ENDLOOP.



ELSE.
MESSAGE 'Invalid Record' TYPE 'E'.
ENDIF.

ENDFORM. " data_retrieval_KNa
*&---------------------------------------------------------------------*
*& Form display_alv_kna
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM display_alv_kna .
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
EXPORTING
* I_INTERFACE_CHECK = ' '
* I_BYPASSING_BUFFER = ' '
* I_BUFFER_ACTIVE = ' '
i_callback_program = sy-repid
* I_CALLBACK_PF_STATUS_SET = ' '
* I_CALLBACK_USER_COMMAND = 'F_USER_COMMAND'
i_callback_top_of_page = '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_title_kna
* I_GRID_SETTINGS =
* IS_LAYOUT =
it_fieldcat = it_fieldcat2[]
* IT_EXCLUDING =
* IT_SPECIAL_GROUPS =
* IT_SORT =
* IT_FILTER =
* IS_SEL_HIDE =
* I_DEFAULT =
* i_save = 'A'
* IS_VARIANT =
it_events = it_events
TABLES
t_outtab = it_kna
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_alv_kna

No comments:

Post a Comment