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 [Link] 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 [Link]: & !
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