terça-feira, 7 de agosto de 2012

ALV - 'IT_SORT', somatória e subtotal

  *  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
Comentários
0 Comentários

Nenhum comentário:

Postar um comentário