Você está na página 1de 71

Apostila Curso Avançado ABAP

Primeiramente, gostaria de me apresentar, meu nome é Alexandre Passarelli, sou criador da


empresa AZ Treinamentos, levo a empresa como um hobby, pois gosto muito da atividade de
ensinar, por isso, minha empresa tem o foco de ensinar SAP sem cobrar muito por isso e faço
isso de uma forma animada e divertida, atualmente estou na área de SAP há 10 anos, e estou
lançando meu terceiro curso em vídeo. A AZ Treinamentos já teve mais de 30 cursos no total,
não nos preocupamos com a quantidades de curso, tudo o que fazemos é com muito amor e
carinho e caso queira conhecer um pouco mais de mim, segue abaixo meu LinkedIn:

Link: https://www.linkedin.com/in/alexandre-aparecido-passarelli-aa64a529/
1.0 – Lógica de Programação ABAP (PT 1) – 21/05/18

 Práticas em lógica de programação voltadas a sintaxe ABAP

 Tela de seleção

As telas de seleção no programa ABAP são usadas para a interação do usuário com o programa
ABAP, embora não sejam obrigatórias, a maioria dos programas ABAP necessitam de algumas ações
do usuário para que possam ser executadas, nesse passo, vamos verificar como construir uma tela
de algumas formas e explorar sua utilização, abaixo temos uma declaração simples de uma tela de
seleção indicada pelo comando:

SELECTION-SCREEN – Este comando é bastante amplo, como vamos perceber durante esse curso,
alguns comandos do SAP precisam ser fechados, no caso, a tela de seleção precisa ser aberta e
fechada, conforme o exemplo:

Usamos um PARAMETER simples, associado ao campo MATNR da tabela MARA, ao exibir o


programa ativo desse código, teremos uma tela dessa forma:

A tela de seleção, mesmo criada ainda não possui formatações, ou seja, o comando foi criado, mas
ainda precisa de algumas configurações para que fique mais visivelmente agradável, antes de
configurarmos as telas, vejamos o que podemos criar dentro de uma tela de seleção:
 CHECKBOX – Pode ser usado para uma opção de flag na tela, podem existir vários
checkbox na mesma tela, a configuração sempre segue sendo do tipo C, pois não precisa de
um tamanho configurado se a sua opção é marcada apenas por um “X”.

 RADIOBUTTON – Pode ser usado para ser uma opção entre várias na tela, mas permitindo
que o usuário selecione apenas uma, através do grupo que definimos no exemplo acima
como “R1”, quando o usuário marcar uma opção a outra fica inativa, o grupo pode ser
definido com qualquer nome, o R1 foi usado apenas por boas práticas e indicar que faz
parte de um Radiobutton, e podem haver vários grupos, desde que eles tenham pelo menos
duas opções a serem marcadas como no exemplo acima.

Exemplo da tela como código demonstrado acima:

 Modelagem de Tela

Conforme podemos observar no último exemplo demonstrado, apenas configurar os parâmetros


dentro de uma tela não a torna visivelmente agradável aos olhos de um usuário, portanto alguns
comandos são essenciais para que a tela fique mais “bonita”.

Vamos acrescentar alguns comandos ao SELECTION-SCREEN:

Apenas o comando WITH FRAME, traça uma linha em volta da tela de seleção, já tornando a tela
visivelmente muito melhor, o nome b1 ao lado, conforme a explicação no comentário foi usado
apenas para indicar que esse é o BLOCO 1, o comando BEGIN OF BLOCK, indica que vamos
configurar uma tela de seleção e esse bloco precisa de um nome, que pode ser configurado pelo
ABAP de acordo com o desejado:
Exemplo da tela:

Notem que um quadrado foi desenhado em volta da tela, deixando a tela um pouco menos solta e
mais agradável, mas ainda podemos tornar essa tela mais agradável, vamos continuar a formatação:

Primeiramente separamos os comandos para não fazerem parte de uma mesma sintaxe de
PARAMETER, pois vamos deixar a tela um pouco mais separada do que está, os campos estão todos
muito unidos e confusos, para isso, precisamos adicionar algumas sintaxes em meio aos comandos,
impedindo que apenas um comando de PARAMETER seja usado.

Foi adicionado também o comando TITTLE text-001, conforme na imagem abaixo, ao clicar duas
vezes sobre o elemento de texto, podemos adicionar uma informação para a tela de seleção, veja
como fazer no passo abaixo da imagem do código:
 Textos em tela

Preencha a informação com o texto que será exibido na tela de seleção e clique em ativar:

Resultado:

Ainda em textos do programa, precisamos nomear os nomes técnicos dos objetos, para isso, basta ir
no programa principal, e seguir no menu, conforme a imagem abaixo:
Da mesma forma como o texto da tela de seleção, clique em ativar, os nomes podem ser feitos como
desejado:

Resultado da tela de seleção:

Mesmo que a tela de seleção já esteja visivelmente mais agradável, os campos ainda estão muito
próximos e podemos fazer algumas separações para que fique um pouco mais apresentável, o SAP
não permite que as configurações sejam muito amplas, porém, podemos fazer da seguinte forma:
E como resultado:

As configurações de exibição de tela normalmente ficam a critério do gosto do usuário ou do


funcional, mas é importante demonstrar o que se pode fazer, separar os tipos de processamento e
informação na tela ajuda o usuário a entender melhor como o programa funciona.

 Sintaxes para ferramentas de edição de informações


Vamos começar a explorar as ferramentas iniciais para o desenvolvimento de programas mais
complexos em ABAP, muitas dessas declarações tem sub funções além do que veremos neste
material e aula de hoje, pois mesmo sendo apenas uma sintaxe, seu uso pode se estender em
diversos tipos, vejamos abaixo alguns exemplos disso:

- SHIFT: Esse comando pode alterar valores a direita ou a esquerda de uma variável, como, por
exemplo, remover os zeros a esquerda de um campo, ou remover os espaços a esquerda de um
campo, bem como a direita, abaixo vemos um exemplo prático desse comando:
 CONDENSE NO GAPS: Esse comando pode remover o espaço entre duas ou mais palavras
dentro de uma variável, pode ser útil dentro de uma solicitação em um programa, abaixo,
segue um exemplo prático desse comando:

 TRANSLATE: Esse comando substitui uma informação na variável por outra de sua
escolha, ou seja, caso seja uma vírgula que tenha que ser trocada por ponto, basta seguir
como no exemplo abaixo, o comando aceita qualquer caractere, basta usar o comando
dessa forma:

 OVERLAY: Esse comando sobrepõe os valores iniciais de uma variável baseada na


informação que você passar, ou seja, no caso do exemplo abaixo, todos os caracteres que
estiverem em branco, serão sobrepostos por 0, é importante ressaltar que o número de
sobreposições tenha que ser do tamanho desejado, veja um exemplo prático desse
comando abaixo:
 CONCATENATE: Esse comando une várias informações dentro de um único campo, muito
útil para montar campos diversos no SAP, como uma chave de nota fiscal que é composta
por vários campos do SAP, veja abaixo um exemplo prático deste comando, ele só aceita
variáveis do tipo CHAR, ou literais, como no exemplo abaixo:

O comando unido ao SEPARATED BY faz com que a união tenha o separador que o programador
preferir, a variável “space” é interna do sistema, é considerada um espaço em branco, mas poderia
ser substituída por qualquer carácter especial, como vírgulas, ponto, barras, etc.

 Entendendo o uso de sintaxes mais performáticas

 O uso de LIKE e TYPE

As versões mais antigas do SAP, usam algumas declarações como LIKE, você pode encontrar esse
tipo de declarações em funções, programas ABAP, métodos, etc, porém a SAP classifica o comando
LIKE como obsoleto, mesmo que seu uso ainda seja permitido, pois sua sintaxe é muito antiga, é
recomendado que se utilize a instrução TYPE no ao invés de LIKE, seguem abaixo alguns exemplos:
 Uso de mais e menos campos em declarações de tabelas

Abaixo vemos um exemplo pratico de uma declaração de tabela interna, das duas formas mais
tradicionais, uma delas é diretamente associada a tabela, usando como tipo a própria tabela, no
exemplo a tabela MARA, isso faz com que a tabela interna tenha todos os campos da tabela MARA,
isso só se faz necessário se realmente foi solicitado que todos os campos da MARA apareçam de
alguma forma em algum lugar no programa, do contrário, muitos campos serão carregados de
forma desnecessária, causando aumento da memória sem necessidade.

No outro exemplo, usamos a declaração com TYPES, onde definimos exatamente apenas os campos
que queremos usar na tabela, esse é o meio correto, mesmo que mais trabalhoso é o mais
recomendado, pois evitamos muitos problemas de performance ao utilizar esse tipo de declaração.

 O uso de tamanhos específicos de objetos ABAPS

Quando criamos variáveis em programas ABAP, normalmente através de especificações funcionais,


sempre temos uma noção do tamanho do campo a ser criado, e as declarações de variáveis ficam
mais ou menos como no exemplo abaixo:

Esse é o uso sempre correto de uma variável, pois o tamanho e o tipo da variável será importado
diretamente do banco de dados, não deixando para o programador a preocupação com o tamanho
do campo, porém, em muitos casos, não sabemos qual é o tamanho de um campo, então temos que
criar baseados na experiência ou na circunstância do projeto local. Devemos ter muito cuidado ao
criar variáveis com tamanho padrão, pois a falta de formatação correta dentro de um campo pode
acarretar problemas na exibição de campos, ou no corte de informações, para isso, variáveis nunca
devem ser criadas dessa forma:
Ao fazer um SELECT, por exemplo, o campo MATNR tem como padrão no SAP tamanho 18,
podemos ter problemas ao criar campos com casas em excesso ou com tamanho reduzido, é
recomendado que se faça um estudo, ou que se pergunte ao Funcional ou área de negócio
responsável sobre o campo, isso não se aplica apenas as variáveis, os campos de tabelas, mesmo as
tabelas transparentes, todo cuidado é essencial, pois tudo isso passa despercebido aos olhos do
usuário e é puramente um trabalho do ABAP ter a preocupação com como a informação é aplicada
no código.

 Quando usar ou não usar sintaxes específicas


Para que o código não tenha problemas, devemos evitar o uso de alguns tipos de sintaxes
específicas, ou até mesmo, da forma ou lugar de onde se usar uma sintaxe, abaixo veremos alguns
exemplos práticos do que não fazer dentro do código ABAP:

 STOP:

O comando STOP, embora obsoleto ainda existe dentro do código ABAP, muitos programas antigos
ainda usam, por isso, o comando não pode ser removido em novas versões do SAP, o mesmo
acontece com diversas sintaxes que ficam obsoletas, mas o uso deste comando pode acarretar
sérios problemas dentro de um código, pois este comando encerra o programa exatamente onde ele
é aplicado, abaixo temos um exemplo simples, onde uma variável é verificada, se o seu valor é
inicial, então o comando STOP é aplicado, encerrando a aplicação, o problema é que para o usuário
isso não fará nenhum sentido, pois o encerramento de um programa de nada vai ajudar o usuário
entender o motivo do erro, existem formas mais práticas e usuais para que isso seja aplicado, no
decorrer desse curso vamos trabalhar com esses comandos corretos, mas devemos sempre evitar o
uso deste comando em TODOS OS CASOS.
 READ TABLE – BINARY SEARCH e SORT: O comando READ TABLE, faz uma leitura única
em uma tabela interna para encontrar um registro através de uma chave informada, esse
comando é usado diversas vezes dentro do código ABAP, porém, sua utilização pode
acarretar alguns problemas em tabelas com grandes informações como, por exemplo, a
tabela BSEG, que contém milhares ou até bilhares de dados. Em um sentido simples, o
comando procura a chave indicada pelo WITH KEY do primeiro registro até o último, no
exemplo abaixo, temos apenas 100 registros, o que não representa nenhum problema na
utilização simples do READ TABLE, essa utilização simples é representada como na
imagem:

Estamos buscando o material “1”, do primeiro até o último registro de 100 registros selecionados
no SELECT. Em casos de tabelas com milhões de registros, uma busca do primeiro até o último pode
demorar segundos ou até minutos para ser encontrada, visto que o comando READ TABLE é usado
em leituras sequenciais (LOOP, DO, WHILE) que veremos mais adiante, neste caso o uso da sintaxe
BINARY SEARCH se faz necessário e este comando divide a pesquisa em diversas partes, para que a
busca seja feita de forma muito mais rápida, para isso é necessário que a tabela seja organizada
através do comando SORT que nada mais é do que ordenar uma tabela em ordem crescente ou
decrescente, de acordo com os campos. Se utilizamos o comando BINARY SEARCH sem o uso do
SORT na tabela interna, o comando READ TABLE não retornará sucesso na busca, causando falha na
busca do registro desejado, para ordenar uma tabela interna, após uma seleção, basta usar o
comando SORT e indicar quais campos serão as chaves que serão ordenadas, conforme o exemplo
abaixo:
Após a ordenação da tabela e a indicação de quais campos serão a chave de ordenação, podemos
usar o comando BINARY SEARCH, para fazer o comando READ TABLE ser mais rápido, porém, a
chave WITH KEY só pode conter os mesmos campos da ordenação, ou o comando também
apresentará falha, o uso correto seria como no exemplo abaixo:

Se fosse necessário adicionar mais registros a chave do READ TABLE, também seria necessário
adicionar a ordenação do comando SORT, tudo isso para que o índice de pesquisa do SAP não seja
prejudicado, essa é uma regra para performance, mas muito esquecida por falta de atenção, o erro
causado não retorna registros, causando muitos problemas em diversos programas.

O uso de Literais (Hardcordes): Literais ou Hardcodes são textos fixos que usamos dentro de um
código. Esta prática não é bem vista e nem aceita dentro dos padrões de codificação e boas práticas
do SAP, como em outras linguagens de programação, para declarar um hardcode no ABAP, usamos
apostrofe ‘’, como o preenchimento da variável abaixo:

Um dos grandes problemas da utilização de hardcodes é a tradução para outros idiomas, sabemos
que o SAP é um sistema usado mundialmente por empresas multinacionais, e caso um programa
seja apresentado para um usuário de outro país, um hardcode não poderá ser traduzido para o
idioma local. No SAP temos a opção de criar elementos de texto, que são objetos que carregam uma
informação de texto que pode ser traduzida posteriormente, para criar um elemento de texto, basta
criar a sintaxe “text-“ seguida da de uma sequência de 3 números ou letras, como no exemplo
abaixo:

Após a criação da sintaxe, dê um duplo clique sobre a sequência de 3 letras, o programa irá
perguntar se você deseja criar um elemento de textos novo, conforma na imagem abaixo:
Os elementos de texto devem e sempre são utilizados para nomear tudo o que for visível para o
usuário e sua utilização pode ser reaproveitada, já que uma vez criado o objeto pode ser usado em
mais pontos do programa:

Sempre após a criação de um elemento de textos novo, não se esqueça de ativar o Elemento de
Texto e o Programa ABAP, pois ambos são objetos distintos.

 Usando Ferramentas da SE38 (Edição de Códigos)


Pesquisar onde programa é chamado

O SAP permite que seja encontrada todas as chamadas de um programa ABAP diretamente da
transação SE38, mesmo que essa opção sirva para várias transações, vamos entender seu
funcionamento partindo da edição de códigos.

Vamos usar de exemplo o programa ZTESTE, ele é chamado por uma função, mas não sabemos qual
e precisamos encontrar qual é essa função que chama o programa, para isso, usamos a opção
indicada, conforme na imagem abaixo:
É possível selecionar em quais objetos a pesquisa será realizada:

Ao clicar em confirmar, o programa irá retornar todas as chamadas daquele programa ZTESTE, no
nosso caso, ele está sendo chamado apenas em uma função:
 Variantes

Uma variante é um preenchimento automático de uma tela pra um programa ABAP, alguns
programas têm telas bastante complexas e o preenchimento diário de todas as informações dessa
tela pode tornar o trabalho muito menos prático, vejamos abaixo como criar uma variante dentro
de um programa ABAP.

Em uma tela de seleção simples, foram criados 7 campos, e vamos salvar essas informações para
que as mesmas sejam chamadas novamente quando quisermos, mesmo que o SAP seja encerrado.

Para isso, após preencher as informações, como na imagem acima, basta clicar no ícone salvar

, será exibida uma tela, conforme a imagem abaixo:

Você pode definir o nome da sua variante como preferir e informar uma descrição, feito esses dois

passos, basta clicar no botão salvar novamente e sua variante estará salva.

Ao entrarmos novamente no programa, a opção marcada em vermelho será exibida, clique sobre
ela:
Selecione sua variante e clique em confirmar:

Os dados serão carregados da mesma forma que foram salvos anteriormente, uma variante pode
ser sobregravada com o mesmo nome ou pode ser criada uma nova a partir de um novo nome.

 - Tornando o seu trabalho mais fácil (configuração de sintaxes pré-


definidas)
Uma das dicas pouco conhecidas no SAP é configuração de sintaxes pré-definidas, todas as sintaxes
do ABAP podem ser completadas com o uso da tecla TAB do teclado, conforme o exemplo abaixo:
Sempre que o símbolo entre () for exibido, ao pressionar a tecla o comando será preenchido
automaticamente, isso existe em diversas linguagens de programação e é muito útil para facilitar o
trabalho do programador. O SAP permite que sejam criadas novas configurações pré-definidas
como, por exemplo, para indicar alterações no código ABAP, vejamos abaixo como criar uma
configuração pré-definida de sintaxe.

No editor de código, clique no botão que está destacado em vermelho, conforme a imagem:

Vá até a opção “Modelo de código”:

Aqui ficam definidas todas as sintaxes que podem ser completadas automaticamente com a tecla
TAB, inclusive as já definidas pela SAP, não é recomendado que sejam removidas as já existentes,
para inserir uma nova, clique no botão “Inserir”.
O campo nome é usado para indicar qual será o comando que será chamado para ser auto
completado pela tecla TAB, utilize algo que não tenha conflitos com alguma outra sintaxe já
existente, como por exemplo, “quadro”, que serve para fazer cabeçalhos e vamos fazer nesse
exemplo, a descrição não necessita de nenhuma configuração específica, serve apenas para
informar para que serve o comando auto completar criado.

Tudo o que for inserido dentro da parte de codificação do modelo de código, será preenchido
automaticamente pela chamada do “quadro” dentro do editor ABAP, neste exemplo criamos uma
linha de asteriscos para formar um cabeçalho.

Ao chamar a palavra quadro no editor ABAP e pressionar o TAB no teclado, automaticamente será
preenchido o quadro criado, já formatado e agilizando o trabalho que muitas vezes tem que ser
feito repetidamente:
Também é possível inserir informações precisas, como horas, posição do cursor, dentre outros,
para isso, basta durante a edição do modelo de código, clicar na opção “Inserir Tag”:

Vamos inserir, por exemplo, a data e hora dentro do quadro:

Ao ser chamado em um programa ABAP:


 Entendendo o Help de Sintaxe ABAP (Documentação e Transação de
ajuda)
Todas as sintaxes do ABAP podem ser exploradas de forma mais completas através do help SAP (F1
no Teclado), para isso, em qualquer sintaxe dentro do editor, basta clicar sobre o comando desejado
e pressionar a tecla F1 no teclado e o Help será exibido, demonstrando o comando de forma
completa, seguido de um exemplo de sua utilização, conforme demonstrado abaixo:

Quando exibida a ajuda, basta clicar duas vezes sobre o comando desejado e a ajuda completa será
exibida:
Ainda dentro do Help, outros comandos podem ser pesquisados diretamente da barra de pesquisas,
localizada no canto superior esquerdo:

Ainda se tratando do Help SAP, temos a transação ABAPDOCU, que contém diversos exemplos de
comandos e sintaxes, que podem ajudar no entendimento de um comando:
Você pode buscar o comando por ordem alfabética:

E pode até mesmo executar e testar comandos através dos SAMPLES ABAP:
4 - Banco de Dados e Performance

 - Conhecendo os tipos de Select

Para os tipos de selects diversos, foi anexa uma apostila que contém as definições de diversos tipos
de selects, o arquivo se encontra no link abaixo, durante a aula, usamos os dois tipos mais básicos
de selects, SELECT com campos completos e campos únicos e o SELECT SINGLE que veremos
abaixo:

Link para apostila de Selects diversos: https://drive.google.com/open?id=1SLd-


NSL5bE6dE6uj7c1is8NHUx11qFsG

O uso da do comando SELECT:

O SELECT é um comando de SQL, usado para trazer os dados de uma tabela transparente do banco
de dados para uma tabela interna do programa, no exemplo abaixo, podemos ver um SELECT
comum, usando campos específicos ou *, que no caso indica que vamos selecionar todos os campos
da tabela destino, que no caso é especificado pelo comando FROM, nesse comando indicamos
qualquer tabela existente de banco de dados, podendo ser uma tabela standard ou uma tabela Z.
Após indicar quais campos e qual a tabela de qual será feita a seleção, devemos indicar para qual
será o destino dos dados, para isso o comando INTO TABLE deve vir acompanhado de uma tabela
interna, criada com a mesma estrutura para que receba os campos e faça uma cópia dos dados da
tabela transparente para a memória lógica do programa.

Para o caso de um SELECT SINGLE, o comando INTO só deve conter uma estrutura, pois será usado
para recuperar apenas um único registro da tabela, conforme o exemplo abaixo:

COMANDO WHERE:

Em todos os tipos de SELECTS, podemos definir qual será o seu filtro de seleção, os mesmos podem
ser definidos com um ou mais campos, mas sempre devemos lembrar que para o uso do SELECT
SINGLE devemos sempre usar os campos chave, pois o SELECT SINGLE retorna apenas um registro
da sua seleção, então seu filtro de seleção deve ser preenchido de forma completa, ou sua busca
retornará o primeiro registro encontrado em sua pesquisa e se o objeto não for esse, sua seleção
poderá conter dados errados.
 - Entendendo boas práticas de programação no uso de Select

Podemos usar quantos campos precisamos dentro de um comando SELECT, o uso do * no SELECT
como dito acima indica que queremos selecionar todos os campos de uma tabela, no exemplo
abaixo, o SELECT está selecionando todos os 248campos da tabela MARA:

Em muitas especificações, não precisamos usar todos os campos em uma seleção, mas para poupar
tempo acabamos usando o * para evitar criar uma estrutura definida apenas com os campos que
precisamos, isso pode acarretar lentidão no caso de grandes tabelas, a MARA por exemplo, contém
248 campos, a cada registro, o número de linhas é multiplicado por 248, ou seja, se nossa seleção
retornar 1000 registros, nossa tabela terá um total de 1000*248 registros, se nosso objetivo era
apenas pegar o campo MATNR e MTART por exemplo, toda pesquisa adicional foi desnecessária,
para evitar o uso desse tipo de prática, definimos um TYPE, conforme demonstrado no exemplo
abaixo:
O uso de uma instrução como abaixo, facilita na hora da codificação, mas faz os dados crescerem
muito dentro de uma tabela:

 - Utilização e criação de índices

Ainda se tratando de filtros dos SELECTS, nem sempre temos os campos chaves a nossa mão para
podermos utilizar dentro de nossos desenvolvimentos, em muitos casos, dentro de pontos
específicos do Standard não temos todos os dados em uma tela para fazer uma seleção completa e
temos que procurar em outros campos uma forma de acessar uma tabela, porém, alguns campos
não chave como datas e outros campos se repetem muito dentro de uma tabela, tornando sua
pesquisa muito lenta e podendo até causar TIME_OUT dentro do sistema.

Para esse tipo de problema, podemos usar índices criados dentro de tabelas, que são formas
secundárias se acessar dados de tabelas através de campos não chaves, porém com uma pesquisa
mais direcionada, feita através de um índice no banco de dados, vejamos abaixo como acessar os
índices criados de uma tabela transparente:

Navegue até a transação SE11:

Vamos usar nesse exemplo a tabela EKKO:


Na exibição da tabela através da SE11, clique no botão índice, conforme indicado na imagem acima:

Os índices já criados previamente serão exibidos, eles são formados já pensados em algumas
possibilidades de acordo com cada tabela, e podem ser usados dentro do SELECT, para tornar a
pesquisa no comando WHERE mais rápida, evitando que o SELECT se torne muito lento por não
conter campo chave.

Exibição de um índice:

No exemplo acima, os campos LIFNR, EKORG, EKGRP, BEDAT podem ser usados no WHERE,
tornando a pesquisa mais rápida, mesmo que esses não sejam chaves.
É possível ainda criar um índice para uma tabela, tanto Z quanto Standard, para isso, na tela

principal de índices, basta clicar no botão , conforme indicado na tela abaixo:

Clique na opção criar Índice :

Informe o nome do Índice a ser criado, no exemplo abaixo foi escolhido “Z01”:

Em seguida, basta indicar quais campos serão utilizados nesse novo índice criado, conforme a
imagem:
Para forçar a utilização de um índice em um SELECT ABAP, devemos utilizar a sintaxe abaixo:

O comando %_HINTS ORACLE Indica a utilização de um índice seguido de seu prefiro ‘INDEX
(“NOME DA TABELA” “NOME DA TABELA~NOME DO ÍNDICE).

 - Seleções por pacote (Package Size)

Se tratando de Performance ABAP, uma tabela interna tem um limite de dados que pode receber
antes de causar um DUMP por estouro de memória, tabelas como BSEG contém milhares ou até
bilhares e registros e uma forma de amenizar seu conteúdo é utilizando a seleção por pacote.

O comando PACKAGE SIZE, faz a seleção por blocos em uma tabela, entre o comando SELECT e o
comando ENDSELECT, como uma leitura sequencial, ou seja, você pode fazer uma seleção completa
de todos os dados, mas em partes, definindo quantos pacotes quer trazer por vez dentro daquela
tabela interna, o uso dessa sintaxe é definido conforme a imagem abaixo:
A indicação de 5000 ao lado do comando PACKAGE SIZE quer dizer que serão trazidas 5000 linhas
de cada vez entre o comando SELECT e o ENDSELECT, caso seja necessário, por exemplo, transferir
todos esses dados para uma arquivo, é possível aproveitar esse programa para evitar o estouro de
memória, já que a gravação de arquivo também permite que sejam transferidas informações por
pacote dentro de arquivos, isso evitaria que uma tabela tivesse que conter milhares ou bilhares de
registros, se tratando apenas de pacotes por vez, embora incomum, essa é uma ferramenta muito
importante de ser conhecida.

 - Seleções de várias tabelas dentro do mesmo Select

INNER JOIN
Podemos selecionar mais de uma tabela dentro de um mesmo select, para isso podemos usar o
comando INNER JOIN, também herdado do SQL, conforme demonstrado no exemplo abaixo:

As definições de nome para o comando AS, podem ser definidas pelo programador, no exemplo
usamos o A e B para definir o nome das tabelas MARA e MAKT, que serão unidas em apenas um
SELECT, o COMANDO ON, faz a relação da chave entre as duas tabelas, é necessário que existam
dois campos comuns entre as tabelas que serão relacionadas, ou o comando INNER JOIN não será
possível, uma vez definido o nome para cada tabela, toda vez que a referencia do campo de uma
tabela for utilizada, precisamos definir o nome junto ao campo de sua tabela, como no exemplo
acima a~matnr que indica a = MARA.
FOR ALL ENTRIES IN
Outra forma de relacionar duas tabelas é usar o comando FOR ALL ENTRIES IN, esse campo usa
uma tabela anterior para selecionar a próxima, usando os campos já preenchidos de uma como
pesquisa da outra tabela, vejamos no exemplo abaixo:

É muito importante ressaltar, que para usar esse comando, a tabela usada como referência deve
estar sempre preenchida, caso contrário a segunda tabela terá seu índice de pesquisa vazio,
retornando todos os dados de sua pesquisa, como um SELECT *, já que as suas entradas serão todas
consideradas.
Em termos de boas práticas, o uso de qualquer comando é recomendado, vai de acordo com a regra
de programação de cada consultoria ou da preferência de cada programador.
5 - Programas Diversos
 Programas de carga/Interface (Upload/Download)
Muitas das interfaces de comunicação no SAP, tem como sua principal base a troca de arquivo entre
sistemas, para isso, os arquivos podem ser recebidos no SAP através de um TXT, CSV, Excel, dentre
outros formatos conhecidos e mais utilizados, o SAP também pode gerar arquivos nesse formato,
para fornecer para sistemas terceiros (legados) as informações que forem necessárias para essa
transferência de dados.

 Formato TXT (Upload/Download)


Um dos formatos mais conhecidos para geração de arquivos é o TXT, por ser mais leve e de fácil
comunicação entre vários sistemas, vejamos abaixo como funciona um programa de upload e
download e informações no SAP:

 Upload de Arquivos – File Local:

Podemos subir arquivos diretamente de um caminho local no computador, para isso, criamos um
PARAMETER associado a uma ajuda de pesquisa para encontrar esse arquivo, o tipo de objeto
padrão associado a esse PARAMETER é o RLGRAP-FILENAME, pois este tipo de objeto já está
associado a um tamanho de 128 caracteres padrão aos caminhos de arquivo, sua declaração ficaria
como na imagem abaixo:

Ao criar o objeto acima, o campo na tela será criado com o tamanho indicado, porém, a caixa de
pesquisa para o caminho no Windows não será exibida ao menos que associarmos um evento para
que essa pesquisa seja adicionada, veremos mais adiante no curso como os eventos funcionam, mas
para não perdemos esse ponto nessa aula, vamos criar o evento abaixo para associar uma ação ao
PARAMETER p_file criado, conforme na imagem abaixo:

O evento acima indica que uma ação será adicionada ao campo p_file, no caso, chamaremos uma
função do SAP que atribui automaticamente a caixa de diálogo do Windows, permitindo a pesquisa
pelo arquivo, para isso, basta informar após esse evento o código, conforme abaixo:

Ao criar a função com os parâmetros corretos, o PARAMETER terá uma opção de pesquisa
associado, permitindo ao usuário buscar o caminho do arquivo, conforme as imagens abaixo:
Caixa de diálogo exibida:

Para que o arquivo seja importado para o SAP, precisamos usar uma outra função do SAP, chamada
GUI_UPLOAD, essa função tem diversas utilizações, utilizaremos nesse exemplo o seu conceito mais
simples, onde ela lê o nome do arquivo e o converte para uma tabela interna, para isso, antes de
mais nada, vamos criar uma tabela interna que possa importar os dados do arquivo de forma
completa, nesse exemplo declaramos nossa tabela interna com o tipo abaixo:

O tamanho 500 foi utilizado de modo genérico, em programas de ambientes produtivos, teremos o
tamanho exato do que esses arquivos podem conter, então, sempre vamos definir o seu tipo com o
tamanho máximo da linha, para que nenhum dado seja perdido durante a importação, após a
criação da tabela interna, vamos chamar a função GUI_UPLOAD, passando os parâmetros
obrigatórios para a conversão do arquivo em tabela interna, conforme demonstrado abaixo:
Todas as funções do SAP só podem receber campos definidos exatamente com o seu tipo correto, no
caso o campo P_FILE foi definido com tamanho de 128 para a tela, e o tamanho do campo da função
é de formato STRING, devido a isso, fizemos a passagem do campo para uma variável criada
localmente, caso contrário a função não interpretará o campo correto causando DUMP durante a
importação das informações necessárias.

 Download de Arquivos – File Local:

Seguindo o mesmo conceito do Upload, precisamos criar um PARAMETER com o tipo RLGRAP-
FILENAME para que o usuário possa informar o caminho e o arquivo a ser criado, também é
possível associar um evento para encontrar um arquivo, mas a função é um pouco diferente da que
usamos para encontrar um arquivo local, já que na criação do arquivo o ideal é que o usuário sugira
o local já de modo Default e o arquivo seja gerado via programa, ou seja, dentro da lógica o nome do
arquivo seja gerado através de algumas concatenações de data, siglas etc, por isso, no exemplo
abaixo, criamos apenas um PARAMETER simples associado ao tipo mencionado:

Após informado na tela o caminho e o nome do arquivo, vamos chamar a função GUI_DOWNLOAD,
que se parece muito com a função GUI_UPLOAD, conforme demonstrada abaixo:
 Formato Excel (Upload/Download)

Além do formato TXT, também muitas vezes usamos o formato Excel para carregar os dados para o
SAP, para isso, seguimos com a mesma lógica para a criação do PARAMETER de importação.

 Upload de Arquivos Excel – File Local:

Para importar um arquivo Excel para o SAP, criamos um PARAMETER da mesma forma que
criamos para os formatos TXT, sem nenhuma alteração a única diferença para esse tipo de
importação está na declaração da tabela interna que receberá as informações e na função que é
chamada para fazer a conversão, vejamos abaixo em um exemplo como isso é realizado.

Foi criada uma tabela interna com 3 campos, esses 3 campos representam as 3 colunas em um
Excel, ou seja, caso o Excel tenha 15 colunas, vamos precisar criar 15 campos dentro do nosso
TYPES, usamos um exemplo de declaração de tabelas internas mais antigo, embora obsoleto ele fica
como um exemplo diferente de como uma tabela interna pode ser criada, segue abaixo:

Após a criação da tabela interna e o número de campos equivalente as colunas do Excel, usaremos a
função TEXT_CONVERT_XLS_TO_SAP para converter os dados do Excel para uma tabela interna do
SAP, vejamos abaixo como o preenchimento dessa função deve ocorrer:

Existe uma diferença em relação a função GUI_UPLOAD que recebe o caminho do arquivo apenas
por um campo do tipo STRING, a função TEXT_CONVERT_XLS_TO_SAP pode receber diretamente do
campo da tela de seleção, desde que o mesmo tenha o formato de 128 caracteres, pois a função
contem o mesmo parâmetro, não causando problemas. O parâmetro i_line_header indica se será
importada a primeira linha ou apenas a partir da segunda, isso para o caso de arquivos Excel que
possam conter linhas de cabeçalho.

 Download de Arquivos Excel – File Local:

Para gerar um arquivo em CSV, o formato padrão em arquivos Excel usados em comunicação entre
sistemas, usamos a mesma função GUI_DOWNLOAD, porém, com a regra que ao invés de informar
um arquivo com extensão TXT usamos o formato CSV, e a função fará a conversão
automaticamente, no exemplo abaixo, usamos os mesmos dados que foram importados do Excel no
exemplo acima para gerar um download em CSV das mesmas informações, segue abaixo o exemplo:
 Diferentes tipos de ALVs e seus conceitos
Os ALVs são os relatórios gerados para exibir as informações diversas do SAP, muito requisitados
em todos os clientes, pois podem fornecer quaisquer tipo de informações programadas além de
carregar automaticamente uma série de ferramentas para manuseio desse relatório, abaixo
veremos como montar um ALV simples passo a passo e em seguida alguns conceitos de diferentes
tipos de ALVs que o SAP pode conter.

No exemplo abaixo, temos um ALV que não possui tela de seleção, quando executado, o programa
faz uma busca dos dados de uma tabela e apresenta diretamente o relatório dos dados encontrados
nesta tabela.

A função do ALV, como as demais funções do SAP, precisa de algumas configurações pré-definidas
para que possa ser executada, embora a função REUSE_ALV_GRID_DISPLAY tenha muitas
ferramentas que possam ser utilizadas a que veremos logo abaixo são as essenciais para que o
relatório seja exibido de forma simples:

 Tabela de configuração de Fieldcat:

O Fieldcat pode ser comparado o TYPES de uma tabela interna, o ALV precisa saber quais campos e
qual o tipo dos campos que serão exibidos em seu relatório, bem como sua descrição, tamanho, etc.
Essa estrutura é obrigatória e sem ela não é possível exibir o relatório, para definir essa estrutura,
sempre devemos declarar uma tabela interna com o tipo SLIS_T_FIELDCAT_ALV, que pertence a um
grupo de tipos do ALV. O grupo de tipos é um conjunto de TYPES já definidos dentro do SAP, ele
pode ser acessado pela sintaxe TYPE-POOLS, dentro desse grupo de tipos definimos diversos TYPES
que podem ser reutilizados em um programa ABAP, é possível criar um grupo de tipos Z, veremos
isso mais adiante no curso, mas é essencial lembrar que para todos os ALVs, vamos precisar definir
logo no início do programa a chamada da sintaxe conforme abaixo:

O grupo de tipo SLIS contém diversos TYPES do ALV, inclusive o SLIS_T_FIELDCAT_ALV que vamos
usar para referenciar nossa tabela interna do fieldcat, para isso, vamos criar uma tabela interna,
conforme a imagem abaixo:
Ainda se tratando da configuração do ALV, podemos definir algumas opções para a exibição do
relatório, como colunas otimizadas automaticamente, campos de valores já somados de modo
default, o zebra, que faz as linhas ficarem tracejadas para melhor visualização, e para isso usamos
uma outra referencia associada ao grupo de tipos SLIS que é SLIS_LAYOUT_ALV, nesse caso esse
objeto não precisa e nem deve ser criado como tabela, pois possui apenas uma linha, sendo assim,
criamos apenas como uma work área, conforme a imagem abaixo:

Em nosso programa de exemplo, criamos 3 rotinas de modularização para agrupar os passos do


programa, uma para a seleção dos dados que serão exibidos, a outra para montar o fieldcat e a
última para exibir o ALV, conforme a imagem abaixo:

 Seleção dos dados:

Foi utilizada uma seleção simples em uma tabela Z já existente, para pegar todo o seu conteúdo e
jogar em uma tabela interna que foi criada com o nome de t_itab, ela faz referência a tabela
ZSOFTWARE.

 Montagem do Fieldcat:

A tabela do fieldcat contém inúmeras configurações que podem ser levadas ao ALV, usamos apenas
3 dos diversos campos que ela pode receber, esses 3 campos informam para o ALV qual é o campo,
de qual tabela interna e qual sua descrição a ser exibida no ALV:
Cada um dos campos exibidos em literais acima, são convertidos em variáveis criadas dentro do
form, na mesma ordem em que foram criadas no comando USING, ou seja, P_CODIGO recebe o valor
do nome do campo declarado na chamada do PERFORM, P_TAB recebe o nome da tabela interna e
P_DESC recebe o nome da descrição do campo que foi informado anteriormente.

Os dados são passados para a work área da estrutura do fieldcat em seguida são inseridos na tabela
interna do fieldcat, que neste exemplo terá 3 linhas, contendo a configuração dos campos que serão
exibidos no ALV:

 Exibição do ALV:

Antes de chamar a função do ALV, definimos algumas configurações para sua exibição, essa
estrutura abaixo contém diversas configurações que podem ser personalizadas, usamos apenas o
ZEBRA mencionado acima e a otimização das colunas, para que sejam redimensionadas de acordo
com o tamanho do texto e do campo:

Após feita a configuração de exibição, passamos os parâmetros para a função do alv


REUSE_ALV_GRID_DISPLAY, informando os parâmetros básicos essenciais para que o relatório seja
exibido.

O parâmetro i_callback_program deve sempre receber a variável de sistema com o nome do


programa, assim quando o usuário clicar em voltar, o SAP irá retornar para a tela de seleção do
programa que chamou a função.

Os parâmetros i_default e i_save normalmente são preenchidos como estão abaixo, salvo raras
exceções para alvs específicos.
Resultado do ALV:

As ferramentas exibidas acima do relatório já são configuradas automaticamente pela função, é


possível editar essas ferramentas, seja para adicionar ou remover botões, porém as que já vem
configuradas não precisam de nenhuma programação ABAP para funcionar, pois a função já tem
sua programação realizada.

 ALV Tree
O SAP possui diversos tipos de ALVs mais complexos, a imagem abaixo exibe um ALV com pastas
para seus itens, com um conceito de cabeçalho, item e sub itens de registros, embora sua
codificação seja um pouco mais ampla, a SAP disponibiliza exemplos desses ALVs, são os chamados
BCALV*, esse abaixo se chama: BCALV_TREE_DND_MULTIPLE
 ALV Múltiplo na mesma tela
Também é possível exibir mais de um ALV na mesma tela, como o BCALV_TEST_BLOCK_LIST, esse
conceito é chamado de ALV SPLIT, não é muito utilizado, mas é importante que seja conhecido, pois
em alguma etapa de algum processo pode ser necessária a criação de algum ALV desse tipo, mesmo
que os exemplos do SAP não ajudem, na internet ao usar o termo ALV SPLIT várias referências
serão demonstradas sobre esse ALV.
6 - Module Pool ABAP
O conceito de Module Pool é um pouco diferente do report, no module pool podemos desenhar as
telas e configurar toda sua ação desde os botões de ferramentas padrões, até todo controle de tela.

Antes de iniciarmos o entendimento do module pool, precisamos entender o conceito de include,


pois o module pool é separado por blocos de programas que tem suas utilizações específicas e
essenciais para a funcionalidade da aplicação.

 Include:

O Include é um objeto ABAP que contém um trecho do código ou até mesmo um código completo de
uma lógica que pode ser reutilizada em outros programas ABAP.

 Criação de um include:

Na transação SE38, informe o nome do include desejado começando por Z ou Y, conforme o


exemplo abaixo:

Informe no tipo de programa a opção: I Programa Include.


Em um report normal, o include pode ser chamado conforme a imagem abaixo e o código que está
inserido dentro desse include é inserido na linha onde sua sintaxe foi declarada e tem a mesma ação
do código “solto” em um programa. Essa função também é utilizada para modularizar programas
para que fiquem mais práticos e mais organizados:

Dentro do nosso include de teste, foi criado um parameter para uma tela de seleção simples:

Resultado:
O conceito do module Pool é utilizar os includes para organizar o programa normalmente criado em
4 includes principais que veremos logo a seguir, para criar um module pool, basta acessar a
transação SE80 e selecionar a opção programa, conforme a imagem abaixo:

É importante ressaltar que para a criação de um module pool o prefixo do nome do programa que
contém 4 letras deve ser sempre SAPM seguido de um Z ou Y para indicar que o objeto não é um
standard, isso não é uma obrigatoriedade, é possível criar module pools mesmo sem usar o prefixo,
mas é recomendado que se use da forma como no exemplo acima SAPMZAULA02.

Ao informar o nome de um module pool e pressionar Enter ou clicar no botão , se o objeto


ainda não existir, será exibida uma caixa de diálogo solicitando a criação do objeto, conforme a
imagem abaixo:

Como o module pool depende de includes para funcionar, vamos começar a entender o seu
primeiro e principal include, o include TOP.

Em um programa normal ABAP (SE38), utilizamos as primeiras linhas do programa para fazer as
declarações de objetos que vamos precisar durante a codificação, esse conceito não é diferente no
module pool, mas todas as declarações ficam dentro de um include especifico que chamamos de
TOP por ser o primeiro include de um objeto module pool.
Marque a opção “Criar com include TOP” e informe o nome do include, essa nomenclatura é livre,
mas sempre por boas práticas usamos o mesmo nome do objeto criado seguido de um _TOP,
conforme a imagem abaixo:

A tela abaixo não difere da criação de um programa normal, apenas por seu tipo de programa M,
que indica que é um programa “Module Pool”:
Resultado:

Ao lado esquerdo, teremos a árvore com todos os objetos criados dentro do module pool, todos
organizados por seus tipos e ao lado direito o código fonte de cada objeto.

Ao criar um module pool com o include top, outros 3 includes serão sugeridos automaticamente em
seu programa principal, conforme a imagem abaixo:

A estrutura de um module pool segue por padrão o conceito de 4 includes, sendo cada um para uma
função específica, mas também não é uma regra podendo então haver mais ou menos includes
criados, vamos seguir o exemplo de nossa aula com o tipo padrão, primeiro removemos os
comentários de cada include e depois, para criar cada objeto, basta dar um duplo clique sobre o seu
nome e confirmar a criação do objeto, conforme a imagem:
Se necessário, informar a descrição para cada include, porém automaticamente o SAP já gera um
texto padrão, que quase em todos os casos é mantido da mesma forma, após isso basta confirmar e
criar os próximos objetos da mesma forma.

Nosso programa deverá estar igual ao exemplo abaixo:


Do lado esquerdo, temos objetos de cor azul que indicam que os mesmos estão inativos, para ativar
todos os objetos de um programa module pool, clicamos duas vezes sobre o nome do programa
principal “SAPMZAULA02”, em seguida com o botão direito do mouse em cima do nome clique em
ativar:

Todos objetos inativos que pertencem ao programa principal serão ativados em conjunto, é
recomendado que a ativação sempre seja feita dessa forma para que nenhum objeto fique inativo
ocasionando erros durante o processamento do programa”

Um programa module pool não pode ser testado pressionando F8 como em um report ABAP, pois o
mesmo só pode ser acessado através de uma transação criada associada ao nome do objeto que
veremos logo a seguir.

Para dar inicio a construção do nosso module pool, vamos primeiramente criar uma tela, para isso,
com o botão direito sobre o programa principal, selecione a opção criar em seguida a opção tela,
conforme a imagem:
A tela do module pool é indicada através de um intervalo de números que pode ser do 0001 até o
9999, por padrão, sempre criamos a tela 1000 ou em alguns casos a tela 9000 como a tela principal.
Um programa module pool pode ter várias telas, mas deve partir de uma tela que será a chamada
principal de todas as suas outras funções ou telas:
Existem 3 abas dentro de uma tela, a de características que informam o tipo da tela e algumas
informações de formatação dessa tela, como tamanho, se os dados serão salvos para serem
utilizados posteriormente em campos, dentre outras opções, vamos deixar tudo da forma padrão e
navegar até a aba “Lógica de processamento”:

Todo o código de um module pool normalmente está contido dentro de suas telas dentro de sua
codificação conforme a imagem acima, cada tela é dividida em dois eventos principais:

 PROCESS BEFORE OUTPUT


 PROCESS AFTER INPUT
 Conhecendo o os conceitos PBO/PAI (Process Before
Output/Process After Input)

- PROCESS BEFORE OUTPUT (PBO)

São todos os passos que o programa realiza antes de apresentar a tela para o usuário, ou seja, caso
precisamos de um campo sendo preenchido com um valor default, é neste evento que faremos essa
inserção de dados.

Os status da tela, que são seus botões e ferramentas daquela tela também são configurados nesse
evento, veremos esse passo logo abaixo.

- PROCESS AFTER INPUT (PAI)

São todos os passos após alguma ação do usuário na tela, ou seja, depois que a tela for exibida e o
usuário selecionar alguma opção presente na tela é para esse evento que o programa apontará,
assim temos a separação do que acontece antes e depois da interação do usuário com a tela.

É dentro do PAI que toda a lógica principal da tela será desenvolvida.

 Como criar e desenhar uma tela (Com botões, campos editáveis, table control, etc.)

Após a criação da tela como vemos nas instruções acima, devemos desejar quais objetos serão
exibidos nessa tela, esse desenho é feito através do botão Layout presente dentro da tela, conforme
a imagem abaixo:
Nessa tela podemos desenhar exatamente da forma como quisermos a nossa tela principal e as
demais telas do module pool, vamos criar alguns parâmetros usando as opções abaixo:

- Criação de um texto para a tela

- Criação de um campo de entrada/saída para a tela

- Criação de campos pra marcação

- Criação de Radio Buttons

- Criação de Botões

- Criação de abas para a tela

- Criação de abas no modo Wizard (assistente de criação)

- Quadro para agrupar objetos em uma tela (semelhante ao WITH FRAME do Report)

- Usado para a criação de uma subtela ou seja, uma tela dentro da outra

- Criação de Table Control (Tabelas de exibição de dados)

- Criação de Table Control Wizard (assistente de criação)

- Custom Control (quadros dinâmicos que podem ser objetos dinâmicos)

- Criação de ícones na tela


No exemplo abaixo, usamos os campos de texto, entra da e saída e botões para desenhar a tela,
todos agrupados dentro de um quadro:”

Todos os objetos na tela podem ter seus textos e nomes definidos na barra de ferramentas,
conforme a imagem abaixo:

Todos objetos precisam de um nome, ou depentendo do seu tipo de também um texto para sua
descrição, caso não possuam ficarão destacados com a cor em vermelho, indicando que ainda falta a
nomenclatura de alguma de suas configurações. Também podemos acessar as opções avançadas de
objetos dando um duplo clique sobre ele na tela, será exibida a caixa de diálogo abaixo:
Essas opções avançadas ajudam a definir algumas configurações especificas de cada objeto criado
na tela como, por exemplo, em um campo de entrada/saída se o campo será apenas para exibição,
ou se permitirá que o usuário informe dados, além de poder associar campos diretamente a tabelas,
para carregar suas configurações. Também é possível definir seu tipo e tamanho, de acordo com a
preferencia de cada objeto.
 Status GUI, Title Gui, Module

 Status GUI

Os status são as barras de ferramentas presentes em uma tela de um programa module pool, ao
criarmos uma tela, não temos nenhuma barra de ferramenta associada a tela, ou seja, nenhum
botão será exibido caso não sejam configurados, inclusive os botões principais de navegação
(voltar, sair, cancelar, etc.).

O Status Gui é o responsável por 3 dessas camadas de barras de ferramentas, que incluem os menus
principais de navegação do SAP, os botões de exibição da barra de navegação e os botões presentes
na sub aba de ferramentas da tela. Para criar um Status GUI, vá até o programa principal e clique
com o botão direito sobre o nome, selecione a opção criar e em seguida a opção STATUS Gui,
conforme a imagem abaixo:

Mesmo que não seja obrigatório, normalmente informamos o nome do Status igual ao da tela
criada, no caso, nossa tela 1000 terá o status 1000 criado para ela:
A opção barra de Menu permite controlar quais menus serão exibidos durante a execução daquela
aplicação, você pode esconder todos os menus do SAP, ou permitir que apenas algumas opções
sejam exibidas, inclusive criar o seu próprio menu de navegação de um programa:

A opção barra de ferramentas para a tela permite que alguns botões sejam configurados
especificamente para aquela tela, de forma automática, como botões de cancelar, ou confirmar, ou
até mesmo montar uma barra de ferramentas especificas para execuções de diversas funções que
serão criadas dentro do module pool, isso facilita a utilização da tela pelo usuário e os botões
podem ficar agrupados e organizados de acordo com a prefer6encia do programador:

A opção Barra de Ferramentas principal permite que o usuário selecione quais botões serão
exibidos durante a execução de uma tela, podendo deixar qualquer botão ou todos ocultos ou até
mesmo um ou mais visíveis, variando de tela em tela, nunca devemos esquecer dos principais
campos da barra de ferramentas principal, que são:

Ao associar um nome ao botão da barra de ferramentas, um código de função será atribuído para
que possa ser identificado pelo programador ABAP que configurará sua função, usamos os nomes
padrões para esses botões, porém, o nome pode ser configurado de acordo com a preferência do
programador.

Nesse exemplo preenchemos apenas os campos de saída, que são os essenciais para que o usuário
possa sair da aplicação através da barra de ferramentas padrão, após configurar a o Status GUI,
precisamos associar o objeto a tela e para isso, vamos incluir sua chamada no evento PBO (Process
Before Output da tela) como veremos logo abaixo:
 Titúlos GUI

Ao exibir uma tela, uma descrição pode ser associada ao objeto para que seja exibida como uma
descrição, uma opção parecida com a característica de um Report, que da o nome a tela principal do
programa ABAP na SE38, para criar um título para a tela, basta clicar com o botão direito sobre o
nome do programa principal, selecionar a opção criar e em seguida Títulos Gui, conforme a imagem:

Seguindo o mesmo padrão do Status GUI, informamos o nome do título GUI como o nome da tela e
em seguida o título que será exibido, esse objeto também será chamado no PBO, conforme veremos
logo abaixo.
Após a criação desses dois objetos, teremos nosso programa principal com suas árvores definidas
com cada objeto agrupado, conforme a imagem abaixo:

Lembre-se sempre de ativar todos os objetos clicando duas vezes no programa principal, em
seguida com o botão direito sobre o mesmo e depois ativar:

Todos os novos objetos serão selecionados e ativados após a confirmação, caso não tenham
nenhum erro de criação ou de sintaxe.
 Modules

Os modules são usados para modularizar um programa module pool, funcionam para dar um
agrupamento especifico para cada função de um programa, esses objetos funcionam
individualmente em cada evento do programa como veremos abaixo, para demonstrar sua
utilização, vamos associar o Status GUI e o Títulos GUI a tela 1000 dentro do evento PBO da tela
100, para isso navegue pelas árvores até a tela 1000, em seguida vá até a aba “Lógica de
processamento”:

Um MODULE STATUS_1000 já foi sugerido automaticamente para agrupar os objetos desse evento,
esse tipo de configuração sempre acontece ao criarmos um module pool, mas podemos criar
quantos modules forem necessários para separar rotinas dentro de um programa, para criar, basta
remover o comentário e clicar duas vezes sobre o nome do objeto, conforme a imagem:

Sempre que um Module for criado em um Module Pool, o SAP fará a pergunta sobre qual include
deverá associar aquele MODULE, no início da criação do programa, deixamos mais 3 objetos além
do include TOP criados para serem usados posteriormente e essa separação é importante para
mencionar a que momento e a que evento cada module pertence.
Em nosso exemplo atual, estamos criando um objeto que será chamado no evento PBO da tela, pois
a barra de ferramentas é carregada antes do usuário interagir, por isso foi selecionado na imagem
acima o include com final O01 a letra O indica que esse include agrupará todos os Modules de PBO
de um programa.

O Include I01 serve para todos os modules que forem criados a partir dos eventos PAI (Process
After Input), também para que todos fiquem agrupados de forma correta.

O Include com final F01 serve para agrupar todos os FORMS de chamadas de Performs pelo
programa, isso independente do momento de execução, assim definimos a estrutura principal de
um programa module pool, agrupando cada objeto ao seu momento devido e correto.

Dentro do Module STATUS_1000 faremos a associação da tela a sua barra de ferramentas e título
criada anteriormente, para isso, basta usar a sintaxe conforme abaixo:

Voltando a tela principal, vamos criar também um module para as ações do usuário que serão
agrupadas dentro do include com final I01, conforme a imagem:

É dentro deste module que faremos todas as ações da tela tomarem forma através do código:
 Como criar transações

Para que um Module Pool Seja exibido, precisamos antes de mais nada criar uma transação para
associar seu programa principal a uma chamada de atalho que possa ser executada através do
TCODE do sap:

Para criar uma transação, basta ir até o programa principal e com o botão direito sobre ele, escolher
a opção criar e em seguida Transação, conforme a imagem abaixo:

O código de transação é o que será chamado através do TCODE do SAP para exibir o programa, para
programas de Module Pool selecionamos primeira opção (Programa e tela (transação de diálogo)):
Devemos informar o nome do programa principal e de sua tela principal, a primeira que será
chamada ao se digitar o código ZMOD1 no TCODE do SAP.

Ao chamar a transação ZMOD1, temos nossa tela exibida abaixo:


Mesmo que os campos tenham sido criados no layout, ainda sim não terão nenhuma ação, pois
foram apenas desenhados na tela, para darmos funções ao campos, vamos usar o Module
USER_COMMAND_1000 da tela 1000 e programar primeiramente as opções de saída da tela.

Usamos a variável de sistema SY-UCOMM que contém o código associado a cada botão na tela,
assim saberemos separar a ação no código de cada botão em uma tela:

Cada objeto criado na tela de um Module Pool, precisa ser declarado dentro do include TOP para
que seja reconhecido como um campo que pode ser utilizado no programa, vejamos o exemplo
abaixo para entender de forma prática:

Em nossa tela, criamos o campo de entrada/saída e nomeamos esse campo como V_CAMPO01,
conforme a imagem abaixo:
Precisamos fazer a mesma declaração dentro do include TOP com o mesmo nome, para que
possamos mover um valor Default no evento PBO para esse campo, conforme o a imagem:

Dentro da tela 1000, vamos até o module STATUS_1000 e vamos inserir um texto padrão nesse
campo, para que ele seja carregado assim que o usuário chamar a transação do programa:

Resultado na tela:

Caso o campo não seja declarado, mesmo que seja desenhado no layout nenhuma informação
poderá ser passada ou recuperada desse campo, já que o SAP não vai entender a criação desse
campo.
- Outros editores ABAP (1hr)

- SE37 - Funções ABAP

A funções servem para reutilizarmos lógicas que podem se aplicar a vários programas em ABAP,
como por exemplo a validação de um e-mail, CPF, conversão de valores ou informações.

Mesmo o ALV como já vimos anteriormente é uma função e suas características tem como
principais conceitos os parâmetros de importação e exportação que são objetos que podem ser
levados para a função e objetos que podem ser retornados da função, conforme veremos logo mais.

Para criar uma função, acesse a transação SE37, informe um objeto começando por Z ou Y,
conforme a imagem abaixo:

O Grupo de funções serve para agrupar diversas funções dentro de um mesmo objeto, sendo assim,
para organizar a estruturar melhor sua utilização em grandes programas, que contém diversos
includes e telas que precisam de muitas funções específicas, como por exemplo, de um módulo FI,
MM, SD, etc.
É obrigatório associar uma função a um grupo de funções, para ciar um grupo de funções, vá até a
transação SE80, selecione a opção “Grupo de Função” e crie o objeto, conforme a imagem abaixo:

Depois de criado, o mesmo pode ser associado a uma função, ou a várias funções, de acordo com a
preferencia ou exigência do projeto em que se será aplicada a utilização dessas funções.

 Características
 Módulo de acesso remoto (RFC)

Para criar uma RFC, basta selecionar a opção “Módulo de acesso Remoto”, o resto segue no mesmo
procedimento da criação de uma função normal, com a diferença que a RFC é criada para ser
chamada de forma externa ao SAP, por outras aplicações ou legados que compõem uma empresa.
Módulo de Função Normal

Parâmetros de Importação

São os campos que serão importados e consumidos de alguma forma pela função, podem ser
variáveis ou estruturas, no exemplo abaixo o campo foi criado como I_ no começo para indicar o
nome de importação, porem a nomenclatura para os objetos é livre:

Parâmetros e Exportação

São os campos que serão retornados da função, para a utilização no programa que chamou essa
função, podem ser também variáveis ou estruturas, e se aplicam a mesma configuração de
nomenclatura dos parâmetros de entrada, usamos E_ para indicar que é um campo de exportação:
Texto Fonte:

Depois de criados os campos que serão importados e exportados pela função, ou informar outras
abas que veremos mais adiante como Modificação e Tabelas, temos que configurar qual será o
código que essa função terá e o que irá preencher para cada campo, no exemplo abaixo, vamos
verificar se o campo I_WERKS está sendo preenchido e fazer uma seleção da primeira linha do
material da MARA e retornar a sua estrutura e o material em um campo separado para o programa
que utilizou a função, veja no exemplo abaixo:

É possível testar a função pressionando F8 ou clicando no botão executar:

Os campos de saída E_ estão com a informação da primeira linha selecionada na tabela


MARA, conforme demonstrado abaixo:
Para chamar uma função em um programa ABAP, dentro do programa clique sobre o botão modelo
conforme a imagem abaixo, informe o nome da função na opção CALL FUNCTION e confirme:

Resultado:
Devemos criar os objetos para que se comuniquem entre o programa principal e a função, esses
objetos devem ser declarados da mesma forma que foram na função, caso contrário a função
poderá apresentar problemas e causar DUMP no sistema.

Resultado:
- SE39 – Comparação de programas ABAP

Podemos usar a transação SE39 para editar dois programas ao mesmo tempo ou comparar se dois
programas tem suas linhas idênticas, muitas vezes essa comparação é necessária para verificar se
os objetos de diferentes ambientes estão iguais, para isso, basta informar o nome de ambos os
programas na tela de entrada, conforme o exemplo abaixo e depois exibir ou modificar:

Ao clicar na opção comparar programas , o SAP vai verificar as duas versões e apresentar se
alguma linha tiver diferença, para facilitar na análise de comparação de versões.

- SE24 – Editor de Classes ABAP

Conforme orientado no curso, essa parte da aula foi apenas demonstrativa, mas achei um post bem
interessante, onde acho que o conceito inicial de uma classe ABAP pode ser bem definido e já conta
com um exercício prático de utilização além da demonstração completa.

Link: https://desenvolvimentoaberto.org/2014/02/24/classes-abap/

Você também pode gostar