Difference between revisions of "SAP ABAP ALV OM"
From SapWiki
(13 intermediate revisions by the same user not shown) | |||
Line 275: | Line 275: | ||
==[[SAP_ABAP_ALV_OM_EX01|Ejemplo con double click & user command]]== | ==[[SAP_ABAP_ALV_OM_EX01|Ejemplo con double click & user command]]== | ||
+ | |||
+ | ==Habilitar/Deshabilitar columna como llave== | ||
+ | <nowiki>DATA: gt_columns TYPE salv_t_column_ref, | ||
+ | lr_tabcol TYPE REF TO cl_salv_column_table, | ||
+ | sg_columns TYPE salv_s_column_ref. | ||
+ | |||
+ | TRY. | ||
+ | CALL METHOD lr_columns->get | ||
+ | RECEIVING | ||
+ | value = gt_columns. | ||
+ | |||
+ | LOOP AT gt_columns INTO sg_columns. | ||
+ | CASE sg_columns-columnname. | ||
+ | WHEN 'ID_TRAN'. | ||
+ | TRY. | ||
+ | lr_tabcol ?= sg_columns-r_column. | ||
+ | lr_tabcol->set_key( if_salv_c_bool_sap=>false ). | ||
+ | ENDTRY. | ||
+ | ENDCASE. | ||
+ | ENDLOOP. | ||
+ | ENDTRY.</nowiki> | ||
+ | |||
+ | ==Ejemplo Top of List== | ||
+ | <nowiki> | ||
+ | data lr_grid TYPE REF TO cl_salv_form_layout_grid. | ||
+ | |||
+ | PERFORM create_top_of_list CHANGING lr_grid. | ||
+ | |||
+ | gr_table->set_top_of_list( lr_grid ). | ||
+ | |||
+ | FORM create_top_of_list CHANGING lr_grid TYPE REF TO cl_salv_form_layout_grid. | ||
+ | DATA : lr_flow TYPE REF TO cl_salv_form_layout_flow, | ||
+ | l_text TYPE string. | ||
+ | |||
+ | l_text = sy-title. | ||
+ | |||
+ | CREATE OBJECT lr_grid. | ||
+ | CALL METHOD lr_grid->create_header_information | ||
+ | EXPORTING | ||
+ | row = 1 | ||
+ | column = 1 | ||
+ | * ROWSPAN = | ||
+ | * COLSPAN = | ||
+ | text = l_text | ||
+ | tooltip = sy-title. | ||
+ | ********************************************* | ||
+ | **... add a row to the grid -> row 2 | ||
+ | * lr_grid->add_row( ). | ||
+ | |||
+ | *... in the cell [2,1] create a grid | ||
+ | DATA(lr_grid_1) = lr_grid->create_grid( | ||
+ | row = 2 | ||
+ | column = 1 ). | ||
+ | |||
+ | *... in the cell [1,1] of the second Grid create a label | ||
+ | DATA(lr_label) = lr_grid_1->create_label( | ||
+ | row = 1 | ||
+ | column = 1 | ||
+ | text = 'Fecha:'(t02) | ||
+ | tooltip = 'Fecha:'(t02) ). | ||
+ | |||
+ | l_text = |{ sy-datum DATE = USER }|. | ||
+ | |||
+ | *... in the cell [1,2] of the second Grid create a text | ||
+ | DATA(lr_text) = lr_grid_1->create_text( | ||
+ | row = 1 | ||
+ | column = 2 | ||
+ | text = l_text | ||
+ | tooltip = l_text ). | ||
+ | |||
+ | lr_label->set_label_for( lr_text ). | ||
+ | |||
+ | ************************************************ | ||
+ | *... in the cell [2,1] of the second Grid create a label | ||
+ | l_text = TEXT-t01. | ||
+ | lr_label = lr_grid_1->create_label( | ||
+ | row = 2 | ||
+ | column = 1 | ||
+ | text = l_text | ||
+ | tooltip = l_text ). | ||
+ | |||
+ | *... in the cell [2,2] of the second Grid create a text | ||
+ | l_text = p_file. | ||
+ | lr_text = lr_grid_1->create_text( | ||
+ | row = 2 | ||
+ | column = 2 | ||
+ | text = l_text | ||
+ | tooltip = l_text ). | ||
+ | |||
+ | lr_label->set_label_for( lr_text ). | ||
+ | ************************************************ | ||
+ | ENDFORM. "create_top_of_list</nowiki> | ||
+ | ===Agregar logo=== | ||
+ | <nowiki> | ||
+ | *--------------------------------------------------------------------* | ||
+ | * Create logo layout, set grid content on left and logo image on right | ||
+ | *--------------------------------------------------------------------* | ||
+ | DATA lr_logo TYPE REF TO cl_salv_form_layout_logo. | ||
+ | |||
+ | CREATE OBJECT lr_logo. | ||
+ | lr_logo->set_left_content( lr_grid ). | ||
+ | * ***** | ||
+ | lr_logo->set_right_logo( 'ZLOGO' ). "'ENJOYSAP_LOGO' | ||
+ | |||
+ | * Set element top_of_list | ||
+ | gr_table->set_top_of_list( lr_logo ). </nowiki> | ||
+ | |||
+ | ==MACROS== | ||
+ | <nowiki>DATA: l_text_l TYPE scrtext_l, | ||
+ | l_text_m TYPE scrtext_m, | ||
+ | l_text_s TYPE scrtext_s. | ||
+ | |||
+ | *----------------------------------------------------------------------* | ||
+ | * Set column names | ||
+ | *----------------------------------------------------------------------* | ||
+ | DEFINE m_column_names. | ||
+ | l_text_l = &4. | ||
+ | l_text_m = &3. | ||
+ | l_text_s = &2. | ||
+ | TRY. | ||
+ | lr_column = lr_columns->get_column( &1 ). | ||
+ | lr_column->set_long_text( l_text_l ). | ||
+ | lr_column->set_medium_text( l_text_m ). | ||
+ | lr_column->set_short_text( l_text_s ). | ||
+ | CATCH cx_salv_not_found. | ||
+ | CATCH cx_salv_existing. | ||
+ | CATCH cx_salv_data_error. | ||
+ | ENDTRY. | ||
+ | END-OF-DEFINITION. | ||
+ | |||
+ | m_column_names 'DETALLE' 'Detalle'(t03) 'Detalle'(t03) 'Detalle'(t03). | ||
+ | |||
+ | DEFINE m_set_technical. | ||
+ | TRY. | ||
+ | lr_column = lr_columns->get_column( &1 ). | ||
+ | lr_column->set_technical( if_salv_c_bool_sap=>true ). | ||
+ | CATCH cx_salv_not_found. | ||
+ | ENDTRY. | ||
+ | END-OF-DEFINITION.</nowiki> | ||
+ | ==Definir campo de moneda a campos tipo moneda (CURR)== | ||
+ | <nowiki> | ||
+ | TYPES BEGIN OF ty_data, | ||
+ | periodo type MAHD_ALV_PERIO, | ||
+ | bukrs type p0001-bukrs, | ||
+ | werks type p0001-werks, | ||
+ | pernr type p0001-pernr, | ||
+ | cname type p0002-cname, | ||
+ | tot_hab type PAD_AMT7S, "CURR | ||
+ | tot_hab_imp_tri type PAD_AMT7S, "CURR | ||
+ | tot_hab_imp_no_tri type PAD_AMT7S, "CURR | ||
+ | tot_hab_no_imp_no_tri type PAD_AMT7S, "CURR | ||
+ | tot_hab_no_imp_tri type PAD_AMT7S, "CURR | ||
+ | |||
+ | waers type waers, | ||
+ | END OF ty_data. | ||
+ | |||
+ | DATA: lr_columns TYPE REF TO cl_salv_columns_table, | ||
+ | lr_column TYPE REF TO cl_salv_column. | ||
+ | data gt_data type table of ty_data. | ||
+ | data gs_data type ty_data. | ||
+ | ... | ||
+ | ... | ||
+ | ... | ||
+ | TRY. | ||
+ | cl_salv_table=>factory( IMPORTING r_salv_table = DATA(gr_table) | ||
+ | CHANGING t_table = gt_data ). | ||
+ | CATCH cx_salv_msg. | ||
+ | ENDTRY. | ||
+ | lr_columns = gr_table->get_columns( ). | ||
+ | perform set_moneda. | ||
+ | ... | ||
+ | ... | ||
+ | FORM set_moneda. | ||
+ | DATA lr_structdesc TYPE REF TO cl_abap_structdescr. | ||
+ | DATA: lt_campo TYPE cl_abap_structdescr=>component_table, | ||
+ | ls_campo TYPE abap_componentdescr. | ||
+ | DATA: lr_descr TYPE REF TO cl_abap_elemdescr, | ||
+ | lt_ddic_info TYPE dd_x031l_table, | ||
+ | lrs_ddic_info TYPE REF TO x031l. | ||
+ | DATA l_cname TYPE lvc_fname. | ||
+ | FIELD-SYMBOLS <fs_field> TYPE ANY. | ||
+ | |||
+ | lr_structdesc ?= cl_abap_typedescr=>describe_by_data( gs_data ). | ||
+ | |||
+ | lt_campo = lr_structdesc->get_components( ). | ||
+ | |||
+ | DO. | ||
+ | READ TABLE lt_campo INTO ls_campo INDEX sy-index. | ||
+ | IF sy-subrc = 0. | ||
+ | ASSIGN COMPONENT ls_campo-name OF STRUCTURE gs_data TO <fs_field>. | ||
+ | CASE ls_campo-type->type_kind. . | ||
+ | WHEN 'P'. | ||
+ | lr_descr ?= cl_abap_elemdescr=>describe_by_data( <fs_field> ). | ||
+ | lt_ddic_info = lr_descr->get_ddic_object( ). | ||
+ | READ TABLE lt_ddic_info INDEX 1 REFERENCE INTO lrs_ddic_info. | ||
+ | IF sy-subrc = 0. | ||
+ | IF lrs_ddic_info->dtyp = 'CURR'. | ||
+ | l_cname = ls_campo-name. | ||
+ | TRY. | ||
+ | lr_column = lr_columns->get_column( l_cname ). | ||
+ | lr_column->set_currency_column( 'WAERS' ). | ||
+ | CATCH cx_salv_not_found. | ||
+ | CATCH cx_salv_existing. | ||
+ | CATCH cx_salv_data_error. | ||
+ | ENDTRY. | ||
+ | ENDIF. | ||
+ | ENDIF. | ||
+ | ENDCASE. | ||
+ | ELSE. | ||
+ | EXIT. | ||
+ | ENDIF. | ||
+ | ENDDO. | ||
+ | |||
+ | ENDFORM. "set_moneda | ||
+ | </nowiki> |
Latest revision as of 20:03, 1 December 2021
Contents
ALV SIMPLE
DATA: gr_table TYPE REF TO cl_salv_table. DATA: gr_functions TYPE REF TO cl_salv_functions_list. *&---------------------------------------------------------------------* *& Form display_alv *&---------------------------------------------------------------------* * text *----------------------------------------------------------------------* FORM display_alv . DATA: lr_columns TYPE REF TO cl_salv_columns_table, lr_column TYPE REF TO cl_salv_column. DATA: lr_layout TYPE REF TO cl_salv_layout, ls_key TYPE salv_s_layout_key. *... Create Instance TRY. CALL METHOD cl_salv_table=>factory IMPORTING r_salv_table = gr_table CHANGING t_table = gt_data. CATCH cx_salv_msg. ENDTRY. * setting default ALV generic funtions gr_functions = gr_table->get_functions( ). gr_functions->set_all( ). * set layout lr_layout = gr_table->get_layout( ). * set the Layout Key ls_key-report = sy-repid. lr_layout->set_key( ls_key ). * LR_LAYOUT->SET_SAVE_RESTRICTION( 3 ). lr_layout->set_save_restriction( ). lr_layout->set_default( 'X' ). * edit ALV columns lr_columns = gr_table->get_columns( ). * optimize output lr_columns->set_optimize( 'X' ). *----------------------------------------------------------------------* * Set column names *----------------------------------------------------------------------* TRY. lr_column = lr_columns->get_column( 'DDTEXT' ). lr_column->set_long_text( 'Desc. Estatus' ). lr_column->set_medium_text( 'Desc. Estatus' ). lr_column->set_short_text( 'Desc.Estat' ). CATCH cx_salv_not_found. CATCH cx_salv_existing. CATCH cx_salv_data_error. ENDTRY. *--------------------------------------------------------------------* * hide columns *--------------------------------------------------------------------* TRY. lr_column = lr_columns->get_column( 'FECHA_FIRMA' ). lr_column->set_technical( 'X' ). CATCH cx_salv_not_found. CATCH cx_salv_existing. CATCH cx_salv_data_error. ENDTRY. *... Display table gr_table->display( ). ENDFORM. " DISPLAY_ALV
Función para desplegar un LOG usando ALV OM
*----- Output in Log -------------------------------------------------- TYPES: BEGIN OF ty_news, icon(4), pernr TYPE zhr_solicitudes-pernr, begda TYPE zhr_solicitudes-begda, endda TYPE zhr_solicitudes-endda, subty TYPE zhr_solicitudes-subty, text LIKE bapiret2-message, END OF ty_news. DATA: news TYPE TABLE OF ty_news. .. .. CALL FUNCTION 'Z_DISPLAY_LOG' EXPORTING START_COLUMN = 8 END_COLUMN = 120 START_LINE = 3 END_LINE = 15 CHANGING i_news = news. FUNCTION Z_DISPLAY_LOG. *"---------------------------------------------------------------------- *"*"Interfase local *" IMPORTING *" REFERENCE(START_COLUMN) TYPE I DEFAULT 8 *" REFERENCE(END_COLUMN) TYPE I DEFAULT 120 *" REFERENCE(START_LINE) TYPE I DEFAULT 3 *" REFERENCE(END_LINE) TYPE I DEFAULT 15 *" CHANGING *" REFERENCE(I_NEWS) TYPE TABLE *"---------------------------------------------------------------------- * SALV Data DATA: gr_table TYPE REF TO cl_salv_table. DATA: gr_functions TYPE REF TO cl_salv_functions_list. DATA: lr_columns TYPE REF TO cl_salv_columns_table, lr_column TYPE REF TO cl_salv_column. try. * SALV Create Instance CALL METHOD cl_salv_table=>factory IMPORTING r_salv_table = gr_table CHANGING t_table = i_news. "internal table CATCH cx_salv_msg. "#EC NO_HANDLER ENDTRY. * setting default ALV generic funtions gr_functions = gr_table->get_functions( ). * gr_functions->set_detail( IF_SALV_C_BOOL_SAP=>TRUE ). gr_functions->set_all( ). *... §4.1 set the size and position of the Popup via coordinates gr_table->set_screen_popup( start_column = start_column end_column = end_column start_line = start_line end_line = end_line ). * edit ALV columns lr_columns = gr_table->get_columns( ). * optimize output lr_columns->set_optimize( 'X' ). TRY. lr_column = lr_columns->get_column( 'ICON' ). lr_column->set_long_text( 'Status' ). lr_column->set_medium_text( 'Status' ). lr_column->set_short_text( 'Status' ). CATCH cx_salv_not_found. "#EC NO_HANDLER CATCH cx_salv_existing. "#EC NO_HANDLER CATCH cx_salv_data_error. "#EC NO_HANDLER ENDTRY. *... Display table gr_table->display( ). ENDFUNCTION.
USO de Check Box para seleccionar columnas
*---------------------------------------------------------------------* * CLASS lcl_handle_events DEFINITION *---------------------------------------------------------------------* * define a local class for handling events of cl_salv_table *---------------------------------------------------------------------* CLASS lcl_handle_events DEFINITION. PUBLIC SECTION. METHODS: on_user_command FOR EVENT added_function OF cl_salv_events IMPORTING e_salv_function, on_double_click FOR EVENT double_click OF cl_salv_events_table IMPORTING row column. ENDCLASS. "lcl_handle_events DEFINITION *---------------------------------------------------------------------* * CLASS lcl_handle_events IMPLEMENTATION *---------------------------------------------------------------------* * §5.2 implement the events for handling the events of cl_salv_table *---------------------------------------------------------------------* CLASS lcl_handle_events IMPLEMENTATION. METHOD on_user_command. PERFORM user_command USING e_salv_function. ENDMETHOD. "on_user_command METHOD on_double_click. PERFORM double_click USING row column. ENDMETHOD. "on_double_click ENDCLASS. "lcl_handle_events IMPLEMENTATION * for handling the events of cl_salv_table DATA: gr_events TYPE REF TO lcl_handle_events. *----------------------------------------------------------------------* * CLASS mycheckbox DEFINITION *----------------------------------------------------------------------* * *----------------------------------------------------------------------* CLASS mycheckbox DEFINITION. PUBLIC SECTION. CLASS-METHODS on_click_checkbox FOR EVENT link_click OF cl_salv_events_table IMPORTING row column. ENDCLASS. "mycheckbox DEFINITION *----------------------------------------------------------------------* * CLASS mycheckbox IMPLEMENTATION *----------------------------------------------------------------------* * *----------------------------------------------------------------------* CLASS mycheckbox IMPLEMENTATION. METHOD on_click_checkbox. READ TABLE gt_data_col INDEX row INTO wa_data. IF wa_data-sel IS INITIAL ."AND wa_data-icon <> icon_green_light. wa_data-sel = 'X'. ELSE. CLEAR wa_data-sel. ENDIF. MODIFY gt_data_col FROM wa_data INDEX sy-tabix. gr_table->refresh( refresh_mode = if_salv_c_refresh=>full ). ENDMETHOD. "on_click_checkbox ENDCLASS. "mycheckbox IMPLEMENTATION form display_alv... DATA: lr_events TYPE REF TO cl_salv_events_table. .. .. DATA mycolumn TYPE REF TO cl_salv_column_table. TRY. mycolumn ?= lr_columns->get_column( 'SEL' ). mycolumn->set_cell_type( if_salv_c_cell_type=>checkbox_hotspot ). CATCH cx_salv_not_found. CATCH cx_salv_existing. CATCH cx_salv_data_error. ENDTRY. * register to the events of cl_salv_table lr_events = gr_table->get_event( ). CREATE OBJECT gr_events. SET HANDLER mycheckbox=>on_click_checkbox FOR lr_events.
ALV OM en ABAP 7.4
FORM display_log. TRY. cl_salv_table=>factory( IMPORTING r_salv_table = DATA(gr_table) CHANGING t_table = gt_log ). CATCH cx_salv_msg. ENDTRY. *... Enable Generic ALV functions DATA(gr_functions) = gr_table->get_functions( ). ** gr_functions->set_default( ). gr_functions->set_all( ). DATA(lr_columns) = gr_table->get_columns( ). * set column text TRY. DATA(lr_column) = lr_columns->get_column( 'EQUIPMENT_O' ). lr_column->set_long_text( 'Equipo Original' ). lr_column->set_medium_text( 'Equi.Ori.' ). lr_column->set_short_text( 'Equi.Ori.' ). CATCH cx_salv_not_found. CATCH cx_salv_existing. CATCH cx_salv_data_error. ENDTRY. *... Display table gr_table->display( ). ENDFORM. "display_log
Ejemplo con double click & user command
Habilitar/Deshabilitar columna como llave
DATA: gt_columns TYPE salv_t_column_ref, lr_tabcol TYPE REF TO cl_salv_column_table, sg_columns TYPE salv_s_column_ref. TRY. CALL METHOD lr_columns->get RECEIVING value = gt_columns. LOOP AT gt_columns INTO sg_columns. CASE sg_columns-columnname. WHEN 'ID_TRAN'. TRY. lr_tabcol ?= sg_columns-r_column. lr_tabcol->set_key( if_salv_c_bool_sap=>false ). ENDTRY. ENDCASE. ENDLOOP. ENDTRY.
Ejemplo Top of List
data lr_grid TYPE REF TO cl_salv_form_layout_grid. PERFORM create_top_of_list CHANGING lr_grid. gr_table->set_top_of_list( lr_grid ). FORM create_top_of_list CHANGING lr_grid TYPE REF TO cl_salv_form_layout_grid. DATA : lr_flow TYPE REF TO cl_salv_form_layout_flow, l_text TYPE string. l_text = sy-title. CREATE OBJECT lr_grid. CALL METHOD lr_grid->create_header_information EXPORTING row = 1 column = 1 * ROWSPAN = * COLSPAN = text = l_text tooltip = sy-title. ********************************************* **... add a row to the grid -> row 2 * lr_grid->add_row( ). *... in the cell [2,1] create a grid DATA(lr_grid_1) = lr_grid->create_grid( row = 2 column = 1 ). *... in the cell [1,1] of the second Grid create a label DATA(lr_label) = lr_grid_1->create_label( row = 1 column = 1 text = 'Fecha:'(t02) tooltip = 'Fecha:'(t02) ). l_text = |{ sy-datum DATE = USER }|. *... in the cell [1,2] of the second Grid create a text DATA(lr_text) = lr_grid_1->create_text( row = 1 column = 2 text = l_text tooltip = l_text ). lr_label->set_label_for( lr_text ). ************************************************ *... in the cell [2,1] of the second Grid create a label l_text = TEXT-t01. lr_label = lr_grid_1->create_label( row = 2 column = 1 text = l_text tooltip = l_text ). *... in the cell [2,2] of the second Grid create a text l_text = p_file. lr_text = lr_grid_1->create_text( row = 2 column = 2 text = l_text tooltip = l_text ). lr_label->set_label_for( lr_text ). ************************************************ ENDFORM. "create_top_of_list
Agregar logo
*--------------------------------------------------------------------* * Create logo layout, set grid content on left and logo image on right *--------------------------------------------------------------------* DATA lr_logo TYPE REF TO cl_salv_form_layout_logo. CREATE OBJECT lr_logo. lr_logo->set_left_content( lr_grid ). * ***** lr_logo->set_right_logo( 'ZLOGO' ). "'ENJOYSAP_LOGO' * Set element top_of_list gr_table->set_top_of_list( lr_logo ).
MACROS
DATA: l_text_l TYPE scrtext_l, l_text_m TYPE scrtext_m, l_text_s TYPE scrtext_s. *----------------------------------------------------------------------* * Set column names *----------------------------------------------------------------------* DEFINE m_column_names. l_text_l = &4. l_text_m = &3. l_text_s = &2. TRY. lr_column = lr_columns->get_column( &1 ). lr_column->set_long_text( l_text_l ). lr_column->set_medium_text( l_text_m ). lr_column->set_short_text( l_text_s ). CATCH cx_salv_not_found. CATCH cx_salv_existing. CATCH cx_salv_data_error. ENDTRY. END-OF-DEFINITION. m_column_names 'DETALLE' 'Detalle'(t03) 'Detalle'(t03) 'Detalle'(t03). DEFINE m_set_technical. TRY. lr_column = lr_columns->get_column( &1 ). lr_column->set_technical( if_salv_c_bool_sap=>true ). CATCH cx_salv_not_found. ENDTRY. END-OF-DEFINITION.
Definir campo de moneda a campos tipo moneda (CURR)
TYPES BEGIN OF ty_data, periodo type MAHD_ALV_PERIO, bukrs type p0001-bukrs, werks type p0001-werks, pernr type p0001-pernr, cname type p0002-cname, tot_hab type PAD_AMT7S, "CURR tot_hab_imp_tri type PAD_AMT7S, "CURR tot_hab_imp_no_tri type PAD_AMT7S, "CURR tot_hab_no_imp_no_tri type PAD_AMT7S, "CURR tot_hab_no_imp_tri type PAD_AMT7S, "CURR waers type waers, END OF ty_data. DATA: lr_columns TYPE REF TO cl_salv_columns_table, lr_column TYPE REF TO cl_salv_column. data gt_data type table of ty_data. data gs_data type ty_data. ... ... ... TRY. cl_salv_table=>factory( IMPORTING r_salv_table = DATA(gr_table) CHANGING t_table = gt_data ). CATCH cx_salv_msg. ENDTRY. lr_columns = gr_table->get_columns( ). perform set_moneda. ... ... FORM set_moneda. DATA lr_structdesc TYPE REF TO cl_abap_structdescr. DATA: lt_campo TYPE cl_abap_structdescr=>component_table, ls_campo TYPE abap_componentdescr. DATA: lr_descr TYPE REF TO cl_abap_elemdescr, lt_ddic_info TYPE dd_x031l_table, lrs_ddic_info TYPE REF TO x031l. DATA l_cname TYPE lvc_fname. FIELD-SYMBOLS <fs_field> TYPE ANY. lr_structdesc ?= cl_abap_typedescr=>describe_by_data( gs_data ). lt_campo = lr_structdesc->get_components( ). DO. READ TABLE lt_campo INTO ls_campo INDEX sy-index. IF sy-subrc = 0. ASSIGN COMPONENT ls_campo-name OF STRUCTURE gs_data TO <fs_field>. CASE ls_campo-type->type_kind. . WHEN 'P'. lr_descr ?= cl_abap_elemdescr=>describe_by_data( <fs_field> ). lt_ddic_info = lr_descr->get_ddic_object( ). READ TABLE lt_ddic_info INDEX 1 REFERENCE INTO lrs_ddic_info. IF sy-subrc = 0. IF lrs_ddic_info->dtyp = 'CURR'. l_cname = ls_campo-name. TRY. lr_column = lr_columns->get_column( l_cname ). lr_column->set_currency_column( 'WAERS' ). CATCH cx_salv_not_found. CATCH cx_salv_existing. CATCH cx_salv_data_error. ENDTRY. ENDIF. ENDIF. ENDCASE. ELSE. EXIT. ENDIF. ENDDO. ENDFORM. "set_moneda