Sei sulla pagina 1di 105

POOL CONSULTORIA E TREINAMENTO LTDA

Curso ABAP/4 e SAPSCRIPT

APRESENTAÇÃO SAP R3
POOL CONSULTORIA E TREINAMENTO LTDA

Curso ABAP/4 e SAPSCRIPT

1. APRESENTAÇÃO

A SAP é uma empresa de software alemã que produz o sistema R/3. O R/3 é um software tipo ERP
(Enterprise resource planning), ou seja, um conjunto integrado de aplicativos projetado para tratar o
processamento de dados em grandes corporações.

Em português os softwares ERP são denominados Softwares de Gestão Empresarial.

A arquitetura fundamental do sistema R/3 é baseada no modelo cliente/servidor com três camadas de
processamento distribuído, conforme veremos abaixo:

Banco de dados - Fica num único servidor. O padrão SQL (Structured Query Language) é utilizado para
definição e manipulação dos dados. Todos os Sistemas Gerenciadores de Bancos de Dados (DBMS)
apropriados para aplicações críticas de organizações e que tenham uma significativa presença no mercado são
suportados (Oracle, SQL Server, Informix, etc.).

Aplicação – Pode estar em mais de um servidor. As aplicações standard do sistema R/3, assim como as
customizações e melhorias desenvolvidas em ABAP, são processadas nesta camada.

Apresentação - Também conhecida como interface do usuário ou front end, está localizada próxima ao usuário,
normalmente num PC.

Page 2 of 105
POOL CONSULTORIA E TREINAMENTO LTDA

Curso ABAP/4 e SAPSCRIPT

O SAP roda em diversos sistemas operacionais, incluindo UNIX, Windows NT e AS/300.


O R/3 é constituído de milhares de transações. Uma transação é um programa e uma seqüência de telas usadas
para inserir, alterar ou exibir dados. As transações são agrupadas em módulos. Um módulo é uma série de
transações que lidam com a mesma área funcional. Os módulos do R/3 são os seguintes:

FI - Contabilidade financeira

TR - Tesouraria

CO - Controladoria

EC - Controladoria Empresarial

IM - Gerenciamento de investimentos

PP - Planejamento da produção

MM - Gerenciamento de materiais

PM - Manutenção de instalações

QM - Gerenciamento da qualidade

PS - Projetos

SD - Vendas e distribuição

HR - Gerenciamento de Recursos humanos

A partir de agora, vamos nos referir ao sistema R/3 simplesmente como SAP, que é a forma como ele é
chamado no mercado.

Os módulos do SAP são escritos na linguagem ABAP (Advanced Business Application Programming,
programação para aplicações avançadas de negócios).

A liguagem ABAP possibilita o desenvolvimento de novos programas ou a modificação de programas


existentes para atender a necessidades específicas de uma empresa. Ela facilita o trabalho das equipes de
desenvolvimento por esconder os detalhes técnicos, como sistema operacional, banco de dados, redes e
comunicação cliente-servidor.

Page 3 of 105
POOL CONSULTORIA E TREINAMENTO LTDA

Curso ABAP/4 e SAPSCRIPT

2. INTERFACE GRÁFICA DO SAP

2.1. Janela do SAP

Os elementos standard de uma janela do SAP são mostrados abaixo:

A barra de ferramentas standard é de particular interesse, uma vez que contém vários botões para execução
de ações comuns, tais como Save and Enter.

As funções atribuídas à barra de ferramentas standard estão listadas abaixo:

 Botão Enter

Um clique neste botão eqüivale a pressionar a tecla ENTER do teclado.

Page 4 of 105
POOL CONSULTORIA E TREINAMENTO LTDA

Curso ABAP/4 e SAPSCRIPT

 Command field

É um campo para digitação de comandos. É uma alternativa ao uso dos menus.

 Botão Gravar

Salva o trabalho. Executa a mesma função da opção Salvar do menu Editar.

 Botão Voltar

Retorna a tela anterior sem salvar dados.

 Botão Encerrar

Sai da aplicação corrente. O sistema retorna à aplicação anterior ou à tela do menu principal.

 Botão Cancelar

Sai da tarefa corrente sem salvar.

 Botão Imprimir

Imprime dados da tela corrente.

 Botão Procurar

Localiza palavra na tela corrente.

 Botão Continuar Pesquisa

Page 5 of 105
POOL CONSULTORIA E TREINAMENTO LTDA

Curso ABAP/4 e SAPSCRIPT

Complemento da função anterior.

 Paginação

Para ir à primeira página, última página, próxima página ou página anterior utilize as teclas F21 a F24.
Também pode-se utilizar as teclas Page Up, ou Page Down, ou clicar nos botões:

2.2. Menus
Os menus são exibidos na barra de menus. Dependendo da tarefa que se está executando os menus
aparecem de formas diferentes.

Abaixo vemos uma típica barra de menu do SAP.

Menus que estão disponíveis em todas as telas do SAP:

Menus standard na maioria das aplicações do SAP:

Page 6 of 105
POOL CONSULTORIA E TREINAMENTO LTDA

Curso ABAP/4 e SAPSCRIPT

Menu Descrição
<Objeto> O primeiro menu da barra de menus (Ordem de Compra no
exemplo acima), refere-se ao objeto no qual se está
trabalhando. Este menu contém funções que afetam o objeto,
tais como Criar, Modificar, exibir, Imprimir. Este menu contém
ainda a função Sair, que permite fechar a tarefa corrente.
Processar É o segundo menu da barra. Contém ações que permitem
editar componentes do objeto corrente, por exemplo,
Selecionar, Editar, Copiar. Este menu contém ainda a função
Cancelar, que permite sair da tarefa sem salvar os dados
entrados.
Saltar É terceiro menu da barra. Contém funções que permitem
passar diretamente pára outras telas da tarefa na qual se está
trabalhando. Este menu contém ainda a função Voltar, que
permite voltar um nível na hierarquia do sistema. Antes de
voltar o sistema checa os dados entrados e exibe uma caixa de
diálogo caso haja algum problema.

Page 7 of 105
POOL CONSULTORIA E TREINAMENTO LTDA

Curso ABAP/4 e SAPSCRIPT

ABAP WORKBENCH

Page 8 of 105
POOL CONSULTORIA E TREINAMENTO LTDA

Curso ABAP/4 e SAPSCRIPT

3. APRESENTAÇÃO
O ABAP Workbench é um ambiente de programação gráfico utilizado para criar novas aplicações ou alterar as
aplicações padrões do SAP. O Workbench possui ferramentas que são acessadas através de botões, caixas de
diálogo e janelas. As diversas partes de uma aplicação que são criadas pelo desenvolvedor são chamadas de
Objetos de Desenvolvimento. Exemplos de objetos de desenvolvimento são programas, telas, tabelas, views,
estruturas, modelos de dados, mensagens e includes.

Uma aplicação ABAP pode ser uma transação ou um relatório. Uma transação é uma aplicação para o usuário
final. Uma transação pega dados informados pelo usuário e executa uma ou mais ações relevantes. Uma
aplicação que cria ordens de compra é um exemplo de transação. Ao contrário das transações, os relatórios são
aplicações que requerem pouca ou nenhuma interação com o usuário. Por baixo de cada transação está um
programa module pool . Module pool é o termo usado para descrever o grupo de entidades ABAP que conduzem
uma transação.

4. TRABALHANDO COM TABELAS


5.1 Criação do Objeto Tabela

Para criar uma tabela através do Repository browser, vá para sua lista de objetos e proceda da seguinte
forma:

 Selecione Ctg.Obj.Classe desenvolvimento.. O sistema solicitará um tipo de objeto.

Page 9 of 105
POOL CONSULTORIA E TREINAMENTO LTDA

Curso ABAP/4 e SAPSCRIPT

 Dê um duplo clique em Objetos Dictionary e tecle Enter. O sistema solicitará o tipo de objeto de
dicionário que você deseja criar.

 Selecione Tabela e entre com um nome de tabela no campo específico. Escolha um nome no formato Z <
xx > FL , onde < xx > são suas iniciais e clique em Criar.

Neste momento o sistema estará processando sua entrada com o ABAP Dictionary. Você não precisa sair
do Repository Browser; o sistema abriu o Dictionary automaticamente.

Page 10 of 105
POOL CONSULTORIA E TREINAMENTO LTDA

Curso ABAP/4 e SAPSCRIPT

 O sistema solicitará algumas informações adicionais. Entre com o seguinte:

Descrição breve Flight Table


Classe de entrega A

 Marque o campo Atual Tab. Permitida

Page 11 of 105
POOL CONSULTORIA E TREINAMENTO LTDA

Curso ABAP/4 e SAPSCRIPT

5.1.1 Especificando campos da tabela


Para especificar um campo na tabela, vá para sua lista de objetos e proceda da seguinte forma:

 No campo Nome campo, entre FLID. Será o nome do primeiro campo. O campo FLID será o campo
chave da tabela.

 Marque o campo de seleção Chv.

 Salve as alterações. O sistema removerá campos vazios e salvará a tabela.

 Clique em Campos novos para exibir alguns campos vazios. Entre com o restante dos campos (ver
abaixo) da mesma forma que fez com o primeiro, lembrando que os demais campos não são campos
chave.

5.1.2 Criando Elementos de Dados e Domínios


Para definir um elemento de dados e um domínio para um campo proceda da seguinte forma:

 Certifique-se de que a tabela está em modo de alteração (Se não, clique no botão Exibir <->modificar, ou
tecle Ctrl F1)

 Escolha um nome para o elemento de dados do campo FLID. Escolha um nome no formato Z < xx >
_FLID, onde < xx > são suas iniciais.

 Entre com o nome escolhido no campo Elemento de Dados do campo FLID.

 Dê um duplo clique no campo Elemento de Dados. O sistema solicitará confirmação.

 Tecle Enter. O sistema exibirá a tela de alteração de Elemento de Dados.

 Entre com a seguinte informação:

Descrição breve Flight ID


Nome do domínio z < xx > _FLID

Page 12 of 105
POOL CONSULTORIA E TREINAMENTO LTDA

Curso ABAP/4 e SAPSCRIPT

Você pode utilizar o mesmo nome do elemento de dados para o domínio.

 Entre com a seguinte informação no grupo Textos:

A informação digitada em Textos será utilizada mais tarde pelo sistema para colocar o título nos campos
automaticamente.

 Salve o elemento de dados.

 Dê um duplo clique no campo nome do domínio. O sistema pedirá para confirmar sua seleção.

 Tecle em Sim. O sistema exibirá a tela de alteração de domínio.

 Entre com a seguinte informação:

Descrição breve Flight ID


Tipo de dados Char
Núm. posições 5

Page 13 of 105
POOL CONSULTORIA E TREINAMENTO LTDA

Curso ABAP/4 e SAPSCRIPT

 Clique em Ativar (Ctrl F3). O sistema salvará e ativará o objeto domínio.

 Volte à tela de alteração de elemento de dados .

 Clique em Ativar , para ativar o elemento de dados.

 Volte para a tela de modificação de atributos de tabela/estrutura e salve seu trabalho.

Você criou dois novos objetos: um elemento de dados e um domínio. Estes objetos agora aparecerão na sua
lista de objetos locais. Abra sua lista de objetos locais. Na pasta Objetos de dicionário você tem duas novas
pastas: Elementos de dados e Domínios. Abra estas novas pastas para ver os novos objetos criados.

5.1.3 Reutilizando domínios

Page 14 of 105
POOL CONSULTORIA E TREINAMENTO LTDA

Curso ABAP/4 e SAPSCRIPT

Iremos agora definir os elementos de dados e domínios para o restante dos campos da nossa tabela.

 Entre na tela de modifição de tabela/estrutura e repita os procedimentos feitos anteriormente para criar
elementos de dados e domínios, utilizando os campos abaixo:

Nome Elem. Dados Descrição Domíno Tipo de Núm


campo breve dado posições
LVCITY Z<xx>_LVCITY Dep. City Z<xx>_CITY CHAR 5
LVDATE Z<xx>_LVDATE Dep. Date Z<xx>_DATE DATS 8
LVTIME Z<xx>_LVTIME Dep. Time Z<xx>_TIME TIMS 6

Observação: Digite o que quiser nos textos dos domínios.

Agora, vamos usar os 3 novos domínios que acabamos de criar ( Z<xx>_CITY , Z<xx>_DATE , Z<xx>_TIME )
e mais o domínio CHAR1 (já existente no sistema), para especificar o restante dos elementos de dados e
domínios, procedendo da seguinte forma:

 Entre no modo de alteração da tabela.

 Entre com um nome de elemento de dados no campo Elemento de Dados. Escolha um nome no formato
Z < xx > _REGL, onde < xx > são suas iniciais.

 Dê um duplo clique no campo Elemento de Dados. O sistema solicitará confirmação.

 Tecle Enter. O sistema exibirá a tela de alteração de elemento de dados.

 Entre com a seguinte informação:

Descrição breve Regular Flight


Nome do domínio CHAR1

CHAR1 é um domínio já criado pelo sistema.

Page 15 of 105
POOL CONSULTORIA E TREINAMENTO LTDA

Curso ABAP/4 e SAPSCRIPT

Complete os textos da tela

 Salve o elemento de dados.

 Ative o elemento de dados.

 Volte para a tela de alteração de tabela/estrutura e salve seu trabalho

 Repita os passos 2 a 9 para o restante dos campos utilizando a seguinte informação:

Field Data Element Short Text Domain


CHRTR z<xx>_CHRTR Charter Flight CHAR1
MOVIE z<xx>_MOVIE Inflight Movie CHAR1
SNACK z<xx>_SNACK Light Snack CHAR1
FMEAL z<xx>_FMEAL Full Meal CHAR1
ARCITY Z<xx>_ARCITY Arrival City Z<xx>_CITY
ARDATE Z<xx>_ARDATE Arrival Date Z<xx>_DATE
ARTIME Z<xx>_ARTIME Arrival Time Z<xx>_TIME

Page 16 of 105
POOL CONSULTORIA E TREINAMENTO LTDA

Curso ABAP/4 e SAPSCRIPT

Não esqueça de preencher os textos para cada elemento de dados.

Use o Repository Browser para visualizar na sua lista de objetos os novos objetos criados.

Repare que os domínios criados pelo sistema (por exemplo, CHAR1) não aparecem na lista de Domínios,
pois não foram criados localmente, mas para todo o sistema.

5.1.4 Definindo lista de valores

Para definir uma lista de valores fixos para o domínio Z<xx>_CITY, vá para sua lista de objetos e proceda da
seguinte forma:

 Abra a pasta Domínios.

 Selecione o domínio city e clique em Modificar. O sistema exibirá a tela de manutenção de domínio do
Dictionary.

 Clique em Valores Fixos.

 Entre com MUC na primeira coluna (Valor fixo).

 Entre com Munich na Descrição breve.

 Adicione os seguintes valores:

Valor fixo Texto Breve


TXL Tegel Field, Berlin
THF Tempelhof, Berlin
DEN Denver
EWR Newark, New Jersey
JFK New York
CDG Paris
YYZ Toronto

 Salve a lista.

 Volte à tela de manutenção de domínio do Dictionary.

 Clique em Ativar para salvar as alterações e atualizar a base de dados SAP.

 Use o Repository Browser para visualizar seus domínios. Clique no domínio Z<xx>_CITY e confira a
lista de valores recém-criada.

Page 17 of 105
POOL CONSULTORIA E TREINAMENTO LTDA

Curso ABAP/4 e SAPSCRIPT

Page 18 of 105
POOL CONSULTORIA E TREINAMENTO LTDA

Curso ABAP/4 e SAPSCRIPT

5.1.5 Especificando Technical Settings


 Abra a tela de Tabela/Estrutura. Certifique-se de que sua tabela está em modo de alteração e proceda
da seguinte forma:

 Selecione Saltar -> Parâmetros técnicos ou tecle F7.

 Certifique-se de que a tela de Parâmetros técnicos está no modo de alteração.

 Entre com APPL1 no campo Tipo de dados. A classe de dados APPL1 indica que a tabela é atualizada
freqüentemente.

 Entre com 1 no campo Categor. tamanho. 1 indica que a tabela é pequena.

 Salve.

 Volte à tela de Tabela/Estrutura do Dictionary.


 Salve sua tabela.

5.1.6 Ativando uma tabela

Para ativar sua tabela, proceda da seguinte forma:

 Abra sua tabela no modo de alteração.

 Clique em Ativar. O sistema compilará o código da tabela, criará uma versão runtime da tabela, e

 Atualizará o status da tabela para ativa.

4.1. Conhecendo as Ferramentas do Workbench


Na barra de menu da tela inicial selecione:

Ferramentas → ABAP Workbench .

O sistema exibirá a tela do ABAP Workbench, contendo opções para acesso a seis ferramentas, conforme
mostrado abaixo.

Page 19 of 105
POOL CONSULTORIA E TREINAMENTO LTDA

Curso ABAP/4 e SAPSCRIPT

Para retornar à tela inicial a qualquer momento use o botão Voltar. Para sair do R/3 a qualquer momento
selecione através do menu:

Sistema → Logoff.

RELATORIOS

Page 20 of 105
POOL CONSULTORIA E TREINAMENTO LTDA

Curso ABAP/4 e SAPSCRIPT

1. CRIAÇÃO DE RELATÓRIOS USANDO INSTRUÇÕES ABAP

1.1. A linguagem de programação ABAP

ABAP significa Advanced Business Application Programming,ou seja, Programação Avançada de Aplicações
de Negócios. O ABAP é usado para desenvolvimento de melhorias no SAP R/3, ou para alterações em seus
programas standard, de acordo com as necessidades específicas. O ABAP Workbench contém todas as
ferramentas necessárias para criação e manutenção de programas ABAP.

Existem dois tipos de programas ABAP: dialog programs e reports.

Os dialog programs são utilizados para entrada de dados em tabelas do sistema com o uso de telas.

Os reports são utilizados para saída de grande quantidade de dados em relatórios. Estes relatórios podem ser
exibidas na tela, impressas ou gravadas em arquivos.

1.2. Criando um programa Online

No menu da tela inicial do SAP, selecione:

Ferramentas → ABAP/4 Workbench

 Clique em Repository Browser.

O sistema exibirá uma tela semelhante à seguinte:

 Selecione o radio button Objetos priv.locais e clique em Exibir. Você verá uma lista de todos objetos que
você armazenou como objetos privados locais.

Page 21 of 105
POOL CONSULTORIA E TREINAMENTO LTDA

Curso ABAP/4 e SAPSCRIPT

 Dê um duplo clique no campo Ctg.obj.classe desenvolvimento.

 O sistema exibirá uma janela modal. Marque o radio button Objeto do programa e clique em Enter.
Aparecerá uma tela semelhante a que mostramos abaixo:

 Entre com um nome de programa no formato Yaxxxxxx ou Zaxxxxxx.

 Substitua a letra a pela letra da área de aplicação para a qual você está desenvolvendo o programa.
Substitua x por qualquer caracter válido.
 Certifique-se de que o radio button Programa está marcado e clique em Criar.

 Na janela modal Criar programas, desmarque Com include TOP. e clique em Enter.

 Se o nome do Programa não existe no sistema, a tela ABAP/4: Atributos do programa <nome do
programa> aparecerá, conforme abaixo:

 Entre com um titulo descritivo para o programa no campo Título.

Page 22 of 105
POOL CONSULTORIA E TREINAMENTO LTDA

Curso ABAP/4 e SAPSCRIPT

 No campo Categoria, digite 1. Relatórios são sempre tipo 1.

 O campo Status do programa não precisa ser preenchido. Nunca coloque T no campo Status pois
identifica o programa como sendo de teste.

 Entre com a área de aplicação no campo Applicação. Se você não sabe a que área pertence seu
programa, posicione o cursor no campo e pressione a tecla F4 que trará as entradas possíveis. Escolha
uma delas pressione ENTER.

 A seguinte tela aparecerá:

 Clique em Salvar. O sistema armazenará o programa como objeto privado local.

 Toda vez que um novo programa for criado, os passos acima devem ser executados.

 Volte para o Repository Browser. A lista de objetos privados locais agora contém a pasta Programas.

 Clique no + . O sistema exibirá uma lista de programas. O programa que acabamos de criar deverá
aparecer nesta lista.

Page 23 of 105
POOL CONSULTORIA E TREINAMENTO LTDA

Curso ABAP/4 e SAPSCRIPT

1.3. O Editor ABAP

Se você estiver na tela ABAP/4: Atributos do programa <nome do programa>, chame o editor clicando em
Texto fonte.

Se você estiver no Repository Browser consultando os objetos locais privados, você pode exibir os objetos
programas, marcar o programa desejado e clicar em Modificar. Isso o levará diretamente ao ABAP Editor.

Outra forma de acessar o editor ABAP é clicar na opção Editor ABAP da tela inicial do ABAP Workbench, e
especificar o nome do programa que deseja acessar. Essa função também pode ser acessada pelo código
da transação SE38.

A tela do editor é igual à exibida abaixo:

Page 24 of 105
POOL CONSULTORIA E TREINAMENTO LTDA

Curso ABAP/4 e SAPSCRIPT

O Editor ABAP possui três diferentes modos de exibição: Modo PC com numeração de linhas, modo PC sem
numeração e linhas e Modo comando. Para mudar o modo selecione no menu:

Opções → Modo de Edição...

Para o nosso exemplo marque o radio button Modo PC com numeração de linhas e clique em Enter.

O editor possui dois status: Exibir e Modificar.

Na criação de um novo programa, o sistema insere automaticamente no código, a seguinte linha:

REPORT Zaxxxxxx.

Esta linha marca o início do programa e nunca deve ser deletada. Todas as declarações de dados e instruções
devem vir depois desta linha.

1.4. Linhas de comentário


Para identificar uma linha inteira como linha de comentário, na primeira posição da linha coloque um asterisco
(*).

Exemplo:
* Esta é uma linha de comentário

Para identificar apenas uma parte da linha como comentários (sempre a direita do texto do programa), coloque
aspas (") antes do comentário

Exemplo:
REPORT REAATME1. “Aqui começa a linha de comentário”.

1.5. Comandos ABAP para exibição em tela

1.5.1. WRITE
Esse comando é utilizado para saída de informações de literais ou variáveis, na tela ou na impressora. Uma
seqüência de WRITES aparecem na mesma linha. Se a linha terminar o sistema automaticamente pula
para a próxima linha.

A forma mais simples do comando WRITE é a seguinte:

WRITE 'Meu primeiro programa'.

Observação: Os comandos ABAP têm que terminar com um ponto. Um comando pode
Ocupar várias linhas, pois o que determina o final do comando é o ponto.

Vamos copiar esta linha para nosso novo programa. Proceda da forma abaixo:

Page 25 of 105
POOL CONSULTORIA E TREINAMENTO LTDA

Curso ABAP/4 e SAPSCRIPT

 Edite o programa, como já vimos anteriormente.

 Inclua o comando WRITE acima.

 Clique no botão Verificar (Ctrl+F2). O sistema checará a sintaxe.

 Clique em Gravar sem verificar (Ctrl+S)

Se o programa não tiver erros, execute-o selecionando:

Programa → Executar

Ou clique F8

A saída contém um cabeçalho standard, contendo o título do programa, conforme foi criado nos atributos
do programa, e uma linha separando. Abaixo da linha vem o resultado do comando WRITE do nosso
programa.

Selecione o botão Encerrar para voltar ao editor ABAP.

1.5.2. NEW-PAGE
O comando NEW-PAGE é utilizado para criar uma quebra de página no relatório.

1.5.3. SKIP
O comando SKIP salta uma linha. Para saltar várias linhas, especifique o número de linhas após o
comando.

Exemplo: SKIP 5.

1.5.4. ULINE

Este comando salta uma linha e exibe uma linha horizontal.

Use os comandos NEW-PAGE e ULINE para modificar o layout do seu relatório: Insira uma linha horizontal
antes e depois de 'Meu primeiro programa' e termine o relatório com uma quebra de página. Proceda da
seguinte forma:

 Abra o programa no editor.

 Entre com o comando ULINE nas linhas antes e depois do comando WRITE.

 No fim do programa, entre com o comando NEW-PAGE.

Page 26 of 105
POOL CONSULTORIA E TREINAMENTO LTDA

Curso ABAP/4 e SAPSCRIPT

 Cheque a sintaxe. Corrija os erros e salve o programa.

 Execute o programa.

1.6. Declaração de variáveis


A tabela abaixo contém todos os tipos de dados predefinidos pelo SAP, com suas características:

Tipo de Descrição Valor inicial Comprimento standard


dado
P packed 0 8
number
I integer 0 platform-dependent
F floating 0.000... platform-dependent
point
number
N numeric 00.... 1
text
C Text Blank 1
D date 00000000 8
YYYYMMDD
T time 000000 6
HHMMSS
X Hexadecima X’00’ 1
l number

Page 27 of 105
POOL CONSULTORIA E TREINAMENTO LTDA

Curso ABAP/4 e SAPSCRIPT

Suponha que você queira executar o programa que escrevemos no item anterior, usando uma variável no
lugar da literal. Primeiro você teria que definir a variável.

A palavra-chave para declaração de variáveis é DATA, seguida pelo nome da variável. Depois vem a palavra-
chave TYPE, seguida do tipo de dado.

No nosso caso o tipo de dado é C, pois é um texto:

DATA TEXT TYPE C.

Esse comando atribui à variável TEXT o comprimento standard do tipo C que é 1 caracter.

Se você quiser definir um comprimento diferente, especifique entre parênteses logo após o nome da variável:

Exemplo: DATA TEXT(30) TYPE C.

1.7. Manipulação de variáveis

Para atribuir textos a uma variável, use uma das formas abaixo:

MOVE 'Preenchimento para TEXT' TO TEXT.


TEXT = 'Preenchimento para TEXT'.

Para exibir o conteúdo da variável na tela, use o comando WRITE especificando o nome da variável após o
comando:

WRITE TEXT.

No exercício abaixo, você criará um novo programa. Nesse programa você definirá uma variável texto com 30
caracteres de comprimento e atribuirá um texto a ela. Em seguida o programa deverá exibir o conteúdo da
variável na tela.

Page 28 of 105
POOL CONSULTORIA E TREINAMENTO LTDA

Curso ABAP/4 e SAPSCRIPT

 Crie um novo programa de acordo com o que aprendemos no item 1.2

 Declare a variável TEXT com comprimento de 30.

 Atribua um texto qualquer à variável. Certifique-se de que o texto não excederá 30 caracteres de
comprimento.

 Exiba o conteúdo da variável na tela.

Depois de completar o exercício, seu programa deverá estar como abaixo:

REPORT RSAATME5.
DATA TEXT(30) TYPE C.
MOVE 'Preenchimento para TEXT' TO TEXT.
WRITE TEXT.

1.8. Layout do texto

Você pode modificar o layout do seu texto de saída usando a opção modelo.

Ao finalizar o exercício abaixo, seu programa conterá outra linha de saída, na qual o texto da variável TEXT
será exibido numa linha nova e numa cor diferente:

 Abra no editor o programa criado no exercício anterior. Posicione o cursor na linha onde você deseja
inserir o comando WRITE adicional.

 Selecione Modelo.

 Uma janela aparecerá, mostrando os comandos para os quais o modelo existe:

Page 29 of 105
POOL CONSULTORIA E TREINAMENTO LTDA

Curso ABAP/4 e SAPSCRIPT

 Clique no comando WRITE.

 Clique em Enter. Na tela seguinte você pode entrar com suas seleções.

 Primeiro indique o nome do campo a ser exibido e marque Output from fld.

 Marque o campo Cor, posicione o cursor o campo adjacente e pressione F4 para ver as entradas
possíveis. Uma janela será exibida com as opções. Dê um duplo clique na cor COL_KEY .

 Marque o campo Em linha nova. Isso indicará ao sistema para iniciar uma nova linha antes de exibir a
variável.

 Clique em Exibir para checar o layout.

Page 30 of 105
POOL CONSULTORIA E TREINAMENTO LTDA

Curso ABAP/4 e SAPSCRIPT

 Clique em Aceitar para inserir o comando no seu programa. A seguinte linha aparecerá no seu
programa:

WRITE / TEXT COLOR COL_KEY.

A barra indica que o texto será exibido numa nova linha. A opção COLOR COL_KEY determina a cor do
texto

 Salve seu programa e execute-o. O relatório agora possui uma nova linha, que aparece numa cor
diferente.
1.9. Cabeçalhos

Outra forma de melhorar o layout do relatório é usar cabeçalhos descritivos.

Para criar ou alterar cabeçalhos, faça o seguinte:

 Abra o programa criado no último exercício.

 Selecione:

Saltar → Elementos de texto → Títulos/Cabeçalhos

O sistema exibirá cinco linhas para entrada de dados.

A primeira linha forma o título do relatório, que será exibido em cada nova página. Por default o sistema
usa o texto que você entrou nos atributos do programa.

 Digite um novo título.

As linha de baixo formam os títulos das colunas. Nestas linhas, você pode incorporar informações
adicionais que você queira que apareça como cabeçalho do relatório. Por exemplo, se você criar um
relatório contendo várias colunas, você pode nomear estas colunas no cabeçalho do relatório.

A posição dos textos que vemos nesta janela corresponde à posição de saída no relatório, o que torna o
posicionamento fácil e exato.

 Entre com textos nestas linhas.

 Salve o cabeçalho.

 Clique em Voltar para voltar para o relatório. Você ainda na poderá ver as modificações feitas no
cabeçalho.

 Execute novamente o programa. O relatório agora contém as alterações feitas no


cabeçalho.

Page 31 of 105
POOL CONSULTORIA E TREINAMENTO LTDA

Curso ABAP/4 e SAPSCRIPT

1.10. Acesso a bases de dados


Para acessar bases de dados em ABAP, utilizamos comandos OPENSQL.

1.10.1. Comando SELECT


Este comando é utilizado para recuperar dados das bases de dados do SAP.

SELECT <campo1> <campo2> <campo3>

FROM <tabela do BD> [INTO <alvo1><alvo2><alvo3>]

[WHERE <condição1><condição2>]
[GROUP BY <campos de agrupamento>]

[ORDER BY <ordenação de campos>].

Cláusula Descrição

SELECT <campo1t> Indica os campos que serão selecionados

FROM <tabela do BD> Indica a tabela que será lida

INTO <alvo> Indica onde serão armazenados os campos lidos

Page 32 of 105
POOL CONSULTORIA E TREINAMENTO LTDA

Curso ABAP/4 e SAPSCRIPT

WHERE <condição> Indica a condição de seleção

GROUP BY <campos> Se for necessário, faz agrupamento dos campos indicados neste parâmetro

ORDER BY <campos> Se necessário, faz a ordenação dos registros lidos

Seleção de uma única linha da tabela do BD

SELECT SINGLE *....FROM... WHERE <condição>......

Exemplo:

TABLES SPFLI.

SELECT SINGLE * FROM SPFLI WHERE CARRID EQ 'LH'


AND CONNID EQ '2407'.
WRITE: / SPFLI-CARRID, SPFLI-CONNID,
SPFLI-CITYFROM, SPFLI-CITYTO.

Saída em tela:

Seleção de registros e envio dos mesmos para uma tabela interna:

SELECT... INTO CORRESPONDING FIELDS OF TABLE <tabela interna> ....

No exemplo acima os campos da tabela interna devem ter o mesmo nome dos campos que serão selecionados.

Page 33 of 105
POOL CONSULTORIA E TREINAMENTO LTDA

Curso ABAP/4 e SAPSCRIPT

SELECT..... INTO TABLE <tabela interna>...

Exemplo:

TABLES SPFLI.

DATA ITAB LIKE SPFLI OCCURS 5 WITH HEADER LINE.

SELECT * FROM SPFLI INTO TABLE ITAB


WHERE CARRID = 'LH'.

LOOP AT ITAB.
WRITE: / ITAB-CARRID, ITAB-CONNID.
ENDLOOP.

No exemplo acima os campos da tabela interna devem estar na mesma sequência dos campos
que estão sendo selecionados

Saída em tela:

SELECT..... INTO TABLE <tabela interna1>...

FOR ALL ENTRIES IN <tabela interna2>

WHERE <campo1> = <tabela interna2-campo1> AND

<campo2> = <tabela interna2-campo2>.


Exemplo:
DATA: IT_SPFLI LIKE SPFLI OCURRS 0 WITH HEADER LINE.

DATA: BEGIN OF ITAB OCCURS 10,


CITYFROM LIKE SPFLI-CITYFROM,

Page 34 of 105
POOL CONSULTORIA E TREINAMENTO LTDA

Curso ABAP/4 e SAPSCRIPT

CITYTO LIKE SPFLI-CITYTO,


END OF ITAB.

ITAB-CITYFROM = 'FRANKFURT'.
ITAB-CITYTO = 'BERLIN'.
APPEND ITAB.

ITAB-CITYFROM = 'NEW YORK'.


ITAB-CITYTO = 'SAN FRANCISCO'.
APPEND ITAB.

SELECT * FROM SPFLI INTO TABLE IT_SPFLI

FOR ALL ENTRIES IN ITAB

WHERE CITYFROM = ITAB-CITYFROM AND


CITYTO = ITAB-CITYTO.

LOOP AT IT_SPFLI.
WRITE: / SPFLI-CITYFROM, SPFLI-CITYTO.
ENDLOOP.
No exemplo acima os campos da tabela interna devem estar na mesma sequência dos campos
que estão sendo selecionados

SELECT <tab1>~campo1 <tab2>~campo1 INTO TABLE <tabela interna1>

FROM <tab1> INNER JOIN <tab2> on <tab1>~campo1 =


<tab1>~campo1

WHERE <tab1>~<campo3> = <parametro1>


Exemplo:

SELECT lips~vbeln lips~lfimg likp~wadat


INTO TABLE itab_orders
FROM lips INNER JOIN likp ON ( lips~vbeln = likp~vbeln )
INNER JOIN vbfa ON ( lips~vbeln = vbfa~vbelv )
WHERE lips~matnr = s_matnr
and lips~vbeln in s_vbeln
and likp~vbeln in s_vbeln
and vbfa~vbelv in s_vbeln
and lips~werks in s_werks
and likp~wadat in s_datum
and vbfa~vbtyp_n = 'Q'
and vbfa~vbtyp_v = 'J'.

No exemplo acima os campos da tabela interna devem estar na mesma sequência dos campos
que estão sendo selecionados

Page 35 of 105
POOL CONSULTORIA E TREINAMENTO LTDA

Curso ABAP/4 e SAPSCRIPT

Comandos para seleção, inclusão e alteração de tabelas do banco de dados:

Comando Uso

SELECT Seleção de registros do banco de dados

INSERT Inserção de registrso no banco de dados

UPDATE Altera registros do banco de dados

MODIFY Insere ou altera registros do banco de dados

DELETE Elimina registros do banco de dados

COMMIT WORK. Confirma ou desfaz alterações no banco de dados em tempo de execução

ROLLBACK WORK

Neste exercício criaremos um novo programa que irá ler dados da tabela SFLIGHT e exibi-los na tela:

 Crie um novo programa e entre no editor.

 Para poder ler dados da tabela SFLIGHT, temos declarar esta tabela no programa da seguinte forma:

TABLES SFLIGHT.

 Após ter declarado a tabela, leia a mesma usando o comando SELECT da seguinte forma:

SELECT * FROM SFLIGHT.

Page 36 of 105
POOL CONSULTORIA E TREINAMENTO LTDA

Curso ABAP/4 e SAPSCRIPT

ENDSELECT.

Este comando corresponde a um loop que é processado até que toda a tabela seja lida.
Agora podemos exibir os dados num relatório. Use o comando modelo do WRITE da seguinte forma:

 Posicione o cursor numa linha vazia entre os comandos SELECT e ENDSELECT

 Clique em Modelo.

 Na janela marque WRITE e clique em Enter.

 Na janela Composição de instruções-WRITE marque o botão Saída p/ Estrut. No campo de entrada,


entre com o nome da tabela SFLIGHT

 Clique em Seleção de componentes

 Para exibir a linha aérea, o vôo, a data, o número máximo de assentos, e o número de assentos
ocupados, marque os checkboxes correspondentes e clique em Transferir.
 Marque o checkbox Em nova linha

 Clique em Aceitar.

 Inclua os comandos ULINE e NEW-PAGE para melhorar o layout do relatório.

 Cheque a sintaxe do programa, salve-o e execute-o. O resultado é uma lista contendo todos os dados
da tabela SFLIGHT.

 Altere o cabeçalho.
1.10.2. Critérios de Seleção
No comando SELECT, utilizamos a palavra-chave WHERE para especificar os critérios de seleção.

Vamos alterar o programa criado no último exercício para exibir apenas dados da linha aérea ‘LH’. Use o
campo CARRID como critério de seleção. Numa segunda etapa, use o campo CONNID (nº vôo) como outro
critério. Exiba apenas o vôo ‘0400’. Ao final do exercício, sua lista deverá estar assim:

 Abra o ultimo programa que criamos no editor.

 Modifique o comando SELECT no seu programa:

SELECT * FROM SFLIGHT WHERE CARRID ='LH'.

 Cheque a sintaxe e salve.

 Execute o programa. A lista conterá apenas dados da linha aérea ‘LH’.

Page 37 of 105
POOL CONSULTORIA E TREINAMENTO LTDA

Curso ABAP/4 e SAPSCRIPT

 Agora inclua o critério de seleção CONNID = ‘0400’ no comando SELECT, combinando com o outro
critério definido anteriormente, através do operador lógico AND:

SELECT SFLIGHT WHERE CARRID = 'LH' AND CONNID = '0400'.

 Cheque a sintaxe e salve.

 Execute o programa. A lista agora conterá apenas dados do vôo 0400 da linha aérea ‘LH’.

1.11. Telas de Seleção


Para tornar nosso programa mais flexível, podemos criar uma tela de seleção usando os comandos
PARAMETERS e SELECT-OPTIONS. Esta tela de seleção aparecerá antes da exibição do relatório e
permitirá a entrada de critérios de seleção em tempo de execução do programa.

1.11.1. Parameters
O exercício abaixo nos mostrará como utilizar o campo CARRID da tabela SFLIGHT numa seleção
dinâmica:

 Abra o programa do exercício anterior no editor.


 Insira a seguinte linha na seção de declaração do programa:
PARAMETERS ID LIKE SFLIGHT-CARRID.

Este comando declara a variável ID. Como utilizamos a palavra chave LIKE e o campo CARRID da
tabela SFLIGHT, a variável automaticamente assume os atributos deste campo.

 Modifique o comando SELECT :


SELECT * FROM SFLIGHT WHERE CARRID = ID AND CONNID = '0400'.

 Cheque a sintaxe e salve o programa. Execute o programa.


O sistema exibe uma tela de seleção, na qual pode-se digitar valores para o parâmetro ID. Se, por
exemplo, você quiser ver apenas os vôos da linha aérea ‘LH’, digite LH e clique em Enter. O resultado será
uma lista contendo os vôos ‘0400’ da linha aérea digitada na tela de seleção.

1.11.2. Modificação dos textos de seleção

Por default, o sistema exibe o nome do parâmetro como o texto de seleção da tela de seleção. Uma vez
que este nome, normalmente não é muito descritivo, você pode definir outro texto da seguinte forma:
 Abra o programa no editor.

 Selecione:

Page 38 of 105
POOL CONSULTORIA E TREINAMENTO LTDA

Curso ABAP/4 e SAPSCRIPT

Saltar → Elementos de texto → Textos de Seleção

 Você verá uma lista de parâmetros de seleção. Na coluna adjacente você pode entrar com os textos de
seleção.

 Se o nosso parâmetro não aparecer na lista, volte para o editor e salve o programa. Depois volte para a
janela de textos de seleção.

 Depois de entrar com os textos desejados, clique em Salvar. Use Voltar para voltar ao editor.

 Execute o programa. Na tela de seleção não aparecerá mais o nome do parâmetro, e sim o texto deste
parâmetro.

1.11.3. Select-options
O ABAP permite a criação de critérios de seleção mais complexos através do comando SELECT-
OPTIONS.

O SELECT-OPTIONS cria uma tabela interna contendo os critérios de seleção.

Neste comando, você pode entrar com valores singulares, bem como com intervalos.

Neste exercício veremos como incluir uma condição de seleção para vôos que permita a seleção de
intervalos:

 Abra o programa do exercício anterior no editor.


 Para permitir a entrada de intervalos para vôos na tela de seleção, inclua o seguinte comando na área
de declaração de dados do programa:
SELECT-OPTIONS CID FOR SFLIGHT-CONNID.

Este comando declara o critério de seleção CID para o campo CONNID da tabela SFLIGHT.

 Salve e execute o programa. A tela de seleção agora possui um novo elemento:

 Para definir texto de seleção para este critério de seleção, faça da mesma forma que fizemos no último
exercício.

 Modifique o comando SELECT para incluir o novo critério de seleção. Note que para comparar o campo
CONNID com uma tabela interna, o "=" deve ser trocado pelo "IN".
SELECT * FROM SFLIGHT WHERE CARRID = ID AND CONNID IN CID.

 Cheque a sintaxe, salve e execute o programa.

Agora, na tela de seleção, você pode selecionar tanto a linha aérea como o vôo. Para o vôo, você pode
especificar valores singulares ou intervalos. Para entrar com vários valores singulares ou intervalos clique
em:

Page 39 of 105
POOL CONSULTORIA E TREINAMENTO LTDA

Curso ABAP/4 e SAPSCRIPT

1.11.4. Variantes

As telas de seleção poderão conter muitos campos. Existe uma forma de armazenar as seleções para que
não precisemos preencher a tela de seleção todas as vezes que formos executar um determinado
programa. As informações das telas de seleção são gravadas em Variantes.

No exercício abaixo, vamos criar uma variante para selecionar todos os vôos da linha aérea ‘LH’ com
número entre ‘0400’ e ‘1000’:

 Execute o programa do último exercício.

 Entre a seleção apropriada na tela de seleção:

 Selecione:
Saltar → Variantes → Gravar como variante
Ou clique em:

 Na janela Salvar as Variant, especifique um nome para a variante e entre com a descrição do critério de
seleção.
 Salve a variant e clique em Voltar (Volta para o programa).

Agora vamos executar o programa utilizando a variante que acabamos de criar para exibir a lista dos vôos
‘0400’ a ‘2500’ da linha aérea ‘LH’:

 Execute o programa. Na tela de seleção, selecione:


Saltar → Variantes → Chamar...
Ou clique em:

As seleções que gravamos na variante aparecerão.

 Altere o limite máximo do intervalo de vôo de ‘1000’ para ‘2500’.

 Clique em Executar para visualizar o relatório.

Page 40 of 105
POOL CONSULTORIA E TREINAMENTO LTDA

Curso ABAP/4 e SAPSCRIPT

1.12. Comandos SELECT aninhados

Freqüentemente necessitamos acessar uma tabela e utilizar os dados recuperados como critério de seleção
para acessar outra tabela. No modelo do booking de vôo, por exemplo, temos que ler todos os vôos de uma
linha aérea na tabela SFLIGHT para depois recuperar os dados do booking destes vôos na tabela SBOOK.

No exercício abaixo, criaremos um programa que lerá dados de um ou mais vôos de uma linha aérea na tabela
SFLIGHT. Em seguida utilizaremos estes dados para selecionar quais dados iremos ler na tabela de booking
SBOOK. Depois, exibiremos os dados dos vôos no cabeçalho.No relatório, exibiremos todos os bookings para
cada vôo. A lista ficará assim:

Vamos separar os vôos por quebra de página.

Procedimentos:
 Crie um novo programa.

Page 41 of 105
POOL CONSULTORIA E TREINAMENTO LTDA

Curso ABAP/4 e SAPSCRIPT

 Declare as tabela SFLIGHT e SBOOK.

 Crie uma tela de seleção para os campos CARRID e CONNID da tabela SFLIGHT. Para CARRID
permita apenas valore singulares, enquanto que para CONNID permita intervalos. Não se esqueça
de definir os textos para as seleções.

 Crie o loop de seleção para leitura da tabela SFLIGHT. Como ajuda, use o modelo para o comando
SELECT da seguinte forma:

- No programa, posicione o cursor em cima do comando SELECT e clique em Modelo.


- Marque SELECT * FROM e entre com o nome da tabela SFLIGHT no campo de entrada.

- Clique em Enter.

O sistema exibirá uma lista com todos os campos da tabela SFLIGHT.

- Marque os campos que deseja usar como critério de seleção.

- Clique em Aceitar.

No seu programa aparecerá um comando SELECT com uma condição WHERE pré gerada, e o
comando ENDSELECT.

 Complete a condição WHERE para permitir a seleção no PARAMETERS ID e SELECT-OPTIONS


CID. Certifique-se de deletar os underscore( _) pré gerados.

 Alimente as variáveis de sistema para cabeçalho com os dados dos campos CARRID, CONNID, e
FLDATE da tabela SFLIGHT.

 Crie um loop de seleção para a tabela SBOOK usando o modelo. Use os campos CARRID,
CONNID, e FLDATE como critério de seleção.

 Para comparar estes valores com os valores recém obtidos da tabela, certifique-se de que este loop
de seleção está posicionado dentro do loop de seleção da tabela SFLIGHT

 Use o modelo do comando WRITE para exibir os dados do booking relevantes.

 Modifique o lay-out do texto. Desenhe uma linha horizontal depois de exibir todos os bookings de
um vôo e inicie uma nova página para o próximo.

 Cheque a sintaxe e salve o programa.

 Execute o programa e crie uma variante na tela de seleção.

 Compare a lista exibida com o exemplo acima e modifique o cabeçalho para ficar igual. Use as
variáveis do sistema para as quais você passou os dados apropriados no item 5. Lembre-se de
adaptar o comprimento de saída das variáveis.

Page 42 of 105
POOL CONSULTORIA E TREINAMENTO LTDA

Curso ABAP/4 e SAPSCRIPT

 Salve o cabeçalho e execute o programa novamente. Na tela de seleção, use a variante criada.

 Melhore o layout até que fique igual ao exemplo exibido acima.

Abaixo veremos a solução completa deste exercício:

Código ABAP:
*&---------------------------------------------------------------- *
*& Programa: RSAATME4 *
*& Descrição: SELECT aninhado *
*&----------------------------------------------------------------*
*& Exibe os dados de booking de um determinado de vôo *
*&----------------------------------------------------------------*
REPORT RSAATME4.

* Declaração de tabelas
TABLES: SFLIGHT, "Vôos
SBOOK. "Booking

* Tela de seleção
PARAMETERS: ID LIKE SFLIGHT-CARRID.
SELECT-OPTIONS: CID FOR SFLIGHT-CONNID.

* Inicio da Leitura da tabela SFLIGHT -----------------------------*


SELECT * FROM SFLIGHT
WHERE CARRID = ID "Critério de seleção ID
AND CONNID IN CID. "Critério de seleção CID

* Move dados para as variáveis de cabeçalho


MOVE SFLIGHT-CARRID TO SY-TVAR0. "Airline
MOVE SFLIGHT-CONNID TO SY-TVAR1. "Flight connection
MOVE SFLIGHT-FLDATE TO SY-TVAR2. "Flight date

* Inicio da leitura da tabela SBOOK ------------------------------*


SELECT * FROM SBOOK
WHERE CARRID = SFLIGHT-CARRID
AND CONNID = SFLIGHT-CONNID
AND FLATE = SFLIGHT-FLDATE.

* Exibe campos relevantes para o booking


WRITE:/ SBOOK-BOOKID,
SBOOK-CUSTOMID,
SBOOK-LUGGWEIGHT,
SBOOK-WUNIT,
SBOOK-CLASS,
SBOOK-ORDER_DATE.
ENDSELECT.
* Fim da leitura da tabela SBOOK ----------------------------------*

Page 43 of 105
POOL CONSULTORIA E TREINAMENTO LTDA

Curso ABAP/4 e SAPSCRIPT

* Linha horizontal e nova página após exibição do booking de um vôo


ULINE.
NEW-PAGE.
ENDSELECT.
* Fim da leitura da tabela SFLIGHT -------------------------------*

2. ESTRUTURAS E TABELAS INTERNAS

2.1. Tabelas Internas


Quando você estiver usando ABAP/4, você trabalhará principalmente com tabelas. As tabelas são as
estruturas de dados mais importantes no sistema R/3. Dados com vida longa são armazenados nos bancos de
dados relacionais.

Page 44 of 105
POOL CONSULTORIA E TREINAMENTO LTDA

Curso ABAP/4 e SAPSCRIPT

Além das tabelas dos bancos de dados, você pode criar tabelas internas que existirão apenas em tempo de
execução do programa.

Você pode usar tabela interna para efetuar cálculos em partes de tabelas de base de dados. Você pode ler
uma determinada parte de uma ou mais tabelas de base de dados e guardar em uma tabela interna.

Você também pode usar tabelas internas para reorganizar dados de tabelas de acordo com as necessidades
do programa.

2.2. Declarando uma estrutura


Antes de usar estruturas e tabelas internas em seu programa, você deve declará-las.

Declare uma estrutura que contenha uma coluna para cidade de partida (CITYFROM), uma para cidade de
chegada (CITYTO), uma para a linha aérea (CARRID), e uma para o nº vôo(CONNID). Use partes da estrutura
da tabela SPFLI. Siga o procedimento descrito abaixo:

 Crie um novo programa. Utilize o banco de dados lógico F1S.

 Declare a estrutura usando o modelo. Posicione o cursor na seção de declaração do programa e clique
em Modelo.

 Na janela, marque o radio button Internal table. Não existe a opção Estrutura, então usaremos o modelo
da tabela interna e alteraremos.

 Marque with LIKE fields fr. E entre com o nome da tabela no campo de entrada adjacente. O item with
LIKE fields fr. Permite selecionar partes da estrutura de uma tabela. Se ao invés disso, você marcar with
LIKE for struct. of você copiará a estrutura inteira da tabela.

 Clique em Enter.

 Marque os campos que você necessita na tabela interna.

 Clique em Copy.

 Especifique o nome da estrutura <structure> a ser definida e clique em Enter.

 Substitua a palavra chave DATA, usada para declaração de tabela interna, pela palavra chave TYPES,
usada para estruturas, e delete a opção OCCURS 0. A declaração ficará como abaixo:

TYPES: BEGIN OF structure,


CARRID LIKE SPFLI-CARRID,
CONNID LIKE SPFLI-CONNID,
CITYFROM LIKE SPFLI-CITYFROM,
CITYTO LIKE SPFLI-CITYTO,
END OF structure.

Page 45 of 105
POOL CONSULTORIA E TREINAMENTO LTDA

Curso ABAP/4 e SAPSCRIPT

2.3. Declarando uma tabela interna


Já declaramos uma estrutura. Vamos agora declarar uma tabela interna baseada nesta estrutura:

 Abra o programa no editor.

 Declare a tabela interna na seção de declaração do seu programa, abaixo da declaração da estrutura. O
comando que você precisa inserir é:

DATA itab TYPE structure OCCURS 0.

O comando inicia com a palavra chave DATA, seguida do nome da tabela interna.

A palavra chave TYPE refere-se a estrutura declarada previamente.

A palavra chave OCCURS define a estrutura como tabela interna. O número que vem após OCCURS
determina o número de linhas a tabela terá quando inicializada. O tamanho de uma tabela interna é
variável, isto é, o sistema pode aumentar o número de linhas se for necessário.

2.4. Definindo a área de trabalho


Para alterar ou exibir o conteúdo de uma tabela interna, você precisa de uma área de trabalho. Quando a
tabela interna estiver sendo processada, o sistema sempre preenche a área de trabalho com o conteúdo da
linha corrente da tabela. Então você pode processar a área de trabalho.

Como definir uma área de trabalho?

Se você estiver usando uma tabela interna com header line, o sistema automaticamente criará uma área de
trabalho (a header line) com o mesmo nome da tabela interna.
Se você estiver usando uma tabela interna sem header line, defina um campo string com a mesma estrutura e
use-o como área de trabalho da tabela interna.

Nos exercícios abaixo, iremos trabalhar com tabelas internas sem header lines. Desta forma, precisaremos de
uma área de trabalho.

Vamos definir uma área de trabalho para a tabela interna sem header line que criamos no exercício anterior:

 Abra o programa do exercício anterior no editor.

 Inclua a seguinte linha para declarar uma área de trabalho, que chamaremos de wa para a tabela interna
itab:

Page 46 of 105
POOL CONSULTORIA E TREINAMENTO LTDA

Curso ABAP/4 e SAPSCRIPT

DATA: wa TYPE structure.

 Cheque a sintaxe e salve o programa.

Você definiu uma área de trabalho <wa> com a mesma estrutura <structure> da tabela interna <itab>. Você
pode usar esta área de trabalho nos exercícios abaixo para exibir ou alterar o conteúdo da tabela interna. Você
pode acessar os campos da área de trabalho da tabela interna da mesma forma que acessaria campos de
tabelas do banco de dados. Primeiro especifique o nome da área de trabalho, depois um hífen, e finalmente o
nome do campo. Exemplo: EWA-CONNID é o campo CONNID da área de trabalho WA.

2.5. Preenchendo tabelas internas

Para inserir linhas em tabelas internas usamos o comando APPEND, que insere o conteúdo de uma área de
trabalho no fim de uma tabela interna. No nosso caso, inserindo o conteúdo de wa em itab a sintaxe correta
seria:

APPEND wa TO itab.

Vamos utilizar o banco de dados lógico para ler a tabela SPFLI e vamos inserir os dados na tabela interna itab.

 Abra o programa do exercício anterior no editor .

 Declare a tabela de onde serão lidos os dados.

 Use o comando MOVE para mover o conteúdo da tabela SPFLI no evento GET SPFLI, para os campos
correspondentes da área de trabalho wa da tabela interna itab.

 Insira o conteúdo da área de trabalho para a tabela interna.

 Cheque a sintaxe e salve o programa.

 Dica: Ao invés de mover cada campo individualmente da área de trabalho para a tabela interna,
podemos utilizar o comando MOVE-CORRESPONDING para mover todos os campos com nomes
idênticos de uma vez:

Exemplo:
MOVE-CORRESPONDING SPFLI TO wa.

Corresponde à:
MOVE SPFLI-CARRID TO wa-CARRID.
MOVE SPFLI-CONNID TO wa-CONNID.
MOVE SPFLI-CITYFROM TO wa-CITYFROM.
MOVE SPFLI-CITYTO TO wa-CITYTO.

Page 47 of 105
POOL CONSULTORIA E TREINAMENTO LTDA

Curso ABAP/4 e SAPSCRIPT

2.6. Trabalhando com tabelas internas


Tabelas internas são normalmente processadas num loop. Neste loop, todos os elementos da tabela interna
são lidos, começando na primeira linha. O comando que inicia o loop é LOOP AT, seguido do norma da tabela
interna.

Se a tabela interna for sem header line, você precisará de uma área de trabalho. Para definir esta área de
trabalho use a opção INTO .

A seguir entramos com as instruções que deverão ser executadas dentro do loop. NO final do bloco de
instruções, fecho o loop usando o comando ENDLOOP.

Assim, o processamento de uma tabela interna ficaria da seguinte forma:

LOOP AT itab INTO wa.


<Bloco de instruções>
ENDLOOP.
O programa baseado nos exercícios abaixo está listado no item 3.8.)

2.6.1. Exibindo o conteúdo da tabela interna


Para exibir o conteúdo da tabela interna usaremos o comando WRITE dentro de um LOOP.

Você pode utilizar o modelo para criar o comando WRITE, porém você não pode marcar Output to Struct.
Na janela Assemble a WRITE Statement. Ao invés disso, use Output from fld para cada campo que queira
exibir, entre com o nome do campo e clique em Copy.

No último exercício escrevemos um programa que preenchia a tabela interna itab com dados da tabela
SPFLI, usando um banco de dados lógico. Agora vamos exibir a tabela interna.

 Abra o programa no editor.

 Encontre o local do programa no qual devemos incluir as instruções para exibir a tabela interna. Uma
vez que temos que exibir a tabela após o evento GET SPFLI, o único local possível é após o evento
END-OF-SELECTION.

 Inclua um LOOP na tabela interna. Certifique-se de preencher a área de trabalho com os valores da
tabela interna.

 Exiba os campos da área de trabalho dentro do loop.

 Cheque a sintaxe e salve o programa.


 Execute o programa. Na tela de seleção, escolha Airline = ‘ LH’ e Flight connection = ‘0400’ a ‘2000’.
Salve a seleção como variante.

O sistema exibirá uma lista de todos os vôos que correspondem às seleções entradas na tela de seleção.

Page 48 of 105
POOL CONSULTORIA E TREINAMENTO LTDA

Curso ABAP/4 e SAPSCRIPT

2.6.2. Modificando linhas de uma tabela interna


Para modificar linhas individuais de uma tabela interna, usamos comando MODIFY dentro do loop.

Antes de usar o comando MODIFY, temos que efetuar as modificações necessárias na linha corrente da
área de trabalho da tabela interna. Depois, atribuímos o conteúdo da área de trabalho à tabela interna
usando a seguinte sintaxe:
MODIFY <itab> FROM <wa>.

No último exercício, exibimos o conteúdo da tabela interna. Agora, vamos modificar o número do vôo ‘0400’
para ‘0401’ depois da primeira saída. Depois exiba a tabela interna alterada usando outro comando LOOP:

 Abra o programa no editor.

 Insira um comando IF que considere apenas o vôo ‘0400’.

 Dentro do IF statement, modifique o conteúdo da área de trabalho de acordo com o solicitado.

 Modifique a tabela interna apenas para as linhas que contém ‘0400’.

 Inclua outro loop no programa para exibir a tabela interna modificada. Separe a exibição da tabela
original da modificada por uma quebra de página.

 Cheque a sintaxe e salve o programa.

 Execute o programa. Na tela de seleção use a variante criada no último exercício.

O sistema exibirá o conteúdo da tabela original e da tabela alterada na tela.

2.6.3. Deletando linhas da tabela interna


No último exercício, modificamos linhas individuais de uma tabela interna. Também podemos deletar linhas
individuais usando o comando DELETE dentro de um loop.
DELETE <itab>.
Modifique o programa para que delete o vôo '0402' da tabela interna após a última saída. Depois exiba o
resultado usando outro LOOP .

 Abra o programa no editor.

 Insira um IF no segundo LOOP para pegar apenas o vôo de nº ‘0402’.

 Vamos deletar o conteúdo das linhas que contém o vôo '0402' da tabela interna.

 Inclua outro loop no programa para exibir a linha modificada da tabela interna. Separe a exibição da
tabela original da tabela alterada por uma quebra de página.
 Cheque a sintaxe e salve o programa.

Page 49 of 105
POOL CONSULTORIA E TREINAMENTO LTDA

Curso ABAP/4 e SAPSCRIPT

 Execute o programa. Na tela de seleção, use a variante existente.

 sistema exibirá o conteúdo modificado da tabela interna. A diferença para a listagem do exercício
anterior é que o vôo ‘0402’ foi deletado.

2.6.4. Ordenando tabelas internas.


Para ordenar tabelas internas por diferentes campos, use o comando SORT. Com este comando, você
pode especificar a seqüência da ordenação, bem como o tipo (ascendente/descendente). O SORT é usado
fora do loop com a seguinte sintaxe:
SORT <itab> BY <field1> <field2>... <fieldn>.

Ordene a segunda lista de vôos do último exercício pela cidade destino.

 Abra o programa no editor.

 Depois do último comando LOOP, insira o comando SORT. Ordene pelo campo CITYTO. A linha a ser
incluída deve ser igual à mostrada abaixo:
SORT <itab> BY CITYTO.

 Inclua outro LOOP no programa para exibir a tabela interna modificada. Separe a lista da tabela original
da lista da tabela alterada por uma quebra de página.
 Cheque a sintaxe e salve o programa.

 Execute o programa. Na tela de seleção, use a variante existente.

No final do relatório o sistema exibirá o conteúdo da tabela interna ordenado por cidade destino.
2.7. Comando IF
O comando IF é utilizado para distinção de casos. Dependo se a expressão lógica <explog> é verdadeira ou
falsa, o sistema efetua procedimentos diferentes entre IF e ENDIF.

IF <explog>.
procedimento 1
ELSE.
procedimento 2
ENDIF.

Neste exemplo, o sistema executa o procedimento 1 se a expressão lógica <explog> for verdadeira. Se for
falsa, o sistema executa o procedimento 2.

O ELSE é opcional.

2.8. Exemplo de programa com tabela interna


*&---------------------------------------------------------------- *

Page 50 of 105
POOL CONSULTORIA E TREINAMENTO LTDA

Curso ABAP/4 e SAPSCRIPT

*& Report RSAATME9 *


*&---------------------------------------------------------------- *
*& Cria, exibe, modifica uma tabela interna e deleta entradas *
*& *
*&---------------------------------------------------------------- *
REPORT RSAATME9 .

TABLES: SPFLI.

*{ Declara estrutura STRUCTURE


TYPES: BEGIN OF STRUCTURE,
CARRID LIKE SPFLI-CARRID,
CONNID LIKE SPFLI-CONNID,
CITYFROM LIKE SPFLI-CITYFROM,
CITYTO LIKE SPFLI-CITYTO,
END OF STRUCTURE.
*} Fim da declaração da estrutura STRUCTURE

*} Declara tabela interna ITAB


DATA: ITAB TYPE STRUCTURE OCCURS 0.

Declara área de trabalho para tabela interna ITAB


DATA: WA TYPE STRUCTURE.

*{ Evento GET SPFLI, preenche tabela interna


GET SPFLI.
MOVE-CORRESPONDING SPFLI TO WA.
APPEND WA TO ITAB.
*} Fim do evento GET SPFLI

*{Início do processamento da tabela interna ITAB


END-OF-SELECTION.

*{ Primeiro LOOP para exibição e modificação da tabela interna original


LOOP AT ITAB INTO WA.
WRITE: / WA-CARRID,
WA-CONNID,
WA-CITYFROM,
WA-CITYTO.
* Modifica a linha corrente da tabela interna
IF WA-CONNID = '0400'.
WA-CONNID = '0401'.
MODIFY ITAB FROM WA.
ENDIF.
ENDLOOP.
*} Fim do primeiro LOOP

*{Quebra de página para separar listas

Page 51 of 105
POOL CONSULTORIA E TREINAMENTO LTDA

Curso ABAP/4 e SAPSCRIPT

NEW-PAGE.

*{ Segundo LOOP para exibir a tabela interna previamente modificada


e deletar um elemento da tabela
LOOP AT ITAB INTO WA.
WRITE:/ WA-CARRID,
WA-CONNID,
WA-CITYFROM,
WA-CITYTO.
* Deleta linha corrente da tabela interna
IF WA-CONNID ='0402'.
DELETE ITAB.
ENDIF.
ENDLOOP.
*} Fim do segundo LOOP

*{ Quebra de página para separar listas


NEW-PAGE.

*{ Terceiro LOOP para exibir mais uma modificação da tabela interna


LOOP AT ITAB INTO WA.
WRITE:/ WA-CARRID,
WA-CONNID,
WA-CITYFROM,
WA-CITYTO.
ENDLOOP.
*} Fim do terceiro LOOP

Quebra de página para separar listas


NEW-PAGE.

Ordena tabela interna pelo campo CITYTO


SORT ITAB BY CITYTO.

*{ Quarto LOOP para exibir a tabela internal


LOOP AT ITAB INTO WA.
WRITE:/ WA-CARRID,
WA-CONNID,
WA-CITYFROM,
WA-CITYTO.
ENDLOOP.
*} Fim do quarto LOOP

2.9. Processamento de níveis de controle


O processamento de níveis de controle nos permite criar blocos de instrução dentro de uma estrutura LOOP-
ENDLOOP, que são processados apenas para determinadas linhas da tabela interna.

Page 52 of 105
POOL CONSULTORIA E TREINAMENTO LTDA

Curso ABAP/4 e SAPSCRIPT

Estes blocos de instrução começam com o comando AT e terminam com ENDAT:

AT <linha>.
<bloco de instruções>
ENDAT.

A linha de condição <linha>, pode ser uma das seguintes:

FIRST A primeira linha da tabela interna


LAST A última linha da tabela interna
NEW <campo> O início de um grupo de linhas com o mesmo
conteúdo em <campo> e nos campos superiores
END OF <campo> O fim de um grupo de linhas com o mesmo conteúdo
em <campo> e nos campos superiores.

A ordem dos campos é determinada pela seqüência na qual os campos da tabela interna foram declarados.
Um campo superior a <campo> é declarado antes de <field>. Um campo inferior a <field> é declarado depois
de <field>.

Quando estiver escrevendo níveis de controle, certifique-se de que, dependendo da seqüência da declaração
dos campos da tabela interna, você adere à ordem dos níveis de controle individuais dentro do loop como
mostrado abaixo:

REPORT DEMO.
...
DATA: BEGIN OF ITAB OCCURS 0,
F1...,
F2...,
F3...,
END OF ITAB.

DATA: AB LIKE ITAB.


...
SORT ITAB BY F1 F2.
LOOP AT ITAB INTO AB.
AT FIRST.
<instruções>.
ENDAT.
AT NEW F1.
<instruções>.
ENDAT.
AT NEW F2.
<instruções>.
ENDAT.
<processamento individual do registro>
AT END OF F2.

Page 53 of 105
POOL CONSULTORIA E TREINAMENTO LTDA

Curso ABAP/4 e SAPSCRIPT

<instruções>.
ENDAT.
AT END OF F1.
<instruções>
ENDAT.
AT LAST.
<instruções>
ENDAT.
ENDLOOP.

2.9.1. Programação do processamento de níveis de controle


Neste exercício, vamos processar níveis de controle

Crie um novo programa. Defina uma tabela interna e preencha-a com dados das tabelas do banco de
dados SPFLI e SFLIGHT, usando o banco de dados lógico F1S. Inclua os seguintes campos na tabela
interna:

Use processamento de níveis de controle para exibir um comentário antes de começar a exibir dados.
Depois crie a seguinte lista:
Use cores diferentes para exibição de campos e altere o cabeçalho. Após a exibição do último registro,
exiba outro comentário.

Se encontrar algum problema na programação, veja o item 3.9.3. (programa exemplo)

 Crie um novo programa. Use o banco de dados lógico F1S.

 Declare as tabelas do banco de dados.

 Declare a estrutura contendo os campos relevantes

 Declare uma tabela interna e uma área de trabalho para a mesma.

 No evento GET SPFLI, mova os dados da tabela SPFLI para os campos correspondentes da área de
trabalho da tabela interna.

 No evento GET SFLIGHT, mova os dados da tabela SFLIGHT para os campos correspondentes da
área de trabalho da tabela interna.

 Insira o conteúdo da área de trabalho para a tabela interna.

Page 54 of 105
POOL CONSULTORIA E TREINAMENTO LTDA

Curso ABAP/4 e SAPSCRIPT

 Inicie o processamento da tabela interna no evento END-OF-SELECTION.

 Inicie o processamento de níveis de controle usando a condição de linha AT FIRST e liste um


comentário com o comando WRITE .

 Use a condição de linha AT CITYFROM para exibir o campo CITYFROM na cor COLOR_KEY.

 Use a condição de linha AT CITYTO para exibir o campo CITYTO na cor COL_HEADING, iniciando a
exibição na posição 20.

 Use a condição de linha AT CONNID para exibir os campos CARRID e CONNID na cor
COL_POSITIVE.

 Exiba os campos FLDATE, SEATSOCC, and SEATSMAX.

 Use a condição de linha AT LAST para exibir um comentário após exbir todos os dados da tabela
interna.

 Cheque se a ordem do processamento de nível de controle corresponde à ordem em que os campos


da tabela interna foram declarados. Se necessário, modifique a declaração dos campos.

 Cheque a sintaxe e salve o programa.

 Execute o programa e crie uma variante na tela de seleção.

 Modifique o cabeçalho execute o programa novamente.

2.9.2. Calculo de totais


Vamos calcular o número total de assentos ocupados e o número máximo de assentos que podem ser
ocupados para cada vôo. Depois calcularemos p total geral ara toda a linha aérea.
 Abra no editor o programa que criamos no último exercício.

 Na condição de linha AT END OF CONNID, use o comando SUM para calcular o número total de
assentos ocupados e de assentos disponíveis.

Page 55 of 105
POOL CONSULTORIA E TREINAMENTO LTDA

Curso ABAP/4 e SAPSCRIPT

O comando SUM soma o conteúdo de todos os campos numéricos do controle de nível específico e
move os totais para a área de trabalho.

 Exiba os totais do nível de controle.

 Exiba o total dos assentos ocupados e dos assentos disponíveis na condição de linha AT END OF
CARRID.

 Cheque a sintaxe e salve o seu programa.

 Execute o programa.

2.9.3. Programa exemplo de processamento de níveis de controle


*&---------------------------------------------------------------*
*& Report RSAATMEA
*&---------------------------------------------------------------*
*& Processamento de níveis de controle da tabela interna ITAB
*&---------------------------------------------------------------*
REPORT RSAATMEA .

* Declara tabelas do banco de dados


TABLES: SFLIGHT, SPFLI.

* Declara estrutura STRUCTURE


TYPES: BEGIN OF STRUCTURE,
CITYFROM LIKE SPFLI-CITYFROM,
CITYTO LIKE SPFLI-CITYTO,
CARRID LIKE SPFLI-CARRID,
CONNID LIKE SPFLI-CONNID,
FLDATE LIKE SFLIGHT-FLDATE,
SEATSMAX LIKE SFLIGHT-SEATSMAX,
SEATSOCC LIKE SFLIGHT-SEATSOCC,
END OF STRUCTURE.

*} Declara tabela interna ITAB


DATA: ITAB TYPE STRUCTURE OCCURS 0.

Declara área de trabalho para tabela interna ITAB


DATA: WA TYPE STRUCTURE.

*Lê SPFLI e move para a área de trabalho da tab interna


GET SPFLI.
MOVE-CORRESPONDING SPFLI TO WA.

*Lê SFLIGHT, move p/ área de trab da tab int e preenche a tab int

Page 56 of 105
POOL CONSULTORIA E TREINAMENTO LTDA

Curso ABAP/4 e SAPSCRIPT

GET SFLIGHT.
MOVE-CORRESPONDING SFLIGHT TO WA.
APPEND WA TO ITAB.

* Ações após leitura do banco de dados lógico


END-OF-SELECTION.

* Ordena tab int


SORT ITAB BY CITYFROM CITYTO CARRID CONNID SEATSOCC.

* Inicia processamento níveis de controle


LOOP AT ITAB INTO WA.

* Nível de controle: início processamento


AT FIRST
WRITE / 'Start output internal table'.
ULINE.
ENDAT.

* Nível de controle: novo conteúdo em WA-CITYFROM


AT NEW CITYFROM.
WRITE / WA-CITYFROM COLOR COL_KEY.
ENDAT.

* Nível de controle: novo conteúdo em WA-CITYTO


AT NEW CITYTO.
WRITE /20 WA-CITYTO COLOR COL_HEADING.
ENDAT.

* Nível de controle: novo conteúdo em WA-CONNID


AT NEW CONNID.
WRITE /20 WA-CARRID COLOR COL_POSITIVE.
WRITE 25 WA-CONNID COLOR COL_POSITIVE.
ENDAT.

* Processamento de registros singulares


WRITE /20 WA-FLDATE COLOR COL_NORMAL.
WRITE: WA-SEATSOCC COLOR COL_NORMAL,
WA-SEATSMAX COLOR COL_NORMAL.

* Nível de controle após exibição de todos os registros de WA-CONNID


AT END OF CONNID.
SUM.
WRITE:/ WA-SEATSOCC COLOR COL_TOTAL UNDER WA-SEATSOCC,
WA-SEATSMAX COLOR COL_TOTAL.
ULINE.
ENDAT.

Page 57 of 105
POOL CONSULTORIA E TREINAMENTO LTDA

Curso ABAP/4 e SAPSCRIPT

* Nível de controle após exibição de todos os registros de WA-CARRID


AT END OF CARRID.
SUM.
WRITE:/ WA-SEATSOCC COLOR COL_TOTAL INTENSIFIED
UNDER WA-SEATSOCC,
WA-SEATSMAX COLOR COL_TOTAL INTENSIFIED.
ULINE.
ENDAT.
ENDLOOP.
*} Fim do processamento de níveis de controle

3. RELATÓRIO INTERATIVO

3.1. Conceito de Relatório Interativo


Com relatórios interativos, o usuário pode recuperar e exibir dados durante a sessão. Ao invés de criar
relatórios extensos e detalhados, Você pode criar um relatório básico com informações condensadas, de onde
o usuário pode extrair informações detalhadadas posicionando o cursor na linha desejada e executando
comandos interativamente.

A informação detalhada aparecerá em relatórios secundários. Os relatórios secundários também podem ser
interativos.

Page 58 of 105
POOL CONSULTORIA E TREINAMENTO LTDA

Curso ABAP/4 e SAPSCRIPT

3.2. Novos Eventos


Os relatórios interativos oferecem mais alguns eventos:

AT LINE-SELECTION Momento em que o usuário seleciona uma


linha através do duplo clique do mouse ou da
tecla de função F2 .
AT USER-COMMAND Momento em que o usuário pressiona uma
tecla de key.
TOP-OF-PAGE DURING LINE-SELECTION Momento durante o processamento de um
relatório secundário em que uma nova página se
inicia.

3.3. Criação de lista secundária


Para selecionar uma lista secundária, temos que armazenar o conteúdo da linha selecionada no primeiro
relatório.

Para fazer isso, usamos o comando HIDE.

No código do programa, insira o comando HIDE depois do comando WRITE.


HIDE: WA-CONNID, WA-CARRID.

Este comando diz ao sistema para armazenar os campos WA-CONNID e WA-CARRID e transferir o conteúdo
destes campos para uma lista secundária.

Além do comando HIDE, você precisa de um evento que ocorrerá quando um usuário selecionar uma linha. O
evento para o duplo clique do mouse na linha é AT LINE-SELECTION. A tecla de função F2 ou o código de
função PICK também acionam este evento.

No exercício abaixo usaremos o programa do último exercício como nosso relatório básico. O relatório
secundário conterá dados de booking da tabela SBOOK para o vôo selecionado.

 Abra no editor o programa do último exercício.

 Insira um comando HIDE no processamento dos níveis de controle. Você vai usar o HIDE apenas para
as linhas aonde aparece a data do vôo. Armazene os campos CONNID, CARRID, e FLDATE da área de
trabalho da tabela interna.
 Insira o evento AT LINE-SELECTION.

 Exiba na tela a linha aérea, o nº vôo e a data do vôo. Depois insira uma linha horizontal.

Page 59 of 105
POOL CONSULTORIA E TREINAMENTO LTDA

Curso ABAP/4 e SAPSCRIPT

 Leia na tabela SBOOK os registros dos vôos selecionados no relatório básico. Lembre-se de declarar
SBOOK .

 Exiba os dados do booking BOOKID, CUSTOMID, e ORDER_DATE numa linha nova.

 Cheque a sintaxe e salve seu programa.

 Execute o programa. No relatório básico, selecione um vôo clicando na linha correspondente. O sistema
exibirá uma lista contendo dados do booking deste vôo

 Melhore o layout da lista secundária. Se você quiser pode exibir um cabeçalho para este relatório. Note
que para listas secundárias, o sistema não cria cabeçalho padrão. Você tem que usar o comando WRITE
para exibir o cabeçalho.

3.4. Selecionando apenas linha válidas


No exercício anterior você deve ter notado que, mesmo selecionando uma linha sem dados, o sistema chama
o relatório secundário. Mesmo se você já estiver na lista secundária, e selecionar alguma linha, o sistema
chamará a lista secundária. Para evitar que isso aconteça o ABAP oferece várias soluções O exercício abaixo
apresenta uma solução utilizando as características do comando HIDE.

Este exercício mostra como checar se o usuário selecionou uma linha válida:

 Abra no editor o programa do exercício anterior.

 Na última linha do bloco de processamento END-OF-SELECTION, vamos deletar o conteúdo da área de


trabalho da tabela interna. Use o comando CLEAR :
CLEAR wa.

Page 60 of 105
POOL CONSULTORIA E TREINAMENTO LTDA

Curso ABAP/4 e SAPSCRIPT

 No início do bloco de comandos do evento AT LINE-SELECTION, cheque se o campo CARRID da área


de trabalho esta vazio. Se estiver, termine o processamento. Use o comando CHECK t:
CHECK NOT wa-CARRID IS INITIAL.

No final do bloco de processamento de AT LINE-SELECTION, vamos deletar o conteúdo da área de


trabalho para garantir que o usuário não possa solicitar outro relatório secundário, clicando numa linha do
mesmo.

Cheque a sintaxe e salve o programa.

Execute o programa e selecione uma linha inválida. Não deve aparecer nenhuma lista secundária.

3.5. Definição de interfaces de usuário (GUI)


SAP gera automáticamente uma interface gráfica de usuário (GUI) para os relatórios. Esta GUI oferece
funções básicas para o processamento de relatórios, tais como gravação e impressão do relatório. Se você
quiser incluir funções adicionais, tais como botões, tem que definir seu próprio status de interface. Além disso
você também pode modificar o GUI Título.

Para criar um novo status, O Workbench dispõe do Menu Painter. Com o Menu Painter, podemos criar menus
e application toolbars (contendo os pushbuttons). Podemos ainda, atribuir teclas de função a determinadas
funções.

No exercício abaixo, criaremos um status e um GUI Título para o relatório básico.


Abra no editor, o programa do último exercício.

 No início do bloco do evento AT END-OF-SELECTION, ative o status da lista básica usando o seguinte
comando:
SET PF-STATUS ‘STATUS’.

Note que você deve especificar o nome do status em letras maiúsculas.

 Cheque a sintaxe e salve o programa.

 Dê um duplo clique no nome do status. Uma janela aparecerá, perguntando se deseja criar o status de
nome STATUS. Confirme.

 Entre com uma descrição breve para o status que deseja criar.

 Clique em List as status type. O sistema automaticamente copia as funcionalidades standard para
relatórios em seu status.

 Clique em Enter. A janela Maintain status aparecerá.

 Clique em Exibir standards.

Page 61 of 105
POOL CONSULTORIA E TREINAMENTO LTDA

Curso ABAP/4 e SAPSCRIPT

 O sistema exibirá os menus standard da forma abaixo:

 Substitua o nome do menu <List> por Dados de vôo.

 Dê um duplo clique no menu Dados de vôo.

 O sistema exibirá uma lista de opções de menus standard. Para definir opções de menu, entre valores
válidos no campo Func.

 Posicione o cursor na linha no topo do menu e selecione:


Edit → Insert → Entry.

 Entre com a seguinte opção de menu:

PICK Display Booking data

O código de função PICK, aciona o evento AT LINE-SELECTION.

 Mova o cursor para a linha Application toolbar:

Page 62 of 105
POOL CONSULTORIA E TREINAMENTO LTDA

Curso ABAP/4 e SAPSCRIPT

 No primeiro campo de entrada da application toolbar, entre com o código de função PICK e pressione
ENTER .

O sistema automaticamente atribui um simbolo a esta função, que é pré-definido pelo sistema.

 Salve o status e clique em Generate.

Seu programa agora pode usar a interface.

 Clique em Back. O sistema termina a transação de manutenção de status e volta para o editor de
programa.

 Na próxima linha do programa, ative o GUI Título usando o comando:


SET TITLEBAR ‘XXX’.

Escolha um nome com mais de 3 caracteres. Da menma forma que o nome do status, você tem que usar
letras maiúsculas.

 Cheque a sintaxe e salve o programa.

 Dê um duplo clique no nome <XXX>. Uma janela aparecerá perguntando se deseja criar o título.
Confirme.

 Entre com um título para seu relatório e clique em Salvar. O sistema voltará para o editor de programa.

 Execute o programa. O sistema exibirá o relatório básico com os novos status e GUI Título. Teste as
funções que você definiu.

3.6. Exemplo do programa do relatório interativo


*&-----------------------------------------------------------------*
*& Report RSAATME2
*&-----------------------------------------------------------------*
*& *
*&-----------------------------------------------------------------*
REPORT RSAATME2 .

Declara tabelas do banco de dados


TABLES: SFLIGHT, SPFLI, SBOOK.

Declara estrutura STRUCTURE


TYPES: BEGIN OF STRUCTURE,
CITYFROM LIKE SPFLI-CITYFROM,

Page 63 of 105
POOL CONSULTORIA E TREINAMENTO LTDA

Curso ABAP/4 e SAPSCRIPT

CITYTO LIKE SPFLI-CITYTO,


CARRID LIKE SPFLI-CARRID,
CONNID LIKE SPFLI-CONNID,
FLDATE LIKE SFLIGHT-FLDATE,
SEATSMAX LIKE SFLIGHT-SEATSMAX,
SEATSOCC LIKE SFLIGHT-SEATSOCC,
END OF STRUCTURE.

*} Declara tabela interna ITAB


DATA: ITAB TYPE STRUCTURE OCCURS 0.

* Declara área de trabalho da tabela interna


DATA: WA TYPE STRUCTURE.

* Lê registros da SPFLI e move p/ área de trabalho da ITAB


GET SPFLI.
MOVE-CORRESPONDING SPFLI TO WA.

* Lê registros da SFLIGHT e move p/ área de trabalho da ITAB


GET SFLIGHT.
MOVE-CORRESPONDING SFLIGHT TO WA.
APPEND WA TO ITAB.

* Ações após leitura do banco de dados lógico


END-OF-SELECTION.

* Define interface de usuário


SET PF-STATUS 'GRUND'.
SET TITLEBAR 'GRU'.

* Ordena tabela interna


SORT ITAB BY CITYFROM CITYTO CARRID CONNID SEATSOCC.

* Inicio do processamento de níveis de controle


LOOP AT ITAB INTO WA.

* Nível de controle, primeiro registro


AT FIRST.
WRITE / 'Start output internal table'.
ULINE.
ENDAT.
* Nível de controle, novo conteúdo em WA-CITYFROM
AT NEW CITYFROM.
WRITE / WA-CITYFROM COLOR COL_KEY.
ENDAT.

* Nível de controle, novo conteúdo em WA-CITYTO


AT NEW CITYTO.

Page 64 of 105
POOL CONSULTORIA E TREINAMENTO LTDA

Curso ABAP/4 e SAPSCRIPT

WRITE /20 WA-CITYTO COLOR COL_HEADING.


ENDAT.

* Nível de controle, novo conteúdo em WA-CONNID


AT NEW CONNID.
WRITE /20 WA-CARRID COLOR COL_POSITIVE.
WRITE 25 WA-CONNID COLOR COL_POSITIVE.
ENDAT.

* Processa registros singulares


WRITE /20 WA-FLDATE COLOR COL_NORMAL.
WRITE: WA-SEATSOCC COLOR COL_NORMAL,
WA-SEATSMAX COLOR COL_NORMAL.

* Preenche a área HIDE


HIDE: WA-CONNID, WA-CARRID, WA-FLDATE.

* Nível de controle, no fim da exibição de todos os WA-CONNID


AT END OF CONNID.
SUM.
WRITE:/ WA-SEATSOCC COLOR COL_TOTAL UNDER WA-SEATSOCC,
WA-SEATSMAX COLOR COL_TOTAL.
ULINE.
ENDAT.

* Nível de controle, no fim da exibição de todos os WA-CARRID


AT END OF CARRID.
SUM.
WRITE:/ WA-SEATSOCC COLOR COL_TOTAL INTENSIFIED UNDER WA-SEATSOCC,
WA-SEATSMAX COLOR COL_TOTAL INTENSIFIED.
ULINE.
ENDAT.
ENDLOOP.
*} Fim do processamento de níveis de controle

* Limpa a área de trabalho


CLEAR WA.

*{ Início da lista secundária após duplo clique na linha


AT LINE-SELECTION.
WRITE:/ 'Airline: ',WA-CARRID,
/ 'Flight connection:',WA-CONNID,
/ 'Flight date: ',WA-FLDATE.
ULINE.

Lê a tabela SBOOK
SELECT * FROM SBOOK
WHERE CARRID = WA-CARRID

Page 65 of 105
POOL CONSULTORIA E TREINAMENTO LTDA

Curso ABAP/4 e SAPSCRIPT

AND CONNID = WA-CONNID


AND FLDATE = WA-FLDATE .
WRITE:/ SBOOK-BOOKID,
SBOOK-CUSTOMID,
SBOOK-ORDER_DATE.
ENDSELECT.

Limapa área de trabalho


CLEAR WA.

4.2. O Repository Browser ( SE80 )


O Repository Browser é uma ferramenta especial do Workbench. Como uma aplicação é constituída por
vários objetos de desenvolvimento que se relacionam, seria difícil para o desenvolvedor enxergar estes
relacionamentos. Através do Repository Browser tem-se a visão de todos os objetos de uma aplicação e
seus relacionamentos.

Page 66 of 105
POOL CONSULTORIA E TREINAMENTO LTDA

Curso ABAP/4 e SAPSCRIPT

O Repository Browser, chama automaticamente outras ferramentas quando necessário. Por exemplo, pode-
se criar uma definição de dados de dentro do Repository Browser. Neste caso o browser chama o Dictionary
e, após a criação da definição de dados, retorna à sua tela inicial.

Pode-se criar uma aplicação inteira usando o Repository Browser, sem chamar diretamente nenhuma das
outras ferramentas, aliás este é o método recomendado, pois se tem uma visão de todos os objetos que
forem sendo criados.

4.3. Criando um programa


Para criar um programa a partir do Repository Browser proceda da seguinte forma:

 Digite SE80 ( Editor ABAP).

 Digite Nome do programa començando com `Z`ou `Y ` ( porgramas não Standard ).

 Na tela Program Attributes digite Titulo do Programa

Page 67 of 105
POOL CONSULTORIA E TREINAMENTO LTDA

Curso ABAP/4 e SAPSCRIPT

 Escolha o Tipo do programa Executable Program, o Status TEST PROGRAM, e Aplicação ,BASIS para
este curso.Aperte o Botão SAVE. Será precisso defilnir como objeto local.

Page 68 of 105
POOL CONSULTORIA E TREINAMENTO LTDA

Curso ABAP/4 e SAPSCRIPT

 Certifique-se de que a opção Programa está selecionada e clique no botão Criar. O sistema solicita
confirmação da seleção.

 Certifique-se de que o nome do programa está correto e que Com include TOP está marcado.

 Tecle ENTER. O sistema exibe um nome para o arquivo include TOP. Este nome poderá ser modificado
se desejado.

 Tecle ENTER. O sistema exibirá a tela de atributos do programa.

 Entre com os atributos do seu programa conforme abaixo:

 Salve os atributos.

O sistema criará seu programa e o arquivo include.


Use o Repository Browser para abrir o programa e o include. A lista de objetos deverá conter o programa e o
include que você criou.

Page 69 of 105
POOL CONSULTORIA E TREINAMENTO LTDA

Curso ABAP/4 e SAPSCRIPT

4.4. Criando uma transação

Para criar uma transação através do Repository browser, vá para sua lista de objetos e proceda da seguinte
forma:

 Abra a pasta Programas e dê um duplo clique no seu programa.

O sistema exibirá a lista de objetos do programa. A lista exibida mostra os objetos relacionados com seu
programa. Neste momento a lista deverá apresentar apenas o programa que criamos e o seu arquivo
include.

 Dê um duplo clique na pasta Ctg.Obj. Programa. O sistema solicita o tipo de objeto de desenvolvimento.

 Selecione Transação. Neste momento você deverá escolher um nome para a transação. Use o formato
ZF < xx > onde < xx > são suas iniciais.

 Entre com o nome da transação no campo específico e clique em Criar. O sistema solicitará o tipo de
transação.

 Selecione Transação diálogo e tecle Enter. O sistema solicitará algumas informações adicionais.

 Entre com a seguinte informação:

Texto da transação Create Flight Data


Programa O nome do programa criado no exercício anterior.
Nº Tela 100

 Salve seu trabalho. O sistema criará a nova transação.

Page 70 of 105
POOL CONSULTORIA E TREINAMENTO LTDA

Curso ABAP/4 e SAPSCRIPT

Sua lista de objetos do programa deverá conter agora uma pasta Transações. Abra sua nova transação e
repare na informação associada à transação.

Page 71 of 105
POOL CONSULTORIA E TREINAMENTO LTDA

Curso ABAP/4 e SAPSCRIPT

5.2 TRABALHANDO COM TELAS


Usado para controle do fluxo de telas (SCREEN PAINTER), chamando um módulo (subrotina) associada a um
MODULE POOL.
MODULE <mod1> [ON REQUEST]

[ON INPUT]

[AT EXIT-COMMAND]

[AT CURSOR-SELECTION].

<statements>

ENDMODULE.

Exemplo:

**** Screen flow logic: ****

PROCESS AFTER INPUT.


MODULE EXIT AT EXIT-COMMAND.

**** ABAP module: ****

MODULE EXIT INPUT.


CASE OK_CODE.
WHEN 'NEW'.
CLEAR: SPFLI, OK_CODE.
LEAVE SCREEN.
WHEN 'CANC'.
CLEAR OK_CODE.
SET SCREEN 0. LEAVE SCREEN.
ENDCASE.
ENDMODULE.

Page 72 of 105
POOL CONSULTORIA E TREINAMENTO LTDA

Curso ABAP/4 e SAPSCRIPT

5.2.1 Criando uma tela

A criação e manutenção de uma tela ABAP é feita no Screen Painter.

Vamos criar uma tela e identificar seus atributos. Vá para sua lista de objetos programa no Repository Browser
(marque Objetos priv. Locais, clique em exibir, clique em programas, clique duas vezes no seu programa)

 Dê um duplo clique em Ctg.Obj. Programa.

 Clique em Tela.

 No campo adjacente com o número da tela - 100.

 Clique em Criar. O sistema entrará em Modificar Atributos da Tela.

 Entre com a seguinte informação:

Descrição breve Create Flight Data


Ctg. Tela Normal
TeDin segnt 100

Page 73 of 105
POOL CONSULTORIA E TREINAMENTO LTDA

Curso ABAP/4 e SAPSCRIPT

Os programas ABAP podem determinar a seqüência de tela dinamicamente. Isto significa que não é
necessário especificar uma tela diferente para o próximo atributo de tela.

 Salve a tela e retorne à lista de objetos programa.

Agora temos a pasta Telas em nossa lista de objetos programa. A seguir iremos popular a nova tela com
elementos gráficos.

5.2.2 Colocando elementos gráficos na tela

Utilizaremos agora o editor fullscreen do Screen Painter para adicionar elementos gráficos à nossa tela.

Estando na lista de objetos programa proceda da seguinte forma:

 Selecione Tela 100 e clique em Modificar. O browser exibirá o Fluxo Lógico da tela.

 Clique em Tela completa. O sistema abrirá o editor fullscreen do Screen Painter .

 Clique em Dict/campos de prog. O Screen Painter exibirá uma janela com os campos. Use esta janela
para copiar campos já existentes de uma tabela ou programa para sua tela.

 Entre com o nome de sua tabela no campo Nome tabela/campo.

 Clique em Chamar do DDIC. O sistema exibirá a lista de campos de sua tabela.

Page 74 of 105
POOL CONSULTORIA E TREINAMENTO LTDA

Curso ABAP/4 e SAPSCRIPT

 Escolha o campo flight ID, clicando no campo à esquerda.

 Marque Padrão e Texto Médio.

 Tecle Enter.

 Utilize o mouse para posicionar campo na tela.

5.2.3 Adicionando o restante dos campos


Vamos criar na tela os elementos restantes:

Arrival/departure city
Arrival/departure date
Arrival/departure time
Regular flight
Charter flight
Snack
Meal
Movie

Page 75 of 105
POOL CONSULTORIA E TREINAMENTO LTDA

Curso ABAP/4 e SAPSCRIPT

 Adicione vários campos ao mesmo tempo selecionando-os na janela Dict./campos de prog. Adicione os
elementos departure city, date, e time utilizando este método. Selecione os campos como um grupo.

Tecle Enter para adiciona-los à tela como um grupo.

Page 76 of 105
POOL CONSULTORIA E TREINAMENTO LTDA

Curso ABAP/4 e SAPSCRIPT

 Adicione o restante dos campos à sua tela. Agrupe os campos arriving city, date, and time da mesma
forma que agrupamos os elementos referentes à partidas. Adicione os campos regular and charter como
grupo também. Finalmente adicione os campos meal, snack, e movie como um bloco.

Se for necessário vários elementos podem ser posicionados utilizando uma "rubber-band" para selecionar todo
um grupo de elementos e depois clicando e arrastando todo o grupo para outra parte da tela.

Você acabou de criar uma interface simples usando o Screen Painter. Para visualizar a tela da forma como
aparecerá para o usuário, selecione no menu:

Tela → Testar.

Faça um teste entrando valores nos campos.

5.2.4 Incrementando a tela


Vamos modificar dois campos texto para botão de rádio e adicionar títulos e boxes para definir áreas
diferentes na tela.

5.2.4.1 Convertendo Campos em Botão de rádio


Os campos Regular e Charter descrevem dois tipos de vôo. Um vôo pode ser charter ou regular.

Os botões de rádio são usados para indicar uma única opção dentre várias apresentadas. Para converter
campos texto em botões de rádio, abra a tela 100 no editor fullscreen do Screen Painter e proceda da
seguinte forma:

 Use uma "rubber-band" para selecionar os campos Regular e Charter .

 Selecione no menu:

Processar → Compilar → Botão de rádio → Botão esquerda.

O Screen Painter converterá os campos em botões de rádio.

Agora precisamos agrupar os botões de rádio.

 Selecione no menu:

Processar → Agrupamento → Grupo botões seleção →Definir

 Salve suas alterações.

Page 77 of 105
POOL CONSULTORIA E TREINAMENTO LTDA

Curso ABAP/4 e SAPSCRIPT

5.2.4.2 Adicionando um Box

Pode ser adicionado um box envolvendo elementos da tela para indicar que eles estão
relacionados.

 Selecione a ferramenta Quadro da barra de ferramentas do Screen Painter.

 Posicione o cursor na área de trabalho.

 Desenhe um box em volta das informações de vôo da tela clicando e arrastando com o mouse.

 Com o box selecionado, no campo Texto digite Schedule, que será o título do nosso box .

 Repita os passos 1 a 3 para criar um box em volta do grupo de radio button.

 Dê o título do novo box de Classification .

 Salve suas alterações.

5.2.4.3 Convertendo campos em Campos de seleção

Os campos de seleção são usados para marcar ou desmarcar um determinado item. Quando um item está
marcado uma marca aparece no box. Para adicionar campos de seleção proceda da seguinte forma:

 Selecione os campos Snack, Meal, e Movie.

 Selecione no menu:

Processar → Compilar → Campo de seleção → Botão esquerda.

O Screen Painter converterá os campos em campos de seleção. Como cada campo de seleção é uma

opção individual, não precisamos agrupa-los.

 Salve suas alterações.

 Teste a nova tela.

5.2.5 Checando o Layout da tela

 Abra a tela 100 no editor fullscreen. Cheque o layout da tela selecionando no menu:

Page 78 of 105
POOL CONSULTORIA E TREINAMENTO LTDA

Curso ABAP/4 e SAPSCRIPT

Tela → Verificar → Layout.

O sistema irá listar os erros do seu layout.

Você pode usar a janela de atributos para ajustar rapidamente a posição de um elemento,
conforme procedimento abaixo:
 Selecione o elemento.

 Clique em Atributos. O sistema exibirá os atributos do elemento.

 Entre com um novo valor no campo Line. Esse campo determina a posição vertical do elemento.

 Entre com um novo valor no campo Column. Esse campo determina a posição vertical do elemento.

 Clique em Fechar. O sistema irá alterar a posição do elemento.

 Teste as alterações da tela 100. Você notará a diferença na posição dos elementos da tela.

5.2.6 Setando o campo OK

Page 79 of 105
POOL CONSULTORIA E TREINAMENTO LTDA

Curso ABAP/4 e SAPSCRIPT

Todas as telas SAP possuem um único OK code. Esse OK code é usado para passar informações da tela para
a aplicação. Para setar o OK code, entre na tela Exibir Fluxo Lógico e proceda da seguinte forma:

 Clique em Lista de campos ou, se a tela já estiver aberta no modo de alteração, selecione no menu:

Saltar → Visões lista campos → Tipo de campo

O sistema exibirá a lista de campos da sua tela.

 Pagine para baixo até encontrar OK na coluna TpCpo O nome do campo para esta especificação estará
vazio.

 Entre OK-CODE no Nome de campo. O campo OK-CODE está disponível em todas as telas. Ele é um
elemento invisível, portanto não aparece no editor fullscreen do Screen Painter.

 Salve suas alterações.

Para checar o que foi feito, exiba a lista de Atributos totais da sua tela. O campo OK-CODE deverá aparecer no
final da lista.

5.3 TRABALHANDO COM STATUS GUI


No ABAP utilizamos duas ferramentas para criar uma GUI. O Screen Painter para criar telas que contém
elementos gráficos e o Menu Painter para criar componentes de interface. Esses componentes são os seguintes:

Status Determina a combinação de barra de menu, barra de botões, atribuição de teclas,


e funções disponíveis para uma interface. Por exemplo, uma aplicação de editor
de textos deve ter dois status: editar e visualizar. No status editar, a função copiar
está disponível e no status visualizar a função copiar está indisponível.
Barra de menu Determina as funções disponíveis para o usuário. A localização das funções
depende do tipo de janela. Se a janela for modal, as funções aparecem como
botões na parte de baixo da mesma. (ver figura abaixo). Na janela primária, as
funções podem aparecer como menus ou como botões na barra de ferramentas.
Lista do menu Lista os itens num menu específico. Por exemplo, um menu editar deve conter
itens como copiar, cortar e colar.
F-key settings Determina teclas associadas a uma função específica da interface.
Functions Determina funções individuais tais como copiar, cortar e colar.
Titles Determina título de janelas para uma interface.

Funções numa janela modal.

Page 80 of 105
POOL CONSULTORIA E TREINAMENTO LTDA

Curso ABAP/4 e SAPSCRIPT

Os componentes podem ser compartilhados entre vários status. Por exemplo, podemos criar uma função delete.
Depois esta função pode ser utilizada no status de uma aplicação de editor, numa aplicação de gerenciamento de
arquivos e numa aplicação de contabilidade.

5.3.1 Criando um Status GUI


Um Status GUI é associado a uma tela específica ou a uma série de telas. Iremos criar um status GUI para a
tela que criamos anteriormente:

 Abra a sua lista de objetos locais.

 Dê um duplo clique no programa que criamos. Clique em Ctg.obj. programa.

 Selecione Status GUI e entre com 100 no campo status. A informação entrada no campo status é usada
como identificador do status. Se você preferir, pode especificar um identificador relacionado à função do
status. Nesse caso o nome poderia ser createflt .

 Clique em Create. O sistema exibirá a janela de Criar status.

 Entre com Create Flight Data no campo Texto breve.

 Selecione Status de diálogo.

 Tecle Enter. O sistema exibirá a janela de manutenção de status.

 Salve o novo status.

Como um status é um objeto de programação, o sistema criou uma nova pasta status GUI na sua lista de
objetos programa. Cheque o conteúdo da pasta para certificar-se de que o novo status está lá.

Page 81 of 105
POOL CONSULTORIA E TREINAMENTO LTDA

Curso ABAP/4 e SAPSCRIPT

5.3.2 Adicionando Menus à sua interface


Abra no browser a sua lista de objetos programa e faça o seguinte:

 Abra o status criado. O sistema exibirá a janela de manutenção de status.

Certifique-se de que o status esteja em modo de alteração. Nesse exemplo usaremos os menus default
standard.

 Clique em Fundir normas. O sistema exibira os menus standard default.

Substitua o menu <Object> por Flight, digitando o novo nome em cima do antigo .

 Dê um duplo clique em Flight . O sistema exibirá uma lista dos itens do menu standard. Para definir
itens de menu, você deve entrar valores válidos na coluna Cód. e Texto

 Entre com os seguintes itens de menu:


CREA Create
UPDA Change
DISP Display
DELE Delete

Page 82 of 105
POOL CONSULTORIA E TREINAMENTO LTDA

Curso ABAP/4 e SAPSCRIPT

 Salve suas alterações.

 Teste a nova barra de menus juntamente com a tela de dados Create Flight. Certifique-se de que o
status GUI 100 está aberto e selecione no menu:

Interface de usuário → Testar status.

 Na janela de simulação, entre 100 para o número da tela.

Quando a simulação é executada, note que o sistema traz, além do menu que criamos, mais dois menus:
Sistema e Ajuda.

5.3.3 Definindo teclas de função


Vamos definir teclas de função para o menu que criamos.

Abra o status 100 no seu programa. Certifique-se de estar em modo de alteração, e faça o seguinte:

 Clique em Atribuição de teclas.

 Role a tela para baixo até área de Definições recomendadas de teclas função.

 Entre com DELE como a função e tecla Shift-F2.

 Role a tela para baixo até área de Teclas de função de livre definição

 Preencha as três primeiras teclas com o seguinte:

F5 UPDA Change
F7 DISP Display
F2 CREA Create

 Salve suas alterações.

5.3.4 Especificando Pushbuttons


Pode-se criar um push button para qualquer função que esteja definida para uma tecla de função. Vamos criar
um botão Create correspondente à tecla de função Create que criamos anteriormente.

Abra o status 100 no modo de alteração e faça o seguinte:

 Selecione Barra de Botões.

Page 83 of 105
POOL CONSULTORIA E TREINAMENTO LTDA

Curso ABAP/4 e SAPSCRIPT

 Entre com a função CREA e pressione enter. O sistema automaticamente exibirá o texto create
(lembre-se de que você entrou com esse texto quando definiu a tecla de função).

 Clique na função e o sistema exibirá a janela Atributos de função. No campo Nome de ícone, selecione o
ícone apropriado.

 Entre com as outras funções

DISP
UPDA
DELE

 Adicione as funções SAP default (back, exit, cancel) à Barra de ferramentas.

 Salve suas alterações.

 Use a função Teste para visualizar os novos botões.

5.3.5 Criando um título para a interface


Vamos aprender agora como criar um título para uma tela ou uma janela.

Certifique-se de estar na sua lista de objetos programa e faça o seguinte:

 Selecione a pasta Ctg.obj. programa. O sistema exibirá uma lista de tipo de objetos que podem ser
criados.

 Selecione Título GUI.

 Entre 100 no código do título.

 Clique em Criar. O sistema exibirá a tela Criar título.

 Entre Create Flight Data como título.

 Clique em Salvar.

5.3.6 Gerando o status

Para gerar o novo status, certifique-se de estar na sua lista de objetos programa e faça o seguinte:

 Selecione Status GUI 100.

Page 84 of 105
POOL CONSULTORIA E TREINAMENTO LTDA

Curso ABAP/4 e SAPSCRIPT

 Clique em Gerar. O sistema exibirá uma mensagem dizendo que o status 100 foi gerado.

O sistema criou uma nova pasta na lista de objetos programa. Esta pasta contém todos os títulos de GUI.

Você agora pode usar a função de teste para testar sua interface completa, os títulos, as telas e os menus.
Desta vez, você pode especificar tanto o número da tela como o número do título.

5.4 CODIFICANDO A TRANSAÇÃO


Para completar nossa aplicação, devemos criar as instruções que dirão ao sistema R/3 como processar as
informações entradas pelos usuários. Estas instruções consistem na tela de fluxo lógico e nos módulos ABAP.

O fluxo lógico está associado a cada tela. A fluxo lógico de uma tela está dividido em processamento anterior à
saída (PBO) e processamento após a entrada de dados na tela (PAI). Existem apenas 20 palavras-chave de telas
utilizadas para escrever o fluxo lógico. As palavras-chave podem, por sua vez, referir-se à módulos ABAP.

Os módulos PBO e PAI são módulos ABAP específicos para direcionar o processamento. Esses módulos são
armazenados no pool de módulos da transação.

5.4.1 Escrevendo Fluxo Lógico


Estando na sua Lista de objetos programa, proceda da seguinte forma:

 Abra a tela 100. O sistema entrará no editor de lógica de processamento do screen painter.

 Verifique se a tela está no modo de alteração.

 Entre com a linha “Module initialize_100” após “process before output”.

Page 85 of 105
POOL CONSULTORIA E TREINAMENTO LTDA

Curso ABAP/4 e SAPSCRIPT

 A palavra-chave MODULE identifica o módulo ABAP que define o processamento.


 Após o “process after input” insira o seguinte:

field <tabela>–<campo>.
module fcode_100.

< tabela > é o nome da sua tabela. < campo > é o nome do campo de identificação do vôo.

 Selecione no menu:

Tela → Gerar

Ao gerar a tela você estará salvando suas alterações e gerando uma versão runtime da tela.

Completamos o fluxo lógico da nossa tela. Vamos selecionar no menu:

Tela → Verificar → Sintaxe

 Esta função checa erros no código.

5.4.2 Criando módulos


 Abra a tela 100 no modo de alteração.

 Dê um duplo clique no módulo initialize_100 para abri-lo. O sistema perguntará se deseja criar um
novo módulo. Se o módulo já existir, o sistema trará automaticamente.

 Clique em Sim. O sistema exibirá a janela de criação de módulo PBO. O sistema solicita o nome de um
arquivo include para inserir o módulo.

 Clique em Novo include. Entre com o nome do include no formato MZ < bb > O01 .

 Clique em Continue. O sistema exibirá o arquivo include com o novo módulo initialize_100.

 Salve o novo arquivo include e volte para a janela de fluxo lógico.

 Entre com a linha “Module fcode_100” após “process after input”.

 Repita os passos 1 a 6 para o módulo fcode_100, usando o formato MZ < bb > I01 para o nome do
include.

Page 86 of 105
POOL CONSULTORIA E TREINAMENTO LTDA

Curso ABAP/4 e SAPSCRIPT

5.4.3 Especificando variáveis globais


Na lista de objetos do programa proceda da seguinte forma:

 Selecione o arquivo top include (Já criamos esse arquivo no item 2.1)

 Declare sua tabela com a seguinte instrução:

tables: <tabela>.

Dica: Se você der um duplo clique no nome da tabela, o sistema abrirá a tabela.

 Adicione as seguintes declarações de variáveis:

data answer.
data: ok-code(4), fcode(4).

 Escolha um nome para a classe de mensagem a ser criada no formato z<x> ou


y < x >.

 Complemente a instrução PROGRAM:

program sapmzaaa message-id <xx>.

 Salve as alterações.

 Cheque a sintaxe do programa pelo menu:

Programa → Verificar → Programa atual

5.4.4 Codificando os Módulos

Para entrar com código no editor, proceda da seguinte forma:

 Abra a pasta PBO modules na sua lista de objetos do programa.

 Selecione o módulo INITIALIZE_100 e clique em Modificar

 Abaixo de “module initialize_100 output” entre com o seguinte:

set pf-status ’100’.


set titlebar ’100’.

Page 87 of 105
POOL CONSULTORIA E TREINAMENTO LTDA

Curso ABAP/4 e SAPSCRIPT

 Salve e volte para a lista de programas.

Page 88 of 105
POOL CONSULTORIA E TREINAMENTO LTDA

Curso ABAP/4 e SAPSCRIPT

5.4.4.1 Inserindo Funções do Sistema Automaticamente


 Abra o módulo fcode_100 no modo de alteração.

 Encontre o endif logo após o when space.

 Insira uma linha em branco antes do endif .

 Selecione no menu:

Processar → Estrutura de instrução

 O sistema exibirá a janela de Inserir modelo

 Clique em CALL FUNCTION.

 Entre com POPUP_TO_CONFIRM_LOSS_OF_DATA no local específico.

 Tecle Enter. O sistema insere uma template para a função.

 Entre com o código conforme mostrado a seguir:

message e004 with <tabela> -flid.


else.
call function ' POPUP_TO_CONFIRM_LOSS_OF_DATA '
exporting
textline1 = 'Delete Flight?'
TEXTLINE2 = ' '
titel = 'Attention'
START_COLUMN = 25
START_ROW = 6
importing
answer = answer.
check answer ne 'N'.
delete <tabela>.
clear <tabela>.
message s003 with <tabela>-flid.
endif.

 Salve suas alterações.

 Use a função do menu abaixo para checar a sintaxe do módulo:

Programa → Verificar → Programa atual

Page 89 of 105
POOL CONSULTORIA E TREINAMENTO LTDA

Curso ABAP/4 e SAPSCRIPT

5.4.5 Criando Classe de Mensagem

Abra a lista de objetos do seu programa e proceda da seguinte forma:

 Abra seu arquivo top include.

 Dê um duplo clique no message ID. O sistema perguntará se deseja criar uma nova classe de
mensagens.
 Clique em Sim. O sistema exibirá a tela de manutenção de classe de mensagem.

 No campo Texto breve, entre com:

Flight Application Messages

 Clique em Mensagens. O sistema exibirá a tela de manutenção de mensagens.

 Clique em Atualizar tudo para editar as mensagens.

 Entre com as seguintes mensagens:

Page 90 of 105
POOL CONSULTORIA E TREINAMENTO LTDA

Curso ABAP/4 e SAPSCRIPT

000 Flight already exists


001 Flight & was CREATED successfully.
002 Flight & was UPDATED successfully.
003 Flight & was DELETED successfully.
004 Flight & does not exist.

 Na execução do programa, o sistema substituirá o & pelo Número do Vôo.

 Salve as alterações.
 Para checar se a mensagem foi criada, abra o módulo fcode_100 e dê um duplo clique num message
ID, por exemplo e000 . O sistema mostrará a definição da mensagem.

5.4.6 Testando a transação

Page 91 of 105
POOL CONSULTORIA E TREINAMENTO LTDA

Curso ABAP/4 e SAPSCRIPT

Na lista de objetos do programa, proceda da seguinte forma:

 Selecione seu programa e, no menu, execute:

Objeto desenvolvimento → Gerar/ativar.

 Se houver erro de sintaxe no programa, o sistema exibirá uma mensagem.

 Abra uma segunda sessão do SAP selecionando no menu:

Sistema → Gerar modo.

 Entre com o nome da transação no command field

O sistema iniciará sua transação.

 Crie um vôo.

 Volte para a primeira sessão do SAP e vá para sua lista de objetos locais.

 Abra a pasta Objetos DDIC .

 Clique em Tabelas, Selecione sua tabela e escolha no menu

Objetos desenvolvimento → Testar/Executar

Ou pressione F8.

 Para exibir os dados da sua tabela, selecione através do menu:

Programa → Executar

Ou pressione F8 novamente.

O sistema exibirá todos os vôos criados.

Exercícios adicionais:
 Crie um vôo para o Peru.
 Delete um vôo existente.
 Tente Exibir um vôo que não existe.
 Mofique um vôo existente.
 Verifique se as mensagens serão exibidas corretamente.
 Quando terminar olhe sua tabela novamente.

5.4.7 Executando o Debugger

Page 92 of 105
POOL CONSULTORIA E TREINAMENTO LTDA

Curso ABAP/4 e SAPSCRIPT

O debugger é utilizado para identificar problemas na sua aplicação. Na sua program object list, proceda da
seguinte forma:

 Selecione sua transação e execute:

Objetos desenvolvimento → Testar/Executar

 O sistema exibirá a janela de Tipos de execução.

 Selecione Depuração e tecle ENTER. O sistema abrirá seu programa em modo de debugging.

 Dê um duplo clique na declaração do campo flight ID. O sistema posicionará a variável na caixa
Variables group. Inicialmente, Não há nenhum flight ID.

 Clique em Single-Step. O sistema executará seu programa passo a passo.

 Execute até o fim.

Você pode iniciar o debugger quando estiver na transação entrando com /h no command field.

Você pode examinar sua tabela de vôos internamente para checar seu trabalho. Da sua lista de objetos locais,
selecione seu objeto tabela e selecione:
Ambiente → Data Browser → Conteúdo da tabela.

Estando na tela da data browser, você pode clicar em Executar para visualizar as entradas da tabela.

Page 93 of 105
POOL CONSULTORIA E TREINAMENTO LTDA

Curso ABAP/4 e SAPSCRIPT

BACTH INPUT

Page 94 of 105
POOL CONSULTORIA E TREINAMENTO LTDA

Curso ABAP/4 e SAPSCRIPT

1. CONCEITO DE BATCH INPUT

1.1 - O batch input é uma técnica utilizada para transferência de dados de sistemas não SAP
para o sistema SAP.

Existem dois métodos de batch input. Ambos carregam dados para o sistema através de transações normais do
SAP, exatamente como um usuário faria. A diferença é que o batch input executa as transações automaticamente
e é apropriado para grandes quantidades de dados disponíveis em meio eletrônico.

A técnica do batch input oferece as seguintes vantagens para transferência de dados:

Não é requerida interação manual durante a transferência de dados. Se os dados a serem transferidos já
estiverem disponíveis em meio eletrônico (arquivo texto, por exemplo), podemos transferi-los automaticamente
para o SAP usando o batch input.

O batch input garante a integridade dos dados, pois utiliza a mesma transação que o usuário usaria para entrar
manualmente com os dados. Sendo assim os dados no batch input são submetidos a todas as checagens e
controles que se aplicam à entrada manual dos dados.

2. OS MÉTODOS DE BATCH INPUT

2.1. Batch input “clássico”


Neste método, um programa ABAP lê os dados externos que serão entrados no SAP e armazena estes dados
numa “sessão batch input”. A sessão armazena as ações requeridas para entrada dos dados usando
transações normais do SAP.

Uma vez gerada a sessão, ela deve ser executada para que sejam processadas as transações de entrada de
dados. Você pode, tanto executar manualmente e monitorar a sessão com a função de gerenciamento de
batch input, como ter a sessão executada por um processamento em background.

2.2. Call transaction

Neste método, utilizamos o comando CALL TRANSACTION USING para executar uma transação SAP. Neste
caso os dados de batch input não precisam ser armazenados numa sessão para posterior processamento. Em
vez disso, todo o processo de batch input é executado online durante a execução do programa.

Ambos os métodos de batch input usam uma estrutura de dados comum para armazenar os dados e as
instruções. Essa estrutura é a BDCDATA.

Page 95 of 105
POOL CONSULTORIA E TREINAMENTO LTDA

Curso ABAP/4 e SAPSCRIPT

3. APLICAÇÕES TÍPICAS DE BATCH INPUT


 Entrada de dados de origens diversas no SAP quando da sua implantação (carga inicial)

 Transferência periódica de dados capturados de sistemas não SAP para o sistema SAP.

4. ANALISANDO TRANSAÇÕES SAP


Se você estiver criando seu próprio procedimento de batch input, você precisará analisar as transações SAP nas
quais os dados de batch input serão entrados.

objetivo da análise é obter a seguinte informação:

 O código da transação

 O nome dos programas e números das telas da transação

 Quais os campos que requerem entrada

 Em quais campos você pode permitir valores default

 O nomes, tipo e comprimento dos campos que são utilizados pela transação

 Os identificadores das funções que você precisará chamar para executar a transação.

Page 96 of 105
POOL CONSULTORIA E TREINAMENTO LTDA

Curso ABAP/4 e SAPSCRIPT

4.1. Coletando dados da transação


No exercício abaixo vamos analisar a transação que modifica fornecedor, na qual faremos um batch input para
alterar o endereço do fornecedor.

Para analisar a transação, faça o seguinte:

 Execute a transação entrando com o código da mesma no command field:


MK02

 Entre com dados na transação e execute funções que serão requeridas no processamento de
seus dados de batch input.

 Em cada tela, anote o nome do programa e o número da tela (dynpro).

 Exiba estas informações selecionando System → Status.

Se durante a execução aparecer uma janela pop-up, você poderá obter o nome do programa e
número da tela pressionando F1 em qualquer campo ou botão da janela.

 Em cada campo, check box, e radio button de cada tela, pressione F1 (ajuda) e depois clique em
Technical info (ou pressione F9).

 Anote a seguinte informação:

- O nome do campo para batch input

- O comprimento e tipo de dado do campo. Você pode exibir esta informação dando um duplo
clique no campo Data element.

 Encontre o código de a identificação para cada função (botão ou menu) que você terá que
executar para processar o batch input.
 Ponha o cursor no botão ou menu enquanto clica o botão esquerdo do mouse. Depois pressione
F1. Na janela pop-up window que aparecerá clique em Technical info e anote o código mostrado
no campo Function.

Page 97 of 105
POOL CONSULTORIA E TREINAMENTO LTDA

Curso ABAP/4 e SAPSCRIPT

Após a execução dos passos acima, você deverá ter anotado as seguintes informações:

Programa Tela Campo Descrição Tamanho Função


SAPMF02 0100 RF02K-LIFNR Nº fornecedor 10
RF02K-EKORG Organização de 4
compras
RK02K-D0110 Check box para 1
mudança de
endereço

SAPMF02 0200 LFA1-NAME1 Nome (campo 1) 35


LFA1-NAME2 Nome (campo 2) 35
LFA1-NAME3 Nome (campo 3) 35
LFA1-NAME4 Nome (campo 4) 35
LFA1-STRAS Rua 35
LFA1-ORT01 Cidade 35
LFA1-REGIO Estado 35
LFA1-PSSTLZ CEP 10
LFA1-LAND1 País 3
LFA1-TELF1 Telefone 1 16
LFA1-TELF2 Telefone 2 16
BDC_OKCODE /11

5. ESCREVENDO UM PROGRAMA DE BATCH INPUT


Depois de analisar as transações, vamos escrever o programa de batch input.

Antes de escrever o programa, temos que definir o método de batch input que vamos usar. O batch input
“clássico” é mais confortável, pois oferece o gerenciamento da sessão, possibilitando reinicio do
processamento e exibindo um log detalhado. O batch input pelo CALL TRANSACTION USING oferece um
processamento mais rápido, porém menos suporte à recuperação de erros e gerenciamento do batch input.

Nosso programa deverá fazer o seguinte:

Ler dados de um arquivo seqüencial que tenha sido gerado por outro sistema
Se necessário efetuar conversão de dados.

Preparar os dados para o processamento, armazenando-os na estrutura de dados de batch input, a


BDCDATA.

Page 98 of 105
POOL CONSULTORIA E TREINAMENTO LTDA

Curso ABAP/4 e SAPSCRIPT

Gerar uma sessão de batch input para o batch input clássico, ou processar os dados diretamente com o CALL
TRANSACTION USING. Utilizaremos os dois métodos em nosso programa.

Vamos, então, seguir os passos abaixo:

 Crie um novo programa com o nome de ZMBDCxx, onde <xx> são suas iniciais.
 No comando report defina 80 colunas, 65 linhas e message id ZZ.

 Defina 3 tabelas internas:

- INT_BDC, com a estrutura do batch input BDCDATA.

- REG_FOR, com os campos que serão alterados. Defina os campos LIKE os respectivos campos da
tela.

- INT_ERR, para armazenar as mensagens de erro. Deverá conter 2 campos:

MSG like SY-MSGV1


LIFNR like LFA1-LIFNR

 Criar uma tela de seleção onde será informado o nome do arquivo de input (Parameter) e o método de
batch input desejado: batch input clássico ou call transaction (utilizar radio buttons).

 Vamos utilizar 3 performs que deverão ser incluídos entre os eventos START-OF-SELECTION e END-
OF-SELECTION:

- Perform initializa

- Perform monta_bdc

- Perform submite_bdc

 Crie o form INITIALIZATION e insira o comando de abertura do arquivo. Se ocorrer eero na abertura,
exiba uma mensagem, senão execute o form PROCESSA_ARQUIVO.

 Crie o form PROCESSA_ARQUIVO.

Neste form faça a leitura do arquivo dentro de um loop. Para cada registro lido com sucesso, execute os
forms monta_bdc e submete_bdc.

 Crie o form MONTA_BDC. Este form deverá preencher a tabela interna INT_BDC com os dados do
arquivo de entrada.

Dentro deste form chamaremos mais dois forms:

BDC_TELA, com passagem dos parâmetros NOME DO PROGRAMA E Nº DA TELA.

Page 99 of 105
POOL CONSULTORIA E TREINAMENTO LTDA

Curso ABAP/4 e SAPSCRIPT

BDC_CAMPOS, com passagem dos parâmetros NOME DO CAMPO e CONTEÚDO DO CAMPO.

 Crie os dois forms acima recebendo os parâmetros e movendo os dados para a tabela interna INT_BDC.
*----------------------------------------------------------------------*
* Program : ZMBDCXX Date : 08/21/96 *
* Descrição : Altera endereço de fornecedor Version : 1.0 *
*----------------------------------------------------------------------*
REPORT ZMBDCXX LINE-SIZE 80
LINE-COUNT 65
MESSAGE-ID ZZ.

*----------------------------------------------------------------------*
* Internal Tables *
*----------------------------------------------------------------------*
**** BDC Processing
DATA BEGIN OF INT_BDC OCCURS 100.
INCLUDE STRUCTURE BDCDATA.
DATA END OF INT_BDC.

**** Vendor In File


DATA: BEGIN OF REG_FOR,
LIFNR LIKE RF02K-LIFNR,
EKORG LIKE RF02K-EKORG,
NAME1 LIKE LFA1-NAME1,
NAME2 LIKE LFA1-NAME2,
NAME3 LIKE LFA1-NAME3,
NAME4 LIKE LFA1-NAME4,
STRAS LIKE LFA1-STRAS,
ORT01 LIKE LFA1-ORT01,
REGIO LIKE LFA1-REGIO,
PSTLZ LIKE LFA1-PSTLZ,
LAND1 LIKE LFA1-LAND1,
TELF1 LIKE LFA1-TELF1,
TELF2 LIKE LFA1-TELF2,
END OF REG_FOR.

DATA: BEGIN OF INT_ERR OCCURS 50,


MSG LIKE SY-MSGV1,
LIFNR LIKE LFA1-LIFNR,
END OF INT_ERR.

*----------------------------------------------------------------------*
* Parameters *
*----------------------------------------------------------------------*
PARAMETERS: P_ARQUIVO(80) TYPE C. "Nome path do arquivo de entrada

*----------------------------------------------------------------------*
* Main Processing *
*----------------------------------------------------------------------*
START-OF-SELECTION.
PERFORM INITIALIZA.
PERFORM MONTA_BDC.

Page 100 of 105


POOL CONSULTORIA E TREINAMENTO LTDA

Curso ABAP/4 e SAPSCRIPT

PERFORM SUBMITE_BDC.
END-OF-SELECTION.

PERFORM LISTA_ERROS.

*---------------------------------------------------------------------*
* Form INITIALIZA *
*---------------------------------------------------------------------*
* Abre o arquivo de entrada *
*---------------------------------------------------------------------*
FORM INITIALIZA.

* Abre arquivo
OPEN DATASET P_INFILE FOR INPUT IN TEXT MODE.

* Se o arquivo não abrir, mostra mensagem de erro


IF SY-SUBRC <> 0.
MESSAGE E999 WITH 'Erro na abertura do arquivo ' P_INFILE.
ENDIF.
ENDFORM. " INITIALIZA

*---------------------------------------------------------------------*
* Form PROCESSA_ARQUIVO *
*---------------------------------------------------------------------*
* Lê o arquivo e monta a tabela BDC para cada registro. *
* Submete cada transação e salva erros. *
*---------------------------------------------------------------------*
FORM PROCESSA_ARQUIVO.

DO.
READ DATASET P_INFILE INTO REC_VEND.
IF SY-SUBRC <> 0.
EXIT.
ENDIF.

PERFORM MONTA_BDC.

PERFORM SUBMETE_BDC.
ENDDO.

ENDFORM. " PROCESSA_ARQUIVOS

*---------------------------------------------------------------------*
* Form MONTA_BDC *
*---------------------------------------------------------------------*
* Preenche a BDC table para cada transação. *
*---------------------------------------------------------------------*
FORM MONTA_BDC.

*** Build Screen 100


PERFORM BDC_TELA TABLES INT_BDC
USING 'SAPMFO2K' '0100'.

PERFORM BDC_CAMPOS TABLES INT_BDC:

Page 101 of 105


POOL CONSULTORIA E TREINAMENTO LTDA

Curso ABAP/4 e SAPSCRIPT

USING 'RF02K-LIFNR' REC_VEND-LIFNR, "Fornecedor


USING 'RF02K-EKORG' REC_VEND-EKORG, "Organização de compras
USING 'RF02K-D0110' 'X'. "Marcação do campo endereço
*** Build Screen 200
PERFORM BDC_TELA TABLES INT_BDC
USING 'SAPMFO2K' '0200'.

PERFORM BDC_CAMPOS TABLES INT_BDC:


USING 'LFA1-NAME1' REC_VEND-NAME1, "Nome 1
USING 'LFA1-NAME2' REC_VEND-NAME2, "Nome 2
USING 'LFA1-NAME3' REC_VEND-NAME3, "Nome 3
USING 'LFA1-NAME4' REC_VEND-NAME4, "Nome 4
USING 'LFA1-STRAS' REC_VEND-STRAS, "Rua
USING 'LFA1-ORT01' REC_VEND-ORT01, "Cidade
USING 'LFA1-REGIO' REC_VEND-REGIO, "Estado
USING 'LFA1-PSTLZ' REC_VEND-PSTLZ, "CEP
USING 'LFA1-LAND1' REC_VEND-LAND1, "País
USING 'LFA1-TELF1' REC_VEND-TELF1, "Telefone 1
USING 'LFA1-TELF2' REC_VEND-TELF2., "Telefone 2
USING 'BDC_OKCODE' '/11' . "Salva
ENDFORM. "MONTA_BDC
*---------------------------------------------------------------------*
* Form SUBMETE_BDC *
*---------------------------------------------------------------------*
* This form will submit the BDC table using CALL TRANSACTION. *
*
*---------------------------------------------------------------------*
FORM SUBMITE_BDC.

CALL TRANSACTION 'MK02' USING INT_BDC MODE 'N'.


IF SY-SUBRC <> 0. "If error record vendor and error msg
MOVE SY-MSGV1 TO INT_ERR-MSG.
MOVE REC_VEND-LIFNR TO INT_ERR-LIFNR.
APPEND INT_ERR.
ENDIF.

ENDFORM. "SUBMITE_BDC

*---------------------------------------------------------------------*
* Form LISTA_ERROS *
*---------------------------------------------------------------------*
* This form will write out any errors to the screen. *
*
*---------------------------------------------------------------------*
FORM LSTA_ERROS.

WRITE 'Vendor Records with Errors!'.


WRITE: /, 'VENDOR', 11 'ERROR MESSAGE'.

LOOP AT INT_ERROR.
WRITE: /, INT_ERROR-LIFNR, 11 INT_ERROR-MSG.
ENDLOOP.

ENDFORM. "LISTA_ERROS

Page 102 of 105


POOL CONSULTORIA E TREINAMENTO LTDA

Curso ABAP/4 e SAPSCRIPT

*---------------------------------------------------------------------*
* Form BDC_TELA
*---------------------------------------------------------------------*
* Pega parâmetros e entra cada tela na tabela interna BDC *
*---------------------------------------------------------------------*
FORM BDC_SCREEN USING P_PROGRAM P_SCREEN.

CLEAR INT_BDC. "Limpa tabela interna

INT_BDC-PROGRAM = P_PROGRAM.
INT_BDC-DYNPRO = P_SCREEN.
INT_BDC-DYNBEGIN = 'X'.
APPEND INT_BDC.

ENDFORM.

*---------------------------------------------------------------------*
* Form BDC_CAMPOS
*---------------------------------------------------------------------*
* Pega parâmetros e entra os campos da tela na tabela interna BDC *
* table specified for a new field. *
*---------------------------------------------------------------------*
FORM BDC_FIELD USING P_NAME P_VALUE.

CASE P_VALUE.
WHEN ' '. "Se valor estiver em branco, não move
WHEN OTHERS. "Move valor
MOVE P_NAME TO INT_BDC-FNAM.
MOVE P_VALUE TO INT_BDC-FVAL.
APPEND INT_BDC.
ENDCASE.

ENDFORM.

Page 103 of 105


POOL CONSULTORIA E TREINAMENTO LTDA

Curso ABAP/4 e SAPSCRIPT

6. PROCESSAMENTO DE SESSÕES DE BATCH INPUT

Quando você cria uma sessão de batch input, a mesma permanece na fila até que seja executada
explicitamente. O processamento da sessão pode ser iniciado de duas maneiras:

Um usuário pode executar a sessão on-line, através das opções do menu de batch input:

System → Services → Batch Input

Você pode executar a sessão em background submetendo um job que executará o programa RSBDCSUB.

É possível coordenar a geração e a execução da sessão em background. Este recurso é muito utilizado para
interfaces periódicas automáticas.

Você pode definir jobs para executar em background o seu programa de batch input e o programa RSBDCSUB.
Se você definir o job do programa de batch input como predecessor do RSBDCSUB, o RSBDCSUB será
executado automaticamente quando o job do batch input terminar com sucesso.

7. REGISTRO DE EXECUÇÃO DE TRANSAÇÃO


O registro da execução de uma transação consiste numa seqüência de transações com as telas processadas. Uma
tela (Nome do programa, nome da tela) contém os campos modificados(nome do campo, valor do campo), O
comando de usuário executado(BDC_OKCODE) e a posição do cursor(BDC_CURSOR).

Para iniciar a função de gravação, vá para a tela inicial de batch nput e clique em Record , ou chame diretamente a
transação SHDB.

O sistema armazena o registro com um nome de até 12 caracteres que você escolhe. Você deve especificar este
nome quando iniciar a gravação. Os seguintes caracteres não são permitidos:. , () ' " = Ä Ö Ü ß .

A função de gravação oferece uma visão de todos os registros existentes. Para exibir clique em Overview. Você
pode limitar a seleção, entrando com um intervalo de datas.

Para criar um registro, especifique o nome e clique em Create. Na tela subseqüente, entre com o nome da
transação que deseja gravar. Execute a transação entrando com valores nos campos da tela.

Após o término da execução da transação, o sistema exibe as telas processadas(module pool, número da tela), os
campos alterados(nome do campo, valor do campo), os comandos de usuário executados(BDC_OKCODE) e a
posição do cursor (BDC_CURSOR) numa lista hierárquica. Clique em Copy transaction para gravar a a execução
da transação. Clique em Next transaction se desejar gravar a execução de outra transação.

Após a gravação de todas as transações desejadas, salve o registro.

Page 104 of 105


POOL CONSULTORIA E TREINAMENTO LTDA

Curso ABAP/4 e SAPSCRIPT

7.1. Criação de sessões batch input através do registro da transação


Dentro da visualização do registro, clique em Create session para criar uma sessão de batch input com os dados
da transação gravada . Depois processe a sessão normalmente.

7.2. Geração de programa de batch input a partir dos dados gravados


Além de criar uma sessão, você também pode gerar um programa de batch input de dentro da visualização do
registro. Neste caso, selecione o registro desejado e especifique o nome do programa que quer gerar. Depois
entre com os atributos do programa e entre na lista de objetos.

O programa gerado contém todo o código necessário para criar uma sessão de batch input. Assim, você pode
deixar de lado a execução da transação e a determinação do nome do module pool, o número das telas, os
nomes dos campos, e os códigos de função.

Você pode precisar alterar ligeiramente este programa, se quiser, por exemplo, ler dados que serão transferidos
de um arquivo seqüencial.

7.3. Características especiais da gravação


Os seguintes dados não são gravados

 F1 e F4
 Todas as funções dos menus System e Help,
 Valores da variante standard,
 Janelas de erro e mensagens de warning,
 Rolagem via barra de rolagem (use F21 a F24, ao invés).

O COMMIT WORK indica o fim com successo da transação e da gravação.

O LEAVE TO TRANSACTION não pode ser processado no batch input e, consequentemente finaliza a gravação.

Page 105 of 105

Potrebbero piacerti anche