Created
December 11, 2013 14:20
-
-
Save weiserman/7911192 to your computer and use it in GitHub Desktop.
SAP Report to display long texts contained in a Purchase Order
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
REPORT zpo_texts. | |
TABLES: ekko. | |
TYPE-POOLS : abap, slis, rsanm, icon. | |
DATA: lt_ekko TYPE STANDARD TABLE OF ekko. | |
DATA: l_rec(5) TYPE n. | |
* Internal table and type definition | |
TYPES: BEGIN OF ty_alv, | |
bukrs TYPE ekko-bukrs, | |
ebeln TYPE ekko-ebeln, | |
ekorg TYPE ekko-ekorg, | |
ernam TYPE ekko-ernam, | |
aedat TYPE ekko-aedat, | |
lifnr TYPE ekko-lifnr, | |
tdline TYPE tline-tdline, | |
END OF ty_alv. | |
TYPES: BEGIN OF ty_tdname, | |
tdname TYPE stxh-tdname, | |
END OF ty_tdname. | |
DATA: ls_tdname TYPE ty_tdname, | |
lt_tdname TYPE STANDARD TABLE OF ty_tdname, | |
ls_line TYPE tline, | |
lv_lines type i. | |
DATA: lt_stxh TYPE STANDARD TABLE OF stxh. | |
DATA: lt_alv TYPE STANDARD TABLE OF ty_alv, | |
ls_alv TYPE ty_alv. | |
DATA: lt_text TYPE STANDARD TABLE OF tdline, | |
lv_text TYPE tdline, | |
lv_ebeln TYPE ekko-ebeln, | |
lt_lines TYPE STANDARD TABLE OF tline. | |
FIELD-SYMBOLS: <ls_alv> TYPE ty_alv, | |
<ls_stxh> TYPE stxh. | |
DATA: alv_container TYPE REF TO cl_gui_custom_container, | |
alv_grid TYPE REF TO cl_gui_alv_grid, | |
ok_code LIKE sy-ucomm, | |
fieldcat TYPE lvc_t_fcat. | |
** Declaration for ALV Grid ** | |
DATA : gr_table TYPE REF TO cl_salv_table. | |
** Declarations for ALV Functions | |
DATA : gr_functions TYPE REF TO cl_salv_functions_list. | |
** declaration for ALV Columns | |
DATA : gr_columns TYPE REF TO cl_salv_columns_table, | |
gr_column TYPE REF TO cl_salv_column_table, | |
lt_column_ref TYPE salv_t_column_ref, | |
ls_column_ref TYPE salv_s_column_ref. | |
** declaration for Layout Settings | |
DATA : gr_layout TYPE REF TO cl_salv_layout, | |
gr_layout_key TYPE salv_s_layout_key, | |
ls_layout TYPE salv_s_layout, | |
lt_layout_info TYPE salv_t_layout_info. | |
** Declaration for Global Display Settings | |
DATA : gr_display TYPE REF TO cl_salv_display_settings, | |
lv_title TYPE lvc_title. | |
** Declaration for Aggregate Function Settings | |
DATA : gr_aggr TYPE REF TO cl_salv_aggregations. | |
** Declaration for Sort Function Settings | |
DATA : gr_sort TYPE REF TO cl_salv_sorts. | |
** Declaration for Table Selection settings | |
DATA : gr_select TYPE REF TO cl_salv_selections. | |
** Declaration for Top of List settings | |
DATA : gr_content TYPE REF TO cl_salv_form_element. | |
** Class for handling Events | |
CLASS : lcl_handle_events DEFINITION DEFERRED. | |
DATA : gr_events TYPE REF TO lcl_handle_events, | |
lr_events TYPE REF TO cl_salv_events_table. | |
** Coloring of Date columns ** | |
DATA : lt_colo TYPE STANDARD TABLE OF lvc_s_colo, | |
ls_colo TYPE lvc_s_colo. | |
** Color Structure of columns ** | |
DATA : lt_color TYPE lvc_t_scol, | |
ls_color TYPE lvc_s_scol. | |
*----------------------------------------------------------------------* | |
* CLASS lcl_handle_events DEFINITION | |
*----------------------------------------------------------------------* | |
CLASS lcl_handle_events DEFINITION. | |
PUBLIC SECTION. | |
METHODS : on_double_click FOR EVENT double_click OF cl_salv_events_table | |
IMPORTING row column. | |
METHODS : on_link_click FOR EVENT link_click OF cl_salv_events_table | |
IMPORTING row column. | |
ENDCLASS. "lcl_handle_events DEFINITION | |
*----------------------------------------------------------------------* | |
* CLASS lcl_handle_events IMPLEMENTATION | |
*----------------------------------------------------------------------* | |
CLASS lcl_handle_events IMPLEMENTATION. | |
METHOD on_double_click. | |
PERFORM get_ord_info USING row column. | |
ENDMETHOD. "on_double_click | |
METHOD on_link_click. | |
PERFORM get_ord_info USING row column. | |
ENDMETHOD. "on_link_click | |
ENDCLASS. "lcl_handle_events IMPLEMENTATION | |
* Choose dates and PO Order types | |
SELECTION-SCREEN BEGIN OF BLOCK part1 WITH FRAME TITLE text-001. | |
SELECT-OPTIONS: s_date FOR ekko-aedat. | |
PARAMETERS: p_ekorg LIKE ekko-ekorg DEFAULT '1000'. | |
PARAMETERS: p_stat LIKE ekko-procstat DEFAULT '02'. "Rejected | |
PARAMETERS: p_tdid LIKE stxh-tdid DEFAULT 'F01'. "Text type | |
PARAMETERs: p_var TYPE slis_vari. | |
SELECTION-SCREEN END OF BLOCK part1. | |
AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_var. | |
CLEAR : ls_layout. | |
TRY. | |
CALL METHOD cl_salv_table=>factory | |
EXPORTING | |
list_display = if_salv_c_bool_sap=>false | |
IMPORTING | |
r_salv_table = gr_table | |
CHANGING | |
t_table = lt_alv. | |
CATCH cx_salv_msg . | |
ENDTRY. | |
IF gr_table IS NOT INITIAL. | |
MOVE sy-repid TO gr_layout_key-report. "Set Layout Key as Report ID" | |
gr_layout = gr_table->get_layout( ). "Get Layout of the Table" | |
gr_layout->set_key( gr_layout_key ). "Set Layout key to Layout" | |
lt_layout_info = gr_layout->get_layouts( )."Get the Layouts of report" | |
IF lt_layout_info[] IS NOT INITIAL. | |
ls_layout = gr_layout->f4_layouts( ). "Activate F4 Help for Layouts" | |
IF ls_layout IS NOT INITIAL. | |
MOVE ls_layout-layout TO p_var. | |
ENDIF. | |
ENDIF. | |
ENDIF. | |
START-OF-SELECTION. | |
* Extract the table entries | |
SELECT * FROM ekko INTO CORRESPONDING FIELDS OF TABLE lt_alv | |
WHERE aedat IN s_date | |
AND ekorg EQ p_ekorg | |
AND procstat EQ p_stat. | |
* Sort table by doc number for better searching later | |
SORT lt_alv BY ebeln. | |
DESCRIBE TABLE lt_alv lines lv_lines. | |
move lv_lines to l_rec. | |
* Build up internal table for selecting texts -> we need to get the typing correct | |
LOOP AT lt_alv ASSIGNING <ls_alv>. | |
MOVE <ls_alv>-ebeln TO ls_tdname. | |
APPEND ls_tdname TO lt_tdname. | |
ENDLOOP. | |
* Now select all the texts that have been maintained | |
SELECT * FROM stxh INTO TABLE lt_stxh FOR ALL ENTRIES IN lt_tdname | |
WHERE tdobject = 'EKKO' | |
AND tdid = p_tdid | |
AND tdname = lt_tdname-tdname. | |
* Loop through POs that have text and update main table for display | |
LOOP AT lt_stxh ASSIGNING <ls_stxh>. | |
MOVE <ls_stxh>-tdname TO lv_ebeln. | |
READ TABLE lt_alv WITH KEY ebeln = lv_ebeln INTO ls_alv. | |
IF sy-subrc = 0. "always should be found | |
CLEAR: lt_lines[]. | |
CALL FUNCTION 'READ_TEXT' | |
EXPORTING | |
id = p_tdid | |
language = sy-langu | |
name = <ls_stxh>-tdname | |
object = 'EKKO ' | |
TABLES | |
lines = lt_lines | |
EXCEPTIONS | |
id = 1 | |
language = 2 | |
name = 3 | |
not_found = 4 | |
object = 5 | |
reference_check = 6 | |
wrong_access_to_archive = 7 | |
OTHERS = 8. | |
IF sy-subrc <> 0. | |
CONTINUE. "ignore this loop - unlikely to occur | |
ELSE. | |
READ TABLE lt_lines INTO ls_line INDEX 1. | |
move ls_line-tdline to ls_alv-tdline. | |
MODIFY lt_alv FROM ls_alv TRANSPORTING tdline where ebeln = lv_ebeln. | |
ENDIF. | |
ENDIF. | |
ENDLOOP. | |
SORT lt_alv ASCENDING BY ebeln. | |
IF lt_alv[] IS INITIAL. | |
MESSAGE s429(mo). | |
EXIT. | |
ELSE. | |
PERFORM set_color. | |
PERFORM alv_grid_display. | |
ENDIF. | |
*&---------------------------------------------------------------------* | |
*& Form alv_grid_display | |
*&---------------------------------------------------------------------* | |
* text | |
*----------------------------------------------------------------------* | |
FORM alv_grid_display. | |
CLEAR : gr_table. | |
TRY. | |
CALL METHOD cl_salv_table=>factory | |
EXPORTING | |
list_display = if_salv_c_bool_sap=>false | |
IMPORTING | |
r_salv_table = gr_table | |
CHANGING | |
t_table = lt_alv. | |
CATCH cx_salv_msg . | |
ENDTRY. | |
IF gr_table IS INITIAL. | |
MESSAGE 'Error Creating ALV Grid ' TYPE 'I' DISPLAY LIKE 'E'. | |
STOP. | |
ENDIF. | |
** Get functions details | |
gr_functions = gr_table->get_functions( ). | |
** Activate All Buttons in Tool Bar | |
gr_functions->set_all( if_salv_c_bool_sap=>true ). | |
******* Layout Settings ******* | |
CLEAR : gr_layout, gr_layout_key. | |
MOVE sy-repid TO gr_layout_key-report. "Set Report ID as Layout Key" | |
gr_layout = gr_table->get_layout( ). "Get Layout of Table" | |
gr_layout->set_key( gr_layout_key ). "Set Report Id to Layout" | |
gr_layout->set_save_restriction( if_salv_c_layout=>restrict_none ). "No Restriction to Save Layout" | |
IF p_var IS INITIAL. | |
gr_layout->set_default( if_salv_c_bool_sap=>true ). "Set Default Variant" | |
ELSE. | |
gr_layout->set_initial_layout( p_var ). "Set the Selected Variant as Initial" | |
ENDIF. | |
******* Global Display Settings ******* | |
CLEAR : gr_display. | |
MOVE 'Purchase Order Details' TO lv_title. | |
gr_display = gr_table->get_display_settings( ). " Global Display settings" | |
gr_display->set_striped_pattern( if_salv_c_bool_sap=>true ). "Activate Strip Pattern" | |
gr_display->set_list_header( lv_title ). "Report Header" | |
******* Aggregate Function Settings ******* | |
gr_aggr = gr_table->get_aggregations( ). "Get Aggregate Functions" | |
******* Sort Functions ******* | |
gr_sort = gr_table->get_sorts( ). | |
IF gr_sort IS NOT INITIAL. | |
TRY. | |
gr_sort->add_sort( columnname = 'AEDAT' | |
position = 1 | |
sequence = if_salv_c_sort=>sort_up | |
subtotal = if_salv_c_bool_sap=>true | |
group = if_salv_c_sort=>group_none | |
obligatory = if_salv_c_bool_sap=>false ). | |
CATCH cx_salv_not_found . | |
CATCH cx_salv_existing . | |
CATCH cx_salv_data_error . | |
ENDTRY. | |
TRY. | |
gr_sort->add_sort( columnname = 'LIFNR' | |
position = 2 | |
sequence = if_salv_c_sort=>sort_down | |
subtotal = if_salv_c_bool_sap=>false | |
group = if_salv_c_sort=>group_none | |
obligatory = if_salv_c_bool_sap=>false ). | |
CATCH cx_salv_not_found . | |
CATCH cx_salv_existing . | |
CATCH cx_salv_data_error . | |
ENDTRY. | |
ENDIF. | |
******* Table Selection Settings ******* | |
gr_select = gr_table->get_selections( ). | |
IF gr_select IS NOT INITIAL. | |
gr_select->set_selection_mode( if_salv_c_selection_mode=>row_column ). "Allow single row Selection" | |
ENDIF. | |
******* Top of List settings ******* | |
PERFORM top_of_page CHANGING gr_content. | |
gr_table->set_top_of_list( gr_content ). | |
******* Event Register settings ******* | |
lr_events = gr_table->get_event( ). | |
CREATE OBJECT gr_events. | |
SET HANDLER gr_events->on_double_click FOR lr_events. | |
SET HANDLER gr_events->on_link_click FOR lr_events. | |
** Get the columns from ALV Table | |
gr_columns = gr_table->get_columns( ). | |
IF gr_columns IS NOT INITIAL. | |
REFRESH : lt_column_ref. | |
CLEAR : ls_column_ref. | |
lt_column_ref = gr_columns->get( ). | |
** Get columns properties | |
gr_columns->set_optimize( if_salv_c_bool_sap=>true ). | |
gr_columns->set_key_fixation( if_salv_c_bool_sap=>true ). | |
TRY. | |
gr_columns->set_color_column( 'T_COLOR' ). | |
CATCH cx_salv_data_error . | |
ENDTRY. | |
** Individual Column Properties. | |
PERFORM column_settings. | |
ENDIF. | |
CALL METHOD gr_table->display. | |
ENDFORM. "alv_grid_display | |
*&---------------------------------------------------------------------* | |
*& Form column_settings | |
*&---------------------------------------------------------------------* | |
* text | |
*----------------------------------------------------------------------* | |
FORM column_settings. | |
* Local Data | |
data lv_scrtext_s type scrtext_s. | |
LOOP AT lt_column_ref INTO ls_column_ref. | |
TRY. | |
gr_column ?= gr_columns->get_column( ls_column_ref-columnname ). | |
CATCH cx_salv_not_found. | |
ENDTRY. | |
IF gr_column IS NOT INITIAL. | |
** Make Mandt column invisible ** | |
IF gr_column->get_ddic_datatype( ) = 'CLNT'. | |
gr_column->set_technical( if_salv_c_bool_sap=>true ). | |
ENDIF. | |
** Set text title for the TDLINE | |
IF gr_column->GET_COLUMNNAME( ) = 'TDLINE'. | |
lv_scrtext_s = 'Long Text'. | |
gr_column->SET_SHORT_TEXT( lv_scrtext_s ). | |
ENDIF. | |
** Create Aggregate function total for All Numeric/Currency Fields ** | |
IF gr_column->get_ddic_inttype( ) EQ 'P' OR | |
gr_column->get_ddic_datatype( ) EQ 'CURR'. | |
IF gr_aggr IS NOT INITIAL. | |
TRY. | |
gr_aggr->add_aggregation( columnname = ls_column_ref-columnname | |
aggregation = if_salv_c_aggregation=>total ). | |
CATCH cx_salv_data_error . | |
CATCH cx_salv_not_found . | |
CATCH cx_salv_existing . | |
ENDTRY. | |
ENDIF. | |
ENDIF. | |
** Create Check box for fields with domain "XFELD" | |
IF gr_column->get_ddic_domain( ) EQ 'XFELD'. | |
gr_column->set_cell_type( if_salv_c_cell_type=>checkbox ). | |
ENDIF. | |
** Set color to Date Columns ** | |
IF gr_column->get_ddic_datatype( ) EQ 'DATS'. | |
CLEAR : ls_colo. | |
MOVE 2 TO ls_colo-col. | |
MOVE 1 TO ls_colo-int. | |
MOVE 1 TO ls_colo-inv. | |
gr_column->set_color( ls_colo ). | |
ENDIF. | |
** Add Hotspot&Hyper Link to the column ebeln | |
IF ls_column_ref-columnname EQ 'EBELN'. | |
gr_column->set_cell_type( if_salv_c_cell_type=>hotspot ). | |
gr_column->set_key( if_salv_c_bool_sap=>true ). | |
ENDIF. | |
** Add Hotspot&Hyper Link to the column ebeln | |
IF ls_column_ref-columnname EQ 'TLINE'. | |
gr_column->set_cell_type( if_salv_c_cell_type=>hotspot ). | |
ENDIF. | |
ENDIF. | |
ENDLOOP. | |
ENDFORM. "column_settings | |
*&---------------------------------------------------------------------* | |
*& Form top_of_page | |
*&---------------------------------------------------------------------* | |
FORM top_of_page CHANGING lr_content TYPE REF TO cl_salv_form_element. | |
DATA : lr_grid TYPE REF TO cl_salv_form_layout_grid, | |
lr_text TYPE REF TO cl_salv_form_text, | |
lr_label TYPE REF TO cl_salv_form_label, | |
lr_head TYPE string. | |
MOVE 'Purchase Order List' TO lr_head. | |
CREATE OBJECT lr_grid. | |
** Header of Top of Page ** | |
lr_grid->create_header_information( row = 1 | |
column = 1 | |
text = lr_head | |
tooltip = lr_head ). | |
** Add Row ** | |
lr_grid->add_row( ). | |
** Add Label in Grid ** | |
lr_label = lr_grid->create_label( row = 2 | |
column = 1 | |
text = 'No of Records' | |
tooltip = 'No of Records' ). | |
** Add Text in The Grid ** | |
lr_text = lr_grid->create_text( row = 2 | |
column = 2 | |
text = l_rec | |
tooltip = l_rec ). | |
** Set Label and Text Link ** | |
lr_label->set_label_for( lr_text ). | |
** Move lr_grid to lr_content ** | |
lr_content = lr_grid. | |
ENDFORM. "top_of_page | |
*&---------------------------------------------------------------------* | |
*& Form | |
*&---------------------------------------------------------------------* | |
FORM get_ord_info USING row TYPE salv_de_row | |
column TYPE salv_de_column. | |
IF column EQ 'EBELN' or column EQ 'TLINE'. | |
CLEAR : ls_alv. | |
READ TABLE lt_alv INTO ls_alv INDEX row. | |
IF sy-subrc EQ 0. | |
SET PARAMETER ID 'BES' FIELD ls_alv-ebeln. | |
CALL TRANSACTION 'ME23N' AND SKIP FIRST SCREEN. | |
ENDIF. | |
ENDIF. | |
ENDFORM. "get_ord_info | |
*&---------------------------------------------------------------------* | |
*& Form set_color | |
*&---------------------------------------------------------------------* | |
* Set color to the column | |
*----------------------------------------------------------------------* | |
FORM set_color. | |
LOOP AT lt_alv assigning <ls_alv>. | |
IF <ls_alv>-tdline eq space. | |
REFRESH : lt_color. | |
CLEAR : ls_color. | |
MOVE 'EBELN' TO ls_color-fname. | |
MOVE 3 TO ls_color-color-col. | |
MOVE 0 TO ls_color-color-int. | |
MOVE 0 TO ls_color-color-inv. | |
APPEND ls_color TO lt_color. | |
ENDIF. | |
ENDLOOP. | |
ENDFORM. "set_color |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Hi, Congratulations ,Very nicely written code for this topic with opps ALV and long text issue resolved .