Listado de proveedores utilizando funciones ALV
*****************
*** Prueba : 1
*** ALV de la tabla de acreedores.
*** 1.- Salto de Página
*** 2.- Botones Extras al estatus estándar.
*****************
TABLES: lfa1, lfb1, ekko, ekpo.
TYPE-POOLS: slis.
CONSTANTS:
formname_top_of_page TYPE slis_formname VALUE 'TOP_OF_PAGE',
formname_user_command TYPE slis_formname VALUE 'USER_COMMAND',
formname_before_output TYPE slis_formname VALUE 'BEFORE_OUTPUT'.
DATA: fieldtab TYPE slis_t_fieldcat_alv,
heading TYPE slis_t_listheader,
layout TYPE slis_layout_alv,
events TYPE slis_t_event,
repname LIKE sy-repid,
f2code LIKE sy-ucomm VALUE '&ETA',
g_save(1) TYPE c VALUE 'A',
g_exit(1) TYPE c,
t_sort TYPE slis_t_sortinfo_alv,
e_sort TYPE slis_sortinfo_alv,
g_variant LIKE disvariant,
gx_variant LIKE disvariant.
*----------------------------------------------------------------------
* TABLA DE DATOS
*----------------------------------------------------------------------
DATA: BEGIN OF ti_acred OCCURS 0,
selec,
bukrs LIKE lfb1-bukrs,
lifnr LIKE lfa1-lifnr,
land1 LIKE lfa1-land1,
name1 LIKE lfa1-name1,
ort01 LIKE lfa1-ort01,
pstlz LIKE lfa1-pstlz,
regio LIKE lfa1-regio,
sortl LIKE lfa1-sortl,
stras LIKE lfa1-stras,
adrnr LIKE lfa1-adrnr,
END OF ti_acred.
DATA: d_bukrs LIKE t001-bukrs.
DATA: it_fieldcat TYPE slis_t_fieldcat_alv.
*---------------------------------------------------------------------*
*-------- Pantalla de Selección ---------*
*---------------------------------------------------------------------*
SELECTION-SCREEN BEGIN OF BLOCK bloq1 WITH FRAME TITLE text-001.
SELECT-OPTIONS : lifnr FOR lfa1-lifnr,
bukrs FOR lfb1-bukrs.
SELECTION-SCREEN END OF BLOCK bloq1.
SELECTION-SCREEN BEGIN OF BLOCK bloq3 WITH FRAME TITLE text-003.
PARAMETERS: p_alvasg TYPE slis_vari. " Disposición ALV
SELECTION-SCREEN END OF BLOCK bloq3.
*--------------------------------------------------------------------*
*-------- INITIALIZATION ---------*
*--------------------------------------------------------------------*
INITIALIZATION.
repname = sy-repid.
PERFORM build_eventtab USING events[].
PERFORM build_comment USING heading[].
*--------------------------------------------------------------------*
*-------- AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_alv ------*
*--------------------------------------------------------------------*
AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_alvasg.
PERFORM alvl_value_request USING p_alvasg ' '.
*--------------------------------------------------------------------*
*-------- START-OF-SELECTION --------*
*--------------------------------------------------------------------*
START-OF-SELECTION.
PERFORM obtener_datos.
*--------------------------------------------------------------------*
*-------- END-OF-SELECTION -------*
*--------------------------------------------------------------------*
END-OF-SELECTION.
PERFORM build_layout USING layout.
PERFORM write_output.
*--------------------------------------------------------------------*
*-------- Subrutinas -------*
*--------------------------------------------------------------------*
*&-------------------------------------------------------------------*
*& Form obtener_datos
*&-------------------------------------------------------------------*
FORM obtener_datos.
REFRESH ti_acred.
CLEAR ti_acred.
SELECT * INTO CORRESPONDING FIELDS OF TABLE ti_acred
FROM lfa1
WHERE lifnr IN lifnr.
LOOP AT ti_acred.
SELECT SINGLE bukrs INTO ti_acred-bukrs FROM lfb1
WHERE lifnr = ti_acred-lifnr.
MODIFY ti_acred.
ENDLOOP.
ENDFORM.
*&---------------------------------------------------------------------
*& Form INITIALIZE_FIELDCAT
*&---------------------------------------------------------------------
FORM initialize_fieldcat USING p_fieldtab TYPE slis_t_fieldcat_alv.
DATA: l_fieldcat TYPE slis_fieldcat_alv.
* fixed columns (obligatory)
CLEAR l_fieldcat.
l_fieldcat-tabname = 'TI_ACRED'.
l_fieldcat-fix_column = 'X'.
l_fieldcat-no_out = 'O'.
l_fieldcat-fieldname = 'LIFNR'.
APPEND l_fieldcat TO p_fieldtab.
l_fieldcat-fieldname = 'NAME1'.
APPEND l_fieldcat TO p_fieldtab.
ENDFORM. " INITIALIZE_FIELDCAT
*&---------------------------------------------------------------------
*& Form modify_fieldcatalog
*&---------------------------------------------------------------------
FORM modify_fieldcatalog USING p_fieldtab TYPE slis_t_fieldcat_alv.
DATA: l_fieldcat TYPE slis_fieldcat_alv.
* fixed columns (obligatory)
read table p_fieldtab with key fieldname = 'SELEC' into l_fieldcat.
l_fieldcat-no_out = 'X'.
modify p_fieldtab from l_fieldcat index sy-tabix.
ENDFORM. " INITIALIZE_FIELDCAT
*&---------------------------------------------------------------------
*& Form BUILD_EVENTTAB
*&---------------------------------------------------------------------
FORM build_eventtab USING p_events TYPE slis_t_event.
DATA: ls_event TYPE slis_alv_event.
CALL FUNCTION 'REUSE_ALV_EVENTS_GET'
EXPORTING
i_list_type = 0
IMPORTING
et_events = p_events.
READ TABLE p_events WITH KEY name = slis_ev_top_of_page
INTO ls_event.
IF sy-subrc = 0.
MOVE formname_top_of_page TO ls_event-form.
APPEND ls_event TO p_events.
ENDIF.
READ TABLE p_events WITH KEY name = slis_ev_user_command
INTO ls_event.
IF sy-subrc = 0.
MOVE formname_user_command TO ls_event-form.
APPEND ls_event TO p_events.
ENDIF.
READ TABLE p_events WITH KEY name = slis_ev_before_line_output
INTO ls_event.
IF sy-subrc = 0.
MOVE formname_before_output TO ls_event-form.
APPEND ls_event TO p_events.
ENDIF.
ENDFORM. " BUILD_EVENTTAB
*&---------------------------------------------------------------------
*& Form BUILD_COMMENT
*&---------------------------------------------------------------------
FORM build_comment USING p_heading TYPE slis_t_listheader.
DATA: hline TYPE slis_listheader,
text(60) TYPE c,
sep(20) TYPE c.
CLEAR: hline, text.
hline-typ = 'H'.
WRITE: text-101 TO text+23.
hline-info = text.
APPEND hline TO p_heading.
CLEAR text.
WRITE: 'User: ' TO text,
sy-uname TO text+6,
'Date: ' TO text+25,
sy-datum TO text+31,
'Page: ' TO text+50,
sy-pagno TO text+56.
hline-info = text.
APPEND hline TO p_heading.
ENDFORM. " BUILD_COMMENT
*---------------------------------------------------------------------*
* FORM TOP_OF_PAGE *
*---------------------------------------------------------------------*
FORM top_of_page.
CALL FUNCTION 'REUSE_ALV_COMMENTARY_WRITE'
EXPORTING
i_logo = 'ENJOYSAP_LOGO'
it_list_commentary = heading.
ENDFORM.
*&---------------------------------------------------------------------
*& Form ALVL_VALUE_REQUEST
*&---------------------------------------------------------------------
FORM alvl_value_request USING pi_alv
value(p_0158).
DATA: l_disvariant TYPE disvariant.
* Wertehilfe
l_disvariant-report = sy-cprog.
* l_disvariant-report(1) = 'A'.
l_disvariant-variant = pi_alv.
l_disvariant-log_group = p_0158.
CALL FUNCTION 'LVC_VARIANT_SAVE_LOAD'
EXPORTING
i_save_load = 'F'
i_tabname = '1'
CHANGING
cs_variant = l_disvariant
EXCEPTIONS
OTHERS = 1.
IF sy-subrc = 0.
pi_alv = l_disvariant-variant.
ELSE.
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ENDIF.
ENDFORM. " ALVL_VALUE_REQUEST
*&---------------------------------------------------------------------
*& Form BUILD_LAYOUT
*&---------------------------------------------------------------------
FORM build_layout USING p_layout TYPE slis_layout_alv.
p_layout-f2code = f2code.
p_layout-zebra = 'X'.
p_layout-detail_popup = 'X'.
p_layout-box_fieldname = 'SELEC'.
p_layout-colwidth_optimize = 'X'.
p_layout-cell_merge = 'X'.
p_layout-detail_initial_lines = 'X'.
p_layout-window_titlebar =
'Ejemplo de ALV con diferentes opciones'.
ENDFORM. " BUILD_LAYOUT
*&---------------------------------------------------------------------
*& Form WRITE_OUTPUT
*&---------------------------------------------------------------------
FORM write_output.
CALL FUNCTION 'REUSE_ALV_FIELDCATALOG_MERGE'
EXPORTING
i_program_name = repname
i_internal_tabname = 'TI_ACRED'
i_inclname = repname
CHANGING
ct_fieldcat = fieldtab.
IF sy-subrc <> 0.
WRITE: 'SY-SUBRC: ', sy-subrc, 'REUSE_ALV_FIELDCATALOG_MERGE'.
ENDIF.
* Modificamos el catálogo de campos.
perform modify_fieldcatalog USING fieldtab[].
* Tabla con los campos por los se ordenarán el listado en el
* List Viewer
* La ordenación se realizará por: destinatario, ciente, pedido y
* posición de pedido.
PERFORM ordenar_listado USING: 1 'LIFNR' 'X' ' '.
* 2 'VBELN' 'X' ' '.
* 3 'POSNR' 'X' ' '.
* Informar Disposición de Salida
CLEAR g_variant.
g_variant-report = sy-repid.
g_variant-variant = p_alvasg.
g_variant-log_group = ' '.
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
EXPORTING
i_callback_program = repname
i_callback_pf_status_set = 'SET_PF_STATUS'
i_callback_user_command = 'USER_COMMAND'
i_callback_top_of_page = 'TOP_OF_PAGE'
i_structure_name = 'TI_ACRED'
is_layout = layout
it_fieldcat = fieldtab
i_default = 'X'
i_save = g_save
is_variant = g_variant
it_events = events[]
TABLES
t_outtab = ti_acred
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. " WRITE_OUTPUT
*---------------------------------------------------------------------
* Form ordenar_listado
*---------------------------------------------------------------------
* Tabla con los campos por los se ordenarán el listado en el
* List Viewer
*----------------------------------------------------------------------
FORM ordenar_listado USING p_spos p_fieldname p_up p_subtot.
CLEAR t_sort.
CLEAR e_sort.
e_sort-spos = p_spos.
e_sort-fieldname = p_fieldname.
e_sort-up = p_up.
e_sort-subtot = p_subtot.
APPEND e_sort TO t_sort.
ENDFORM. " ordenar_listado
*---------------------------------------------------------------------
* Form refrescar
*---------------------------------------------------------------------
FORM refrescar USING p_refresh.
p_refresh = 'X'.
ENDFORM. " refrescar
|