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.

2 comentários:

  1. Boa tarde Mauro, amigo obrigado pela dica que você me sugeriu no tópico anterior de dicionário de dados foi muito útil.
    Mas agora o problema é outro, amigo sou novato nessa área de programação em abap. Eu criei uma TABSTRIP com 7 abas e na segunda aba de ENDEREÇO eu queria incrementar uma TABLECONTROL nela. já criei a tablecontrol só estou esbarrando nos modulos, vocÊ tem alguma explicação de como se insere uma "TABLECONTROL DENTRO DE UMA ABA DA TABSTRIP ???

    Um abraço e sucesso...

    ResponderExcluir
  2. Fala Renato, isso que você está falando não é tão simples assim, para eu te explicar eu teria que fazer um Post novo rsrsrs, mas tenha a ideia de PBO e PAI bem clara na cabeça, juntamente com movimentação de telas, o resto agora é logica de programação.... mas pra não deixar essa resposta muito vaga eu vou ver se consigo postar algo sobre isso o mais rápido possível, enquanto isso vai tentando.
    Boa sorte.

    ResponderExcluir