快速建立 ALV_LIST 報表
以下分為幾個段落,可以快速的建立 ALV_LIST 的報表。
Define
TYPE-POOLS: slis.
* Global variables for handling ALV functionality
CONSTANTS: alv_status TYPE slis_formname VALUE 'SET_STATUS',
alv_ucommd TYPE slis_formname VALUE 'USER_COMMAND'.
DATA: alv_repid LIKE sy-repid,
alv_field TYPE slis_fieldcat_alv,
alv_event TYPE slis_alv_event,
alv_layout TYPE slis_layout_alv,
alv_sort TYPE slis_sortinfo_alv,
alv_print TYPE slis_print_alv,
alv_t_field TYPE slis_t_fieldcat_alv,
alv_t_events TYPE slis_t_event,
alv_t_sort TYPE slis_t_sortinfo_alv.
INITIALIZATION
*---------------- * INITIALIZATION *---------------- INITIALIZATION. alv_repid = sy-repid.
Data_Print
報表顯示的資料請放在 gt_itab 的 Internal table 裡面。
FORM data_print.
PERFORM alvevent.
PERFORM alvfield.
PERFORM alvsort.
alv_layout-colwidth_optimize = 'X'.
alv_layout-get_selinfos = 'X'.
alv_layout-zebra = 'X'.
* alv_layout-numc_sum = 'X'
* alv_layout-box_fieldname = 'SELEC'.
* alv_layout-box_tabname = 'GT_VBRK'.
* alv_layout-f2code = '&F2C'.
* alv_layout-no_totalline = 'X'.
* alv_layout-group_change_edit = 'X'.
alv_print-no_print_listinfos = 'X'.
alv_print-no_print_selinfos = 'X'.
alv_print-no_coverpage = 'X'.
CALL FUNCTION 'REUSE_ALV_LIST_DISPLAY'
EXPORTING
i_callback_program = alv_repid
i_callback_pf_status_set = alv_status
i_callback_user_command = alv_ucommd
it_fieldcat = alv_t_field
i_save = 'A'
it_events = alv_t_events
is_layout = alv_layout
it_sort = alv_t_sort
is_print = alv_print
TABLES
t_outtab = gt_itab
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.
ALV_EVENT
*&---------------------------------------------------------------------* *& Form alvevent *&---------------------------------------------------------------------* * ALV Event *----------------------------------------------------------------------* FORM alvevent . CLEAR alv_event. alv_event-name = slis_ev_top_of_page. alv_event-form = 'LIST_HEADER'. APPEND alv_event TO alv_t_events. ENDFORM. "alvevent
ALV_FIELDS
Fields 也有 Function 可以直接建立,只是手動建立的自主性較高。
*&---------------------------------------------------------------------* *& Form alvfield *&---------------------------------------------------------------------* * ALV Fields *----------------------------------------------------------------------* FORM alvfield . DATA: l_count TYPE i. * CLEAR alv_field. l_count = l_count + 1. alv_field-col_pos = l_count. alv_field-fieldname = 'FKDAT'. alv_field-seltext_s = 'DATE'. alv_field-key = 'X'. " define field as key APPEND alv_field TO alv_t_field. * CLEAR alv_field. l_count = l_count + 1. alv_field-col_pos = l_count. alv_field-fieldname = 'FKIMG'. alv_field-seltext_s = 'Quantity'. alv_field-decimals_out = '0'. alv_field-do_sum = 'X'. APPEND alv_field TO alv_t_field. * CLEAR alv_field. l_count = l_count + 1. alv_field-col_pos = l_count. alv_field-fieldname = 'AMOU0'. alv_field-seltext_s = 'Amount'. alv_field-currency = 'TWD'. " alv_field-cfieldname = 'WAERK'. APPEND alv_field TO alv_t_field. * CLEAR alv_field. l_count = l_count + 1. alv_field-col_pos = l_count. alv_field-fieldname = 'VRKME'. alv_field-seltext_s = 'UoM'. alv_field-ref_tabname = 'T006'. " Reference Table alv_field-ref_fieldname = 'MSEHI'. " Reference Field * CLEAR alv_field. l_count = l_count + 1. alv_field-col_pos = l_count. alv_field-fieldname = 'VKBUR'. alv_field-seltext_s = 'OFFICE'. alv_field-no_out = 'X'. " No Output direct APPEND alv_field TO alv_t_field. * * .... Enter ALL of your fields at here. ENDFORM. "alvfield
用 Function 建立的範例:
DATA: lv_tabix LIKE sy-tabix.
CALL FUNCTION 'REUSE_ALV_FIELDCATALOG_MERGE'
EXPORTING
i_program_name = alv_repid
i_internal_tabname = 'GT_ITAB'
i_inclname = alv_repid
CHANGING
ct_fieldcat = alv_t_field
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.
LOOP AT alv_t_field INTO alv_field.
lv_tabix = sy-tabix.
CASE alv_field-fieldname.
WHEN 'FKDAT'.
alv_field-seltext_s = 'DATE'.
alv_field-ddictxt = 'S'.
WHEN 'FKIMG'.
alv_field-seltext_s = 'Quantity'.
alv_field-ddictxt = 'S'.
alv_field-decimals_out = '0'.
alv_field-do_sum = 'X'.
WHEN 'AMOU0'.
alv_field-seltext_s = 'Amount'.
alv_field-ddictxt = 'S'.
alv_field-currency = 'TWD'.
WHEN 'VKBUR'.
alv_field-seltext_s = 'OFFICE'.
alv_field-ddictxt = 'S'.
alv_field-no_out = 'X'. " No Output direct
ENDCASE.
MODIFY alv_t_field FROM alv_field INDEX lv_tabix.
ENDLOOP.
ALV_SORT
*&---------------------------------------------------------------------*
*& Form alvsort
*&---------------------------------------------------------------------*
* ALV Sort
*----------------------------------------------------------------------*
FORM alvsort .
DATA lv_counter TYPE i.
CLEAR alv_sort.
lv_counter = lv_counter + 1.
alv_sort-spos = lv_counter.
alv_sort-fieldname = 'KUNSP'.
alv_sort-tabname = 'GT_ITAB'.
alv_sort-subtot = 'X'.
alv_sort-up = 'X'.
alv_sort-group = 'UL'. " UL : Split by Line,
" * : Split by Page.
APPEND alv_sort TO alv_t_sort.
CLEAR alv_sort.
lv_counter = lv_counter + 1.
alv_sort-spos = lv_counter.
alv_sort-fieldname = 'FKDAT'.
alv_sort-tabname = 'GT_ITAB'.
alv_sort-up = 'X'.
alv_sort-group = ' '.
APPEND alv_sort TO alv_t_sort.
ENDFORM. "alvsort
Set_Status
*&---------------------------------------------------------------------* *& Form set_status *&---------------------------------------------------------------------* * Set Status *----------------------------------------------------------------------* FORM set_status USING rt_extab TYPE slis_t_extab. SET PF-STATUS 'STANDARD' EXCLUDING rt_extab. ENDFORM. "set_status
User_Command
*---------------------------------------------------------------------*
* FORM USER_COMMAND *
*---------------------------------------------------------------------*
FORM user_command USING i_ucomm TYPE syucomm
is_selfield TYPE slis_selfield. "#EC CALLED
DATA: lv_datum LIKE sy-datum.
CASE i_ucomm.
WHEN '&IC1'. " double click
READ TABLE gt_itab INDEX is_selfield-tabindex.
SET PARAMETER ID 'VF' FIELD gt_itab-vbeln.
CALL TRANSACTION 'VF03' AND SKIP FIRST SCREEN.
ENDCASE.
ENDFORM. " USER_COMMAND
List_Header
*&---------------------------------------------------------------------*
*& Form list_header
*&---------------------------------------------------------------------*
* List Header
*----------------------------------------------------------------------*
FORM list_header.
DATA: lv_linsz LIKE sy-linsz.
lv_linsz = sy-linsz - 20.
WRITE: /001(sy-linsz) 'XXX sheet' CENTERED,
/001 'Date :' ,sy-datum.
WRITE AT: lv_linsz 'Page No :' ,(4) sy-pagno.
ULINE.
ENDFORM. "list_header
沒有留言:
張貼留言