Você está na página 1de 61

Introduo aos Conceitos de

Desenvolvimento e Customizao
de Relatrios
Introduo aos Conceitos de Desenvolvimento e
Customizao de Relatrios

Introduo ...........................................................................................5
Composio ........................................................................................5
Como entender a apostila .......................................................................5
Conhecimentos Bsicos sobre a Plataforma de Desenvolvimento ABAP ................7
Caractersticas Principais .......................................................................7
O Repositrio do R/3...............................................................................8
O que o Repositrio ............................................................................8
Classes de desenvolvimento ....................................................................8
O Dicionrio de Dados ........................................................................... 10
Definies bsicas .............................................................................. 10
As caractersticas tcnicas das tabelas do R/3 ............................................ 13
Verificaes de chave externa (foreign keys) ............................................. 15
Processos de ajuste e converso de tabelas ............................................... 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
Function 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 interna .................................................................................. 28
Tipos de tabelas internas...................................................................... 28
Extracts .......................................................................................... 29
O Open SQL ........................................................................................ 31
Comandos ........................................................................................ 31
Campos de sistema ............................................................................. 32

I-PROVIDER Pgina 2
Introduo aos Conceitos de Desenvolvimento e
Customizao de Relatrios

Trabalhando com os Mandantes .............................................................. 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 lista simples ..................................................................... 35
Cabealhos e rodaps .......................................................................... 36
Mudando a apresentao dos campos ....................................................... 36
Modificando o formato de exibio standard .............................................. 37
Posicionando os campos ....................................................................... 38
Especificando unidades de medida e moedas.............................................. 38
Smbolos de Texto .............................................................................. 39
O SAP Query ....................................................................................... 43
Grupos de usurios e reas funcionais ...................................................... 44
Definindo telas de seleo de parmetros .................................................. 45
Diferena entre o comando PARAMETERS e o comando SELECT-OPTIONS............. 45
Agrupando parmetros em bordas e melhorando o layout............................... 48
Modificando o programa para usar bordas.................................................. 48
Janelas adicionais de parmetros............................................................ 49
Criao de Listas Complexas ................................................................... 51
O Evento AT LINE-SELECTION ................................................................. 51
HIDE............................................................................................... 51
Listas em mais de dois nveis ................................................................. 52
AT USER-COMMAND............................................................................. 53
Abrindo Telas Dentro de Relatrios ......................................................... 53
Chamando transaes a partir de listagens ................................................ 54

I-PROVIDER Pgina 3
Introduo aos Conceitos de Desenvolvimento e
Customizao de Relatrios

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 logotipo SAP e todos os outros servios e marcas da SAP
so marcas registradas da SAP AG.

I-PROVIDER Pgina 4
Introduo aos Conceitos de Desenvolvimento e
Customizao de Relatrios

Introduo

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
Introduo aos Conceitos de Desenvolvimento e
Customizao de Relatrios

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
Introduo aos Conceitos de Desenvolvimento e
Customizao de Relatrios

Conhecimentos Bsicos sobre a Plataforma de Desenvolvimento ABAP

Camada de
Apresentao
(Front-end)

Camada de
Programa ABAP
Aplicao

Servidor de
Banco de
Dados

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
Introduo aos Conceitos de Desenvolvimento e
Customizao de Relatrios

O Repositrio 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
Introduo aos Conceitos de Desenvolvimento e
Customizao de Relatrios

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
Introduo aos Conceitos de Desenvolvimento e
Customizao de Relatrios

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
Introduo aos Conceitos de Desenvolvimento e
Customizao de Relatrios

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
Introduo aos Conceitos de Desenvolvimento e
Customizao de Relatrios

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
Introduo aos Conceitos de Desenvolvimento e
Customizao de Relatrios

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
Introduo aos Conceitos de Desenvolvimento e
Customizao de Relatrios

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
Introduo aos Conceitos de Desenvolvimento e
Customizao de Relatrios

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
Introduo aos Conceitos de Desenvolvimento e
Customizao de Relatrios

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 MOVE-
CORRESPONDING, que o comando usado para fazer a movimentao dos dados da tabela

I-PROVIDER Pgina 16
Introduo aos Conceitos de Desenvolvimento e
Customizao de Relatrios

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
Introduo aos Conceitos de Desenvolvimento e
Customizao de Relatrios

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 X MANDT Mandante
WERKS X WERKS Centro
MATNR X 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
Introduo aos Conceitos de Desenvolvimento e
Customizao de Relatrios

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
Introduo aos Conceitos de Desenvolvimento e
Customizao de Relatrios

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
Introduo aos Conceitos de Desenvolvimento e
Customizao de Relatrios

REPORT ZHELLO2.

INCLUDE ZCODIGO.

TABLES: SFLIGHT.

DATA: CAMPO_1(7) TYPE C,


CAMPO_2(4) TYPE N,
IT_SFLIGHT LIKE TABLE OF SFLIGHT,
WA_SFLIGHT LIKE 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
Introduo aos Conceitos de Desenvolvimento e
Customizao de Relatrios

Bibliotecas 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
Introduo aos Conceitos de Desenvolvimento e
Customizao de Relatrios

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
Introduo aos Conceitos de Desenvolvimento e
Customizao de Relatrios

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 selection-


screens 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
Introduo aos Conceitos de Desenvolvimento e
Customizao de Relatrios

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
Introduo aos Conceitos de Desenvolvimento e
Customizao de Relatrios

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: / 'Al, Mundo!'.
WRITE: / lc_frase1.
WRITE: / 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 para incluir o menu.
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
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
Introduo aos Conceitos de Desenvolvimento e
Customizao de Relatrios

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
Introduo aos Conceitos de Desenvolvimento e
Customizao de Relatrios

Criando Tabelas Internas e Estruturas 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
Introduo aos Conceitos de Desenvolvimento e
Customizao de Relatrios

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
Introduo aos Conceitos de Desenvolvimento e
Customizao de Relatrios

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
Introduo aos Conceitos de Desenvolvimento e
Customizao de Relatrios

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
Introduo aos Conceitos de Desenvolvimento e
Customizao de Relatrios

h SELECT: permite a leitura de dados do banco de dados.

h INSERT: insere dados no banco.

h UPDATE: atualiza dados.

h MODIFY: atualiza dados existentes ou os acrescenta caso no existam no banco.

h DELETE: apaga registros do banco de dados.

h 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 SY-


SUBRC, 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:

h 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
Introduo aos Conceitos de Desenvolvimento e
Customizao de Relatrios

DATA: IT_SFLIGHT LIKE SFLIGHT.

SELECT SFLIGHT~CARRID SFLIGHT~CONNID SFLIGHT~FLDATE SFLIGHT~SEATSOCC


FROM SFLIGHT INTO TABLE IT_SFLIGHT

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

h FROM <tabela> [[INNER|LEFT OUTER] JOIN <tabela>, ..]: Especifica a origem


dos dados.

h 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
Introduo aos Conceitos de Desenvolvimento e
Customizao de Relatrios

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
Introduo aos Conceitos de Desenvolvimento e
Customizao de Relatrios

Criao de Listas 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
Introduo aos Conceitos de Desenvolvimento e
Customizao de Relatrios

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
Introduo aos Conceitos de Desenvolvimento e
Customizao de Relatrios

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
Introduo aos Conceitos de Desenvolvimento e
Customizao de Relatrios

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
Introduo aos Conceitos de Desenvolvimento e
Customizao de Relatrios

Um trecho do report seria:


150420 ITL Sem CURRENCY: 683.231,44 Com CURRENCY: 68.323.144
130520 ITL Sem CURRENCY: 318.202,60 Com CURRENCY: 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
Introduo aos Conceitos de Desenvolvimento e
Customizao de Relatrios

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.
RELAO DE VOS
ID Num. Partindo de Aer. Pousando em Aer.

I-PROVIDER Pgina 40
Introduo aos Conceitos de Desenvolvimento e
Customizao de Relatrios

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: DELETE t_spfli WHERE cityfrom = 'SINGAPORE'.

I-PROVIDER Pgina 41
Introduo aos Conceitos de Desenvolvimento e
Customizao de Relatrios

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 RELAO DE VOS
002 ID
003 Num.
004 Partindo de
005 Aer.
006 Pousando em

2. Salve os textos e Ative.


3. Na tela de edio do programa, entre a declarao da tabela interna e o evento START-
OF-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 ''. usado para que a linha fique da cor desejada at a coluna 60.

I-PROVIDER Pgina 42
Introduo aos Conceitos de Desenvolvimento e
Customizao de Relatrios

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
Introduo aos Conceitos de Desenvolvimento e
Customizao de Relatrios

Exemplo: Produtos Acabados sem Listas Tcnicas

Pontos Positivos Pontos Negativos

9 Possibilita criar relatrios rapidamente sem a 9 Baixa performance se comparado com


necessidade de criar programas em ABAP. programas ABAP.

9 Os relatrios podem ser criados por usurios 9 Limitaes para relatrios que exigem a
finais. leitura de muitas tabelas.

9 Facilidades e recursos na sua criao e 9 No possvel incluir lgica de


utilizao. programao.

9 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
Introduo aos Conceitos de Desenvolvimento e
Customizao de Relatrios

Definindo telas de seleo de parmetros

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

SELECT-OPTIONS: S_CARRID FOR SPFLI-CARRID,


S_CONNID FOR SPFLI-CONNID.

PARAMETERS: S_CHECK AS CHECKBOX,


S_RADIO1 RADIOBUTTON GROUP RAD,
S_RADIO2 RADIOBUTTON GROUP RAD,
S_RADIO3 RADIOBUTTON GROUP TTN,
S_RADIO4 RADIOBUTTON GROUP TTN,
S_RADIO5 RADIOBUTTON GROUP 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
Introduo aos Conceitos de Desenvolvimento e
Customizao de Relatrios

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
I 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
Introduo aos Conceitos de Desenvolvimento e
Customizao de Relatrios

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
Introduo aos Conceitos de Desenvolvimento e
Customizao de Relatrios

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
Introduo aos Conceitos de Desenvolvimento e
Customizao de Relatrios

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 select-
options 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
Introduo aos Conceitos de Desenvolvimento e
Customizao de Relatrios

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 TITLE TEXT-004.


PARAMETERS: S_RADIO3 RADIOBUTTON GROUP TTN,
S_RADIO4 RADIOBUTTON GROUP TTN,
S_RADIO5 RADIOBUTTON GROUP TTN.
SELECTION-SCREEN END OF BLOCK BL4.
SELECTION-SCREEN END OF SCREEN 0150.

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
Introduo aos Conceitos de Desenvolvimento e
Customizao de Relatrios

Criao de Listas 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 LINE-
SELECTION. 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
Introduo aos Conceitos de Desenvolvimento e
Customizao de Relatrios

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 LINE-
SELECTION 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
Introduo aos Conceitos de Desenvolvimento e
Customizao de Relatrios

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
Introduo aos Conceitos de Desenvolvimento e
Customizao de Relatrios

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
Introduo aos Conceitos de Desenvolvimento e
Customizao de Relatrios

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
Introduo aos Conceitos de Desenvolvimento e
Customizao de Relatrios

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
Introduo aos Conceitos de Desenvolvimento e
Customizao de Relatrios

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
Introduo aos Conceitos de Desenvolvimento e
Customizao de Relatrios

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
Introduo aos Conceitos de Desenvolvimento e
Customizao de Relatrios

4.9. 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.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:
007 Relao de Vos
008 Localidades

I-PROVIDER Pgina 59
Introduo aos Conceitos de Desenvolvimento e
Customizao de Relatrios

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
Introduo aos Conceitos de Desenvolvimento e
Customizao de Relatrios

INTO lc_name
WHERE id = t_spfli-airpfrom.
write: /3 'Aeroporto :', lc_name.
endselect.

WRITE: /3 'Cidade :', t_spfli-cityfrom.


WRITE: /3 'Horrio :', t_spfli-deptime.
FORMAT COLOR 2 INTENSIFIED OFF.
WRITE: / 'Chegando em :', 35 ''.
FORMAT reset.

SELECT name
FROM sairport
INTO lc_name
WHERE id = t_spfli-airpto.
write: /3 'Aeroporto :', lc_name.
endselect.

WRITE: /3 'Cidade :', t_spfli-cityto.


WRITE: /3 'Horrio :', t_spfli-arrtime.

I-PROVIDER Pgina 61

Você também pode gostar