Você está na página 1de 135

Tópicos

1. O Consultor Funcional e o ABAP


2. Tipos de Change Requests
3. A Estrutura de um código ABAP
4. Editor de Programas e Funções
5. Tipo de Dados e Declarações
6. Operadores Lógicos
7. Instruções de Controle (Condições e Loops)
8. Tabelas Internas e Estruturas
9. Acesso a Banco de Dados
10. Parâmetros de Tela de Seleção
11. Chamadas de Funções e Subrotinas
12. Instruções de Mensagens
13. O ABAP Debugger
14. Role de Autorização
15. Iniciando o Debugger e Ativando
16. Identificando o Programa / Função
17. Ponto de Parada Manual
18. Ponto de Parada Interativo
Tópicos
19. Debugger Antigo e o Novo
20. Recursos de Navegação
21. Manipulando dados de tabelas e Variáveis
22. Watchpoint – Ponto de Parada por Condição
23. Ponto de Parada em Programas e Funções
24. Ponto de Parada em Mensagens de erro
25. Ponto de Parada em Comando Específico
26. Ponto de Parada em Método
27. Criando Ponto de Parada Manual
28. Desviar um Trecho do Programa
29. Retornar Parte da Execução do Programa
30. Desativação de Pontos de Parada e Watchpoint
31. Encontrando EXITs e BADIs
32. Revisão Geral
O Consultor Funcional e o ABAP

Redução do tempo

de solução

Conhecimento mais abrangente
do programa envolvido

Melhor direcionamento ao
desenvolvedor ABAP


Especificações mais
esclarecidas


Colaborar para confirmação do
desenvolvimento realizado
Tipos de Change Requests

• Ambientes: Desenvolvimento
Qualidade
Produção
• Tipos de Change Requests:
Customizing
Workbench

• Transações:
SE01
SE09
SE10
Tipos de Change Requests
Tipos de Change Requests

• Tabelas onde ficam resgistradas:


E070 – Request PAI
Tipos de Change Requests

• Tabelas onde ficam resgistradas:


E071 – Request Filha
A Estrutura de um Código ABAP

Área de identificação

Área de definição de variáveis

Área do programa principal

Área de Subrotinas
O Editor de Programas e Funções
• Programas/Reports são editados ou exibidos pela transação SE38
O Editor de Programas e Funções
• Funções são editadas ou exibidas pela transação SE37
Tipos de Dados e Declarações

Variáveis Constantes

Estruturas Tabelas Internas

Campos de
Sistema
Tipos de Dados e Declarações

O comando DATA é utilizado para declarar as variáveis,


estruturas e tabelas internas.

• O comando CONSTANTS declara as constantes do


programa

• O comando TYPES permite criar tipos de dados


elementares, tipos de referência e tipos de tabela, o
qual será utilizado como referência para variáveis,
estruturas e tabelas

• O comando TABLE cria uma work-area da tabela


definida
Tipos de Dados e Declarações

Variáveis
Tipos de Dados e Declarações
Constantes
Tipos de Dados e Declarações
Tabelas Internas
Tipos de Dados e Declarações
Estruturas
Tipos de Dados e Declarações
Campos de Sistema

Os campos de sistema ABAP estão sempre disponíveis nos


programas ABAP;

• O sistema em tempo de execução preenche os campos de acordo


com o contexto;

• Podem ser utilizados nos programas para obter o status do


sistema;

• Os campos de sistema são variáveis, mas devem ser tratados


como constantes, pois ao alterar algum valor, o fluxo do sistema
pode ser alterado.
Tipos de Dados e Declarações
Campos de Sistema

Os campos de sistema estão definidos na estrutura do


dicionário de dados SYST e nos programas estão disponíveis
na estrutura SY.
• Exemplos de campos de sistema:

▫ SY-MANDT – Retorna o mandante do logon


▫ SY-SUBRC – Código de retorno dos comandos ABAP
▫ SY-TABIX – Índice da linha (tabela interna)
▫ SY-BATCH – Executa o programa em background
▫ SY-TCODE – Código da transação atual
▫ SY-UNAME – Nome do usuário
▫ SY-DATUM – Data atual do sistema
Operadores Lógicos
Operadores Simples
Operadores Lógicos
Operadores para Strings
Instruções de Controle
Condições

Condição IF-ELSE-ENDIF
Instruções de Controle
Condições

Condição CASE
Instruções de Controle
LOOPs
Instruções de Controle
LOOPs

A instrução CHECK verifica se uma comparação é


verdadeira ou falsa. Se a condição não for verdadeira, sai
do loop ou de uma subrotina.

CHECK <condição>.

Exemplo:

DO 4 TIMES.
CHECK SY-INDEX BETWEEN 2 and 3.
WRITE SY-INDEX.
ENDDO.

Interrompe a execução saindo do Loop em caso de a condição


não ser atendida.
Instruções de Controle
LOOPs

A instrução LOOP também executa um loop fazendo


leitura em uma tabela interna e atribuindo dados a uma
estrutura.

LOOP AT <tabela interna> INTO <estrutura> .

END LOOP..

Exemplo:

LOOP AT lt_return INTO wa_return.


WRITE SY-INDEX.
ENDLOOP.
Instruções de Controle
LOOPs

Comando Significado
CONTINUE Passa para o próximo passo no loop sem executar as rotinas
seguintes a ele sem verificar nenhuma condição
CHECK Passa para o próximo passo no loop sem executar as rotinas
seguintes a ele verificando uma condição
EXIT Termina o processamento em loop
Tabelas Internas e Estruturas
Tabela Interna

• A tabela interna é utilizada para armazenar um ou mais


registros em memória e pode ser acessado e manipulado de
forma similar a uma tabela de banco de dados.

• Os dados da tabela interna podem ser inseridos, removidos,


modificados, ordenados, comparados e lidos.

• Existem 3 tipos de tabelas internas:


Internal Sorted
Internal Hashed
Internal Standard Table
Tabelas Internas e Estruturas
Tabela Interna

Internal Sorted

 Ordenação automática na inserção dos dados;


 Não podem ser reordenadas (não admite uso do SORT);
 Permite acesso pelo índice ou por chave
 Chave pode ser única ou não;
 As condições de acesso precisam ser conhecidas antes, pois
não modificarão
Tabelas Internas e Estruturas
Tabela Interna

Exemplo de Internal Sorted

DATA: it_kna1 TYPE SORTED TABLE OF kna1


WITH NON-UNIQUE KEY land1
WITH HEADER LINE
INITIAL SIZE 0.
Tabelas Internas e Estruturas
Tabela Interna

Internal Hashed Table

 Tabelas não indexadas;


 Não é possível indexar durante o processamento;
 O acesso é somente por chave única;
 Tempo de resposta sempre constante índependente da
quantidade de dados na tabela
Tabelas Internas e Estruturas
Tabela Interna

Exemplo de Internal hashed Table

DATA : it_kna1 TYPE HASHED TABLE OF kna1


WITH UNIQUE KEY kunnr
WITH HEADER LINE
INITIAL SIZE 0.
DATA: w_kna1 TYPE kna1.
SELECT * FROM kna1 INTO TABLE it_kna1.
Tabelas Internas e Estruturas
Tabela Interna

Internal Standard Table

 Tipo mais comum utilizado nos códigos ABAP;


 Permitem alterar o campo chave para pesquisa durante o
processamento dos dados;
 Para adicionar dados não é necessário preocupação com os
valores contidos no processamento. Apenas executar APPEND;
 Não possui dados organizados. Sempre é necessário utilizar
SORT pela chave que se deseja pesquisar.
 Utiliza índice linear
Tabelas Internas e Estruturas
Tabela Interna

Exemplo de Internal Standard Table

DATA: it_kna1 TYPE TABLE kna1


DATA: w_kna1 TYPE kna1.
WITH NON-UNIQUE KEY name1
WITH HEADER LINE
INITIAL SIZE 0.
SELECT * FROM kna1 INTO TABLE it_kna1.
IF sy-subrc IS INITIAL.
SORT it_kna1 BY name1.
READ TABLE it_kna1 INTO w_kna1 WITH KEY name1 = ‘PAUL’ BINARY
SEARCH.
WRITE: / w_kna1-kunnr , w_kna1-land1 , w_kna1-name1.
ENDIF.
Tabelas Internas e Estruturas
Tabela Interna
• Como qualquer objeto de dados, a tabela interna pode ser inicializada
através dos comandos:

▫ CLEAR <ITAB>

 Este comando restaura a tabela interna ao estado ao qual estava


imediatamente após a declaração, ou seja, sem linhas. Entretanto a
memória utilizada pela tabela interna continua alocada.
• Se a tabela interna possuir cabeçalho, a tabela e cabeçalho possuem o
mesmo nome e para apagar o conteúdo da tabela, é necessário utilizar as
chaves ([]) após o nome da tabela interna, caso contrário, somente o
conteúdo cabeçalho será apagado.
Tabelas Internas e Estruturas
Tabela Interna

• O comando REFRESH realiza o mesmo procedimento do comando


CLEAR[], ou seja, reinicializa a tabela interna e mantém a memória
utilizada pela tabela interna alocada.

• O comando FREE reinicializa a tabela interna e libera a memória


alocada.
Tabelas Internas e Estruturas
Tabela Interna

Exemplo de Clear, Refresh e Free


DATA:BEGIN OF LINE, COL1, COL2,
END OF LINE.
DATA ITAB LIKE LINE OCCURS 0 WITH HEADER LINE.
CLEAR ITAB. //Limpa o cabeçalho da tabela interna
CLEAR ITAB[]. //Limpa o conteúdo da tabela interna
REFRESH ITAB. //Limpa o conteúdo da tabela interna
FREE ITAB. //Limpa o conteúdo da tabela interna
Tabelas Internas e Estruturas
Tabela Interna

Ordenação:
As tabelas internas Standard e Hashed podem ser
ordenadas.

Comando:
SORT <iTAB> [ASCENDING/DESCENDING]

O comando ordena a tabela interna <itab> em ordem ascedente pela


sua chave.

A direção da ordem pode ser especificada através das opções


ASCENDING e DESCENDING, sendo que a primeira opção é a padrão.

Quanto maior a tabela, maior será o tempo para ordená-la.


Tabelas Internas e Estruturas
Tabela Interna

A tabela interna pode ser ordenada pela forma abaixo:

SORT <iTAB> BY <f1> ... <fn> [ASCENDING/DESCENDING]

A tabela é ordenada pelos campos <f1> até <fn>, ao invés da tabela.


O número de campos está limitado a 250.
Tabelas Internas e Estruturas
Tabela Interna

Inserindo Linhas em uma Tabela

Para inserir uma linha na tabela interna, utilizamos a


seguinte forma:
INSERT <line> TO <iTAB>
<line> pode ser uma work-area ou a expressão INITIAL LINE.

A work area deve ser compatível com a tabela interna e a expressão


INITIAL LINE insere um registro em branco na tabela interna.
Tabelas Internas e Estruturas
Tabela Interna

Regras Gerais de Inserção em tabelas internas:

• Em uma tabela interna standard, a linha é inserida no


final da tabela interna

• Em uma tabela sorted, a linha é inserida de acordo com a


chave da tabela. Se a chave não é única, o registro
duplicado é inserido acima da entrada existente com a
mesma chave.

• Em uma tabela hashed, a linha é inserida de acordo com


a chave da tabela.
Tabelas Internas e Estruturas
Tabela Interna

Para inserir várias linhas em uma tabela interna, utilizamos a


seguinte forma:

INSERT LINES OF <itab1> [FROM <n1> ] INTO TABLE <itab2>

• <itab1> e <itab2> são tabelas com tipos de linhas compatíveis. O sistema


insere as linhas da tabela <itab1> um por um na tabela <itab2> usando as
mesmas regras da inserção individual.
• Se <itab1> é uma tabela com índice (standard e sorted), pode ser
especificado a primeira e a última linha da tabela que deverá ser inserida
em <n1> e <n2>.
Tabelas Internas e Estruturas
Tabela Interna

READ TABLE

Faz leitura em uma tabela interna.

READ TABLE <tabela interna> INTO <workarea>


WITH KEY campo1 = `XXXX` BINARY SEARCH

Se a linha for encontrada, a variável SY-SUBRC é preenchida


automaticamente com 0 (zero ou INITIAL) , caso contrário, receberá um
valor diferente de zero.
Tabelas Internas e Estruturas
Tabela Interna

DELETE

Elimina linhas em uma tabela interna.

DELETE <tabela interna> [ WHERE campo1 = `XXXX`]


Tabelas Internas e Estruturas
Tabela Interna

Para mover uma work-area para outra, é utilizado o


comando:
MOVE CORRESPONDING <work-area1> TO <work-area2>

CLEAR: wa_flights, wa_scarr, wa_saida.

LOOP AT lt_flights INTO wa_flights.


READ TABLE lt_scarr INTO wa_scarr
WITH KEY carrid = wa_flights-carrid.
IF sy-subrc EQ 0." checa se encontoru resultado
MOVE-CORRESPONDING wa_flights TO wa_saida.
MOVE wa_scarr-carname TO wa_saida-carname.
APPEND wa_saida TO lt_saida.
CLEAR wa_saida.

ENDIF.
Tabelas Internas e Estruturas
Tabela Interna

O comando APPEND também tem a mesma função do


INSERT e também é muito utilizado

APPEND INITIAL LINE


APPEND LINES OF <tab1> TO <tab2>
APPEND <wa1> TO <tab1> SORTED BY

O APPEND INITIAL LINE appenda uma linha vazia na tabela interna;


O APPEND LINES OF tab1 TO tab2 adiciona linhas de uma tabela em outra tabela.;
O APPEND wa1 TO tab1 SORTED BY faz o APPEND e na sequência já ordena a tabela do maior para
o menor valor. Vale dizer que esse comando fica preso no tamanho máximo da área de memória da
tabela (“INITIAL SIZE”), e se você ultrapassar o tamanho, o APPEND com SORTED BY apaga registros
sem dó nem piedade. Comente a linha com INITIAL SIZE 10, e descomente a linha com INITIAL SIZE 2
para ver isso acontecendo.
Acesso a Banco de Dados

ST04
Através da transação ST04 é possível utilizar no SAP as instruções ABAP.
É um acesso normalmente concedido a um SAP BASIS, porém é importante
ter conhecimento deste recurso e de como é utilizado. Se você possui
experiência com SQL, um dia poderá lhe ser útil:
Acesso a Banco de Dados

ST04
Exemplo:

SELECT s.hkont
FROM bkpf as b INNER JOIN bsis as s
ON b.bukrs = s.bukrs and b.belnr = s.belnr and
b.gjahr = s.gjahr
WHERE b.bukrs = '1100'
AND b.belnr = 11045676 AND b.gjahr = 2019
Acesso a Banco de Dados
OPEN SQL

Através do método OpenSQL do ABAP são utilizadas


instruções de SQL no código ABAP.

Comando Objetivo

SELECT Seleciona os dados das tabelas do banco de dados

INSERT Adiciona registros em uma tabela de banco de dados

UPDADE Altera o conteúdo da tabela de banco de dados

MODIFY Insere um novo registro ou altera o conteúdo de um registro existente

DELETE Exclui registros da tabela de banco de dados

OPEN CURSOR, Lê registros de uma tabela de banco de dados utilizando cursor


FETCH, CLOSE
CURSOR
Acesso a Banco de Dados
Código de Retorno

Os comandos do OpenSQL do ABAP retornam valores para


as variáveis de sistema:

Variável de Objetivo
sistema
SY-SUBRC Muito utilizada. Após cada comando, ela
recebe o valor 0 (ZERO) ou “INITIAL”, caso a
operação tenha resultado em sucesso.
SY-DBCNT Retorna o número de registros processados.
Acesso a Banco de Dados
SELECT

É o comando utilizado para ler registros de uma tabela do


banco de dados.

SELECT <colunas> INTO <destino>


FROM <tabela>
[ WHERE <condição>]
[GROUP BY <colunas de agrupamento>]
[ HAVING <condição>]
[ ORDER BY <colunas de ordenação>]
Acesso a Banco de Dados
SELECT

Alguns recursos podem ser acrescentados às colunas para


adequar ao resultado desejado:

• MAX: Retorna o valor máximo da coluna


• MIN: Retorna o valor mínimo da coluna
• AVG: Retorna o valor médio da coluna
• COUNT: Conta os valores ou linhas
Acesso a Banco de Dados
SELECT

• INTO <destino>

▫ A cláusula INTO define a área de destino nos quais o resultado


do select é transferido.
▫ Os valores podem ser transferidos para variáveis, work-areas e
tabelas internas, desde que as variáveis de destino sejam
compatíveis ou convertidos com os dados selecionados.
Acesso a Banco de Dados
SELECT

Inserindo em variáveis:
DATA: v_bukrs TYPE bkpf-bukrs,
v_belnr TYPE bkpf-belnr,
v_gjahr TYPE bkpf-gjahr.

SELECT bukrs belnr gjahr FROM bkpf


INTO ( v_bukrs, v_belnr, v_gjahr)...
Acesso a Banco de Dados
SELECT

Inserindo em work-area:
DATA: BEGIN OF wa_bkpf,
v_bukrs TYPE bkpf-bukrs,
v_belnr TYPE bkpf-belnr,
v_gjahr TYPE bkpf-gjahr.
END OF wa_bkpf.

SELECT bukrs belnr gjahr FROM bkpf


INTO wa_bkpf
Acesso a Banco de Dados
SELECT

Inserindo em work-area baseado em tabela:


DATA: wa_bkpf TYPE bkpf.

SELECT bukrs belnr gjahr FROM bkpf


INTO CORRESPONDING FIELDS OF wa_bkpf
Acesso a Banco de Dados
SELECT

Inserindo em estrutura:
DATA: BEGIN OF wa_bkpf OCCURS 0,
v_bukrs TYPE bkpf-bukrs,
v_belnr TYPE bkpf-belnr,
v_gjahr TYPE bkpf-gjahr.
END OF wa_bkpf.

SELECT bukrs belnr gjahr FROM bkpf


INTO TABLE wa_bkpf
Acesso a Banco de Dados
SELECT

Inserindo em tabela interna baseada em tabela:


DATA: wa_bkpf TYPE bkpf OCCURS 0.

SELECT bukrs belnr gjahr FROM bkpf


INTO CORRESPONDING FIELDS OF TABLE wa_bkpf
Acesso a Banco de Dados
SELECT

• FROM <origem>
▫ A cláusula FROM especifica a tabela em que os dados
especificados na cláusula select serão lidos.
▫ As visões de banco de dados também pode ser
utilizadas na cláusula FROM
▫ Podem ser especificados uma tabelas ou mais de uma
tabela, com o uso das cláusulas INNER JOIN ou OUTER
JOIN.
Acesso a Banco de Dados
SELECT

SELECT em mais de uma tabela:

SELECT ... ... FROM <tabela> [INNER] JOIN


<outra tabela> [AS <alias> ] ON <condição>
<opções>

Exemplo:
SELECT s~hkont
FROM bkpf as b INNER JOIN bsis as s
ON b~bukrs = s~bukrs and b~belnr = s~belnr and b~gjahr = s~gjahr
INTO wa_hkont
WHERE b~bukrs = ’1100’
AND b~belnr = ‘11045676’ and b~gjahr = 2019.
Acesso a Banco de Dados
SELECT

Restringindo um número de registros:

SELECT ... FROM <tabela> UP TO <n> ROWS.


Exemplo:
SELECT bukrs FROM ztipo UP TO 1 ROWS
Acesso a Banco de Dados
SELECT

• WHERE -Condição tabular


▫ A cláusula where tem uma variante especial que permite derivar as
condições das linhas e colunas de uma tabela interna:

SELECT ... FOR ALL ENTRIES IN <itab> WHERE <condição>

▫ Ao especificar um campo da tabela interna como um operando em


uma condição, todas as linhas da tabela interna são lidas. A
comparação então é executada para cada linha da tabela interna.
Para cada registro, o sistema seleciona os registros do banco de
dados que satisfaçam a seleção.
▫ As linhas duplicadas são automaticamente eliminadas do resultado.
▫ Se a tabela interna estiver vazia, todas as entradas da tabela do
banco de dados são lidas.
Acesso a Banco de Dados
INSERT

• O comando INSERT adiciona registro(s) na tabela


• Os registros podem ser adicionados individualmente ou
coletivamente

INSERT INTO <tabela> VALUES <work-area> OU


INSERT <tabela> FROM <work-area>.

O conteúdo da work-area é adicionado à tabela do banco de


dados <tabela>.
A work-area deve ter a mesma estrutura da tabela do banco
de dados.
Acesso a Banco de Dados
INSERT

TABLES RJFLY.
DATA WA TYPE RJFLY.
WA-CARRID = ‘CH’.
WA-CITYFROM = ‘CHICAGO’.
...
INSERT INTO RJFLY VALUES WA.

WA-CARRID = ‘RJ’.
WA-CITYFROM = ‘RIO’.
...
INSERT RJFLY FROM WA.
Acesso a Banco de Dados
UPDATE

• O comando UPDATE é utilizado para alterar o conteúdo da tabela


do banco de dados
• Modificando registros individuais
▫ Para modificar os registros individualmente de uma tabela
do banco de dados através de uma work-area, utilize o seguinte
comando:

UPDATE <dbtab> FROM <work-area>

▫ Se a tabela do banco de dados conter um registro com a


mesma chave, o registro é atualizado. Caso contrário, o registro
não é alterado e o SY-SUBRC recebe o valor 4.
Acesso a Banco de Dados
UPDATE

• Modificando vários registros


▫ Para modificar vários registros de uma tabela do banco de
dados, o comando é:

UPDATE <tabela> FROM TABLE <tabela Interna>

▫ Se o sistema não puder modificar um registro devido a não


existência de um registro com chave especificada, o processo
não é finalizado, mas o processamento continua no próximo
registro.
Acesso a Banco de Dados
UPDATE

• Modificando os registros coluna por coluna


▫ Para modificar determinada colunas na tabela do banco de
dados, utilize o comando:

UPDATE <tabela> SET <set1> <set2> ... WHERE <COND>.

▫ A condição WHERE determina as linhas que serão alteradas.

Se a cláusula WHERE não for especificada, todos os registros são


atualizados. A expressão <set1> é o parâmetro que determina as
colunas que serão atualizadas:
▫ <c> = <valor>, sendo que <c> pode ser um objeto de dados ou
uma coluna da tabela do banco de dados.
Acesso a Banco de Dados
UPDATE

• Exemplo de Update Atualiza o conteúdo da coluna TYPEART com X200 e diminui o


valor da coluna PRICE por 800 para cada entrada na tabela SFLIGHT onde CARRID seja
LH e CONNID 0402:

UPDATE SFLIGHT SET TYPEART = ‘X200' PRICE = PRICE – 800


WHERE CARRID = 'LH' AND CONNID = '0402’.

Abaixo, os campos CARRID e CONNID são os campos chaves da tabela SPLFI. Todos
os registros que tiverem como chave os valores AA e 0064, serão atualizados:

DATA WA TYPE SPFLI.


MOVE 'AA' TO WA-CARRID.
MOVE '0064' TO WA-CONNID.
MOVE 'WASHINGTON' TO WA-CITYFROM.
...
UPDATE SPFLI FROM WA.
Acesso a Banco de Dados
DELETE

• O comando DELETE é utilizado para excluir os registros da tabela


do banco de dados.
• Para excluir as linhas utilizando condições utilize a seguinte sintaxe:

DELETE FROM <tabela> WHERE <condição>

▫ Todas as linhas que atenderem a condição serão removidas.


▫ Se uma tabela interna vazia for especificada na cláusula where,
todos os registros da tabela do banco de dados serão removidos.
Acesso a Banco de Dados
DELETE

• Ao invés de utilizar a cláusula WHERE, é possível selecionar os


registros para exclusão utilizando o conteúdo de uma work-area.

DELETE <dbtab> FROM <work-area>.

▫ Isto exclui o registro com a mesma chave primária da work-


area.
Acesso a Banco de Dados
DELETE

• Também é possível excluir várias linhas coletivamente utilizando


uma tabela interna.

DELETE <tabela> FROM TABLE <tabela interna>

▫ Esta sintaxe exclui todos os registros da tabela do banco de


dados que possuem as mesmas chaves primárias da tabela
interna.
▫ Se o sistema não puder excluir um registro, pois a chave
especificada não existe, a operação não é cancelada, mas o
processo continua a partir do próximo registro.
Acesso a Banco de Dados
DELETE

• Exemplo de Delete

Todos os registros da tabela SFLIGHT são excluídos onde PLANETYPE tenha o valor
A310 e CARRID tenha o valor LH:

DELETE FROM SFLIGHT WHERE PLANETYPE = 'A310' AND CARRID = 'LH’.

Os campos CARRID e CONNID são campos chave da tabela SPFLI. Os registros com as
chaves primárias AA e 0064 são excluídas.

TABLES SPFLI.
DATA: BEGIN OF WA,
CARRID TYPE SPFLI-CARRID,
CONNID TYPE SPFLI-CONNID,
END OF WA.
MOVE 'AA’ TO WA-CARRID.
MOVE '0064’ TO WA-CONNID.
DELETE SPFLI FROM WA.
Acesso a Banco de Dados
DELETE
Uma tabela interna tipo Hashed é definida com a estrutura das chaves
primárias da tabela SPFLI.
Depois do preenchimento da tabela interna, os registros da tabela do banco
de dados serão excluídos de acordo com os valores das chaves da tabela
interna.

DATA: BEGIN OF WA,


CARRID TYPE SPFLI-CARRID,
CONNID TYPE SPFLI-CONNID,
END OF WA,
ITAB LIKE HASHED TABLE OF WA WITH UNIQUE KEY CARRID CONNID.
WA-CARRID = 'UA'. WA-CONNID = '0011’.
INSERT WA INTO TABLE ITAB. WA-CARRID = 'LH'. WA-CONNID = '1245’.
INSERT WA INTO TABLE ITAB. WA-CARRID = 'AA'. WA-CONNID = '4574’.
INSERT WA INTO TABLE ITAB.
...
DELETE SPFLI FROM TABLE ITAB.
Acesso a Banco de Dados

 Os comandos INSERT, UPDATE e DELETE trabalham com work-area


e tabela interna.

 As work-areas e tabelas internas devem ter a mesma estrutura da


tabela do banco de dados que será manipulada.

 Se a operação foi realizada com sucesso, o valor do campo de sistema


SY-SUBRC será 0, caso contrário será 4.

 O campo de sistema SY-DBCNT irá conter o número de registros


afetados durante a operação.
Acesso a Banco de Dados

COMMIT WORK – Executa / Confirma alterações no banco de


dados

ROLLBACK WORK – Desfaz alterações no banco de dados a partir


do último COMMIT WORK
Parâmetro de Tela de Seleção

Existem 3 tipos de comando ABAP para definir a tela de seleção:

PARAMETERS para campos simples


SELECT-OPTIONS para campos complexos
SELECTION-SCREEN para formatar a tela de seleção

Por padrão, quando o programa do tipo Report é definido, o


sistema cria automaticamente a tela 1000, quando a tela de
seleção é especificada.
Parâmetro de Tela de Seleção

O comando PARAMETERS permite a criação de um campo de


entrada de um único valor.
Cada comando PARAMETERS declarado no programa cria um
campo de entrada na tela de seleção.
Parâmetro de Tela de Seleção

Para atribuir um valor padrão ao parâmetro de tela, é necessário utilizar o


DEFAULT como parâmetro ao comando.

PARAMETERS p_cityf TYPE spfli-cityfrom DEFAULT ‘SP’.


Parâmetro de Tela de Seleção

Para tornar um campo obrigatório , é necessário utilizar o OBLIGATORY


como parâmetro ao comando.

PARAMETERS p_cityf TYPE spfli-cityfrom OBLIGATORY .


Parâmetro de Tela de Seleção

Para ocultar um campo na tela, é necessário utilizar o NO-DISPLAY como


parâmetro ao comando.

PARAMETERS p_cityf TYPE spfli-cityfrom OBLIGATORY .


PARAMETERS p_dist TYPE spfli-distance NO-DISPLAY .
Parâmetro de Tela de Seleção

O comando SELECT-OPTIONS cria um campo que permite ao usuário


inserir um conjunto de valores e inserir os critérios de seleção.

Ao contrário do PARAMETERS em que o campo da tela está associado a


uma variável, o campo do select-options está associado a uma tabela
interna especial chamada tabela de seleção.

SELECT-OPTIONS <seltab> FOR <fieldtable>

Exemplo:
SELECT-OPTIONS s_air FOR spfli-carrid .
Parâmetro de Tela de Seleção

SELECTION-SCREEN BEGIN OF BLOCK b1 WITH FRAME TITLE TEXT-001.


SELECT-OPTIONS s_air FOR spfli-carrid .
SELECTION-SCREEN END OF BLOCK b1.

Se a opção WITH FRAME for utilizado um quadro é desenhado


em volta do bloco.
Se o TITLE for utilizado, é apresentado o título para cada bloco.
Parâmetro de Tela de Seleção

SELECT-OPTIONS s_cod_al FOR spfli-codal NO INTERVALS .

O recurso NO INTERVALS retira a possibilidade de intervalo


Funções e Subrotinas
CALL TRANSACTION
• O CALL TRANSACTION é um comando utilizada para transferir
um conjunto de dados para o sistema
• Permite transferir os dados diretamente para a interface de
diálogo.

REPORT ZFIR0001.
...
CALL TRANSACTION ‘FB60’
. ...
Funções e Subrotinas
CALL FUNCTION
• O CALL FUNCTION é um comando utilizado para executar um
determinado módulo de função.

CALL FUNCTION <modulo de função>


[EXPORTING f1 = a1 .... fn = an]
[IMPORTING f1 = b1.... fn = bn]
[CHANGING f1 = c1.... fn = cn]
[TABLES f1 = t1.... fn = tn]
[EXCEPTIONS e1 = r1.... rn = rn]
[OTHERS = rx]].
Funções e Subrotinas
CALL FUNCTION
Exemplo:

CALL FUNCTION 'Z_TREINAMENTO_5'


EXPORTING
im_nr01 = p_num1
im_nr02 = p_num2
IMPORTING
EM_RESULTADO = lv_resultado
CHANGING = Tab_interna
TABLE = Tabela
EXCEPTIONS
FILL_REQUIRED_FIELD = 1
OTHERS =2

Z_TREINAMENTO_5 = Módulo de função a ser executado


EXPORT = Envia parâmetros para a função
IMPORT = Retorna valores da função
CHANGING = Permite alteração em uma tabela interna ou estrutura
TABLE = tabela como parâmetro para acesso a seus dados
EXCEPTIONS = Tratamente de exceções
Funções e Subrotinas
FORM

Utilizado para criar e definir uma subrotina

FORM <subrotina>.
<código a ser executado>
ENDFORM.

Exemplo:

FORM CABECALHO.
WRITE: / 'Program started by', SY-UNAME,
/ 'on host', SY-HOST,
'date:', SY-DATUM, 'time:', SY-UZEIT.
ULINE.
ENDFORM.
Funções e Subrotinas
PERFORM

Utilizado para executar subrotinas.


Podem ser executadas subrotinas dentro do programa ou
externas ao programa.

PERFORM <subrotina>[(<programa>)]
Funções e Subrotinas
PERFORM
PROGRAM SAPMZTST.

DATA: NUM1 TYPE I,


NUM2 TYPE I,
SOMA TYPE I.

NUM1 = 2. NUM2 = 4.
PERFORM ADDIT.

NUM1 = 7. NUM2 = 11.


PERFORM ADDIT.

FORM ADDIT.
WSOMA = NUM1 + NUM2.
PERFORM OUT.
ENDFORM.

FORM OUT.
WRITE: / 'Soma de', NUM1, 'e', NUM2, 'é’, WSOMA.
ENDFORM.
Funções e Subrotinas
PERFORM
Neste exemplo2 chama um FORM definido em
outro programa

PROGRAM FORMPOOL.
FORM HEADER.
WRITE: / 'Program started by', SY-UNAME,
/ 'on host', SY-HOST,
'date:', SY-DATUM, 'time:', SY-UZEIT.
ULINE.
ENDFORM.

Podemos chamar a subrotina HEADER a partir de outro


programa:

PROGRAM SAPMZTST.
PERFORM HEADER(FORMPOOL).
Funções e Subrotinas
INCLUDE
Copia para dentro de um programa o conteúdo de um programa
tipo include

***INCLUDE STARTTXT.
WRITE: / 'Programa iniciado por', SY-UNAME,
/ 'no servidor', SY-HOST,
'data:', SY-DATUM, 'hora:', SY-UZEIT.
ULINE.

PROGRAM SAPMZTST.
INCLUDE STARTTXT
Funções e Subrotinas
INITIALIZATION
É uma rotina tratada como evento onde é executada antes de ser
apresentada tela ao usuária para inicializar parâmetros de seleção.

INITIALIZATION.

PERFORM get_fikey CHANGING p_fikey.


Instruções de Mensagens

As mensagens são agrupadas em classes de mensagens.

O sistema disponibiliza cinco tipos diferentes de mensagem (E, W, I, A, S).


Como exemplo, a mensagem 001pode ser especificada como segue:

MESSAGE <tipomsg> <NroMensagem> ( <classe mensagem> )

E001 Mensagem de erro, o sistema para o processamento no ponto em que a


mensagem foi declarada
W001 Mensagem de atenção, é exibida ao usuário para que ele tenha cuidado ao
executar determinada tarefa
I001 Mensagem informativa
A001 Mensagem de abend, no ponto em que foi declarada o programa termina
com uma mensagem de processamento anormal
S001 Mensagem de sucesso
O ABAP Debbuger

• Depuração do Código em tempo de execução

• Não está limitado a ABAPers


• Designado a soluções de problemas complexos

• Consultores funcionais, gerentes de projetos, desenvolvedores


Role de Autorização

• Desenvolvedores ABAP
Chave de Desenvolvedor

Objeto de
Autorização
• Consultores Funcionais S_DEVELOP
• Role S_DEVELOP
Object Type / ACTVT
DEBUG / 02 e 03

• Consultores, usuários
• Sem objeto de autorização
Role de Autorização

• Ao iniciar DEBUG com “/H”

ACTVT:
02 Modificação
03 Exibição

• O gerente de projeto precisa estar atento aos riscos de permissão


da equipe em ambiente de produção (Actvt 02)
Iniciando o Debugger e Ativando

• Digite “/H” antes de iniciar a transação/programa ou


função que deseja depurar

• Uma mensagem informará da ativação do DEBUG


• Execute a transação/programa/função
Identificando Programa/ Função

• DUMP error

• Programa/Função de uma nota SAP sugerida

• Apoio aos testes integrados

• Erro em tempo de execução em ambiente de


produção
Ponto de Parada Manual
• Programa - Transação SE38
Ponto de Parada Manual

• Função - Transação SE37


Ponto de Parada Manual

• Inserindo o ponto de parada – Duplo clique na coluna


anterior à numeração da linha ou pressione F9

• O ponto de parada passa a valer para execução usuário


que marcou
Ponto de Parada Interativo

• É possível atribuir um ponto de parada de diversos modos


Ponto de Parada Interativo

• Entrar com o nome do modulo de função


Debugger Antigo

• Limite excedido de janelas SAP pode ocasionar a


inicialização do debugger Antigo

• Configuração pode estar direcionada precisando ser


modificada

• É sugerido utilizar o Debugger novo em função de ter


um ambiente visual mais agradável e com maiores
recursos de manipulação
Debugger Antigo
Debugger Novo

Caso perceba que a execução foi direcionada ao Debugger clássico


(antigo), altere neste ponto para o Debugger ABAP novo
Debugger Novo

Esta tela será apresentada


Recursos de Navegação
Recursos de Navegação
Recursos de Navegação
Recursos de Navegação
Manipulando Dados de Tabelas e Variáveis
Manipulando Dados de Tabelas e Variáveis
Watchpoint
Ponto de Parada em Programas
Ponto de Parada em Programas
Ponto de Parada em Funções
Ponto de Parada em Funções
Ponto de Parada em Mensagens
Ponto de Parada em Mensagens
Ponto de Parada em Comando Específico
Ponto de Parada em Comando Específico
Ponto de Parada em Método
Criando Próprio Ponto de Parada
Desviar um Trecho do Programa

• É possível saltar um trecho do programa fazendo com que


a execução desvie para um ponto desejado
Retonar Parte da Execução do Programa
• É possível retornar a execução do programa a um ponto
anterior, fazendo com que a execução desvie para um
ponto desejado
Desativar Pontos de Parada

• É possível desativar os pontos de parade criados


Desativar Watchpoint
Dicas – Encontrando EXITs

• Inserindo o nome do comando CALL CUSTOMER-FUNCTION:

• Após encontrada a EXIT, desativar os pontos de parada


Dicas – Encontrando BADIs

• Diferente do modo de encontrar EXIT


Dicas – Encontrando BADIs
Dicas – Encontrando BADIs
Dicas – Encontrando BADIs
Dicas – Encontrando BADIs
Vamos Praticar

Você também pode gostar