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.
Assinar:
Postar comentários (Atom)
Boa tarde Mauro, amigo obrigado pela dica que você me sugeriu no tópico anterior de dicionário de dados foi muito útil.
ResponderExcluirMas 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...
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.
ResponderExcluirBoa sorte.