Vous êtes sur la page 1sur 61

Int roduo aos Conceit os de

Desenvolviment o e Cust omizao


de Relat rios

Int roduo aos Conceit os de Desenvolviment o e


Cust omizao de Relat rios

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

Int roduo aos Conceit os de Desenvolviment o e


Cust omizao de Relat rios

Trabalhando com os Mandant es.............................................................. 32


SELECT ........................................................................................... 32
INSERT ............................................................................................ 33
UPDATE........................................................................................... 33
MODIFY ........................................................................................... 34
DELETE ........................................................................................... 34
OPEN CURSOR, FETCH, CLOSE CURSOR ..................................................... 34
Criao de Listas Bsicas........................................................................ 35
O comando WRITE.............................................................................. 35
Criando uma list a simples..................................................................... 35
Cabealhos e rodaps.......................................................................... 36
Mudando a apresent ao dos campos....................................................... 36
Modificando o format o de exibio st andard .............................................. 37
Posicionando os campos....................................................................... 38
Especificando unidades de medida e moedas.............................................. 38
Smbolos de Text o .............................................................................. 39
O SAP Query ....................................................................................... 43
Grupos de usurios e reas funcionais ...................................................... 44
Definindo telas de seleo de parmetros.................................................. 45
Diferena ent re o comando PARAMETERS e o comando SELECT-OPTIONS............. 45
Agrupando parmet ros em bordas e melhorando o layout ............................... 48
Modificando o programa para usar bordas.................................................. 48
Janelas adicionais de parmet ros............................................................ 49
Criao de Listas Complexas................................................................... 51
O Event o AT LINE-SELECTION................................................................. 51
HIDE............................................................................................... 51
List as em mais de dois nveis................................................................. 52
AT USER-COMMAND............................................................................. 53
Abrindo Telas Dent ro de Relat rios ......................................................... 53
Chamando t ransaes a part ir de list agens ................................................ 54

I-PROVIDER

Pgina 3

Int roduo aos Conceit os de Desenvolviment o e


Cust omizao de Relat rios

Copyright 2005 I-PROVIDER. Todos os direitos reservados.


Este material de propriedade intelectual da I-PROVIDER, sendo terminantemente proibida sua
reproduo, total ou parcial, por qualquer forma, sem autorizao prvia e expressa..
R/ 3, ABAP, SAP, SAPScript , o logot ipo SAP e t odos os out ros servios e marcas da SAP
so marcas regist radas da SAP AG.

I-PROVIDER

Pgina 4

Int roduo aos Conceit os de Desenvolviment o e


Cust omizao de Relat rios

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.

Como entender a apostila


Este material foi desenvolvido com base nas operaes do sistema SAP R/3, sendo em alguns casos
exemplificados com as prprias telas de utilizao do sistema.
Todos os captulos desta apostila foram estruturados nos conceitos tcnicos do ABAP, compositores
dos elementos da linguagem de programao do SAP R/3, e possuem suas definies e exemplos
similares aos previstos em material tcnico da prpria SAP.
Os exerccios de fixao do contexto tcnico sero aplicados conforme acompanhamento de
profissional capacitado, e sero atribudos ao sistema, de acordo com a programao dos temas que
sero discutidos em workshop.

I-PROVIDER

Pgina 5

Int roduo aos Conceit os de Desenvolviment o e


Cust omizao de Relat rios

Contedo Programtico

Conhecimentos bsicos sobre a plataforma de desenvolvimento ABAP;

Trabalhando com o Repositrio de Programas;

Conhecendo os elementos do Dicionrio de dados ABAP;

Biblioteca de Funes;

Criador de Menus e Telas;

Classes de Desenvolvimento e tipos de programas;

Desenvolvimento de relatrios e consultas;

Definio de elementos de texto;

Criando tabelas internas e estruturas complexas de armazenagem temporria;

Definindo telas de seleo de parmetros;

Chamadas de telas de seleo em consultas complexas;

Criao de listas bsicas;

Criao de listas complexas com recurso de drill down;

Criao de consulta interativa com funes adicionais;

Carregando telas em relatrios;

Conhecimentos de comandos ABAP Open-SQL;

Atribuindo funes extras aos relatrios e consultas;

Chamando transaes a partir de listagens.

Carga Horria : 28 horas

I-PROVIDER

Pgina 6

Int roduo aos Conceit os de Desenvolviment o e


Cust omizao de Relat rios

Conheciment os Bsicos sobre a Plataforma de Desenvolviment o ABAP

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

Int roduo aos Conceit os de Desenvolviment o e


Cust omizao de Relat rios

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

Int roduo aos Conceit os de Desenvolviment o e


Cust omizao de Relat rios

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

Para encontrar os objetos no Repositrio do R/3, existe o Sistema de Informao do


Repositrio (transao SE84), que uma coleo de relatrios que permitem procurar por um
determinado objeto e navegar pelas definies do Repositrio.

I-PROVIDER

Pgina 9

Int roduo aos Conceit os de Desenvolviment o e


Cust omizao de Relat rios

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

Int roduo aos Conceit os de Desenvolviment o e


Cust omizao de Relat rios

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

Int roduo aos Conceit os de Desenvolviment o e


Cust omizao de Relat rios

Durante a ativao, a descrio da tabela dentro do dicionrio traduzida para a definio de


tabela correspondente na linguagem do banco de dados que estiver sendo usado. A ordem dos
campos no banco de dados no precisa seguir a ordem estabelecida no dicionrio de dados (com
exceo dos campos de chave primria), o que permite a extenso das tabelas standard do R/3
atravs e append structures, que so definies de campos adicionais definveis pelo usurio sem
haver a necessidade de alterao da definio normal da tabela standard. Os includes so estruturas
definidas separadamente que podem ser inseridas em outras tabelas.

O conceito de domnio de dois nveis


Basicamente, as tabelas dentro do R/3 so compostas de campos, cada um usando um
determinado elemento de dados, que por sua vez usam domnios. O domnio define o tipo bsico
de dados, seu comprimento e o intervalo de valores permitido; o elemento de dados descreve o
significado de um domnio dentro de um determinado cenrio. Por exemplo, um campo de cdigo de
aeroporto de destino deve estar ligado a um elemento de dados aeroporto de destino, que por sua
vez usa um domnio cdigo de aeroporto, que est definido como trs posies de caractere,
apenas com letras.

I-PROVIDER

Pgina 12

Int roduo aos Conceit os de Desenvolviment o e


Cust omizao de Relat rios

As caractersticas tcnicas das tabelas do R/ 3


Quando uma tabela definida no dicionrio de dados do R/3, devem ser definidas as
caractersticas tcnicas (technical settings) para a tabela. Essas caractersticas so usadas para otimizar o
acesso e a armazenagem da tabela individualmente.
As caractersticas tcnicas podem ser usadas para definir como a tabela deve ser manipulada
quando for criada no banco de dados, se ela deve ser includa em buffer e de que forma, e se as
mudanas nela realizadas devem ser registradas em log.
Para definir a armazenagem da tabela, deve-se indicar uma classe de dados. Essa classe de
dados determina de que forma o banco de dados deve armazen-la. As classes principais so master

I-PROVIDER

Pgina 13

Int roduo aos Conceit os de Desenvolviment o e


Cust omizao de Relat rios

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

Int roduo aos Conceit os de Desenvolviment o e


Cust omizao de Relat rios

Verificaes de chave externa (foreign keys)


As foreign keys so campos, dentro de uma determinada tabela, que fazem referncia aos
campos da chave de uma outra tabela e devem apenas apresentar valores que existam na tabela
referenciada. Por exemplo, numa tabela contendo os dados de um pedido, um campo de cliente deve
referenciar um cliente existente ou, automaticamente, quando se tentar colocar um pedido com um
cliente que no exista, ocorrer um erro. As relaes de chave externa so definidas na transao de
manuteno de tabelas do dicionrio.

I-PROVIDER

Pgina 15

Int roduo aos Conceit os de Desenvolviment o e


Cust omizao de Relat rios

Processos de ajuste e converso de tabelas


Deve-se assegurar que os objetos no dicionrio de dados estejam sincronizadas com suas
implementaes no banco de dados. Ao ser feita uma modificao na tabela, como por exemplo a
incluso de um registro, as mudanas feitas no dicionrio devem ser refletidas pelo R/3 no banco de
dados, quer seja atravs da alterao de estrutura (via comandoALTER TABLE do banco), ou
deletando e recriando a tabela o que acarreta perda de dados, ou atravs do ajuste do banco,
que um processo trabalhoso. Qualquer uma dessas formas pode ser escolhida pelo usurio; para
alguns tipos de modificao, apenas a alterao da estrutura no bastar, sendo necessria a deleo
ou ajuste da tabela.
Caso os dados na tabela no possam ser perdidos, deve-se fazer o ajuste da mesma, no qual a
tabela original renomeada, criada uma nova tabela com o nome original, e nessa tabela so
copiados os registros da tabela original. Dependendo da quantidade de dados na tabela, o ajuste pode
ter um tempo de execuo considervel. Alguns problemas podem surgir durante a converso
quando, por exemplo, algum arquivo do banco de dados for totalmente preenchido, ou os tipos de
campos forem alterados de modo a no poderem mais ser movidos via MOVECORRESPONDING, que o comando usado para fazer a movimentao dos dados da tabela

I-PROVIDER

Pgina 16

Int roduo aos Conceit os de Desenvolviment o e


Cust omizao de Relat rios

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

Int roduo aos Conceit os de Desenvolviment o e


Cust omizao de Relat rios

Exerccios de Fixao

Segue abaixo um conjunto de exerccios prticos para aprimorar o aprendizado referente a:


-

Conhecimentos bsicos sobre a plataforma de desenvolvimento ABAP

O Repositrio do SAP R/3

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

Data de incio de validade

PRVAL

MHDHB

Prazo de validade

Exerccio 2
Criar uma Viso para visualizar os dados da tabela criada no exerccio anterior.

I-PROVIDER

Pgina 18

Int roduo aos Conceit os de Desenvolviment o e


Cust omizao de Relat rios

Soluo:
Exerccio 1
1.

Entre no Dicionrio de Dados:


Pelo menu:

Ferramentas - Abap/Workbench - Data Dictionary

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.

Identifique a Classe de Desenvolvimento.

7.

Defina com as Opes Tcnicas, clicando sobre o boto OPES TCNICAS.

8.

Selecione o Tipo de Dados e Categor. Tamanho adequados para a tabela que est sendo
criada.

9.

Saia da janela de Opes Tcnicas, Salve e Ative a tabela.

Exerccio 2
1.

Entre no Dicionrio de Dados:


Pelo menu:

Ferramentas - Abap/Workbench - Data Dictionary

Pela transao:

SE11

2.

Selecionando VISO, digite com o nome da Viso a ser criada e clique sobre o boto
CRIAR,

3.

Selecione tipo de viso como VISO DE BANCO DE DADOS.

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.

Identifique a Classe de Desenvolvimento.

8.

Ative.

9.

Para visualizar os dados, no menu, selecione: Utilitrios - Contedo.

I-PROVIDER

Pgina 19

Int roduo aos Conceit os de Desenvolviment o e


Cust omizao de Relat rios

Al, Mundo!

Criando seu primeiro programa ABAP


Vamos criar um programa ABAP simples para nos ambientarmos s peculiaridades da
programao para o SAP R/3. Como usual, vamos criar um programa que escreva uma frase
simples na tela. Vamos entrar na transao SE38, solicitar a criao de um novo programa com o
nome ZHELLO:
REPORT HELLO.
WRITE: / 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

Int roduo aos Conceit os de Desenvolviment o e


Cust omizao de Relat rios

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

Int roduo aos Conceit os de Desenvolviment o e


Cust omizao de Relat rios

Bibliot ecas de Funes

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

Int roduo aos Conceit os de Desenvolviment o e


Cust omizao de Relat rios

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

Int roduo aos Conceit os de Desenvolviment o e


Cust omizao de Relat rios

Os Criadores de Menus e Telas

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

Int roduo aos Conceit os de Desenvolviment o e


Cust omizao de Relat rios

Exerccios de Fixao

Segue abaixo um conjunto de exerccios prticos para aprimorar o aprendizado referente a:


-

Alo Mundo!

Biblioteca de Funes

Os criadores de menus e telas

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

Int roduo aos Conceit os de Desenvolviment o e


Cust omizao de Relat rios

Soluo:
Exerccio 1
1.

Entre no Editor de programas ABAP:


Pelo menu:
Ferramentas - Abap/Workbench - Editor Abap
Pela transao: SE38

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.

Na janela de Atributos do Programa, digite o ttulo do programa e defina o tipo de


programa como Programa Executvel e a Aplicao.

4.

Identifique a Classe de Desenvolvimento.

5.

Na janela do editor, digite o cdigo:


REPORT HELLO.
DATA:

lc_frase1(26) type c,
lc_frase2(24) type c.

WRITE:
WRITE:
WRITE:

/
/
/

'Al, Mundo!'.
lc_frase1.
lc_frase2.

Exerccio 2
1.

Entre no Menu Painter:


Pelo menu:
Ferramentas - Abap/Workbench Menu Painter
Pela transao: SE41

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.

Entre com a descrio do Menu.

5.

Na linha Barra de Menu, clique sobre o boto

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.

Inclua, na coluna de Cdigo e Texto os cdigos de comando e descries desejados. No

para incluir o menu.

caso do exerccio: PRI Imprimir, BACK Voltar e %EX Encerrar.


9.

Salve e Ative.

10.

Entre no Editor de programas ABAP:


Pelo menu:
Ferramentas - Abap/Workbench - Editor Abap
Pela transao: SE38

I-PROVIDER

Pgina 26

Int roduo aos Conceit os de Desenvolviment o e


Cust omizao de Relat rios

11.

Digite o nome do Programa do exerccio anterior, com o boto de rdio Cdigo Fonte
selecionado, clique sobre o boto MODIFICAR.

12.

Faa a chamada do menu, digitando, no cdigo do programa ABAP, o comando SET


PF-STATUS <nome>, onde <nome> o nome do menu criado na transao SE41.

I-PROVIDER

Pgina 27

Int roduo aos Conceit os de Desenvolviment o e


Cust omizao de Relat rios

Criando Tabelas Int ernas e Est rut uras Complexas de Armazenagem


Temporria
REPORT ZTABELAINTERNA.
TYPES: BEGIN OF MYSTRUCT,
CARRID

LIKE SPFLI-CARRID,

CONNID

LIKE SPFLI-CONNID,

FLDATE

LIKE SFLIGHT-FLDATE,

SEATSOCC LIKE SFLIGHT-SEATSOCC,


SEATSMAX LIKE SFLIGHT-SEATSMAX,
SEATFREE LIKE SFLIGHT-SEATSMAX,
END OF MYSTRUCT.
DATA:

MYTABLE TYPE STANDARD TABLE OF MYSTRUCT


WITH NON-UNIQUE KEY CARRID CONNID
WITH HEADER LINE.

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

Int roduo aos Conceit os de Desenvolviment o e


Cust omizao de Relat rios

O ABAP oferece trs tipos de tabelas internas: STANDARD, SORTED e HASHED. As


tabelas standard permitem o acesso sequencial aos dados, alm de permitir o acesso mediante as
chaves especificadas na declarao das tabelas. As tabelas do tipo sorted j esto pr-ordenadas de
acordo com a chave as operaes realizadas nesse tipo de tabela devem ter o cuidado de no alterar
a ordem, sob pena de ocorrer um erro de execuo. As tabelas do tipo hashed so organizadas de
acordo com a chave especificada e no permitem operaes utilizando o nmero sequencial dos
registros. So adequadas a grandes volumes de dados.
Extracts
Extracts so estruturas de dados especiais que permitem montar uma rea interna com
registros de tipos diferentes. A tabela interna est limitada a um tipo de linha de dados (registro) fixo,
enquanto o extract pode receber linhas com vrias estruturas diferentes. Por exemplo, suponha que
voc tenha que gerar um relatrio das tabelas SPFLI e SFLIGHT. Voc pode montar um extract
com linhas da SPFLI e da SFLIGHT em registros diferentes:
REPORT ZHELLO2.
TABLES: SPFLI, SFLIGHT.
FIELD-GROUPS: HEADER, CARRINFO, CONNINFO.
INSERT: SPFLI-CARRID SPFLI-CONNID SFLIGHT-FLDATE INTO HEADER.
INSERT: SPFLI-CITYFROM SPFLI-CITYTO INTO CARRINFO.
INSERT: SFLIGHT-PLANETYPE SFLIGHT-SEATSOCC SFLIGHT-SEATSMAX INTO
CONNINFO.
SELECT * FROM SPFLI.
EXTRACT CARRINFO.
SELECT * FROM SFLIGHT
WHERE CARRID = SPFLI-CARRID AND
CONNID = SPFLI-CONNID.
EXTRACT CONNINFO.
ENDSELECT.
ENDSELECT.
SORT.
LOOP.
AT CARRINFO.
WRITE: / SPFLI-CITYFROM, SPFLI-CITYTO.
ENDAT.
AT CONNINFO.
WRITE: /10 SFLIGHT-PLANETYPE, SFLIGHT-SEATSOCC, SFLIGHT-SEATSMAX.
ENDAT.
ENDLOOP.

No comando FIELD-GROUPS, so especificados os grupos de campos que sero usados no


extract. O grupo header deve sempre ser utilizado. Nesse grupo, voc dever incluir os campos que
fazem parte da chave de todos os tipos de registro que voc ter em seu extract.

I-PROVIDER

Pgina 29

Int roduo aos Conceit os de Desenvolviment o e


Cust omizao de Relat rios

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

Int roduo aos Conceit os de Desenvolviment o e


Cust omizao de Relat rios

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

Int roduo aos Conceit os de Desenvolviment o e


Cust omizao de Relat rios

SELECT:
INSERT:

UPDATE:
MODIFY:
DELETE:

permite a leitura de dados do banco de dados.


insere dados no banco.
atualiza dados.
atualiza dados existentes ou os acrescenta caso no existam no banco.
apaga registros do banco de dados.

OPEN CURSOR, FETCH, CLOSE CURSOR: respectivamente cria, l e fecha um


cursor dentro do banco de dados.
Campos de sistema
Os dois principais campos de sistema envolvidos em operaes do Open SQL so o SYSUBRC, que retorna 0 caso a operao tenha sido bem-sucedida, e o SY-DBCNT, que retorna o
nmero de registros afetados pelo comando.
Trabalhando com os Mandantes
Num comando Open-SQL no necessrio especificar o mandante nas clusulas
discriminadoras dos comandos. Automaticamente, o interpretador ABAP definir o mandante como
o mandante atual, a no ser que seja especificada a opo CLIENT SPECIFIED.
SELECT
O comando SELECT retorna um conjunto de dados (registros) que atendam a um
determinado critrio. As clusulas do comando SELECT so as seguintes:
SELECT <lista de campos>: Pode-se selecionar uma lista de campos a serem
retornados, separados por espaos, ou o caractere * para retornar todos os campos
disponveis. A opo SINGLE retorna somente um registro que atenda s restries
impostas. Caso a tabela tenha sido declarada atravs de TABLES, automaticamente
criada um registro na memria com o mesmo nome para manipul-la; caso o
SELECT traga campos de mais de uma tabela, no possvel utilizar esse artifcio.
Nesse caso, as tabelas no precisam ser declaradas em TABLES, mas a seleo dos
campos deve separar o nome da tabela e o campo com um til (~). Exemplo:
TABLES: SFLIGHT.
DATA: IT_SFLIGHT LIKE SFLIGHT.
SELECT CARRID CONNID FLDATE SEATSOCC
FROM SFLIGHT INTO TABLE IT_SFLIGHT.

Ou

I-PROVIDER

Pgina 32

Int roduo aos Conceit os de Desenvolviment o e


Cust omizao de Relat rios

DATA: IT_SFLIGHT LIKE SFLIGHT.


SELECT SFLIGHT~CARRID SFLIGHT~CONNID SFLIGHT~FLDATE SFLIGHT~SEATSOCC
FROM SFLIGHT INTO TABLE IT_SFLIGHT

INTO [<lista de campos>| TABLE <tabela interna>]: Permite armazenar o retorno


numa tabela interna ou em campos definidos com o comando DATA. O uso de
SELECT sem especificar SINGLE ou INTO TABLE exige o uso de ENDSELECT.
FROM <tabela> [[INNER|LEFT OUTER] JOIN <tabela>, ..]: Especifica a origem
dos dados.
WHERE <condies>: A clusula WHERE especifica as condies de busca. Por
exemplo, WHERE CARRID = AA faz com que apenas os registros em que o
campo CARRID tenha contedo igual a AA sejam retornados.
Maiores detalhes sobre o comando SELECT podem ser encontrados no Help On-Line do R/3.
INSERT
O comando INSERT insere um novo registro no banco de dados, a partir de uma rea de
dados especificada em TABLES ou uma rea declarada com DATA. Para usar INSERT, deve-se
colocar os dados desejados na rea intermediria e, em seguida, chamar o comando INSERT. Caso a
rea no seja especificada em TABLES, deve ser usada a opo FROM:
REPORT ZTESTE.
TABLES SPFLI.
DATA WA TYPE SPFLI.
WA-CARRID = 'LH'.
WA-CITYFROM = 'WASHINGTON'.
...
INSERT INTO SPFLI VALUES WA.
WA-CARRID = 'UA'.
WA-CITYFROM = 'LONDON'.
...
INSERT SPFLI FROM WA.
SPFLI-CARRID = 'LH'.
SPFLI-CITYFROM = 'BERLIN'.
...
INSERT SPFLI.

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

Int roduo aos Conceit os de Desenvolviment o e


Cust omizao de Relat rios

DATA: ITAB TYPE HASHED TABLE OF SPFLI


WITH UNIQUE KEY CARRID CONNID,
WA LIKE LINE OF ITAB.
WA-CARRID = 'UA'. WA-CONNID = '0011'. WA-CITYFROM = ...
INSERT WA INTO TABLE ITAB.
WA-CARRID = 'LH'. WA-CONNID = '1245'. WA-CITYFROM = ...
INSERT WA INTO TABLE ITAB.
WA-CARRID = 'AA'. WA-CONNID = '4574'. WA-CITYFROM = ...
INSERT WA INTO TABLE ITAB.
...
UPDATE SPFLI FROM TABLE ITAB.

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

Int roduo aos Conceit os de Desenvolviment o e


Cust omizao de Relat rios

Criao de List as Bsicas

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

Int roduo aos Conceit os de Desenvolviment o e


Cust omizao de Relat rios

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

Int roduo aos Conceit os de Desenvolviment o e


Cust omizao de Relat rios

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

Int roduo aos Conceit os de Desenvolviment o e


Cust omizao de Relat rios

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.

Especificando unidades de medida e moedas


Para formatar automaticamente na lista campos numa determinada unidade de medida e
valores monetrios, pode-se utilizar as opes UNIT e CURRENCY, seguidas do campo que
contm a chave da unidade, aps o campo que se quer formatar. Com isso, o campo ser formatado
de acordo com a definio nas tabelas standard de unidades e de moedas do R/3. Veja o exemplo a
seguir:
WRITE: /20(6) SFLIGHT-FLDATE,
SFLIGHT-CURRENCY,
'Sem CURRENCY:', (12) SFLIGHT-PAYMENTSUM,
'Com CURRENCY:', (12) SFLIGHT-PAYMENTSUM
CURRENCY SFLIGHT-CURRENCY.

I-PROVIDER

Pgina 38

Int roduo aos Conceit os de Desenvolviment o e


Cust omizao de Relat rios

Um trecho do report seria:


150420 ITL
130520 ITL

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.

Utilizando smbolos de texto, o comando ficaria


WRITE: /10 TEXT-001(ZCLMENS), 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

Int roduo aos Conceit os de Desenvolviment o e


Cust omizao de Relat rios

Exerccios de Fixao

Segue abaixo um conjunto de exerccios prticos para aprimorar o aprendizado referente a:


-

Criando tabelas internas e estruturas complexas de armazenagem temporria

O Open SQL

Criao de Listas Bsicas

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

Int roduo aos Conceit os de Desenvolviment o e


Cust omizao de Relat rios

Soluo:
Exerccio 1
1.

Entre no Editor de programas ABAP:


Pelo menu:
Ferramentas - Abap/Workbench - Editor Abap
Pela transao: SE38

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.

Na janela de Atributos do Programa, digite o ttulo do programa e defina o tipo de


programa como Programa Executvel e a Aplicao.

4.

Identifique a Classe de Desenvolvimento.

5.

Na janela do editor, digite o cdigo:


DATA: lc_cor type c value '1',
begin of T_SPFLI occurs 0,
carrid
like spfli-carrid,
connid
like spfli-connid,
cityfrom like spfli-cityfrom,
airpfrom like spfli-airpfrom,
cityto
like spfli-cityto,
airpto
like spfli-airpto,
end of T_SPFLI.
START-OF-SELECTION.
SELECT carrid connid cityfrom airpfrom cityto airpto
FROM SPFLI into table T_SPFLI.
Loop at T_SPFLI.
if lc_cor = '1'.
FORMAT COLOR 2 INTENSIFIED OFF.
clear lc_cor.
else.
FORMAT RESET.
lc_cor = '1'.
endif.
WRITE: / T_SPFLI-CARRID,
T_SPFLI-CONNID,
T_SPFLI-CITYFROM, T_SPFLI-AIRPFROM,
T_SPFLI-CITYTO,
T_SPFLI-AIRPTO.
Endloop.

Exerccio 2
1.

No programa, aps a seleo dos dados, digitar o cdigo:


Cdigo:

I-PROVIDER

DELETE t_spfli WHERE cityfrom = 'SINGAPORE'.

Pgina 41

Int roduo aos Conceit os de Desenvolviment o e


Cust omizao de Relat rios

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

Salve os textos e Ative.


Na tela de edio do programa, entre a declarao da tabela interna e o evento STARTOF-SELECTION, digite o cdigo:
TOP-OF-PAGE.
FORMAT COLOR 6 INTENSIFIED OFF.
WRITE: /22 text-001, 60 ''.
FORMAT COLOR 2 INTENSIFIED ON.
WRITE: /1 text-002, 05 text-003, 10 text-004,
31 text-005, 35 text-006, 56 text-005, 60 ''.

Nota: 60

I-PROVIDER

''.

usado para que a linha fique da cor desejada at a coluna 60.

Pgina 42

Int roduo aos Conceit os de Desenvolviment o e


Cust omizao de Relat rios

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:

Relatrios simples e de utilizao espordica.


Auxiliar na conferncia das Cargas de Dados.
Listar dados incorretos no ps-Go Live.

A utilizao de Querys desaconselhada para:

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

Int roduo aos Conceit os de Desenvolviment o e


Cust omizao de Relat rios

Exemplo: Produtos Acabados sem Listas Tcnicas

Pontos Positivos

Pontos Negativos

X Possibilita criar relatrios rapidamente sem a


necessidade de criar programas em ABAP.

X Baixa performance se comparado com


programas ABAP.

X Os relatrios podem ser criados por usurios


finais.

X Limitaes para relatrios que exigem a


leitura de muitas tabelas.

X Facilidades e recursos na sua criao e


utilizao.

X No possvel
programao.

incluir

lgica

de

X Controle de acesso aos dados deficiente.

Grupos de usurios e reas funcionais


Para poder criar uma SAP Query, deve existir pelo menos um grupo de usurios e uma
rea funcional criados. O grupo de usurios contm os usurios que podem criar e rodar queries, e
as reas funcionais so definies de quais dados sero usados na query. Por exemplo, pode-se criar
uma rea funcional com um join de vrias tabelas e com campos calculados, alm dos campos
definidos nas tabelas. A rea funcional deve estar sempre associada a um ou mais grupos de usurios
para ser utilizada, e apenas os usurios que fazem parte dos grupos podem criar queries que a
acessem.
As reas funcionais so criadas na transao SQ02, e os grupos de usurios so definidos na
transao SQ03.
Criando um grupo de usurios os grupos de usurios so criados na transao SQ02. A
operao muito simples basta definir o nome do grupo e uma descrio, e em seguida colocar os
nomes dos usurios que dele fazem parte.
Criando uma rea funcional as reas funcionais so criadas na transao SQ03. Nela so
definidas as tabelas que compem a rea funcional, e seus relacionamentos. que um conjunto de
dados a serem usados pela query (composto de tabelas, vises e/ou dados de arquivos TXT, por
exemplo).
A query propriamente dita criada usando-se a transao SQ01. Nela, escolhe-se a rea
funcional que ser usada na query (h uma lista com as reas funcionais associadas ao grupo ao qual
o usurio pertence) e qual ser a estrutura da lista a ser exibida.

I-PROVIDER

Pgina 44

Int roduo aos Conceit os de Desenvolviment o e


Cust omizao de Relat rios

Definindo t elas de seleo de parmet ros


Para selecionar intervalos de dados a serem exibidos em um relatrio, o R/3 disponibiliza os
comandos PARAMETERS e SELECT-OPTIONS.
Em todo relatrio, existe uma tela padro de seleo a tela 1000 que ativada sempre que
o sistema encontra uma declarao PARAMETERS ou SELECT-OPTIONS sem especificao de
nmero de tela. Portanto, para criar uma tela de seleo simples, basta especificar dentro do
programa os parmetros, como no exemplo a seguir:
REPORT ZAPOSTILA00 .
TABLES: SPFLI, SFLIGHT.
TYPES: BEGIN OF MYSTRUCT,
CARRID
LIKE
CONNID
LIKE
FLDATE
LIKE
SEATSOCC LIKE
SEATSMAX LIKE
SEATFREE LIKE
END OF MYSTRUCT.
DATA:

SPFLI-CARRID,
SPFLI-CONNID,
SFLIGHT-FLDATE,
SFLIGHT-SEATSOCC,
SFLIGHT-SEATSMAX,
SFLIGHT-SEATSMAX,

MYTABLE TYPE STANDARD TABLE OF MYSTRUCT


WITH NON-UNIQUE KEY CARRID CONNID
WITH HEADER LINE.

SELECT-OPTIONS:

S_CARRID FOR SPFLI-CARRID,


S_CONNID FOR SPFLI-CONNID.

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.

Diferena entre o comando PARAMETERS e o comando SELECT-OPTIONS


O comando PARAMETERS permite que se especifique um valor nico e oferece a opo de
colocar os valores como checkboxes, nos quais o usurio pode escolher como um flag, ou radiobuttons,
que devem ser agrupados para que o usurio escolha entre as opes disponveis num grupo.
Sintaxe bsica do comando PARAMETERS:
PARAMETERS: p_carrid LIKE spfli-carrid.

O comando PARAMETERS pode aceitar caractersticas adicionais, que so opcionais, as


mais utilizadas so:
DEFAULT : Toda vez que o programa executado, o campo j vem preenchido com um
valor default na tela de seleo.

I-PROVIDER

Pgina 45

Int roduo aos Conceit os de Desenvolviment o e


Cust omizao de Relat rios

DECIMALS dec: Nmero de casas decimais para campos tipo p.


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 campo na tela de seleo.
LOWER CASE: O campo se torna sensvel a letras maisculas e minsculas.
OBLIGATORY: O preenchimento do campo obrigatrio.
A clusula WHERE, nos comandos OPEN-SQL, deve se referir ao campo normalmente,
como no exemplo:
SELECT carrid connid FROM spfli WHERE carrid = p_carrid.
ENDSELECT.

O comando SELECT-OPTIONS tem como caracterstica que o campo de seleo possa


conter um ou mais intervalos de valores possveis, inclusive indicando intervalos e valores que devem
ser excludos do resultado. Como o SELECT-OPTIONS permite uma extenso de seleo, o SAP
guarda os valores do SELECT-OPTIONS em uma tabela interna de quatro campos, similar a esta:
SIGN OPTION LOW HIGH
I

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.

O comando SELECT-OPTIONS pode aceitar caractersticas adicionais, que so opcionais,


as mais utilizadas so:
DEFAULT : Toda vez que o programa executado, o campo j vem preenchido com um
VALOR default na tela de seleo.
DEFAULT g TO h: Toda vez que o programa executado, o campo j vem preenchido com
um INTERVALO default na tela de seleo.
DEFAULT g ... OPTION xx ... SIGN s e DEFAULT g TO h ... OPTION xx ... SIGN s:
Definir os VALORES e INTERVALOS default que devem ser excludos do resultado.
O valor default para SIGN I (Incluso) e para OPTION EQ (Igual).
O campo SIGN tambm pode aceitar o valor E (Excluso), e o campo OPTION pode
aceitar os valores: EQ (Igual), NE (No Igual), CP (Contm (para valores com *)), NP (No pode
conter (valores com *)), GE (Maior Igual), LT (Menor que), LE (Menor Igual) e GT (Maior que).

I-PROVIDER

Pgina 46

Int roduo aos Conceit os de Desenvolviment o e


Cust omizao de Relat rios

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

Int roduo aos Conceit os de Desenvolviment o e


Cust omizao de Relat rios

Agrupando parmetros em bordas e melhorando o layout


Pode-se melhorar o layout dos parmetros logicamente relacionados agrupando-os em blocos
com a opo BEGIN OF BLOCKEND OF BLOCK. Caso usemos o exemplo anterior sem
nenhuma outra formatao, a sada na tela ficar confusa:

Modificando o programa para usar bordas


Para melhorar o aspecto da janela de seleo anterior, vamos utilizar a opo BEGIN OF
BLOCK END OF BLOCK no mesmo trecho de cdigo:

SELECTION-SCREEN BEGIN OF BLOCK BL1 WITH FRAME TITLE TEXT-001.


SELECT-OPTIONS:
S_CARRID FOR SPFLI-CARRID,
S_CONNID FOR SPFLI-CONNID.
SELECTION-SCREEN END OF BLOCK BL1.
SELECTION-SCREEN BEGIN OF BLOCK BL2 WITH FRAME TITLE TEXT-002.
PARAMETERS:
S_CHECK AS CHECKBOX.
SELECTION-SCREEN END OF BLOCK BL2.
SELECTION-SCREEN BEGIN OF BLOCK BL3 WITH FRAME TITLE TEXT-003.
PARAMETERS:
S_RADIO1 RADIOBUTTON GROUP RAD,
S_RADIO2 RADIOBUTTON GROUP RAD.
SELECTION-SCREEN END OF BLOCK BL3.
SELECTION-SCREEN BEGIN OF BLOCK BL4 WITH FRAME TITLE TEXT-004.
PARAMETERS:
S_RADIO3 RADIOBUTTON GROUP TTN,
S_RADIO4 RADIOBUTTON GROUP TTN,
S_RADIO5 RADIOBUTTON GROUP TTN.

I-PROVIDER

Pgina 48

Int roduo aos Conceit os de Desenvolviment o e


Cust omizao de Relat rios

SELECTION-SCREEN END OF BLOCK BL4


.

Com isso, criamos bordas ao redor de cada grupo logicamente ligado, melhorando o aspecto da tela e
evitando confuso no momento de sua utilizao:

Janelas adicionais de parmetros


Podem ser definidas janelas alm da janela 1000 default para tanto, basta agrupar os selectoptions e parameters dentro das declaraes SELECTION-SCREEN BEGIN OF SCREEN
<nmero da tela> e SELECTION SCREEN END OF SCREEN <nmero da tela>. Essa janela
dever ser posteriormente chamada com o uso do comando CALL SELECTION SCREEN seguido
do nmero definido da tela, inclusive podendo-se transform-la numa tela modal usando a opo AS
WINDOW na declarao SELECTION-SCREEN BEGIN OF SCREEN e a opo STARTING
AT/ENDING AT com as coordenadas (coluna, linha) das extremidades superior esquerda e inferior
direita da tela na chamada CALL SELECTION SCREEN. Por exemplo, modificando o cdigo da
seguinte forma:
...

I-PROVIDER

Pgina 49

Int roduo aos Conceit os de Desenvolviment o e


Cust omizao de Relat rios

SELECTION-SCREEN BEGIN OF BLOCK BL1 WITH FRAME TITLE TEXT-001.


SELECT-OPTIONS:
S_CARRID FOR SPFLI-CARRID,
S_CONNID FOR SPFLI-CONNID.
SELECTION-SCREEN END OF BLOCK BL1.
SELECTION-SCREEN BEGIN OF BLOCK BL2 WITH FRAME TITLE TEXT-002.
PARAMETERS:
S_CHECK AS CHECKBOX.
SELECTION-SCREEN END OF BLOCK BL2.
SELECTION-SCREEN BEGIN OF SCREEN 0150 AS WINDOW.
SELECTION-SCREEN BEGIN OF BLOCK BL3 WITH FRAME TITLE TEXT-003.
PARAMETERS:
S_RADIO1 RADIOBUTTON GROUP RAD,
S_RADIO2 RADIOBUTTON GROUP RAD.
SELECTION-SCREEN END OF BLOCK BL3.
SELECTION-SCREEN BEGIN OF BLOCK BL4 WITH FRAME
PARAMETERS:
S_RADIO3 RADIOBUTTON
S_RADIO4 RADIOBUTTON
S_RADIO5 RADIOBUTTON
SELECTION-SCREEN END OF BLOCK BL4.
SELECTION-SCREEN END OF SCREEN 0150.

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

Int roduo aos Conceit os de Desenvolviment o e


Cust omizao de Relat rios

Criao de List as Complexas


At agora, as listas criadas apresentam um nvel de dados apenas, mas o ABAP tem recursos
que permitem a exibio de listas de detalhe a partir de uma lista.
O Evento AT LINE-SELECTION
O processamento das listas de detalhe dentro do R/3 feito pelo evento AT LINESELECTION. O R/3 executa os comandos que houver dentro desse evento toda vez que o usurio
clica duas vezes sobre uma linha em uma lista ouclica sobre um campo marcado com HOTSPOT, ou
teclando-se F2 sobre um registro, ou escolhendo um boto que tenha o cdigo standard PICK a ele
associado.
HIDE
Atravs do comando HIDE, possvel armazenar informao a respeito de uma linha para
uso do evento AT LINE-SELECTION. Suponha que exista uma lista com os vos para uma
determinada companhia area, e deseja-se exibir as reservas para aquele vo. Para exibir a lista,
necessrio armazenar em algum local informaes sobre a linha selecionada pelo usurio, e isso pode
ser feito atravs do comando HIDE do ABAP.
O comando HIDE guarda a informao sobre os campos desejados, alm do nmero da
linha que est sendo processada, em uma tabela interna, que automaticamente acessada no evento
AT LINE-SELECTION. Veja o seguinte exemplo:
REPORT ZTESTE.
TABLES: SFLIGHT, SBOOK.
START-OF-SELECTION.
SELECT * FROM SFLIGHT.
WRITE: SFLIGHT-CARRID, SFLIGHT-CONNID, SFLIGHT-FLDATE, SFLIGHT-SEATSOCC.
HIDE: SFLIGHT-CARRID, SFLIGHT-CONNID, SFLIGHT-FLDATE.
ENDSELECT.
AT LINE-SELECTION.
SELECT * FROM SBOOK
WHERE CARRID = SFLIGHT-CARRID AND
CONNID = SFLIGHT-CONNID AND
FLDATE = SFLIGHT-FLDATE.
WRITE: / SBOOK-CARRID, SBOOK-CONNID, SBOOK-FLDATE, SBOOK-CUSTOMID.
ENDSELECT.

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

Int roduo aos Conceit os de Desenvolviment o e


Cust omizao de Relat rios

registro, o processador de lista ABAP automaticamente procura na rea de HIDE o registro


correspondente quele nmero de linha, e os disponibiliza para uso com o mesmo nome.
Cabealhos de listas secundrias
Para definir um cabealho prprio para listas secundrias, existe o evento TOP-OF-PAGE
DURING LINE-SELECTION, que permite redefinir o cabealho e os comandos disponveis
dentro da lista secundria. Por exemplo,
REPORT ZTESTE NO STANDARD PAGE HEADING.
TABLES: SFLIGHT, SBOOK.
START-OF-SELECTION.
...
TOP-OF-PAGE.
SET PF-STATUS LISTA1.
WRITE: Lista Primria.
TOP-OF-PAGE DURING LINE-SELECTION.
SET PF-STATUS LISTA2.
WRITE: Lista Secundria.
AT LINE-SELECTION.
...

Listas em mais de dois nveis


Quando a lista apresentar mais de dois nveis, necessrio identificar o nvel que est sendo
processado s existe um evento AT LINE-SELECTION e um TOP-OF-PAGE DURING LINESELECTION por programa. Para tanto, deve-se utilizar o campo de sistema SY-LSIND, que tem o
nvel corrente de lista. A primeira sub-lista tem SY-LSIND igual a 1, a segunda, 2, e assim por diante,
at o subnvel mximo 19. Por exemplo:
REPORT ZTESTE2N NO STANDARD PAGE HEADING.
TABLES: SFLIGHT, SBOOK.
START-OF-SELECTION.
SELECT * FROM SFLIGHT.
WRITE: SFLIGHT-CARRID, SFLIGHT-CONNID, SFLIGHT-FLDATE, SFLIGHT-SEATSOCC.
HIDE: SFLIGHT-CARRID, SFLIGHT-CONNID, SFLIGHT-FLDATE.
ENDSELECT.
TOP-OF-PAGE.
WRITE: Vos.
TOP-OF-PAGE DURING LINE-SELECTION.
CASE SY-LSIND.
WHEN 1.

I-PROVIDER

Pgina 52

Int roduo aos Conceit os de Desenvolviment o e


Cust omizao de Relat rios

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

Int roduo aos Conceit os de Desenvolviment o e


Cust omizao de Relat rios

Chamando transaes a partir de listagens


Para chamar uma transao a partir de uma listagem, pode-se utilizar o comando CALL
TRANSACTION <codtran> dentro do AT LINE-SELECTION, onde <codtran> o cdigo da
transao. Aps executar a transao, o controle de execuo passar para a linha seguinte ao CALL
TRANSACTION.

I-PROVIDER

Pgina 54

Int roduo aos Conceit os de Desenvolviment o e


Cust omizao de Relat rios

Exerccios de Fixao

Segue abaixo um conjunto de exerccios prticos para aprimorar o aprendizado referente a:


-

O SAP Query

Definindo telas de seleo de parmetros

Criao de Listas Complexas

Exerccio proposto:
Exerccio 1
1.

Criar uma query, que exiba os CARRID, CONNID, CITYFROM, AIRPFROM,


CITYTO e AIRPTO da tabela SPFLI.

Exerccio 2
1.

Para o programa do exerccio anterior, criar uma tela de seleo similar a:

Select-Options

Parameters
Sem extenso
Obrigatrio

I-PROVIDER

Pgina 55

Int roduo aos Conceit os de Desenvolviment o e


Cust omizao de Relat rios

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

Int roduo aos Conceit os de Desenvolviment o e


Cust omizao de Relat rios

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

Int roduo aos Conceit os de Desenvolviment o e


Cust omizao de Relat rios

OBS: Nem todos os Grupos de campos precisam ser utilizados.


4.7. Marcar os campos que sero Critrio de seleo.

4.8. Indicar em que ordem os campos devem aparecer na tela de Seleo:

I-PROVIDER

Pgina 58

Int roduo aos Conceit os de Desenvolviment o e


Cust omizao de Relat rios

Neste ponto recomendvel salvar a Query e depois clicar em Lista bsica.


4.10. Indicar em que linha do relatrio cada campo deve ser exibido, em que seqncia,
qual o critrio de ordenao e os campos que devem ser totalizados e contados.
4.9.

4.1. Salvar.

Exerccio 2
1.

Entre no Editor de programas ABAP:


Pelo menu:
Ferramentas - Abap/Workbench - Editor Abap
Pela transao: SE38

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

Int roduo aos Conceit os de Desenvolviment o e


Cust omizao de Relat rios

4.

Inclua os parmetros como a seguir:


TABLES: spfli.
SELECTION-SCREEN BEGIN OF BLOCK bl1 WITH FRAME TITLE text-007.
SELECT-OPTIONS: s_carrid FOR spfli-carrid NO INTERVALS,
s_connid FOR spfli-connid.
SELECTION-SCREEN ULINE.
SELECTION-SCREEN BEGIN OF BLOCK bl2 WITH FRAME TITLE text-008.
PARAMETERS: p_cityfr LIKE spfli-cityfrom,
p_cityto LIKE spfli-cityto.
SELECTION-SCREEN END OF BLOCK bl2.
SELECTION-SCREEN END OF BLOCK bl1.

Exerccio 3
1.

Inclua a linha de comando HIDE, dentro do Looping de impresso dos registros:


LOOP AT t_spfli.
IF lc_cor = '1'.
FORMAT COLOR 2 INTENSIFIED OFF.
CLEAR lc_cor.
ELSE.
FORMAT RESET.
lc_cor = '1'.
ENDIF.
WRITE: / t_spfli-carrid,
t_spfli-connid,
t_spfli-cityfrom, t_spfli-airpfrom,
t_spfli-cityto,
t_spfli-airpto, 60 ''.
HIDE: t_spfli-carrid, t_spfli-airpfrom, t_spfli-cityfrom,
t_spfli-deptime, t_spfli-airpto,
t_spfli-cityto,
t_spfli-arrtime.
ENDLOOP.

2.

Inclua o evento AT SELECTION-SCREEN com o cdigo:


AT LINE-SELECTION.
WINDOW STARTING AT 5 3 ENDING AT 40 10.
FORMAT COLOR 6 INTENSIFIED OFF.
SELECT carrname
FROM scarr
INTO lc_name
WHERE carrid = t_spfli-carrid.
WRITE: / 'Empresa Area:', lc_name.
ENDSELECT.
FORMAT COLOR 2 INTENSIFIED ON.
WRITE: / 'Vo Nmero
:', t_spfli-connid, 35 ''.
FORMAT COLOR 2 INTENSIFIED OFF.
WRITE: / 'Partindo de :', 35 ''.
FORMAT reset.
SELECT name
FROM sairport

I-PROVIDER

Pgina 60

Int roduo aos Conceit os de Desenvolviment o e


Cust omizao de Relat rios

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