Escolar Documentos
Profissional Documentos
Cultura Documentos
2
CONCEITO.........................................................................................................................2
CRIANDO UM MODULE POOL...........................................................................................2
CONCEITO DE INCLUDE TOP.............................................................................................3
LÓGICA DO PROGRAMA DE EXEMPLO..............................................................................3
CRIANDO TELA 100 – CADASTRO....................................................................................4
CARACTERÍSTICAS DA TELA.............................................................................................5
CRIADO OS CAMPOS NA TELA..........................................................................................6
COMPLETANDO A CRIAÇÃO DA TELA.............................................................................12
Variáveis....................................................................................................................12
PBO e PAI..................................................................................................................12
Barra de Status..........................................................................................................12
Barra de títulos..........................................................................................................15
PBO – Process Before Output...................................................................................15
MODULE STATUS_0100.....................................................................................15
MODULE HABILITAR........................................................................................16
PAI – Process After Input..........................................................................................18
MODULE TRATA_SAIDA...................................................................................18
CHAIN e FIELD....................................................................................................19
MODULE USER_COMMAND_0100..................................................................22
PERFORM CHECAR...........................................................................................22
PERFORM TRANSF_VALORES........................................................................24
PERFORM SALVAR.............................................................................................25
Objetos de Bloqueio..........................................................................................25
PERFORM ALTERAR..........................................................................................29
PERFORM DELETAR..........................................................................................29
PERFORM DEFINE_SELECAO.........................................................................31
SELECT Dinâmico............................................................................................32
CRIANDO A TELA 200 - CONSULTA INDIVIDUAL...........................................................33
Detalhes específicos da tela......................................................................................33
Montagem da tela 200...............................................................................................33
Criando uma Table Control....................................................................................34
PBO e PAI da tela 200...............................................................................................37
PBO – Process Before Output...................................................................................38
MODULE STATUS_0200.....................................................................................38
PAI – Process After Input..........................................................................................39
MODULE USER_COMMAND_0200..................................................................39
PERFORM SELECIONA_REG...........................................................................39
PERFORM RELATORIO_IND............................................................................40
435312777.doc 1 / 41
Desenvolvimento de Module Pool
Conceito
Module Pool, também conhecido como “programa on-line”, são programas formados por diversos
módulos de programação e telas com a função de “Input” de dados para o R3.
O desenvolvimento de module pool é todo estruturado, sendo utilizado a transação SE80 para a
criação.
Você pode fazer todo o module pool utilizando um único programa, mas isso não é recomendável.
435312777.doc 2 / 41
Conceito de Include Top
O próximo passo é informar se o programa terá o “Include Top”. Este include existe para
armazenar todas as declarações globais que existirão no programa.
Você tem a opção de utilizar o include TOP para essas declarações ou o programa carregador dos
demais includes. O ideal é a utilização do TOP.
Defina o nome do include com o mesmo nome do programa principal, separando a string “TOP”
com um underline ( _ ).
Defina as características do programa na tela que vier a seguir. Observe que a categoria do
programa é “Pool de Modulos” e não “Programa executável” como nos relatórios.
435312777.doc 3 / 41
O programa será dividido nas seguintes partes/telas:
o Tela 100 – Cadastro/Alteração/Exclusão dos registros
o Tela 200 – Consulta Individual dos registros e chamada de relatório interno
o Tela 300 – Consultas por sexo e chamada de relatório externo.
435312777.doc 4 / 41
Características da tela
Ao criar uma nova tela, devemos definir as características que essa tela vai ter.
o Descrição Breve: título que identificará a tela.
o Tipo de tela:
Normal: Ao ativar este atributo, a tela é marcada como tela normal. Esta
configuração é a configuração standard.
Subtela: Ao ativar este atributo, a tela é marcada como subtela. Uma subtela
pode ser executada como parte de uma outra tela. Para isso, é preciso estar
definida uma área respectiva na tela. Uma tela pode chamar várias subtelas em
áreas diferentes. A chamada pode ser controlada de modo dinâmico, de modo a
só ser determinada na execução de transação qual a subtela a utilizar. Uma
subtela pode ser executada em várias telas.
Caixa de diálogo modal: Ao ativar este atributo, a tela é utilizada como caixa de
diálogo modal. Em oposição ao popup normal, uma caixa de diálogo modal
obtém uma barra de ferramentas própria e um título. Não existe qualquer barra
de menu e não são possíveis entradas no campo de comando.
o Opções:
Manter Dados: Ao ativar esta opção, são suportadas para a tela no tempo de
execução as seguintes entradas de menu:
Sistema->Especificações do usuário->Manter dados->Definir dados
->Eliminar dados
Deste modo, é possível manter no sistema as entradas efetuadas na tela. No
próximo processamento da tela (também em outro modo), o sistema insere
automaticamente nos campos de entrada as entradas mantidas. Se a opção não
for ativada, as entradas de menu não têm efeito no tempo de execução da tela.
o Outros Atributos:
435312777.doc 5 / 41
Tela Seguinte: Neste campo, tem de ser indicado de forma estática o nº da
próxima tela no processo de transação. O nº da tela seguinte 0 provoca o
encerramento da transação ou o retorno de uma tela ou programa chamado para
um nível anterior à posição da chamada.
Posição do Cursor: Se o curso não deve ser posicionado no primeiro campo da
tela pronto para entrada, mas sim em um outro campo, o nome desse campo tem
de ser indicado.
Grupo de telas: É possível entrar uma seqüência de 4 caracteres no máximo,
disponível durante o tempo de execução da tela no campo SY-DYNGR.
Através do termo a entrar neste campo, podem ser atribuídas várias telas a um
mesmo grupo (de telas), que pode ser utilizado, por exemplo, para efetuar uma
modificação comum a todas as telas desse grupo.
Ponteiro para reiniciar o desenho. Utilizado para redimensionar, mover, marcar objetos.
435312777.doc 6 / 41
Campo texto. Utilizado como label de campos.
Campo de entrada e saída. Utilizado como campo de inserção e saída de informações na tela.
Área de subtela. Utilizado para marcar a área de onde uma subtela irá ser posicionada.
Assistente de table control. Utilizado para auxiliar a criação de uma table control.
Custom Control. Utilizado para marcar a área onde um objeto será inserido.
435312777.doc 7 / 41
Os parâmetros dos campos serão os seguintes:
435312777.doc 8 / 41
435312777.doc 9 / 41
435312777.doc 10 / 41
Todos os objetos de entrada, exceto o código, deverão estar com o parâmetro de entrada
desabilitado, de forma a não aceitar nenhuma informação sem que o usuário informe antes o
código. Para desabilitar, vá na pasta “Programa” dos itens de “Atributos” desmarque o flag de
“Campo de Entrada”.
435312777.doc 11 / 41
Quando utilizamos o objeto Radio na tela, devemos sempre agrupa-los para que somente um possa
ficar marcado num grupo de rádios associados. Vá à opção “Processar/Agrupamento/Grupo de
botões de rádio/Definir” para marcar o agrupamento dos rádios.
Variáveis
435312777.doc 12 / 41
Cada objeto existente na tela, deverá ter uma variável correspondente, com o
mesmo formato e nome, declarado no include “TOP” do module pool.
DATA: v_codigo(10),
v_nome(40),
v_rua(40),
v_bairro(25),
v_cidade(25),
v_est(2),
v_cep(9),
v_tel(13),
v_cel(13),
v_email(40),
v_masc(1),
v_fem(1),
v_neg(1),
v_serv(1),
v_pros(1).
PBO e PAI
Toda tela possui 2 eventos principais: o Process Before Output e o Process After Input.
O PBO é executado sempre antes da exibição da tela e após a execução do PAI e serve para
preparar os objetos na tela. Tudo que deve ser preparado para a exibição da tela, como a ativação
da barra de status, os objetos de devem de estar exibidos ou inibidos, visíveis e invisíveis são
tratados no PBO.
Tanto o PBO quanto o PAI possuem um número limitado de comandos que podem ser executados
e, quando da necessidade de se executar uma gama maior de comandos, devemos cria-los dentro
de módulos que são declarados em ambos os eventos.
Os comandos que podem ser utilizados no PBO são basicamente o comando LOOP e o comando
MODULE.
No PAI são executadas todas as verificações após o usuário acionar alguma ação, como o Enter ou
algum botão selecionado.
Os comandos que podem ser utilizados no PAI são basicamente o comando LOOP, o comando
MODULE, o comando FIELD e o comando CHAIN.
Barra de Status
Cada tela deve ter uma barra de status. A barra de status compreende-se por menu, barra standard e
barra da aplicação.
Para criar uma barra de status, clique com o botão direito sobre o nome do programa principal e
selecione “Criar/Status GUI”.
435312777.doc 13 / 41
Ao aparecer a primeira tela, nomeie a status de ‘0100’ e o texto de ‘Barra de status da tela 100’.
Na tela seguinte, aparecerão as opções principais para criarmos: Barra de Menu, Barra de Botões e
Teclas de Função.
Na opção “Barra de Menu” iremos atribuir as opções que irão aparecer no menu principal. Essas
opções, quando não possuírem sub-opções, deverão ter um código associado. Esse código será
recuperado dentro do PAI sempre que o usuário selecionar a opção.
Na opção “Barra de Botões” iremos atribuir os botões que aparecerão na barra de botões da
aplicação.
435312777.doc 14 / 41
Para atribuir o ícone, primeiro digite o código da ação e em seguida de um duplo clique sobre. Em
seguida aparecerá a seguinte tela:
Texto que
aparece ao lado
Nome do do ícone
Ícone
Texto de
hint
Na opção “Teclas de Opção”, iremos definir quais os botões da barra de botões standard que
ficaram ativos e qual o código de cada um.
Os botões também podem ser classificados quanto a categoria da função. Essa categoria de função
define um grupo de botões que pode ser executado no PAI de forma conjunta. Basicamente
utilizamos isso nos botões de saída, como o BACK e o EXIT. Para isso, após definirmos o código
do botão, dê um duplo-click sobre que aparecerá a seguinte tela:
435312777.doc 15 / 41
Na categoria da função dos botões “BACK” e “EXIT”, coloque a categoria “E”.
Barra de títulos
A barra de títulos define o título a ser utilizado pela tela.
Para criar a barra de título, clique com o botão direito sobre o nome do programa principal e
selecione “Criar/Títulos GUI”.
MODULE STATUS_0100
Na programação da PBO da tela 100, iremos colocar a chamada da barra de status de da barra de
títulos e a habilitação dos campos.
Para chamada das barras, crie um módulo chamado “MODULE status_0100.”.
Para criar a programação do módulo, dê um duplo clique sobre o nome do módulo. Irá aparecer a
tela solicitando em qual include que iremos inserir a chamada do módulo. É recomendável que
exista um include para armazenar todas as chamadas da PBO. Vamos nomear esse include,
colocando o mesmo nome do programa com o final “_O01” (isso não é regra).
435312777.doc 16 / 41
No include iremos fazer a configuração da barra de status e da barra de títulos,
utilizando o comando “SET” para isso:
*&---------------------------------------------------------------------*
*& Module STATUS_0100 OUTPUT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
module STATUS_0100 output.
SET PF-STATUS '0100'.
SET TITLEBAR '100'.
endmodule. " STATUS_0100 OUTPUT
SET PF-STATUS configura qual a barra de status que iremos utilizar e SET TITLEBAR define
qual a barra de títulos.
MODULE HABILITAR
Voltando a PBO da tela, iremos declarar o outro módulo do evento. Neste módulo iremos definir o
módulo “MODULE habilitar” que irá habilitar ou desabilitar os campos da tela. Quando a tela foi
criada, todos os objeto de entrada (cmp de ent/saida, check e rádio) foram definidos como campo
somente de saída. Isso ocorreu para que o usuário primeiro entre com o código e faça a checagem
se o mesmo está cadastrado ou não. Se estiver ele será de alteração, caso contrário será de
inclusão.
Na criação da tela, todos os objetos que foram definidos com somente de saída, tiveram um grupo
associado: o “G1”. Esse grupo foi definido para facilitar a habilitação para entrada. Com o grupo,
faremos a alteração verificando somente essa informação e não o nome do campo.
435312777.doc 17 / 41
*&---------------------------------------------------------------------*
*& Module habilitar OUTPUT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
module habilitar output.
else.
endif.
endif.
endloop.
A variável “V_HAB” deve ser declarada no include “TOP” como CHAR de 1 posição. Essa
variável vai ser alimentada ou não na PAI, quando o usuário clicar sobre o botão checar.
435312777.doc 18 / 41
CHAIN.
FIELD: v_tel,
v_cel.
ENDCHAIN.
MODULE user_command_0100.
MODULE TRATA_SAIDA
Primeiro, verificar se o usuário quer sair do programa. Como os botões de saída foram
configurados com categoria de função igual a “E” de “Exit” (saída), iremos criar um módulo para
verificar se algum desses botões foi pressionado. A criação do módulo “TRATA_SAIDA” com a
cláusula “AT EXIT-COMMAND” possibilita a checagem de todos os comandos que foram criados
com a categoria “E”.
Dentro do módulo, teremos a seguinte codificação.
*&---------------------------------------------------------------------*
*& Module TRATA_SAIDA INPUT
*&---------------------------------------------------------------------*
MODULE trata_saida INPUT.
IF sy-dynnr EQ '0100'.
LEAVE PROGRAM.
CASE sy-ucomm.
WHEN 'BACK'.
WHEN 'EXIT'.
LEAVE PROGRAM.
WHEN 'CANCEL'.
PERFORM limpa_tela_200.
ENDCASE.
CASE sy-ucomm.
WHEN 'BACK'.
435312777.doc 19 / 41
LEAVE TO SCREEN '0100'.
WHEN 'EXIT'.
LEAVE PROGRAM.
WHEN 'CANCEL'.
ENDCASE.
ENDIF.
Como esse módulo será utilizado por todas as telas do programa, faz-se necessário saber qual a
tela que esta chamando o módulo. Para isso inserimos a variável de sistema “SY-DYNNR”, que
retorna o número da tela atual. No caso da tela 0100, qualquer comando de saída (Exit ou Back)
sairá do programa, usando o comando “LEAVE PROGRAM”. Nas telas 0200 e 0300 o comando
“BACK” volta para a tela 0100 com o comando “LEAVE TO SCREEN ‘0100’ ”, já o comando
“EXIT” sai do programa.
CHAIN e FIELD
Em seguida, faremos a verificação dos valores válidos para a entrada o estado. Usaremos o
comando “FIELD” com a cláusula “VALUES”. Os valores inseridos entre parênteses são os
valores aceitos pelo programa. Isso criará na tela um Match Code com os valores válidos.
O próximo passo é testar o conteúdo do campo CEP. Nele teremos que ter uma
string de 9 caracteres, o sexto campo deverá ser um “-“ e nenhum caracter
diferente de número ou ‘-‘. Veja o código abaixo:
*&---------------------------------------------------------------------*
*& Module testa_cep INPUT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
MODULE testa_cep INPUT.
DATA: v_len TYPE i.
IF v_len < 9.
ENDIF.
IF v_cep+5(1) NE '-'.
ENDIF.
435312777.doc 20 / 41
IF v_cep CN '1234567890-'.
ENDIF.
ENDMODULE. " testa_cep INPUT
Para testar o telefone e o celular, vamos utilizar o mesmo módulo. Nestes casos
em que mais de um campo necessitam utilizar o mesmo módulo do FIELD,
precisamos agrupa-los dentro do controle “CHAIN” e “ENDCHAIN”. Cada
grupo de FIELD e MODULE compõe vários campos. No caso abaixo,
verificamos se os dados estão utilizando a máscara correta.
*&---------------------------------------------------------------------*
*& Module testa_tel INPUT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
MODULE testa_tel INPUT.
IF v_tel NE space.
IF v_tel(1) NE '(' OR
v_tel+3(1) NE ')' OR
v_tel+8(1) NE '-'.
ENDIF.
ENDIF.
IF v_cel NE space.
IF v_cel(1) NE '(' OR
v_cel+3(1) NE ')' OR
v_cel+8(1) NE '-'.
ENDIF.
ENDIF.
435312777.doc 21 / 41
Todas as outras checagens serão feitas no “MODULE USER_COMMAND_0100”.
MODULE USER_COMMAND_0100.
*&---------------------------------------------------------------------*
*& Module USER_COMMAND_0100 INPUT
*&---------------------------------------------------------------------*
MODULE user_command_0100 INPUT.
PERFORM checar.
PERFORM salvar.
PERFORM alterar.
PERFORM deletar.
PERFORM rel_individual.
PERFORM rel_geral.
ENDCASE.
PERFORM CHECAR
No perform “CHECAR”, que deve ser criado, dê um duplo clique sobre o nome do perform. Irá
aparecer a tela solicitando em qual include que iremos inserir a chamada do perform. É
recomendável que exista um include para armazenar todas as chamadas de performs. Vamos
nomear esse include, colocando o mesmo nome do programa com o final “_I01” (isso não é
regra). Todos os outros performs deverão ser gravados no mesmo include.
435312777.doc 22 / 41
Neste perform iremos verificar se o código digitado existe, existindo iremos armazenar o conteúdo
nas variáveis de tela e não habilitar os controles, pois o usuário será obrigado a pressionar a tecla
“ALTERAR” para fazer isso, caso contrário, ou seja, não exista, iremos habilitar os outros campos
para que o usuário digite o novo registro.
Criar, no include TOP as seguintes declarações:
DATA: v_codigo(10),
v_nome(40),
v_rua(40),
v_bairro(25),
v_cidade(25),
v_est(2),
v_cep(9),
v_tel(13),
v_cel(13),
v_email(40),
v_masc(1),
v_fem(1),
v_neg(1),
v_serv(1),
v_pros(1),
v_hab(1), “Criar essa, pois as outras já existem
v_ucomm(10). “Criar essa, pois as outras já existem
DATA: wa_zcadastro LIKE zcadastro. “ Criar
No perform “CHECAR”, colocaremos o código abaixo:
FORM checar.
PERFORM transf_valores.
v_hab = ' '.
ELSE.
* Se não encontrou significa que é novo registro. v_hab igual a X
* indica que é para habilitar a tela e v_comm com NOVO significa que
* na hora de salvar será um INSERT
v_hab = 'X'.
v_ucomm = 'NOVO'.
ENDIF.
435312777.doc 23 / 41
Observe no código a variável “v_hab”. Ela indica se os controles (campos) na tela 0100 irão ser
habilitados ou não. Isso obrigará, caso o código já exista, que se o usuário quiser alterar, ele deve
pressionar o botão “Alterar” antes de iniciar as alterações.
PERFORM TRANSF_VALORES
No perform “transf_valores” iremos transferir os valores que estão na estrutura
“WA_CADASTRO”, que foi preenchida no select, para as variaveis de tela.
FORM transf_valores.
IF wa_zcadastro-sexo = 'M'.
v_masc = 'X'.
ELSE.
v_fem = 'X'.
ENDIF.
435312777.doc 24 / 41
PERFORM SALVAR
O uso ideal do comando INSERT é criar uma estrutura como os mesmos campos da tabela na qual
o registro será inserido. Essa estrutura conterá os valores a serem gravados.
Pode ser feito também o armazenamento diretamente sobre a estrutura da tabela instanciada pelo
comando TABLES, neste caso, a sintaxe do INSERT pode ser da seguinte forma:
INSERT <tabela>.
UPDATE <tabela>.
Objetos de Bloqueio
435312777.doc 25 / 41
Nome da
Tabela do
Objeto
Tipo do
bloqueio
435312777.doc 26 / 41
Campos
chave da
tabela
FORM salvar.
IF v_masc = 'X'.
wa_zcadastro-sexo = 'M'.
ELSE.
wa_zcadastro-sexo = 'F'.
ENDIF.
435312777.doc 27 / 41
* inserir
* novo registro na tabela; se for ALTERAR, modificar registro
* da tabela
IF v_ucomm = 'NOVO'.
IF sy-subrc <> 0.
MESSAGE w000(ysf) WITH 'Bloqueado...'.
ENDIF.
IF sy-subrc <> 0.
* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
* WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
UPDATE zcadastro.
ENDIF.
COMMIT WORK.
ELSE.
ROLLBACK WORK.
ENDIF.
435312777.doc 28 / 41
* limpa as variaveis de tela, a v_hab para desabilitar a tela e
* v_ucomm para receber novo comando
CLEAR: v_codigo, v_nome, v_rua, v_bairro, v_cidade, v_est,
v_cep, v_tel, v_cel, v_email, v_neg, v_serv,
v_pros, v_hab, v_ucomm.
PERFORM ALTERAR
O perform alterar é muito simples. Sua função é exclusivamente indicar a habilitação dos
campos e indicar na variável “V_UCOMM” que sua função é ALTERAR.
Essa variável é testada no perform “SALVAR” para indicar se deverá ser
utilizado o comando INSERT ou UPDATE.
FORM alterar.
v_hab = 'X'.
v_ucomm = 'ALTERAR'.
ENDIF.
ENDFORM. " alterar
PERFORM DELETAR
No perform DELETAR, iremos ver outro comando de manipulação de tabelas de banco de dados,
que é o comando DELETE.
A sintaxe do comando DELETE é:
435312777.doc 29 / 41
O código do perform será o seguinte:
FORM deletar.
DATA: lc_answer.
* Se na for novo registro
CHECK NOT v_ucomm = 'NOVO'.
COMMIT WORK.
ELSE.
ROLLBACK WORK.
ENDIF.
ENDIF.
435312777.doc 30 / 41
PERFORM REL_INDIVIDUAL.
Esse perform irá fazer a chamada de uma nova tela, a tela 0200.
O comando que chama uma nova tela é o comando “CALL SCREEN”.
Para retornar a tela chamadora, utilizamos o comando “LEAVE SCREEN”. Se quisermos voltar a
uma tela que não é a chamadora, utilizamos o comando “LEAVE TO SCREEN <n>”.
O código do perform será o seguinte:
FORM rel_individual.
PERFORM limpa_variaveis.
CALL SCREEN 200.
PERFORM REL_GERAL.
Esse perform irá fazer a chamada de uma nova tela, a tela 0300.
Nesta tela teremos uma “TABSTRIP” associada.
O conceito de TABSTRIP iremos ver no capítulo associado a tela 0300.
O código do perform será o seguinte:
FORM rel_geral.
REFRESH ti_zcadastro.
wc_dynnr = '0310'.
PERFORM define_selecao USING 'MASC'.
tabstrip1-activetab = 'MASC'.
PERFORM DEFINE_SELECAO.
O perform DEFINE_SELECAO irá carregar a tabela interna utilizada na tela 0300 com as
informações vidas do cadastro, separada por sexo.
O perform recebe um parâmetro no momento da chamada. Esse parâmetro pode ser “MASC”
ou “FEM”, o que irá orientar na hora da seleção.
435312777.doc 31 / 41
SELECT Dinâmico
Utilizar o conceito de SELECT Dinâmico significa montar a cláusula WHERE antes da seleção
dos dados.
Isso ocorre quando temos de utilizar diversas formas do mesmo select. Ao invés de criarmos
vários comandos SELECTs, criamos uma única chamada, com o conteúdo da cláusula WHERE
dentro de uma tabela interna.
Essa tabela interna deverá conter uma única linha, com um campo do tipo caracter de 72 posições.
Ao montar o SELECT, sempre que precisar inserir uma variável, a mesma deve estar entre 4 aspas
simples de cada lado.
Toda a cláusula WHERE deve ser montada dentro da tabela interna, podendo ser utilizada mais de
uma linha se necessário.
Na chamada do SELECT, na cláusula WHERE, colocar entre parênteses o nome da tabela interna
criada.
DATA: v_sexo(1).
IF p_sexo = 'MASC'.
v_sexo = 'M'.
ELSE.
v_sexo = 'F'.
ENDIF.
SELECT *
FROM zcadastro
INTO TABLE ti_zcadastro
WHERE (ti_select).
435312777.doc 32 / 41
Criando a tela 200 - Consulta Individual
A tela 200 será uma consulta utilizando um objeto chamado TABLE CONTROL,
que é um grid que contém as informações de uma determinada tabela interna.
Na tela 200, após o usuário selecionar o registro, o mesmo poderá emitir um
relatório.
Esse relatório será uma chama de relatório interno dentro do ON-LINE.
Como a maioria dos objetos já foram ensinados como se cria, alguns serão
informados somente o objeto, o nome e o texto deste.
A tela 200 terá os seguintes objetos:
o Dois campos textos, com textos “Código” e outro “Nome”.
o Dois campos de entrada/saída, um chamado “V_CODIGO” e outro
“V_NOME”.
o Uma TABLE CONTROL, chamada de “TC1”
Campos de V_CODIGO
texto
V_NOME
TC1
435312777.doc 33 / 41
Criando uma Table Control
O processo de criação de uma Tabela Control é o seguinte:
Insira o objeto na posição que desejar na tela;
Nomeie o objeto. No nosso caso será chamado de TC1.
Marque os checkbox de separadores de linha Horizontal e Vertical.
Marque o radiobutton de marcadores de colunas simples. No nosso caso será
simples pois o usuário selecionará somente um registro.
O próximo passo é colocar as colunas. Para essa fase podemos fazer de diversas
formas. A que utilizaremos é pegar os campos de uma tabela interna.
Toda TABLE CONTROL deve de ter uma tabela interna associada. Isso será
necessário para mantermos os dados do objeto durante o processamento.
Deve ser criada uma tabela interna de nome TI_ZCAD, no perform TOP do
programa. Essa tabela irá conter os campos da tabela ZCADASTRO e mais o
campo FLAG. O campo FLAG servirá como marcador de coluna da TABLE
CONTROL.
435312777.doc 34 / 41
Coluna do
Nome
Coluna do
Código Coluna do
Sexo
Agora iremos definir uma coluna de marcador de linha. Na tabela temos o campo
FLAG que servirá como marcador de linha. Nas propriedades da TABLE
CONTROL, na área de marcador de coluna, marcar o checkbox e colocar o nome
do campo (TI_ZCAD-FLAG).
435312777.doc 35 / 41
Após salvar a tela, iremos acabar de preparar a TABLE CONTROL fora do
SCREEN PAINTER.
Declarar a TABLE CONTROL no perform TOP do programa, da seguinte forma:
LOOP AT ti_zcad
LOOP AT ti_zcad.
MODULE trata_registro.
ENDLOOP.
435312777.doc 36 / 41
MODULE trata_registro INPUT.
MODULE status_0200.
LOOP AT ti_zcad.
MODULE trata_registro.
ENDLOOP.
MODULE user_command_0200.
MODULE STATUS_0200
Fazer a chamada da barra de status STATUS2 e da barra de título 200.
435312777.doc 37 / 41
ENDMODULE. " status_0200 OUTPUT
Criar a STATUS2 conforme abaixo:
MODULE USER_COMMAND_0200
435312777.doc 38 / 41
Neste módulo iremos verificar as ações do usuário e desviar o programa para o
performs corretos.
CASE sy-ucomm.
WHEN 'BUSCAR'.
PERFORM seleciona_reg.
WHEN 'SELEC'.
PERFORM relatorio_ind.
ENDCASE.
PERFORM SELECIONA_REG.
Neste perform iremos fazer a seleção dos registros de acordo com as informações passadas na tela
pelo usuário. Se ele entrar com código, iremos fazer uma pesquisa simples, através do campo
CODIGO. Se ele informar o nome, iremos fazer uma busca com LIKE no campo NOME. Essa
busca com LIKE não é recomendada quando se trata de tabelas muito grandes, uma vez que a
performance com o LIKE é baixíssima.
Para a busca com o LIKE, temos de inserir o caracter “%” na posição de cada “*” que o usuário
informar na tela. A substituição do * pelo % é feita com o comando TRANSLATE.
FORM seleciona_reg.
IF v_codigo IS INITIAL.
lc_nome = v_nome.
SELECT *
FROM zcadastro01
INTO CORRESPONDING FIELDS OF TABLE ti_zcad
WHERE nome LIKE lc_nome.
ELSE.
SELECT *
FROM zcadastro01
INTO CORRESPONDING FIELDS OF TABLE ti_zcad
WHERE codigo = v_codigo.
435312777.doc 39 / 41
ENDIF.
PERFORM RELATORIO_IND.
Neste perform, iremos fazer a chamada de um report interno ao On-Line. Para
ativar o report, utilizaremos o comando “LEAVE TO LIST-PROCESSING”. A partir
deste ponto, podemos trabalhar como em um report, utilizando comandos como o
WRITE e ULINE, tratar eventos, como o TOP-OF-PAGE, AT LINE-
SELECTION e AT USER-COMMAND.
FORM relatorio_ind.
LEAVE TO LIST-PROCESSING.
ULINE.
CHECK sy-subrc = 0.
435312777.doc 40 / 41
435312777.doc 41 / 41