* Eae, vou comentar hoje como usar o parametro 'IT_SORT' da função que
* cria o ALV, esse parametro informa um ou mais campos da tela que será
* ordenado da forma que desejar também, segue aee o código comentado,
* adicionei algumas propriedade no alv como somatória por subtotal, usando
* o parametro 'IT_SORT' e 'IT_FIELDCAT', bons estudos.
*&---------------------------------------------------------------------*
REPORT z_alv_sort.
* Declaração do grupo de types para criação do ALV.
TYPE-POOLS :
slis.
* Tabelas Transparentes
TABLES :
spfli,
sflight.
* Tabelas Internas
DATA : it_spfli TYPE TABLE OF spfli,
st_spfli TYPE spfli,
it_sflight TYPE TABLE OF sflight,
st_sflight TYPE sflight
.
* Estruturas e tabelas internas para uso do ALV
DATA : it_fieldcat TYPE TABLE OF slis_fieldcat_alv,
st_fieldcat TYPE slis_fieldcat_alv,
it_sort TYPE TABLE OF slis_sortinfo_alv,
st_sort TYPE slis_sortinfo_alv,
it_layout TYPE TABLE OF slis_layout_alv,
st_layout TYPE slis_layout_alv
.
* Tela de seleção
SELECTION-SCREEN BEGIN OF BLOCK b1 WITH FRAME.
PARAMETERS :
p_carrid TYPE spfli-carrid.
SELECT-OPTIONS :
s_connid FOR spfli-connid.
SELECTION-SCREEN END OF BLOCK b1.
START-OF-SELECTION.
* Seleções
PERFORM zf_selects.
* Relatorio
PERFORM zf_relatorio.
*&---------------------------------------------------------------------*
*& Form zf_selects
*&---------------------------------------------------------------------*
FORM zf_selects .
SELECT *
FROM spfli
INTO TABLE it_spfli
WHERE carrid = p_carrid
AND connid IN s_connid
.
SELECT *
FROM sflight
INTO TABLE it_sflight
FOR ALL ENTRIES IN it_spfli
WHERE carrid = it_spfli-carrid
AND connid = it_spfli-connid
.
ENDFORM. " zf_selects
*&---------------------------------------------------------------------*
*& Form zf_relatorio
*&---------------------------------------------------------------------*
FORM zf_relatorio .
* Trata os dados do catalogo de campos do ALV
PERFORM zf_fieldcat.
* Trata os dados de ordenação do ALV
PERFORM zf_sort.
* Trata a tela do ALV
PERFORM zf_layout.
* Cria o ALV bunitin
PERFORM zf_alv.
ENDFORM. " zf_relatorio
*&---------------------------------------------------------------------*
*& Form zf_fieldcat
*&---------------------------------------------------------------------*
FORM zf_fieldcat .
* http://abapjuniores.blogspot.com.br/2012/04/funcao-reusealvfieldcatalogmerge.html
CALL FUNCTION 'REUSE_ALV_FIELDCATALOG_MERGE'
EXPORTING
* i_program_name =
* i_internal_tabname =
i_structure_name = 'SFLIGHT'
* i_client_never_display = 'X'
* I_INCLNAME =
* I_BYPASSING_BUFFER =
* I_BUFFER_ACTIVE =
CHANGING
ct_fieldcat = it_fieldcat
EXCEPTIONS
inconsistent_interface = 1
program_error = 2
OTHERS = 3
.
* Tratativa para efetuar a soma do campo
LOOP AT it_fieldcat INTO st_fieldcat.
IF st_fieldcat-fieldname = 'PAYMENTSUM'.
st_fieldcat-do_sum = 'X'.
MODIFY it_fieldcat FROM st_fieldcat.
ENDIF.
ENDLOOP.
ENDFORM. " zf_fieldcat
*&---------------------------------------------------------------------*
*& Form zf_alv
*&---------------------------------------------------------------------*
FORM zf_alv .
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
EXPORTING
* I_INTERFACE_CHECK = ' '
* I_BYPASSING_BUFFER = ' '
* I_BUFFER_ACTIVE = ' '
* I_CALLBACK_PROGRAM = ' '
* I_CALLBACK_PF_STATUS_SET = ' '
* I_CALLBACK_USER_COMMAND = ' '
* I_CALLBACK_TOP_OF_PAGE = ' '
* I_CALLBACK_HTML_TOP_OF_PAGE = ' '
* I_CALLBACK_HTML_END_OF_LIST = ' '
* I_STRUCTURE_NAME =
* I_BACKGROUND_ID = ' '
* I_GRID_TITLE =
* I_GRID_SETTINGS =
is_layout = st_layout
it_fieldcat = it_fieldcat
* IT_EXCLUDING =
* IT_SPECIAL_GROUPS =
it_sort = it_sort
* IT_FILTER =
* IS_SEL_HIDE =
* I_DEFAULT = 'X'
i_save = 'X'
* IS_VARIANT =
* IT_EVENTS =
* IT_EVENT_EXIT =
* IS_PRINT =
* IS_REPREP_ID =
* I_SCREEN_START_COLUMN = 0
* I_SCREEN_START_LINE = 0
* I_SCREEN_END_COLUMN = 0
* I_SCREEN_END_LINE = 0
* I_HTML_HEIGHT_TOP = 0
* I_HTML_HEIGHT_END = 0
* IT_ALV_GRAPHICS =
* IT_HYPERLINK =
* IT_ADD_FIELDCAT =
* IT_EXCEPT_QINFO =
* IR_SALV_FULLSCREEN_ADAPTER =
* IMPORTING
* E_EXIT_CAUSED_BY_CALLER =
* ES_EXIT_CAUSED_BY_USER =
TABLES
t_outtab = it_sflight
EXCEPTIONS
program_error = 1
OTHERS = 2
.
ENDFORM. " zf_alv
*&---------------------------------------------------------------------*
*& Form zf_sort
*&---------------------------------------------------------------------*
FORM zf_sort .
* trata a ordenação do campo CARRID
st_sort-fieldname = 'CARRID'.
st_sort-up = 'X'. " Ordenado do menor pro maior
st_sort-subtot = 'X'. " declara o campo como subtotal da soma
APPEND st_sort TO it_sort. " Alimenta a tabela com as info da estruc.
CLEAR st_sort. " Limpa a estrutura para não levar sujeira
st_sort-fieldname = 'CONNID'.
st_sort-up = 'X'.
st_sort-subtot = 'X'.
APPEND st_sort TO it_sort.
CLEAR st_sort.
ENDFORM. " zf_sort
*&---------------------------------------------------------------------*
*&---------------------------------------------------------------------*
FORM zf_layout .
st_layout-zebra = 'X'.
st_layout-colwidth_optimize = 'X'.
ENDFORM. " zf_layout