_alvshow #alv
*----------------------------------------------------------------------*
* Mostrar alv
* Ver 1.0
*----------------------------------------------------------------------*
FORM _alv CHANGING ct_table TYPE STANDARD TABLE.
DATA: ls_layo TYPE lvc_s_layo,
lt_fcat TYPE lvc_t_fcat.
* lt_event TYPE slis_t_event.
* ls_vari TYPE disvariant.
* ls_print TYPE lvc_s_prnt.
FIELD-SYMBOLS: <fs_fcat> TYPE lvc_s_fcat.
"Layout
ls_layo-cwidth_opt = abap_on.
ls_layo-col_opt = abap_on.
ls_layo-zebra = abap_on.
* ls_layo-box_fname = 'BOX'. "Columna seleccionable
* ls_layo-no_rowmark = abap_on. "Ocultar columna seleccionable
* ls_layo-grid_title = 'Reporte'. "Título del reporte
** Para style por celda
* ls_layo-stylefname = 'T_STYLE'. "Campo para añadir stylo por celda
* t_style type lvc_t_styl
* ls_style-fieldname = 'CANT'.
* ls_style-style = cl_gui_alv_grid=>mc_style_disabled.
* append ls_style into table ls_report-t_style.
** Para pintar filas
* ls_report-color = 'C700'. "Fila se pintará, campo color en la tabla report
* ls_layo-info_fname = 'COLOR'. "Nombre del Campo(char04) que lleva el color
* Para permitir grabar variante
* ls_vari-handle = sy-dynnr.
* ls_vari-username = sy-uname.
* ls_vari-report = sy-repid.
* ls_vari-variant = i_variant. "Disposición personalizado
** Para imprimir
* ls_print-prntselinf = 'X'.
* ls_print-prntlstinf = 'X'.
**Añadir evento
* perform _100eventos changing lt_event.
"Catálogo
* CALL FUNCTION 'LVC_FIELDCATALOG_MERGE'
* EXPORTING
* i_structure_name = sy-repid(30)
* CHANGING
* ct_fieldcat = lt_fcat.
PERFORM _getfcat USING abap_on CHANGING ct_table lt_fcat.
"Fcat - Descripción
"LOOP AT lt_fcat ASSIGNING <fs_fcat>.
" CASE <fs_fcat>-fieldname.
"WHEN 'ICON'. <fs_fcat>-hotspot = abap_on. <fs_fcat>-just = 'C'.
"WHEN 'MESSAGE4'. <fs_fcat>-tech = abap_on.
"WHEN 'TEXT'. <fs_fcat>-edit = abap_on.
"WHEN 'STAT_USER'. <fs_fcat>-outputlen = 4.
"WHEN 'NETWR'. <fs_fcat>-emphasize = 'C700'.
"WHEN 'K0001'. PERFORM _fcatname USING 'Observación' '' CHANGING <fs_fcat>.
" ENDCASE.
"ENDLOOP.
"Alv
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY_LVC'
EXPORTING
i_bypassing_buffer = abap_on
i_buffer_active = abap_on
i_callback_program = sy-repid
* i_callback_pf_status_set = '_100ST'
* i_callback_top_of_page = '_100TOP'
* i_callback_user_command = '_100UC'
* i_grid_title = 'Titulo'
is_layout_lvc = ls_layo
it_fieldcat_lvc = lt_fcat
i_save = 'A'
* is_variant = ls_vari
* is_print_lvc = ls_print
TABLES
t_outtab = ct_table
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.
*----------------------------------------------------------------------*
* Obtiene catálogo de manera dinámica
*----------------------------------------------------------------------*
FORM _getfcat USING i_clearpos TYPE xfeld
CHANGING ct_table TYPE STANDARD TABLE
et_fcat TYPE lvc_t_fcat.
DATA: lo_alv TYPE REF TO cl_salv_table,
lo_cols TYPE REF TO cl_salv_columns_table,
lo_aggr TYPE REF TO cl_salv_aggregations,
ls_fcat LIKE LINE OF et_fcat.
TRY .
cl_salv_table=>factory( IMPORTING r_salv_table = lo_alv
CHANGING t_table = ct_table ).
CATCH cx_salv_msg. "#EC NO_HANDLER
ENDTRY.
lo_cols = lo_alv->get_columns( ).
lo_aggr = lo_alv->get_aggregations( ).
et_fcat = cl_salv_controller_metadata=>get_lvc_fieldcatalog(
r_columns = lo_cols
r_aggregations = lo_aggr
).
IF i_clearpos = abap_on.
MODIFY et_fcat FROM ls_fcat TRANSPORTING col_pos WHERE col_pos <> space.
ENDIF.
ENDFORM.
*----------------------------------------------------------------------*
* Modificar nombre de un campo de catálogo
*----------------------------------------------------------------------*
FORM _fcatname USING i_unico TYPE clike "Recomendable 20
i_large TYPE clike "Recomendable 40
CHANGING cs_fcat TYPE lvc_s_fcat.
DATA: l_large TYPE string.
"Inicializa
CLEAR: cs_fcat-scrtext_s.
CLEAR: cs_fcat-scrtext_m.
CLEAR: cs_fcat-rollname.
l_large = i_large.
IF l_large IS INITIAL.
l_large = i_unico.
ENDIF.
"Asigna textos
IF strlen( i_unico ) LE 10.
cs_fcat-scrtext_s = i_unico. "10
ENDIF.
IF strlen( i_unico ) LE 20.
cs_fcat-scrtext_m = i_unico. "20
ENDIF.
cs_fcat-coltext = i_unico. "40
cs_fcat-reptext = i_unico. "55
cs_fcat-seltext = l_large. "40
cs_fcat-scrtext_l = l_large. "40
ENDFORM.
*----------------------------------------------------------------------*
* Status del alv 0100 sin status
*----------------------------------------------------------------------*
FORM _100st USING ct_excl TYPE slis_t_extab.
data: lt_fcode type table of smp_dyntxt,
ls_fcode like line of lt_fcode.
"Añadir a exclusión
APPEND '&AQW' TO ct_excl. "ambos - tratamiento de textos
APPEND '%PC' TO ct_excl. "ambos - fichero local
APPEND '%SL' TO ct_excl. "ambos - envio mail
APPEND '&ABC' TO ct_excl. "ambos - abc
APPEND '&VEXCEL' TO ct_excl. "alv grid - excel incrustado
APPEND '&GRAPH' TO ct_excl. "alv grid - grafico
APPEND '&INFO' TO ct_excl. "alv grid - info
APPEND 'DNOT' TO ct_excl. "alv list - visualizar nota
APPEND 'CNOT' TO ct_excl. "alv list - tratar nota
APPEND '&REFRESH' TO ct_excl. "ambos - refrescar
"APPEND '&DATA_SAVE' TO ct_excl. "alv list - grabar
"Hana
SELECT SINGLE COUNT(*) FROM cvers WHERE component = 'S4CORE'.
IF sy-subrc = 0.
APPEND '&UMC' TO ct_excl. "ambos - suma
APPEND '&SUM' TO ct_excl. "ambos - subtotal
APPEND '&OL0' TO ct_excl. "ambos - modificar disposición
APPEND '&AVE' TO ct_excl. "ambos - grabar disposición
ENDIF.
""Añadir FC01
"ls_fcode-icon_id = icon_print.
"ls_fcode-icon_text = 'Imprimir'.
"ls_fcode-text = 'Imprimir Formulario'.
"APPEND ls_fcode TO lt_fcode.
PERFORM dynamic_report_fcodes IN PROGRAM rhteiln0 TABLES lt_fcode USING ct_excl '' ''.
SET PF-STATUS 'ALVLIST' EXCLUDING ct_excl OF PROGRAM 'RHTEILN0'.
ENDFORM.
*----------------------------------------------------------------------*
* User_command del alv 0100
*----------------------------------------------------------------------*
FORM _100uc USING i_ucomm TYPE sy-ucomm
cs_sel TYPE slis_selfield.
* DATA: ls_report LIKE LINE OF gt_report.
CASE i_ucomm.
WHEN '&IC1'. "Evento click
* READ TABLE gt_report INTO ls_report INDEX cs_sel-tabindex.
* CASE cs_sel-fieldname.
* WHEN 'ICON'. go_con->ver_detalle( ls_report ).
* WHEN 'VBELN'. PERFORM _show_va03 USING ls_report-vbeln.
* WHEN 'STAT'. PERFORM _showalvpopup USING 160 12 ls_report-t_statu.
* WHEN OTHERS.
* ENDCASE.
WHEN 'FC01'.
WHEN '&DATA_SAVE'.
WHEN '/&REFRESH'.
* PERFORM create_report.
cs_sel-refresh = abap_on.
cs_sel-col_stable = abap_on.
cs_sel-row_stable = abap_on.
WHEN OTHERS.
ENDCASE.
ENDFORM.
*----------------------------------------------------------------------*
* Verifica selección
*----------------------------------------------------------------------*
FORM _100isselected.
* DATA: ls_report LIKE LINE OF gt_report.
* READ TABLE gt_report WITH KEY box = abap_on TRANSPORTING NO FIELDS.
IF sy-subrc <> 0.
* MESSAGE s000 WITH 'Debe seleccionar linea(s)'.
sy-subrc = 1.
ENDIF.
ENDFORM.