Buscar

CURSO_ABAP_PARA_FUNCIONAL_DEBUGGER

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 3, do total de 90 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 6, do total de 90 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 9, do total de 90 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Prévia do material em texto

CURSO ABAP 
PARA 
FUNCIONAL 
 
2015 
 
 
 
 
1. Conceito breve do SAP 
O SAP é um sistema que trabalha com um número muito grande de tabelas interligadas, 
que armazenam e manipulam os valores de controle dos processos. Essas tabelas são 
responsáveis pelo armazenamento dos valores do sistema e são divididas em grup7os que 
se interligam em um todo. Assim, existem tabelas responsáveis pelas informações de FI, 
outras pelas informações de SD, outras ainda por MM, mas todas elas apresentam campos 
chaves que permitem, pelos mais diferentes e complicados caminhos, a interligação e 
consistência de todo o sistema. Embora a ferramenta ABAP/ 4 dentro do SAP seja muito 
poderosa e praticamente capaz de permitir qualquer customização do sistema, e muito 
importante manter os conceitos originais sempre em mente, e nunca tentar forçar alguma 
coisa que deveria ter um comportamento natural. Por exemplo, nunca tente alterar um 
valor de uma tabela do SAP ( embora perfeitamente possível, com o comando UPDATE), 
sem um minucioso estudo de suas implicações anteriormente. Isso pode comprometer a 
integridade dos dados do sistema, se não forem atualizados todos os valores de todas as 
tabelas relacionada a essa alteração. 
1.1 Instância X Client 
Também é muito importante o conceito do funcionamento do ambiente do sistema 
durante a evolução de um projeto. Inicialmente devemos entender os conceitos de client e 
instância: 
Client - é definido como sendo uma unidade independente do R/3, em termos 
comerciais, organizacionais e técnicos. Isso significa que possuem sua própria 
configuração, dados de aplicação e dados cadastrais (master data). 
Instância – é definida como um ambiente do R/3 que agrupa um ou mais clients, onde 
se executa um determinado trabalho. 
Uma instância de trabalho, geralmente possui mais de um client, onde são trabalhados 
simultaneamente diferentes frentes de trabalho do projeto. A intenção dessa divisão é que 
se possa trabalhar somando valores, sem que haja conflitos de interesse. Por exemplo, 
durante um projeto, o client para desenvolvimento das customizações de ABAP deve ser 
diferente dos outros, pois trabalha muito com testes e alterações constantes, o que 
inviabiliza outros tipos de serviços. Se essa divisão muitas vezes ajuda, algumas vezes 
atrapalha. Geralmente as massas de dados são diferentes nos clients, e o comportamento 
principalmente nos testes dos produtos customizados pode ser diferente. O recomendado 
pela própria SAP é que exista um client só para testes , com massa de dados completa que 
permita “recarga” sempre que necessário, o que permitiria que as condições de teste 
pudessem ser repetidas. No dia a dia de um projeto isso é muito difícil, pois a manutenção 
desses clients pelo time de basis geralmente não é muito bem vista. As instâncias variam 
também ao longo de um projeto. A medida que o sistema vai sendo refinado, geralmente 
se inicia uma nova instância livre dos vícios e restos de testes da anterior. Pelo menos 3 
instâncias sempre existem durante o período de um projeto. A instância de 
desenvolvimento, a de pré-produção e finalmente a de produção. Cada vez que o sistema 
é migrado de uma instância para a outra, somente deve ser aproveitado o que está 
comprovadamente funcionando na instância anterior, de modo a diminuir os erros a cada 
migração. 
 
1.2 Objetos “ Client Dependent” e “ Client Independente” 
Todos os objetos criados em um sistema SAP, podem ser divididos em dois grupos, 
tratados diferentemente ao longo de um projeto. Os objetos chamados “ Client 
Independents” são aqueles que uma vez criados podem ser utilizados por todos os clients 
de uma mesma instância, sem que necessite de nenhuma articulação adicional. O simples 
fato de se encontrar ativo no repositório do sistema habilitado para a instância, o permite 
ser utilizado por todos os clients dessa instância, de maneira simultânea. O maior exemplo 
de objetos independentes do client são os programas de ABAP/4 normais customizados. 
Por exemplo, um report criado em um client de desenvolvimento, pode ser executado de 
um outro client de teste, existente na mesma instância, uma vez que tenha sido gerado e 
ativado. Os objetos dependentes do client, ao contrário, uma vez criado por exemplo, no 
client de desenvolvimento não pode ser executado de nenhum outro, a menos que seja 
transportado ou copiado para o seu destino. Esse é um exemplo típico dos formulários em 
SAPscript. 
Dentro da classe dos objetos dependentes do client, existe um subgrupo que exige uma 
atenção maior ainda. E o caso dos logotipos utilizados dentro de um SAPscript. Esses 
objetos, além de não serem compartilhados pelos clients, também não geram request ao 
serem criados, o que impossibilita serem transportados diretamente, precisando 
associarmos, primeiro, esses elementos a uma Change Request através de um programa. 
Neste caso, os logotipos devem ser gerados em cada um dos clients em que se deseje 
utilizá-lo, através da execução de um programa do SAP. Esse tipo de problema, ao longo 
de um projeto, exige uma atenção especial, para evitar problemas futuros. Por exemplo, o 
desenhista técnico deve tomar cuidado de anexar o arquivo .TIF do logotipo na 
especificação do MDM, para futura repetição do processo de geração do logotipo dentro 
do sistema. Caso esse cuidado não seja tomado, futuramente pode-se obter um logotipo 
de tamanho diferente, gerando re-work e perda de tempo. 
2. Transações 
Transação é um código alfanumérico de 20 caracteres, utilizado para iniciar um processo 
dentro do sistema SAP. Todo e qualquer processo ou parte dele deve ser executado dentro 
do sistema através de uma transação. Na customização de ABAP/4, sempre que um GAP 
do sistema é coberto, isso gera pelo menos uma transação, de modo que o usuário possa 
executar esse produto customizado de dentro do sistema. 
Toda operação realizada através do menu do sistema, também corresponde a uma 
transação. Um método para conhecermos o código de uma transação cujo caminho pelo 
menos é sabido, é entrarmos na mesma, e na tela inicial desta transação, utilizarmos o 
menu Sistema→ Status, que informa o programa tela e transação executados. 
No desenvolvimento de customizações ABAP/4, as principais transações utilizadas, são: 
SE38 – Editor ABAP (programas, includes, relatórios) 
SA38 – Execução de programas 
SE37 – Editor de módulo de funções e RFC 
SE80 – Navegador de objetos (acessa programas, grupos de função, pacotes, objetos 
locais, etc) 
SE93 – Criação de transações 
SE91 – Classe de mensagens 
SE11 – Dicionário de dados 
SE16 – Conteúdo de tabelas transparentes 
SM30 – Atualização de visões de tabelas 
 
SE54 - Geração visão de tabela 
SE14 – Dicionário de tabelas – utilitário BD 
SE01 – Organizador de transportes (requests) – Visão ampliada 
SE09, SE10 - Organizador de transportes 
SE18 - Construtor de BADI – atualização de definição 
SE19 – Construtor de BADI - implementação 
SE36 – Banco de dados lógicos 
SHDB – Mapeamento de batch input 
SM35 – Síntese de pastas de batch input 
SM36 – Definição de jobs 
SM37 – Verificação de jobs 
SE24 – Construtores de classes e métodos OO 
SE21 - Package Builder 
SE43 - Atualização do menu de área 
SE51 - Screen Painter 
SE71 – Formulários SAPscript 
SE72 - Estilos SAPscript 
SMARTFORMS – Formulários Smartforms 
SMARTSTYLES – Estilos e formatação de caracteres para Smartforms 
SE78 – Administrção de gráficos de formulários 
SO10 – Texto standard: requisição 
SP01 – Controle de saída: SPOOL de impressão 
ST22 – Erros de tempo de execução ABAP (dumpt) 
ST05 – Análise de performance e trace 
SE30 – Análise de tempo de execução 
SCII – Code inspector 
SU01 – Perfis de usuário (basis) 
SU21 – Objetos de autorização 
SU53 – Exibir dados de autorização do usuário 
ABAPDOCU – Documentação/Exemplos ABAP 
CMOD – Ampliações 
SMOD – Administração de Ampliações SAP 
 
Outros comandos no campo de tela para transação: 
/n – Voltar para menu inicial (se /nSE38, navega diretamente para a transaçãoSE38) 
/o – Nova tela SAP (se /oSE38, navega em nova tela para a transação SE38) 
/h – Ativa debug 
/nex – Sair imediatamente do SAP (todas as telas) 
 
Atalhos importantes: 
F1 – Ajuda, posicionar sobre campo de tela, botão ou comando SAP e pressionar F1. 
F3 – Voltar 
SHIFT + F3 – Sair 
ESC ou F12 – Cancelar 
F7 – Exibir 
F6 – Editar 
F5 – Criar 
F8 – Executar 
 
 
 
No editor ABAP: 
CTRL + S - Salvar 
SHIFT + F1 – Pretty Printer 
CTRL + F2 – Verificar Sintaxe 
CTRL + F3 – Ativar 
CTRL + < - Comentar linha(s) 
CTRL + > - Descomentar linha(s) 
 
No Debug: 
CTRL + SHIFT + F8 – visualizando conteúdo de tabela interna vai para a última coluna 
CTRL + SHIFT + F7 – visualizando conteúdo de tabela interna vai para a próxima coluna 
CTRL + SHIFT + F6 – visualizando conteúdo de tabela interna vai para a coluna anterior 
CTRL + SHIFT + F5 – visualizando conteúdo de tabela interna vai para a primeira coluna 
F8 – Avançar(até o cursor) 
F7 – Retorno 
F6 – Executar 
F5 – Etapa individual 
SHIFT + F8 – Criar Watchpoint 
3. Objetivos do Data Dictonary 
Apresentar conceitos de Bancos de Dados Relacionais; 
SAP vs Modelo Relacional; 
Conhecer as ferramentas básicas do Dicionário de Dados do R/3; 
Criar objetivos através do Dicionário de Dados; 
4. Conceitos de Bancos de Dados Relacionais 
4.1 Modelo Entidade-Relacionamento 
Modelo desenvolvido para facilitar o projeto de banco de dados, permitindo a 
especificação de um esquema que represente a estrutura lógica global de um banco de 
dados. 
Entidade: É um objeto que existe e é distinguível de outros objetos, ou seja, identifica o 
agrupamento de objetos do mesmo tipo. Ex.: Clientes, Bancos, Agências, Contas-corrente; 
Atributos: São os qualificadores de uma entidade, isto é, representam no modelo o que 
uma entidade pretende ser. Ex.: Nome, RG, CPF, Endereço, Nro Conta, Nro Agência, Nro 
Banco; 
Domínio: Conjunto de valores permissíveis para um atributo. Ex.: Estado Civil, Seco, Cor, 
Meses do Ano. 
Relacionamento: É a associação entre duas entidades, ou seja, representa a maneira como 
duas entidades são relacionadas ou ligadas. Ex.: Conta-corrente de um Cliente, Agência de 
um Banco, Contas-corrente de uma Agência. 
4.2 Restrições de Mapeamento 
Representam o modo como as diferentes entidades de um modelo se relacionam. 
Determinadas pela cardinalidade dos relacionamentos entre as entidades. 
 
Um-para-Um: Uma ocorrência da Entidade A está relacionada com uma e apenas uma 
ocorrência da Entidade B; 
Um-para-N: Uma ocorrência da Entidade A está relacionada com uma ou várias 
ocorrências da Entidade B; 
N-para-Um: Várias ocorrências da Entidade A estão relacionadas com apenas uma 
ocorrência da Entidade B. 
N-para-N: Várias ocorrências da Entidade A está relacionada com várias ocorrências da 
Entidade B. 
4.3 Modelo Relacional 
Um banco de dados relacional é a implementação física do Modelo Entidade- 
Relacionamento e traduz concretamente o que o modelo conceitual procura representar. 
Consiste em uma coleção de tabelas cada uma das quais associadas a um nome único e 
que possuem relacionamentos entre si. Tabelas representam fisicamente as Entidades. 
Cada tabela possui uma estrutura similar àquilo que pretende a representar, isto é, tabelas 
são formadas de linhas que por sua vez são formadas por colunas. Colunas representam 
fisicamente os Atributos. A cada linha da tabela chamamos de Ocorrência e o conjunto de 
ocorrências pode ou não estar relacionado com ocorrências de outras tabelas. 
4.4 Como distinguir as ocorrências umas das outras? 
Utilizando o conceito de Chave Primária. 
Chave Primária: Conjunto de atributos que garante a unicidade de cada ocorrência da 
tabela. Exemplos: RG, CPF, Nro Chassis; 
Normalização: processo de reconhecimento da chave primária; 
4.5 Como representar os relacionamentos entre tabelas? 
Transferindo a chave primária de uma tabela para outra. Chave Estrangeira: Quando a 
chave primária de uma tabela é um atributo em outra(s) tabela(s). 
4.6 Como definir todos esses elementos num BD? 
Utilizando linguagens especiais para cada Sistema Gerenciador de BD. 
SQL: Structured Query Language – Linguagem desenvolvida nos anos 70 para definição e 
manipulação de dados em sistemas de bancos de dados relacionais. Conjunto reduzido de 
comandos, sem recursos de lógica, única e exclusivamente para criar objetos no banco de 
dados e permitir que os dados possam ser mantidos, de acordo com as necessidades 
funcionais. Nos gerenciadores de BD, ferramentas específicas de cada fabricante oferecem 
recursos adicionais para a construção de lógica. Outras linguagens foram adaptadas para 
trabalharem em conjunto com o SQL, como o COBOL, C e ABAP/4. O SQL utilizado no R/3 é 
proprietário e segue um mínimo da regulamentação internacional para esta, estando 
longe de possuir os mesmos mecanismos de funcionamento. Seus comandos podem ser 
divididos em: 
 
DDL: Data Definition language – Comandos específicos para definição de objetos do banco 
de dados. Ex.: Create Table, Create View, Create TableSpace, Drop Table, etc. 
DML: Data Manipulation Language – Comandos específicos para tratamento dos dados 
armazenados nos objetos do banco. Ex.: Select, Insert, Delete, Update, etc. 
5. Data Dictionary 
5.1 Introdução 
O dicionário de dados do ABAP/4 (DD) é uma fonte central de informações provenientes 
do sistema gerenciador de dados do SAP. Sua principal função é suportar a criação e o 
gerenciamento das definições de dados, também conhecidas como “metadados”. Neste 
curso, o DD será utilizado em exercícios práticos com o seguinte objetivo: 
 
Visualizar objetos do SAP (tabelas, estruturas, elementos de dados, domínios); 
Observar a estrutura e atributos dos dados armazenados na base de dados; 
Elaborar consultas (queries simples) de dados; 
Descobrir os relacionamentos entre diferentes objetos; 
Criar objetos; 
O Data Dictionary é parte integrante do ABAP/4 Workbench e está numa camada 
intermediária entre o sistema aplicativo e o gerenciador de banco de dados. 
5.2 Funções desempenhadas pelo Data Dictionary 
Gerenciamento das Definições de Dados 
 
Criação e manutenção das definições de dados num repositório central; 
Provisão de informações para avaliações 
Permite obter informações sobre o modo como os objetos estão relacionados; 
Suporte ao desenvolvimento 
Diferentemente de outros dicionários de dados, está integrado ao ambiente de 
desenvolvimento de modo que alterações ou criação de novos objetos promovem 
automaticamente a geração dos outros objetos dependentes, sejam eles parte do 
dicionário ou programas aplicativos; 
Suporte à documentação 
Permite obter documentação atualizada 
Garantia de que as definições de dados sejam flexíveis e atualizadas 
Geração de objetos de runtime garantindo performance 
5.3 Elementos de Dados 
5.3.1 Requisitos do SAP R/3 
Os nomes dos Elementos de Dados devem iniciar com Z ou Y, podem ter um máximo de 10 
caracteres de comprimento e devem ser únicos na instância da base de dados. 
5.3.2 Padrão (standard) 
Os Elementos de Dados precisam ser ativados pelo Administrador do Dicionário de Dados 
para melhor controle. Quando possível, use o mesmo nome como domínio associado a 
esse Elemento de Dados. Se houver um conflito, o nome do Elemento de Dados é o 
principal motivo. A SAP não cria Elemento de Dados que começam com um Z, como 
hábito, Elementos de Dados poderiam começar com ZZ. 
Os nomes de Elementos de Dados podem ter um máximo de 8 caracteres. A SAP gerou 
programas ou funções que podem utilizar essas definições de objetos para SELECT- 
OPTIONS e PARAMETERS, o qual podem ter no máximo 8 caracteres de comprimento. 
Exemplo: ZZSEXO 
ZZ Sempre ZZ 
SEXO Um nome significativo que descreva o elemento de dados. 
 
5.4 Domínios 
5.4.1 Requisitos do SAP R/3 
Os nomes dos Domínios devem iniciar com Z ou Y, podem ter um máximo de 10 caracteres 
de comprimento e devem ser únicos na instância da base de dados. 
5.4.2 Padrão (standard) 
Os Domínios precisam ser ativadospelo Administrador do Dicionário de Dados para 
melhor controle. Quando possível, use um Domínio existente. Se não for possível, nomeie 
o Domínio com um nome significativo. A SAP não cria Domínios que começam com um Z, 
como hábito, Domínios poderiam começar com ZZ. 
Os nomes de Domínios podem ter um máximo de 8 caracteres. A SAP gerou programas ou 
funções que podem utilizar essas definições de objetos para SELECT-OPTIONS e 
PARAMETERS e o tamanho permitido para as variáveis é de 8 caracteres de comprimento. 
Exemplo: ZZSEXO 
ZZ Sempre ZZ 
SEXO Um nome significativo que descreva o elemento de dados. 
 
6. Tabelas Transparentes e Cluster 
6.1 Requisitos do SAP R/3 
Precisam iniciar com Z, Y ou T9 e podem ter um máximo de 10 caracteres de 
comprimento. 
Exemplo: ZF100 
Tabela customizada que pode ser visualizada on-line. 
6.2 Campos de Tabelas 
6.2.1 Requisitos do SAP R/3 
Campos de usuários podem ter até 10 caracteres de comprimento e devem ser únicos na 
definição da tabela. 
6.2.2 Formato Padrão (standard) 
Quando possível, use o mesmo nome do elemento de dados associado com este campo. 
Se diversos campos na tabela usam o mesmo elemento de dados, nomeie estes campos de 
maneira significativa. 
Quando possível, use um elemento de dados existente do SAP. 
Não use espaços e caracteres especiais no nome do campo da tabela. 
Exemplo: X(10) LOANNUM 
Este poderia marcar um campo de número de empréstimo. 
6.3 Tabela de Índice 
 
6.3.1 Formato Padrão (standard) 
Começa com um Z e tem um máximo de 3 caracteres de comprimento. 
Exemplo: Z01 
6.4 Estrutura 
6.4.1.Requisitos do SAP R/3 
Um nome de estrutura pode ter até 10 caracteres e deve iniciar com Z ou Y. 
6.5 Views 
6.5.1 Requisitos do SAP R/3 
Uma view deve começar com Z ou Y e pode ter no máximo 10 caracteres. 
Views customizadas poderia começar com Z seguido pelo tipo da view e um separador. O 
restante do campo poderia ser usado para identificar o tabela primária da view. 
 
6.6 Como criar uma tabela e diálogo de atualização 
Essa sessão mostra como criar uma tabela com campos que utilizam elementos de dados 
customizados e dominios. Também é apresentado como gerar a atualização da tabela, ou 
seja, para que possa ser feita sua manutenção via SM30. Por fim, é mostrado como criar 
uma transação para realizar a atulização desta tabela. 
Deve-se acessar a transação SE11, de dicionário de dados. 
É necessário colocar um nome para a tabela que inicie com Z ou Y, reservadaS pela SAP 
para a customização de seu sistema. Pressionar o botão Criar. 
 
Preencher os campos obrigatórios “Descrição breve” com uma descrição livre e o campo 
classe de entrega, onde se encontram algumas opções, as mais comuns são A e C. 
A: Tabela de aplicação (dados mestre e de movimento) 
C: Tabela de cliente, os dados são atualizados exclusivamente pelo cliente. 
No nosso exemplo utilizamos a classe A por se tratar de uma tabela mestre de dados de 
passageiros. 
Também deve ser escolhida a opção para “Data Browser/atualiz.visão tabs.”, onde define 
como a atualização é permitida por meio ferramentas standard. Escolhemos a opção 
“permitida” para que tanto via SE16 quanto via SM30 possa ser atualizada a tabela. 
Na aba “Campos” começamos a definir a estrutura dessa tabela. Deve-se lembrar que os 
nomes dos campos são livres, não necessitando iniciar com Z ou Y e não podendo apenas 
se repetir dentro da própria tabela. 
O primeiro campo que deve sempre ser colocado é o mandante(client), que deve ser 
chave e possuir um elemento de dados condizente com sua funcionalidade, por exemplo o 
MANDT. 
 
A seguir, criamos o campo RG. Este usará um elemento de dados Z, que será criado 
clicando duas vezes sobre seu nome. 
Como a tabela foi modificada é necessário salva-la e escolher o pacote ou classe de 
desenvolvimento (ou objeto local). 
Nesta parte colocamos a descrição do novo elemento de dados e escolhemos o tipo 
incorporado, onde abrimos mão de um domínio, pois a entrada de um numero ou código 
de RG é totalmente livre, portanto colocamos o tipo CHAR e comprimento 12. 
 
Na aba de “Denomin. Campo” colocar as denominações para cada tamanho solicitado. 
Pressionar o botão ativar na tela. 
 
O objeto a ser ativado já está escolhido, portanto é necessário apenas confirmar. 
Voltando para a tabela está sendo apresentado o novo campo com seu elemento de 
dados e características. 
 
Um terceiro campo é criado, é o campo Nome e este utilizará um elemento de dados que 
também deve ser criado. 
Dessa vez, é utilizado o Domínio, mas não com o efeito de limitar valores de entrada, mas 
sim para que o tamanho e categoria sejam definidos automaticamente. A SAP disponibiliza 
os tipo básicos em todos os tamanhos. No caso, utilizamos o CHAR40. 
 
Agora, será utilizado um domínio, também Z, que deve ser criado através de duplo clique. 
Confirme a criação do domínio. 
 
Preencha a descrição breve, tipo de dados e nº de posições. Nesse caso utilizamos apenas 
um caractere pois queremos identificar o sexo do passageiro apenas por M ou F. 
Para criar esse domínio que só permite M e F no preenchimento entrar na aba “Interv. 
Vals.” E preencha o valor fixo e sua descrição breve. Ativar o domínio e voltar . 
 
Na tela do elemento de dados, ativá-lo e voltar para a tabela. 
Criaremos um último campo, que também terá um elemento de dados Z a ser criado 
Com o duplo clique sobre o nome do novo elemento de dados, deve-se criá-lo após a 
confirmação. 
 
Porém, dessa vez utilizaremos um domínio já existente para o campo de código de 
companhia aérea. Este domínio possui além das características de tipo e tamanho, a tabela 
relacionada que define que entradas já existem para este campo. 
Criar as denominações do elemento de dados. 
Ativar e voltar para a tabela. 
Todos os campos da tabela já estão inseridos e com seus elementos de dados definidos. 
 
Para utilizar a ajuda de busca que é permitida para o campo CIA, devemos ligar este campo 
ao da tabela standard contida no domínio. Para isso, basta que selecione o campo e 
pressione o botão de chave externa 
Uma proposta é gerada automaticamente se pressionar o botão Sim. 
 
Geralmente a proposta é aceita. Nesse caso ela é simples e se torna claro sua 
funcionalidade. O sistema vai ligar as tabelas através do MANDT (campo sempre 
obrigatório das tabelas) e pelo campo do código da companhia aérea SCARR-CARRID e 
ZITT-CIA. Pressionar o botão “Transferir”. 
Com esse passo realizado, o próximo passo para a construção da tabela é definir suas 
configurações técnicas pressionando o botão 
 
Escolher a categoria de dados que pode ser: 
APPL0 dados mestre 
APPL1 dados de movimento 
APPL2 dados organizacionais e de customizing 
E a categoria de tamanho que é a determinação da necessidade de espaço prevista de uma 
tabela no banco de dados. 
Gravar as configurações e voltar . 
Voltando a tela inicial, entrar em suplementos->categoria de ampliação. 
 
Escolher a opção “não ampliável” e pressionar o botão aceitar. 
Ativar a tabela. 
Agora deve ser gerado o atualizador de tabela, que permitirá que a tabela seja atualizada 
via SM30. Ir a Utilitários->Gerador de atualização de tabela. 
Preencher o grupo de autorização, grupo de funções (que será criado automaticamente) e 
o tipo de atualização. Após preencher, pressionar o botão Procurar nº(s) tela. 
 
Escolher Propor nº(s) tela. 
 
Com o(s) numero(s) da(s) tela(s) definidos automaticamente, deve-se criar através do 
botão . 
Uma série de confirmações de pacotes para gravação será mostrada, podendo então 
escolher entre objeto local e gravação em pacote, que exige uma request a seguir. 
Pressionar voltar para retornar para a tela inicial da tabela. 
A tabela está criada e ativa, inclusive com as configurações de atualização. Sair totalmente 
da transação até a tela inicial do SAP. 
Agora, para inserir dados na tabela criada temos duas opções. A primeira é entrar na 
transação SM30. 
 
Colocar o nome da tabela e pressionar o botão Procurar diálogo de atualização.Colocar o nome da tabela que o sistema passará as opções disponíveis de visão ou 
preencherá na tela a única existente. 
Para acessar a tabela em modo de atualização, pressionar o botão Atual. 
 
Então é só criar ou modificar os dados como desejar. 
A outra forma de atualizar uma tabela é criando uma transação para isso. Logo, devemos 
acessar a transação SE93. 
Colocar o nome desejado para a transação que servirá para atualizar/criar/exibir os dados 
da tela. Pressionar o botão criar. 
 
Para essa funcionalidade que desejamos da transação é necessário escolher o tipo 
Transação com parâmetros e preencher o texto breve. 
Colocar transação SM30 e marcar a opção ignorar 1ª tela. 
 
Marcar Herdar características GUI e colocar os parâmetros abaixo. Para o VIEWNAME o 
valor tem que ser o nome da visão que deseja acessar e o campo UPDATE recebe X. 
Poderia ser usado o SHOW recebendo X o que significaria que ao entra na visão, 
inicialmente estaria em modo de exibição. 
Salvar a transação e sair até a tela inicial do SAP. 
Então, para acessar a atualização da tabela, digitar a transação recém criada no menu. 
 
Atualizar/criar/eliminar/exibir os dados operando normalmente essa transação já 
conhecida. 
7.Transportes 
7.1 Introdução 
Ordens (Change Requests): Recurso através do qual um conjunto de objetos C.D. ou C.I. 
que podem ser transferidos de um client para outro ou de uma instância para outra. 
Utilizam-se ordens para segurança na alteração de objetos já existentes, sejam eles 
standards do SAP ou customizados, e para efetuar controle de versões destes objetos. 
A nomenclatura das ordens é controlada pelo próprio SAP, que promove a criação do 
código do transporte, no momento em que a manutenção de objetos específicos exige que 
o mesmo seja associado a uma ordem. 
7.2 Tipos de Objetos: Locais ou Transportáveis 
Ordens e Tarefas (Tasks): Cada ordem pode possuir uma ou mais Tasks. Cada Task possui 
os objetos agrupados de acordo com seu tipo e ordem a qual deverão ser criados no 
Cliente de destino. 
 
7.2.1 Controlando e Administrando Transportes 
Uma ordem criada por um determinado usuário garante que os objetos a ele associados 
ficam “reservados” para tal usuário e somente serão liberados no momento que a ordem 
for encerrada. Quando uma ordem ainda permanece associado a um usuário, dizemos que 
ele está com o status de Modifiable. Quando uma ordem é encerrada, deixa de estar 
associado a um usuário e passa a ter o status de Released (liberada), ou seja, os objetos a 
ela associados são liberados para alteração por outros usuários. Enquanto uma ordem 
possui o status Modificable, pode-se manipular seus objetos livremente, mudar o usuário 
responsável transferindo a responsabilidade, ou simplesmente eliminar a ordem, 
liberando assim seus objetos, ao passo que uma ordem liberada é algo imutável. 
 
Transação SE01 - Permite verificar o conteúdo das ordens (objetos) e sua Log de 
transporte (sucessos, erros ou warnings) para os outros clientes e instâncias. 
 
Transação SE09 - Permite verificar as ordens de objetos Client Independent 
(Workbench Organizer) criados por um determinado usuário, bem como efetuar o Release 
de tasks e da ordem em si. 
 
Transação SE10 -> Permite verificar os transportes de objetos Client Dependent e 
Client Independent (Customazing Organizer) criados por um determinado usuário, bem 
como efetuar o Release de tasks e do transporte em si. 
Tais transações fornecem informações para que criemos a planilha de controle das ordens 
criadas e transportadas dentro de um projeto, permitindo assim, conhecermos o histórico 
da criação e transporte dos objetos entre as várias instâncias. 
7.2.2 Workbench Organizer 
Esta transação permite controlar as ordens (requests) geradas através das alterações feitas 
nos objetos ABAP. 
As alterações são sempre registradas em ordens do tipo local e transportável. 
 
Ordem transportável: Alterações transportáveios para objetos do ABAP/4 
Development Workbench são gravados em ordens transportáveis. Isto permite que as 
ordens possam ser enviadas aos demais ambientes do SAP, cada ordem gerada para um 
objeto ABAP/4 consiste em uma nova versão para este objeto, permitindo assim 
comparar, verificar e consolidar as alterações entre os ambientes de desenvolvimento e 
produção. 
 
Ordem Local: Alterações não transportáveis para objetos do ABAP/4 Development 
Workbench são gravados em ordens locais. Isto garante que as ordens estão sujeitas ao 
mesmo tipo de controle aplicado aos objetos transportáveis. Da mesma forma, quando 
uma ordem local é liberada são criadas versões para o objeto. 
 
Nesta opção podemos acompanhar o transporte de todas as requests que foram liberadas 
Clicando no botão de transportes podemos acompanhar todas as requests do tipo 
Desenvolvimento/Correção. 
 
8. Report 
8.1 Introdução 
Antes de iniciarmos o estudo dos Reports, devemos entender primeiro o conceito de 
Report dentro do SAP. Apesar do nome indicar que são relatórios, Report tem uma 
abrangência maior do que isso. Devemos entendê-los como programas, que são capazes 
de fazer muito mais coisas do que exibir relatórios. O ambiente de trabalho para criar os 
objetos ABAP, chama-se ABAP Workbench (pelo menu do SAP Ferramentas -> ABAP 
Workbench ou transação S001), nele podemos verificar todos os objetos relacionados a 
um programa (Repository Browser), acessar os objetos do dicionário de dados do SAP 
(Dictionary), criar/editar fontes do ABAP (Editor ABAP), criar funções (Function Builder), 
desenhar telas para os programas ABAP (Screen Painter) e por fim criar menus para inserir 
nas telas dos programas (Menu Painter). 
Códigos das transações associadas às opções do ABAP Workbench: 
Opção Transação 
Repository Browser SE80 
Dictionary SE11 
Editor ABAP SE38 
Function Builder SE37 
Screen Painter SE51 
Menu Painter SE41 
8.2 Editor ABAP (SE38) 
 
No editor ABAP, além de digitar o código fonte do programa, é possível também efetuar 
outras tarefas e adicionar outros inerentes à sua execução. Na janela de “Objetos parciais” 
há 5 opções básicas de objetos associados a um programa ABAP: 
 
Texto fonte: Através desta opção acionamos o editor de programas ABAP; 
Variantes: Definem-se os valores pré-definidos para os parâmetros de execução ; de 
um programa ABAP. Os parâmetros de um programa são definidos pelos comandos 
Parameters e Select-options do ABAP; 
Atributos: Definem-se os atributos de programa, como classe de desenvolvimento, 
título, categoria, status, aplicação, etc; 
Documentação: Textos com uma descrição breve do que o programa executa e as 
suas condições necessárias para execução; 
Elementos de texto: Definem-se os textos que serão relacionados às mensagens, 
rótulos de parâmetros do programa e títulos e nome de colunas para o relatório gerado 
pelo programa; 
Barra de botões da transação: 
Verificar sintaxe do programa ABAP 
Ativar o programa ABAP 
Executar o programa ABAP 
Lista de utilizações deste programa ABAP 
Análise do ambiente, ou seja, objetos utilizados no programa ABAP 
Ajuda online 
Eliminar o programa ABAP 
Copiar o programa ABAP 
 
Renomear o programa ABAP 
Início da execução em modo de depuração 
Executar com variante de dados de tela de seleção 
Administração das variantes de dados de tela de seleção 
Barra de botões do editor ABAP: 
Modificar/Exibir o código fonte 
Visualização das últimas versões ativa/inativa 
Entrar em outro objeto de desenvolvimento 
Apresentar os pontos de melhoria (Enhancement point) 
Verificar sintaxe do programa 
Ativar o programa 
Testar (executar) o programa 
Lista de utilizações 
Lista de objetos (visualização de SE80) 
Exibir janela de navegação 
Fechar a lista de objetos 
Ajuda online 
Definir/eliminar ponto de parada por sessão 
Definir/eliminar ponto de parada externo 
Modelo de código 
Identação, conversão de maiúsculas e etc. 
 
8.3 Programa abap 
Existe um padrão de nomenclatura que deve ser seguido, não só para nome de programas, 
mas para todos osdesenvolvimentos no SAP R/3. Esses padrões podem variar de projeto a 
projeto e principalmente com a versão do SAP com o qual se está trabalhando. Em todos 
os casos os nomes dos desenvolvimentos começam sempre com Z ou Y . 
A aparência do editor não difere muito de um editor de texto bem simples, onde se é 
possível escrever linhas de comando e lógica. 
Um dos recursos permitidos para que se utilize um outro editor como o NotePad do 
Windows, e o recurso de Download e Upload. Através do menu Utilitários Upload/ 
Download, o sistema permite que códigos escritos em outros editores possam ser 
 
carregados no editor ABAP/4 e vice-versa. 
Esse recurso nos permite salvar os códigos ainda inativos ou incompletos. E extremamente 
útil mantermos um controle próprio das versões quando se está codificando. 
8.4 Exemplos – Curso Básico 
EXEMPLO 1 
REPORT ZEXP0001. 
WRITE: ‘111111’. 
WRITE: ‘222222’, 
‘333333’. 
WRITE: / ‘111111’. 
WRITE: 15 ‘333333’. 
WRITE: / TEXT-001. 
ULINE. 
ULINE 8(6). 
SKIP. 
SKIP 2. 
WRITE: 8 SY-LANGU. 
WRITE: / SY-DATUM UNDER SY-LANGU. 
Existem alguns tipos de variáveis chamadas de variáveis do sistema. Elas possuem 
informações e dados do processamento, como o idioma de acesso (SY-LANGU) entre 
outros. Essas informações estão contidas na estrutura SYST (Campos de sistema ABAP, que 
 
pode ser abreviada para SY) e podem ser acessadas conforme o exemplo acima, o nome 
da estrutura mais o campo que se deseja. 
Algumas das variáveis de sistema mais utilizadas são: 
SY-LANGU – Idioma do SAP no momento de execução 
SY-DATUM – Data no momento de execução 
SY-UZEIT – Hora no momento de execução 
SY-PAGNO – Página atual 
SY-TABIX – Índice da tabela(após loop, read table, etc..) 
SY-SUBRC – Retorno de comandos ABAP 
SY-DBCNT – Linhas de tabelas de BD encontradas na seleção 
SY-BATCH – ‘X’ se estiver executando em background 
SY-MANDT – Mandante no sistema 
SY-TCODE – Transação no momento de execução 
SY-VLINE – Linha horizontal ‘|’ 
SY-UNAME – Usuário executando o programa 
EXEMPLO 2 
REPORT ZEXC0002 NO STANDARD PAGE HEADING. 
WRITE ‘PAG 1’. 
NEW-PAGE. 
WRITE ‘PAG 2’. 
TOP-OF-PAGE. 
WRITE: ‘EXEMPLO 2 – CURSO ABAP/4’, 
80 ‘PAGE’, 
SY-PAGNO. 
ULINE. 
 
 
 
EXEMPLO 3 
REPORT ZEXP003. 
WRITE: ‘NORMAL’. 
FORMAT INTENSIFIED OFF. 
WRITE: ‘NEGRITO’. 
FORMAT COLOR 1. 
WRITE: ‘FUNDO AZUL’. 
FORMAT COLOR OFF. 
FORMAT INTENSIFIED ON. 
WRITE: ‘NORMAL’. 
EXEMPLO 4 
REPORT ZEXP0004. 
DATA: NOME(20) TYPE C, 
RG(10) TYPE I, 
DATA TYPE SY-DATUM, 
HORA(8) VALUE '14:05:45'. 
NOME = 'Solution Center'. 
RG = 42159818. 
DATA = '20100217'. 
SKIP 2. 
WRITE: 'Nome:', 
NOME, 
/ 'RG:', 
RG UNDER NOME, 
/ 'Data:', 
DATA, 
/ 'Hora:', 
HORA. 
 
EXEMPLO 5 
REPORT ZEXP0005. 
PARAMETER: 
P_NOME1(15) TYPE 
C, 
P_NOME2(15) TYPE 
C DEFAULT 'Abap Factory', 
P_BOTAO1 
RADIOBUTTON GROUP G1, 
P_BOTAO2 
RADIOBUTTON GROUP G1. 
WRITE P_NOME1. 
IF P_NOME2 NE 'ABAP FACTORY'. 
WRITE P_NOME2. 
ENDIF. 
IF P_BOTAO1 = 'X'. 
WRITE / 'BOTÃO 1 ACIONADO'. 
ELSE. 
WRITE / 'BOTÃO 2 ACIONADO'. 
ENDIF. 
Para dar nomes aos campos da tela de seleção entre em Ir para -> Elementos de texto -> 
Textos de seleção 
 
Ativar os elementos criados. 
 
EXEMPLO 6 
REPORT ZEXP0006 MESSAGE-ID SV. 
TABLES SCARR. 
SELECT-OPTIONS: S_CARRID FOR SCARR-CARRID. 
DATA T_SCARR TYPE TABLE OF SCARR WITH HEADER LINE. 
SELECT * 
FROM SCARR 
INTO TABLE T_SCARR 
WHERE CARRID IN S_CARRID. 
IF SY-SUBRC EQ 0. 
LOOP AT T_SCARR. 
WRITE: / T_SCARR-CARRID, 
T_SCARR-CARRNAME. 
ULINE. 
ENDLOOP. 
ELSE. 
MESSAGE I000 WITH 'NAO EXISTEM REGISTROS!!!'. 
ENDIF. 
 
EXEMPLO 7 
REPORT ZEXP0007. 
TABLES T005H. 
SELECT-OPTIONS: S_LAND1 FOR T005H-LAND1 NO INTERVALS. 
DATA: BEGIN OF T_T005H OCCURS 0, 
LAND1 TYPE T005H-LAND1, 
BEZEI TYPE T005H-BEZEI. 
DATA: END OF T_T005H. 
SELECT LAND1 BEZEI 
FROM T005H 
INTO TABLE T_T005H 
WHERE LAND1 IN S_LAND1. 
 
IF SY-SUBRC EQ 0. 
SORT T_T005H BY LAND1 ASCENDING. 
ELSE. 
MESSAGE I000(SV) WITH 'NAO EXISTEM REGISTROS!!!'. 
ENDIF. 
LOOP AT T_T005H. 
IF T_T005H-LAND1 = 'DE'. 
FORMAT COLOR COL_TOTAL. 
ELSE. 
FORMAT COLOR COL_NORMAL. 
ENDIF. 
WRITE: / T_T005H-LAND1, 
21 T_T005H-BEZEI. 
ENDLOOP. 
TOP-OF-PAGE. 
FORMAT COLOR COL_HEADING. 
WRITE: ‘PAÍS’, 
21 ‘CIDADE’. 
ULINE. 
FORMAT COLOR OFF. 
 
EXEMPLO 8 
REPORT ZEXP0008 MESSAGE-ID SV. 
TABLES SPFLI. 
SELECTION-SCREEN BEGIN OF BLOCK B1 WITH FRAME TITLE TEXT-T01. 
SELECT-OPTIONS: S_CARRID FOR SPFLI-CARRID DEFAULT 'AA', 
S_CONNID FOR SPFLI-CONNID DEFAULT '0017'. 
SELECTION-SCREEN END OF BLOCK B1. 
DATA: ARQ TYPE STRING VALUE 'C:\TEMP\CURSO.TXT'. 
DATA: BEGIN OF T_ZCURSO OCCURS 0, 
CARRID TYPE SPFLI-CARRID, 
CONNID TYPE SPFLI-CONNID, 
COUNTRYFR TYPE SPFLI-COUNTRYFR, 
CITYFROM TYPE SPFLI-CITYFROM, 
AIRPFROM TYPE SPFLI-AIRPFROM, 
END OF T_ZCURSO. 
SELECT CARRID CONNID COUNTRYFR CITYFROM AIRPFROM 
FROM SPFLI 
INTO TABLE T_ZCURSO 
WHERE CARRID IN S_CARRID 
AND CONNID IN S_CONNID. 
IF SY-SUBRC = 0. 
CALL FUNCTION 'GUI_DOWNLOAD' 
EXPORTING 
FILENAME = ARQ 
TABLES 
DATA_TAB = T_ZCURSO 
EXCEPTIONS 
FILE_OPEN_ERROR = 1 
 
FILE_WRITE_ERROR = 2 
INVALID_FILESIZE = 3 
INVALID_TYPE = 4 
NO_BATCH = 5 
UNKNOWN_ERROR = 6 
INVALID_TABLE_WIDTH = 7 
GUI_REFUSE_FILETRANSFER = 8 
CUSTOMER_ERROR = 9 
NO_AUTHORITY = 10 
OTHERS = 11. 
IF SY-SUBRC EQ 0. 
MESSAGE I000 WITH 'DOWNLOAD EFETUADO COM SUCESSO'. 
ELSE. 
MESSAGE I000 
WITH 'ERRO NA EXECUÇÃO DO DOWNLOAD'. 
ENDIF. 
ELSE. 
MESSAGE I000 
WITH 'NÃO FORAM SELECIONADOS REGISTROS'. 
ENDIF. 
9 Processo Geral de Programação 
 
9.1 Template Detalhado ABAP 
 
 
9.2 Declaração de Dados 
Include ZZIHEADR 
Tabelas 
TABLES: <tab>. 
Ex: TABLES: SCARR, SPFLI. 
9.2.1 Constantes e Variáveis 
DATA: <variavel> TYPE <tab>-<campo>. 
Ex: DATA: V_CIA TYPE SCARR-CARRID. 
DATA: <variavel> TYPE <tipo instalado>. (C, N, P, D, STRING) 
Ex: DATA: V_CIA(3) TYPE C. 
CONSTANTS: 
<constante1> TYPE <tab>-<campo> VALUE ‘<valor>’. 
Ex: DATA: C_MOEDA TYPE SCARR-CURRCODE VALUE ‘BRL’. 
<constante2> TYPE <tipo instalado> VALUE ‘<valor>’. 
Ex: DATA: C_MOEDA(3) TYPE C VALUE ‘BRL’. 
9.2.3 Tabelas Internas 
COM TIPO DE TABELA TRANSPARENTE(STANDARD OU Z): 
DATA <tabela interna> TYPE TABLE OF <tabela transparente>. 
Ex: DATA: T_SCARR TYPE TABLE OF SCARR. 
 
COM HEADER: 
DATA <tabela interna> TYPE TABLE OF <tabela transparente> WITH HEADER LINE. 
Ex: DATA: T_SCARR TYPE TABLE OF SCARR WITH HEADER LINE. 
 
COM TIPO CUSTOMIZADO: 
DATA: BEGIN OF <tabela interna> OCCURS 0, 
<campo1> TYPE <tab>-<campo>, 
<campo2> TYPE <tipo instalado>, 
END OF <tabela interna>. 
Ex: DATA: BEGIN OF T_CIA OCCURS 0, 
CIA TYPE SCARR-CARRID, 
URL(50) TYPE C, 
END OF T_CIA. 
9.2.4 Estruturas 
COM TIPO DE ESTRUTURA/TABELA TRANSPARENTE(STANDARD OU Z): 
DATA <estrutura> TYPE <estrutura transparente>. 
Ex: DATA E_VOOS TYPE SPFLI. 
COM TIPO CUSTOMIZADO: 
DATA: BEGIN OF <estrutura>, 
<campo1> TYPE <tab>-<campo>, 
<campo2> TYPE <tipo instalado>, 
END OF <estrutura>. 
Ex: DATA: BEGIN OF E_VOOS, 
CARRID TYPE SPFLI-CARRID, 
CONNID(4) TYPE N, 
END OF E_VOOS. 
9.2.5 Tipos 
TYPES: BEGIN OF <tipo>, 
<campo1> TYPE <tab>-<campo>, 
<campo2> TYPE <tipo instalado>, 
END OF <tipo>. 
Ex: TYPES: BEGIN OF TY_URL, 
EMPRESA TYPE SCARR-CARRID, 
URL(50) TYPE C, 
END OF TY_URL. 
 
Ranges 
RANGES: <range> FOR <tab>-<campo>. 
(Declarar no início do programa TABLES: <tab>.) 
Ex: RANGES: R_CARRID FOR SCARR-CARRID. 
9.2.6 Parâmetros de Entrada 
 
Select-Option 
SELECT-OPTIONS: <range_sel> FOR <tab>-<campo>. 
(Declarar no início do programa TABLES: <tab>.) 
 
 
 
 
Parameters 
PARAMETERS: <parametro> TYPE <tab>-<campo>. 
PARAMETERS: <checkbox> AS CHECKBOX. 
PARAMETERS: <radiobutton> RADIOBUTTON GROUP <grupo>. 
(Deve-se declarar ao menos dois radiobuttons do mesmo grupo) 
 
Quadro 
SELECTION-SCREEN BEGIN OF BLOCK <bloco> WITH FRAME TITLE <texto>. 
SELECTION-SCREEN END OF BLOCK <bloco>. 
9.3 Lógica da Tela de Seleção 
Initialization; 
At Selection-Screen; 
Ao Comando do Usuário: 
At User-Command 
9.3.1 Seleção e Impressão de Dados: 
Start-of-Selection; 
End-of-Selection; 
9.3.2 Cabeçalho e RodapéTop-of-page; 
End-of-page; 
9.3.3 Seção das Sub-rotinas 
Forms Section; 
9.4 Comando “Select” 
O comando select é usado para acessar e selecionar dados de tabelas internas do SAP. Por 
existirem diversas variações do mesmo comando, é fundamental que o programador saiba 
o mecanismo de funcionamento de cada uma delas pois só assim poderá dar ao programa 
uma performance satisfatória. 
9.4.1 Validações 
O select abaixo é usado para buscar se ao menos 1 registro existe na tabela para o valor 
requisitado, sem atribuir o resultado a nenhuma tabela, estrutura ou variável. É usado 
para validação de campos de tela, por exemplo, utilizando o SY-SUBRC como resposta se 
existe registros (SY-SUBRC = 0) ou não. 
SELECT * 
FROM <tab> 
UP TO 1 ROWS 
WHERE <campo> <operador> <valor>. 
ENDSELECT. 
 
Exemplo: 
SELECT * 
FROM scarr 
UP TO 1 ROWS 
WHERE carrid IN s_carrid. 
ENDSELECT. 
IF sy-subrc NE 0. 
MESSAGE e001(SV). 
ENDIF. 
9.4.2 Seleção de um único valor para variável com chave completa 
O select abaixo é usado quando com a chave completa irá selececionar uma tabela. Se a 
cláusula WHERE é de valores únicos, o resultado será sempre, no máximo, um único 
registro. 
SELECT SINGLE <campo> 
FROM <tb> 
INTO <variavel> 
WHERE <campo> <operador> <valor>. 
Exemplo: 
SELECT SINGLE carrid 
FROM scarr 
INTO v_carrid 
WHERE carrid EQ p_carrid. 
IF sy-subrc EQ 0. 
WRITE v_carrid. 
ENDIF. 
Obs.: Pode-se receber mais de um campo utilizando uma estrutura na cláusula INTO. 
9.4.3 Seleção de mais valores em uma tabela interna 
O select abaixo é usado quando o resultado pode ser mais de um registro. 
SELECT <campos> 
FROM <tab> 
INTO TABLE <tabela interna> 
WHERE <campo> <operador> <valor>. 
Exemplo: 
SELECT * 
FROM scarr 
INTO TABLE t_scarr 
WHERE carrid IN s_carrid. 
IF sy-subrc EQ 0. 
LOOP AT t_scarr. 
WRITE / t_scarr-carrid. 
ENDLOOP. 
ENDIF. 
 
9.4.4 Seleção para todas as entradas selecionadas anteriormente 
O select abaixo é usado quando deseja-se selecionar uma tabela de acordo com o 
resultado obtido em uma seleção anterior. 
SELECT <campos> 
FROM <tab> 
INTO TABLE <tabela interna> 
FOR ALL ENTRIES IN <tabela interna anterior> 
WHERE <campo> <operador> <valor>. 
Exemplo: 
SELECT * 
FROM scarr 
INTO TABLE t_scarr 
WHERE carrid IN s_carrid. 
IF sy-subrc EQ 0. 
SELECT * 
FROM spfli 
INTO TABLE t_spli 
FOR ALL ENTRIES 
WHERE carrid EQ t_scarr-carrid. 
ENDIF. 
Obs.: Lembre-se de verificar se a tabela usada no FOR ALL ENTRIES não está vazia. 
Também deve-se usar na cláusula SELECT todos os campos chaves. Eliminar registros 
repetidos dos campos usados na cláusula WHERE da tabela do FOR ALL ENTRIES. 
9.5 Processamento 
9.5.1 Acessar todos os registros de uma tabela 
LOOP AT <tabela interna>. 
ENDLOOP. 
9.5.2 Ler uma tabela de acordo com a chave escolhida 
READ TABLE <tabela interna> WITH KEY <campo> = <valor> 
BINARY SEARCH. 
Obs.: Para utilizar o BINARY SEARCH deve-se ordenar de forma crescente a tabela antes 
com o comando SORT. 
9.5.3 Ordenar tabela interna 
SORT <tabela interna> BY <campo1> <campo2> ASCENDING. (crescente) 
SORT <tabela interna> BY <campo1> <campo2> DESCENDING. (decrescente) 
9.5.4 Obter número de linhas de uma tabela interna 
DESCRIBE TABLE <tabela interna> LINES <variavel tipo I>. 
9.5.5 Inserir a informação do cabeçalho na tabela interna 
APPEND <tabela interna>. 
 
9.5.6 Limpar o cabeçalho de uma tabela interna 
CLEAR <tabela interna>. 
9.5.7 Apagar todos registros da tabela interna 
REFRESH <tabela interna>. 
9.5.8 Eliminar registros de uma tabela transparente 
DELETE FROM <tab> WHERE <campo> = <valor>. 
9.5.9 Eliminar registros de uma tabela interna por range 
DELETE <tabela interna> WHERE <campo> IN <range>. 
ou 
DELETE <tabela interna> WHERE NOT <campo> IN <range>. 
9.5.10 Eliminar registros repetidos por uma determinada comparação 
em uma tabela interna 
Realizar antes o SORT com os mesmos campos da comparação 
DELETE ADJACENT DUPLICATES FROM <tabela interna> COMPARING <campo>. 
9.5.11 Substituir um mesmo campo em toda tabela interna sem a 
necessidade de LOOP 
<tabela interna>-<campo> = <valor>. 
MODIFY <tabela interna> TRANSPORTING <valor> WHERE <campo> IS INITIAL.(condição 
do campo a ser substituído) ABAP Foundation 77 
9.5.12 Outros comandos(buscar detalhes e variações com a ajuda F1): 
TRANSLATE 
REPLACE 
MOVE 
WRITE 
9.5.13 Criar rotinas internas 
PERFORM <nome do perform>. 
10. ALV GRID 
10.1 Introdução 
O ALV Grid é uma ferramenta flexível para exibição de relatórios ou árvore. São 
disponibilizados botões que permitem ao usuário manipular os dados (classificar, filtrar, 
somar). Além dos botões standards do sistema, é possível criar novos botões conforme a 
necessidade do usuário. Isto pode eliminar certas etapas no processo de gerenciamento 
de eventos para controles 
ATENÇÃO : O ALV GRID não permite processamento em Background. Caso seja executado 
dessa forma o relatório será formado como List e com a formatação estática. 
 
10.2 Utilização 
O Abap List Viewer padroniza e simplifica o uso de listas e relatórios no sistema R/3. Pode- 
se especificar os campos a serem exibidos no relatório e modificar a seqüência em que 
esses campos são exibidos. Além disso, pode-se ajustar a largura das colunas individuais 
para atender a requisitos específicos. 
O ALV permite : 
 
Usar variantes de exibição standard predefinidas pela SAP 
Modificar layout 
Selecionar Layout 
Gravar layout 
Ordenar os dados : Ordenar as linhas de acordo com os valores das colunas, em 
seqüência crescente e decrescente 
Ordenar Crescente 
Ordenar Decrescente 
 
Definir um filtro : Exibir somente os campos desejados 
Definir Seleção de dados 
 
Formar totais e subtotais : Em uma lista, é possível calcular totais e subtotais de uma 
ou mais colunas selecionadas. 
Total 
Sub-Total 
 
Exibição de informações detalhadas : Pode-se acessar informações detalhada de 
linhas individuais da lista 
Detalhe 
Pesquisa : É possível pesquisar informações específicas 
Pesquisar 
 
Impressão de Lista e pré-visualização : Pode-se imprimir as listas e chamar uma pré- 
exibição antes de imprimir 
Impressão 
Pré-Visualização 
Exportação de dados : Pode-se copiar as listas, por exemplo, para uma planilha ou 
grava-las como arquivo local 
Arquivo Local 
 
Excel 
Processamento de Texto 
Destinatário de Correio Eletrônico – Enviar relatório via correio SAP 
Deslocar colunas: Mudar coluna de lugar 
O ALV Grid é formado basicamente por : 
Uma barra de ferramenta; 
Um título; 
Uma lista de saída; 
Barra de Ferramenta 
Relatório ou Lista 
10.3 Conceito de Variante de Exibição 
A variante de exibição é utilizada para exibir o relatório em vários formatos diferentes. 
Cada usuário pode criar a sua própria variante e utilizá-la para visualizar o relatório. 
Por exemplo : Um relatório que tenha 20 campos exibidos na tela. Você pode eliminar os 
campos que não irá utilizar, acrescentar totalizadores, ordenação, mudar os campos de 
posição, etc. 
 
*Tela Normal do relatório 
*Eliminando campos de exibição ABAP Foundation 83 
 
*Ordenar tabela de saída 
 
*Somatória de assentos livres 
*Utilizar variantes do relatório 
EVENTO – INITIALIZATION 
Neste evento você verificará se existe uma variante definida como default 
para o relatório através da função: REUSE_ALV_VARIANT_DEFAULT_GET. 
Variável : 
def_variante TYPE disvariant. 
Parâmetro da tela de seleção : 
PARAMETERS : p_vari TYPE disvariant-variant. 
Função : 
CALL FUNCTION 'REUSE_ALV_VARIANT_DEFAULT_GET' 
EXPORTING 
i_save = ‘A’ 
CHANGING 
cs_variant = def_variante 
EXCEPTIONS 
not_found = 2. 
IF sy-subrc = 0. 
p_vari = def_variante-variant. 
ENDIF. 
 
EVENTO – AT SELECTION-SCREEN ON VALUE-REQUEST 
Neste evento você deverá criar uma rotina para exibir as variantes já existentes para o 
relatório em questão. 
AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_vari. 
PERFORM f_f4_variant. 
 
Variáveis : 
variant_exit(01) TYPE c, 
variante LIKE disvariant, 
Função : 
CALL FUNCTION 'REUSE_ALV_VARIANT_F4' 
EXPORTINGis_variant = variante 
i_save = ‘A’ 
IMPORTING 
e_exit = variant_exit 
es_variant = def_variante 
EXCEPTIONS 
not_found = 2. 
IF sy-subrc = 2. 
MESSAGE ID sy-msgid TYPE 'S' NUMBER sy-msgno 
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4. 
ELSE. 
IF variant_exit = space. 
p_vari = def_variante-variant. 
ENDIF. 
ENDIF. 
 
 
 
 
EVENTO – AT SELECTION-SCREEN 
Neste evento você irá tratar a variante informada, ou seja, verificar a sua existência, pois o 
usuário pode ter digitado um nome qualquer ao invés de utilizar o F4. 
AT SELECTION-SCREEN. 
PERFORM f_variante. 
Verificar se existe valor no parâmetro da tela 
IF NOT p_vari IS INITIAL. 
Mover valor em branco para a estrutura def_variante e o nome da variante para o campo 
def_variante-variant 
MOVE variante TO def_variante. 
MOVE p_vari TO def_variante-variant. 
Executar a função 
CALL FUNCTION 'REUSE_ALV_VARIANT_EXISTENCE' 
EXPORTING 
i_save = ‘A’ 
CHANGING 
cs_variant = def_variante. 
Mover estrutura def_variante para variante 
variante = def_variante. 
ELSE. 
Se não existir valor no parâmetro inicializar a estrutura Variante 
CLEAR variante. 
variante-report = v_repid. 
ENDIF. 
10.4 FORMATAÇÃO DO RELATÓRIO EM ALV 
Neste tópico iremos mostrar as rotinas necessárias para formatação de um relatório em 
ALV. Formatação geral, de campos, botões e etc. 
10.4.1 Definições de dados para o layout ALV 
Definição de Tipos 
Grupos de tipo 
TYPE-POOLS: slis. 
TYPE-POOLS: kkblo. 
Workareas 
DATA: w_layout TYPE slis_layout_alv, 
w_print TYPE slis_print_alv, 
w_event TYPE slis_alv_event, 
w_line TYPE slis_listheader. 
DATA: colinfo TYPE kkblo_specialcol. 
 
Tabela Interna 
DATA: l_sort TYPE slis_t_sortinfo_alv, 
l_event TYPE slis_t_event, 
l_top_of_page TYPE slis_t_listheader, 
t_campos TYPE slis_t_fieldcat_alv WITH HEADER LINE. 
Tabela Interna para Impressão do Relatório 
DATA : BEGIN OF t_relat OCCURS 0, 
Campo1 
Campo2 
Campo3 
......... 
......... 
......... 
box(1) TYPE c, " Campo Selecao Linha 
colinfo TYPE kkblo_t_specialcol, “ Formatação de Colunas 
END OF t_relat. 
10.5 Rotinas para Formatação do Layout 
PERFORM f_evento_lista. " Eventos da Lista 
O evento mais comum a ser definido é o TOP_OF_PAGE para impressão do cabeçalho na 
lista 
Executar a função para selecionar todos os eventos possíveis de serem 
tratados 
CALL FUNCTION 'REUSE_ALV_EVENTS_GET' 
EXPORTING 
I_LIST_TYPE = 0 
IMPORTING 
ET_EVENTS = t_event. 
Ler a tabela para o evento TOP_OF_PAGE 
READ TABLE t_event WITH KEY NAME = SLIS_EV_TOP_OF_PAGE 
INTO w_event. 
Se o evento foi encontrado então cadastrar o nome do form do seu programa (que trata o 
cabeçalho) no campo FORM 
IF SY-SUBRC = 0. 
MOVE 'F_CABECALHO' TO w_event-form. 
APPEND w_event TO t_event. 
ENDIF. 
************************************************************** 
Criar o FORM F_CABECALHO 
Criar o FORM f_cabeçalho e inserir o código abaixo. 
CALL FUNCTION 'REUSE_ALV_COMMENTARY_WRITE' 
EXPORTING 
 
it_list_commentary = l_top_of_page. 
Outros eventos que retornarão da função e podem ser tratados : 
CALLER_EXIT 
USER_COMMAND 
TOP_OF_PAGE 
TOP_OF_COVERPAGE 
END_OF_COVERPAGE 
FOREIGN_TOP_OF_PAGE 
FOREIGN_END_OF_PAGE 
PF_STATUS_SET 
LIST_MODIFY 
TOP_OF_LIST 
END_OF_PAGE 
END_OF_LIST 
AFTER_LINE_OUTPUT 
BEFORE_LINE_OUTPUT 
REPREP_SEL_MODIFY 
SUBTOTAL_TEXT 
Estes eventos estão gravados dentro do Tipo SLIS 
PERFORM f_cabec_lista. " Cabecalho da Lista 
Neste FORM iremos criar os textos que deverão sair no cabeçalho do relatório 
* Texto Principal - Header 
CLEAR w_line. 
w_line-typ = 'H'. 
w_line-info = text-h01. 
APPEND w_line TO t_top_of_page. 
No campo TYP deverá ser informado : 
H – Header 
S – Selection 
A – Action 
Estes tipos irão colocar os textos em formatos diferentes (letra, negrito ou itálico). Estas 
informações serão gravadas na tabela interna T_TOP_OF_PAGE 
PERFORM f_layout. " Layout Geral da Lista 
Neste FORM iremos formatar o relatório nos parâmetros gerais, ou seja, a aparëncia do 
relatório. 
 
Veja abaixo os campos que podem ser formatados: 
Campo Descrição 
Parâmetros Gerais 
no_colhead 
Sem Títulos (Cabeçalho) 
no_hotspot 
Títulos sem Hotspot 
no_vline 
Colunas separadas por espaços 
Zebra 
Listrado (Uma linha clara outra escura) 
cell_merge 
Não suprimir a replicação de campo 
Edit 
Edição somente para o grid todo 
edit_mode 
Edição somente para o grid todo 
numc_sum 
Total para campos numéricos 
no_input Somente exibição de campos 
f2code 
Reprep 
no_keyfix Não fixar coluna chave 
expand_all 
Expandir todas as posições 
no_author 
Nenhuma verificação padrão da autoridade 
PF-status 
def_status Status Default 
item_text 
Opções de Display 
colwidth_optimize 
no_min_linesize Tamanho da linha = tamanho da lista 
91 min_linesize 
Default 80 
max_linesize 
Default 250 
Window_titlebar 
no_uline_hs 
Exceções 
lights_fieldname 
Nome do campo para exceção 
lights_tabname 
Nome da tabela para exceção 
lights_rollname 
lights_condense 
Somatórios 
no_sumchoice Sem escolha para Somar para cima 
no_totalline Sem Total Linha 
no_subchoice 
no_subtotals Sem Sub-Total 
no_unit_splitting 
totals_before_items 
Mostrar total antes dos itens 
totals_only 
Mostrar somente os totais 
totals_text Texto para a 1a. coluna na linha de 
total 
subtotals_text Texto para a 1a. coluna na linha de 
Sub-total 
Interações 
box_fieldname Nome do Campo para Checkbox 
box_tabname 
 
box_rollname 
expand_fieldname 
hotspot_fieldname Nome do Campo para Hotspot 
confirmation_prompt 
Confirmar Saída da lista 
key_hotspot 
keys as hotspot " K_KEYHOT 
flexible_key 
Mover as colunas chaves 
group_buttons 
Grupo de Botões 
get_selinfos 
Ler tela de seleção 
group_change_edit 
Settings by user for new group 
no_scrolling Sem movimentar tela 
Detalhes Tela 
detail_popup 
Mostrar detalhes em nova janela 
detail_initial_lines 
Mostrar somente as linhas iniciais 
detail_titlebar Título para tela de detalhes 
Mostar Variantes 
header_text Texto para o botão 
default_item 
Cores 
info_fieldname 
Coltab_fieldname Nome do campo que conterá as cores 
das colunas 
Outros 
list_append Sem chamada de tela 
xifunckey 
Extended interaction(SAPQuery) 
xidirect 
Extended INTeraction(SAPQuery) 
dtc_layout Configuração de layout para Tabstrip 
 
*Tela de Detalhe 
Popup do detalhe 
 
Titulo Detalhe 
PERFORM f_sort. " Ordenação/SubTotal 
Neste FORM você deve informar os campos pelos quais a lista deve ser ordenada 
inicialmente, bem como se deve-se gerar sub-total ou total para esta quebra. 
Campo Centro 
t_sort-spos = '1'. 
t_sort-fieldname = 'WERKS'. 
t_sort-tabname = 'T_RELAT'. 
t_sort-up = 'X'. 
t_sort-subtot = 'X'. 
APPEND t_sort. 
CLEAR t_sort. 
Segue abaixo os campos que podem ser formatados para cada campo de ordenação 
Campo Descrição 
Spos 
Seqüência de Ordenação 
Fieldname 
Nome do campo 
Tabname Nome da tabela a qual pertence o 
campo 
Up Ordenação Menor para Maior 
Down Ordenação Maior para Menor 
Group 
Subtot Gerar Sub Total 
Comp 
Expa 
Obligatory 
PERFORM f_info_campos. 
Neste FORM você irá definir o layout de cada coluna do relatório. 
Veja abaixo os campos que podem ser formatados : 
Campo Descrição 
row_pos 
Saída na linha (1,2,3,...) 
col_pos 
Posição da coluna 
Fieldname 
Nome do campo 
Tabname 
Nome da tabela interna 
Currency 
Moeda 
Cfieldname 
Campo com Unidade de Moeda 
Ctabname 
Tabela referência para Unidade Moeda 
ifieldname 
initial column 
Quantity 
Unidade de Medida 
qfieldname 
Campo com Unidade Medida 
Qtabname 
Tabela com Unidade Medida 
Round 
Arredondar Campo 
Exponent 
Expoente para floats 
Key 
Campo como Chave 
Icon Campo como Ícone 
 
Symbol Campo como Símbolo 
Checkbox 
Campo como Checkbox 
Just 
Alinhamento – R (Direita) L (Esquerda) C 
(Centralizado) 
Lzero leading zero 
no_sign 
Sem sinal 
no_zero 
Não imprimir campos zerados 
no_convext 
edit_mask Máscara de Edição 
emphasize 
Campo em destaque 
fix_column 
Fixar Coluna 
do_sum Totalizar Coluna 
no_out Não exibir o campo 
Tech 
outputlen Tamanho do campo para saída dos dados 
Offset 
seltext_l Descrição Longa do Campo 
seltext_m 
DescriçãoMédia do Campo 
seltext_s 
Descrição Curta do Campo 
Ddictxt Indicação de Qual descrição utilizar - 
(S)hort (M)iddle (L)ong 
rollname 
Datatype Tipo do Campo 
Inttype 
Tipo do Campo 
Intlen 
Tamanho do Campo 
Lowercase 
Letra Minúscula 
ref_fieldname 
Campo referência 
ref_tabname 
Tabela referência 
Roundfieldname 
Nome campo para Arredondamento 
Roundtabname 
Nome tabela 
decimalsfieldname 
Nome campo para Decimais 
decimalstabname 
Nome tabela 
decimals_out Número de decimais para escrever um 
número 
text_fieldname 
reptext_ddic Texto para a coluna 
ddic_outputlen 
Tamanho do Campo 
key_sel 
field not obligatory 
no_sum 
Não totalizar o campo 
sp_group 
Grupo 
Reprep 
Input Campo como input de dados 
Edit 
Uso interno 
Hotspot 
Campo como hotspot 
 
PERFORM f_print. 
Neste FORM você irá definir dados de impressão. 
Campo 
Descrição 
prnt_info 
Informações de Impressão 
Print 
prnt_title 
no_coverpage 
no_new_page 
reserve_lines Linhas reservadas para o final da 
página 
no_print_listinfos Não imprimir página com número 
de registros selecionados 
no_change_print_params Não alterar tamanho de linha 
10.6 Exibir Relatório 
Neste FORM você irá exibir o relatório. 
v_repid = sy-repid. 
CALL FUNCTION 'K_KKB_SAVE_MODE_GET' 
IMPORTING 
e_save = v_save. 
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY' 
EXPORTING 
I_CALLBACK_PROGRAM = v_repid 
I_CALLBACK_PF_STATUS_SET = 'F_SET_STATUS' 
I_CALLBACK_USER_COMMAND = 'F_USER_COMMAND' 
IS_LAYOUT = w_layout 
IS_LAYOUT = w_print 
IT_FIELDCAT = t_campos[] 
IT_SORT = t_sort[] 
I_DEFAULT = 'X' 
I_SAVE = v_save 
IS_VARIANT = variante 
IT_EVENTS = t_event[] 
TABLES 
t_outtab = t_relat 
EXCEPTIONS 
PROGRAM_ERROR = 1 
OTHERS = 2. 
IF sy-subrc <> 0. 
MESSAGE ID sy-msgid TYPE 'I' NUMBER sy-msgno 
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4. 
STOP. 
ENDIF. 
10.7 Como mudar cor de uma coluna 
Para mudar a cor de uma coluna, você deve definir na sua tabela interna final (que será 
utilizada na função de exibição do relatório) o campo COLINFO (ou o nome que você 
 
desejar) que seja do tipo kkblo_t_specialcol. Este campo será uma tabela interna onde 
você definirá para cada linha do relatório a cor de cada coluna. Isso deve ser feito no 
momento em que você estiver gerando a tabela final para a impressão. 
Definir o campo na tabela interna final 
DATA : BEGIN OF t_relat OCCURS 0, 
Campo1 
Campo2 
Campo3 
...... 
...... 
COLINFO TYPE kkblo_t_specialcol 
END OF t_relat. 
Definir uma workarea auxiliar : DATA: colinfo TYPE kkblo_specialcol. 
CLEAR colinfo. 
Nome da coluna a ser colorida 
colinfo-fieldname = 'ATREXP'. 
De acordo com o valor do campo a cor será diferente 
IF t_relat-atrexp < 0. 
colinfo-color-col = '3'. " Amarelo 
ELSEIF t_relat-atrexp = 0. 
colinfo-color-col = '5'. " Verde 
ELSE. 
colinfo-color-col = '6'. " Vermelho 
ENDIF. 
colinfo-color-int = '1'. " Intenso 
APPEND colinfo TO t_relat-colinfo. 
Os campos que devem ser formatados são : 
FIELDNAME = Nome do campo na tabela interna 
COLOR-COR = Número da cor 
COLOR-INT = Intensidade da cor 
1 : Intenso 
Branco : cor normal 
10.8 Como mudar a cor de uma linha 
Para mudar a cor da linha toda e não somente de uma coluna você deve seguir o mesmo 
procedimento da coluna porém fazer para todas as colunas do relatório. 
Por exemplo sua tabela tem 5 campos então : 
Definir a tabela interna final 
DATA : BEGIN OF t_relat OCCURS 0, 
Campo1 
Campo2 
Campo3 
Campo4 
Campo5 
COLINFO TYPE kkblo_t_specialcol 
END OF t_relat. 
Definir uma workarea auxiliar : DATA: colinfo TYPE kkblo_specialcol. 
CLEAR colinfo. 
Todas as colunas deverão ter a mesma cor e intensidade 
colinfo-color-col = '3'. " Amarelo 
 
colinfo-color-int = '1'. " Intenso 
1a. Coluna 
colinfo-fieldname = 'CAMPO1'. 
APPEND colinfo TO t_relat-colinfo. 
2a. Coluna 
colinfo-fieldname = 'CAMPO2'. 
APPEND colinfo TO t_relat-colinfo. 
3a. Coluna 
colinfo-fieldname = 'CAMPO3. 
APPEND colinfo TO t_relat-colinfo. 
4a. Coluna 
colinfo-fieldname = 'CAMPO4. 
APPEND colinfo TO t_relat-colinfo. 
5a. Coluna 
colinfo-fieldname = 'CAMPO5. 
APPEND colinfo TO t_relat-colinfo. 
10.9 Como utilizar outros botões na tela 
Para inserir novos botões na tela, você deve copiar o Status Gui Standard 
STANDARD_FULLSCREEN para outro a ser utilizado no seu relatório. Após a cópia você 
deve retirar botões que não serão utilizados e inserir os seus novos botões : 
O tratamento destes novos botões deverá ser no FORM F_USER_COMMAND especificado 
na chamada da função de exibição do relatório : 
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY' 
form f_user_command USING p_ucomm LIKE sy-ucomm 
 
p_selfield TYPE slis_selfield. 
CASE p_ucomm. 
* Modificar Documento 
WHEN 'ZVA02'. 
CHECK p_selfield-fieldname = 'VBELN'. 
SET PARAMETER ID 'AUN' FIELD p_selfield-value. 
CALL TRANSACTION 'VA02' AND SKIP FIRST SCREEN. 
* Exibir Documento 
WHEN 'ZVA03'. 
CHECK p_selfield-fieldname = 'VBELN'. 
SET PARAMETER ID 'AUN' FIELD p_selfield-value. 
CALL TRANSACTION 'VA03' AND SKIP FIRST SCREEN. 
* Exibir Remessa 
WHEN 'ZVL01'. 
CHECK p_selfield-fieldname = 'VBELN'. 
READ TABLE t_relat INDEX p_selfield-tabindex. 
IF sy-subrc EQ 0. 
SET PARAMETER ID 'AUF' FIELD t_relat-vbeln. 
SET PARAMETER ID 'VST' FIELD t_relat-vstel. 
SET PARAMETER ID 'LEDAT' FIELD t_relat-mbdat. 
CALL TRANSACTION 'VL01N' AND SKIP FIRST SCREEN. 
ENDIF. 
WHEN OTHERS. 
ENDCASE. 
endform. " f_user_command 
Programas Standard – Modelo 
BALVST02_ GRID – Programa teste visor de listas ABAP: lista simples modelo vôo 
BALVST03_GRID - Programa teste visor de listas ABAP: lista simples modelo vôo BALVHT01 
- Programa de teste ALV: lista seqüencial hierárquica modelo de vôo 
Na versão 4.6 todos os programas BCALV 
 
11 OnLine 
Online são tipos de programas que, como o próprio nome indica, funcionam online, ou 
seja, instantaneamente. Por isso eles são dotados de uma maior capacidade de 
customização das telas e maior flexibilidade para criarem uma interface mais amigável 
com o usuário. 
Eles são especialmente úteis na criação de aplicações que necessitem de subtelas ou 
quando é necessário fornecer informações aos usuários de outra maneira que não um 
relatório. Na maioria dos casos, os programas standard funcionam assim. 
11.1 Estrutura do Programa OnLine. 
 
Tela 
- Desenho da Tela (Definição dos Campos) 
- Lista de campos para tratamento de erros 
- Definição dos módulos PBO e PAI relacionados com a tela 
GUI Status e GUI Title 
Definição dos comandos de botão e menus disponíveis: 
- Definição do título de tela 
- Habilitação dos comandos standards existentes 
- Criação de novos comandos necessários 
Evento PBO 
Evento executado antes da exibição da tela para o usuário: 
- Definição do GUI Status e GUI Title para a tela correspondente 
- Seleção inicial de dados e atribuição de valores a serem exibidos na tela 
Evento PAI 
- Verificação do código de comando executado (definido no GUI Status) 
- Código ABAP para execução da lógica do comando 
11.2 Criando um Programa OnLine. 
Na SE38, crie um programa. 
O tipo do programa deve ser Pool de módulos. 
 
Grave como local e a tela do editor será aberta. 
Pressione o botão de exibir a lista de objetos ou CTRL + SHIFT + F5. 
 
Criar uma tela através do menu. 
Preencha o número da tela. 
Preencha a descrição da tela. 
 
Clique no botão Layout para montar os campos da tela. Uma tela para montar 
o layout será exibida. 
Através dos botões à esquerda, monte a tela. 
Primeiro para montar o quadro, aperta o botão BOX e colocar um nome e sua descrição. 
 
Depois para colocar o texto do parâmetro de tela pressionar o botão TEXT FIELD e dar um 
nome e sua descrição. 
Para colocar o campo de entrada/saída para este parâmetro, pressionar o botão 
Input/Output Field. 
Caso o nome do campo faça referência a um campo existente no dicionário de dados, será 
questionado se deseja seguir suas características standard(tamanho, ajuda de pesquisa, 
etc). 
 
Pressionando a confirmação o campo assume as características do standard. 
Salve, ative e volte para a tela inicial. 
A lógica de processamento paraessa primeira tela está na aba, como mostra a figura 
abaixo. 
Descomente o MODULE STATUS_9000, esse módulo que irá definir. Dê um duplo clique 
em cima do deste módulo. 
 
Será pedido para criar o objeto, aceite. 
Pode ser criado dentro do programa principal, então aceite. 
Será inserida a lógica deste módulo no programa, descomente e insira um nome para a 
linha do PF-STATUS. 
 
O duplo clique sobre o nome do PF-STATUS irá criar esse objeto. Após as confirmações, a 
tela com a descrição é aberta para preenchimento. 
A seguinte tela será aberta. 
Preencher as teclas de função de Salvar, Voltar, Sair e Cancelar 
 
Inserir um botão para chamar uma próxima tela que pode ser criada. 
Preencher os dados e aceitar. 
Escolher uma tecla de atalho para esse novo botão. 
 
Assim os botões da tela são criados. 
Volte para a tela do programa principal clicando duas vezes sobre o nome do programa e 
ative o programa. 
 
` 
A tela criada pode ser testada pressionando o botão de testar tela ou F8. 
Porém, na visualização da tela não estão os botões criados no PF-Status, por isso deve-se 
criar uma transação para o programa, como segue: 
Na SE93 coloque o nome da transação e pressione o botão para Criar ou F5. 
 
Colocar a descrição e escolher a opção de Programa e Tela(Program and screen(dialog 
transaction)). 
Colocar o nome do programa criado anteriormente e a tela inicial do mesmo. Marcar as 
opções de Suporte GUI e salvar. 
 
Ao salvar, escolher o pacote desejado ou pressionar o botão OBJETO LOCAL. 
Sair da transação. 
Através da transação criada pode-se visualizar a tela completa, inclusive com os botões. 
 
Mas os botões que estão em tela ainda não têm nenhuma função, ou seja, apertando os 
botões nada ocorre. 
Deve-se voltar ao programa criado e no módulo PAI, deve-se descontentar e criar o 
MODULE USER_COMMAND_9000, este será o responsável por controlar a função dos botões. 
Para identificar o botão pressionado, deve-se utilizar a variável de sistema SY-UCOMM, 
como o exemplo abaixo. 
 
Assim, deve-se continuar a montar as telas e os controles de PBO e PAI, para que realize 
todas as funcionalidades do programa sugerido. 
12 BDC SESSION 
ABAP/4 tem uma técnica de programação para a colocação de dados dentro do SAP 
conhecida como Batch Data Communication Session ou BDC Session. 
12.1 Passos para criação de uma BDC Session 
- Identificar as telas que a transação processará 
- Escrever o programa em ABAP para gerar a tabela de BDC que submeterá os dados na 
transação 
- Submeter a tabela de BDC para o sistema em modo batch ou através do comando CALL 
TRANSACTION. 
12.2 Identificando telas em uma transação 
Quando um usuário entra com dados no SAP utiliza transações. Cada transação tem várias 
telas identificadas por um nome de programa e um número de tela. As informações sobre 
a tela atual é obtida através do menu System -> Status. 
 
Além de identificar o nome do programa e número da tela, deve-se também identificar 
o(s) campo(s) que se deseja entrar com os dados. Para conseguir saber o nome da 
tabela/estrutura e o nome do campo deve-se clicar sobre o campo que entraria com o 
dado e teclar <F1> seguido do botão “Informações Técnicas”. 
 
Nesta tela consegue-se quase todos os dados para a sessão de BDC. O nome do programa, 
o número da tela e o número da tela e o nome do campo para sessão de Batch Input. 
Além destes dados deve-se saber quais as teclas/funções de movimentação entre as telas. 
Por exemplo, se para passar para a próxima tela da transação deve-se teclar <ENTER>, o 
código para a BDC é ‘/00’. 
De modo geral, deve-se pensar na transação sem a utilização do mouse. Se um botão deve 
ser clicado pelo mouse deve-se descobrir qual o nome da função deste botão e passar este 
código para a tabela BDC 
12.3 Tabela BDC 
A tabela BDC é uma tabela interna com uma estrutura específica no qual é preenchida 
para ser enviada para a sessão batch input. Esta estrutura se chama BDCDATA e tem os 
seguintes campos: 
Campo 
Tipo 
Descrição 
Program 
Char(40) 
Nome do programa da 
transação 
Dynpro 
Numc(4) 
Número da tela da 
transação 
dynbegin 
Char(1) 
Indicador de uma nova 
tela 
Fnam 
Char(132) 
Nome do campo da tela 
Fval 
Char(132) 
Valor a ser colocado no 
campo 
 
De acordo com o mapeamento da tela, essa tabela interna deve ser preenchida 
12.4 Transação SHDB 
Para facilitar o trabalho de mapeamento dos campos, o SAP dispões de uma ferramenta 
que faz isso para o programador. É a transação SHDB. Essa transação monitora todos os 
passos que o usuário faz quando utiliza uma transação e a resposta do SHDB é uma lista 
com os campos e telas que foram utilizados, permitindo que o programador crie as tabelas 
BDC. Há ainda um recurso que gera automaticamente o código do programa para a criação 
da tabela BDC, facilitando ainda mais o trabalho, mas a lista já é suficiente e às vezes 
preferível, para mantermos os mesmos padrões nos códigos. 
Essa transação funciona da seguinte forma: 
Na primeira tela, estão os mapeamentos já realizados. 
Pressionando “Nova gravação” e então informa-se um nome para o mapeamento que se 
deseja efetuar e a transação que será gravada: 
 
Ao pressionar o botão de “Executar registro”, inicia-se o procedimento normal da 
transação e ao final a tabela será criada, e deve-se gravar. 
12.5 Inserindo mapeamento no código ABAP 
Com o mapeamento deve-se criar a tabela interna no programa ABAP. 
Uma maneira de facilitar é utilizar o PERFORM abaixo(exemplo baseado na primeira tela 
do mapeamento acima): 
Primeiro deve-se declarar a tabela interna no início do programa: 
DATA: T_BDC TYPE TABLE OF BDCDATA WITH HEADER LINE. 
 
Um perform com parâmetros deve ser chamado a seguir: 
PERFORM f_criar_bdc USING: 
‘X’ ‘ZCOMPANHIA’ ‘9000’, 
‘ ‘ ‘BDC_OKCODE’ ‘=PROX’, 
‘ ‘ ‘V_COD’ ‘GO’. 
O conteúdo do form é o seguinte: 
*&--------------------------------------------------------- 
*& Form f_criar_bdc 
*&--------------------------------------------------------- 
* CRIAR A TABELA DO MAPEAMENTO DO BATCH INPUT 
*---------------------------------------------------------- 
FORM f_criar_bdc USING VALOR_1 TYPE C 
VALOR_2 TYPE C 
VALOR_3. 
IF VALOR_1 = 'X'. 
T_BDC-PROGRAM = VALOR_2. 
T_BDC-DYNPRO = VALOR_3. 
T_BDC-DYNBEGIN = VALOR_1. 
APPEND T_BDC. 
ELSE. 
T_BDC-FNAM = VALOR_2. 
T_BDC-FVAL = VALOR_3. 
APPEND T_BDC. 
ENDIF. 
CLEAR T_BDC. 
ENDFORM. " f_criar_bdc 
12.6 Enviando os dados da tabela BDC para o sistema através de CALL 
TRANSACTION 
O comando CALL TRANSACTION possibilita o processamento de uma tabela BDC 
imediamente pelo sistema. Os dados da tabela BDC são utilizados para executar a 
transação e o return code deste comando nos mostra se a transação foi executada com 
sucesso ou não. 
A sintaxe deste comando é: 
CALL TRANSACTION <transação> 
USING <bdctab> MODE <modo>. 
Os modos para executar este comando são: 
A – Mostra todas as telas 
E – Mostra apenas telas com erros 
N – Não mostra as telas 
Em adição ao return code, podemos utilizar as variáveis de sistema para reparar a 
mensagem que o SAP enviou ao término do processamento. As variáveis mais utilizadas 
são: SY-MSGID, SY-MSGV1, SY-MSGV2, SY-MSGV3 e SY-MSGV4. 
12.7 Enviando os dados via pasta de batch input 
 
A pasta de batch input contém o mesmo mapeamento que seria executado via Call 
Transaction, porém ela é armazenada na transação SM35 para ser executada depois, por 
exemplo, após uma conferência. 
Para criar uma pasta de batch input deve-se utilizar a função, como no exemplo: 
CALL FUNCTION 'BDC_OPEN_GROUP' 
EXPORTING 
CLIENT = SY-MANDT 
GROUP = PASTA_NOME 
KEEP = 'X' 
USER = sy-uname 
EXCEPTIONS 
CLIENT_INVALID = 1 
GROUP_INVALID = 2 
GROUP_IS_LOCKED = 3 
INTERNAL_ERROR = 4 
QUEUE_ERROR = 5 
RUNNING = 6 
SYSTEM_LOCK_ERROR = 7 
USER_INVALID = 8 
OTHERS = 9. 
Para inserir o mapeamento na pasta utilizar a função, como abaixo, passando a tabela bdc 
montada. 
CALL FUNCTION 'BDC_INSERT' 
EXPORTING 
TCODE = 'MM01' 
TABLES 
DYNPROTAB = T_BDC 
EXCEPTIONS 
INTERNAL_ERROR = 1 
NOT_OPEN= 2 
QUEUE_ERROR = 3 
TCODE_INVALID = 4 
PRINTING_INVALID = 5 
POSTING_INVALID = 6 
OTHERS = 7. 
Após inserir todos os dados do mapeamento necessários para a execução, deve-se fechar 
a pasta de batch input, utilizando a função, como segue: 
CALL FUNCTION 'BDC_CLOSE_GROUP' 
EXCEPTIONS 
NOT_OPEN = 1 
QUEUE_ERROR = 2 
OTHERS = 3. 
A execução da pasta pode ser feita através da transação SM35. 
 
Deve-se escolher a pasta desejada e pressionar o botão de processar

Outros materiais