Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
APRESENTAÇÃO SAP R3
POOL CONSULTORIA E TREINAMENTO LTDA
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.
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
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
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).
Page 3 of 105
POOL CONSULTORIA E TREINAMENTO LTDA
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.
Botão Enter
Page 4 of 105
POOL CONSULTORIA E TREINAMENTO LTDA
Command field
Botão Gravar
Botão Voltar
Botão Encerrar
Sai da aplicação corrente. O sistema retorna à aplicação anterior ou à tela do menu principal.
Botão Cancelar
Botão Imprimir
Botão Procurar
Page 5 of 105
POOL CONSULTORIA E TREINAMENTO LTDA
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.
Page 6 of 105
POOL CONSULTORIA E TREINAMENTO LTDA
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
ABAP WORKBENCH
Page 8 of 105
POOL CONSULTORIA E TREINAMENTO LTDA
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.
Para criar uma tabela através do Repository browser, vá para sua lista de objetos e proceda da seguinte
forma:
Page 9 of 105
POOL CONSULTORIA E TREINAMENTO LTDA
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
Page 11 of 105
POOL CONSULTORIA E TREINAMENTO LTDA
No campo Nome campo, entre FLID. Será o nome do primeiro campo. O campo FLID será o campo
chave da 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.
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.
Page 12 of 105
POOL CONSULTORIA E TREINAMENTO LTDA
A informação digitada em Textos será utilizada mais tarde pelo sistema para colocar o título nos campos
automaticamente.
Dê um duplo clique no campo nome do domínio. O sistema pedirá para confirmar sua seleção.
Page 13 of 105
POOL CONSULTORIA E TREINAMENTO LTDA
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.
Page 14 of 105
POOL CONSULTORIA E TREINAMENTO LTDA
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:
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 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.
Page 15 of 105
POOL CONSULTORIA E TREINAMENTO LTDA
Page 16 of 105
POOL CONSULTORIA E TREINAMENTO LTDA
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.
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:
Selecione o domínio city e clique em Modificar. O sistema exibirá a tela de manutenção de domínio do
Dictionary.
Salve a lista.
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
Page 18 of 105
POOL CONSULTORIA E TREINAMENTO LTDA
Entre com APPL1 no campo Tipo de dados. A classe de dados APPL1 indica que a tabela é atualizada
freqüentemente.
Salve.
Clique em Ativar. O sistema compilará o código da tabela, criará uma versão runtime da tabela, e
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
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
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.
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.
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
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:
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:
Page 22 of 105
POOL CONSULTORIA E TREINAMENTO LTDA
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.
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
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.
Page 24 of 105
POOL CONSULTORIA E TREINAMENTO LTDA
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:
Para o nosso exemplo marque o radio button Modo PC com numeração de linhas e clique em Enter.
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.
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.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.
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
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.
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
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:
Entre com o comando ULINE nas linhas antes e depois do comando WRITE.
Page 26 of 105
POOL CONSULTORIA E TREINAMENTO LTDA
Execute o programa.
Page 27 of 105
POOL CONSULTORIA E TREINAMENTO LTDA
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.
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:
Para atribuir textos a uma variável, use uma das formas abaixo:
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
Atribua um texto qualquer à variável. Certifique-se de que o texto não excederá 30 caracteres de
comprimento.
REPORT RSAATME5.
DATA TEXT(30) TYPE C.
MOVE 'Preenchimento para TEXT' TO TEXT.
WRITE TEXT.
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.
Page 29 of 105
POOL CONSULTORIA E TREINAMENTO LTDA
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.
Page 30 of 105
POOL CONSULTORIA E TREINAMENTO LTDA
Clique em Aceitar para inserir o comando no seu programa. A seguinte linha aparecerá no seu
programa:
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
Selecione:
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.
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.
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.
Page 31 of 105
POOL CONSULTORIA E TREINAMENTO LTDA
[WHERE <condição1><condição2>]
[GROUP BY <campos de agrupamento>]
Cláusula Descrição
Page 32 of 105
POOL CONSULTORIA E TREINAMENTO LTDA
GROUP BY <campos> Se for necessário, faz agrupamento dos campos indicados neste parâmetro
Exemplo:
TABLES SPFLI.
Saída em tela:
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
Exemplo:
TABLES SPFLI.
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:
Page 34 of 105
POOL CONSULTORIA E TREINAMENTO LTDA
ITAB-CITYFROM = 'FRANKFURT'.
ITAB-CITYTO = 'BERLIN'.
APPEND ITAB.
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
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
Comando Uso
ROLLBACK WORK
Neste exercício criaremos um novo programa que irá ler dados da tabela SFLIGHT e exibi-los na tela:
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:
Page 36 of 105
POOL CONSULTORIA E TREINAMENTO LTDA
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:
Clique em Modelo.
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.
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:
Page 37 of 105
POOL CONSULTORIA E TREINAMENTO LTDA
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:
Execute o programa. A lista agora conterá apenas dados do vôo 0400 da linha aérea ‘LH’.
1.11.1. Parameters
O exercício abaixo nos mostrará como utilizar o campo CARRID da tabela SFLIGHT numa seleção
dinâmica:
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.
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
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.
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:
Este comando declara o critério de seleção CID para o campo CONNID da tabela SFLIGHT.
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.
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
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’:
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’:
Page 40 of 105
POOL CONSULTORIA E TREINAMENTO LTDA
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:
Procedimentos:
Crie um novo programa.
Page 41 of 105
POOL CONSULTORIA E TREINAMENTO LTDA
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:
- Clique em Enter.
- Clique em Aceitar.
No seu programa aparecerá um comando SELECT com uma condição WHERE pré gerada, e o
comando ENDSELECT.
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
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.
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
Salve o cabeçalho e execute o programa novamente. Na tela de seleção, use a variante criada.
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.
Page 43 of 105
POOL CONSULTORIA E TREINAMENTO LTDA
Page 44 of 105
POOL CONSULTORIA E TREINAMENTO LTDA
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.
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:
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.
Clique em Copy.
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:
Page 45 of 105
POOL CONSULTORIA E TREINAMENTO LTDA
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 é:
O comando inicia com a palavra chave DATA, seguida do nome da tabela interna.
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.
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:
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
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.
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.
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.
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
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.
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.
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.
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
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:
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.
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
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.
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.
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.
Page 50 of 105
POOL CONSULTORIA E TREINAMENTO LTDA
TABLES: SPFLI.
Page 51 of 105
POOL CONSULTORIA E TREINAMENTO LTDA
NEW-PAGE.
Page 52 of 105
POOL CONSULTORIA E TREINAMENTO LTDA
AT <linha>.
<bloco de instruções>
ENDAT.
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.
Page 53 of 105
POOL CONSULTORIA E TREINAMENTO LTDA
<instruções>.
ENDAT.
AT END OF F1.
<instruções>
ENDAT.
AT LAST.
<instruções>
ENDAT.
ENDLOOP.
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.
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.
Page 54 of 105
POOL CONSULTORIA E TREINAMENTO LTDA
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.
Use a condição de linha AT LAST para exibir um comentário após exbir todos os dados da tabela
interna.
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
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 o total dos assentos ocupados e dos assentos disponíveis na condição de linha AT END OF
CARRID.
Execute o programa.
*Lê SFLIGHT, move p/ área de trab da tab int e preenche a tab int
Page 56 of 105
POOL CONSULTORIA E TREINAMENTO LTDA
GET SFLIGHT.
MOVE-CORRESPONDING SFLIGHT TO WA.
APPEND WA TO ITAB.
Page 57 of 105
POOL CONSULTORIA E TREINAMENTO LTDA
3. RELATÓRIO INTERATIVO
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
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.
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
Leia na tabela SBOOK os registros dos vôos selecionados no relatório básico. Lembre-se de declarar
SBOOK .
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.
Este exercício mostra como checar se o usuário selecionou uma linha válida:
Page 60 of 105
POOL CONSULTORIA E TREINAMENTO LTDA
Execute o programa e selecione uma linha inválida. Não deve aparecer nenhuma lista secundária.
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 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’.
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.
Page 61 of 105
POOL CONSULTORIA E TREINAMENTO LTDA
O sistema exibirá uma lista de opções de menus standard. Para definir opções de menu, entre valores
válidos no campo Func.
Page 62 of 105
POOL CONSULTORIA E TREINAMENTO LTDA
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.
Clique em Back. O sistema termina a transação de manutenção de status e volta para o editor de
programa.
Escolha um nome com mais de 3 caracteres. Da menma forma que o nome do status, você tem que usar
letras maiúsculas.
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.
Page 63 of 105
POOL CONSULTORIA E TREINAMENTO LTDA
Page 64 of 105
POOL CONSULTORIA E TREINAMENTO LTDA
Lê a tabela SBOOK
SELECT * FROM SBOOK
WHERE CARRID = WA-CARRID
Page 65 of 105
POOL CONSULTORIA E TREINAMENTO LTDA
Page 66 of 105
POOL CONSULTORIA E TREINAMENTO LTDA
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.
Page 67 of 105
POOL CONSULTORIA E TREINAMENTO LTDA
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
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.
Salve os atributos.
Page 69 of 105
POOL CONSULTORIA E TREINAMENTO LTDA
Para criar uma transação através do Repository browser, vá para sua lista de objetos e proceda da seguinte
forma:
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.
Page 70 of 105
POOL CONSULTORIA E TREINAMENTO LTDA
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
[ON INPUT]
[AT EXIT-COMMAND]
[AT CURSOR-SELECTION].
<statements>
ENDMODULE.
Exemplo:
Page 72 of 105
POOL CONSULTORIA E TREINAMENTO LTDA
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)
Clique em Tela.
Page 73 of 105
POOL CONSULTORIA E TREINAMENTO LTDA
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.
Agora temos a pasta Telas em nossa lista de objetos programa. A seguir iremos popular a nova tela com
elementos gráficos.
Utilizaremos agora o editor fullscreen do Screen Painter para adicionar elementos gráficos à nossa tela.
Selecione Tela 100 e clique em Modificar. O browser exibirá o Fluxo Lógico da tela.
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.
Page 74 of 105
POOL CONSULTORIA E TREINAMENTO LTDA
Tecle Enter.
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
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.
Page 76 of 105
POOL CONSULTORIA E TREINAMENTO LTDA
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.
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:
Selecione no menu:
Selecione no menu:
Page 77 of 105
POOL CONSULTORIA E TREINAMENTO LTDA
Pode ser adicionado um box envolvendo elementos da tela para indicar que eles estão
relacionados.
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 .
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 no menu:
O Screen Painter converterá os campos em campos de seleção. Como cada campo de seleção é uma
Abra a tela 100 no editor fullscreen. Cheque o layout da tela selecionando no menu:
Page 78 of 105
POOL CONSULTORIA E TREINAMENTO LTDA
Você pode usar a janela de atributos para ajustar rapidamente a posição de um elemento,
conforme procedimento abaixo:
Selecione o 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.
Teste as alterações da tela 100. Você notará a diferença na posição dos elementos da tela.
Page 79 of 105
POOL CONSULTORIA E TREINAMENTO LTDA
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:
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.
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.
Page 80 of 105
POOL CONSULTORIA E TREINAMENTO LTDA
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.
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 .
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
Certifique-se de que o status esteja em modo de alteração. Nesse exemplo usaremos os menus default
standard.
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
CREA Create
UPDA Change
DISP Display
DELE Delete
Page 82 of 105
POOL CONSULTORIA E TREINAMENTO LTDA
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:
Quando a simulação é executada, note que o sistema traz, além do menu que criamos, mais dois menus:
Sistema e Ajuda.
Abra o status 100 no seu programa. Certifique-se de estar em modo de alteração, e faça o seguinte:
Role a tela para baixo até área de Definições recomendadas de teclas função.
Role a tela para baixo até área de Teclas de função de livre definição
F5 UPDA Change
F7 DISP Display
F2 CREA Create
Page 83 of 105
POOL CONSULTORIA E TREINAMENTO LTDA
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.
DISP
UPDA
DELE
Selecione a pasta Ctg.obj. programa. O sistema exibirá uma lista de tipo de objetos que podem ser
criados.
Clique em Salvar.
Para gerar o novo status, certifique-se de estar na sua lista de objetos programa e faça o seguinte:
Page 84 of 105
POOL CONSULTORIA E TREINAMENTO LTDA
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.
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.
Abra a tela 100. O sistema entrará no editor de lógica de processamento do screen painter.
Page 85 of 105
POOL CONSULTORIA E TREINAMENTO LTDA
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.
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.
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
Selecione o arquivo top include (Já criamos esse arquivo no item 2.1)
tables: <tabela>.
Dica: Se você der um duplo clique no nome da tabela, o sistema abrirá a tabela.
data answer.
data: ok-code(4), fcode(4).
Salve as alterações.
Page 87 of 105
POOL CONSULTORIA E TREINAMENTO LTDA
Page 88 of 105
POOL CONSULTORIA E TREINAMENTO LTDA
Selecione no menu:
Page 89 of 105
POOL CONSULTORIA E TREINAMENTO LTDA
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.
Page 90 of 105
POOL CONSULTORIA E TREINAMENTO LTDA
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.
Page 91 of 105
POOL CONSULTORIA E TREINAMENTO LTDA
Crie um vôo.
Volte para a primeira sessão do SAP e vá para sua lista de objetos locais.
Ou pressione F8.
Programa → Executar
Ou pressione F8 novamente.
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.
Page 92 of 105
POOL CONSULTORIA E TREINAMENTO LTDA
O debugger é utilizado para identificar problemas na sua aplicação. Na sua program object list, proceda da
seguinte forma:
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.
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
BACTH INPUT
Page 94 of 105
POOL CONSULTORIA E TREINAMENTO LTDA
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.
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.
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.
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
Transferência periódica de dados capturados de sistemas não SAP para o sistema SAP.
O código da transação
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
Entre com dados na transação e execute funções que serão requeridas no processamento de
seus dados de batch input.
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).
- 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
Após a execução dos passos acima, você deverá ter anotado as seguintes informações:
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.
Ler dados de um arquivo seqüencial que tenha sido gerado por outro sistema
Se necessário efetuar conversão de dados.
Page 98 of 105
POOL CONSULTORIA E TREINAMENTO LTDA
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.
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.
- REG_FOR, com os campos que serão alterados. Defina os campos LIKE os respectivos campos da
tela.
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.
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.
Page 99 of 105
POOL CONSULTORIA E TREINAMENTO LTDA
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.
*----------------------------------------------------------------------*
* Parameters *
*----------------------------------------------------------------------*
PARAMETERS: P_ARQUIVO(80) TYPE C. "Nome path do arquivo de entrada
*----------------------------------------------------------------------*
* Main Processing *
*----------------------------------------------------------------------*
START-OF-SELECTION.
PERFORM INITIALIZA.
PERFORM MONTA_BDC.
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.
*---------------------------------------------------------------------*
* 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.
*---------------------------------------------------------------------*
* Form MONTA_BDC *
*---------------------------------------------------------------------*
* Preenche a BDC table para cada transação. *
*---------------------------------------------------------------------*
FORM MONTA_BDC.
ENDFORM. "SUBMITE_BDC
*---------------------------------------------------------------------*
* Form LISTA_ERROS *
*---------------------------------------------------------------------*
* This form will write out any errors to the screen. *
*
*---------------------------------------------------------------------*
FORM LSTA_ERROS.
LOOP AT INT_ERROR.
WRITE: /, INT_ERROR-LIFNR, 11 INT_ERROR-MSG.
ENDLOOP.
ENDFORM. "LISTA_ERROS
*---------------------------------------------------------------------*
* Form BDC_TELA
*---------------------------------------------------------------------*
* Pega parâmetros e entra cada tela na tabela interna BDC *
*---------------------------------------------------------------------*
FORM BDC_SCREEN USING P_PROGRAM P_SCREEN.
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.
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:
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.
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.
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.
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 LEAVE TO TRANSACTION não pode ser processado no batch input e, consequentemente finaliza a gravação.