Conteúdo

ALV Simplão com hotspot que chama a VA02


ALV que lista os documentos da VBAK, e ao clicar no documento, você é direcionado para VA02.
REPORT ZSAPeiros.

* DEFINIÇÃO DE TIPOS ---------------------------------------------------
TYPES:
  BEGIN OF ty_relatorio,
    vbeln         TYPE          vbak-vbeln,         "Documento de vendas
    erdat         TYPE          vbak-erdat,         "Data criação
    END OF ty_relatorio.


* TABELAS/ESTRUTURAS INTERNAS ------------------------------------------
DATA:
  t_fieldcat      TYPE          slis_t_fieldcat_alv,"Fieldcat alv grid
  w_fieldcat      TYPE          slis_fieldcat_alv,  "Fieldcat alv grid
  w_layout        TYPE          slis_layout_alv,    "Layout alv grid
  t_relatorio     TYPE TABLE OF ty_relatorio,       "Relatório
  w_relatorio     TYPE          ty_relatorio.       "Relatório


* PARÂMETROS -----------------------------------------------------------
* Parâmetros de Seleção
SELECTION-SCREEN: BEGIN OF BLOCK b01 WITH FRAME TITLE text-t01.
SELECT-OPTIONS:
  s_vbeln         FOR  w_relatorio-vbeln OBLIGATORY.
SELECTION-SCREEN: END OF BLOCK b01.


* INICIAR OBJETOS ------------------------------------------------------
INITIALIZATION.
  sy-title = 'SAPeiros: ALV Hotspot pf-status'.
  %_s_vbeln_%_app_%-text = 'Documento de vendas'.


* SELEÇÃO DOS DADOS ----------------------------------------------------
START-OF-SELECTION.
* Seleção dos Dados
  PERFORM f_seleciona.


* PROCESSAMENTO DOS DADOS ----------------------------------------------
END-OF-SELECTION.
* Monta estrutura e layout do relatório
  CHECK t_relatorio[] IS NOT INITIAL.
  PERFORM zf_estrutura_layout.

* Exibe relatório com dados selecionados
  PERFORM f_relatorio.


* FORMS ----------------------------------------------------------------
* ----------------------------------------------------------------------
* Seleção dos Dados
* ----------------------------------------------------------------------
FORM f_seleciona.
  SELECT vbeln erdat
    FROM vbak
    INTO TABLE t_relatorio
   WHERE vbeln IN s_vbeln.

  IF sy-subrc IS INITIAL.
    SORT t_relatorio BY vbeln.
  ENDIF.
ENDFORM.                    "f_seleciona


*-----------------------------------------------------------------------
* Monta layout e estrutura de campos do relatório
*-----------------------------------------------------------------------
FORM zf_estrutura_layout.
* Layout
  CLEAR w_layout.
  w_layout-zebra             = abap_true.

* Campos do relatório
  CLEAR t_fieldcat[].

  w_fieldcat-tabname        = 'T_RELATORIO'.
  w_fieldcat-fieldname      = 'VBELN'.
  w_fieldcat-ref_tabname    = 'VBAK'.
  w_fieldcat-ref_fieldname  = 'VBELN'.
  w_fieldcat-hotspot        = abap_true.
  w_fieldcat-emphasize      = abap_true.
  w_fieldcat-outputlen      = 14.
  APPEND w_fieldcat TO t_fieldcat.
  CLEAR w_fieldcat.

  w_fieldcat-tabname        = 'T_RELATORIO'.
  w_fieldcat-fieldname      = 'ERDAT'.
  w_fieldcat-ref_tabname    = 'VBAK'.
  w_fieldcat-ref_fieldname  = 'ERDAT'.
  w_fieldcat-outputlen      = 10.
  APPEND w_fieldcat TO t_fieldcat.
  CLEAR w_fieldcat.
ENDFORM.                    "zf_estrutura_layout


*-----------------------------------------------------------------------
* Exibe relatório com dados selecionados
*-----------------------------------------------------------------------
FORM f_relatorio.
  sy-title = 'SAPeiros: ALV Hotspot pf-status'.

  CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
    EXPORTING
      i_callback_program      = sy-repid
      is_layout               = w_layout
      it_fieldcat             = t_fieldcat
      i_callback_user_command = 'USER_COMMAND_ALV'
    TABLES
      t_outtab                = t_relatorio
    EXCEPTIONS
      program_error           = 1
      OTHERS                  = 2.

  IF sy-subrc IS NOT INITIAL.

    MESSAGE ID sy-msgid
          TYPE sy-msgty
        NUMBER sy-msgno
          WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.

  ENDIF.
ENDFORM.                    "f_relatorio


*-----------------------------------------------------------------------
* Ações do ALV
*-----------------------------------------------------------------------
FORM user_command_alv USING u_ucomm       TYPE sy-ucomm
                            us_self_field TYPE slis_selfield.
  IF u_ucomm EQ '&IC1'.

    IF us_self_field-fieldname EQ 'VBELN'.

      READ TABLE t_relatorio
            INTO w_relatorio
           INDEX us_self_field-tabindex.

      IF sy-subrc IS INITIAL.

        SET PARAMETER ID 'AUN' FIELD w_relatorio-vbeln.
        CALL TRANSACTION 'VA02' AND SKIP FIRST SCREEN.

      ENDIF.

    ENDIF.

  ENDIF.
ENDFORM.                    "user_command_alv