You are on page 1of 33

REPORT z_templet NO STANDARD PAGE HEADING LINE-SIZE 1023 ine LINE-COUNT 65(5) page and reserve number of lines

for footer MESSAGE-ID zserp.

"Report name "Without heading "Total number of char in each l "Total number of line for each "Message class

************************************************************************ * PROGRAM INFORMATION ************************************************************************ * PROGRAM....... Z_TEMPLET * TITLE......... A Templet program for some utilites in ALV report * AUTHOR........ Hariprasad * DATE WRITTEN.. 03.05.2007 * R/3 RELEASE... SAP ECC 6.0 * REV TRACK NO.. XXX * TRANSPORT NO.. XXX *----------------------------------------------------------------------* * PROGRAM FUNCTION: * THIS PROGRAM IS USED TO DEMONSTRAT THE ALV-GRID DISPLAY USING CLASSES. * *----------------------------------------------------------------------* * PROGRAM TYPE.. EXECUTABLE * PACKAGE....... XXXXX * LOGICAL DB.... <Logical database used> ************************************************************************ ************************************************************************ * CHANGE HISTORY ************************************************************************ * DATE CHANGE... <Date of change written> * AUTHOR........ <Author name> * CHANGE DESCR.. <Description of change> * R/3 RELEASE... <Release> * TRANSPORTNR... <Transport number> ************************************************************************

************************************************************************ *Data Declaration * ************************************************************************ *--Tables-------------------------------------------------------------TABLES: vbak, tvko, tvak, vbuk, zvbap. *--Structures--------------------------------------------------------TYPES: BEGIN OF x_output, chchk(1) TYPE c, vbeln TYPE char10, cument erdat TYPE erdat, Which Record Was Created erzet TYPE erzet, me ernam TYPE ernam, Person who Created the Object auart TYPE auart,

"Sales Do "Date on "Entry ti "Name of "Sales Do

cument Type vkorg TYPE code END OF x_output,

vkorg,

"company

** BEGIN OF x_output1, ** vbeln TYPE char10, Document ** posnr TYPE posnr_va, Document Item ** matnr TYPE matnr, al Number ** matkl TYPE matkl, al Group ** ** celltab type LVC_T_STYL, ** ** ** END OF x_output1, BEGIN OF x_f4, auart TYPE auart, bezei TYPE bezei20, END OF x_f4. *--Constants---------------------------------------------------------CONSTANTS: c_check TYPE c VALUE 'X', c_struc_name(30) TYPE c VALUE 'ZSTRUCTURE', ALV 'Z' structure name c_container_name TYPE scrfname VALUE 'CUST_CONTAINER', ALV Custom container name c_color(6) TYPE c VALUE 'COLORS', ue that needs to passed to x_layout c_struc_name1(30) TYPE c VALUE 'ZSTRUCTURE1', ALV 'Z' structure name c_container_name1 TYPE scrfname VALUE 'CUST_CONTAINER1'. ALV Custom container name *--Internal table and work area -------------------------------------DATA: BEGIN OF t_output1 vbeln TYPE s Document posnr TYPE s Document Item matnr TYPE rial Number matkl TYPE rial Group occurs 0, "with header line char10, posnr_va, matnr, matkl.

"Sales "Sales "Materi "Materi

" X " 1st " 1st " Val " 2nd " 2nd

"Sale "Sale "Mate "Mate "For

DATA: celltab type LVC_T_STYL. cel selection DATA: END OF t_output1. DATA: t_output TYPE STANDARD TABLE OF x_output, ALV output internal table

"1st

w_output TYPE x_output, ALV output workarea t_f4 TYPE STANDARD TABLE OF x_f4, elp table w_f4 TYPE x_f4, elp workarea t_return TYPE STANDARD TABLE OF ddshretval, eceve the returened data for F4 function t_fieldcat TYPE lvc_t_fcat, d Catalog for List Viewer Control ** t_output1 TYPE STANDARD TABLE OF x_output1, w_output1 like t_output1, t_fieldcat1 TYPE lvc_t_fcat.

"1st "F4 H "F4 H "To r "Fiel

Data: lt_celltab TYPE lvc_t_styl. DATA: ls_celltab TYPE lvc_s_styl, l_mode type raw4.

*--Variables --------------------------------------------------------DATA: g_ok_code TYPE sy-ucomm, g_row_id TYPE i, g_index TYPE sy-tabix. DATA: x_variant TYPE disvariant, yout x_layout TYPE lvc_s_layo, V control: Layout structure x_print TYPE lvc_s_prnt, int settings for LVC x_exclude TYPE ui_func, nction Code x_exclude_tab TYPE ui_functions. exclude the tab elements in alv ***data: r_dyndoc_id TYPE REF TO cl_dd_document. "La "AL "Pr "Fu "To

************************************************************************ *Class Declaration * ************************************************************************ *--DEFINITION OF EVENT HANDLER CLASS----------------------------------CLASS lcl_event_receiver DEFINITION. PUBLIC SECTION. types: t_otp1 type standard table of zvbap. *--Method for handling Event-Top of Page event------------------------METHODS on_handle_top_of_page FOR EVENT top_of_page OF cl_gui_alv_grid IMPORTING e_dyndoc_id. METHODS on_handle_top_of_page1 FOR EVENT top_of_page OF cl_gui_alv_grid IMPORTING e_dyndoc_id.

*--Method for handling Event-Print Top of Page event------------------METHODS on_handle_print_top_of_page FOR EVENT print_top_of_page OF cl_gui_alv_grid. METHODS on_handle_print_top_of_page1 FOR EVENT print_top_of_page OF cl_gui_alv_grid. **--Method for handling Event-Hotspot click----------------------------METHODS on_handle_hotspot_click FOR EVENT hotspot_click OF cl_gui_alv_grid IMPORTING e_row_id e_column_id es_row_no.

**--Method for handling data change -----------------------------------METHODS handle_data_changed FOR EVENT data_changed OF cl_gui_alv_grid IMPORTING er_data_changed. * * * * METHODS handle_data_changed_finished FOR EVENT data_changed_finished of CL_GUI_ALV_GRID IMPORTING e_modified.

**--Method for handling data insertion----------------------------------methods: get_inserted_rows exporting inserted_rows type t_otp1. **--Method for handling data deletion-----------------------------------methods: get_deleted_rows exporting deleted_rows type t_otp1. **--Method for handling table initial value check-----------------------methods: table_is_initial returning value(initial) type char01. **--Method for setting table flag as space -----------------------------methods: set_table_is_initial. **--Method for setting table flag as 'x' -------------------------------methods: set_table_is_not_initial.

private section. **--Define internal tables to remember inserted and deleted lines,------*--thus the delta between input made after the last saving.-------------data: inserted_rows type t_otp1, nserted rows deleted_rows type standard table of zvbap. "I "D

eleted rows data: initial_table type c. **-- This flag is set if any error occured in one of the following methods--DATA: error_in_data TYPE c. **--Method to save the changed data in the delta table--------------------methods: update_delta_tables importing pr_data_changed type ref to cl_alv_changed_data_protocol. **--Methods to modularize event handler method HANDLE_DATA_CHANGED-------methods: check_matkl importing ps_ls_good type lvc_s_modi pr_data_changed type ref to cl_alv_changed_data_protocol. methods: get_cell_values importing row_id type int4 pr_data_changed type ref to cl_alv_changed_data_protocol exporting key type vbeln. ENDCLASS. "lcl_event_receiver DEFINITION

*--IMPLEMENTAION OF EVENT HANDLER CLASS--------------------------------CLASS lcl_event_receiver IMPLEMENTATION. *public section. **--Method for Handling Top of Page event-------------------------------METHOD on_handle_top_of_page. PERFORM event_top_of_page USING e_dyndoc_id. "Event f or top of page ENDMETHOD. "ON_HANDLE_TOP_OF_PAGE METHOD on_handle_top_of_page1. PERFORM event_top_of_page1 USING e_dyndoc_id. or top of page ENDMETHOD. "ON_HANDLE_TOP_OF_PAGE "Event f

**--Method for Handling Top of Page at Print event----------------------METHOD on_handle_print_top_of_page. PERFORM event_print_top_of_page. "Event f or print top of page ENDMETHOD. "ON_HANDLE_PRINT_TOP_OF_PAGE METHOD on_handle_print_top_of_page1.

PERFORM event_print_top_of_page1. "Event f or print top of page ENDMETHOD. "ON_HANDLE_PRINT_TOP_OF_PAGE **--Method for Handling Hotspot Click event-----------------------------METHOD on_handle_hotspot_click. PERFORM handle_hotspot_click USING e_row_id e_column_id es_row_no. ENDMETHOD . "On_handle_hotspot_click **--Method for handling data changed -----------------------------------METHOD handle_data_changed. DATA: ls_good TYPE lvc_s_modi. error_in_data = space. LOOP AT er_data_changed->mt_good_cells INTO ls_good. IF ls_good-fieldname = 'MATKL'. CALL METHOD check_matkl EXPORTING ps_ls_good = ls_good pr_data_changed = er_data_changed. ENDIF. ENDLOOP. **--Remember new or deleted lines for saving---------------------------call method update_delta_tables( er_data_changed ). ENDMETHOD. "handle_data_changed

**--Method to check the MATKL table data ------------------------------METHOD CHECK_MATKL. data: l_MATYP type MATKL, ls_VBAP type VBAP, ls_good type lvc_s_modi. *--Get new cell value to check it.-------------------------------------call method pr_data_changed->get_cell_value exporting i_row_id = ps_ls_good-row_id i_fieldname = ps_ls_good-fieldname importing e_value = l_matyp. *--Existence check: Does the Matirial type exists?--------------------select single * from vbap into ls_vbap where matkl = l_matyp. if sy-subrc ne 0. *--In case of error, create a protocol entry in the application log. *--Possible values for message type ('i_msgty'): *-*-- 'A': Abort (Stop sign) *-- 'E': Error (red LED) *-- 'W': Warning (yellow LED) *-- 'I': Information (green LED) call method pr_data_changed->add_protocol_entry exporting i_msgid = '0K' i_msgno = '000' i_msgty = 'E'

i_msgv1 = 'Matirial type' i_msgv2 = l_matyp i_msgv3 = 'does not exist' i_fieldname = ps_ls_good-fieldname i_row_id = ps_ls_good-row_id. error_in_data = 'X'. exit. "Matirial type does not exit, so we're finished here! endif. ENDMETHOD. **--Method to update the temp table to save data which are deleted-----method update_delta_tables. data: l_ins_row type lvc_s_moce, l_del_row type lvc_s_moce, ls_key type vbeln, ls_output type zvbap, * ls_output like t_output1, ls_outtab like line of t_output1. **--Use protocol attributes MT_DELETED_ROWS and MT_INSERTED_ROWS---------**--to remember which lines where deleted or inserted. Save this information in your internal tables. **--Deleted rows loop at pr_data_changed->mt_deleted_rows into l_del_row. read table t_output1 into ls_outtab index l_del_row-row_id. if sy-subrc ne 0. message i000 with 'Internal error deleting a row'. else. move-corresponding ls_outtab to ls_output. * It should no be possible that the same line is deleted twice, * so we just add the new key line to 'deleted_rows'. append ls_output to deleted_rows. * If this line was inserted just before it is deleted: delete me->inserted_rows where vbeln = ls_outtab-vbeln. endif. endloop. *.......... * inserted rows * At this point ALV has not added new lines * to t_output1, so you can not access their values * by reading t_output1. * Table MT_GOOD_CELLS holds new values that can be * referenced using the ROW_ID. *.......... if me->table_is_initial( ) eq 'X'. * No data were selected initially. This is the first new line. call method get_cell_values exporting row_id = 1 pr_data_changed = pr_data_changed importing key = ls_key.

append ls_key to inserted_rows. call method me->set_table_is_not_initial. endif. loop at pr_data_changed->mt_inserted_rows into l_ins_row. call method get_cell_values exporting row_id = l_ins_row-row_id pr_data_changed = pr_data_changed importing key = ls_key. READ TABLE gt_outtab INTO ls_outtab INDEX l_ins_row-row_id.

* Just insert the new row regardless if the input is wrong append ls_key to inserted_rows. endloop. endmethod.

*--------------------------------------------------------method get_cell_values. * get values of key cells of row ROW_ID * VBELN call method pr_data_changed->get_cell_value exporting i_row_id = row_id i_fieldname = 'VBELN' importing e_value = key. if sy-subrc ne 0. message I000 with 'Internal error inserting a row'. endif. endmethod. *-----------------------------------------------------method set_table_is_not_initial. initial_table = space. endmethod. *-----------------------------------------------------method set_table_is_initial. initial_table = 'X'. endmethod. *-----------------------------------------------------method get_inserted_rows. inserted_rows = me->inserted_rows. endmethod. *------------------------------------------------------

*-----------------------------------------------------method get_deleted_rows. deleted_rows = me->deleted_rows.

endmethod. *-----------------------------------------------------*-----------------------------------------------------method table_is_initial. if initial_table = 'X'. initial = 'X'. else. initial = space. endif. endmethod.

ENDCLASS.

"lcl_event_receiver IMPLEMENTATION

*--Object declarations-------------DATA: r_sd_event_receiver TYPE REF TO lcl_event_receiver, of Event handler Class r_sd_grid TYPE REF TO cl_gui_alv_grid, Viewer r_sd_html TYPE REF TO cl_dd_document, ocuments: Document r_sd_custom_contnr TYPE REF TO cl_gui_custom_container, for Custom Controls in the Screen Area r_sd_split TYPE REF TO cl_gui_easy_splitter_container, ersion of Splitter Container Control r_sd_contnr_top TYPE REF TO cl_gui_container, Container for GUI Controls r_sd_contnr_bot TYPE REF TO cl_gui_container, Container for GUI Controls r_html_cntrl TYPE REF TO cl_gui_html_viewer. ainer DATA: r_sd_event_receiver1 TYPE REF TO lcl_event_receiver, of Event handler Class r_sd_grid1 TYPE REF TO cl_gui_alv_grid, Viewer r_sd_html1 TYPE REF TO cl_dd_document, Documents: Document r_sd_custom_contnr1 TYPE REF TO cl_gui_custom_container, r for Custom Controls in the Screen Area r_sd_split1 TYPE REF TO cl_gui_easy_splitter_container, Version of Splitter Container Control r_sd_contnr_top1 TYPE REF TO cl_gui_container, Container for GUI Controls r_sd_contnr_bot1 TYPE REF TO cl_gui_container, Container for GUI Controls r_html_cntrl1 TYPE REF TO cl_gui_html_viewer. tainer "Instance "ALV List "Dynamic D "Container "Reduced V "Abstract "Abstract "HTML cont

"Instance "ALV List "Dynamic "Containe "Reduced "Abstract "Abstract "HTML con

************************************************************************ *Selection screen * ************************************************************************ SELECTION-SCREEN BEGIN OF BLOCK b1 WITH FRAME. SELECT-OPTIONS: s_vbeln FOR vbak-vbeln OBLIGATORY, ent s_vkorg FOR vbak-vkorg OBLIGATORY. e PARAMETERS: p_auart TYPE char4. ent type SELECTION-SCREEN END OF BLOCK b1. ************************************************************************ *To validate the selection screen * ************************************************************************ AT SELECTION-SCREEN. PERFORM validate_vbeln. "To validate sales document PERFORM validate_vkorg. "To Validate Sales Organizatio n PERFORM validate_auart. "To Validate Sales Document Ty pe *--Handling F4 help explicity for auart-------------------------------AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_auart. SELECT auart bezei FROM tvakt INTO TABLE t_f4 WHERE spras EQ 'E'. REFRESH t_return[]. CALL FUNCTION 'F4IF_INT_TABLE_VALUE_REQUEST' EXPORTING DDIC_STRUCTURE = ' ' retfield = 'auart' PVALKEY = ' ' dynpprog = sy-repid dynpnr = '1000' dynprofield = 'p_auart' STEPL = 0 WINDOW_TITLE = VALUE = ' ' value_org = 'S' multiple_choice = ' ' DISPLAY = ' ' CALLBACK_PROGRAM = ' ' CALLBACK_FORM = ' ' MARK_TAB = IMPORTING USER_RESET = TABLES value_tab = t_f4 FIELD_TAB = return_tab = t_return DYNPFLD_MAPPING = EXCEPTIONS parameter_error = 1 "Sales Docum "Company cod

"Sales docum

* *

* * * * * * * * * * *

no_values_found = 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.

************************************************************************ *Start of Selection * ************************************************************************ START-OF-SELECTION. PERFORM get_data. "To retrieve data IF NOT t_output[] IS INITIAL. PERFORM display_data_grid. "To display data in grid ELSE. MESSAGE s000 WITH 'No Data found for given selection Criteria' . ENDIF.

*------ FORMS------------------------------------------------------------*&---------------------------------------------------------------------* *& Form VALIDATE_VKORG *&---------------------------------------------------------------------* * To validate company code *----------------------------------------------------------------------* FORM validate_vkorg . CLEAR tvko. IF NOT s_vkorg[] IS INITIAL. SELECT SINGLE vkorg FROM tvko INTO tvko-vkorg WHERE vkorg IN s_vkorg. IF sy-subrc <> 0. MESSAGE e000 WITH 'Please enter a valid sales organisation'. ENDIF. ENDIF. ENDFORM. " VALIDATE_VKORG *&---------------------------------------------------------------------* *& Form VALIDATE_AUART *&---------------------------------------------------------------------* * To validate document type *----------------------------------------------------------------------* FORM validate_auart . CLEAR tvak. IF NOT p_auart IS INITIAL. SELECT SINGLE auart FROM tvak INTO tvak-auart WHERE auart EQ p_auart. IF sy-subrc <> 0. MESSAGE e000 WITH 'Please enter a valid sales order type'. ENDIF. ENDIF. ENDFORM. " VALIDATE_AUART *&---------------------------------------------------------------------*

*& Form validate_vbeln *&---------------------------------------------------------------------* * To validate sales document *----------------------------------------------------------------------* FORM validate_vbeln . CLEAR vbuk. IF NOT s_vbeln[] IS INITIAL. SELECT SINGLE vbeln FROM vbuk INTO vbuk-vbeln WHERE vbeln IN s_vbeln. IF sy-subrc <> 0. MESSAGE e000 WITH 'Please enter a valid sales document'. ENDIF. ENDIF. ENDFORM. " validate_vbeln

*&---------------------------------------------------------------------* *& Form GET_DATA *&---------------------------------------------------------------------* * To get the data as per the requirement *----------------------------------------------------------------------* FORM get_data . CLEAR w_output. REFRESH t_output[]. IF NOT p_auart IS INITIAL. SELECT vbeln erdat erzet ernam auart vkorg FROM vbak INTO CORRESPONDING FIEL DS OF TABLE t_output WHERE vbeln IN s_vbeln AND vkorg IN s_vkorg. ELSE. SELECT vbeln erdat erzet ernam auart vkorg FROM vbak INTO CORRESPONDING FIEL DS OF TABLE t_output WHERE vbeln IN s_vbeln AND vkorg IN s_vkorg. * auart EQ p_auart. ENDIF.

ENDFORM.

" GET_DATA

*&---------------------------------------------------------------------* *& Form DISPLAY_DATA_GRID *&---------------------------------------------------------------------* * To display data in ALV grid *----------------------------------------------------------------------* FORM display_data_grid . *--Check the custom container object is created or not.---------------IF r_sd_custom_contnr IS INITIAL.

*--Check the report running is online (foreground) or offline (background). IF cl_gui_alv_grid=>offline( ) IS INITIAL. *--go for online process, need of GUI custom container for display in online. *-- Create custom container object for the created container name-------CREATE OBJECT r_sd_custom_contnr EXPORTING container_name = c_container_name EXCEPTIONS cntl_error = 1 cntl_system_error = 2 create_error = 3 lifetime_error = 4 lifetime_dynpro_dynpro_link = 5 OTHERS = 6. IF sy-subrc <> 0. MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4. ENDIF. *-- Create the splitter control---------------------------------------------CREATE OBJECT r_sd_split EXPORTING parent = r_sd_custom_contnr "pass the created the custom conatainer object here * orientation = 0 sash_position = 20 "by changing the number we c an change the hight of top (header) with_border = 0 * name = EXCEPTIONS cntl_error = 1 cntl_system_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. *-- Get the containers of the splitter control--------------------------------r_sd_contnr_top = r_sd_split->top_left_container. r_sd_contnr_bot = r_sd_split->bottom_right_container. ENDIF. *-- Next processes for both conserned to online and offline. *-- Create the grid object by passing the splited container object. CREATE OBJECT r_sd_grid EXPORTING i_parent = EXCEPTIONS error_cntl_create = error_cntl_init = error_cntl_link = error_dp_create = OTHERS =

r_sd_contnr_bot 1 2 3 4 5.

IF sy-subrc <> 0. MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4. ENDIF. *-- Create event receiver object--------------------------------------------CREATE OBJECT r_sd_event_receiver. *-- Handle events ----------------------------------------------------------SET HANDLER r_sd_event_receiver->on_handle_top_of_page FOR r_sd_grid. SET HANDLER r_sd_event_receiver->on_handle_print_top_of_page FOR r_sd_grid. SET HANDLER r_sd_event_receiver->on_handle_hotspot_click FOR r_sd_grid. *-- Object for display of selection parameters in HTML top container--------CREATE OBJECT r_sd_html EXPORTING style = 'ALV_GRID'. background_color = bds_stylesheet = no_margins = .

* * *

*-- Check if the process is online (foreground) then go for list processing even ts ---IF cl_gui_alv_grid=>offline( ) IS INITIAL. *-- TOP_OF_PAGE list processing method for foreground process only-------------------CALL METHOD r_sd_grid->list_processing_events EXPORTING i_event_name = 'TOP_OF_PAGE' i_dyndoc_id = r_sd_html. * is_subtottxt_info = * ip_subtot_line = * i_table_index = * CHANGING * c_subtottxt = . ENDIF.

*-- Retrieve Field specifications and descriptions for ALV Grid------------CALL FUNCTION 'LVC_FIELDCATALOG_MERGE' EXPORTING i_buffer_active = space i_structure_name = c_struc_name CHANGING ct_fieldcat = t_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 get_fieldcat_desc. x_layout-smalltitle x_layout-zebra x_layout-no_author x_print-prnt_title x_layout-info_fname x_layout-no_f4 x_variant-report x_variant-username ENDIF. * * * * * * * * * * * * * * * * * * X_EXCLUDE = CL_GUI_ALV_GRID=>MC_FC_MAXIMUM . APPEND X_EXCLUDE TO X_EXCLUDE_TAB. X_EXCLUDE = CL_GUI_ALV_GRID=>MC_FC_MINIMUM . APPEND X_EXCLUDE TO X_EXCLUDE_TAB. X_EXCLUDE = CL_GUI_ALV_GRID=>MC_FC_SUBTOT . APPEND X_EXCLUDE TO X_EXCLUDE_TAB. X_EXCLUDE = CL_GUI_ALV_GRID=>MC_FC_AVERAGE . APPEND X_EXCLUDE TO X_EXCLUDE_TAB. X_EXCLUDE = CL_GUI_ALV_GRID=>MC_MB_SUM . APPEND X_EXCLUDE TO X_EXCLUDE_TAB. X_EXCLUDE = CL_GUI_ALV_GRID=>MC_MB_SUBTOT . APPEND X_EXCLUDE TO X_EXCLUDE_TAB. X_EXCLUDE = CL_GUI_ALV_GRID=>MC_FC_FIND_MORE . APPEND X_EXCLUDE TO X_EXCLUDE_TAB. X_EXCLUDE = CL_GUI_ALV_GRID=>MC_FC_GRAPH . APPEND X_EXCLUDE TO X_EXCLUDE_TAB. X_EXCLUDE = CL_GUI_ALV_GRID=>MC_FC_INFO. APPEND X_EXCLUDE TO X_EXCLUDE_TAB. = = = = = = = = c_check. c_check. c_check. c_check. c_color. c_check. sy-repid. sy-uname. "Default Grid title to small font "Output rows with alternating colors "Allow users to enter global layouts "Do not print out grid title "Color of a particular Record "Character Field Length 1 "Program name "User name

CALL METHOD r_sd_grid->set_table_for_first_display EXPORTING is_layout = x_layout "Layout is_variant = x_variant "Layout i_save = 'A' "Variable used to Save Layout is_print = x_print "Print settings for L VC * IT_TOOLBAR_EXCLUDING = X_EXCLUDE_TAB CHANGING it_fieldcatalog = t_fieldcat "Fieldcatalog it_outtab = t_output "Vendor master internal table EXCEPTIONS invalid_parameter_combination = 1 program_error = 2 too_many_lines = 3 OTHERS = 4. IF sy-subrc <> 0. MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4. ENDIF. *----------------------------------------------------------------------* *Calls screen with container * *----------------------------------------------------------------------* CALL SCREEN 0100.

ENDFORM.

" DISPLAY_DATA_GRID

*&---------------------------------------------------------------------* *& Form GET_FIELDCAT_DESC *&---------------------------------------------------------------------* * To describe the field catalog table *----------------------------------------------------------------------* FORM get_fieldcat_desc . FIELD-SYMBOLS: <fs_l_fieldcat> TYPE lvc_s_fcat. LOOP AT t_fieldcat ASSIGNING <fs_l_fieldcat>. CASE <fs_l_fieldcat>-fieldname. WHEN 'CHCHK'. <fs_l_fieldcat>-scrtext_l = 'Selection'. "Sales Order Number <fs_l_fieldcat>-scrtext_m = 'Selec'. <fs_l_fieldcat>-scrtext_s = 'Sel'. <fs_l_fieldcat>-reptext = 'Selection Check box'. <fs_l_fieldcat>-outputlen = 10. <fs_l_fieldcat>-just = 'L'. <fs_l_fieldcat>-emphasize = 'C200'. <fs_l_fieldcat>-checkbox = 'X'. <fs_l_fieldcat>-edit = 'X'. WHEN 'VBELN'. <fs_l_fieldcat>-hotspot = 'X'. <fs_l_fieldcat>-scrtext_l = 'Sales Order Number'. "Sales Order Number <fs_l_fieldcat>-scrtext_m = 'Sales Ord No'. <fs_l_fieldcat>-scrtext_s = 'Sal Ord No'. <fs_l_fieldcat>-reptext = 'Sales Order Number'. <fs_l_fieldcat>-outputlen = 18. <fs_l_fieldcat>-just = 'L'. <fs_l_fieldcat>-emphasize = 'C200'. WHEN 'ERDAT'. <fs_l_fieldcat>-scrtext_l = "Date on Which Record <fs_l_fieldcat>-scrtext_m = <fs_l_fieldcat>-scrtext_s = <fs_l_fieldcat>-reptext = <fs_l_fieldcat>-outputlen = <fs_l_fieldcat>-just = <fs_l_fieldcat>-emphasize = WHEN 'ERZET'. <fs_l_fieldcat>-scrtext_l = "time on Which Record <fs_l_fieldcat>-scrtext_m = <fs_l_fieldcat>-scrtext_s = <fs_l_fieldcat>-reptext = <fs_l_fieldcat>-outputlen = <fs_l_fieldcat>-just = <fs_l_fieldcat>-emphasize = 'Date of Creation'. Was Created 'Date'. 'Date'. 'Date on Which Record Was Created'. 18. 'L'. 'C200'. 'Time of Creation'. Was Created 'Time'. 'Time'. 'Time on Which Record Was Created'. 18. 'L'. 'C200'.

WHEN 'ERNAM'. <fs_l_fieldcat>-scrtext_l = 'Name of Person'. "Name of Person who Created the Object <fs_l_fieldcat>-scrtext_m = 'Name'. <fs_l_fieldcat>-scrtext_s = 'Name'. <fs_l_fieldcat>-reptext = 'Name of Person who Created the Object'. <fs_l_fieldcat>-outputlen = 14. <fs_l_fieldcat>-just = 'L'. <fs_l_fieldcat>-emphasize = 'C200'. WHEN 'VKORG'. <fs_l_fieldcat>-scrtext_l = "Sales Organisation <fs_l_fieldcat>-scrtext_m = <fs_l_fieldcat>-scrtext_s = <fs_l_fieldcat>-reptext = <fs_l_fieldcat>-outputlen = <fs_l_fieldcat>-just = <fs_l_fieldcat>-emphasize =

'Sales Organisation'. 'Sales Org'. 'Sal Org'. 'Sales Organisation'. 10. 'L'. 'C200'.

WHEN 'AUART'. <fs_l_fieldcat>-scrtext_l = 'Sales Document Type'. "Sales Document Type <fs_l_fieldcat>-scrtext_m = 'Sales Doc Type'. <fs_l_fieldcat>-scrtext_s = 'Sal Doc Typ'. <fs_l_fieldcat>-reptext = 'Sales Document Type'. <fs_l_fieldcat>-outputlen = 12. <fs_l_fieldcat>-just = 'L'. <fs_l_fieldcat>-emphasize = 'C200'. ENDCASE. ENDLOOP. ENDFORM. " GET_FIELDCAT_DESC

*&---------------------------------------------------------------------* *& Module STATUS_0100 OUTPUT *&---------------------------------------------------------------------* * PBO *----------------------------------------------------------------------* MODULE status_0100 OUTPUT. SET PF-STATUS 'Z_TEST' IMMEDIATELY. SET TITLEBAR 'ALV_TEMPLET'. ENDMODULE. " STATUS_0100 OUTPUT

*&---------------------------------------------------------------------* *& Module USER_COMMAND_0100 INPUT *&---------------------------------------------------------------------* * PAI *----------------------------------------------------------------------* MODULE user_command_0100 INPUT. CASE g_ok_code. WHEN 'BACK'. SET SCREEN 0. LEAVE SCREEN.

WHEN 'END'. SET SCREEN 0. LEAVE SCREEN. WHEN 'CANCEL'. SET SCREEN 0. LEAVE SCREEN. ENDCASE. CLEAR g_ok_code. ENDMODULE. " USER_COMMAND_0100 INPUT

*&---------------------------------------------------------------------* *& Form event_top_of_page *&---------------------------------------------------------------------* * To display the TOP_OF_PAGE text in HTML format *----------------------------------------------------------------------* FORM event_top_of_page USING dg_dyndoc_id TYPE REF TO cl_dd_document. * Data: title type ZCL_SD_DYNDOC->HTML_TABLE. DATA : sdydo_html_line TYPE sdydo_html_line. DATA : l_l TYPE string, l_text TYPE string. CONCATENATE '<HTML><BODY><table border="0" width="100%" cellpadding="1"><TR><T D colspan = 2 ALIGN = "LEFT">'"#EC NOTEXT '<B>' 'ALV TEMPLET EXAMPLE PROGRAM' '</B> </TD></TR>' INTO sdydo_html_line. DESCRIBE TABLE dg_dyndoc_id->html_table LINES l_l. l_l = l_l + 1. INSERT sdydo_html_line INTO dg_dyndoc_id->html_table INDEX l_l. CONCATENATE 'Generated on : ' sy-datum+6(2) '.' sy-datum+4(2) '.' sy-datum+0( 4) INTO l_text."#EC NOTEXT CONCATENATE '<table border="0" width="100%" cellpadding="1"><TR><TD colspan = 2 ALIGN = "LEFT">' l_text '</TD>' INTO sdydo_html_line. CONCATENATE sdydo_html_line '<TD colspan = 2 ALIGN = "CENTER"> Generated by : ' sy-uname '</TR>' INTO sdydo_html_line. CONCATENATE sdydo_html_line '<TD colspan = 2 ALIGN = "RIGHT"> TIME : ' sy-uz eit+0(2) ':' sy-uzeit+2(2) ':' sy-uzeit+4(2) '</TR>' INTO sdydo_html_line. DESCRIBE TABLE dg_dyndoc_id->html_table LINES l_l. l_l = l_l + 1. INSERT sdydo_html_line INTO dg_dyndoc_id->html_table INDEX l_l. CLEAR l_text. IF s_vkorg-high <> space. CONCATENATE 'Sales Organization :' s_vkorg-low '-' s_vkorg-high INTO l_tex t."#EC NOTEXT ELSE. CONCATENATE 'Sales Organization :' s_vkorg-low INTO l_text."#EC NOTEXT ENDIF. CONCATENATE '<table border="0" width="100%" cellpadding="1"><TR><TD colspan =

2 ALIGN = "LEFT">' l_text '</TD></TR>' INTO sdydo_html_line. DESCRIBE TABLE dg_dyndoc_id->html_table LINES l_l. l_l = l_l + 1. INSERT sdydo_html_line INTO dg_dyndoc_id->html_table INDEX l_l. IF s_vbeln-high <> space. CONCATENATE 'Sales Document Number :' s_vbeln-low '-' s_vbeln-high INTO l_text."#EC NOTEXT ELSE. CONCATENATE 'Sales Document Number :' s_vbeln-low INTO l_text."#EC NOTE XT ENDIF. CONCATENATE '<table border="0" width="100%" cellpadding="1"><TR><TD colspan = 2 ALIGN = "LEFT">' l_text '</TD></TR></BODY></HTML>' INTO sdydo_html_line. DESCRIBE TABLE dg_dyndoc_id->html_table LINES l_l. l_l = l_l + 1. INSERT sdydo_html_line INTO dg_dyndoc_id->html_table INDEX l_l.

*** Another type of putting TOP-OF-PAGE. ***DATA : l_text(255) TYPE c. "Text *** *** CLEAR: l_text. *** *** **** program ID *** l_text = 'ALV TEMPLET EXAMPLE PROGRAM'. "#EC NOTEXT *** *** CALL METHOD dg_dyndoc_id->add_text *** EXPORTING *** text = l_text *** sap_style = cl_dd_area=>standard *** sap_color = cl_dd_area=>list_heading_int *** SAP_FONTSIZE = cl_dd_area=>HEADING. *** *** *** CLEAR : l_text. *** **** Add new-line *** CALL METHOD dg_dyndoc_id->new_line. *** *** CLEAR : l_text. *** *** *** CONCATENATE 'Generated on : ' sy-datum+6(2) '.' sy-datum+4(2) '.' sy-datum +0(4) INTO l_text. "#EC NOTEXT *** *** *** CALL METHOD dg_dyndoc_id->add_text *** EXPORTING *** text = l_text *** sap_style = cl_dd_area=>standard

*** sap_color = cl_dd_area=>list_heading_int. *** **** Add new-line *** CALL METHOD dg_dyndoc_id->new_line. *** *** CLEAR : l_text. *** *** **** Add new-line *** CALL METHOD dg_dyndoc_id->new_line. *** CLEAR l_text. *** if S_VKORG-high <> space. *** CONCATENATE 'Sales Organization :' S_VKORG-LOW '-' S_VKORG-HIGH INTO l_t ext. "#EC NOTEXT *** else. *** CONCATENATE 'Sales Organization :' S_VKORG-low INTO l_text. "#EC NOTEXT *** endif. *** CALL METHOD dg_dyndoc_id->add_text *** EXPORTING *** text = l_text *** sap_style = cl_dd_area=>standard *** sap_color = cl_dd_area=>list_heading_int. *** *** IF S_VBELN-HIGH <> SPACE. *** CONCATENATE 'Sales Document Number :' S_VBELN-LOW '-' S_VBELN-HIGH INTO l_text. "#EC NOTEXT *** ELSE. *** CONCATENATE 'Sales Document Number :' S_VBELN-LOW INTO l_text. "#EC NOTEXT *** ENDIF. *** *** CALL METHOD dg_dyndoc_id->add_gap *** EXPORTING *** width = 20. *** *** CALL METHOD dg_dyndoc_id->add_text *** EXPORTING *** text = l_text *** sap_style = cl_dd_area=>standard *** sap_color = cl_dd_area=>list_heading_int. *** **** Add new-line *** CALL METHOD dg_dyndoc_id->new_line. PERFORM disp_top_of_page. ENDFORM. " EVENT_TOP_OF_PAGE *&---------------------------------------------------------------------* *& Form disp_top_of_page *&---------------------------------------------------------------------* *To display the top of page in alv *----------------------------------------------------------------------* FORM disp_top_of_page . * Creating html control IF r_html_cntrl IS INITIAL. CREATE OBJECT r_html_cntrl EXPORTING parent = r_sd_contnr_top. ENDIF. "r_html_cntrl CALL METHOD r_sd_html->merge_document.

r_sd_html->html_control = r_html_cntrl. * Display document CALL METHOD r_sd_html->display_document EXPORTING reuse_control = 'X' parent = r_sd_contnr_top EXCEPTIONS html_display_error = 1. IF sy-subrc NE 0. MESSAGE i000 WITH 'Error ' 'in ' 'displaying ' 'top-of-page'."#EC NOTEXT ENDIF. "sy-subrc ENDFORM. " disp_top_of_page

*&---------------------------------------------------------------------* *& Form event_print_top_of_page *&---------------------------------------------------------------------* * To print top of page in list output *----------------------------------------------------------------------* FORM event_print_top_of_page . DATA : l_text(255) TYPE c. "Text CLEAR: l_text. IF s_vkorg-high <> space. CONCATENATE 'Sales Organization :' s_vkorg-low '-' s_vkorg-high INTO l_tex t."#EC NOTEXT ELSE. CONCATENATE 'Sales Organization :' s_vkorg-low INTO l_text."#EC NOTEXT ENDIF. WRITE:/ l_text. IF s_vbeln-high <> space. CONCATENATE 'Sales Document Number :' s_vbeln-low '-' s_vbeln-high INTO l_text."#EC NOTEXT ELSE. CONCATENATE 'Sales Document Number :' s_vbeln-low INTO l_text."#EC NOTE XT ENDIF. WRITE:/ l_text. ENDFORM. " event_print_top_of_page

*&---------------------------------------------------------------------* *& Form HANDLE_HOTSPOT_CLICK *&---------------------------------------------------------------------* * Handling Hotspot event *----------------------------------------------------------------------* FORM handle_hotspot_click USING p_e_row_id TYPE lvc_s_row p_e_col_id TYPE lvc_s_col p_es_row_no TYPE lvc_s_roid. CLEAR w_output.

g_row_id = p_es_row_no-row_id. READ TABLE t_output INDEX p_es_row_no-row_id INTO w_output. IF sy-subrc = 0 AND p_e_col_id-fieldname = 'VBELN'. PERFORM get_data2. IF NOT t_output1[] IS INITIAL. CALL SCREEN 200. ELSE. MESSAGE s000 WITH 'No Data found for the selection'. ENDIF. ELSE. MESSAGE s000 WITH 'No Data found for the selection'. ENDIF. ENDFORM. " HANDLE_HOTSPOT_CLICK

*&---------------------------------------------------------------------* *& Module STATUS_0200 OUTPUT *&---------------------------------------------------------------------* * text *----------------------------------------------------------------------* MODULE status_0200 OUTPUT. SET PF-STATUS 'ZSCREEN_200'. SET TITLEBAR 'ZTEMP2'. *--Check the custom container object is created or not.---------------IF r_sd_custom_contnr1 IS INITIAL. *--Check the report running is online (foreground) or offline (background). IF cl_gui_alv_grid=>offline( ) IS INITIAL. *--go for online process, need of GUI custom container for display in online. *-- Create custom container object for the created container name-------CREATE OBJECT r_sd_custom_contnr1 EXPORTING container_name = c_container_name1 EXCEPTIONS cntl_error = 1 cntl_system_error = 2 create_error = 3 lifetime_error = 4 lifetime_dynpro_dynpro_link = 5 OTHERS = 6. IF sy-subrc <> 0. MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4. ENDIF. *-- Create the splitter control---------------------------------------------CREATE OBJECT r_sd_split1 EXPORTING parent = r_sd_custom_contnr1 "pass the created the custo m conatainer object here * orientation = 0 sash_position = 20 "by changing the number we c an change the hight of top (header) with_border = 0 * name = EXCEPTIONS cntl_error = 1 cntl_system_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. *-- Get the containers of the splitter control--------------------------------r_sd_contnr_top1 = r_sd_split1->top_left_container. r_sd_contnr_bot1 = r_sd_split1->bottom_right_container. ENDIF. *-- Next processes for both conserned to online and offline. *-- Create the grid object by passing the splited container object. CREATE OBJECT r_sd_grid1 EXPORTING i_parent = r_sd_contnr_bot1 EXCEPTIONS error_cntl_create = 1 error_cntl_init = 2 error_cntl_link = 3 error_dp_create = 4 OTHERS = 5. IF sy-subrc <> 0. MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4. ENDIF. *-- Create event receiver object--------------------------------------------CREATE OBJECT r_sd_event_receiver1. *-- Handle events ----------------------------------------------------------SET HANDLER r_sd_event_receiver1->on_handle_top_of_page1 FOR r_sd_grid1. SET HANDLER r_sd_event_receiver1->on_handle_print_top_of_page1 FOR r_sd_grid 1. set handler r_sd_event_receiver1->handle_data_changed for r_sd_grid1. *-- Object for display of selection parameters in HTML top container--------CREATE OBJECT r_sd_html1 EXPORTING style = 'ALV_GRID'. background_color = bds_stylesheet = no_margins = .

* * *

*-- Check if the process is online (foreground) then go for list processing even ts ---IF cl_gui_alv_grid=>offline( ) IS INITIAL. *-- TOP_OF_PAGE list processing method for foreground process only-------------------CALL METHOD r_sd_grid1->list_processing_events EXPORTING i_event_name = 'TOP_OF_PAGE' i_dyndoc_id = r_sd_html1.

* * * * * ENDIF.

is_subtottxt_info ip_subtot_line i_table_index CHANGING c_subtottxt

= = = = .

*-- Retrieve Field specifications and descriptions for ALV Grid------------CALL FUNCTION 'LVC_FIELDCATALOG_MERGE' EXPORTING i_buffer_active = space i_structure_name = c_struc_name1 CHANGING ct_fieldcat = t_fieldcat1 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 get_fieldcat_desc1. CLEAR x_layout. x_layout-stylefname = 'CELLTAB'. x_layout-smalltitle = c_check. "Default Grid title to small font x_layout-zebra = c_check. "Output rows with alternating colors x_layout-no_author = c_check. "Allow users to enter global layouts x_print-prnt_title = c_check. "Do not print out grid title x_layout-info_fname = c_color. "Color of a particular Record x_layout-no_f4 = c_check. "Character Field Length 1 x_variant-report = sy-repid. "Program name x_variant-username = sy-uname. "User name ENDIF.

loop at t_output1. g_index = sy-tabix. clear l_mode. refresh lt_celltab. refresh t_output1-celltab[]. ls_celltab-fieldname = 'MATKL'. ls_celltab-style = cl_gui_alv_grid=>mc_style_enabled. INSERT ls_celltab INTO TABLE lt_celltab. * Copy your celltab to the celltab of the current row of gt_outtab. INSERT LINES OF lt_celltab INTO table t_output1-celltab. MODIFY t_output1 INDEX g_index. endloop.

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

X_EXCLUDE = CL_GUI_ALV_GRID=>MC_FC_MAXIMUM . APPEND X_EXCLUDE TO X_EXCLUDE_TAB. X_EXCLUDE = CL_GUI_ALV_GRID=>MC_FC_MINIMUM . APPEND X_EXCLUDE TO X_EXCLUDE_TAB. X_EXCLUDE = CL_GUI_ALV_GRID=>MC_FC_SUBTOT . APPEND X_EXCLUDE TO X_EXCLUDE_TAB. X_EXCLUDE = CL_GUI_ALV_GRID=>MC_FC_AVERAGE . APPEND X_EXCLUDE TO X_EXCLUDE_TAB. X_EXCLUDE = CL_GUI_ALV_GRID=>MC_MB_SUM . APPEND X_EXCLUDE TO X_EXCLUDE_TAB. X_EXCLUDE = CL_GUI_ALV_GRID=>MC_MB_SUBTOT . APPEND X_EXCLUDE TO X_EXCLUDE_TAB. X_EXCLUDE = CL_GUI_ALV_GRID=>MC_FC_FIND_MORE . APPEND X_EXCLUDE TO X_EXCLUDE_TAB. X_EXCLUDE = CL_GUI_ALV_GRID=>MC_FC_GRAPH . APPEND X_EXCLUDE TO X_EXCLUDE_TAB. X_EXCLUDE = CL_GUI_ALV_GRID=>MC_FC_INFO. APPEND X_EXCLUDE TO X_EXCLUDE_TAB.

CALL METHOD r_sd_grid1->set_table_for_first_display EXPORTING is_layout = x_layout "Layout is_variant = x_variant "Layout i_save = 'A' "Variable used to Save Layout is_print = x_print "Print settings for L VC * IT_TOOLBAR_EXCLUDING = X_EXCLUDE_TAB CHANGING it_fieldcatalog = t_fieldcat1 "Fieldcatalog it_outtab = t_output1[] "Vendor master internal tab le EXCEPTIONS invalid_parameter_combination = 1 program_error = 2 too_many_lines = 3 OTHERS = 4. IF sy-subrc <> 0. MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4. ENDIF.

*Optionally register ENTER to raise event DATA_CHANGED. * (Per default the user may check data by using the check icon). * call method r_sd_grid1->register_edit_event * exporting * i_event_id = cl_gui_alv_grid=>mc_evt_enter. *OR * for cell change or modified data in the cell. call method r_sd_grid1->register_edit_event exporting i_event_id = cl_gui_alv_grid=>MC_EVT_MODIFIED.

** set handler r_sd_event_receiver1->handle_data_changed for r_sd_grid1.

ENDMODULE.

" STATUS_0200 OUTPUT

*&---------------------------------------------------------------------* *& Module USER_COMMAND_0200 INPUT *&---------------------------------------------------------------------* * text *----------------------------------------------------------------------* MODULE user_command_0200 INPUT. CASE g_ok_code. WHEN 'SAVE'. PERFORM save_data. WHEN 'SWITCH'. PERFORM switch_edit_mode. WHEN 'BACK'. SET SCREEN 0. LEAVE SCREEN. WHEN 'END'. SET SCREEN 0. LEAVE SCREEN. WHEN 'CANCEL'. SET SCREEN 0. LEAVE SCREEN. ENDCASE. CLEAR g_ok_code. ENDMODULE. " USER_COMMAND_0200 INPUT

*&---------------------------------------------------------------------* *& Form GET_FIELDCAT_DESC1 *&---------------------------------------------------------------------* *----------------------------------------------------------------------* FORM get_fieldcat_desc1 . FIELD-SYMBOLS: <fs_l_fieldcat> TYPE lvc_s_fcat. LOOP AT t_fieldcat1 ASSIGNING <fs_l_fieldcat>. CASE <fs_l_fieldcat>-fieldname. WHEN 'CHCHK'. <fs_l_fieldcat>-scrtext_l = 'Selection'. "Sales Order Number <fs_l_fieldcat>-scrtext_m = 'Selec'. <fs_l_fieldcat>-scrtext_s = 'Sel'. <fs_l_fieldcat>-reptext = 'Selection Check box'. <fs_l_fieldcat>-outputlen = 10. <fs_l_fieldcat>-just = 'L'. <fs_l_fieldcat>-emphasize = 'C200'. <fs_l_fieldcat>-checkbox = 'X'. <fs_l_fieldcat>-edit = 'X'. <fs_l_fieldcat>-no_out = 'X'.

WHEN 'VBELN'. <FS_L_FIELDCAT>-HOTSPOT = 'X'. <fs_l_fieldcat>-scrtext_l = 'Sales Order Number'. "Sales Order Number <fs_l_fieldcat>-scrtext_m = 'Sales Ord No'. <fs_l_fieldcat>-scrtext_s = 'Sal Ord No'. <fs_l_fieldcat>-reptext = 'Sales Order Number'. <fs_l_fieldcat>-outputlen = 18. <fs_l_fieldcat>-just = 'L'. <fs_l_fieldcat>-emphasize = 'C200'. WHEN 'POSNR'. <fs_l_fieldcat>-scrtext_l = 'Sales Document Item'. "Sales Document Item <fs_l_fieldcat>-scrtext_m = 'Sal Doc Itm'. <fs_l_fieldcat>-scrtext_s = 'Sl Dc Itm'. <fs_l_fieldcat>-reptext = 'Sales Document Item'. <fs_l_fieldcat>-outputlen = 18. <fs_l_fieldcat>-just = 'L'. <fs_l_fieldcat>-emphasize = 'C200'. WHEN 'MATNR'. <fs_l_fieldcat>-scrtext_l "Material Number <fs_l_fieldcat>-scrtext_m <fs_l_fieldcat>-scrtext_s <fs_l_fieldcat>-reptext <fs_l_fieldcat>-outputlen <fs_l_fieldcat>-just <fs_l_fieldcat>-emphasize = 'Material Number'. = = = = = = 'Material Number'. 'Mat No.'. 'Material Number'. 18. 'L'. 'C200'. 'Material Group'. 'Material Group'. 'Mat Grp'. 'Material Group'. 14. 'L'. 'C010'.

WHEN 'MATKL'. <fs_l_fieldcat>-scrtext_l = "Material Group <fs_l_fieldcat>-scrtext_m = <fs_l_fieldcat>-scrtext_s = <fs_l_fieldcat>-reptext = <fs_l_fieldcat>-outputlen = <fs_l_fieldcat>-just = <fs_l_fieldcat>-emphasize = <fs_l_fieldcat>-edit = 'X'. ENDCASE. ENDLOOP. ENDFORM.

" GET_FIELDCAT_DESC1

*&---------------------------------------------------------------------* *& Form event_top_of_page *&---------------------------------------------------------------------* * To display the TOP_OF_PAGE text in HTML format *----------------------------------------------------------------------* FORM event_top_of_page1 USING dg_dyndoc_id TYPE REF TO cl_dd_document.

* Data: title type ZCL_SD_DYNDOC->HTML_TABLE. DATA : sdydo_html_line TYPE sdydo_html_line. DATA : l_l TYPE string, l_text TYPE string, l_lno TYPE i, l_vbeln TYPE vbeln.

CONCATENATE '<HTML><BODY><table border="0" width="100%" cellpadding="1"><TR><T D colspan = 2 ALIGN = "LEFT">'"#EC NOTEXT '<B>' 'EDITABLE ALV TEMPLET EXAMPLE PROGRAM' '</B> </TD></TR>' INTO sdydo_html_ line. DESCRIBE TABLE dg_dyndoc_id->html_table LINES l_l. l_l = l_l + 1. INSERT sdydo_html_line INTO dg_dyndoc_id->html_table INDEX l_l. CONCATENATE 'Generated on : ' sy-datum+6(2) '.' sy-datum+4(2) '.' sy-datum+0( 4) INTO l_text."#EC NOTEXT CONCATENATE '<table border="0" width="100%" cellpadding="1"><TR><TD colspan = 2 ALIGN = "LEFT">' l_text '</TD>' INTO sdydo_html_line. CONCATENATE sdydo_html_line '<TD colspan = 2 ALIGN = "CENTER"> Generated by : ' sy-uname '</TR>' INTO sdydo_html_line. CONCATENATE sdydo_html_line '<TD colspan = 2 ALIGN = "RIGHT"> TIME : ' sy-uz eit+0(2) ':' sy-uzeit+2(2) ':' sy-uzeit+4(2) '</TR>' INTO sdydo_html_line. DESCRIBE TABLE dg_dyndoc_id->html_table LINES l_l. l_l = l_l + 1. INSERT sdydo_html_line INTO dg_dyndoc_id->html_table INDEX l_l. CLEAR l_text. IF s_vkorg-high <> space. CONCATENATE 'Sales Organization :' s_vkorg-low '-' s_vkorg-high INTO l_tex t."#EC NOTEXT ELSE. CONCATENATE 'Sales Organization :' s_vkorg-low INTO l_text."#EC NOTEXT ENDIF. CONCATENATE '<table border="0" width="100%" cellpadding="1"><TR><TD colspan = 2 ALIGN = "LEFT">' l_text '</TD></TR>' INTO sdydo_html_line. DESCRIBE TABLE dg_dyndoc_id->html_table LINES l_l. l_l = l_l + 1. INSERT sdydo_html_line INTO dg_dyndoc_id->html_table INDEX l_l. CLEAR l_text. CLEAR l_lno. DESCRIBE TABLE t_output1 LINES l_lno. CLEAR w_output1. READ TABLE t_output1 INDEX 1 INTO w_output1. l_vbeln = w_output1-vbeln. IF l_lno = 1.

CONCATENATE 'Sales Document Number :' l_vbeln INTO l_text."#EC NOTEXT ELSE. CLEAR w_output1. READ TABLE t_output1 INDEX l_lno INTO w_output1. CONCATENATE 'Sales Document Number :' l_vbeln '-' w_output1-vbeln INTO l _text."#EC NOTEXT ENDIF. CONCATENATE '<table border="0" width="100%" cellpadding="1"><TR><TD colspan = 2 ALIGN = "LEFT">' l_text '</TD></TR></BODY></HTML>' INTO sdydo_html_line. DESCRIBE TABLE dg_dyndoc_id->html_table LINES l_l. l_l = l_l + 1. INSERT sdydo_html_line INTO dg_dyndoc_id->html_table INDEX l_l. PERFORM disp_top_of_page1. ENDFORM. " EVENT_TOP_OF_PAGE

*&---------------------------------------------------------------------* *& Form disp_top_of_page1 *&---------------------------------------------------------------------* * text *----------------------------------------------------------------------* FORM disp_top_of_page1 . * Creating html control IF r_html_cntrl1 IS INITIAL. CREATE OBJECT r_html_cntrl1 EXPORTING parent = r_sd_contnr_top1. ENDIF. "r_html_cntrl CALL METHOD r_sd_html1->merge_document. r_sd_html1->html_control = r_html_cntrl1. * Display document CALL METHOD r_sd_html1->display_document EXPORTING reuse_control = 'X' parent = r_sd_contnr_top1 EXCEPTIONS html_display_error = 1. IF sy-subrc NE 0. MESSAGE i000 WITH 'Error ' 'in ' 'displaying ' 'top-of-page'."#EC NOTEXT ENDIF. "sy-subrc ENDFORM. " disp_top_of_page

*&---------------------------------------------------------------------* *& Form event_print_top_of_page *&---------------------------------------------------------------------* * To print top of page in list output

*----------------------------------------------------------------------* FORM event_print_top_of_page1 . DATA : l_text(255) TYPE c, "Text l_lno TYPE i, l_vbeln TYPE vbeln. CLEAR: l_text. IF s_vkorg-high <> space. CONCATENATE 'Sales Organization :' s_vkorg-low '-' s_vkorg-high INTO l_tex t."#EC NOTEXT ELSE. CONCATENATE 'Sales Organization :' s_vkorg-low INTO l_text."#EC NOTEXT ENDIF. WRITE:/ l_text. CLEAR l_text. CLEAR l_lno. DESCRIBE TABLE t_output1 LINES l_lno. CLEAR w_output1. READ TABLE t_output1 INDEX 1 INTO w_output1. l_vbeln = w_output1-vbeln. IF l_lno = 1. CONCATENATE 'Sales Document Number :' l_vbeln INTO l_text."#EC NOTEXT ELSE. CLEAR w_output1. READ TABLE t_output1 INDEX l_lno INTO w_output1. CONCATENATE 'Sales Document Number :' l_vbeln '-' w_output1-vbeln INTO l _text."#EC NOTEXT ENDIF. WRITE:/ l_text. ENDFORM. " event_print_top_of_page

*&---------------------------------------------------------------------* *& Form get_data2 *&---------------------------------------------------------------------* * Getting data for the secondary alv *----------------------------------------------------------------------* FORM get_data2 . DATA: l_chk TYPE i. l_chk = 0. REFRESH t_output1[]. SELECT * FROM zvbap INTO corresponding fields of TABLE t_output1 FOR ALL ENTR IES IN t_output WHERE vbeln = t_output-vbeln. CLEAR w_output. LOOP AT t_output INTO w_output. IF w_output-chchk EQ 'X'. l_chk = l_chk + 1. ENDIF. CLEAR w_output1. LOOP AT t_output1 INTO w_output1 WHERE vbeln = w_output-vbeln. IF w_output-chchk NE 'X'. DELETE TABLE t_output1 FROM w_output1.

ENDIF. ENDLOOP. ENDLOOP. IF l_chk = 0. CLEAR w_output. READ TABLE t_output INDEX g_row_id INTO w_output. REFRESH t_output1[]. SELECT * FROM zvbap INTO corresponding fields of TABLE t_output1 WHERE vbe ln = w_output-vbeln. CLEAR g_row_id. ENDIF. ENDFORM. " get_data2 *&---------------------------------------------------------------------* *& Form SAVE_DATA *&---------------------------------------------------------------------* * Saving data which is edited *----------------------------------------------------------------------* FORM save_data . DATA: l_valid TYPE c. CALL METHOD r_sd_grid1->check_changed_data IMPORTING e_valid = l_valid. IF l_valid IS INITIAL. CALL FUNCTION 'POPUP_TO_INFORM' EXPORTING titel = 'Invalid data' txt1 = 'Please enter a valid data at the time of editing' txt2 = 'Enter correct data'. TXT3 = ' ' TXT4 = ' '. ELSE. perform update_database. message s000(0k) with 'Changes were saved'.

* *

ENDIF. ENDFORM. " SAVE_DATA

*&---------------------------------------------------------------------* *& Form switch_edit_mode *&---------------------------------------------------------------------* * text *----------------------------------------------------------------------* * --> p1 text * <-- p2 text *----------------------------------------------------------------------* form switch_edit_mode .

if r_sd_grid1->IS_READY_FOR_INPUT( ) eq 0. * set editable cells to ready for input CALL METHOD r_sd_grid1->set_ready_for_input EXPORTING I_READY_FOR_INPUT = 1. else. * set editable cells to ready for input CALL METHOD r_sd_grid1->set_ready_for_input EXPORTING I_READY_FOR_INPUT = 0. endif. endform. " switch_edit_mode

*&---------------------------------------------------------------------* *& Form update_database *&---------------------------------------------------------------------* * To save the changed data in data base table *----------------------------------------------------------------------* form update_database . * data: lt_del_rows type table of ZVBAP, lt_ins_keys like t_output1, lt_ins_keys type table of zvbap, l_ins_key like line of lt_ins_keys, ls_outvbap type zvbap, ls_outtab like line of t_output1, lt_instab type table of zvbap. *1.Delete Lines: call method r_sd_event_receiver1->get_deleted_rows importing deleted_rows = lt_del_rows. delete zvbap from table lt_del_rows. * *2.Insert Lines: call method r_sd_event_receiver1->get_inserted_rows importing inserted_rows = lt_ins_keys. loop at lt_ins_keys into l_ins_key. read table t_output1 into ls_outtab with key vbeln = l_ins_key-vbeln. if sy-subrc eq 0. move-corresponding ls_outtab to ls_outvbap. append ls_outvbap to lt_instab. endif. endloop.

insert zvbap from table lt_instab. endform. " update_database

You might also like