segunda-feira, 26 de setembro de 2011

Module Pool - Table Control

 
"  Hoje vou mostrar como alimentar um 'Table control' em um 'Module Pool'
" 'Table control' e uma estrutura que recebe os dados de uma tabela e
" mostra na tela, vou mostrar como popular um, depois eu vou mostrar como
" manipular os dados que estão no 'table control'.
"  Primeiro criei seu 'Module pool'... Se não lembra acesse link abaixo:
" http://abapjuniores.blogspot.com/2011/04/module-pool-basico.html.

" Depois de criar a tela vá até o TOP do programa e declare igual abaixo.

*&---------------------------------------------------------------------*
*& Include MZSD0001TOP                                       Module Pool      SAPMZSD0001
*&
*&---------------------------------------------------------------------*

PROGRAM  SAPMZSD0001.

"  Criei uma tabela com os campos 'MANDT, MATNR e NAME1', e uma estrutura
" com os campos 'MATNR e NAME1.
TABLES : zmara,
         zst_mara
  .

" Declarações da tela 0100.
data : V_OKCODE TYPE sy-ucomm.
"  Declaração das estruturas e tabelas internas
DATA : it_zmara TYPE TABLE OF zmara,
       st_zmara TYPE          zmara.

"  Declaração do table control.
CONTROLS : ztab_ctrl TYPE TABLEVIEW USING SCREEN 0100.


*&---------------------------------------------------------------------*
"  Após ter declarado isso vamos voltar a tela e clicar no botão 'Layout'.






"  Isso irá mostrar o design da sua tela com todos os objetos dele, olhando
" no lado esquerdo você verá as ferramentas que podem ser usadas pra fazer
" sua tela conforme a necessidade do cliente ou do seu estudo.
"  Hoje nós vamos usar o 'Table Control' conforme imagem abaixo, onde é só
" clicar no icone dele, ir para a tela que ainda não tem nada, clicar e
" Arrastar, dê o nome 'ZTAB_CTRL', conforme exemplo, como o Top já foi feito
" se você perceber ele já foi declarado para a tela 0100.
"  Depois de criar, clique no botão 'Dicionário / Tabela de campos da tela'
" Conforme mostrado na imagem abaixo, coloque o nome da estrutura criada no
" SE11, e dê 'Enter', com isso irá aparecer todos os campos do mesmo,
" selecione os campos e dê 'OK', arraste o objeto para dentro do 'table Control'.
"  Pronto, agora você tem um 'Table control' relacionado com uma estrutura.




"  Depois de fazer tudo isso clique no botão 'Atributos' e selecione as
" opções conforme figura abaixo, isso é só para deixar um pouco mais bonito
" é organizado seu 'Table Control', lembre-se bem deste botão 'atributos'
" pois ele é muito importante mais tarde para a manipulação de dados.





" Agora veja os códigos comentados:

*&---------------------------------------------------------------------*

" fluxo lógico da tela 0100.

  PROCESS BEFORE OUTPUT.
" Faz a alimentação da tabela Interna.
 MODULE z_select_zmara.

"  Joga o registro pra dentro do estrutura interna 'linkando' com
" o Table control da tela.
 LOOP AT it_zmara INTO st_zmara WITH CONTROL ztab_ctrl.
   MODULE : preenche_screen.
 ENDLOOP.

" Module que 'seta' com um PF-Status com esta tela.
 MODULE STATUS_0100.

PROCESS AFTER INPUT.

"  Loop na tabela interna com os dados que serão mostrados na
" table control, este loop no PAI, serve quando você quer fazer
" alguma ação com os dados mostrados ( Insert, Modify, Update ...)
" , você precida coloca para que o programa seja executado
" corretamente.
LOOP AT it_zmara.
ENDLOOP.

"  Module contendo todas as ações de cada comando da tela.
 MODULE USER_COMMAND_0100.


*&---------------------------------------------------------------------*

" PBO


  *&---------------------------------------------------------------------*
*&  Include           MZSD0001O01
*&---------------------------------------------------------------------*
*&---------------------------------------------------------------------*
*&      Module  STATUS_0100  OUTPUT
*&---------------------------------------------------------------------*
module status_0100 output.
  set pf-status 'TELA'.

endmodule.                 " STATUS_0100  OUTPUT


*&---------------------------------------------------------------------*
*&      Module  z_select_zmara  OUTPUT
*&---------------------------------------------------------------------*
module z_select_zmara output.

  select matnr name1
    from zmara
    into corresponding fields of table it_zmara.

endmodule.                 " z_select_zmara  OUTPUT

*&---------------------------------------------------------------------*
*&      Module  preenche_screen  OUTPUT
*&---------------------------------------------------------------------*
module preenche_screen output.

  "  Verifica o espaço que tem dentro do Table Control e especifica os
  " intervalo de registros que serão exibidos, Tipo quando seu table control
  " cabe 20 registros e você tem 100 registros, os registros que serão
  " Mostrados inicialmente serão os resgistros 1 ao 20 e só, mas quando vc
  " colocar pra baixo irá aparecer do 2 ao 21.
  if sy-stepl 1.
    ztab_ctrl-lines =
      ztab_ctrl-top_line + sy-loopc 1.
  endif.

  "  Move os dados da estrutura interna pra dentro da estrutura que alimenta
  " o Table control.
  move-corresponding st_zmara to zst_mara.

endmodule.                 " preenche_screen  OUTPUT

*&---------------------------------------------------------------------*

" PAI

  *&---------------------------------------------------------------------*
*&  Include           MZSD0001I01
*&---------------------------------------------------------------------*
*&---------------------------------------------------------------------*
*&      Module  USER_COMMAND_0100  INPUT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
module user_command_0100 input.

  case v_okcode.
*  WHEN 'SAVE'.
    when 'BACK'.
      set screen 0.
      leave screen.
    when 'EXIT'.
      set screen 0.
      leave screen.
    when 'CANCEL'.
      set screen 0.
      leave screen.
    when others.
  endcase.

endmodule.                 " USER_COMMAND_0100  INPUT



*&---------------------------------------------------------------------*

"  Espero ter ajudado, como sempre falo 'Debbugem' tudo isso e vejam os
" valores e suas propriedades durante o processo.

quinta-feira, 22 de setembro de 2011

Tops Apagadas pelas Views de tabelas

"  Uma importante dica sobre Views de tabelas são que elas usam um grupo
" de funções conforme já foi comentado, mas toda vez que você fizer isso
" o 'Top' do Grupo de funções ( que é aonde fica todas as declarações do
" grupo ) será reecrita pela SAP e substituida, portanto caso esse grupo
" de funções esteja armazenando uma 'Function' e a mesma esteja usando 
" uma variável declarada neste top, você terá que declarar novamente pq 
" ela foi apagada rsrsrs....  muito cuidado com isso mas pra não dar esse
" problema com você e só vc criar um 2º Include TOP contendo todas as 
" Declarações que vc quiser incluir.

segunda-feira, 19 de setembro de 2011

Dicionario - View de Manutenção de tabelas

  report zmj_viewtable.

*&---------------------------------------------------------------------*
"  Hoje conforme muitos emails me solicitando estarei falando sobre 
" View de manutenção, ou atualizador de tabela, que serve para fazer 
" inclusão na tabela de uma forma mais direta, eu fiz isso poucas vezes
" mas já da pra explicar como faze um rsrs.
"  Primeiro de tudo vamos entrar na tabela que você quer criar a a View,
" entre no menu /Utilitários/gerador de atualização de tabela/ conforme
" imagem abaixo.





"  Depois disso vc irá para um ambiente de diálogo para criação de desta
" atualização da tabela.


"  Devemos preencher os campos: Nome da 'tabela/Visão', 'Grupo de 
" autorização' que dá autorização para acesso e consequentimente imput 
" dentro da tabela, bem....  vocês precisarão criar um grupo de funções
" (se80) para armazenar a View,...  depois disso cliquem no botão 
" 'Procurar nº(s) tela' e selecionar 'propor nº(s) tela' e depois aperte
" o botão para criar.Prontinho.... você acabou de criar a view, se quiser
" na transação 'sm30' você já consegue ver esta View , mas você não deixar
" sem ter uma transação então vamos para o próximo passo.
" Criar uma transação pra a view.



 "  Vamos na transação se93 que é para controle de transações e vamos criar
" uma conforme a imagem acima, preenchendo o 'código da transação', depois
" 'texto breve' e principalmente o objeto de execução como 'transação com
" parametros', dê OK.





"  Preencham os dados conforme a imagem acima, onde o 'Viewname' é o
" nome da View da tabela ( rsrsrs seriu ?) e o 'Update' é a autorização
" de Imput dentro da tabela.
" Qualquer duvida é só continuar entrando em contato comigo nos emails de
" contatos que tem no blog....  T+ Galera..

quinta-feira, 1 de setembro de 2011

ALV - Estrutura

  REPORT z_struc_alv.

*&---------------------------------------------------------------------*
"  Vou fala agora sobre Estrutura dentro do ALV, I_STRUCTURE_NAME servirá,
" como o jah falado, igual ao parametro 'IT_FIELDCAT' da função, 
" a estrutura feita tem esta cara:


 


"  Sabe criar estrutura ? acesse :
" http://abapjuniores.blogspot.com/2011/08/dicionario-estruturas.html
" o código eh muito simples olhem abaixo.

" Tabelas
TABLES :
  mara
  .

TYPE-POOLs : slis
.

" Tipos
TYPES BEGIN OF ty_outtab.
" Aki eu estou aproveitando a estrutura criada para cria o tipo identico
" para a tabela de saida.
        INCLUDE TYPE zst_struc_001.
TYPES END OF   ty_outtab.

TYPES :
  BEGIN OF ty_mara,
    matnr TYPE mara-matnr,
    ersda TYPE mara-ersda,
  END OF   ty_mara,

  BEGIN OF ty_makt,
    matnr TYPE makt-matnr,
    maktx TYPE makt-maktx,
  END OF   ty_makt
  .

" Tabelas Internas e Estruturas
DATA :
  st_outtab TYPE ty_outtab,
  it_outtab TYPE TABLE OF ty_outtab,
  st_mara   TYPE ty_mara,
  it_mara   TYPE TABLE OF ty_mara,
  st_makt   TYPE ty_makt,
  it_makt   TYPE TABLE OF ty_makt
  .

" Constantes
data : c_x TYPE c VALUE 'X'.

" Tela de seleção.
SELECTION-SCREEN BEGIN OF BLOCK 1 WITH FRAME TITLE text-t01.
SELECT-OPTIONS : so_matnr FOR mara-matnr
                .
SELECTION-SCREEN END OF BLOCK 1.

" Inicio do programa.
START-OF-SELECTION.

  PERFORM :
    z_busca_dados,
    z_feed_outtab,
    z_cria_alv
    .

*&---------------------------------------------------------------------*
*&      Form  Z_BUSCA_DADOS
*&---------------------------------------------------------------------*
" Leitura simples das tabelas para alimentar a tabela de saida.
FORM z_busca_dados .

  SELECT matnr ersda
    FROM mara
    INTO TABLE it_mara
    UP TO 100 ROWS
    WHERE matnr IN so_matnr
    .

  SELECT matnr maktx
    FROM makt
    INTO TABLE it_makt
    FOR ALL ENTRIES IN it_mara
    WHERE matnr = it_mara-matnr
      AND spras = 'PT'
.

ENDFORM.                    " Z_BUSCA_DADOS


*&---------------------------------------------------------------------*
*&      Form  Z_FEED_OUTTAB
*&---------------------------------------------------------------------*
" Alimentação da tabela de saida.
FORM z_feed_outtab .

  LOOP AT it_mara INTO st_mara.
    READ TABLE it_makt INTO st_makt
      WITH KEY matnr = st_mara-matnr
      .
    st_outtab-check = ' '.
    st_outtab-matnr = st_mara-matnr.
    st_outtab-ersda = st_mara-ersda.
    st_outtab-maktx = st_makt-maktx.

    APPEND st_outtab TO it_outtab.

  ENDLOOP.

ENDFORM.                    " Z_FEED_OUTTAB

*&---------------------------------------------------------------------*
*&      Form  Z_CRIA_ALV
*&---------------------------------------------------------------------*
" Cria o ALV.
form Z_CRIA_ALV .

CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'

 EXPORTING
*   I_INTERFACE_CHECK                 = ' '
*   I_BYPASSING_BUFFER                = ' '
*   I_BUFFER_ACTIVE                   = ' '

" Nome do programa.
   I_CALLBACK_PROGRAM                = sy-repid

*   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       = ' '

" Inserção da estrutura para a substituição do Fieldcatolog
   I_STRUCTURE_NAME                  = 'ZST_STRUC_001'

*   I_BACKGROUND_ID                   = ' '
*   I_GRID_TITLE                      =
*   I_GRID_SETTINGS                   =
*   IS_LAYOUT                         =
*   IT_FIELDCAT                       =
*   IT_EXCLUDING                      =
*   IT_SPECIAL_GROUPS                 =
*   IT_SORT                           =
*   IT_FILTER                         =
*   IS_SEL_HIDE                       =
*   I_DEFAULT                         = 'X'
   I_SAVE                            = c_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_outtab
 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.                    " Z_CRIA_ALV