Professional Documents
Culture Documents
Introduo ........................................................................................... 5
Composio........................................................................................ 5
Como ent ender a apost ila....................................................................... 5
Conhecimentos Bsicos sobre a Plataforma de Desenvolvimento ABAP ................ 7
Caract erst icas Principais ....................................................................... 7
O Repositrio do R/ 3............................................................................... 8
O que o Reposit rio ............................................................................ 8
Classes de desenvolviment o .................................................................... 8
O Dicionrio de Dados........................................................................... 10
Definies bsicas .............................................................................. 10
As caract erst icas t cnicas das t abelas do R/ 3 ............................................ 13
Verificaes de chave ext erna (f oreign keys) ............................................. 15
Processos de aj ust e e converso de t abelas ............................................... 16
Vises no R/ 3.................................................................................... 17
Al, Mundo! ........................................................................................ 20
Criando seu primeiro programa ABAP/ 4 .................................................... 20
Bibliotecas de Funes.......................................................................... 22
O que so as funes no R/ 3.................................................................. 22
RFC................................................................................................ 23
Funct ion Groups ................................................................................ 23
Os Criadores de Menus e Telas ................................................................ 24
Criando menus .................................................................................. 24
Criando Telas.................................................................................... 24
Criando Tabelas Internas e Estruturas Complexas de Armazenagem Temporria.. 28
Tabela int erna .................................................................................. 28
Tipos de t abelas int ernas...................................................................... 28
Ext ract s .......................................................................................... 29
O Open SQL ........................................................................................ 31
Comandos........................................................................................ 31
Campos de sist ema ............................................................................. 32
I-PROVIDER
Pgina 2
I-PROVIDER
Pgina 3
I-PROVIDER
Pgina 4
Int roduo
Composio
Este material tem como objetivo principal apresentar o ambiente de programao ABAP aos
profissionais que no desenvolvero programas diretamente, mas necessitam conhecer a ferramenta
para embasar seu trabalho.
Para o aprendizado mais especfico desta ferramenta, aconselha-se a preparao em programas de
treinamentos oficiais, junto a SAP Brasil.
I-PROVIDER
Pgina 5
Contedo Programtico
Biblioteca de Funes;
I-PROVIDER
Pgina 6
Ca m a da de
Apre se nt a o
(Front -e nd)
Ca m a da de
Aplic a o
Progra m a ABAP
Se rvidor de
Ba nc o de
Da dos
Caractersticas Principais
O R/3 usa o modelo cliente-servidor de trs camadas, com a primeira camada composta pelo
servidor de banco de dados, uma outra camada de aplicao, onde so executadas as regras de
negcio, e uma camada de apresentao, onde os usurios rodam o programa de front-end
responsvel pela interface do usurio com o sistema.
O ABAP a linguagem de programao nativa do SAP R/3, e uma linguagem interpretada
de alto nvel. Dentro do servidor de aplicao do R/3, todos os programas responsveis pelas regras
de negcio so programas ABAP que fazem uso de bibliotecas escritas, em sua maioria, em
linguagem C (kernel do R/3).
Os programas ABAP ficam armazenados no banco de dados, sendo que o R/3 gera, na
primeira execuo de cada programa ou em bloco, um cdigo intermdirio pseudo-compilado,
especfico para cada combinao de sistema operacional + verso do R/3. At mesmo alguns nveis
de atualizao de kernel tornam incompatvel o cdigo previamente gerado, havendo necessidade de
recompilar os programas ABAP.
Todo o desenvolvimento dos programas ABAP pode ser realizado usando ferramentas
disponibilizadas pelas transaes apropriadas dentro do prprio R/3, dispensando o uso de
ferramentas externas. Essas transaes sero detalhadas durante o curso.
I-PROVIDER
Pgina 7
O Reposit rio do R/ 3
O que o Repositrio
O Repositrio do R/3 a coleo de todos os programas ABAP, classes, interfaces, grupos
de funo e objetos do Dicionrio de Dados presentes num sistema R/3, quer sejam objetos
originais da SAP, quer sejam objetos criados pelo cliente.
Os programas e outros objetos do repositrio criados pelo cliente devem estar no namespace
de cliente, ou seja, seus nomes devem comear com as letras Z ou Y (com exceo dos campos em
append structures, que devem comear por ZZ ou YY). Os clientes s devem alterar objetos com
nomes fora dessa especificao quando expressamente orientados pela SAP a faz-lo (por exemplo,
para aplicar notas de correo). A SAP garante que os programas desenvolvidos pelos clientes que
observarem as especificaes de namespace no sero afetados quando houver uma atualizao do
sistema, como uma aplicao de Support Package. No entanto, caso seja alterado um programa
standard da SAP, no h garantias de que o programa alterado permanecer como tal aps qualquer modificao no
sistema. Para agregar funcionalidades a programas da SAP, existe o recurso das User Exits, que ser
tratado posteriormente, na terceira semana do workshop.
Classes de desenvolvimento
I-PROVIDER
Pgina 8
O Repositrio est separado pelos mdulos funcionais, e os objetos nele contidos esto
separados logicamente em classes de desenvolvimento. As classes de desenvolvimento so agrupamentos
de objetos do repositrio que esto relacionados entre si. Todo objeto do repositrio deve pertencer
a uma classe de desenvolvimento e toda classe de desenvolvimento deve ter definido um transport
layer, que uma definio de Basis que define qual a rota de transporte (para quais sistemas o
objeto pode ser transportado numa change request, ou se no pode ser transportado, caso seja um
layer local).
I-PROVIDER
Pgina 9
O Dicionrio de Dados
Definies bsicas
O dicionrio ABAP permite a administrao central de todas as definies de dados do R/3,
permitindo a criao de tipos de dados definidos pelo usurio para uso posterior, alm de vrios itens
auxiliares ao desenvolvimento de programas (p.ex. search helps).
Podem ser definidas tabelas e vises dentro do dicionrio. O R/3 se encarrega, durante a
ativao desses elementos, de cri-los no banco de dados. O dicionrio permite, ainda, a criao de
ndices, que agilizam as buscas. A definio de ndices apropriados de suma importncia para o
bom desempenho do sistema. Cabe lembrar que uma busca sem ndice realizada em uma tabela
extensa pode ter pesado custo em termos de performance.
As definies de tipos de dados dentro do R/3 incluem os elementos de dados, que
definem um tipo elementar descrevendo o tipo bsico de dados, o comprimento e, eventualmente, as
casas decimais; as estruturas, que podem receber elementos de vrios tipos (semelhante
representao de um registro numa tabela); e os table types, que seriam campos em formato de
tabela. Por exemplo, uma estrutura do registro de uma estrutura de usurio que tivesse um campo
para nmeros de telefone poderia usar um table type e permitir colocar vrios nmeros num mesmo
campo.
I-PROVIDER
Pgina 10
Alm dessas definies, o dicionrio ABAP permite criar os search helps, que so tabelas de
busca auxiliares aos campos de tela so as buscas e tabelas que aparecem quando se tecla F4 dentro
de um campo em qualquer tela do R/3. Criando documentao para o elemento de dados dentro do
dicionrio, automaticamente est disponvel a ajuda do campo, que pode ser invocada usando-se a
tecla F1 dentro dos campos de tela. Pode-se, ainda, definir verificaes de entrada automaticamente,
bastando definir uma relao de foreign key.
No dicionrio tambm so criados os objetos de lock, que permitem definir o travamento
de dados dentro do R/3. Por exemplo, podem-se definir objetos de lock para impedir que dois
usurios editem a mesma informao ao mesmo tempo no sistema.
O dicionrio integrado s ferramentas de desenvolvimento e execuo do R/3, permitindo
o acesso das ferramentas s definies nele contidas. Por exemplo, possvel navegar de um
programa que esteja sendo criado no editor ABAP para definies de campos, elementos e tabelas
usadas no programa.
Definio de tabelas
Uma tabela consiste de colunas (campos) e linhas (registros). Cada tabela possui um nome e
atributos, como por exemplo a classe de desenvolvimento e a autorizao para manuteno. Cada
campo deve ter um nome nico dentro da tabela, e pode fazer parte de uma chave. Cada tabela deve
ter uma chave primria, que composta por campos cujos valores identificam unicamente os
registros de uma tabela. As tabelas definidas no dicionrio de dados do R/3 so criadas no banco de
dados assim que ativadas.
I-PROVIDER
Pgina 11
I-PROVIDER
Pgina 12
I-PROVIDER
Pgina 13
data, transaction data, organizational data e system data. Os dados mestres devem ser
classificados como master data, os dados transacionais como transaction data, a configurao
funcional como organizational data e os dados de sistema como system data. Geralmente, dentro de
um projeto, so criadas tabelas dos tipos master e transaction somente. De posse dessa informao, o
R/3 separa as tabelas em diferentes arquivos do banco de dados de forma a otimizar a performance.
A categoria de tamanho das tabelas permite ao R/3 alocar espao no banco de dados de
acordo com o tamanho projetado para a tabela, de modo a evitar fragmentao dos dados.
Pode-se definir que uma determinada tabela ser armazenada em buffer de memria. Com
isso, o acesso tabela otimizado, mas deve-se usar de bom senso para colocar tabelas em buffer.
Por exemplo, tabelas candidatas a entrar no buffer so dados mestres com muita utilizao e
raramente atualizadas. Tabelas de dados transacionais no devem ser colocadas em buffer, pois cada
registro dentro delas menos frequentemente acessado que nas tabelas de dados mestres, e esto
sujeitos a atualizaes. A atualizao de uma tabela que esteja no buffer provoca seu re-carregamento
com consequente impacto no desempenho dos programas.
O buffer pode ser definido nos modos full, no qual a tabela inteira colocada no buffer,
single-record, onde apenas os registros eventualmente acessados so colocados no buffer, e
generic, no qual so colocados no buffer registros que tenham determinados valores na chave. Os
dados no so automaticamente colocados no buffer assim que o sistema entra no ar; isso s
acontecer no primeiro acesso a um registro que esteja em um intervalo de buffer.
Caso seja necessrio, pode-se definir o registro em log das alteraes feitas numa tabela.
Porm, deve-se ter em mente que isso pode criar um impacto na performance do sistema.
I-PROVIDER
Pgina 14
I-PROVIDER
Pgina 15
I-PROVIDER
Pgina 16
original para a nova tabela. Porm, o grande problema na converso ocorre quando a chave
reduzida de tamanho. Corre-se o risco de, considerada a nova chave, registros que no incorriam em
problemas de chave duplicada passarem a s-lo. Nesse caso, apenas um dos registros ser copiado, e
no se pode ter certeza qual ser. Assim, recomendvel evitar ao mximo a alterao de chaves nas
tabelas criadas no R/3 que j possuam volume de dados produtivos.
Vises no R/ 3
As vises so queries de uma ou mais tabelas, que retornam um conjunto de dados que pode
ser tratado como uma tabela pelos programas ABAP. As vises so definidas no dicionrio de dados,
estando disponveis para uso em todo o sistema. As vises podem ser do tipo join, nas quais
trazido um conjunto de dados a partir de vrias tabelas unidas por joins; do tipo projection, nas
quais selecionam-se apenas os campos desejados de uma tabela especfica; ou do tipo selection, nas
quais se deseja exibir apenas os registros que satisfaam um determinado critrio.
I-PROVIDER
Pgina 17
Exerccios de Fixao
O dicionrio de dados
Exerccio proposto:
Exerccio 1
Criar uma tabela transparente, para controlar prazo de validade de produtos perecveis.
A tabela deve ter os seguintes campos:
Campo
CH
Elem. Dados
MANDT
MANDT
Mandante
WERKS
WERKS
Centro
MATNR
MATNR
Material
DTFAB
DATAB
PRVAL
MHDHB
Prazo de validade
Exerccio 2
Criar uma Viso para visualizar os dados da tabela criada no exerccio anterior.
I-PROVIDER
Pgina 18
Soluo:
Exerccio 1
1.
Pela transao:
SE11
2.
Selecione TABELA BANCO DE DADOS, digite o nome da tabela a ser criada e depois
clique sobre o boto CRIAR.
3.
Entre com uma descrio breve e defina Categoria da Tabela e Classe de Entrega.
4.
Digite o nome dos campos, lembrando sempre de inserir os Campos Chave primeiro,
marcando-os na coluna CHAVE, e defina seus Elementos de Dados.
5.
Salvar.
6.
7.
8.
Selecione o Tipo de Dados e Categor. Tamanho adequados para a tabela que est sendo
criada.
9.
Exerccio 2
1.
Pela transao:
SE11
2.
Selecionando VISO, digite com o nome da Viso a ser criada e clique sobre o boto
CRIAR,
3.
4.
Na pasta Tabelas/Condies Join, na coluna TABELAS, entre com o nome da tabela para a
qual a viso ser criada.
5.
Passando para a pasta Cpos.Viso, acrescente os campos que devem ser visualizados,
incluindo o campo mandante.
6.
Salve.
7.
8.
Ative.
9.
I-PROVIDER
Pgina 19
Al, Mundo!
Com apenas duas linhas de cdigo, acabamos de criar nosso primeiro programa ABAP.
Selecione F8 (executar), e misso cumprida. Por ser este exemplo muito simples, introduziremos um
exemplo mais elaborado, que permitir explicar alguns pontos iniciais sobre a programao:
I-PROVIDER
Pgina 20
REPORT ZHELLO2.
INCLUDE ZCODIGO.
TABLES:
SFLIGHT.
DATA:
CAMPO_1(7)
CAMPO_2(4)
IT_SFLIGHT
WA_SFLIGHT
TYPE
TYPE
LIKE
LIKE
C,
N,
TABLE OF SFLIGHT,
LINE OF IT_SFLIGHT.
START-OF-SELECTION.
SELECT CARRID CONNID FLDATE SEATSMAX SEATSOCC
INTO CORRESPONDING FIELDS OF TABLE IT_SFLIGHT
FROM SFLIGHT
WHERE CARRID = 'AA'.
CAMPO_1 = 'LIVRE: '.
LOOP AT IT_SFLIGHT INTO WA_SFLIGHT.
CAMPO_2 = WA_SFLIGHT-SEATSMAX - WA_SFLIGHT-SEATSOCC.
WRITE: /10
WA_SFLIGHT-CONNID,
WA_SFLIGHT-CARRID,
CAMPO_1,
CAMPO_2.
ENDLOOP.
Vamos analisar cada componente do novo trecho de cdigo. Primeiro, temos as declaraes
REPORT, INCLUDE, TABLES e DATA. REPORT a declarao bsica do programa, que
especifica seu nome e eventualmente alguma opo extra. INCLUDE especifica um trecho de
programa que deve ser includo durante a compilao/execuo do programa. TABLES declara uma
rea de trabalho para o uso de uma tabela do dicionrio, e DATA contm as declaraes dos campos
e reas de dados internos ao programa. Existem outras declaraes no includas neste programa, e,
dependendo do tipo de programa, as declaraes aqui mostradas no so obrigatrias.
Em seguida temos um evento do ABAP, neste caso o evento START-OF-SELECTION, que
disparado sempre no incio do programa. Existem outros eventos e, neste caso, no seria realmente
necessrio o evento, apenas o inclumos para explic-lo. Um evento encerrado pelo incio de outro
evento ou pelo final do programa.
Dentro do evento temos os comandos, que executam efetivamente as aes dentro do ABAP.
Neste caso especfico temos um comando SELECT, que busca os dados no banco e os coloca na
tabela interna, que uma rea de memria especificada na declarao DATA, um comando de
atribuio de valor para o campo CAMPO_1, e um LOOP na tabela interna que imprime algumas
informaes baseado nas informaes da tabela interna e dos campos locais.
Nos prximos captulos estaremos detalhando com um pouco mais de profundidade a
criao de programas ABAP.
I-PROVIDER
Pgina 21
O que so as funes no R/ 3
Dentro do R/3, as funes so elementos do repositrio que encapsulam uma determinada
operao. Por estarem dentro do repositrio, podem ser usadas por qualquer programa. No R/3, as
funes so definidas em uma transao apropriada, o Function Builder (SE37). Cada funo deve
ter determinados os parmetros de entrada, sada, tabelas que porventura sejam usadas e condies
de exceo que possam ser encontradas durante a execuo.
Alm do uso das funes standard do R/3, til criar uma funo quando a operao ser
usada por vrios programas diferentes, aumentando o reuso do cdigo e uniformizando a codificao
dos programas. Por exemplo, um programador ABAP mais experiente pode criar funes que
ocultam a complexidade de uma determinada operao, podendo ser usadas por programadores
menos experientes para elaborar programas que se tornam mais simples. Suponha que um programa
contenha acesso a vrias tabelas crticas do R/3, com massa considervel de dados. Talvez esse
programa no possa ser criado por um programador iniciante, e o programa ento passado
inteiramente responsabilidade de um pleno ou snior, que pode ficar sobrecarregado com a
quantidade de programas atribudos a ele, ou ela.
I-PROVIDER
Pgina 22
Usando funes, podemos ter um cenrio em que o snior apenas desenvolve a funo de
busca, retornando os valores desejados, que seguem no processamento do programa, que agora est
simplificado e pode ser passado para um programador menos experiente. O snior, ao desenvolver a
funo, poder concentrar-se em otimizar sua performance e adotar tcnicas mais eficientes de
programao.
Isso no se aplica a todos os casos, mas a adoo dessa ttica e de outros esquemas de
encapsulamento do R/3 (logical databases, classes) pode trazer benefcios produtividade da equipe
de desenvolvimento.
A idia central no uso das funes que seu uso no dependa dos detalhes de sua
implementao (por exemplo, se vou usar uma funo que retorna as vendas de um ms, deve bastar
que eu saiba quais valores devo passar e onde desejo receber o resultado, e no quais tabelas devem
ser verificadas e somadas), dentro de um conceito estrito de encapsulamento.
Para usar uma funo dentro do R/3, usa-se o comando CALL FUNCTION. Existe um
mecanismo de busca no repositrio (o boto Modelo presente no editor de programas) que, dado um
nome de funo, automaticamente insere no cdigo o esqueleto da chamada de funo, com todos
seus parmetros listados.
RFC
O RFC um mecanismo do R/3 que permite a execuo de uma funo a partir de uma
outra mquina por exemplo, digamos que o servidor PRD execute uma funo RFC do servidor
QAS. Essa funo ir ser executada no servidor QAS, e os resultados sero passados para o servidor
PRD. Qualquer funo de usurio pode se tornar uma funo RFC, bastando para tanto que seja
selecionada a opo apropriada nas opes tcnicas do mdulo de funo. A chamada RFC no se
limita comunicao entre sistemas R/3 outros sistemas podem fazer uso desse protocolo. Porm,
ao invs do RFC, que trabalhoso para ser usado de fora do R/3, a maneira atualmente mais
indicada para usar funcionalidades do R/3 a partir de um programa externo so as BAPIs (Business
Application Programming Interfaces), que usam um mecanismo RFC encapsulado e simplificado.
Function Groups
Toda funo dentro do R/3 deve pertencer a um function group, que um agrupamento de
funes com caractersticas e propsitos semelhantes. Quando um function group transportado,
so transportadas juntas todas as funes a ele ligadas que tenham sido modificadas ou criadas.
I-PROVIDER
Pgina 23
Criando menus
Dentro de um programa ABAP, possvel definir menus, botes e combinaes de teclas especficas
para o contexto em que se esteja trabalhando. Por exemplo, pode-se colocar itens de menu referentes
insero de um pedido e outros itens diferentes para quando se estiver apenas exibindo um pedido.
Esses menus so definidos atravs do Menu Painter (SE41) e chamados, dentro do programa ABAP,
pelo comando SET PF-STATUS <nome>, onde <nome> o nome definido para o conjunto de
menus, botes e combinaes de tela escolhido.
Criando Telas
As telas, dentro do R/3, podem ser classificadas em selection-screens e dialogs. As selectionscreens so definidas atravs de declaraes, e sero abordadas num captulo especial. As dialogs
correspondem s telas criadas com o Screen Painter (SE51)que uma ferramenta visual de definio
de telas. Dentro de uma tela, pode-se criar botes, campos de entrada e sada, tabs e outros
elementos.
I-PROVIDER
Pgina 24
Exerccios de Fixao
Alo Mundo!
Biblioteca de Funes
Exerccio proposto:
Exerccio 1
Copie da apostila o programa Al, Mundo!.
Declare as variveis lc_frase1 como caracter com 26 posies, e lc_frase2 como caracter com
24 posies e atribua as frases Meu primeiro programa ABAP varivel lc_frase1 e Programando
para SAP R/3 varivel lc_frase2.
Escreva as frases na tela nas linhas imediatamente abaixo de Al, Mundo!.
Exerccio 2
Para o programa Al, Mundo!, crie uma barra de menu Relatrio com as opes de
Imprimir, Voltar e Encerrar.
I-PROVIDER
Pgina 25
Soluo:
Exerccio 1
1.
2.
Entre com o nome do Programa a ser criado e, com o boto de rdio Cdigo Fonte
selecionado, clique sobre o boto CRIAR.
3.
4.
5.
lc_frase1(26) type c,
lc_frase2(24) type c.
WRITE:
WRITE:
WRITE:
/
/
/
'Al, Mundo!'.
lc_frase1.
lc_frase2.
Exerccio 2
1.
2.
Na caixa programa, digite o nome do programa para o qual ser criada a barra de menus.
3.
Selecione STATUS, digite o nome do menu a ser criado e clique sobre o boto CRIAR.
4.
5.
6.
Digite nome que se quer que aparea na barra de menu, no caso do exerccio: Relatrio.
7.
Clique duas vezes sobre a palavra Relatrio. Para inserir os itens do menu.
8.
Salve e Ative.
10.
I-PROVIDER
Pgina 26
11.
Digite o nome do Programa do exerccio anterior, com o boto de rdio Cdigo Fonte
selecionado, clique sobre o boto MODIFICAR.
12.
I-PROVIDER
Pgina 27
LIKE SPFLI-CARRID,
CONNID
LIKE SPFLI-CONNID,
FLDATE
LIKE SFLIGHT-FLDATE,
Tabela interna
Dentro de um programa ABAP, muitas vezes impossvel trabalhar apenas com os
comandos de seleo e alterao de dados diretamente na tabela. Para manipular localmente os dados,
o ABAP permite o uso de tabelas internas, que so reas de memria organizadas como tabelas.
Essas tabelas internas podem ter o mesmo formato de uma tabela do banco de dados, o que as
qualifica para serem usadas como reas de manipulao intermediria, o que traz benefcios em
termos de performance geral do R/3. Uma tabela interna declarada atravs do comando DATA,
onde se especifica qual o tipo de linha da tabela, se ela tem headerline e qual a forma de operao
da mesma. A tabela pode ser manipulada por comandos de insero (APPEND, INSERT,
COLLECT), deleo (DELETE, REFRESH) e alterao de dados (MODIFY, COLLECT).
Por exemplo, para declarar uma tabela interna, conforme no exemplo, usou-se a declarao
TYPES para declarar uma estrutura que contm os campos que desejamos ter na tabela. Em seguida,
a tabela criada atravs da declarao DATA, usando a estrutura como modelo.
Tipos de tabelas internas
I-PROVIDER
Pgina 28
I-PROVIDER
Pgina 29
O comando INSERT insere os campos em cada tipo de registro (grupo de campos) definido.
Usando o comando EXTRACT, os dados so copiados para um novo registro com o tipo
especificado.
Para ler os dados do extract, primeiramente seu contedo deve ser ordenado, usando-se o
comando SORT. No necessrio especificar que trata-se de um extract, o sistema o especifica
automaticamente. Feito o SORT, pode-se usar o comando LOOP..ENDLOOP para extrair os dados,
usando os eventos AT <nome field-group> para cada quebra de tipo de registro.
I-PROVIDER
Pgina 30
O Open SQL
O ABAP oferece um conjunto de comandos que permite realizar operaes com os dados
armazenados no banco, o Open SQL. A idia central do Open SQL prover uma linguagem de
acesso ao banco independente de plataforma. Os comandos Open SQL tm de passar pelo
interpretador ABAP, que os traduz para os comandos SQL do banco de dados que esteja sendo
utilizado.
Comandos
Dentro do Open SQL, podem-se utilizar os seguintes comandos:
I-PROVIDER
Pgina 31
SELECT:
INSERT:
UPDATE:
MODIFY:
DELETE:
Ou
I-PROVIDER
Pgina 32
UPDATE
O comando UPDATE funciona como o comando INSERT, podendo alterar dados no
banco a partir de uma rea ou tabela interna. No caso da tabela interna, no necessrio especificar a
clusula WHERE: sero alterados os registros correspondentes de acordo com as chaves. Por
exemplo:
I-PROVIDER
Pgina 33
MODIFY
O comando MODIFY opera da mesma forma que o comando UPDATE, mas insere um
novo registro caso o registro especificado no exista.
DELETE
O comando DELETE elimina registros do banco. Ele opera da mesma forma que o
comando INSERT.
OPEN CURSOR, FETCH, CLOSE CURSOR
Esses comandos permitem acessar o resultado da query sequencialmente, um registro aps o
outro. Seu uso desencorajado, por incorrer em problemas de performance. Recomenda-se o uso de
tabelas internas em seu lugar.
I-PROVIDER
Pgina 34
O comando WRITE
O comando bsico para criao de relatrios usando ABAP o WRITE. Quando um
programa ABAP executado, basta o interpretador ABAP encontrar este comando para disparar o
gerador de lista. A lista um relatrio visualmente simples, montado com letras de espaamento
constante. Essa simplicidade aumenta a independncia de plataforma do gerador de lista.
Criando uma lista simples
A sintaxe bsica do comando a seguinte:
WRITE [:] [/] [<campo>|<literal>] [, <campo>|<literal>] [, ...] [opes].
A sintaxe completa do comando pode ser encontrada no Help do R/3. Existem opes para
alterar a cor dos elementos da tela, criao de molduras e insero de cones na lista. Observe o
cdigo a seguir:
REPORT ZAPOSTILA00 .
TABLES: SPFLI, SFLIGHT.
SELECT * FROM SPFLI.
WRITE: / SPFLI-CARRID,
SPFLI-CONNID, SPFLI-CITYFROM,
SPFLI-AIRPFROM, SPFLI-CITYTO, SPFLI-AIRPTO.
ENDSELECT.
Com esse trecho de cdigo apenas, o R/3 gera uma lista simples do contedo de alguns
campos da tabela SPFLI:
I-PROVIDER
Pgina 35
Cabealhos e rodaps
Existem alguns comandos e opes que permitem melhorar o aspecto e a funcionalidade de
uma lista. No exemplo, a lista ainda no tem cabealho. Para cri-los, pode-se editar diretamente o
cabealho usando a opo Saltar Elementos de Texto Ttulos de Lista. Nesse caso, deve-se saber
previamente em que posio deve ficar o texto no cabealho. Por outro lado, utilizando-se a opo
Sistema Lista Ttulo da Lista possvel editar o ttulo no momento da exibio da lista, facilitando
muito o posicionamento dos textos. Tambm possvel suprimir a gerao do ttulo bsico,
substituindo-o por um ttulo composto pelo programa ABAP. Para tanto, deve-se colocar na
declarao REPORT do incio do programa a opo NO STANDARD PAGE HEADING e
implementar no programa o evento TOP-OF-PAGE. Caso tambm queira um rodap para cada
pgina, use o evento END-OF-PAGE para escrev-lo.
Mudando a apresentao dos campos
Para melhorar a apresentao da lista, podemos modificar a forma como os campos so
exibidos. Por exemplo, podemos mudar a cor com a opo COLOR do comando WRITE; podemos
mudar a intensidade da cor com a opo INTENSIFIED {ON|OFF}, transformar o campo num
HOTSPOT para uso em listas com drill-down, e mudar o posicionamento dos campos com WRITE
AT. A opo COLOR admite qualquer uma das cores padro do R/3, disponveis na transao
LIBS:
I-PROVIDER
Pgina 36
Por exemplo, para modificar um campo de forma a usar a cor COL_KEY menos intensa,
como hotspot, centralizado, escreveramos o cdigo como segue:
WRITE: / SPFLI-CARRID COLOR COL_KEY INTENSIFIED OFF HOTSPOT CENTERED.
A opo HOTSPOT faz com que, ao se apontar o campo com o cursor, o mesmo fique no
formato de uma mozinha, como num hyperlink da Internet, permitindo a seleo do registro com
um nico clique do mouse. Essa caracterstica muito til no processamento de listas em vrios
nveis.
Modificando o formato de exibio standard
As opes dentro do comando WRITE tm efeito apenas no campo a que se referem. Caso se
necessite mudar todos os campos a partir de um determinado ponto do programa, pode-se usar o
comando FORMAT, com as mesmas opes de formatao vistas para o comando WRITE. Com
isso, todos os campos a seguir sero exibidos com as opes especificadas pelo comando FORMAT,
at que seja encontrado um novo comando FORMAT. Pode-se continuar usando os modificadores
no WRITE, mas os mesmos iro basear-se no novo padro estabelecido no comando WRITE. Por
exemplo, caso seja colocado o comando
FORMAT COLOR COL_KEY INTENSIFIED ON CENTERED
todos os campos a seguir passaro a ser exibidos na cor COL_KEY INTENSIFIED, e sero
apresentados centralizados. Caso tenhamos em seguida o comando
WRITE: / SPFLI-CARRID INTENSIFIED OFF, SPFLI-CONNID.
I-PROVIDER
Pgina 37
a cor exibida para o campo SPFLI-CARRID ser COL_KEY INTENSIFIED OFF, e no a cor
padro sem INTENSIFIED. O campo SPFLI-CONNID aparecer da forma estipulada no
comando FORMAT.
O formato pode retornar ao formato standard usando o comando FORMAT RESET.
Posicionando os campos
Pode-se alterar o posicionamento dos campos dentro de uma linha colocando o nmero da
coluna na qual queremos que o campo comece na frente do campo. Pode-se tambm especificar a
largura do campo colocando a mesma em seguida, entre parnteses (sem essa opo, o tamanho do
campo utilizado ser o tamanho dele no dicionrio de dados). Por exemplo, para posicionarmos o
mesmo campo que modificamos anteriormente na dcima coluna, estabelecendo um tamanho de
cinco caracteres, usamos o comando
WRITE: /10(5) SPFLI-CARRID COLOR COL_KEY INTENSIFIED OFF HOTSPOT.
I-PROVIDER
Pgina 38
Sem CURRENCY:
Sem CURRENCY:
683.231,44
318.202,60
Com CURRENCY:
Com CURRENCY:
68.323.144
31.820.260
Sem o uso da opo CURRENCY, o valor apresentado no formato genrico do usurio; com
o CURRENCY, mesmo caso tenhamos moedas diferentes em cada registro, cada uma ser exibida
no formato correto.
Smbolos de Texto
O ABAP permite a criao de smbolos de texto, que so elementos do repositrio que
permitem a criao de tabelas de texto para uso nos programas ABAP. Os smbolos de texto so
criados dentro de classes de mensagem, que servem para separar logicamente os smbolos de texto
relacionados. Dentro da classe de mensagem, cada texto deve ser identificado por um nmero de trs
posies. Cada smbolo de texto pode ser criado em vrias linguagens.
Suponha que exista o seguinte trecho de cdigo:
WRITE: /10 'Assentos ocupados:', SFLIGHT-SEATSOCC.
Toda vez que o interpretador ABAP encontra um campo que comea com TEXT, coloca
naquela posio um smbolo de texto correspondente ao nmero aps o hfen na classe entre
parnteses. Caso seja usada a opo MESSAGE-ID <classe> na declarao REPORT, no
necessrio especificar a classe de mensagem junto ao smbolo de texto. O uso de smbolos de texto
pode simplificar a manuteno de programas complexos ao agrupar todas as mensagens de texto em
um s local.
Para editar os smbolos de texto, use, na janela do editor ABAP, a opo Saltar Elementos
de Texto Smbolos de Texto.
I-PROVIDER
Pgina 39
Exerccios de Fixao
O Open SQL
Exerccio proposto:
Exerccio 1
Criar um programa que imprima os campos CARRID, CONNID, CITYFROM,
AIRPFROM, CITYTO e AIRPTO da tabela SPFLI. Os dados devem ser armazenados em uma
tabela interna antes de serem impressos.
O relatrio deve ser impresso com as cores das linhas intercaladas entre cinza e branco.
Exerccio 2
Utilizando o comando DELETE do Open_SQL, apague da tabela interna todos os registros
onde o campo CITYFROM = SINGAPORE.
Exerccio 3
Monte o cabealho como a seguir:
Nota: As descries devem estar definidas como smbolos de texto.
ID
I-PROVIDER
Num.
RELAO DE VOS
Partindo de
Aer.
Pousando em
Aer.
Pgina 40
Soluo:
Exerccio 1
1.
2.
Entre com o nome do Programa a ser criado e, com o boto de rdio Cdigo Fonte
selecionado, clique sobre o boto CRIAR.
3.
4.
5.
Exerccio 2
1.
I-PROVIDER
Pgina 41
Exerccio 3
1.
Na tela de edio do programa, para definir os smbolos de texto para o cabealho, entre
na opo Saltar Elementos de Texto Smbolos de Texto e defina os smbolos com os
textos:
001
002
003
004
005
006
2.
3.
RELAO DE VOS
ID
Num.
Partindo de
Aer.
Pousando em
Nota: 60
I-PROVIDER
''.
Pgina 42
O SAP Query
Algumas consultas podem ser elaboradas usando-se a ferramenta SAP Query. Nela, possvel ao
usurio criar consultas visualmente, sem conhecimento da linguagem de programao.
Os dados em uma Query podem ser ordenados, agrupados, totalizados, etc., e os relatrios podem
ser impressos, gravados em planilhas, arquivos ou editores de texto, ou podem ser enviados a um ou
mais destinatrios.
Exemplo de utilizao de Querys:
Criar relatrios complexos, que exijam a leitura de vrias tabelas no banco de dados, ou que
sejam utilizados com freqncia.
Listar dados que no existem no banco de dados.
I-PROVIDER
Pgina 43
Pontos Positivos
Pontos Negativos
X No possvel
programao.
incluir
lgica
de
I-PROVIDER
Pgina 44
SPFLI-CARRID,
SPFLI-CONNID,
SFLIGHT-FLDATE,
SFLIGHT-SEATSOCC,
SFLIGHT-SEATSMAX,
SFLIGHT-SEATSMAX,
SELECT-OPTIONS:
PARAMETERS:
S_CHECK
S_RADIO1
S_RADIO2
S_RADIO3
S_RADIO4
S_RADIO5
AS CHECKBOX,
RADIOBUTTON GROUP
RADIOBUTTON GROUP
RADIOBUTTON GROUP
RADIOBUTTON GROUP
RADIOBUTTON GROUP
RAD,
RAD,
TTN,
TTN,
TTN.
I-PROVIDER
Pgina 45
NE
DL
BT
AA
LH
Este exemplo, significa que os valores para esta seleo devem estar entre AA e LH,
excluindo DL.
Sintaxe bsica do comando SELECT-OPTIONS:
SELECT-OPTIONS: s_carrid FOR spfli-carrid.
I-PROVIDER
Pgina 46
MEMORY ID pid: MEMORY ID: Toda vez que o programa executado, o campo j vem
preenchido com o ltimo valor entrado pelo usurio em um campo com o mesmo Memory ID.
MATCHCODE OBJECT mobj: : Atribui um matchcode para o campo.
NO-DISPLAY: No exibe o select-option na tela de seleo.
LOWER CASE: O campo se torna sensvel a letras maisculas e minsculas.
OBLIGATORY: O preenchimento obrigatrio.
NO-EXTENSION: No exibe o boto a direita do select-option, permitindo somente um
intervalo de seleo.
NO INTERVALS: No exibe a segunda caixa do intervalo. No permitindo assim definio
de intervalos na seleo.
A clusula WHERE, nos comandos OPEN-SQL, deve se referir ao campo como no
exemplo:
SELECT carrid connid FROM spfli WHERE carrid IN s_carrid.
ENDSELECT.
I-PROVIDER
Pgina 47
I-PROVIDER
Pgina 48
Com isso, criamos bordas ao redor de cada grupo logicamente ligado, melhorando o aspecto da tela e
evitando confuso no momento de sua utilizao:
I-PROVIDER
Pgina 49
TITLE
GROUP
GROUP
GROUP
TEXT-004.
TTN,
TTN,
TTN.
START-OF-SELECTION.
CALL SELECTION-SCREEN 0150 STARTING AT 20 5 ENDING AT 90 15.
...
Alm de surgir a janela padro de select-options, surgir uma nova janela modal a seguir:
I-PROVIDER
Pgina 50
Dentro desse programa, a cada linha lida no comando SELECT, est sendo armazenada
informao sobre a chave dentro da rea de HIDE. No necessrio que os campos selecionados
com HIDE faam parte da lista impressa via WRITE. Quando o usurio seleciona um determinado
I-PROVIDER
Pgina 51
I-PROVIDER
Pgina 52
WRITE: Reservas.
WHEN 2.
WRITE: Cliente.
ENDCASE.
AT LINE-SELECTION.
CASE SY-LSIND.
WHEN 1.
SELECT * FROM SBOOK
WHERE CARRID = SFLIGHT-CARRID AND
CONNID = SFLIGHT-CONNID AND
FLDATE = SFLIGHT-FLDATE.
WRITE: / SBOOK-CARRID, SBOOK-CONNID, SBOOK-FLDATE, SBOOK-CUSTOMID.
HIDE: SBOOK-CUSTOMID.
ENDSELECT.
WHEN 2.
SELECT * FROM SCUSTOM
WHERE ID = SBOOK-CUSTOMID.
WRITE: / SCUSTOM-ID, SCUSTOM-NAME.
ENDSELECT.
ENDCASE.
AT USER-COMMAND
O processamento de lista tambm pode ser feito atravs do evento AT USER-COMMAND.
Nesse caso, ser feito o processamento dos comandos (menu, teclas de funo, botes da barra),
alm do comando standard PICK.
Abrindo Telas Dentro de Relatrios
Uma lista secundria pode ser mostrada dentro de uma janela ao colocar-se a declarao
WINDOW STARTING AT <col> <lin> [ENDING AT <col> <lin>]. Os comandos WRITE
subseqentes sero direcionados para a janela especificada. Por exemplo, alterando o cdigo da
seguinte maneira, podemos criar janelas nas listas secundrias:
AT LINE-SELECTION.
CASE SY-LSIND.
WHEN 1.
WINDOW STARTING AT 5 3 ENDING AT 40 10.
SELECT * FROM SBOOK
WHERE CARRID = SFLIGHT-CARRID AND
CONNID = SFLIGHT-CONNID AND
FLDATE = SFLIGHT-FLDATE.
WRITE: / SBOOK-CARRID, SBOOK-CONNID, SBOOK-FLDATE, SBOOK-CUSTOMID.
HIDE: SBOOK-CUSTOMID.
ENDSELECT.
WHEN 2.
WINDOW STARTING AT 45 10 ENDING AT 60 12.
SELECT * FROM SCUSTOM
WHERE ID = SBOOK-CUSTOMID.
WRITE: / SCUSTOM-ID, SCUSTOM-NAME.
ENDSELECT.
ENDCASE.
I-PROVIDER
Pgina 53
I-PROVIDER
Pgina 54
Exerccios de Fixao
O SAP Query
Exerccio proposto:
Exerccio 1
1.
Exerccio 2
1.
Select-Options
Parameters
Sem extenso
Obrigatrio
I-PROVIDER
Pgina 55
Exerccio 3
1. Fazer com que toda vez que o cursor do mouse passe sobre um campo da coluna Vo,
tome a forma de uma mozinha.
2. Exiba uma janela contendo o nome da empresa area, o nmero do vo, nome do
aeroporto, cidade e horrio de sada do vo e nome do aeroporto, cidade e horrio de
chagada do vo referente a linha clicada na tela.
I-PROVIDER
Pgina 56
Soluo:
Exerccio 1
1. Criar Grupo de Usurios:
1.1. Acessar a transao SQ03.
1.2. Entrar o nome do Grupo de Usurios e teclar em CRIAR.
1.3. Atribuir usurios ao Grupo e Salvar.
2. Criar a rea Funcional:
2.2. Acessar a transao SQ02.
2.3. Entrar o nome da rea Funcional e teclar em CRIAR.
2.4. Entrar a Denominao e a primeira tabela que ser lida.
Obs: No confundir Grupo de autorizao com Grupo de usurios.
2.5. A tela de juno de tabelas (JOIN) exibida, inserir as tabelas na ordem em que
devem ser lidas.
2.6. Alterar a Condio Join, se necessrio, clicando com o boto direito do mouse.
INNER: S lista o registro da Tabela direita se o registro da Tabela esquerda
existir. Aps a concluso, Clicar F3 (Voltar).
2.7. Voltando da tela de JOIN,
2.8. Escolher: Criar Grupo de Campos Vazio.
2.9. Eliminar os Grupos de campos.
Obs: A SAP recomenda manter um Grupo de campos para cada tabela.
2.10. Criar um novo Grupos de Campos.
2.11. Arrastar os campos desejados para o Grupo de campos. A ordem dos campos no
importante.
2.12. Gerar e salvar.
3. Atribuir a rea Funcional a um ou mais Grupos de Usurios:
4.1. Acessar a transao SQ02.
4.2. Entrar o nome da rea Funcional e clicar sobre Atribuio a Grupos de Usurios.
4.3. Marcar os Grupos, salvar e sair.
4. Criar a Query:
4.1. Acessar a transao SQ01.
4.2. Entrar o nome da Query e clicar em CRIAR.
4.3. Escolher a rea Funcional que ser a base para a Query.
4.4. Entrar o Ttulo (que ser o ttulo do relatrio) e o nmero de colunas.
4.5. Clicar em Tela seguinte ou teclar F6.
4.6. Selecionar o Grupo ou os Grupos de campos que sero utilizados na Query.
I-PROVIDER
Pgina 57
I-PROVIDER
Pgina 58
4.1. Salvar.
Exerccio 2
1.
2.
Entre com o nome do Programa a ser alterado e, com o boto de rdio Cdigo Fonte
selecionado, clique sobre o boto MODIFICAR.
3.
Na tela de edio do programa, para definir os smbolos de texto para o cabealho, entre
na opo Saltar Elementos de Texto Smbolos de Texto e defina os smbolos com os
textos:
I-PROVIDER
007
Relao de Vos
008
Localidades
Pgina 59
4.
Exerccio 3
1.
2.
I-PROVIDER
Pgina 60
INTO lc_name
WHERE id = t_spfli-airpfrom.
write: /3 'Aeroporto :', lc_name.
endselect.
WRITE:
WRITE:
FORMAT
WRITE:
FORMAT
/3 'Cidade
:', t_spfli-cityfrom.
/3 'Horrio
:', t_spfli-deptime.
COLOR 2 INTENSIFIED OFF.
/ 'Chegando em :', 35 ''.
reset.
SELECT name
FROM sairport
INTO lc_name
WHERE id = t_spfli-airpto.
write: /3 'Aeroporto :', lc_name.
endselect.
WRITE: /3 'Cidade
WRITE: /3 'Horrio
I-PROVIDER
:', t_spfli-cityto.
:', t_spfli-arrtime.
Pgina 61