Escolar Documentos
Profissional Documentos
Cultura Documentos
Abap 01 PDF
Abap 01 PDF
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
I-PROVIDER Pgina 3
Introduo aos Conceitos de Desenvolvimento e
Customizao de Relatrios
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.
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.
I-PROVIDER Pgina 6
Introduo aos Conceitos de Desenvolvimento e
Customizao de Relatrios
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
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).
I-PROVIDER Pgina 9
Introduo aos Conceitos de Desenvolvimento e
Customizao de Relatrios
O Dicionrio de Dados
Definies bsicas
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
I-PROVIDER Pgina 12
Introduo aos Conceitos de Desenvolvimento e
Customizao de Relatrios
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
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
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
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!
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.
START-OF-SELECTION.
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
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
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
I-PROVIDER Pgina 24
Introduo aos Conceitos de Desenvolvimento e
Customizao de Relatrios
Exerccios de Fixao
- 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
REPORT ZTABELAINTERNA.
Tabela interna
I-PROVIDER Pgina 28
Introduo aos Conceitos de Desenvolvimento e
Customizao de Relatrios
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.
SORT.
LOOP.
AT CARRINFO.
WRITE: / SPFLI-CITYFROM, SPFLI-CITYTO.
ENDAT.
AT CONNINFO.
WRITE: /10 SFLIGHT-PLANETYPE, SFLIGHT-SEATSOCC, SFLIGHT-SEATSMAX.
ENDAT.
ENDLOOP.
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
I-PROVIDER Pgina 31
Introduo aos Conceitos de Desenvolvimento e
Customizao de Relatrios
Campos de sistema
SELECT
TABLES: SFLIGHT.
Ou
I-PROVIDER Pgina 32
Introduo aos Conceitos de Desenvolvimento e
Customizao de Relatrios
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.
WA-CARRID = 'UA'.
WA-CITYFROM = 'LONDON'.
...
INSERT SPFLI FROM WA.
SPFLI-CARRID = 'LH'.
SPFLI-CITYFROM = 'BERLIN'.
...
INSERT SPFLI.
UPDATE
I-PROVIDER Pgina 33
Introduo aos Conceitos de Desenvolvimento e
Customizao de Relatrios
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.
I-PROVIDER Pgina 34
Introduo aos Conceitos de Desenvolvimento e
Customizao de Relatrios
O comando WRITE
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
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.
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.
I-PROVIDER Pgina 38
Introduo aos Conceitos de Desenvolvimento e
Customizao de Relatrios
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
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
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
START-OF-SELECTION.
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
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
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.
I-PROVIDER Pgina 43
Introduo aos Conceitos de Desenvolvimento e
Customizao de Relatrios
9 Os relatrios podem ser criados por usurios 9 Limitaes para relatrios que exigem a
finais. leitura de muitas tabelas.
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
I-PROVIDER Pgina 45
Introduo aos Conceitos de Desenvolvimento e
Customizao de Relatrios
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
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.
I-PROVIDER Pgina 48
Introduo aos Conceitos de Desenvolvimento e
Customizao de Relatrios
Com isso, criamos bordas ao redor de cada grupo logicamente ligado, melhorando o aspecto da tela e
evitando confuso no momento de sua utilizao:
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
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
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.
START-OF-SELECTION.
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
START-OF-SELECTION.
...
TOP-OF-PAGE.
SET PF-STATUS LISTA1.
WRITE: Lista Primria.
AT LINE-SELECTION.
...
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.
START-OF-SELECTION.
TOP-OF-PAGE.
WRITE: Vos.
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
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
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
- 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
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
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
I-PROVIDER Pgina 59
Introduo aos Conceitos de Desenvolvimento e
Customizao de Relatrios
Exerccio 3
AT LINE-SELECTION.
WINDOW STARTING AT 5 3 ENDING AT 40 10.
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.
SELECT name
FROM sairport
INTO lc_name
WHERE id = t_spfli-airpto.
write: /3 'Aeroporto :', lc_name.
endselect.
I-PROVIDER Pgina 61