quarta-feira, 10 de março de 2010

How to use ALV (example 2)

*&---------------------------------------------------------------------*
*& Report ZSL_LISTAGENS
*&
*&---------------------------------------------------------------------*
*&
*&
*&---------------------------------------------------------------------*

REPORT zsl_listagens.

TYPE-POOLS: slis.

TABLES: zslaloc, zslproj, zslcli.

DATA: BEGIN OF t_lista OCCURS 0,
zcod_proj LIKE zslaloc-zcod_proj,
zdesc_proj LIKE zslproj-zdesc_proj,
zcod_cli LIKE zslcli-zcod_cli,
znom_cli LIKE zslcli-znom_cli,
zcod_cons LIKE zslaloc-zcod_cons,
znom_cons LIKE zslcons-znom_cons,
zinicio_aloc LIKE zslaloc-zinicio_aloc,
zfim_aloc LIKE zslaloc-zfim_aloc,
END OF t_lista.

*DATA: t_lista LIKE s_lista OCCURS 0 WITH HEADER LINE.

SELECTION-SCREEN: BEGIN OF BLOCK myblock WITH FRAME TITLE text-001.

SELECT-OPTIONS: s_proj FOR zslaloc-zcod_proj,
s_cli FOR zslcli-zcod_cli,
s_cons FOR zslaloc-zcod_cons,
s_dati FOR zslaloc-zinicio_aloc.

SELECTION-SCREEN:END OF BLOCK myblock.

*&---------------------------------------------------------------------*
START-OF-SELECTION.
*&---------------------------------------------------------------------*
SELECT a~zcod_proj p~zdesc_proj p~zcod_cli cl~znom_cli
a~zcod_cons co~znom_cons a~zinicio_aloc a~zfim_aloc
FROM zslaloc AS a
INNER JOIN zslcons AS co ON a~zcod_cons = co~zcod_cons
INNER JOIN zslproj AS p ON a~zcod_proj = p~zcod_proj
INNER JOIN zslcli AS cl ON p~zcod_cli = cl~zcod_cli
INTO CORRESPONDING FIELDS OF TABLE t_lista
WHERE a~zcod_proj IN s_proj AND p~zcod_cli IN s_cli AND
a~zcod_cons IN s_cons AND a~zinicio_aloc IN s_dati.
*&---------------------------------------------------------------------*
END-OF-SELECTION.
*&---------------------------------------------------------------------*

IF t_lista[] IS INITIAL.
MESSAGE i003(zsl_m) WITH 'Não ha alocações com '
'estes critérios de selecção'.
ELSE.

PERFORM write_data.

ENDIF.
*&---------------------------------------------------------------------*
*& Form write_data
*&---------------------------------------------------------------------*
FORM write_data .

DATA: lt_fields TYPE slis_t_fieldcat_alv,
wa_fields TYPE slis_fieldcat_alv,
wa_layout TYPE slis_layout_alv.

CLEAR: lt_fields.
* wa_fields-col_pos = 1.
* wa_fields-fieldname = 'ZCOD_PROJ'.
* WA_FIELDS-seltext_m = 'Código Projecto'.
** wa_fields-ddictxt = 'M'.
* append wa_fields to lt_fields.
*
*clear: wa_fields.
* wa_fields-col_pos = 2.
* wa_fields-fieldname = 'ZCOD_CLI'.
* WA_FIELDS-seltext_m = 'Código Cliente'.
** wa_fields-ddictxt = 'M'.
* append wa_fields to lt_fields.


CALL FUNCTION 'REUSE_ALV_FIELDCATALOG_MERGE'
EXPORTING
i_program_name = sy-repid
i_internal_tabname = 'T_LISTA'
* i_structure_name = 'S_LISTA'
i_inclname = sy-repid
CHANGING
ct_fieldcat = lt_fields
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.




wa_layout-colwidth_optimize = 'X'.
wa_layout-edit = 'X'.
wa_layout-key_hotspot = 'X'."faz com que as chavez sejam clicaveis
*ficam com o fcode '&IC1'

CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
EXPORTING
i_callback_program = sy-repid
i_callback_pf_status_set = 'SET_PF_STATUS'
i_callback_user_command = 'USER_COMMAND'
is_layout = wa_layout
it_fieldcat = lt_fields
TABLES
t_outtab = t_lista
* 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




*&--------------------------------------------------------------------*
*& Form set_pf_status
*&--------------------------------------------------------------------*
* text
*---------------------------------------------------------------------*
* -->RT_EXTAB text
*---------------------------------------------------------------------*
FORM set_pf_status USING rt_extab TYPE slis_t_extab.
SET PF-STATUS 'STAT100'.
ENDFORM. "set_pf_sta

*&--------------------------------------------------------------------*
*& Form user_comand
*&--------------------------------------------------------------------*
FORM user_command USING r_ucomm LIKE sy-ucomm
rs_selfield TYPE slis_selfield.

rs_selfield-refresh = 'X'.


CASE r_ucomm.
WHEN 'BACK1'.

SET SCREEN 0.
LEAVE SCREEN.
* leave to selection-screen 1000.
WHEN 'ALOC'.
WHEN '&IC1'.
IF rs_selfield-fieldname = 'ZCOD_PROJ'.
SET PARAMETER ID 'ZPROJ' FIELD rs_selfield-value.
CALL TRANSACTION 'ZSL_PROJECT03' AND SKIP FIRST SCREEN.
ELSEIF rs_selfield-fieldname = 'ZCOD_CLI'.
SET PARAMETER ID 'ZCLI' FIELD rs_selfield-value.
CALL TRANSACTION 'ZSL_CLIENTES03' AND SKIP FIRST SCREEN.
ELSEIF rs_selfield-fieldname = 'ZCOD_CONS'.
SET PARAMETER ID 'ZCONS' FIELD rs_selfield-value.
CALL TRANSACTION 'ZSL_CONS03' AND SKIP FIRST SCREEN.
ENDIF.
WHEN OTHERS.
MESSAGE s003(zsl_m) WITH rs_selfield-sel_tab_field
rs_selfield-col_stable
rs_selfield-row_stable
rs_selfield-fieldname.



ENDCASE.


ENDFORM. "user_co

Sem comentários:

Enviar um comentário