Escolar Documentos
Profissional Documentos
Cultura Documentos
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
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.
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
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.
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
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
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.
277987432.doc
5 / 41
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.
277987432.doc
6 / 41
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
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
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
Barra de ttulos
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
*&---------------------------------------------------------------------*
*&
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'.
*
endmodule.
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.
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
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.
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
21 / 41
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'.
PERFORM rel_geral.
ENDCASE.
ENDMODULE.
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
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
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
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>.
Objetos de Bloqueio
o
o
o
o
277987432.doc
25 / 41
Nome da
Tabela do
Objeto
Tipo do
bloqueio
277987432.doc
26 / 41
Campos
chave da
tabela
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'.
*
*
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
" 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
277987432.doc
" deletar
30 / 41
PERFORM REL_INDIVIDUAL.
" rel_individual
PERFORM REL_GERAL.
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.
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
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.
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
277987432.doc
34 / 41
Coluna do
Nome
Coluna do
Cdigo
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).
277987432.doc
35 / 41
277987432.doc
36 / 41
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.
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
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
" 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