sexta-feira, 6 de janeiro de 2012

Função - RS_SUPPORT_SELECTIONS

"  Vou mostra agora como trabalhar com uma função muito interessante, na
" verdade ela ajuda muito pois vai mostrar a tela já alimentada pela
" variante de tela informada, pra deixar um pouco mais legal estarei fazendo
" um programa que verifica a ultima variante de tela criada para o programa
" mostrar.
" Não Lembra sobre Variante de Tela, acesse :
 http://abapjuniores.blogspot.com/2012/01/variante-da-tela.html



REPORT  zmjrs_support_selections.

" Tipos.
TYPES :
  BEGIN OF ty_maior,
    report  TYPE varid-report,
    variant TYPE varid-variant,
    date    TYPE varid-aedat,
    time    TYPE varid-etime,
  END OF   ty_maior
  .

" Tabela Interna
DATA : it_varid TYPE TABLE OF varid,
       it_maior TYPE TABLE OF ty_maior
       .

" Estrutura
DATA : st_varid TYPE varid,
       st_maior TYPE ty_maior
       .

" Tela de seleção
SELECTION-SCREEN BEGIN OF BLOCK b1 WITH FRAME.
PARAMETERS :
p_par1 TYPE matnr,
p_par2 TYPE matnr
.
SELECTION-SCREEN END OF BLOCK  b1.

INITIALIZATION.

  PERFORM : zf_busca_ultima_variante.



*&---------------------------------------------------------------------*
*&      Form  ZF_BUSCA_ULTIMA_VARIANTE
*&---------------------------------------------------------------------*
FORM zf_busca_ultima_variante .

" Busca na tabela VARID todas as variantes do programa em execução
  SELECT *
    FROM varid
    INTO TABLE it_varid
    WHERE report sy-repid.

" Se não veio nenhum dado.
  IF it_varid[] IS INITIAL.
    " Cai fora
    EXIT.
  ELSE.

" Se a quantidade de linhas na tabela for = a 1.
    IF linesit_varid 1.
      " Lê o primeiro ( e único ) e executa a função.
      READ TABLE it_varid INTO st_varid
        INDEX 1.
      PERFORM zf_rs_support_selections USING : st_varid-report
                                               st_varid-variant
                                               .
" Se a quantidade de linhas na tabela for <> de 1.
    ELSE.
      LOOP AT it_varid INTO st_varid.
        MOVE : st_varid-report  TO st_maior-report,
               st_varid-variant TO st_maior-variant
               .
        " Se for a primeira versão ou o campo aename for vazio.
        IF st_varid-version 1
          OR st_varid-aename IS INITIAL.
          MOVE : st_varid-edat    TO st_maior-date,
                 st_varid-etime   TO st_maior-time
                 .
          " Adiciona o registro na tabela interna
          APPEND st_maior TO it_maior.
        " Se não for a primeira versão ou o campo aename não for vazio.
        ELSE.
          MOVE : st_varid-aedat   TO st_maior-date,
                 st_varid-aetime  TO st_maior-time
            .
          " Adiciona o registrp na tabela interna
          APPEND st_maior TO it_maior.

        ENDIF.

      ENDLOOP.

" Ordena a tabela de forma decrescente pelos campos informados.
      SORT it_maior BY date DESCENDING
                       time DESCENDING
                       .
" Lê o primeiro registro e executa a função.
      READ TABLE it_maior INTO st_maior
        INDEX 1.
      PERFORM zf_rs_support_selections USING : st_maior-report
                                               st_maior-variant
                                               .
    ENDIF.

  ENDIF.

ENDFORM.                    " ZF_BUSCA_ULTIMA_VARIANTE


*&---------------------------------------------------------------------*
*&      Form  ZF_RS_SUPPORT_SELECTIONS
*&---------------------------------------------------------------------*
FORM zf_rs_support_selections  USING    report
                                        variant.

  CALL FUNCTION 'RS_SUPPORT_SELECTIONS'
    EXPORTING
      report               report    " Programa em execução
      variant              variant   " Variante a ser mostrado na tela
    EXCEPTIONS
      variant_not_existent 1
      variant_obsolete     2
      OTHERS               3.


ENDFORM.                    " ZF_RS_SUPPORT_SELECTIONS
Comentários
0 Comentários

Nenhum comentário:

Postar um comentário