You are on page 1of 41

DESENVOLVIMENTO DE MODULE POOL..............................................................

2
CONCEITO.........................................................................................................................2
CRIANDO UM MODULE POOL...........................................................................................2
CONCEITO DE INCLUDE TOP.............................................................................................3
LGICA DO PROGRAMA DE EXEMPLO..............................................................................3
CRIANDO TELA 100 CADASTRO....................................................................................4
CARACTERSTICAS DA TELA.............................................................................................5
CRIADO OS CAMPOS NA TELA..........................................................................................6
COMPLETANDO A CRIAO DA TELA.............................................................................12
Variveis....................................................................................................................12
PBO e PAI..................................................................................................................12
Barra de Status..........................................................................................................12
Barra de ttulos..........................................................................................................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 Dinmico............................................................................................32
CRIANDO A TELA 200 - CONSULTA INDIVIDUAL...........................................................33
Detalhes especficos 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

277987432.doc

1 / 41

Desenvolvimento de Module Pool


Conceito

Module Pool, tambm conhecido como programa on-line, so programas formados por diversos
mdulos de programao e telas com a funo de Input de dados para o R3.
O desenvolvimento de module pool todo estruturado, sendo utilizado a transao SE80 para a
criao.
Voc pode fazer todo o module pool utilizando um nico programa, mas isso no recomendvel.

Criando um Module Pool

Para se criar um novo programa, selecionar o tipo Programa e informar o nome na janela
especfica. Clicar no boto Exibir. A transao ir informar Programa XXXXX no existe.
Criar o objeto ?. Clique no boto Sim.

277987432.doc

2 / 41

Conceito de Include Top

O prximo passo informar se o programa ter o Include Top. Este include existe para
armazenar todas as declaraes globais que existiro no programa.
Voc tem a opo de utilizar o include TOP para essas declaraes ou o programa carregador dos
demais includes. O ideal a utilizao do TOP.

Defina o nome do include com o mesmo nome do programa principal, separando a string TOP
com um underline ( _ ).
Defina as caractersticas do programa na tela que vier a seguir. Observe que a categoria do
programa Pool de Modulos e no Programa executvel como nos relatrios.

Lgica do Programa de Exemplo

O programa que iremos utilizar para montar o on-line ser um cadastro simples, que atualizar a
tabela ZCADASTRO.
A estrutura da tabela a seguinte:

277987432.doc

3 / 41

O programa ser dividido nas seguintes partes/telas:


o Tela 100 Cadastro/Alterao/Excluso dos registros
o Tela 200 Consulta Individual dos registros e chamada de relatrio interno
o Tela 300 Consultas por sexo e chamada de relatrio externo.

Criando Tela 100 Cadastro

Para se criar uma tela, clique o boto direito do mouse sobre o nome do programa na rvore do
programa e selecione Criar -> Telas.

277987432.doc

4 / 41

A numerao da tela livre ao desenvolvedor. Iremos denomina-la de tela 0100.

Caractersticas da tela

Ao criar uma nova tela, devemos definir as caractersticas que essa tela vai ter.
o Descrio Breve: ttulo que identificar a tela.
o Tipo de tela:
Normal: Ao ativar este atributo, a tela marcada como tela normal. Esta
configurao a configurao 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 vrias subtelas em
reas diferentes. A chamada pode ser controlada de modo dinmico, de modo a
s ser determinada na execuo de transao qual a subtela a utilizar. Uma
subtela pode ser executada em vrias telas.
Caixa de dilogo modal: Ao ativar este atributo, a tela utilizada como caixa de
dilogo modal. Em oposio ao popup normal, uma caixa de dilogo modal
obtm uma barra de ferramentas prpria e um ttulo. No existe qualquer barra
de menu e no so possveis entradas no campo de comando.
o Opes:
Manter Dados: Ao ativar esta opo, so suportadas para a tela no tempo de
execuo
as
seguintes
entradas
de
menu:
Sistema->Especificaes
do
usurio->Manter
dados->Definir
dados
->Eliminar
dados
Deste modo, possvel manter no sistema as entradas efetuadas na tela. No
prximo processamento da tela (tambm em outro modo), o sistema insere
automaticamente nos campos de entrada as entradas mantidas. Se a opo no
for ativada, as entradas de menu no tm efeito no tempo de execuo da tela.

Desativar Compactao da tela para tempo de execuo: Se o atributo


"Desativar compactao de tempo de execuo" no estiver definido, no tempo
de execuo a tela exibida em forma comprimida desde que:

277987432.doc

tenha pelo menos um campo (campo de texto, campo de entrada/sada,


elemento grfico, subtela,quadro, ...) que invisvel ou

5 / 41

tenha uma rea de subtela cuja altura maior do que a da subtela


utilizada.
atributo no definido o caso standard. S em casos justificados se
deve desistir da compresso da tela no tempo de execuo.
Modelo No Executvel: Este atributo essencialmente determinado para a
utilizao interna SAP.
Manter Posio de Rolagem: Este atributo foi pensado para telas longas, nas
quais foi perdida a posio de rolagem atravs de algumas aes. Indica que a
posio de rolagem da tela principal deve ser mantida, se a tela for exibida
vrias vezes seguidas.

Outros Atributos:
Tela Seguinte: Neste campo, tem de ser indicado de forma esttica o n da
prxima tela no processo de transao. O n da tela seguinte 0 provoca o
encerramento da transao ou o retorno de uma tela ou programa chamado para
um nvel anterior posio da chamada.
Posio do Cursor: Se o curso no 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: possvel entrar uma seqncia de 4 caracteres no mximo,
disponvel durante o tempo de execuo da tela no campo SY-DYNGR.
Atravs do termo a entrar neste campo, podem ser atribudas vrias telas a um
mesmo grupo (de telas), que pode ser utilizado, por exemplo, para efetuar uma
modificao comum a todas as telas desse grupo.

As caractersticas da tela que iremos criar so as seguintes:

277987432.doc

6 / 41

Criado os campos na tela

A criao de campos na tela semelhante a diversas linguagens visuais existente. Existe uma barra
de ferramentas com os elementos de tela existente no SAP R3:
Ponteiro para reiniciar o desenho. Utilizado para redimensionar, mover, marcar objetos.
Campo texto. Utilizado como label de campos.
Campo de entrada e sada. Utilizado como campo de insero e sada de informaes na tela.
Campo seleo. Utilizado como check box.
Boto Rdio. Utilizado para escolha entre vrias opes
Boto. Utilizado com chamada de eventos.
Registro. Utilizado como tabstrip para modular informaes dentro da tela.
Assistente de registro. Utilizado para auxiliar a criao de registro.

277987432.doc

7 / 41

Quadro. Utilizado para moldurar informaes.


rea de subtela. Utilizado para marcar a rea de onde uma subtela ir ser posicionada.
Table Control. Utilizado para exibir/entrar com registros para tabela.
Assistente de table control. Utilizado para auxiliar a criao de uma table control.
Custom Control. Utilizado para marcar a rea onde um objeto ser inserido.
cone Status. Utilizado para inserir um cone de status na tela.

Utilizando as ferramentas apresentadas acima, devemos criar os seguintes objetos na tela:

Os parmetros dos campos sero os seguintes:

277987432.doc

8 / 41

277987432.doc

9 / 41

277987432.doc

10 / 41

277987432.doc

11 / 41

Todos os objetos de entrada, exceto o cdigo, devero estar com o parmetro de entrada
desabilitado, de forma a no aceitar nenhuma informao sem que o usurio informe antes o
cdigo. Para desabilitar, v na pasta Programa dos itens de Atributos desmarque o flag de
Campo de Entrada.

Quando utilizamos o objeto Radio na tela, devemos sempre agrupa-los para que somente um possa
ficar marcado num grupo de rdios associados. V opo Processar/Agrupamento/Grupo de
botes de rdio/Definir para marcar o agrupamento dos rdios.

277987432.doc

12 / 41

Completando a criao da tela


Variveis

Cada objeto existente na tela, dever ter uma varivel 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 exibio da tela e aps a execuo do PAI e serve para
preparar os objetos na tela. Tudo que deve ser preparado para a exibio da tela, como a ativao
da barra de status, os objetos de devem de estar exibidos ou inibidos, visveis e invisveis so
tratados no PBO.
Tanto o PBO quanto o PAI possuem um nmero limitado de comandos que podem ser executados
e, quando da necessidade de se executar uma gama maior de comandos, devemos cria-los dentro
de mdulos que so declarados em ambos os eventos.
Os comandos que podem ser utilizados no PBO so basicamente o comando LOOP e o comando
MODULE.
No PAI so executadas todas as verificaes aps o usurio acionar alguma ao, como o Enter ou
algum boto selecionado.
Os comandos que podem ser utilizados no PAI so 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 aplicao.
Para criar uma barra de status, clique com o boto direito sobre o nome do programa principal e
selecione Criar/Status GUI.

277987432.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, aparecero as opes principais para criarmos: Barra de Menu, Barra de Botes e
Teclas de Funo.
Na opo Barra de Menu iremos atribuir as opes que iro aparecer no menu principal. Essas
opes, quando no possurem sub-opes, devero ter um cdigo associado. Esse cdigo ser
recuperado dentro do PAI sempre que o usurio selecionar a opo.

Na opo Barra de Botes iremos atribuir os botes que aparecero na barra de botes da
aplicao.

277987432.doc

14 / 41

Para atribuir o cone, primeiro digite o cdigo da ao e em seguida de um duplo clique sobre. Em
seguida aparecer a seguinte tela:

Nome do
cone

Texto que
aparece ao lado
do cone

Texto de
hint

Na opo Teclas de Opo, iremos definir quais os botes da barra de botes standard que
ficaram ativos e qual o cdigo de cada um.

Os botes tambm podem ser classificados quanto a categoria da funo. Essa categoria de funo
define um grupo de botes que pode ser executado no PAI de forma conjunta. Basicamente
utilizamos isso nos botes de sada, como o BACK e o EXIT. Para isso, aps definirmos o cdigo
do boto, d um duplo-click sobre que aparecer a seguinte tela:

277987432.doc

15 / 41

Na categoria da funo dos botes BACK e EXIT, coloque a categoria E.

Barra de ttulos

A barra de ttulos define o ttulo a ser utilizado pela tela.


Para criar a barra de ttulo, clique com o boto direito sobre o nome do programa principal e
selecione Criar/Ttulos GUI.

Defina o ttulo com Manuteno do Cadastro.

PBO Process Before Output


MODULE STATUS_0100

Na programao da PBO da tela 100, iremos colocar a chamada da barra de status de da barra de
ttulos e a habilitao dos campos.
Para chamada das barras, crie um mdulo chamado MODULE status_0100..
Para criar a programao do mdulo, d um duplo clique sobre o nome do mdulo. Ir aparecer a
tela solicitando em qual include que iremos inserir a chamada do mdulo. recomendvel 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 no regra).

277987432.doc

16 / 41

No include iremos fazer a configurao da barra de status e da barra de ttulos, 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 ttulos.

MODULE HABILITAR

Voltando a PBO da tela, iremos declarar o outro mdulo do evento. Neste mdulo iremos definir o
mdulo 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 rdio) foram definidos como campo
somente de sada. Isso ocorreu para que o usurio primeiro entre com o cdigo e faa a checagem
se o mesmo est cadastrado ou no. Se estiver ele ser de alterao, caso contrrio ser de
incluso.
Na criao da tela, todos os objetos que foram definidos com somente de sada, tiveram um grupo
associado: o G1. Esse grupo foi definido para facilitar a habilitao para entrada. Com o grupo,
faremos a alterao verificando somente essa informao e no o nome do campo.

Crie o mdulo, inserindo no mesmo include do mdulo anterior, com o cdigo abaixo:

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

277987432.doc

17 / 41

*&
Module habilitar OUTPUT
*&---------------------------------------------------------------------*
*
text
*----------------------------------------------------------------------*
module habilitar output.
* Loop nos elementos da tela.
loop at screen.
* Se o grupo do elemento for G1
if screen-group1 = 'G1'.
*

Se a varivel v_hab esta com valor X


if v_hab = 'X'.

Habilita para entrada de dados


screen-input = 1.
else.

Desabilita para entrada de dados


screen-input = 0.
endif.

Modifica elementos da tela


modify screen.
endif.
endloop.

endmodule.

" habilitar OUTPUT

A varivel V_HAB deve ser declarada no include TOP como CHAR de 1 posio. Essa
varivel vai ser alimentada ou no na PAI, quando o usurio clicar sobre o boto checar.

PAI Process After Input

No PAI da tela 0100 iremos fazer todos os tratamentos necessrios para o desenvolvimento. O PAI
executado aps uma ao do usurio. Neste evento iremos: fazer checagem do preenchimento
dos campos EST, CEP, TEL e CEL, verificar os botes ou opes do menu selecionadas e chamar
os procedimentos corretos.
O cdigo do PAI o seguinte:
PROCESS AFTER INPUT.
MODULE trata_saida AT EXIT-COMMAND.
FIELD v_est VALUES ('RJ','SP').
FIELD: v_cep MODULE testa_cep ON INPUT.

277987432.doc

18 / 41

CHAIN.
FIELD: v_tel,
v_cel.
MODULE testa_tel ON CHAIN-INPUT.
ENDCHAIN.
MODULE user_command_0100.

MODULE TRATA_SAIDA

Primeiro, verificar se o usurio quer sair do programa. Como os botes de sada foram
configurados com categoria de funo igual a E de Exit (sada), iremos criar um mdulo para
verificar se algum desses botes foi pressionado. A criao do mdulo TRATA_SAIDA com a
clusula AT EXIT-COMMAND possibilita a checagem de todos os comandos que foram criados
com a categoria E.
Dentro do mdulo, teremos a seguinte codificao.

*&---------------------------------------------------------------------*
*&
Module TRATA_SAIDA INPUT
*&---------------------------------------------------------------------*
MODULE trata_saida INPUT.
IF sy-dynnr EQ '0100'.
LEAVE PROGRAM.
ELSEIF sy-dynnr EQ '0200'.
CASE sy-ucomm.
WHEN 'BACK'.
LEAVE TO SCREEN 100.
WHEN 'EXIT'.
LEAVE PROGRAM.
WHEN 'CANCEL'.
PERFORM limpa_tela_200.
ENDCASE.
ELSEIF sy-dynnr EQ '0300'.
CASE sy-ucomm.
WHEN 'BACK'.

277987432.doc

19 / 41

LEAVE TO SCREEN '0100'.


WHEN 'EXIT'.
LEAVE PROGRAM.
WHEN 'CANCEL'.
ENDCASE.
ENDIF.
ENDMODULE.

" TRATA_SAIDA INPUT

Como esse mdulo ser utilizado por todas as telas do programa, faz-se necessrio saber qual a
tela que esta chamando o mdulo. Para isso inserimos a varivel de sistema SY-DYNNR, que
retorna o nmero da tela atual. No caso da tela 0100, qualquer comando de sada (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 verificao dos valores vlidos para a entrada o estado. Usaremos o
comando FIELD com a clusula VALUES. Os valores inseridos entre parnteses so os
valores aceitos pelo programa. Isso criar na tela um Match Code com os valores vlidos.
O prximo passo testar o contedo do campo CEP. Nele teremos que ter uma string de 9
caracteres, o sexto campo dever ser um - e nenhum caracter diferente de nmero ou -. Veja o
cdigo abaixo:

*&---------------------------------------------------------------------*
*&
Module testa_cep INPUT
*&---------------------------------------------------------------------*
*
text
*----------------------------------------------------------------------*
MODULE testa_cep INPUT.
DATA: v_len TYPE i.
v_len = strlen( v_cep ).
IF v_len < 9.
MESSAGE e000(zlan) WITH 'Tamanho do CEP errado.'.
ENDIF.
IF v_cep+5(1) NE '-'.
MESSAGE e000(zlan) WITH 'Use o separador - na sexta casa'.
ENDIF.

277987432.doc

20 / 41

IF v_cep CN '1234567890-'.
MESSAGE e000(zlan) WITH 'Caracteres invlidos...'.
ENDIF.
ENDMODULE.

" testa_cep INPUT

Para testar o telefone e o celular, vamos utilizar o mesmo mdulo. Nestes casos em que mais de
um campo necessitam utilizar o mesmo mdulo do FIELD, precisamos agrupa-los dentro do
controle CHAIN e ENDCHAIN. Cada grupo de FIELD e MODULE compe vrios campos.
No caso abaixo, verificamos se os dados esto utilizando a mscara 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 '-'.
MESSAGE e000(ysf) WITH 'Use a mscara (XX)XXXX-XXXX no telefone'.
ENDIF.
ENDIF.
IF v_cel NE space.
IF v_cel(1) NE '(' OR
v_cel+3(1) NE ')' OR
v_cel+8(1) NE '-'.
MESSAGE e000(ysf) WITH 'Use a mscara (XX)XXXX-XXXX no celular'.
ENDIF.
ENDIF.
ENDMODULE.

277987432.doc

" testa_tel INPUT

21 / 41

Todas as outras checagens sero feitas no MODULE USER_COMMAND_0100.

MODULE USER_COMMAND_0100.
*&---------------------------------------------------------------------*
*&
Module USER_COMMAND_0100 INPUT
*&---------------------------------------------------------------------*
MODULE user_command_0100 INPUT.
* se o valor do cdigo na tela estiver vazio, sai do modulo.
CHECK NOT v_codigo IS INITIAL OR ( sy-ucomm NE 'UNIQUE' OR
sy-ucomm NE 'ALL' ).
* verifica qual o comando (ao) pressionado pelo usurio
CASE sy-ucomm.
WHEN 'CHECAR'. " Clicou no boto de checar
PERFORM checar.
WHEN 'SAVE'. " Clicou no boto de salvar
PERFORM salvar.
WHEN 'CHANGE'. " Clicou no boto de alterar
PERFORM alterar.
WHEN 'DELETE'. " Clicou na opo excluir do menu
PERFORM deletar.
WHEN 'UNIQUE'. " Clicou na opo Individual do menu
PERFORM rel_individual.
WHEN 'ALL'.

" Clicou no boto todos.

PERFORM rel_geral.
ENDCASE.
ENDMODULE.

" USER_COMMAND_0100 INPUT

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.
recomendvel 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 no
regra). Todos os outros performs devero ser gravados no mesmo include.

277987432.doc

22 / 41

Neste perform iremos verificar se o cdigo digitado existe, existindo iremos armazenar o contedo
nas variveis de tela e no habilitar os controles, pois o usurio ser obrigado a pressionar a tecla
ALTERAR para fazer isso, caso contrrio, ou seja, no exista, iremos habilitar os outros campos
para que o usurio digite o novo registro.
Criar, no include TOP as seguintes declaraes:

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 cdigo abaixo:


FORM checar.
* busca na tabela zcadastro se existe registro com o mesmo valor do
* cdigo digitado na tela de seleo
SELECT SINGLE *
FROM zcadastro
INTO wa_zcadastro
WHERE codigo = v_codigo.
* se encontrar, transfere os valores da estrutura que recebeu os
* valores da tabela para as variveis de tela.
IF sy-subrc EQ 0.
PERFORM transf_valores.
v_hab = ' '.
*
*
*

ELSE.
Se no 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.

ENDFORM.

277987432.doc

" checar

23 / 41

Observe no cdigo a varivel v_hab. Ela indica se os controles (campos) na tela 0100 iro ser
habilitados ou no. Isso obrigar, caso o cdigo j exista, que se o usurio quiser alterar, ele deve
pressionar o boto Alterar antes de iniciar as alteraes.

PERFORM TRANSF_VALORES

No perform transf_valores iremos transferir os valores que esto


WA_CADASTRO, que foi preenchida no select, para as variaveis de tela.

na

estrutura

FORM transf_valores.
* transfere os valores da estrutura para a tela
v_nome = wa_zcadastro-nome.
v_rua = wa_zcadastro-rua.
v_bairro = wa_zcadastro-bairro.
v_cidade = wa_zcadastro-cidade.
v_est = wa_zcadastro-estado.
v_cep = wa_zcadastro-cep.
v_tel = wa_zcadastro-telefone.
v_cel = wa_zcadastro-celular.
v_email = wa_zcadastro-email.
v_neg = wa_zcadastro-negociacao.
v_serv = wa_zcadastro-servico.
v_pros = wa_zcadastro-prospectar.
IF wa_zcadastro-sexo = 'M'.
v_masc = 'X'.
ELSE.
v_fem = 'X'.
ENDIF.
ENDFORM.

277987432.doc

" transf_valores

24 / 41

PERFORM SALVAR

No perform SALVAR iremos efetuar a gravao ou alterao do registro fisicamente na tabela.


O comando utilizado para inserir na tabela o INSERT e o comando de alterao o
UPDATE.
A sintaxe do comando INSERT :
INSERT INTO <tabela> [VALUES <valores>].

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 tambm 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>.

A sintaxe do comando UPDATE :


UPDATE <tabela> [SET <campos> = <valor>]
[WHERE <condio>].

O comando UPDATE pode ser utilizado de forma semelhante ao comando INSERT. Se


transferirmos todos os valores para uma estrutura, inclusive as chaves da tabela, poderemos usar o
UPDATE com a estrutura da tabela instanciada pelo comando TABLES:
UPDATE <tabela>.

No perform SALVAR, quando for a alterao do registro, podemos efetuar um bloqueio do


registro que estamos gravando, para que nenhum outro usurio tente alterar no mesmo momento.
Essa tcnica chama-se OBJETOS DE BLOQUEIO.

Objetos de Bloqueio
o

o
o
o

O conceito de bloqueio simples. Uma funo executada em determinado ponto do


programa. Essa funo bloqueia o registro para gravao ou leitura. Qualquer usurio que
deseje utilizar o mesmo registro fica impedido de utilizar. Quando o primeiro usurio, o
que bloqueou o registro, abandonar o processamento, ser executada outra funo, que
desta vez desbloqueia o registro.
Essas funes so de fcil localizao. Toda funo de bloqueio, comea com
ENQUEUE e de desbloqueio com DEQUEUE.
No existindo o objeto de bloqueio, crie um novo na transao SE11, opo Objeto de
Bloqueio
Todo objeto de bloqueio deve comear com a letra E.

277987432.doc

25 / 41

Nome da
Tabela do
Objeto

Tipo do
bloqueio

277987432.doc

26 / 41

Campos
chave da
tabela

No exemplo acima, sero criadas duas funes: ENQUEUE_EZTESTELAN00 que


ser usada para bloqueio e DEQUEUE_EZTESTELAN00 que ser usada para
desbloqueio.
No perform SALVAR, o cdigo ser o seguinte:
o

FORM salvar.
* Transfere os valores da estrutura para as variveis de tela
wa_zcadastro-codigo
= v_codigo.
wa_zcadastro-nome
= v_nome.
wa_zcadastro-rua
= v_rua.
wa_zcadastro-bairro
= v_bairro.
wa_zcadastro-cidade
= v_cidade.
wa_zcadastro-estado
= v_est.
wa_zcadastro-cep
= v_cep.
wa_zcadastro-telefone = v_tel.
wa_zcadastro-celular = v_cel.
wa_zcadastro-email
= v_email.
wa_zcadastro-negociacao = v_neg.
wa_zcadastro-servico = v_serv.
wa_zcadastro-prospectar = v_pros.
IF v_masc = 'X'.
wa_zcadastro-sexo = 'M'.
ELSE.
wa_zcadastro-sexo = 'F'.
ENDIF.
* Se o valor da varivel v_ucomm for NOVO significa que para

277987432.doc

27 / 41

* inserir
* novo registro na tabela; se for ALTERAR, modificar registro
* da tabela
IF v_ucomm = 'NOVO'.
INSERT INTO zcadastro VALUES wa_zcadastro.
ELSEIF v_ucomm = 'ALTERAR'.
*
*

transfere da estrutura da estrutura da tabela declarada *


com tables
zcadastro = wa_zcadastro.
CALL FUNCTION 'ENQUEUE_EZTESTELAN00'
EXPORTING
mode_zcadastro = 'E'
mandt
= sy-mandt
codigo
= zcadastro-codigo
EXCEPTIONS
foreign_lock = 1
system_failure = 2
OTHERS
= 3.
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.
CALL FUNCTION 'DEQUEUE_EZTESTELAN00'
EXPORTING
MODE_ZCADASTRO
= 'E'
MANDT
= SY-MANDT
CODIGO
= zcadastro-codigo.
ENDIF.
* se o retorno do insert ou do update for 0, efetua o commit,
* caso contrrio, executa o rollback
IF sy-subrc EQ 0.
COMMIT WORK.
ELSE.
ROLLBACK WORK.
ENDIF.

277987432.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.
ENDFORM.

" salvar

PERFORM ALTERAR

O perform alterar muito simples. Sua funo exclusivamente indicar a habilitao dos
campos e indicar na varivel V_UCOMM que sua funo ALTERAR.
Essa varivel testada no perform SALVAR para indicar se dever ser utilizado o comando
INSERT ou UPDATE.
FORM alterar.
* Se a estrutura no estiver vazia, modifica a v_hab para habilitar a
* tela e transfere a instruo ALTERAR para a v_ucomm para na hora do
* salvar fazer o UPDATE
IF NOT wa_zcadastro IS INITIAL.
v_hab = 'X'.
v_ucomm = 'ALTERAR'.
ENDIF.
ENDFORM.

" alterar

PERFORM DELETAR

No perform DELETAR, iremos ver outro comando de manipulao de tabelas de banco de dados,
que o comando DELETE.
A sintaxe do comando DELETE :
DELETE FROM <tabela> WHERE <cond>.
Neste perform, antes de efetuar a deleo do registro, por questo de segurana, iremos questionar
a escolha do comando. Para isso iremos usar uma funo standard, chamada
POPUP_TO_CONFIRM_STEP. Essa funo ir abrir uma janela onde o usurio responde a uma
pergunta. O teste da resposta feito com: (J) para sim, (N) para no e (C) para cancelar.

277987432.doc

29 / 41

O cdigo do perform ser o seguinte:


FORM deletar.
DATA: lc_answer.
* Se na for novo registro
CHECK NOT v_ucomm = 'NOVO'.
* exibe mensagens para confirmao da excluso. a resposta ficar na
* varivel lc_answer.
CALL FUNCTION 'POPUP_TO_CONFIRM_STEP'
EXPORTING
textline1 = 'Confirma Excluso ?'
titel
= 'Excluso'
IMPORTING
answer = lc_answer.
* O J significa o retorno do SIM
IF lc_answer = 'J'.
*

exclui da tabela onde o cdigo for igual ao cdigo da tela.


DELETE FROM zcadastro WHERE codigo = v_codigo.
* se o retorno do delete for 0, efetua o commit, caso
* contrrio, executa o rollback
IF sy-subrc EQ 0.
COMMIT WORK.
ELSE.
ROLLBACK WORK.
ENDIF.
ENDIF.
* limpa as variveis de tela, a v_hab para desabilitar a tela e a
* 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.
ENDFORM.

277987432.doc

" deletar

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 no a chamadora, utilizamos o comando LEAVE TO SCREEN <n>.
O cdigo do perform ser o seguinte:
FORM rel_individual.
PERFORM limpa_variaveis.
CALL SCREEN 200.
ENDFORM.

" rel_individual

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 captulo associado a tela 0300.
O cdigo do perform ser o seguinte:

FORM rel_geral.
REFRESH ti_zcadastro.
wc_dynnr = '0310'.
PERFORM define_selecao USING 'MASC'.
tabstrip1-activetab = 'MASC'.
CALL SCREEN 300.
ENDFORM.

" rel_geral

Como na abertura da tela 0300 iremos carregar os dados do cadastro, iremos construir um
perform que utilizar o conceito de SELECT DINMICO para selecionar os dados da tabela.

PERFORM DEFINE_SELECAO.

O perform DEFINE_SELECAO ir carregar a tabela interna utilizada na tela 0300 com as


informaes vidas do cadastro, separada por sexo.
O perform recebe um parmetro no momento da chamada. Esse parmetro pode ser MASC
ou FEM, o que ir orientar na hora da seleo.

277987432.doc

31 / 41

SELECT Dinmico

Utilizar o conceito de SELECT Dinmico significa montar a clusula WHERE antes da seleo
dos dados.
Isso ocorre quando temos de utilizar diversas formas do mesmo select. Ao invs de criarmos
vrios comandos SELECTs, criamos uma nica chamada, com o contedo da clusula WHERE
dentro de uma tabela interna.
Essa tabela interna dever conter uma nica linha, com um campo do tipo caracter de 72 posies.
Ao montar o SELECT, sempre que precisar inserir uma varivel, a mesma deve estar entre 4 aspas
simples de cada lado.
Toda a clusula WHERE deve ser montada dentro da tabela interna, podendo ser utilizada mais de
uma linha se necessrio.
Na chamada do SELECT, na clusula WHERE, colocar entre parnteses o nome da tabela interna
criada.
FORM define_selecao USING p_sexo.
DATA: BEGIN OF ti_select OCCURS 0,
linha(72),
END OF ti_select.
DATA: v_sexo(1).
IF p_sexo = 'MASC'.
v_sexo = 'M'.
ELSE.
v_sexo = 'F'.
ENDIF.
CONCATENATE '''' v_sexo '''' INTO ti_select-linha.
CONCATENATE 'SEXO EQ' ti_select-linha INTO ti_select-linha
SEPARATED BY space.
APPEND ti_select.
SELECT *
FROM zcadastro
INTO TABLE ti_zcadastro
WHERE (ti_select).
ENDFORM.

277987432.doc

" define_seleo

32 / 41

Criando a tela 200 - Consulta Individual


Detalhes especficos da tela

A tela 200 ser uma consulta utilizando um objeto chamado TABLE CONTROL,
que um grid que contm as informaes de uma determinada tabela interna.
Na tela 200, aps o usurio selecionar o registro, o mesmo poder emitir um
relatrio.
Esse relatrio ser uma chama de relatrio interno dentro do ON-LINE.

Montagem da tela 200

Como a maioria dos objetos j foram ensinados como se cria, alguns sero
informados somente o objeto, o nome e o texto deste.
A tela 200 ter os seguintes objetos:
o Dois campos textos, com textos Cdigo e outro Nome.
o Dois campos de entrada/sada, um chamado V_CODIGO e outro
V_NOME.
o Uma TABLE CONTROL, chamada de TC1

Campos de
texto

V_CODIGO
V_NOME
TC1

277987432.doc

33 / 41

Criando uma Table Control


O processo de criao de uma Tabela Control o seguinte:
Insira o objeto na posio 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 usurio selecionar somente um registro.
O prximo 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
necessrio 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.
DATA: BEGIN OF ti_zcad OCCURS 0,
flag(1).
INCLUDE STRUCTURE zcadastro01.
DATA: END OF ti_zcad.

Selecionar no menu a opo Saltar - Janela Secundria - Campos dict./programa

Digitar o nome da tabela interna (TI_ZCAD) e clicar em chamar do programa.


Ao aparecer a estrutura, marcar todos os campos que se deseja colocar na TABLE
CONTROL. No nosso exemplo iremos inserir os campos CODIGO, NOME e
SEXO.
Aps marcar os campos desejados, clique no boto OK
Inserir os campos selecionados dentro da TABLE CONTROL.
Ao soltar os campos dentro do objeto, diversas colunas sero inseridas (no nosso
caso 3).

277987432.doc

34 / 41

Coluna do
Nome
Coluna do
Cdigo

Coluna do
Sexo

O prximo passo colocar os cabealhos nas colunas. Inserir um objeto de campo


texto (LABEL) sobre cada coluna e colocar os ttulos nelas (Cdigo, Nome e
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).

277987432.doc

35 / 41

Aps 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:
*declarar a Table Control e a tela em que ela esta
CONTROLS TC1 TYPE TABLEVIEW USING SCREEN 200.

O comando CONTROLS utilizado para declarar TABLES CONTROL e


TABSTRIP. Para TABLE CONTROL o tipo ser TABLEVIEW e para
TABSTRIP ser TABSTRIP. No caso do TABLE CONTROL necessrio apontar
a tela a qual ele pertence.
O prximo passo preparar o TABLE CONTROL no PBO e PAI da tela. Sempre
que o objeto for criado, temos de inserir um LOOP/ENDLOOP em ambos evento
da tela para cada TABLE CONTROL que a tela possuir.
O LOOP/ENDLOOP da PBO dever ser da seguinte forma:
LOOP AT ti_zcad
WITH CONTROL tc1
CURSOR tc1-current_line.
ENDLOOP.

O LOOP/ENDLOOP da PAI ser um loop simples.


LOOP AT ti_zcad.
MODULE trata_registro.
ENDLOOP.

O MODULE entre o loop no obrigatrio. No caso do nosso programa ele


servir para gravar na tabela qual o registro que foi marcado para futura ao (no
nosso caso para ser emitido em relatrio).
O cdigo do mdulo ser:

277987432.doc

36 / 41

MODULE trata_registro INPUT.


* modify tabela interna guardo quem escolho na linha corrente da tc1
MODIFY ti_zcad INDEX tc1-current_line.
ENDMODULE.

" trata_registro INPUT

O MODIFY ir modificar o contedo da linha que estamos lendo na tabela


interna. Se o usurio marcar o registro, o mesmo ir alterar o valor do campo
FLAG na tabela interna. O complemento INDEX TC1-CURRENT_LINE indica
qual registro que ser modificado. Isso necessrio, pois os comandos LOOP que
foram colados na PBO e PAI apesar de apontar para a tabela interna, ele na
verdade esta percorrendo as linhas do TABLE CONTROL, que utiliza a tabela
como referncia e no na prpria tabela interna.

PBO e PAI da tela 200

O cdigo da PBO e PAI da tela 200 ser o seguinte:


PROCESS BEFORE OUTPUT.
MODULE status_0200.
LOOP AT ti_zcad WITH CONTROL tc1 CURSOR tc1-current_line.
ENDLOOP.
PROCESS AFTER INPUT.
MODULE trata_saida AT EXIT-COMMAND.
LOOP AT ti_zcad.
MODULE trata_registro.
ENDLOOP.
MODULE user_command_0200.

PBO Process Before Output

Na PBO da tela 200 iremos fazer a configurao da barra de status e o loop da


TABLE CONTROL, somente.

MODULE STATUS_0200
Fazer a chamada da barra de status STATUS2 e da barra de ttulo 200.
MODULE status_0200 OUTPUT.
SET PF-STATUS 'STATUS2'.
SET TITLEBAR '200'.

277987432.doc

37 / 41

ENDMODULE.

" status_0200 OUTPUT

Criar a STATUS2 conforme abaixo:

Criar a barra de ttulo 200 conforme abaixo:

PAI Process After Input

Na PAI da tela 200 iremos aproveitar o mesmo perform para verificao que foi criado para a tela
100, uma vez que ele esta preparado para todas as telas.

277987432.doc

38 / 41

MODULE USER_COMMAND_0200

Neste mdulo iremos verificar as aes do usurio e desviar o programa para o


performs corretos.
MODULE user_command_0200 INPUT.
CASE sy-ucomm.
WHEN 'BUSCAR'.
PERFORM seleciona_reg.
WHEN 'SELEC'.
PERFORM relatorio_ind.
ENDCASE.
ENDMODULE.

" USER_COMMAND_0200 INPUT

PERFORM SELECIONA_REG.

Neste perform iremos fazer a seleo dos registros de acordo com as informaes passadas na tela
pelo usurio. Se ele entrar com cdigo, iremos fazer uma pesquisa simples, atravs do campo
CODIGO. Se ele informar o nome, iremos fazer uma busca com LIKE no campo NOME. Essa
busca com LIKE no recomendada quando se trata de tabelas muito grandes, uma vez que a
performance com o LIKE baixssima.
Para a busca com o LIKE, temos de inserir o caracter % na posio de cada * que o usurio
informar na tela. A substituio do * pelo % feita com o comando TRANSLATE.

FORM seleciona_reg.
DATA: lc_nome LIKE v_nome.
IF v_codigo IS INITIAL.
lc_nome = v_nome.
TRANSLATE lc_nome USING '*%'.
SELECT *
FROM zcadastro01
INTO CORRESPONDING FIELDS OF TABLE ti_zcad
WHERE nome LIKE lc_nome.
ELSE.
SELECT *
FROM zcadastro01

277987432.doc

39 / 41

INTO CORRESPONDING FIELDS OF TABLE ti_zcad


WHERE codigo = v_codigo.
ENDIF.
ENDFORM.

" seleciona_reg

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 LINESELECTION e AT USER-COMMAND.
FORM relatorio_ind.
LEAVE TO LIST-PROCESSING.
ULINE.
READ TABLE ti_zcad WITH KEY flag = 'X'.
CHECK sy-subrc = 0.
WRITE: / 'Codigo:', ti_zcad-codigo,
/ 'Nome: ', ti_zcad-nome,
/ 'Rua: ', ti_zcad-rua,
/ 'Bairro:', ti_zcad-bairro.
ENDFORM.
" relatorio_ind

277987432.doc

40 / 41

277987432.doc

41 / 41

You might also like