Você está na página 1de 29

Linguagem ABAP Principais Comandos

Setembro de 2004
 Declarações

 Tela de seleção

 Tabelas internas

 Variáveis de sistema

 Mensagens

 Comandos SQL

 Comandos de Condições

 Operações

 Subrotinas

 Leitura e gravação de arquivos

 Autorização
Declarações
 Objetivo
- Definir váriáveis, constantes, estruturas e tabelas internas a serem utilizadas no processamento da
aplicação.

 Tipos de declarações
- Data : utilizado para definir variáveis, estruturas e tabelas internas.
- Type : definição de tipos como estruturas e variáveis.
- Field-Symbols : definir variáveis e estruturas, semelhante aos ponteiros do C++.
- Constants : definição de constantes.
- Statics : definir variáveis, estruturas e tabelas em rotinas (Métodos, Procedimentos e Funções), que
mantém o último valor antes do fim da execução anterior.
- Tables : cria uma estrutura no programa, de acordo com o nome da tabela, estrutura ou visão do banco
de dados.
- Ranges: cria uma tabela interna similar a um Select-Options.

 Elementos de Texto
- Criação de textos fixos nos programas, classes, funções, module pool
- Pode-se definir textos para variáveis de seleção ou textos de mensagens
- Acesso : Ir para ->Elementos de Texto ->Títulos de Lista ou Textos de Seleção
Telas de Seleção
Em um programa executável a tela de seleção é gerada automaticamente com a utilização dos comandos
Select-options, Selection-screen e Parameters.

 Parameter
- Parâmetro único, sem intervalos
- Exemplo: Parameter p_werks like t001w-werks

 Select-Options
- Parâmetro de seleção com intervalos e valores múltiplos.
- Select-options : s_werks FOR t001w-werks
- Este recurso não está disponível em programas Module Pool (Onlines). Para isto, é preciso construir
uma tela e chamá-la.

 Selection-Screen
- Criação de linhas, quadros e posicionamento de campos.
Tabelas Internas

 Como funciona

- Uma tabela interna é uma tabela temporária, armazenada apenas em memória


RAM do servidor do aplicativo. É criada e preenchida por um programa durante a
execução e descartada no final do processamento. Como uma tabela de banco de
dados, uma tabela interna consiste em uma ou mais linhas com uma estrutura
idêntica que compõem um corpo e uma linha de cabeçalho opcional.
- No exemplo abaixo podemos ver a declaração de duas tabelas internas para ilustrar
Notas Fiscais e os seus items:

DATA: BEGIN OF ITAB_NF OCCURS 0,


DOCNUM LIKE J_1BNFDOC-DOCNUM,
NFNUM LIKE J_1BNFDOC-NFNUM,
END OF ITAB_NF.

DATA: BEGIN OF ITAB_ITEM OCCURS 0,


DOCNUM LIKE J_1BNFLIN-DOCNUM,
ITMNUM LIKE J_1BNFLIN-ITMNUM,
NETWR LIKE J_1BNFLIN-NETWR,
END OF ITAB_ITEM.
Tabelas Internas
DATA: BEGIN OF ITAB_NF OCCURS 0,
DOCNUM LIKE J_1BNFDOC-DOCNUM,
NFNUM LIKE J_1BNFDOC-NFNUM,
END OF ITAB_NF.

DATA: BEGIN OF ITAB_ITEM OCCURS 0,


DOCNUM LIKE J_1BNFLIN-DOCNUM,
ITMNUM LIKE J_1BNFLIN-ITMNUM,
NETWR LIKE J_1BNFLIN-NETWR,
END OF ITAB_ITEM.

- O comando LIKE torna o campo da tabela interna com as mesmas características do campo
proveniente da tabela do R3, mesmo tipo, tamanho e etc...Pode ser substituído pelo TYPE, mas a
referência deve ser feita ao elemento de dados.

- O comando OCCURS 0 determina que a tabela interna possuirá um HEADER LINE, isso é útil para as
leituras das tabelas internas que será ilustrado no comando READ TABLE.
- Neste exemplo poderiamos imprimir um relátório que nos mostraria o número da nora fiscal ITAB_NF-
NFNUM, os items ITAB_ITEM-ITMNUM e os valores ITAB_ITEM-NETWR.
Tabelas Internas
 Tipos de Tabelas Internas

- Standard : O método de acesso aos dados da tabela é pesquisa seqüencial. O tempo de pesquisa é linear ao
número de entradas.

DATA: BEGIN OF IT_AUFK OCCURS 0,


AUFNR TYPE AUFNR,
END OF IT_AUFK.

- Sorted : As entradas são armazenadas ordenadas pela chave declarada na definição. O método de acesso é
chave binária. O tempo de pesquisa tem uma relação logarítimica com o número de entradas.

DATA: IT_AUFK TYPE SORTED TABLE OF TY_AUFK


WITH UNIQUE KEY AUFNR WITH HEADER LINE

Para índices não únicos, utilize a instrução NON-UNIQUE

- Hashed : A tabela interna é administrada por uma rotina de hash interna. O tempo de pesquisa é constante,
independente do número de entradas.

DATA: IT_AUFK TYPE HASHED TABLE OF TY_AUFK


WITH UNIQUE KEY AUFNR WITH HEADER LINE
Tabelas Internas - Acessos
 Comando LOOP
- Este comando é utilizado para fazer ler algumas ou todos os registros de uma
tabela interna.

 Como funciona o LOOP


- O LOOP lê o conteúdo da tabela, colocando as linhas lidas, uma por vez, na área
de trabalho, que pode ser o cabeçalho da tabela interna ou uma estrutura com as
mesmas características da tabela.

Exemplo
- LOOP AT IT_MAKT.
WRITE: / IT_MAKT-MATNR, IT_MAKT-MAKTX.
ENDLOOP.

- O comando irá ler cada registro da tabela interna IT_MAKT e irá imprimir imprimir os
campos MATNR e MAKTX ( Material e descrição ).
Tabelas Internas - Acessos
 Lendo alguns registros
- LOOP AT IT_MAKT WHERE SPRAS = ‘PT’.
WRITE: / IT_MAKT-MATNR, IT_MAKT-MAKTX.
ENDLOOP.

- O comando irá ler somente os registros da tabela interna IT_MAKT onde o campo
SPRAS (Idioma) for igual ‘PT’ e irá imprimir o material e a descrição.
- O WHERE determina os filtros que o programador deseja para ler a tabela interna.
Tabelas Internas - Acessos
 Comando READ
- Este comando é utilizado para ler um único registro de uma tabela interna.

 Como funciona o READ


- O READ lê uma única linha que corresponda aos critérios especificados e coloca na
área de trabalho, que pode ser o cabeçalho da tabela interna ou uma estrutura com
as mesmas características da tabela.

Exemplo
- LOOP AT IT_NF.
READ TABLE IT_NF_ITEM WITH KEY DOCNUM = IT_NF- DOCNUM
ITMNUM = ’10’
WRITE: / IT_NF-NFNUM, IT_NF_ITEM-MATNR
ENDLOOP

- O comando irá ler todos os registros de IT_NF (Cabeçalho) e para cada registro lido,
vai ler dentre os itens da nota em IT_NF_ITEM, somente o primeiro e irá imprimir o
número da nota fiscal e o material.
- WITH KEY. Observe que o programador usou a chave para a leitura DOCNUM e
ITMNUM, desta forma o programa irá direto no registro desejado, já que a tabela de
items pode ter varios registros para o mesmo documento (DOCNUM)
Tabelas Internas - Inserção
 Comando APPEND
- Utilizado para gravar registros no final de uma tabela interna. Ele copia uma linha de qualquer área
de trabalho e a coloca no final das linhas existentes. A área pode ser o cabeçalho da tabela ou uma
estrutura com a mesma característica da tabela.

Exemplo
LOOP AT IT_NF.
READ TABLE IT_NF_ITEM WITH KEY DOCNUM = IT_NF- DOCNUM
ITMNUM = ’10’.
IT_AUX-NFNUM = IT_NF-NFNUM.
IT_AUX-MATNR = IT_NF_ITEM-MATNR.
APPEND IT_AUX.
ENDLOOP

- O comando irá ler todos os registros de IT_NF (Cabeçalho) e para cada registro lido vai ler dentre os
itens da nota em IT_NF_ITEM, somente o primeiro, gravando o número da nota fiscal e o material na
tabela IT_AUX.
- Também pode-se utilizar o comando INSERT para inserir dados em uma tabela interna.

 Comando INSERT
- Utilizado para inserir registros em um determina posição de uma tabela interna. Dentro de um
LOOP insere o registro na posição atual, fora deve ser informada a posição desejada.
Tabelas Internas - Exclusão
 Comando DELETE
- É utilizado basicamente para excluir um ou mais registros de tabelas internas.
Dentro de um Loop, o comando DELETE sem adicionais elimina a linha atual, fora
deve ser especificado o registro ou uma condição para eliminação.

Exemplo
DELETE IT_NF WHERE NFTYPE = ‘E1’ AND
DOCTYP = ‘1’.

- O comando apagara todos os registros de IT_NF (Cabeçalho) onde a Ctg.de nota


fiscal NFTYPE for igual ‘E1’ e o Tipo de documento DOCTYP for igual a ‘1’ .
Tabelas Internas - Modificação

 Comando MODIFY
- Utilizado para modificar o conteúdo de um ou mais registros de tabelas internas.
- Caso não seja especificado a cláusula TRANSPORTING, seguida dos campos a serem modificados, todos os
campos são sobrepostos com o conteúdo da área de trabalho.
- Dentro de um Loop, o comando MODIFY sem adicionais modifica a linha atual. Fora deve ser especificado o
registro ou uma condição que identifique os registros.

Exemplo
ITAB_ITEM-NETWR = IT_ITAB_ITEM-NETWR * 1,10.
MODIFY ITAB_ITEM TRANSPORTING NETWR
WHERE VBELN = ITAB_HEADER-VBELN AND
POSNR = ITAB_ITEM-POSNR.
OU
MODIFY ITAB_ITEM INDEX SY-TABIX.
Variáveis de Sistema
 Objetivo
- Auxiliar o programador com algumas informações importantes como data e hora, retorno de uma função,
operação de banco de dados, leitura e manuseio de informações na memória como tabelas, etc.
- A estrutura SYST, que pode ser acessada pela transação SE11, pode-se visualizar todas as variáveis
disponíveis do sistema.

 As principais variáveis de sistema


- SY-DATUM : data do servidor
- SY-UZEIT : hora do servidor
- SY-SUBRC : retorna 0, se operação foi realizada com sucesso. Outro valor diferente de zero, ocorreu algum
erro. Utilizada para verificar :
Leituras, atualizações em banco de dados e tabelas internas
Retorno de funções
Endereçamento de ponteiros (FIELD-SYMBOLS)
Verificação de autorização
- SY-INDEX : índice atual da execução do loop atual (WHILE, DO)
- SY-TABIX : Tabelas internas, índice de linha atual
- SY-TFILL : Tabelas internas, número atual de linhas
Mensagens
 Objetivo
- Organizar as mensagens por classes, com textos explicativos.
- No corpo de uma mensagem, é possível receber até quatro parâmetros, através do símbolo &, cujo tamanho é de
no máximo 40 caracteres.
- Acesso através da transação SE91

 Tipos
- As mensagens podem ser do tipo :
A - Abend : após a mensagem, a aplicação é encerrada.
E – Error : mensagem de erro
I – Info : mensagem de informação
S – Status : mensagem enviada na barra de status
W – Warning : mensagem de advertência
X – Exit : após a mensagem, aplicação é encerrada com um DUMP

 Forma mais utilizada


- MESSAGE E 031(ZGEPP) WITH VEPO-EXIDV. Parâmetro

Classe da mensagem
Tipo da mensagem

Número da Mensagem
Comandos SQL - SELECT
 Objetivo
- O comando SELECT é basicamente utilizado para popular as tabelas internas e as
variáveis. Normalmente em um programa tem no seu início a seleção de todos os
dados necessários para o processamento, guardando estas informações nas
tabelas internas e/ou nas variáveis.

 Como funciona o SELECT


- O SELECT consiste em uma instrução dada ao banco de dados para obter das
tabelas do R3 as colunas necessárias ao processamento. Segue abaixo exemplos
mais comuns do SELECT.

 Selecionando todas as colunas e todos os registros


- SELECT * FROM MARA
INTO TABLE IT_MARA

- O comando irá popular a tabela interna IT_MARA com todos os registros e colunas
da tabela MARA do R3. Logicamente a tabela interna IT_MARA deverá ter na sua
declaração todos os campos que a tabela MARA possui.
Comandos SQL - SELECT

 Selecionando algumas colunas e algums registros


- SELECT MATNR MTART FROM MARA
INTO TABLE IT_MARA
WHERE MTART = ‘HALB’ AND
MATKL = ’09’.

- O comando irá popular a tabela interna IT_MARA com apenas os registros onde o
campo MTART (Tipo de Material) for igual a ‘HALB’ (Produto Semi-acabado) e o
campo MATKL (Grupo de Mercadorias) for igual a ’09’ e trará somete os campos
MATNR (Material) e MTART (tipo de Material).
- A tabela interna IT_MARA neste caso terá na sua declaração somentes os campos
MATNR e MTART.
- A cláusula WHERE é o que determina o filtro que o programador deseja fazer com
os registros da tabela MARA
Comandos SQL - SELECT

 Seleção utilizando FOR ALL ENTRIES


- SELECT MATNR MTART FROM MARA
INTO TABLE IT_MARA
WHERE MTART = ‘HALB’ AND
MATKL = ’09’.
- SELECT MATNR MAKTX FROM MAKT
INTO TABLE IT_MAKT
FOR ALL ENTRIES IN IT_MARA
WHERE MATNR = IT_MARA-MATNR.

- No primeiro SELECT o comando irá popular a tabela interna IT_MARA, como visto
no exemplo anterior.
- No segundo SELECT, para cada registro da tabela interna IT_MARA, o comando
irá popular a tabela interna IT_MAKT, onde o campo MATNR (material) for igual ao
campo material da tabela MAKT. Na prática este código esta buscando a decrição
dos materiais obtidos com o primeiro SELECT.

 Seleção para uma chave primária


- SELECT SINGLE MTART
INTO G_MTART
WHERE MATNR = G_MATNR.
Comandos SQL - INSERT

 Objetivo
- O comando INSERT é utilizado para inserir dados em tabelas do dicionário de dados.

 Como funciona o INSERT


- O INSERT consiste em uma instrução dada ao banco de dados para incluir o conteúdo em tabelas do R3, a partir
de estruturas de dados ou do próprio conteúdo de uma tabela interna .

 Formas mais comuns para realizar o INSERT


- INSERT INTO  dbtab      VALUES wa.
- INSERT INTO (dbtabname) VALUES wa.
- INSERT  dbtab      FROM wa.   
- INSERT (dbtabname) FROM wa.
- INSERT  dbtab      FROM TABLE itab.
- INSERT (dbtabname) FROM TABLE itab.

- Obs.: dbtab = nome da tabela.


Wa = estrutura de dados do tipo dbtab.
Itab = tabela interna do tipo dbtab
Dbtabname = referência dinâmica para uma tabela. É uma variável que contém o nome da tabela.
Comandos SQL - UPDATE
 Objetivo
- O comando UPDATE é utilizado modificar dados em tabelas do dicionário de dados .

 Como funciona o UPDATE


- O UPDATE consiste em uma instrução dada so banco de dados para alterar conteúdos em tabelas do R3, a partir de
estruturas de dados, do conteúdo de uma tabela interna ou de uma variável .

 Formas mais comuns para realizar o UPDATE


- UPDATE  dbtab      SET f1 ... fn.
- UPDATE (dbtabname) SET f1 ... fn.
- UPDATE  dbtab      FROM wa.
- UPDATE (dbtabname) FROM wa.
- UPDATE  dbtab      FROM TABLE itab.
- UPDATE (dbtabname) FROM TABLE itab.

Obs.: dbtab = nome da tabela.


Wa = estrutura de dados do tipo dbtab.
Itab = tabela interna do tipo dbtab
Dbtabname = referência dinâmica para uma tabela. É uma variável que contém o nome da tabela.
f1 ......fn : colunas da tabela a serem atualizados.
- Para restringir os registros a serem atualizados, pode-se utilizar a clausula WHERE.
- Importante frisar que, quando utilizar a instrução SET, se colocar o caracter dois pontos ( : ) antes de um campo,
todos os registros da tabela serão atualizados com o novo valor, indiferente de ter clausula WHERE ou não .
Comandos SQL - DELETE
 Objetivo
- O comando DELETE é utilizado para excluir registros em tabelas do dicionário de dados.

 Como funciona o DELETE


- O DELETE consiste em uma instrução dada ao banco de da para excluir registros em tabelas do R3, a partir de
estruturas de dados, do conteúdo de uma tabela interna ou de uma variável.

 Formas mais comuns para realizar o DELETE


- DELETE FROM  dbtab.
- DELETE FROM (dbtabname).
- DELETE  dbtab      FROM wa.
- DELETE (dbtabname) FROM wa.
- DELETE  dbtab      FROM TABLE itab.
- DELETE (dbtabname) FROM TABLE itab.

Obs.: dbtab = nome da tabela.


Wa = estrutura de dados do tipo dbtab.
Itab = tabela interna do tipo dbtab
Dbtabname = referência dinâmica para uma tabela. É uma variável que contém o nome da tabela.
- Para restringir a exclusão, pode-se utilizar a clausula WHERE.
Comandos SQL - MODIFY
 Objetivo
- O comando MODIFY é utilizado alterar e/ou incluir dados em tabelas do dicionário de dados. Se o registro existe na
tabela, realiza operação de MODIFICAR (UPDATE). Senão existir, realiza operação de INCLUSÃO (INSERT).

 Como funciona o MODIFY


- O MODIFY consiste em uma instrução dada ao banco de dados para atualizar registros em tabelas do R/3
modificando ou inserindo, a partir de estruturas de dados ou de uma tabela interna .

 Formas mais comuns para realizar o MODIFY


- MODIFY  dbtab      FROM wa.
- MODIFY (dbtabname) FROM wa.
- MODIFY  dbtab      FROM TABLE itab.
- MODIFY (dbtabname) FROM TABLE itab.
- MODIFY  dbtab.
- MODIFY *dbtab.

Obs.: dbtab = nome da tabela.


Wa = estrutura de dados do tipo dbtab.
Itab = tabela interna do tipo dbtab
Dbtabname = referência dinâmica para uma tabela. É uma variável que contém o nome da tabela.
Comandos de Condições - IF
 Objetivo
- O IF é uma condição determinada pelo programador para que uma rotina ou processo seja
executada ou não pelo programa.

 Como funciona o IF
- O IF determina qual caminho o programa vai seguir dependendo se a condição foi atendida ou não.

SELECT * FROM MARA


INTO TABLE IT_MARA

IF SY-SUBRC = 0.
LOOP AT IT_MARA.
WRITE:/ IT_MARA-MATNR.
ENDLOOP.
ELSE.
MESSAGE EZGEPP(01) WITH ‘ERRO’.
ENDIF.
- O programa está selecionado registros na tabela MARA e caso haja sucesso ele irá imprimir todos
os materiais selecionados.
Comandos de Condições - ELSEIF
 Objetivo
- O ELSEIF é uma condição determinada pelo programador para que uma rotina ou processo seja executada ou
não pelo programa, dependendo das possíveis condições que uma condicional possa assumir.

 Como funciona o ELSEIF


DATA RESULT TYPE I.
...
IF RESULT < 0.
WRITE / ‘Resultado menor que zero'.
ELSEIF RESULT = 0.
WRITE / 'Resultado iqual a zero'.
ELSE.
WRITE / 'Resultado maior que zero'.
ENDIF.

- O CASE, que veremos adiante, oferece melhor desempenho e sempre que couber, utilizá-lo para otimizar o
processamento.
Comandos de Condições - CASE
 Objetivo
- O CASE tambem é uma condição determinada pelo programador para que uma rotina ou processo seja
executada ou não pelo programa, porem se houver muitas condições o CASE pode ser mais útil.

 Como funciona o CASE


- O CASE pode testar várias condições, isso substituiria um ninho de IF’s, ELSEIF’s e ELSE’s.
LOOP AT IT_MARA.
CASE IT_MARA-MTART.
WHEN ‘HALB’.
GRAVA TABELAS DE SEMI ACABADOS...
WHEN ‘FERT’.
GRAVA TABELAS DE ACABADOS...
...
...
WHEN OTHERS.
ENDCASE.
ENDLOOP.
- O programa está lendo todos os registros da tabela interna IT_MARA e dependendo do tipo de material,
grava tabelas para cada tipo de material.
Operações
 Objetivo
- Somar, Subtrair, Multiplicar e Dividir.

 Como funciona as operações


- O operações podem ser feitas com campos de tabelas internas, variáveis e campos das tabelas do R3.
- Somar -> G_VALOR = IT_J1BNFLIN-NETWR + 1000.
G_VALOR = IT_J1BNFLIN-NETWR + IT_J1BNFLIN NETFRE.
ADD 1 TO G_VALOR.

- Subtrair -> G_VALOR = IT_J1BNFLIN-NETWR - 1000.


G_VALOR = IT_J1BNFLIN-NETWR - IT_J1BNFLIN NETFRE.

- Multiplicar -> G_VALOR = IT_J1BNFLIN-NETWR * 1000.


G_VALOR = IT_J1BNFLIN-NETWR – G_TAXA.

- Dividir -> G_VALOR = IT_J1BNFLIN-NETWR / 1000.


G_VALOR = IT_J1BNFLIN-NETWR / G_TAXA.
Subrotinas - FORM
 Objetivo
- O FORM é útil para modularizar o programa fazendo com que o mesmo se torne mais fácil para
entendimento e manutenção .

 Como funciona o FORM


- O FORM pode dividir o programa em partes e o comando usado para chama-lo é o PERFORM, seria com
se dividissemos o programa em parágrafos.

PERFORM SELECIONA_DADOS
PERFORM MONTA_TABELA
PERFORM IMPRIME.
...
FORM SELECIONA_DADOS.
Aqui estaria todos os selects necessários para o processamento
ENDFORM.
FORM MONTA_TABELA
Aqui estaria a lógica para montar uma tabela de saida com as seleções feitas anteriormente.
ENDFORM.
FORM IMPRIME.
Aqui estaria o LOOP na tabela de saida para impressão.
ENDFORM.
Leitura e Geração de Arquivos
 Objetivo
- Transferir informações do SAP, através de arquivos e que podem ser gravados tanto no cliente como no servidor
SAP.

 Como funciona
- Arquivos gravados no cliente
Para gravar, utilizar função GUI_DOWNLOAD
Para ler, utilizar função GUI_UPLOAD
O grupo de funções SFES, possui uma variedade de funções para trabalho no cliente.

- Arquivos gravados no servidor SAP


Através dos comandos
OPEN DATASET nome_file : abre um file existente ou gera um novo
TRANSFER conteúdo TO nome_file : transfere valores para o file
READ DATASET nome_file INTO estrutura_file : lê cada linha e alimenta a estrutura
CLOSE DATASET nome_file : fecha o file
DELETE DATASET nome_file : exclui o file

Em nome_file, pode conter somente o nome do arquivo (diretório DEFAULT SAP), ou um caminho específico no
servidor SAP.
Autorização
 Objetivo
As verificações de autorização é um meio de proteger funções ou objetos no sistema R/3, restringindo o acesso a
transações, operações, objetos ou campos.

 Como funciona
- O programador determina onde e como a validação será feita através do comando AUTHORITY-CHECK.
- O administrador determina quem e o que atribuindo valores aos objetos de autorização na composição dos perfis
de acesso.
- Através da transação SU21 é possível criar e consultar objetos de autorização.

Exemplo:

AUTHORITY-CHECK OBJECT 'V_VTTK_TDS'


ID 'TPLST' FIELD G_TPLST
ID 'ACTVT' FIELD '03'.

IF SY-SUBRC <> 0.
MESSAGE E091(ZGESD) WITH G_TPLST.
"Falta autorização para o local org.transpo: & !
ENDIF.
Autorização

Campos que
determinam a área de
negócio a ser verificada

O campo atividade
permite validar a ação a
ser executada além da
área de negócio
verificada pelos demais
campos.

Permite determinar as
atividade possíveis para
o objeto.
Exemplo: 01-Criar, 02-
Modificar, 03-Exibir

Você também pode gostar