Escolar Documentos
Profissional Documentos
Cultura Documentos
Introdução ........................................................................................... 5
Composição........................................................................................ 5
Como ent ender a apost ila....................................................................... 5
Conhecimentos Básicos sobre a Plataforma de Desenvolvimento ABAP ................ 7
Caract eríst icas Principais ....................................................................... 7
O Repositório do R/ 3............................................................................... 8
O que é o Reposit ório ............................................................................ 8
Classes de desenvolviment o .................................................................... 8
O Dicionário de Dados........................................................................... 10
Definições básicas .............................................................................. 10
As caract eríst icas t écnicas das t abelas do R/ 3 ............................................ 13
Verificações de chave ext erna (f oreign keys) ............................................. 15
Processos de aj ust e e conversão de t abelas ............................................... 16
Visões no R/ 3.................................................................................... 17
Alô, Mundo! ........................................................................................ 20
Criando seu primeiro programa ABAP/ 4 .................................................... 20
Bibliotecas de Funções.......................................................................... 22
O que são as funções no R/ 3.................................................................. 22
RFC................................................................................................ 23
Funct ion Groups ................................................................................ 23
Os Criadores de Menus e Telas ................................................................ 24
Criando menus .................................................................................. 24
Criando Telas.................................................................................... 24
Criando Tabelas Internas e Estruturas Complexas de Armazenagem Temporária.. 28
Tabela int erna .................................................................................. 28
Tipos de t abelas int ernas...................................................................... 28
Ext ract s .......................................................................................... 29
O Open SQL ........................................................................................ 31
Comandos........................................................................................ 31
Campos de sist ema ............................................................................. 32
© I-PROVIDER Página 2
Int rodução aos Conceit os de Desenvolviment o e
Cust omização de Relat órios
© I-PROVIDER Página 3
Int rodução aos Conceit os de Desenvolviment o e
Cust omização de Relat órios
R/ 3, ABAP, SAP, SAPScript , o logot ipo SAP e t odos os out ros serviços e marcas da SAP
são marcas regist radas da SAP AG.
© I-PROVIDER Página 4
Int rodução aos Conceit os de Desenvolviment o e
Cust omização de Relat órios
Int rodução
Composição
Este material tem como objetivo principal apresentar o ambiente de programação ABAP aos
profissionais que não desenvolverão programas diretamente, mas necessitam conhecer a ferramenta
para embasar seu trabalho.
Para o aprendizado mais específico desta ferramenta, aconselha-se a preparação em programas de
treinamentos oficiais, junto a SAP Brasil.
Este material foi desenvolvido com base nas operações do sistema SAP R/3, sendo em alguns casos
exemplificados com as próprias telas de utilização do sistema.
Todos os capítulos desta apostila foram estruturados nos conceitos técnicos do ABAP, compositores
dos elementos da linguagem de programação do SAP R/3, e possuem suas definições e exemplos
similares aos previstos em material técnico da própria SAP.
Os exercícios de fixação do contexto técnico serão aplicados conforme acompanhamento de
profissional capacitado, e serão atribuídos ao sistema, de acordo com a programação dos temas que
serão discutidos em workshop.
© I-PROVIDER Página 5
Int rodução aos Conceit os de Desenvolviment o e
Cust omização de Relat órios
Conteúdo Programático
̌ Conhecimentos básicos sobre a plataforma de desenvolvimento ABAP;
̌ Trabalhando com o Repositório de Programas;
̌ Conhecendo os elementos do Dicionário de dados ABAP;
̌ Biblioteca de Funções;
̌ Criador de Menus e Telas;
̌ Classes de Desenvolvimento e tipos de programas;
̌ Desenvolvimento de relatórios e consultas;
̌ Definição de elementos de texto;
̌ Criando tabelas internas e estruturas complexas de armazenagem temporária;
̌ Definindo telas de seleção de parâmetros;
̌ Chamadas de telas de seleção em consultas complexas;
̌ Criação de listas básicas;
̌ Criação de listas complexas com recurso de drill down;
̌ Criação de consulta interativa com funções adicionais;
̌ Carregando telas em relatórios;
̌ Conhecimentos de comandos ABAP Open-SQL;
̌ Atribuindo funções extras aos relatórios e consultas;
̌ Chamando transações a partir de listagens.
© I-PROVIDER Página 6
Int rodução aos Conceit os de Desenvolviment o e
Cust omização de Relat órios
Ca m a da de
Apre se nt a ç ã o
(Front -e nd)
Ca m a da de
Progra m a ABAP
Aplic a ç ã o
Se rvidor de
Ba nc o de
Da dos
Características Principais
O R/3 usa o modelo cliente-servidor de três camadas, com a primeira camada composta pelo
servidor de banco de dados, uma outra camada de aplicação, onde são executadas as regras de
negócio, e uma camada de apresentação, onde os usuários rodam o programa de front-end
responsável pela interface do usuário com o sistema.
O ABAP é a linguagem de programação nativa do SAP R/3, e é uma linguagem interpretada
de alto nível. Dentro do servidor de aplicação do R/3, todos os programas responsáveis pelas regras
de negócio são 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 execução de cada programa ou em bloco, um código intermédiário pseudo-compilado,
específico para cada combinação de sistema operacional + versão do R/3. Até mesmo alguns níveis
de atualização de kernel tornam incompatível o código previamente gerado, havendo necessidade de
“recompilar” os programas ABAP.
Todo o desenvolvimento dos programas ABAP pode ser realizado usando ferramentas
disponibilizadas pelas transações apropriadas dentro do próprio R/3, dispensando o uso de
ferramentas externas. Essas transações serão detalhadas durante o curso.
© I-PROVIDER Página 7
Int rodução aos Conceit os de Desenvolviment o e
Cust omização de Relat órios
O Reposit ório do R/ 3
O que é o Repositório
Classes de desenvolvimento
© I-PROVIDER Página 8
Int rodução aos Conceit os de Desenvolviment o e
Cust omização de Relat órios
O Repositório está separado pelos módulos funcionais, e os objetos nele contidos estão
separados logicamente em classes de desenvolvimento. As classes de desenvolvimento são agrupamentos
de objetos do repositório que estão relacionados entre si. Todo objeto do repositório deve pertencer
a uma classe de desenvolvimento e toda classe de desenvolvimento deve ter definido um transport
layer, que é uma definição de Basis que define qual é a rota de transporte (para quais sistemas o
objeto pode ser transportado numa change request, ou se não pode ser transportado, caso seja um
layer local).
© I-PROVIDER Página 9
Int rodução aos Conceit os de Desenvolviment o e
Cust omização de Relat órios
O Dicionário de Dados
Definições básicas
© I-PROVIDER Página 10
Int rodução aos Conceit os de Desenvolviment o e
Cust omização de Relat órios
Além dessas definições, o dicionário ABAP permite criar os search helps, que são tabelas de
busca auxiliares aos campos de tela – são as buscas e tabelas que aparecem quando se tecla F4 dentro
de um campo em qualquer tela do R/3. Criando documentação para o elemento de dados dentro do
dicionário, automaticamente está disponível a ajuda do campo, que pode ser invocada usando-se a
tecla F1 dentro dos campos de tela. Pode-se, ainda, definir verificações de entrada automaticamente,
bastando definir uma relação de foreign key.
No dicionário também são 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
usuários editem a mesma informação ao mesmo tempo no sistema.
O dicionário é integrado às ferramentas de desenvolvimento e execução do R/3, permitindo
o acesso das ferramentas às definições nele contidas. Por exemplo, é possível navegar de um
programa que esteja sendo criado no editor ABAP para definições de campos, elementos e tabelas
usadas no programa.
Definição 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 autorização para manutenção. Cada
campo deve ter um nome único dentro da tabela, e pode fazer parte de uma chave. Cada tabela deve
ter uma chave primária, que é composta por campos cujos valores identificam unicamente os
registros de uma tabela. As tabelas definidas no dicionário de dados do R/3 são criadas no banco de
dados assim que ativadas.
© I-PROVIDER Página 11
Int rodução aos Conceit os de Desenvolviment o e
Cust omização de Relat órios
© I-PROVIDER Página 12
Int rodução aos Conceit os de Desenvolviment o e
Cust omização de Relat órios
Quando uma tabela é definida no dicionário de dados do R/3, devem ser definidas as
características técnicas (technical settings) para a tabela. Essas características são usadas para otimizar o
acesso e a armazenagem da tabela individualmente.
As características técnicas podem ser usadas para definir como a tabela deve ser manipulada
quando for criada no banco de dados, se ela deve ser incluída em buffer e de que forma, e se as
mudanças 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 são master
© I-PROVIDER Página 13
Int rodução aos Conceit os de Desenvolviment o e
Cust omização de Relat órios
data, transaction data, organizational data e system data. Os dados mestres devem ser
classificados como master data, os dados transacionais como transaction data, a configuração
funcional como organizational data e os dados de sistema como system data. Geralmente, dentro de
um projeto, são criadas tabelas dos tipos master e transaction somente. De posse dessa informação, 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 espaço no banco de dados de
acordo com o tamanho projetado para a tabela, de modo a evitar fragmentação dos dados.
Pode-se definir que uma determinada tabela será armazenada em buffer de memória. 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 são dados mestres com muita utilização e
raramente atualizadas. Tabelas de dados transacionais não devem ser colocadas em buffer, pois cada
registro dentro delas é menos frequentemente acessado que nas tabelas de dados mestres, e estão
sujeitos a atualizações. A atualização 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 são colocados no buffer, e
generic, no qual são colocados no buffer registros que tenham determinados valores na chave. Os
dados não são 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 necessário, pode-se definir o registro em log das alterações feitas numa tabela.
Porém, deve-se ter em mente que isso pode criar um impacto na performance do sistema.
© I-PROVIDER Página 14
Int rodução aos Conceit os de Desenvolviment o e
Cust omização de Relat órios
As foreign keys são campos, dentro de uma determinada tabela, que fazem referência 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 não exista, ocorrerá um erro. As relações de chave externa são definidas na transação de
manutenção de tabelas do dicionário.
© I-PROVIDER Página 15
Int rodução aos Conceit os de Desenvolviment o e
Cust omização de Relat órios
Deve-se assegurar que os objetos no dicionário de dados estejam sincronizadas com suas
implementações no banco de dados. Ao ser feita uma modificação na tabela, como por exemplo a
inclusão de um registro, as mudanças feitas no dicionário devem ser refletidas pelo R/3 no banco de
dados, quer seja através da alteração de estrutura (via comandoALTER TABLE do banco), ou
deletando e recriando a tabela¸ o que acarreta perda de dados, ou através do ajuste do banco,
que é um processo trabalhoso. Qualquer uma dessas formas pode ser escolhida pelo usuário; para
alguns tipos de modificação, apenas a alteração da estrutura não bastará, sendo necessária a deleção
ou ajuste da tabela.
Caso os dados na tabela não 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 são
copiados os registros da tabela original. Dependendo da quantidade de dados na tabela, o ajuste pode
ter um tempo de execução considerável. Alguns problemas podem surgir durante a conversão
quando, por exemplo, algum arquivo do banco de dados for totalmente preenchido, ou os tipos de
campos forem alterados de modo a não poderem mais ser movidos via MOVE-
CORRESPONDING, que é o comando usado para fazer a movimentação dos dados da tabela
© I-PROVIDER Página 16
Int rodução aos Conceit os de Desenvolviment o e
Cust omização de Relat órios
original para a nova tabela. Porém, o grande problema na conversão ocorre quando a chave é
reduzida de tamanho. Corre-se o risco de, considerada a nova chave, registros que não incorriam em
problemas de chave duplicada passarem a sê-lo. Nesse caso, apenas um dos registros será copiado, e
não se pode ter certeza qual será. Assim, é recomendável evitar ao máximo a alteração de chaves nas
tabelas criadas no R/3 que já possuam volume de dados produtivos.
Visões no R/ 3
As visões são queries de uma ou mais tabelas, que retornam um conjunto de dados que pode
ser tratado como uma tabela pelos programas ABAP. As visões são definidas no dicionário de dados,
estando disponíveis para uso em todo o sistema. As visões podem ser do tipo join, nas quais é
trazido um conjunto de dados a partir de várias tabelas unidas por joins; do tipo projection, nas
quais selecionam-se apenas os campos desejados de uma tabela específica; ou do tipo selection, nas
quais se deseja exibir apenas os registros que satisfaçam um determinado critério.
© I-PROVIDER Página 17
Int rodução aos Conceit os de Desenvolviment o e
Cust omização de Relat órios
Exercícios de Fixação
Exercício proposto:
Exercício 1
Criar uma tabela transparente, para controlar prazo de validade de produtos perecíveis.
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 início de validade
PRVAL MHDHB Prazo de validade
Exercício 2
Criar uma Visão para visualizar os dados da tabela criada no exercício anterior.
© I-PROVIDER Página 18
Int rodução aos Conceit os de Desenvolviment o e
Cust omização de Relat órios
Solução:
Exercício 1
1. Entre no Dicionário de Dados:
Pelo menu: Ferramentas - Abap/Workbench - Data Dictionary
Pela transação: SE11
2. Selecione TABELA BANCO DE DADOS, digite o nome da tabela a ser criada e depois
clique sobre o botão CRIAR.
3. Entre com uma descrição 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 Opções Técnicas, clicando sobre o botão OPÇÕES TÉCNICAS.
8. Selecione o Tipo de Dados e Categor. Tamanho adequados para a tabela que está sendo
criada.
9. Saia da janela de Opções Técnicas, Salve e Ative a tabela.
Exercício 2
1. Entre no Dicionário de Dados:
Pelo menu: Ferramentas - Abap/Workbench - Data Dictionary
Pela transação: SE11
2. Selecionando VISÃO, digite com o nome da Visão a ser criada e clique sobre o botão
CRIAR,
3. Selecione tipo de visão como VISÃO DE BANCO DE DADOS.
4. Na pasta Tabelas/Condições Join, na coluna TABELAS, entre com o nome da tabela para a
qual a visão será criada.
5. Passando para a pasta Cpos.Visão, 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: Utilitários - Conteúdo.
© I-PROVIDER Página 19
Int rodução aos Conceit os de Desenvolviment o e
Cust omização de Relat órios
Alô, Mundo!
Com apenas duas linhas de código, acabamos de criar nosso primeiro programa ABAP.
Selecione F8 (executar), e missão cumprida. Por ser este exemplo muito simples, introduziremos um
exemplo mais elaborado, que permitirá explicar alguns pontos iniciais sobre a programação:
© I-PROVIDER Página 20
Int rodução aos Conceit os de Desenvolviment o e
Cust omização de Relat órios
REPORT ZHELLO2.
INCLUDE ZCODIGO.
TABLES: SFLIGHT.
START-OF-SELECTION.
Vamos analisar cada componente do novo trecho de código. Primeiro, temos as declarações
REPORT, INCLUDE, TABLES e DATA. REPORT é a declaração básica do programa, que
especifica seu nome e eventualmente alguma opção extra. INCLUDE especifica um trecho de
programa que deve ser incluído durante a compilação/execução do programa. TABLES declara uma
área de trabalho para o uso de uma tabela do dicionário, e DATA contém as declarações dos campos
e áreas de dados internos ao programa. Existem outras declarações não incluídas neste programa, e,
dependendo do tipo de programa, as declarações aqui mostradas não são obrigatórias.
Em seguida temos um evento do ABAP, neste caso o evento START-OF-SELECTION, que
é disparado sempre no início do programa. Existem outros eventos e, neste caso, não seria realmente
necessário o evento, apenas o incluímos para explicá-lo. Um evento é encerrado pelo início de outro
evento ou pelo final do programa.
Dentro do evento temos os comandos, que executam efetivamente as ações dentro do ABAP.
Neste caso específico temos um comando SELECT, que busca os dados no banco e os coloca na
tabela interna, que é uma área de memória especificada na declaração DATA, um comando de
atribuição de valor para o campo CAMPO_1, e um LOOP na tabela interna que imprime algumas
informações baseado nas informações da tabela interna e dos campos locais.
Nos próximos capítulos estaremos detalhando com um pouco mais de profundidade a
criação de programas ABAP.
© I-PROVIDER Página 21
Int rodução aos Conceit os de Desenvolviment o e
Cust omização de Relat órios
Dentro do R/3, as funções são elementos do repositório que encapsulam uma determinada
operação. Por estarem dentro do repositório, podem ser usadas por qualquer programa. No R/3, as
funções são definidas em uma transação apropriada, o Function Builder (SE37). Cada função deve
ter determinados os parâmetros de entrada, saída, tabelas que porventura sejam usadas e condições
de exceção que possam ser encontradas durante a execução.
Além do uso das funções standard do R/3, é útil criar uma função quando a operação será
usada por vários programas diferentes, aumentando o reuso do código e uniformizando a codificação
dos programas. Por exemplo, um programador ABAP mais experiente pode criar funções que
ocultam a complexidade de uma determinada operação, podendo ser usadas por programadores
menos experientes para elaborar programas que se tornam mais simples. Suponha que um programa
contenha acesso a várias tabelas críticas do R/3, com massa considerável de dados. Talvez esse
programa não possa ser criado por um programador iniciante, e o programa é então passado
inteiramente à responsabilidade de um pleno ou sênior, que pode ficar sobrecarregado com a
quantidade de programas atribuídos a ele, ou ela.
© I-PROVIDER Página 22
Int rodução aos Conceit os de Desenvolviment o e
Cust omização de Relat órios
Usando funções, podemos ter um cenário em que o sênior apenas desenvolve a função 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 sênior, ao desenvolver a
função, poderá concentrar-se em otimizar sua performance e adotar técnicas mais eficientes de
programação.
Isso não se aplica a todos os casos, mas a adoção dessa tática e de outros esquemas de
encapsulamento do R/3 (logical databases, classes) pode trazer benefícios à produtividade da equipe
de desenvolvimento.
A idéia central no uso das funções é que seu uso não dependa dos detalhes de sua
implementação (por exemplo, se vou usar uma função que retorna as vendas de um mês, deve bastar
que eu saiba quais valores devo passar e onde desejo receber o resultado, e não quais tabelas devem
ser verificadas e somadas), dentro de um conceito estrito de encapsulamento.
Para usar uma função dentro do R/3, usa-se o comando CALL FUNCTION. Existe um
mecanismo de busca no repositório (o botão Modelo presente no editor de programas) que, dado um
nome de função, automaticamente insere no código o esqueleto da chamada de função, com todos
seus parâmetros listados.
RFC
O RFC é um mecanismo do R/3 que permite a execução de uma função a partir de uma
outra máquina – por exemplo, digamos que o servidor PRD execute uma função RFC do servidor
QAS. Essa função irá ser executada no servidor QAS, e os resultados serão passados para o servidor
PRD. Qualquer função de usuário pode se tornar uma função RFC, bastando para tanto que seja
selecionada a opção apropriada nas opções técnicas do módulo de função. A chamada RFC não se
limita à comunicação entre sistemas R/3 – outros sistemas podem fazer uso desse protocolo. Porém,
ao invés 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 são as BAPIs (Business
Application Programming Interfaces), que usam um mecanismo RFC encapsulado e simplificado.
Function Groups
Toda função dentro do R/3 deve pertencer a um function group, que é um agrupamento de
funções com características e propósitos semelhantes. Quando um function group é transportado,
são transportadas juntas todas as funções a ele ligadas que tenham sido modificadas ou criadas.
© I-PROVIDER Página 23
Int rodução aos Conceit os de Desenvolviment o e
Cust omização de Relat órios
Criando menus
Dentro de um programa ABAP, é possível definir menus, botões e combinações de teclas específicas
para o contexto em que se esteja trabalhando. Por exemplo, pode-se colocar itens de menu referentes
à inserção de um pedido e outros itens diferentes para quando se estiver apenas exibindo um pedido.
Esses menus são definidos através 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, botões e combinações de tela escolhido.
Criando Telas
© I-PROVIDER Página 24
Int rodução aos Conceit os de Desenvolviment o e
Cust omização de Relat órios
Exercícios de Fixação
- Alo Mundo!
- Biblioteca de Funções
- Os criadores de menus e telas
Exercício proposto:
Exercício 1
Copie da apostila o programa ‘Alô, Mundo!’.
Declare as variáveis lc_frase1 como caracter com 26 posições, e lc_frase2 como caracter com
24 posições e atribua as frases ‘Meu primeiro programa ABAP’ à variável lc_frase1 e ‘Programando
para SAP R/3’ à variável lc_frase2.
Escreva as frases na tela nas linhas imediatamente abaixo de ‘Alô, Mundo!’.
Exercício 2
Para o programa ‘Alô, Mundo!’, crie uma barra de menu ‘Relatório’ com as opções de
Imprimir, Voltar e Encerrar.
© I-PROVIDER Página 25
Int rodução aos Conceit os de Desenvolviment o e
Cust omização de Relat órios
Solução:
Exercício 1
1. Entre no Editor de programas ABAP:
Pelo menu: Ferramentas - Abap/Workbench - Editor Abap
Pela transação: SE38
2. Entre com o nome do Programa a ser criado e, com o botão de rádio Código Fonte
selecionado, clique sobre o botão CRIAR.
3. Na janela de Atributos do Programa, digite o título do programa e defina o tipo de
programa como Programa Executável e a Aplicação.
4. Identifique a Classe de Desenvolvimento.
5. Na janela do editor, digite o código:
REPORT HELLO.
DATA: lc_frase1(26) type c,
lc_frase2(24) type c.
WRITE: / 'Alô, Mundo!'.
WRITE: / lc_frase1.
WRITE: / lc_frase2.
Exercício 2
1. Entre no Menu Painter:
Pelo menu: Ferramentas - Abap/Workbench – Menu Painter
Pela transação: 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 botão CRIAR.
4. Entre com a descrição do Menu.
5. Na linha ‘Barra de Menu’, clique sobre o botão para incluir o menu.
6. Digite nome que se quer que apareça na barra de menu, no caso do exercício: ‘Relatório’.
7. Clique duas vezes sobre a palavra Relatório. Para inserir os itens do menu.
8. Inclua, na coluna de Código e Texto os códigos de comando e descrições desejados. No
caso do exercício: 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 transação: SE38
© I-PROVIDER Página 26
Int rodução aos Conceit os de Desenvolviment o e
Cust omização de Relat órios
11. Digite o nome do Programa do exercício anterior, com o botão de rádio Código Fonte
selecionado, clique sobre o botão MODIFICAR.
12. Faça a chamada do menu, digitando, no código do programa ABAP, o comando SET
PF-STATUS <nome>, onde <nome> é o nome do menu criado na transação SE41.
© I-PROVIDER Página 27
Int rodução aos Conceit os de Desenvolviment o e
Cust omização de Relat órios
REPORT ZTABELAINTERNA.
Tabela interna
© I-PROVIDER Página 28
Int rodução aos Conceit os de Desenvolviment o e
Cust omização de Relat órios
Extracts
Extracts são 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 várias estruturas diferentes. Por exemplo, suponha que
você tenha que gerar um relatório 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 Página 29
Int rodução aos Conceit os de Desenvolviment o e
Cust omização de Relat órios
O comando INSERT insere os campos em cada tipo de registro (grupo de campos) definido.
Usando o comando EXTRACT, os dados são copiados para um novo registro com o tipo
especificado.
Para ler os dados do extract, primeiramente seu conteúdo deve ser ordenado, usando-se o
comando SORT. Não é necessário 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 Página 30
Int rodução aos Conceit os de Desenvolviment o e
Cust omização de Relat órios
O Open SQL
O ABAP oferece um conjunto de comandos que permite realizar operações com os dados
armazenados no banco, o Open SQL. A idéia central do Open SQL é prover uma linguagem de
acesso ao banco independente de plataforma. Os comandos Open SQL têm de passar pelo
interpretador ABAP, que os traduz para os comandos SQL do banco de dados que esteja sendo
utilizado.
Comandos
© I-PROVIDER Página 31
Int rodução aos Conceit os de Desenvolviment o e
Cust omização de Relat órios
Campos de sistema
Os dois principais campos de sistema envolvidos em operações do Open SQL são o SY-
SUBRC, que retorna 0 caso a operação tenha sido bem-sucedida, e o SY-DBCNT, que retorna o
número de registros afetados pelo comando.
SELECT
TABLES: SFLIGHT.
Ou
© I-PROVIDER Página 32
Int rodução aos Conceit os de Desenvolviment o e
Cust omização de Relat órios
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 intermediária e, em seguida, chamar o comando INSERT. Caso a
área não seja especificada em TABLES, deve ser usada a opção 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 Página 33
Int rodução aos Conceit os de Desenvolviment o e
Cust omização de Relat órios
MODIFY
O comando MODIFY opera da mesma forma que o comando UPDATE, mas insere um
novo registro caso o registro especificado não exista.
DELETE
O comando DELETE elimina registros do banco. Ele opera da mesma forma que o
comando INSERT.
© I-PROVIDER Página 34
Int rodução aos Conceit os de Desenvolviment o e
Cust omização de Relat órios
O comando WRITE
Com esse trecho de código apenas, o R/3 gera uma lista simples do conteúdo de alguns
campos da tabela SPFLI:
© I-PROVIDER Página 35
Int rodução aos Conceit os de Desenvolviment o e
Cust omização de Relat órios
Cabeçalhos e rodapés
cabeçalho usando a opção Saltar å Elementos de Texto å Títulos de Lista. Nesse caso, deve-se saber
uma lista. No exemplo, a lista ainda não tem cabeçalho. Para criá-los, pode-se editar diretamente o
Sistema å Lista å Título da Lista é possível editar o título no momento da exibição da lista, facilitando
previamente em que posição deve ficar o texto no cabeçalho. Por outro lado, utilizando-se a opção
muito o posicionamento dos textos. Também é possível suprimir a geração do título básico,
substituindo-o por um título composto pelo programa ABAP. Para tanto, deve-se colocar na
declaração REPORT do início do programa a opção NO STANDARD PAGE HEADING e
implementar no programa o evento TOP-OF-PAGE. Caso também queira um rodapé para cada
página, use o evento END-OF-PAGE para escrevê-lo.
Para melhorar a apresentação da lista, podemos modificar a forma como os campos são
exibidos. Por exemplo, podemos mudar a cor com a opção COLOR do comando WRITE; podemos
mudar a intensidade da cor com a opção 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 opção COLOR admite qualquer uma das cores padrão do R/3, disponíveis na transação
LIBS:
© I-PROVIDER Página 36
Int rodução aos Conceit os de Desenvolviment o e
Cust omização de Relat órios
Por exemplo, para modificar um campo de forma a usar a cor COL_KEY menos intensa,
como hotspot, centralizado, escreveríamos o código como segue:
WRITE: / SPFLI-CARRID COLOR COL_KEY INTENSIFIED OFF HOTSPOT CENTERED.
A opção HOTSPOT faz com que, ao se apontar o campo com o cursor, o mesmo fique no
formato de uma “mãozinha”, como num hyperlink da Internet, permitindo a seleção do registro com
um único clique do mouse. Essa característica é muito útil no processamento de listas em vários
níveis.
As opções dentro do comando WRITE têm 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 opções de formatação vistas para o comando WRITE. Com
isso, todos os campos a seguir serão exibidos com as opções especificadas pelo comando FORMAT,
até que seja encontrado um novo comando FORMAT. Pode-se continuar usando os modificadores
no WRITE, mas os mesmos irão basear-se no novo padrão estabelecido no comando WRITE. Por
exemplo, caso seja colocado o comando
FORMAT COLOR COL_KEY INTENSIFIED ON CENTERED
todos os campos a seguir passarão a ser exibidos na cor COL_KEY INTENSIFIED, e serão
apresentados centralizados. Caso tenhamos em seguida o comando
WRITE: / SPFLI-CARRID INTENSIFIED OFF, SPFLI-CONNID.
© I-PROVIDER Página 37
Int rodução aos Conceit os de Desenvolviment o e
Cust omização de Relat órios
a cor exibida para o campo SPFLI-CARRID será COL_KEY INTENSIFIED OFF, e não a cor
padrão 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 número da
coluna na qual queremos que o campo comece na frente do campo. Pode-se também especificar a
largura do campo colocando a mesma em seguida, entre parênteses (sem essa opção, o tamanho do
campo utilizado será o tamanho dele no dicionário de dados). Por exemplo, para posicionarmos o
mesmo campo que modificamos anteriormente na décima coluna, estabelecendo um tamanho de
cinco caracteres, usamos o comando
WRITE: /10(5) SPFLI-CARRID COLOR COL_KEY INTENSIFIED OFF HOTSPOT.
© I-PROVIDER Página 38
Int rodução aos Conceit os de Desenvolviment o e
Cust omização de Relat órios
Sem o uso da opção CURRENCY, o valor é apresentado no formato genérico do usuário; com
o CURRENCY, mesmo caso tenhamos moedas diferentes em cada registro, cada uma será exibida
no formato correto.
Símbolos de Texto
O ABAP permite a criação de símbolos de texto, que são elementos do repositório que
permitem a criação de tabelas de texto para uso nos programas ABAP. Os símbolos de texto são
criados dentro de classes de mensagem, que servem para separar logicamente os símbolos de texto
relacionados. Dentro da classe de mensagem, cada texto deve ser identificado por um número de três
posições. Cada símbolo de texto pode ser criado em várias linguagens.
Suponha que exista o seguinte trecho de código:
WRITE: /10 'Assentos ocupados:', SFLIGHT-SEATSOCC.
Toda vez que o interpretador ABAP encontra um campo que começa com TEXT, coloca
naquela posição um símbolo de texto correspondente ao número após o hífen na classe entre
parênteses. Caso seja usada a opção MESSAGE-ID <classe> na declaração REPORT, não é
necessário especificar a classe de mensagem junto ao símbolo de texto. O uso de símbolos de texto
pode simplificar a manutenção de programas complexos ao agrupar todas as mensagens de texto em
um só local.
Para editar os símbolos de texto, use, na janela do editor ABAP, a opção Saltar å Elementos
de Texto å Símbolos de Texto.
© I-PROVIDER Página 39
Int rodução aos Conceit os de Desenvolviment o e
Cust omização de Relat órios
Exercícios de Fixação
Exercício proposto:
Exercício 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 relatório deve ser impresso com as cores das linhas intercaladas entre cinza e branco.
Exercício 2
Utilizando o comando DELETE do Open_SQL, apague da tabela interna todos os registros
onde o campo CITYFROM = ‘SINGAPORE’.
Exercício 3
Monte o cabeçalho como a seguir:
Nota: As descrições devem estar definidas como símbolos de texto.
RELAÇÃO DE VÔOS
ID Num. Partindo de Aer. Pousando em Aer.
© I-PROVIDER Página 40
Int rodução aos Conceit os de Desenvolviment o e
Cust omização de Relat órios
Solução:
Exercício 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.
Exercício 2
© I-PROVIDER Página 41
Int rodução aos Conceit os de Desenvolviment o e
Cust omização de Relat órios
Exercício 3
textos:
001 RELAÇÃO DE VÔOS
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 Página 42
Int rodução aos Conceit os de Desenvolviment o e
Cust omização de Relat órios
O SAP Query
Algumas consultas podem ser elaboradas usando-se a ferramenta SAP Query. Nela, é possível ao
usuário criar consultas visualmente, sem conhecimento da linguagem de programação.
Os dados em uma Query podem ser ordenados, agrupados, totalizados, etc., e os relatórios podem
ser impressos, gravados em planilhas, arquivos ou editores de texto, ou podem ser enviados a um ou
mais destinatários.
Exemplo de utilização de Querys:
• Relatórios simples e de utilização esporádica.
• Auxiliar na conferência das Cargas de Dados.
• Listar dados incorretos no pós-Go Live.
© I-PROVIDER Página 43
Int rodução aos Conceit os de Desenvolviment o e
Cust omização de Relat órios
X Os relatórios podem ser criados por usuários X Limitações para relatórios que exigem a
finais. leitura de muitas tabelas.
Para poder criar uma SAP Query, deve existir pelo menos um grupo de usuários e uma
área funcional criados. O grupo de usuários contém os usuários que podem criar e rodar queries, e
as áreas funcionais são definições de quais dados serão usados na query. Por exemplo, pode-se criar
uma área funcional com um join de várias tabelas e com campos calculados, além dos campos
definidos nas tabelas. A área funcional deve estar sempre associada a um ou mais grupos de usuários
para ser utilizada, e apenas os usuários que fazem parte dos grupos podem criar queries que a
acessem.
As áreas funcionais são criadas na transação SQ02, e os grupos de usuários são definidos na
transação SQ03.
Criando um grupo de usuários – os grupos de usuários são criados na transação SQ02. A
operação é muito simples – basta definir o nome do grupo e uma descrição, e em seguida colocar os
nomes dos usuários que dele fazem parte.
Criando uma área funcional – as áreas funcionais são criadas na transação SQ03. Nela são
definidas as tabelas que compõem a área funcional, e seus relacionamentos. que é um conjunto de
dados a serem usados pela query (composto de tabelas, visões e/ou dados de arquivos TXT, por
exemplo).
A query propriamente dita é criada usando-se a transação 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 usuário pertence) e qual será a estrutura da lista a ser exibida.
© I-PROVIDER Página 44
Int rodução aos Conceit os de Desenvolviment o e
Cust omização de Relat órios
© I-PROVIDER Página 45
Int rodução aos Conceit os de Desenvolviment o e
Cust omização de Relat órios
© I-PROVIDER Página 46
Int rodução aos Conceit os de Desenvolviment o e
Cust omização de Relat órios
MEMORY ID pid: MEMORY ID: Toda vez que o programa é executado, o campo já vem
preenchido com o último valor entrado pelo usuário em um campo com o mesmo Memory ID.
MATCHCODE OBJECT mobj: : Atribui um matchcode para o campo.
NO-DISPLAY: Não exibe o select-option na tela de seleção.
LOWER CASE: O campo se torna sensível a letras maiúsculas e minúsculas.
OBLIGATORY: O preenchimento é obrigatório.
NO-EXTENSION: Não exibe o botão a direita do select-option, permitindo somente um
intervalo de seleção.
NO INTERVALS: Não exibe a segunda caixa do intervalo. Não permitindo assim definição
de intervalos na seleção.
A cláusula 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 Página 47
Int rodução aos Conceit os de Desenvolviment o e
Cust omização de Relat órios
Para melhorar o aspecto da janela de seleção anterior, vamos utilizar a opção BEGIN OF
BLOCK … END OF BLOCK no mesmo trecho de código:
…
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 Página 48
Int rodução aos Conceit os de Desenvolviment o e
Cust omização de Relat órios
Com isso, criamos bordas ao redor de cada grupo logicamente ligado, melhorando o aspecto da tela e
evitando confusão no momento de sua utilização:
Podem ser definidas janelas além da janela 1000 default – para tanto, basta agrupar os select-
options e parameters dentro das declarações SELECTION-SCREEN BEGIN OF SCREEN
<número da tela> e SELECTION SCREEN END OF SCREEN <número da tela>. Essa janela
deverá ser posteriormente chamada com o uso do comando CALL SELECTION SCREEN seguido
do número definido da tela, inclusive podendo-se transformá-la numa tela modal usando a opção AS
WINDOW na declaração SELECTION-SCREEN BEGIN OF SCREEN e a opção 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 código da
seguinte forma:
...
© I-PROVIDER Página 49
Int rodução aos Conceit os de Desenvolviment o e
Cust omização de Relat órios
START-OF-SELECTION.
CALL SELECTION-SCREEN 0150 STARTING AT 20 5 ENDING AT 90 15.
...
Além de surgir a janela padrão de select-options, surgirá uma nova janela modal a seguir:
© I-PROVIDER Página 50
Int rodução aos Conceit os de Desenvolviment o e
Cust omização de Relat órios
Até agora, as listas criadas apresentam um nível de dados apenas, mas o ABAP tem recursos
que permitem a exibição 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 usuário
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 botão que tenha o código standard ‘PICK’ a ele
associado.
HIDE
Através do comando HIDE, é possível armazenar informação a respeito de uma linha para
uso do evento AT LINE-SELECTION. Suponha que exista uma lista com os vôos para uma
determinada companhia aérea, e deseja-se exibir as reservas para aquele vôo. Para exibir a lista, é
necessário armazenar em algum local informações sobre a linha selecionada pelo usuário, e isso pode
ser feito através do comando HIDE do ABAP.
O comando HIDE guarda a informação sobre os campos desejados, além do número 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
informação sobre a chave dentro da área de HIDE. Não é necessário que os campos selecionados
com HIDE façam parte da lista impressa via WRITE. Quando o usuário seleciona um determinado
© I-PROVIDER Página 51
Int rodução aos Conceit os de Desenvolviment o e
Cust omização de Relat órios
START-OF-SELECTION.
...
TOP-OF-PAGE.
SET PF-STATUS ‘LISTA1’.
WRITE: ‘Lista Primária’.
AT LINE-SELECTION.
...
Quando a lista apresentar mais de dois níveis, é necessário identificar o nível 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
nível corrente de lista. A primeira sub-lista tem SY-LSIND igual a 1, a segunda, 2, e assim por diante,
até o subnível máximo 19. Por exemplo:
REPORT ZTESTE2N NO STANDARD PAGE HEADING.
START-OF-SELECTION.
TOP-OF-PAGE.
WRITE: ‘Vôos’.
© I-PROVIDER Página 52
Int rodução aos Conceit os de Desenvolviment o e
Cust omização de Relat órios
WRITE: ‘Reservas’.
WHEN 2.
WRITE: ‘Cliente’.
ENDCASE.
AT LINE-SELECTION.
CASE SY-LSIND.
WHEN 1.
SELECT * FROM SBOOK
WHERE CARRID = SFLIGHT-CARRID AND
CONNID = SFLIGHT-CONNID AND
FLDATE = SFLIGHT-FLDATE.
WRITE: / SBOOK-CARRID, SBOOK-CONNID, SBOOK-FLDATE, SBOOK-CUSTOMID.
HIDE: SBOOK-CUSTOMID.
ENDSELECT.
WHEN 2.
SELECT * FROM SCUSTOM
WHERE ID = SBOOK-CUSTOMID.
WRITE: / SCUSTOM-ID, SCUSTOM-NAME.
ENDSELECT.
ENDCASE.
AT USER-COMMAND
Uma lista secundária pode ser mostrada dentro de uma janela ao colocar-se a declaração
WINDOW STARTING AT <col> <lin> [ENDING AT <col> <lin>]. Os comandos WRITE
subseqüentes serão direcionados para a janela especificada. Por exemplo, alterando o código da
seguinte maneira, podemos criar janelas nas listas secundárias:
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 Página 53
Int rodução aos Conceit os de Desenvolviment o e
Cust omização de Relat órios
Para chamar uma transação a partir de uma listagem, pode-se utilizar o comando CALL
TRANSACTION <codtran> dentro do AT LINE-SELECTION, onde <codtran> é o código da
transação. Após executar a transação, o controle de execução passará para a linha seguinte ao CALL
TRANSACTION.
© I-PROVIDER Página 54
Int rodução aos Conceit os de Desenvolviment o e
Cust omização de Relat órios
Exercícios de Fixação
- O SAP Query
- Definindo telas de seleção de parâmetros
- Criação de Listas Complexas
Exercício proposto:
Exercício 1
1. Criar uma query, que exiba os CARRID, CONNID, CITYFROM, AIRPFROM,
CITYTO e AIRPTO da tabela SPFLI.
Exercício 2
1. Para o programa do exercício anterior, criar uma tela de seleção similar a:
Select-Options
Parameters
Sem extensão
Obrigatório
© I-PROVIDER Página 55
Int rodução aos Conceit os de Desenvolviment o e
Cust omização de Relat órios
Exercício 3
1. Fazer com que toda vez que o cursor do mouse passe sobre um campo da coluna Vôo,
tome a forma de uma “mãozinha”.
2. Exiba uma janela contendo o nome da empresa aérea, o número do vôo, nome do
aeroporto, cidade e horário de saída do vôo e nome do aeroporto, cidade e horário de
chagada do vôo referente a linha clicada na tela.
© I-PROVIDER Página 56
Int rodução aos Conceit os de Desenvolviment o e
Cust omização de Relat órios
Solução:
Exercício 1
4. Criar a Query:
4.1. Acessar a transação 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 Título (que será o título do relatório) e o número de colunas.
4.5. Clicar em Tela seguinte ou teclar F6.
4.6. Selecionar o Grupo ou os Grupos de campos que serão utilizados na Query.
© I-PROVIDER Página 57
Int rodução aos Conceit os de Desenvolviment o e
Cust omização de Relat órios
© I-PROVIDER Página 58
Int rodução aos Conceit os de Desenvolviment o e
Cust omização de Relat órios
4.9. Neste ponto é recomendável salvar a Query e depois clicar em Lista básica.
4.10. Indicar em que linha do relatório cada campo deve ser exibido, em que seqüência,
qual o critério de ordenação e os campos que devem ser totalizados e contados.
4.1. Salvar.
Exercício 2
textos:
007 Relação de Vôos
008 Localidades
© I-PROVIDER Página 59
Int rodução aos Conceit os de Desenvolviment o e
Cust omização de Relat órios
Exercício 3
AT LINE-SELECTION.
WINDOW STARTING AT 5 3 ENDING AT 40 10.
SELECT name
FROM sairport
© I-PROVIDER Página 60
Int rodução aos Conceit os de Desenvolviment o e
Cust omização de Relat órios
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 Página 61