Você está na página 1de 65

ÍNDICE INTRODUÇÃO AO ABAP

ÍNDICE
CAPÍTULO 1 - Introdução ao SAP ................................................... 3
O que é ERP? .................................................................................................. 3
O que é SAP? .................................................................................................. 5
Transações ...................................................................................................... 7
Diferentes tipos de Usuários SAP ..................................................................... 8
Introdução à Programação Básica em ABAP .................................................... 8
Transação SE38 .............................................................................................. 9
Ordem Tarefa request e Package(Development class) ..................................... 9
Exemplos e Exercícios ...................................................................................... 10

CAPÍTULO 2 - Comandos, Instruções e Mensagens ................... 19


Parâmetros de Entrada e Valores .................................................................... 19
Comando IF/ENDIF e CASE ............................................................................ 20
Classe de Mensagens ..................................................................................... 20
Mensagens de Erro,Informação e Sucesso ..................................................... 23
Elementos de textos ......................................................................................... 24
Tipos de Variáveis de sistema .......................................................................... 25
Declaração de Variáveis e constantes .............................................................. 26
Tipos de Operadores de Sistema...................................................................... 26
Criação de Transações (SE93) ......................................................................... 26
Exemplos e Exercícios ...................................................................................... 27

CAPÍTULO 3 - Tabelas Internas e Estruturadas ........................... 32


Declaração de Estruturas e Tabelas Internas .................................................. 32
Introdução ao Comando SELECT .................................................................... 33
Variável de Sistema sy-subrc ........................................................................... 38
Introdução Seqüencial – Comando LOOP ....................................................... 38
Detalhes sobre as Tabelas Internas.................................................................. 39
Exemplos e Exercícios ..................................................................................... 39

CAPÍTULO 4 - Depuração .................................................................. 45


Comando Select-Options ................................................................................. 45
Criação de Variante de Programa .................................................................... 46
Comando Selection-Screen .............................................................................. 48
O que é Debugger ........................................................................................... 49
Comandos principais ........................................................................................ 50
Exemplos e Exercícios ...................................................................................... 52

Todos os direitos autorais reservados à ICTraining – Proibida qualquer reprodução total ou parcial 1
ÍNDICE INTRODUÇÃO AO ABAP

CAPÍTULO 5 - Funções ...................................................................... 55


O que são funções? ......................................................................................... 55
Transação SE37 .............................................................................................. 55
Funções GUI_DOWNLOAD / GUI_UPLOAD ................................................... 56
Exemplos e Exercícios ...................................................................................... 58
Estudo de Caso ................................................................................................ 59

Todos os direitos autorais reservados à ICTraining – Proibida qualquer reprodução total ou parcial 2
CAPÍTULO 1 INTRODUÇÃO AO SAP

1 INTRODUÇÃO AO SAP

O que é o ERP?
 O ERP (Enterprise Resources Planning) ou Sistema Integrado de Gestão de
Empresa é um agrupamento coerente de softwares que lhe proporcionam visão das
operações de sua empresa em tempo real.
 O ERP lhe mostra como está sua empresa a cada instante, desde que sua equipe
introduza nele as informações relevantes para a descrição de sua empresa.

Conceitos Básicos

Com o avanço da Tecnologia da Informação as empresas passaram a utilizar sistemas


computacionais para suportar suas atividades. Geralmente, em cada empresa, vários
sistemas foram desenvolvidos para atender aos requisitos específicos das diversas
unidades de negócio, plantas, departamentos e escritórios. Por exemplo, o departamento de
planejamento da produção utiliza um sistema próprio e o departamento de vendas utiliza
outro. Dessa forma, a informação fica dividida entre diferentes sistemas.

Os principais problemas dessa fragmentação da informação são a dificuldade de obtenção


de informações consolidadas e a inconsistência de dados redundantes armazenados em
mais de um sistema. Os sistemas ERP solucionam esses problemas ao agregar, em um só
sistema integrado, funcionalidades que suportam as atividades dos diversos processos de
negócio das empresas.

Os sistemas ERP são compostos por uma base de dados única e por módulos que
suportam diversas atividades das empresas. A figura abaixo apresenta uma estrutura típica
de funcionamento de um sistema ERP. Os dados utilizados por um módulo são
armazenados na base de dados central para serem manipulados por outro módulos.

Os módulos citados na figura abaixo estão presentes na maioria dos sistemas ERP. Além
deles, alguns sistemas ERP possuem módulos adicionais, tais como: Gerenciamento da
Qualidade, Gerenciamento de Projetos, Gerenciamento de Manutenção, entre outros.

As funcionalidades dos módulos de um sistema ERP representam uma solução genérica


que reflete uma série de considerações sobre a forma que as empresas operam em geral.
Para flexibilizar sua utilização em um maior número de empresas de diversos segmentos, os
sistemas ERP foram desenvolvidos de forma que a solução genérica possa ser customizada
em um certo grau.

Todos os direitos autorais reservados à ICTraining – Proibida qualquer reprodução total ou parcial 3
CAPÍTULO 1 INTRODUÇÃO AO SAP

Figura: ERP – Sistema Integrado de Gestão de Empresa

Na implantação de um sistema ERP, a customização é um compromisso entre os


requisitos da empresa e as funcionalidades disponíveis no sistema. Inicialmente, na
maioria das vezes, os processos de negócio das empresas precisam ser redefinidos
para que seus requisitos se aproximem das funcionalidades do sistema. Então, a
primeira medida de customização é a seleção dos módulos que serão instalados. A
característica modular permite que cada empresa utilize somente os módulos que
necessite e possibilita que módulos adicionais sejam agregados com o tempo. Em
seguida, para cada módulo, são feitos ajustes nas tabelas de configuração para que o
sistema se adeque da melhor forma possível aos novos processos de negócio.
Mesmo com a customização, a solução pode não atender a alguns requisitos
específicos das empresas. Nesses casos, as empresas precisam utilizar outros
sistemas complementares ou abandonar seus requisitos específicos e adotar
processos genéricos.

Por esse motivo, a decisão de implantação de um sistema ERP só deve ser tomada
após uma análise detalhada dos processos da empresa e das funcionalidades dos
sistemas ERP. Além disso, é muito importante que as empresas considerem, desde o
início da implantação, os impactos que a redefinição dos processos e a introdução do
sistema terão na estrutura, cultura e estratégia da organização.

Todos os direitos autorais reservados à ICTraining – Proibida qualquer reprodução total ou parcial 4
CAPÍTULO 1 INTRODUÇÃO AO SAP

O que é SAP?

Em 1972, cinco engenheiros de sistemas decidiram abandonar seus empregos e, apostando


numa idéia bastante extravagante para a época, abrir uma nova empresa. Surgia a SAP
(Systemanalyse and Programmentwicklung.- Sistemas, Aplicações e Produtos para
Processamento de Dados). A idéia por trás dessa iniciativa era a criação de uma solução
única, totalmente integrada, capaz de automatizar todos os processos inerentes a uma
empresa. 29 anos e 10 milhões de usuários depois, a SAP surge como a terceira maior
empresa de software do mundo - a primeira em software de gestão empresarial -,
empregando mais de 24 mil pessoas em 50 países diferentes e contando com mais de mil
parceiros.

Os softwares SAP rodam em mais de 36 mil instalações, espalhadas por 120 países, e são
atualmente utilizados por empresas de todos os tamanhos, incluindo mais da metade das
500 maiores empresas do mundo. Air France, Audi, Bayer, BMW, Bosch, Burger King,
Deutsche Bank, Heineken, Honda, KPMG, Lufthansa, MLP, Nestlè, Nokia, Osram, Pfizer,
Siemens, Texaco Worlwide, Visteon, Wuerth, barnesandnoble.com, Westell Technology e
Streamline.com estão entre o rol de clientes SAP.
A SAP emprega um total de 6.655 desenvolvedores de software ao redor do globo. Como
complemento ao maior centro de desenvolvimento na matriz da SAP, em Walldorf,
Alemanha, a rede de laboratórios de desenvolvimento da empresa tem escritórios em Palo
Alto (EUA), Tokyo (Japão), Bangalore (Índia) e Sophia Antipolis (França), assim como nas
cidades alemãs de Berlim, Karlsruhe e Saarbruecken.
Fonte: www.sap.com.br

Como Acessar o SAP?

Para acessar o SAP, de um duplo clique com o botão direito do mouse no ícone SAPLogon
na Área de Trabalho, ou acesse pelo caminho: Iniciar → Programas → Sap Front End →
SAPLogon. Você verá a seguir a seguinte tela:

Figura – SAP Logon

Todos os direitos autorais reservados à ICTraining – Proibida qualquer reprodução total ou parcial 5
CAPÍTULO 1 INTRODUÇÃO AO SAP

Neste exemplo, temos ao todo 8 instâncias, e cada instância pode ter um determinado
número de client’s(mandantes).

Os botões : Características, Grupos e Servidor são para configurações de redes das


Instâncias, que podem ter diferentes base de dados.
Os botões Eliminar e Novo, eliminam e criam novas instâncias no SAP.

Vamos entrar no ambiente de Desenvolvimento S01, portanto, marque a opção 1)S01 –


Desenvolvimento 40B e clique em Logon. A seguinte tela aparecerá:

Figura – Logon no SAP

Agora que você escolheu a Instância(Ambiente) agora você deverá escolher o


Client(mandante) deste ambiente. Digite o mandante 200, inclua seu usuário e senha e
pressione Enter.

Instância X Client(Mandante)

Instância – É definida como um ambiente do SAP que agrupa um ou mais mandantes,


onde executa um determinado trabalho. Por exemplos: pode existir em um projeto, uma
instância de teste e uma instância de desenvolvimento, e a instancia de teste pode possuir
três mandantes, e a instancia de desenvolvimento pode possuir dois mandantes.

Todos os direitos autorais reservados à ICTraining – Proibida qualquer reprodução total ou parcial 6
CAPÍTULO 1 INTRODUÇÃO AO SAP

Client (Mandante) – É definido como sendo uma unidade independente do SAP, em termos
técnicos, organizacionais e comerciais. Isto é, possuem suas próprias configurações, dados
de aplicação e dados cadastrais (master data).

Instância Mandante
QAS – testes 320
310
300
SO1 - Desenvolvimento 220
210

Uma instancia de Trabalho, geralmente possui mais de um mandante, onde são trabalhados
simultaneamente diferentes frentes de trabalho do projeto. A intenção dessa divisão é que
possa trabalhar somando valores, sem que haja conflitos e interesses. Por exemplo, durante
um projeto o mandante para customização de ABAP deve ser diferente dos outros, pois
trabalha muito com testes e alterações constantes, o que inviabiliza outros tipos de serviços.
Se essa divisão muitas vezes ajuda, algumas vezes atrapalha. Geralmente as massas de
dados são diferentes nos mandantes, e o comportamento principalmente nos testes dos
produtos customizados pode ser diferente.

Transações

Transação é um código alfanumérico de 20 caracteres, utilizado para iniciar um processo


dentro do sistema SAP. Todo e qualquer processo ou parte dele deve ser executado dentro
do sistema através de uma transação. Na customização de ABAP, sempre que um GAP do
programa seja coberto, isso gera pelo menos uma transação, de modo que o usuário possa
executar esse produto customizado de dentro do sistema.
Toda operação realizada através do menu do sistema, também corresponde a uma
transação. Um método de conhecermos o código da transação cujo caminho pelo Menu
principal é conhecido, é utilizando o caminho SISTEMA → STATUS, surgirá uma tela com
algumas informações técnicas, entre elas o programa e a transação respectiva.

Algumas das transações mais usadas estão:

SE38 – Editor para programação em ABAP.


Caminho = Ferramentas → ABAP Workbench → Editor ABAP

SE16 – permite a visualização do conteúdo das tabelas do SAP.

SE11 – permite a visualização da arquitetura de uma tabela/ estrutura do SAP.


Caminho = Ferramentas → ABAP Workbench → Dictionary

SE37 – Criação e execuções individuais de funções.


SE43 – Criação de Menus.
SE93 – Criação de Transações customizadas.
SE71 – Criação e manutenção de formulários SAPscripts.
CMOD – Criação de projetos Exits (Field Exits, User Exits,..)

Todos os direitos autorais reservados à ICTraining – Proibida qualquer reprodução total ou parcial 7
CAPÍTULO 1 INTRODUÇÃO AO SAP

Diferença entre Usuário do SAP


Existem Basicamente 3 usuários no sistema SAP listados abaixo:

 Funcional (Processos/Procedimentos) – Este usuário é responsável pelas adequações


dos módulos SAP para atender as funcionalidades da empresa onde o mesmo será
instalado. Pode ocorrer, na maioria das vezes, alguns casos onde a solução mais
adequada para a empresa, não seja inteiramente atendida pelo Módulo SAP, sendo
assim, é necessário à criação de um procedimento novo, que pode ser um programa.

 ABAPer (Programador) – Este usuário é responsável pela programação das


customizações realizadas pelos Funcionais. Por exemplo: O Funcional decide que, para
atender uma certa funcionalidade, será necessária a construção de um novo programa,
sendo assim o mesmo irá elaborar uma documentação (Geralmente chamada de
Especificação Funcional) e encaminhará a mesma para o programador ABAP.

 Basis (DBA) – O DBA (Data Base Administrator) do SAP se chama Basis, este usuário
tem a finalidade de controlar toda à parte de base de dados do Sistema SAP, como por
exemplo, crescimento de tabelas, verificar o tempo dos processos em execução, verificar
o tempo de execução dos programas.

Introdução à Programação ABAP

O que é ABAP?

ABAP significa - Advanced Business Application Programming (Programação de Aplicação


Empresarial Avançada), esta é a Coluna vertebral do Sistema SAP. Todas as aplicações e
partes do sistema básico do SAP foram desenvolvidas em ABAP. A Flexibilidade e a
facilidade da linguagem, combinadas com uma especialidade de comandos, tornam a
linguagem ABAP uma ferramenta muito útil para implementar soluções empresariais de
pequeno e grande porte.

Todos os direitos autorais reservados à ICTraining – Proibida qualquer reprodução total ou parcial 8
CAPÍTULO 1 INTRODUÇÃO AO SAP

Transação SE38

O ambiente de Trabalho para criação de objetos ABAP, chama-se ABAP Workbench,


conforme descrito no tópico 1.3 o caminho para acessar a transação SE38 pelo menu
segue: Ferramentas → ABAP Workbench → Editor ABAP, nele podemos verificar todos os
objetos relacionados a um programa, acessar os objetos do dicionário de dados do SAP,
criar/editar fontes do ABAP, criar funções, desenhar telas para os programas ABAP e por
fim criar menus para inserir nas telas dos programas.

Ordem Tarefa request e Package (Development class)

Para todas as ações efetuadas no ABAP como, por exemplo, criação de programas, criação
de transações, etc..., o ABAP cria uma REQUEST, ou uma ordem de modificação. Esta
request, nada mais é do que um número onde se encontra a alteração ou criação de
programas no ABAP.
Para controlar estas alterações, o ABAP cria também as chamadas Package. Estas são
pastas que servem para organizar as lista de request (alterações) realizadas nos programas.

Todos os direitos autorais reservados à ICTraining – Proibida qualquer reprodução total ou parcial 9
CAPÍTULO 1 INTRODUÇÃO AO SAP

A package $TMP foi criada para armazenar os objetos desenvolvidos localmente pelo
programador, portanto, não estão relacionados com uma request.

Para realização dos transportes de programas entre as instâncias e entre os mandantes é


necessário que os programas estejam obrigatoriamente amarrados a uma request, para
posteriormente, caso ocorra um erro em um ambiente de produção, a versão anterior deste
programa seja restaurada.

Exemplos e Exercícios

Como dito anteriormente, a transação SE38 é a transação de ferramentas para ABAP,


porém, com o lançamento das versões mais recentes (Versão Atual 6.2), a transação SE80 se
torna mais completa para desenvolvedores, incluindo maior quantidade de utilitários:

Todos os direitos autorais reservados à ICTraining – Proibida qualquer reprodução total ou parcial 10
CAPÍTULO 1 INTRODUÇÃO AO SAP

Para criar um programa novo escolha programas no campo e nomeie seu programa,
lembrando que os programas devem começar com a letra Z ou Y. Esta configuração foi
adotada pela SAP para distinguir os programas criados pelos usuários dos programas
criados pela própria SAP.

1- Nomeie o seu Programa (Lembre-se de começar com Z ou Y)


2- Desmarque a opção With TOP INCL.

3– É Obrigatório seu programa possuir uma descrição.


4– Mantenha a tela de Atributes conforme a figura.
5– Clique em SAVE.

Todos os direitos autorais reservados à ICTraining – Proibida qualquer reprodução total ou parcial 11
CAPÍTULO 1 INTRODUÇÃO AO SAP

Exemplo número um

* comando para inserir comentário no código.


* usa-se aspas duplas para comentar no meio da linha “por exemplo
*-------------------------------------------------------------------
---*
REPORT Z_EXERC_1 NO STANDARD PAGE HEADING MESSAGE-ID ZSADUP.

WRITE: '111111'.
WRITE: '222222',
'333333'.
WRITE: /'111111'.
WRITE: 15 '333333'.
WRITE: / TEXT-001.
ULINE.
ULINE 8(6).
SKIP.
SKIP 2.
WRITE: 8 SY-LANGU.
WRITE: / SY-DATUM UNDER SY-LANGU.

Neste exemplo, apresentamos o comando write, uline, skip e variáveis do sistema como sy-
langu, sy-datum.
Atenção ao cabeçalho do programa:
REPORT Z_EXERC_1 – Programa do tipo report com o Nome Z_EXERC_1
NO STANDARD PAGE HEADING – não apresenta cabeçalho padrão.
MESSAGE-ID ZSADUP. – código de mensagens com o nome de Zsadup.
Como resultado, teremos a seguinte execução:

Exemplo número dois

REPORT Z_EXERC_2 NO STANDARD PAGE HEADING MESSAGE-ID ZSADUP.

WRITE:/ 'normal'.
FORMAT INTENSIFIED OFF.
WRITE:/ 'negrito'.
FORMAT COLOR 1.
WRITE: /'fundo azul'.
FORMAT COLOR OFF.
FORMAT INTENSIFIED ON.
WRITE: /'normal'.
Variações do comando format.

Todos os direitos autorais reservados à ICTraining – Proibida qualquer reprodução total ou parcial 12
CAPÍTULO 1 INTRODUÇÃO AO SAP

Como resultado, teremos a seguinte execução:

Exemplo número três

REPORT Z_EXEC_3 NO STANDARD PAGE HEADING MESSAGE-ID ZSADUP.

DATA: NOME(20) TYPE C,


RG TYPE I,
DATA LIKE SY-DATUM,
HORA(8) VALUE '14:05:45'.

MOVE 'Solution center' TO NOME.


RG = 42159818.
DATA = '20041305'.
SKIP.
WRITE:/'Nome:', NOME,
/'RG:' , RG,
/'Data:' , DATA,
/'hora:' , HORA.

Declaração de variáveis e atribuíção de valores.


Como resultado, teremos a seguinte execução:

Todos os direitos autorais reservados à ICTraining – Proibida qualquer reprodução total ou parcial 13
CAPÍTULO 1 INTRODUÇÃO AO SAP

Exercício 1

Apresentar código fonte para execução da seguinte tela:

Exercício 2

Apresentar código fonte para execução da seguinte tela:

Resolução do exercício 1

REPORT Z_ANDRE NO STANDARD PAGE HEADING MESSAGE-ID ZSADUP.

SKIP 5.
ULINE.
ULINE 30(29).
WRITE: /37 TEXT-001.
SKIP.
WRITE: 30 'Dia', 49 SY-DATUM,
/'hora' UNDER 'Dia', SY-UZEIT UNDER SY-DATUM.
SKIP.
ULINE 30(29).
ULINE.

Todos os direitos autorais reservados à ICTraining – Proibida qualquer reprodução total ou parcial 14
CAPÍTULO 1 INTRODUÇÃO AO SAP

Resolução do exercício 2

REPORT Z_ANDRE NO STANDARD PAGE HEADING MESSAGE-ID ZSADUP.

SKIP 4.
ULINE 4(88).
WRITE: /4 '|', 5 TEXT-001, 68 '|', 77 SY-DATUM, 91 '|'.
FORMAT INTENSIFIED OFF.
WRITE: 70 'Data:', / ' '.
ULINE 4(88).
WRITE: /5 'Nome:', 70 'Usuário:'.
FORMAT INTENSIFIED ON.
WRITE: 4 '|', 11 'Solution Center', 68 '|', 79 SY-UNAME, 91
'|', / ' '.
ULINE 4(88).

Todos os direitos autorais reservados à ICTraining – Proibida qualquer reprodução total ou parcial 15
CAPÍTULO 1 INTRODUÇÃO AO SAP

ANOTAÇÕES

Todos os direitos autorais reservados à ICTraining – Proibida qualquer reprodução total ou parcial 16
CAPÍTULO 1 INTRODUÇÃO AO SAP

ANOTAÇÕES

Todos os direitos autorais reservados à ICTraining – Proibida qualquer reprodução total ou parcial 17
CAPÍTULO 2 COMANDOS, INSTRUÇÕES E MENSAGENS

2 COMANDOS, INSTRUÇÕES
E MENSAGENS

Parâmetro de entrada de valores


Existem dois tipos principais de paramentos de entrada de valores, são os seguintes:
Parameter e Select-options. Neste primeiro momento Trabalharemos com o Parameter.
Tanto o comando parameter como o comando Select-options, são comandos de interface
com o usuários, permitindo que o usuário introduza, por exemplo, uma condição em um
determinado tipo de relatório.
Estes comandos também produzem, automaticamente, uma tela gráfica e um botão de
Execute (F8).

Verificar exemplo número 1 do segundo capítulo.

Exemplo 1.

REPORT Z_EXERC_1 NO STANDARD PAGE HEADING MESSAGE-ID ZSADUP.

PARAMETER: P_NOME1(15) TYPE C,


P_NOME2(15) TYPE C,
P_BOTAO1 RADIOBUTTON GROUP G1,
P_BOTAO2 RADIOBUTTON GROUP G1.

Neste exemplo, estamos criando 4 tipos de variáveis (p_nome1 /p_nome2 /p_botão1


/p_botão2), aconselha-se informar como parâmetro para melhor visualização, as letras p ou
s no início da variável para idendificar-mos respectivamente uma variável Parameter ou uma
variável do Tipo Select-options.

Neste exemplo teremos a seguinte execução...

Todos os direitos autorais reservados à ICTraining – Proibida qualquer reprodução total ou parcial 18
CAPÍTULO 2 COMANDOS, INSTRUÇÕES E MENSAGENS

Comando IF e ELSE (syntax)

Os comandos de condição mais usados nesta Linguagem são os seguintes : IF/ENDIF e


CASE/ENDCASE. Segue modelo:

IF <Expressão Logica>. CASE variável.


>Execute< WHEN 0.
ELSEIF < Expressão Logica >. >Execute<
WHEN 0 OR 2.
>Execute<
ELSE. >Execute<
>Execute< WHEN OTHERS.
ENDIF. >Execute<
ENDCASE.
Atenção , não é permitido realizar operações aritméticas nas condições, Por exemplo:

IF var_1 = Var_2 + var_3.


>Execute<
ENDIF.

Segue exemplo número 2 do capítulo 2.

Verificar que neste exemplo é acrescentado uma extensão do comando Parameter, o


Radiobutton Group, este comando realiza uma seleção de dados entre as quatros
variáveis dentro do Grupo G1, onde apenas uma pode ser escolhida para execução do
programa.

Classe de Mensagens

Classe de mensagens é um repositório de mensagens que recebe um nome (inicialmente


começado por Z. Ex. zmessa). Para se usar uma classe de mensagem é necessário realizar
sua declaração no comando Report, logo no inicio do programa, por exemplo:

Report z_exec_1 no Standard page heading message-id zmessa.

Para usar as mensagens armazenadas em uma classe de mensagens utilize o comando


Message, como no exemplo:

Message i000 (ZTEXT).

Onde i é o tipo de mensagem que pode ser:


i (Information) – Mensagem do tipo informação – essa mensagem continua o processo do
programa após sua execução.
e (error) – Messsagem do tipo erro - essa mensagem interrompe a execução do programa.
s (success) – Mensagem de sucesso – essa mensagem funciona do mesmo modo que a
mensagem de informação.

Todos os direitos autorais reservados à ICTraining – Proibida qualquer reprodução total ou parcial 19
CAPÍTULO 2 COMANDOS, INSTRUÇÕES E MENSAGENS

000 é o número da mensagem criada na classe de mensagem ZTEXT (Pode variar entre
000 até 999).

Para criarmos classe de mensagens acessamos a transação SE91.

Exemplo 2.

REPORT Z_EXERC_1 NO STANDARD PAGE HEADING MESSAGE-ID ZSADUP.

PARAMETER: P_OPER1 TYPE I,


P_OPER2 TYPE I,
P_SOMA RADIOBUTTON GROUP G1,
P_SUB RADIOBUTTON GROUP G1,
P_DIV RADIOBUTTON GROUP G1,
P_MULT RADIOBUTTON GROUP G1.
DATA: RESULT TYPE I.

IF P_OPER1 = '' AND P_OPER2 = ''.


MESSAGE I012 WITH 'Valores em branco'.
ENDIF.

IF P_SOMA = 'X'.
RESULT = P_OPER1 + P_OPER2.
WRITE RESULT.
ENDIF.

IF P_SUB = 'X'.
RESULT = P_OPER1 - P_OPER2.
WRITE RESULT.
ENDIF.

IF P_DIV = 'X'.
RESULT = P_OPER1 / P_OPER2.
WRITE RESULT.
ENDIF.

IF P_MULT = 'X'.
RESULT = P_OPER1 * P_OPER2.
WRITE RESULT.
ENDIF.

Teremos a seguinte execução do programa.

Todos os direitos autorais reservados à ICTraining – Proibida qualquer reprodução total ou parcial 20
CAPÍTULO 2 COMANDOS, INSTRUÇÕES E MENSAGENS

Todos os direitos autorais reservados à ICTraining – Proibida qualquer reprodução total ou parcial 21
CAPÍTULO 2 COMANDOS, INSTRUÇÕES E MENSAGENS

Mensagens de Erro, Informação e Sucesso

Observando o programa anterior, consta uma condição de erro devido a falha na


consistência da divisão por ZERO. Execute o programa realizando uma operação de divisão
por zero. As seguintes mensagem aparecerão:

Estas Mensagens são os erros em tempo de execução, são conhecidos domo “Dump” e
terminam a execução do programa que apresenta este tipo de erro. Outro tipo de Dump, por
exemplo, quando tentamos colocar um valor em uma variável, se este valor for maior que o
tamanho que foi estipulado na variável o dump ocorre.

Todos os direitos autorais reservados à ICTraining – Proibida qualquer reprodução total ou parcial 22
CAPÍTULO 2 COMANDOS, INSTRUÇÕES E MENSAGENS

Logo abaixo, é mostrada a linha onde ocorreu o erro.


Para evitarmos estes tipos de erro, e também, para deixarmos o programa mais interativo
com o usuário existem as mensagem interativas conforme segue:

Mensagens do tipo: E (Error) interrompe a execução do programa.

Mensagens do tipo: S (success) avisa que determinada parte do programa foi executada
com sucesso e inicializa a próxima fase.

Mensagens do tipo: I (Information) O programa exibe um aviso e continua com a execução


do programa.

Elementos de texto

Os Elementos de texto são “Mascaras” que deixam as interfaces com o usuário mais
amigáveis.

Eles estão divididos em três pastas:

Seguir o seguinte caminho: Goto -> Text elements

 Selection texts: estes são usados para os parâmetros de entrada de valores.


(Parameters e Select-options).
 Text symbols: usados para cadastrar os textos usados no programa. Estes textos
são usados pelo comando text seguido pelo numero respectivo da mensagem (000 a
999).
 List Headings: usado para facilitar o preenchimento do cabeçalho de um relatório.

Todos os direitos autorais reservados à ICTraining – Proibida qualquer reprodução total ou parcial 23
CAPÍTULO 2 COMANDOS, INSTRUÇÕES E MENSAGENS

Tipos de variáveis do sistema

Os tipos de variáveis do didtemas disponíveis na linguagem ABAP são:

• d Data (formato YYYYMMDD)


• t tempo (HHMMSS)
• i inteiro
• f ponto flutuante
• string conjunto de caracteres
• c caractere
• n caractere numérico.
• p para números decimais.

A linguagem ABAP permite e é recomendado que, quando declaramos uma variável


podemos referenciá-la a um campo de uma tabela qualquer que possua o tipo de variável
escolhida. Portanto é preferível declarar uma variável da seguinte forma:

Em vez de:

Data v_tempo type t.

É recomendado:

Data v_tempo type spfli-deptime.

Declaração de Variáveis e Constantes

Como visto anteriormente, Variáveis são declaradas das seguintes formas...

Todos os direitos autorais reservados à ICTraining – Proibida qualquer reprodução total ou parcial 24
CAPÍTULO 2 COMANDOS, INSTRUÇÕES E MENSAGENS

Data: <nome da variável(de preferência comece com v_ )> like / type <tipo de variavel>.

No abap porém, as constantes são declaradas de modo diferente, conforme segue:

Constants: <nome da constante (de preferência comece com c_ )> like / type <tipo de
variavel> value <valor da constante>.

Tipos de Operadores de Sistema

Os operandores de sistemas são os seguintes:

Para variáveis numéricas Para caracteres Descrição


= EQ Equal to
<> NE Not equal to
> GT Greater than
< LT Less than
>= GE Greater than or equal to
<= LE Less than or equal to

Obs: Nada impede de você usar os operadores tanto para caractere como para variáveis
numéricas, porém para melhorar o entendimento, usamos a convenção acima.

Criação de Transações(SE93)

Esta é a transação para criação de transações. Um caminho mais fácil é pela transação
SE80 clicar com o botão direito do mouse no programa -> Create -> Transaction. Não
esquecer o Short Text.

Todos os direitos autorais reservados à ICTraining – Proibida qualquer reprodução total ou parcial 25
CAPÍTULO 2 COMANDOS, INSTRUÇÕES E MENSAGENS

Após o Preenchimento da tela anterior, faremos então a seleção do programa para qual
nossa transação apontará. (Para os casos de programas tipo report a tela default e sempre
1000).

Exemplos e Exercícios

Conforme o segundo exemplo, construa um programa, do tipo calculadora, que tenha


consistência para o caso de divisões por zero, consistência para a entrada do operador que
deverá ser +, - , /, ou *, e apresente a seguinte tela de entrada e saída (Utilize o comando
Case):
Para finalizar crie uma transação para este novo programa.

Tela de entrada

Todos os direitos autorais reservados à ICTraining – Proibida qualquer reprodução total ou parcial 26
CAPÍTULO 2 COMANDOS, INSTRUÇÕES E MENSAGENS

Saída do programa:

Possível Solução do exercício 1:

REPORT Z_EXERC_1 MESSAGE-ID ZSADUP.

PARAMETER: P_OPER1 TYPE I,


P_OPER2 TYPE I,
v_oper2 type c.

DATA: RESULT TYPE I.


data: v_oper(15) type c.

case v_oper2.
when '+'.
RESULT = P_OPER1 + P_OPER2.
v_oper = 'Soma'.
when '-'.
RESULT = P_OPER1 - P_OPER2.
v_oper = 'Subtração'.
when '/'.
IF P_OPER2 = ''.
message e012 with text-001.
STOP.
ELSE.
RESULT = P_OPER1 / P_OPER2.
v_oper = 'Divisão'.
ENDIF.
when '*'.
RESULT = P_OPER1 * P_OPER2.
v_oper = 'Multiplicação'.
when others.
message e012 with text-000.
endcase.

* Impressão dos valores


skip 3.
format color col_normal.

write: / 'Operador 1 = ', p_oper1, 132'',


/ 'Operador 2 = ', p_oper2,
80 'Operação =', v_oper, 132''.
skip 2.

Todos os direitos autorais reservados à ICTraining – Proibida qualquer reprodução total ou parcial 27
CAPÍTULO 2 COMANDOS, INSTRUÇÕES E MENSAGENS

format color col_total.


write: / 'Resultado = ', result, 132''.

Todos os direitos autorais reservados à ICTraining – Proibida qualquer reprodução total ou parcial 28
CAPÍTULO 2 COMANDOS, INSTRUÇÕES E MENSAGENS

ANOTAÇÕES

ANOTAÇÕES

Todos os direitos autorais reservados à ICTraining – Proibida qualquer reprodução total ou parcial 29
CAPÍTULO 2 COMANDOS, INSTRUÇÕES E MENSAGENS

Todos os direitos autorais reservados à ICTraining – Proibida qualquer reprodução total ou parcial 30
CAPÍTULO 3 TABELAS INTERNAS E ESTRUTURADAS

3 TABELAS INTERNAS
E ESTRUTURADAS

Declaração de Estruturas e Tabelas Internas


Para explicar basicamente a diferença entre tabelas internas e estruturas, vamos pegar
como exemplo a tabela transparente SPFLI.
Esta tabela possui 16 campos conforme segue:
SPFLI:
MANDT CARRID CONNID COUNTRYFR CITYFROM AIRPFROM ... PERIOD
000 AA 0017 US ROME JFK ... 0
000 AA 0064 US TOKIO FCO ... 0

Vamos declarar a estrutura wa , quando declaramos uma estrutura termos os seguinte


modelo:
WA - WA- WA- WA- ... WA-
CARRID
MANDT CONNID COUNTRYFR PERIOD
...

Uma estrutura é equivalente a uma tabela interna, porém só possui um registro, sendo
assim uma estrutura é um conjunto de variáveis.
Uma tabela interna, funciona como uma tabela transparente, ela é diferente de uma
estrutura pois pode armazenar mais que um registro, conforme segue, o modelo para uma
tabela interna i_tab:

i_tab- i_tab- i_tab- i_tab- ... i_tab-


MANDT CARRID CONNID COUNTRYFR PERIOD
...
...

Todos os direitos autorais reservados à ICTraining – Proibida qualquer reprodução total ou parcial 31
CAPÍTULO 3 TABELAS INTERNAS E ESTRUTURADAS

Para declarar uma Estrutura:


DATA <Nome da estruruta> TYPE <Nome da tabela de referencia>.

OU
Tables <Nome da estrutura >

Esta declaração serve apenas para variáveis dom o mesmo nome das tabelas
transparentes.
OU
DATA: begin of <Nome da estrutura>,
<campos da estrutura>,
end of <Nome da estrutura>.

Para declarar uma tabela interna:


DATA <Nome da tabela interna> type table of <Nome da tabela
de referencia> with header line.

Ou
DATA: begin of <Nome da tabela interna> occurs 0,
<campos da tabela>,
end of < Nome da tabela interna >.

Introdução ao Comando SELECT

O comando select , é o responsável pela capturar dos dados no Banco de Dados e inseri-los
em uma variável interna do programa ABAP.
Os modelos básicos do comando que veremos neste curso são:
Select <Campos> From < Tabela Standart> into <Estrutura> .
<Execuções>
EndSelect .

Este comando funciona como uma seqüência de comandos para acessar o banco de dados
(comportando-se como um looping). Ele também permite uma clausula de condição
(WHERE), porém não é obrigatória.

Todos os direitos autorais reservados à ICTraining – Proibida qualquer reprodução total ou parcial 32
CAPÍTULO 3 TABELAS INTERNAS E ESTRUTURADAS

Select <campos> From < Tabela Standart> into table <Tabela interna>.

Este comando só realiza uma busca na base de dados, trazendo todos os valores de uma
vez só. Ele também permite uma clausula de condição (WHERE), porém não é obrigatória.
Para melhor entendimento dos conceitos que acabamos de ler, vamos implementar o
seguinte programa exemplo:

Exemplo 1:
REPORT z_exerc_1 MESSAGE-ID zsadup.

* Declarando estruturas

TABLES spfli.

DATA wa_spfli TYPE spfli.

DATA: BEGIN OF wa_spfli1,


carrid LIKE spfli-carrid,
connid LIKE spfli-connid,
END OF wa_spfli1.

* Comando Select para estruturas

SELECT * FROM spfli INTO wa_spfli.

WRITE: / wa_spfli-carrid,
wa_spfli-connid,
wa_spfli-countryfr,
wa_spfli-cityfrom,
wa_spfli-airpfrom.

ENDSELECT.

Todos os direitos autorais reservados à ICTraining – Proibida qualquer reprodução total ou parcial 33
CAPÍTULO 3 TABELAS INTERNAS E ESTRUTURADAS

SKIP.
ULINE.
SKIP.

* Declarando Tabelas internas

DATA i_tab TYPE TABLE OF spfli WITH HEADER LINE.

DATA: BEGIN OF i_tab2 OCCURS 0,


carrid LIKE spfli-carrid,
connid LIKE spfli-connid,
END OF i_tab2.

* Comando select para tabelas internas.


Select * from spfli into table i_tab.

Verifique que neste programa foram declaradas respectivamente:


Três estruturas: spfli, wa_spfli e wa_spfli1.
Duas tabelas internas: i_tab e i_tab2.

Atenção para a tabela interna i_tab2 e para a Estrutura wa_spfli1, ambas não possuem
todos os campos da tabela original.

Verificando o resultado da execução:

Todos os direitos autorais reservados à ICTraining – Proibida qualquer reprodução total ou parcial 34
CAPÍTULO 3 TABELAS INTERNAS E ESTRUTURADAS

Todos os direitos autorais reservados à ICTraining – Proibida qualquer reprodução total ou parcial 35
CAPÍTULO 3 TABELAS INTERNAS E ESTRUTURADAS

Agora para o exemplo 2, Verifique que acrescentamos uma condição:

REPORT z_exerc_1 MESSAGE-ID zsadup.

DATA wa_spfli TYPE spfli.

SELECT * FROM spfli INTO wa_spfli where carrid = 'AA'.


WRITE: / wa_spfli-carrid,
wa_spfli-connid,
wa_spfli-countryfr,
wa_spfli-cityfrom,
wa_spfli-airpfrom.
ENDSELECT.

Esta condição que acrescentamos anteriormente poderia ser uma informação passada pelo
usuário para executar algum tipo de relatório, portanto, para o Exemplo 3:

Exemplo 3:
REPORT Z_EXERC_3 MESSAGE-ID ZSADUP.

PARAMETER: p_pais like t005s-land1.

tables: t005s.
select * from t005s where land1 = p_pais.

write : / t005s-bland.

endselect.

Verifique a execução deste programa:

Resultado:

Todos os direitos autorais reservados à ICTraining – Proibida qualquer reprodução total ou parcial 36
CAPÍTULO 3 TABELAS INTERNAS E ESTRUTURADAS

Variável de Sistema sy – subrc


Uma das principais funções desta variável do sistema é verificar os comandos selects do
programa. Esta variável armazena um valor, pelo qual sabemos se o comando conseguiu
trazer informações do banco de dados ou não.
Quando a variável sy_subrc retorna o valor ZERO, o comando anterior conseguiu ser
executado com sucesso, ou seja, o comando select conseguiu selecionar os registros
conforme esperado. Qualquer valor desta variável diferente de zero, mostra que o comando
select fracassou.
Para testar este comando, altere o programa anterior incluindo após do endselect a seguinte
instrução:

if sy-subrc ne 0.
message e012 with text-003.
endif.

Lembrando que no(not equal) ou <> podem ser usados, pressione F1 para abrir o help-
Abap.

Introdução a Instrução Seqüencial – Comando LOOP

Este comando é principalmente usado para tratamento de dados em tabelas internas, por
exemplo, após um comando de Select/ into table, é necessário realizar um loop nesta tabela
interna para ver o seu conteúdo em um relatório.
O modelo deste comando segue abaixo:
Loop at <Tabela interna>
<Rotinas e tratamento>
Endloop.

Quando se tratar de mandar a linha da tabela para uma estrutura:


Loop at <Tabela interna> into <estrutura>
<Rotinas e tratamento>
Endloop.

Todos os direitos autorais reservados à ICTraining – Proibida qualquer reprodução total ou parcial 37
CAPÍTULO 3 TABELAS INTERNAS E ESTRUTURADAS

Podemos ter o comando loop também com condições:


Loop at <Tabela interna> Where <condições>
<Rotinas e tratamento>
Endloop.
Detalhes sobre as Tabelas Internas

Quando declaramos as tabelas internas conforme o capítulo 3.1, por default, elas possuem
uma linha especial, esta linha é chamada de Header Line. O Header Line funciona como
uma estrutura da própria tabela, toda alteração, movimentação ou leitura de dados nas
tabelas internas possuem uma rotina, onde a tabela transfere o registro o Header Line para
poder processá-lo.
Portando, após realizar uma movimentação de dados para uma tabela interna não esqueça
de utilizar o comando modify.

Exemplos e Exercícios

1) Para este exercício, vamos executar o exemplo 3 afim de obtermos a seguinte saída:

Não vamos esquecer de fazer as validações com a variável sy-subrc.

2) Para o exercício número dois realizaremos a seguinte tela de entrada:

Com a seguinte tela de saída: (Se a entrada do usuário for AA)

Todos os direitos autorais reservados à ICTraining – Proibida qualquer reprodução total ou parcial 38
CAPÍTULO 3 TABELAS INTERNAS E ESTRUTURADAS

3) Tente agora realizar os exercícios 1 e 2 utilizando o comando loop.


Resolução do primeiro exercício.
REPORT Z_EXERC_3 MESSAGE-ID ZSADUP.

PARAMETER: p_pais like t005s-land1.


tables: t005s.
data v_cor type i.
skip 4.

uline (14).

write: /01 '|',


02 'Pais',
07 '|',
08 'Codigo',
14 '|'.

select * from t005s where land1 = p_pais.

If v_cor = 1.
FORMAT color 1.
v_cor = 0.
else.
FORMAT color 2.
v_cor = 1.
endif.

write : /01 '|',


02 t005s-land1,
07 '|',
08 t005s-bland,
14 '|'.

endselect.

Todos os direitos autorais reservados à ICTraining – Proibida qualquer reprodução total ou parcial 39
CAPÍTULO 3 TABELAS INTERNAS E ESTRUTURADAS

write: /''.
uline 1(14).

if sy-subrc ne 0.
message i000.
stop.
Endif.

Resolução do segundo exercício.


REPORT Z_EXERC_3 MESSAGE-ID ZSADUP.

PARAMETER: p_carrid like spfli-carrid.

tables: spfli.

data: begin of i_spfli occurs 0,


carrid like spfli-carrid,
connid like spfli-connid.
data: end of i_spfli.

select * from spfli where carrid = p_carrid.

i_spfli-carrid = spfli-carrid.
i_spfli-connid = spfli-connid.
append i_spfli.

endselect.

if sy-subrc ne 0.
message e000.
endif.

Todos os direitos autorais reservados à ICTraining – Proibida qualquer reprodução total ou parcial 40
CAPÍTULO 3 TABELAS INTERNAS E ESTRUTURADAS

loop at i_spfli.
write:/ i_spfli-carrid, i_spfli-connid.
endloop.

Todos os direitos autorais reservados à ICTraining – Proibida qualquer reprodução total ou parcial 41
CAPÍTULO 3 TABELAS INTERNAS E ESTRUTURADAS

ANOTAÇÕES

Todos os direitos autorais reservados à ICTraining – Proibida qualquer reprodução total ou parcial 42
CAPÍTULO 3 TABELAS INTERNAS E ESTRUTURADAS

ANOTAÇÕES

Todos os direitos autorais reservados à ICTraining – Proibida qualquer reprodução total ou parcial 43
CAPÍTULO 4 DEPURAÇÃO

4 DEPURAÇÃO

Comando Select-Options
O comando select-options se assemelha ao comando parameters apresentado
anteriormente, porém se trata de um parâmetro de entrada de valor mais completo,
pois o mesmo abilita a possibilidade de armazenar em uma variável um intervalo de
valores, conforme visto abaixo:

Ao clicar na seta ao lado de cada intervalo a seguinte tela é mostrada contendo 4 pastas:

Pasta Single vals.


- Verde: Aqui você pode escolher valores individuais para incluir na sua seleção.
- Vermelho: Aqui você pode escolher valores individuais para excluir da sua seleção.

Todos os direitos autorais reservados à ICTraining – Proibida qualquer reprodução total ou parcial 44
CAPÍTULO 4 DEPURAÇÃO

Pasta Ranges:
- Verde: Aqui você pode escolher intervalos de valores para incluir na sua seleção.
- Vermelho: Aqui você pode escolher intervalos de valores para excluir da sua seleção.

Atentar quando o botão da seta estiver sinalizado com o quadradinho verde, indicando que
existe pelo menos uma seleção realizada nas quatro pastas...

Veremos agora a sintaxe deste comando juntamente com algumas extensões mais
importantes...

select-options : <s_variável> for <tipo/ campo da tabela>.

Pode-se acrescentar alguns parâmetros a mais neste comando, verifique o help F1 para
maior detalhes, os mais conhecidos são:
No intervals: exclui o range de dados.
No-extension: exclui a seta para detalhamento da seleção.

Variante de Programa

Imagine você, que exista um programa com muitos parâmetros de entrada, (parameters e
select-options), e você executa este relatório mais que uma vez por dia. Nestas condições
existe uma ferramenta que evita a digitação de todos os parâmetros de entrada toda a vez
que executamos o programa, esta ferramenta se chama variante.
Para gravar uma variante, você (após entrar com os valores) pode clicar no botão salvar, ou
seguir o caminho: Goto > Variants > Save as Variant.

Todos os direitos autorais reservados à ICTraining – Proibida qualquer reprodução total ou parcial 45
CAPÍTULO 4 DEPURAÇÃO

A seguinte tela aparecerá, onde você só precisará preencher os seguintes campos: Variant
name e Description. Precionando novamente o botão salvar para salvar a variante.

Após este procedimento, aparecerá no programa mais um botão, conforme segue:

Pressionando este botão você terá a relação de todas as variantes que o programa possui.

Todos os direitos autorais reservados à ICTraining – Proibida qualquer reprodução total ou parcial 46
CAPÍTULO 4 DEPURAÇÃO

Comando Select-Screen
O Comando select-screen, será futuramente utilizado para consistências dos valores
lançados pelo usuário na tela, neste primeiro momento utilizaremos este comando para
melhor visualização e separação dos campos de interação do usuário.

Sintaxe do comando select-screen:

Selection-screen begin of block <nome do bloco> with frame


<text-000>.
<Parameters e Select-options>.
Selection-screen end of block <nome do bloco>.

Este comando também permite uma estrutura em arvore, ou seja, você tem a possibilidade
de abrir um bloco dentro de outro bloco, como comandos IF´s encadeados, conforme segue:

Todos os direitos autorais reservados à ICTraining – Proibida qualquer reprodução total ou parcial 47
CAPÍTULO 4 DEPURAÇÃO

O que é Debugger?
O debugging é uma ferramenta que funciona em tempo de execução, fazendo com que o
programa seja executado passo a passo pelo programador.

Apresentação da tela de Debuger.

Existem algumas formas de ativar o comando de debugger em um programa, a mais comum


é o comando /h inserido como se fosse uma transação no campo de comandos.
Outra forma bastante conhecida de acionamento do comando debugger é a inserção em
qualquer linha do programa de um ponto de parada, localizado tanto na transação SE80 ou
SE38, quando o programa é executado ele para automaticamente no ponto de para
estipulado acionando a tela de debugger.

Todos os direitos autorais reservados à ICTraining – Proibida qualquer reprodução total ou parcial 48
CAPÍTULO 4 DEPURAÇÃO

Comandos Principais

Iremos agora explicar alguns comandos principais da tela de Debugger.


A primeira seqüência de botões é esta logo abaixo:

Da esquerda para a direita temos:


Single Step (F5) – Este botão, ou a tela F5 executam o processamento do programa passo
a passo, passando por todos os processamentos e rotinas.
Execute (F6) – Este botão executa o programa passo a passo porém não entra em certas
rotinas, por exemplo, se em uma determinada rotina o programador não deseja debuggar,
ele pode pressionar a tecla F6 para passar para o próximo comando depois da execução
total da rotina pulada.
Return (F7) – Porém, se por um equívoco o programador entrou em certa rotina que não
gostoria de debuggar, pressionando a tecla F7 o programa realiza a execução completa da
rotina, realizando a parada na próxima instrução após execução desta rotina.
Continue(to cusor) (F8) – Este botão executa o programa até o final, ou até algum ponto
de parada estipulado mais adiante.

A informação que temos logo abaixo da primeira seqüência de botões, é uma barra com
mais alguns botões que será explicado adiante, porém, abaixo desta barra existe um visor
que mostra o programa principal no campo Main Program, e uma rotina ou um Include do
programa apareceria no campo Source code of, caso o programa possua alguma dessas
rotinas.
Ao lado temos um controle de paginação e o número da linha onde o cursor esta
posicionado.

A tela abaixo mostra o programa propriamente dito e em qual será a próxima instrução que
será executada, lembrando que, a instrução apontada pela seta não foi executada ainda.

Todos os direitos autorais reservados à ICTraining – Proibida qualquer reprodução total ou parcial 49
CAPÍTULO 4 DEPURAÇÃO

Como default, quanto se inicializa uma operação de Debugger o campo Fields já consta
flegado, mostrando para o usuário, na parte inferior da tela um conjunto de 4 campos onde
conseguimos visualizar todas as variáveis do programa em tempo de execução, juntamente
com seus valores.

Porém não conseguimos visualizar o conteúdo das tabelas internas, para isso usamos o
botão Table conforme abaixo.

Conseguimos também visualizar todos os pontos de paradas acrescetados no programa no


botão Breakpoints.

Todos os direitos autorais reservados à ICTraining – Proibida qualquer reprodução total ou parcial 50
CAPÍTULO 4 DEPURAÇÃO

Watchpoints são pontos de paradas específicos usados para, por exemplo, parar uma
execução de um looping em uma tabela interna em algum determinado registro. Suponha
que, dentro de um loop em uma tabela interna, com aproximadamente 1000 registros,
ocorrem diversas consistências de valores, e justamente em uma linha desta tabela esta
ocorrendo um erro. Se esta linha for a linha 888 um watchpoint pode ser inserido para fazer
o programa parar justamente um registro anterior à execução da linha que deu o erro, para
podermos acompanhá-lo passo a passo.

Exemplos e Exercícios
1) O primeiro exercício deste capitulo é realizar o comando Debugger em todos os
programas realizados até agora.

Todos os direitos autorais reservados à ICTraining – Proibida qualquer reprodução total ou parcial 51
CAPÍTULO 4 DEPURAÇÃO

ANOTAÇÕES

ANOTAÇÕES

Todos os direitos autorais reservados à ICTraining – Proibida qualquer reprodução total ou parcial 52
CAPÍTULO 4 DEPURAÇÃO

Todos os direitos autorais reservados à ICTraining – Proibida qualquer reprodução total ou parcial 53
CAPÍTULO 5 FUNÇÕES

5 FUNÇÕES

O que são Funções

Funções são rotinas prontas de programação, elas em sua maioria permitem uma entrada,
podendo ser uma variável ou uma tabela interna e retornam também uma variável ou tabela
interna para o programa.

Transação SE37

A transação SE37 é a transação responsável pela criação e testes das funções do sistema.

Neste módulo não trabalharemos a construção de funções, iremos focar no teste de funções
e como utilizá-las no programa.
Para este módulo os flap´s mais importantes são:
Import = Nesta pasta existem todos os parâmetros que devemos informar na função para
sua execução.
Export = Nesta pasta existem as variáveis ou tabelas de retorna da função.
Source code = Nesta pasta se encontra o código fonte da função.

Este botão é utilizado para realizar o teste em uma função, no caso da função
WEEKDAY_GET, ela não necessita de um parâmetro de entrada, pois a mesma retorna o
dia da semana atual. O retorno desta função é numérico, sendo que os resultados possíveis
são 0-1-2-3-4-5-6, respectivamente Domingo, segunda..., sábado.

Todos os direitos autorais reservados à ICTraining – Proibida qualquer reprodução total ou parcial 54
CAPÍTULO 5 FUNÇÕES

Funções GUI_DOWNLOAD / GUI_UPLOAD

A função Gui_dowload gera um arquivo com o conteúdo de uma tabela interna segue abaixo
os parâmetros de entrada e saída.

CALL FUNCTION 'GUI_DOWNLOAD'


EXPORTING
* BIN_FILESIZE =
filename =
* FILETYPE = 'ASC'
* APPEND = ' '
* WRITE_FIELD_SEPARATOR = ' '
* HEADER = '00'
* TRUNC_TRAILING_BLANKS = ' '
* WRITE_LF = 'X'
* COL_SELECT = ' '
* COL_SELECT_MASK = ' '
* IMPORTING
* FILELENGTH =
tables
data_tab =
* EXCEPTIONS
* FILE_WRITE_ERROR = 1
* NO_BATCH = 2
* GUI_REFUSE_FILETRANSFER = 3
* INVALID_TYPE = 4
* NO_AUTHORITY = 5
* UNKNOWN_ERROR = 6
* HEADER_NOT_ALLOWED = 7
* SEPARATOR_NOT_ALLOWED = 8
* FILESIZE_NOT_ALLOWED = 9
* HEADER_TOO_LONG = 10
* DP_ERROR_CREATE = 11
* DP_ERROR_SEND = 12
* DP_ERROR_WRITE = 13
* UNKNOWN_DP_ERROR = 14
* ACCESS_DENIED = 15
* DP_OUT_OF_MEMORY = 16
* DISK_FULL = 17
* DP_TIMEOUT = 18
* FILE_NOT_FOUND = 19
* DATAPROVIDER_EXCEPTION = 20
* CONTROL_FLUSH_ERROR = 21
* OTHERS = 22
.
IF sy-subrc <> 0.
* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
* WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.

Todos os direitos autorais reservados à ICTraining – Proibida qualquer reprodução total ou parcial 55
CAPÍTULO 5 FUNÇÕES

Primeiramente para chamar uma função, é necessário chamar o comando CALL FUNCTION
<Nome da função>, para tornar o processo de digitação reduzido as ferramentas do sistema
ABAP Workbench possuem algumas facilidades como por exemplo o botão Pattern.

Escolha a função desejada que o programa já monta a estrutura da função.

A função GUI_UPLOAD realiza o inverso da função GUI_DOWNLOAD, localiza no micro um


arquivo e transfere o mesmo para dentro de uma tabela interna no programa.

Você pode verificar que muitas linhas da função já estão comentadas, estas linha não são
comandos obrigatórios podem cada um possuí uma funcionalidade específica conforme a
utilização da função no programa.

A função se divide em três partes principais, EXCEPTIONS, IMPORTING e EXPORTING.


Lembre-se sempre do seguinte conceito: Quando vc está no programa ABAP vc deve
EXPORTAR os parâmetros para a função e a função IMPORTA o resultado para o
programa.

Todos os direitos autorais reservados à ICTraining – Proibida qualquer reprodução total ou parcial 56
CAPÍTULO 5 FUNÇÕES

Exemplos e Exercícios
Verifique e teste pela transação SE37 como funciona as seguintes funções:
1) POPUP_TO_CONFIRM_STEP

Exemplo 2 – Verifique a execução deste programa.

REPORT Z_EXERC_1 MESSAGE-ID ZSADUP.

PARAMETER: p_carrid like spfli-carrid.

tables: spfli.

data: begin of i_spfli occurs 0,


carrid like spfli-carrid,
connid like spfli-connid.
data: end of i_spfli.

data: arq like rlgrap-filename value 'c:\temp\curso.txt'.

select * from spfli where carrid = p_carrid.

i_spfli-carrid = spfli-carrid.
i_spfli-connid = spfli-connid.
append i_spfli.

endselect.

if sy-subrc ne 0.
message e000.
endif.

Write text-000.

loop at i_spfli.
write:/ i_spfli-carrid, i_spfli-connid.
endloop.

data v_teste type string.


v_teste = arq.

CALL FUNCTION 'GUI_DOWNLOAD'


EXPORTING
* BIN_FILESIZE =
FILENAME = v_teste
* FILETYPE = 'ASC'
* APPEND = ' '
* WRITE_FIELD_SEPARATOR = ' '
* HEADER = '00'
* TRUNC_TRAILING_BLANKS = ' '

Todos os direitos autorais reservados à ICTraining – Proibida qualquer reprodução total ou parcial 57
CAPÍTULO 5 FUNÇÕES

* WRITE_LF = 'X'
* COL_SELECT = ' '
* COL_SELECT_MASK = ' '
* IMPORTING
* FILELENGTH =
TABLES
DATA_TAB = i_spfli
EXCEPTIONS
FILE_WRITE_ERROR = 1
NO_BATCH = 2
GUI_REFUSE_FILETRANSFER = 3
INVALID_TYPE = 4
NO_AUTHORITY = 5
UNKNOWN_ERROR = 6
HEADER_NOT_ALLOWED = 7
SEPARATOR_NOT_ALLOWED = 8
FILESIZE_NOT_ALLOWED = 9
HEADER_TOO_LONG = 10
DP_ERROR_CREATE = 11
DP_ERROR_SEND = 12
DP_ERROR_WRITE = 13
UNKNOWN_DP_ERROR = 14
ACCESS_DENIED = 15
DP_OUT_OF_MEMORY = 16
DISK_FULL = 17
DP_TIMEOUT = 18
FILE_NOT_FOUND = 19
DATAPROVIDER_EXCEPTION = 20
CONTROL_FLUSH_ERROR = 21
OTHERS = 22
.
IF SY-SUBRC <> 0.
MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.

Estudo de Caso

Você é funcionário (programador ABAP) de uma conceituada Multinacional e Ontem foi


quinta-feira, dia do seu aniversário, e, obviamente você e seus colegas de serviço foram
comemorar este grande dia, porém hoje o relógio marca 10:50 e você esta chegando no
serviço.
Se chefe, que a este momento deve estar com o censo de humor abalado, lhe entrega uma
especificação de um programa que deve ser terminado e testado Hoje.
Mostre a ele que seus conhecimentos superam espectativas.

Segue especificação:

Criar o programa Z_CLIENTE_XX_PREFERENCIAL


Criar a Transação ZCLXX.
Onde XX será o número do aluno.

Todos os direitos autorais reservados à ICTraining – Proibida qualquer reprodução total ou parcial 58
CAPÍTULO 5 FUNÇÕES

Este programa deve apresentar um relatório dos clientes que mais gastaram dinheiro em
vôos em uma determinada compania aérea.

A tabela de cliente é a SBOOK e a tabela de cadastro dos cliente é a SCUSTOM.


A relação das duas tabelas é realizado pelos campos ID (da tabela scustom) e CUSTOMID
(da tabela sbook)

Todos os direitos autorais reservados à ICTraining – Proibida qualquer reprodução total ou parcial 59
CAPÍTULO 5 FUNÇÕES

Os campos ‘a serem utilizados na tabela SBOOK são:


CARRID – Compania aérea
CONNID - número do vôo.
CUSTOMID – Número da identificação do passageiro.
LOCCURAM – Dinheiro gasto por passageiro.
LOCCURKEY – moeda corrente do País.

Os campos utilizados na tabela SCUSTOM são:

ID - Número da identificação do passageiro.


NAME – Nome do passageiro.

O Layout do relatório e do arquivo de saída devem conter os mesmos campos, conforme


segue:
Compania aérea;
Número do vôo;
Nome do passageiro;
Valor pago pelo passageiro;
Moeda corrente do País.

Seqüência de execução do programa: O programa deverá ser chamado pela transação


ZCLXX e terá como parâmetro de entrada o campo Compania Aérea:.
Logo após a escolha da compania, o programa deverá perguntar se o usuário gostaria de
gravar os arquivos em disco. O programa mostrará o relatório para o usuário mesmo se ele
não quiser gravar o arquivo em disco.
O programa também deverá consistir se existe ou não compania aérea. Se não existir,
retornar mensagem de erro.

Neste estudo de caso, consta alguns comandos que não estão especificados na apostila,
são eles....
Comando READ TABLE:
Este comando realiza a leitura na tabela interna conforme a condição estipulada na clausula
with key, portanto, este comando ao encontrar uma linha que atenda as condições
especificadas ele posiciona a linha no header-line da tabela interna.

Sintaxe:
READ TABLE <i_scustom> WITH KEY <id> = <i_sbook-customid>

Comando SORT:
Este comando realiza a ordenação da tabela interna que pode ser ascendente quanto
descendente, deve-se informar quais os campos devem ser ordenados.

Sintaxe:
SORT <i_sbook> BY <loccuram> DESCENDING/ASCENDING.

Todos os direitos autorais reservados à ICTraining – Proibida qualquer reprodução total ou parcial 60
CAPÍTULO 5 FUNÇÕES

Segue uma possível resolução para o estudo de caso proposto.

*&-----------------------------------------------------------*
*& Report Z_AULA_5
*
*&
*
*&------------------- ---------------------------------------*
*&
*
*&
*
*&-----------------------------------------------------------*

REPORT z_aula_5 MESSAGE-ID zsadup.

DATA: BEGIN OF i_sbook OCCURS 0,


carrid TYPE sbook-carrid,
connid TYPE sbook-connid,
customid TYPE sbook-customid,
loccuram TYPE sbook-loccuram,
loccurkey TYPE sbook-loccurkey,
END OF i_sbook.

DATA: BEGIN OF i_scustom OCCURS 0,


id TYPE scustom-id,
name TYPE scustom-name,
END OF i_scustom.

DATA: BEGIN OF i_arq OCCURS 0,


carrid TYPE sbook-carrid,
connid TYPE sbook-connid,
name TYPE scustom-name,
loccuram TYPE sbook-loccuram,
loccurkey TYPE sbook-loccurkey,
END OF i_arq.

DATA: resp TYPE c,


arq LIKE rlgrap-filename VALUE 'c:\temp\curso.txt',
v_teste TYPE string.

PARAMETER p_cia LIKE sbook-carrid.

SELECT * FROM sbook


INTO CORRESPONDING FIELDS OF TABLE i_sbook
WHERE carrid = p_cia.
IF sy-subrc <> 0.
MESSAGE i012 WITH 'Não consta registro com este País'.
STOP.
ENDIF.

Todos os direitos autorais reservados à ICTraining – Proibida qualquer reprodução total ou parcial 61
CAPÍTULO 5 FUNÇÕES

SELECT * FROM scustom


INTO CORRESPONDING FIELDS OF TABLE i_scustom.
IF sy-subrc <> 0.
MESSAGE i012 WITH 'Não consta cadastro desde cliente'.
ENDIF.

SORT i_sbook BY loccuram DESCENDING.

CALL FUNCTION 'POPUP_TO_CONFIRM_STEP'


EXPORTING
defaultoption = 'Y'
textline1 = text-004
titel = text-005
IMPORTING
answer = resp.

IF resp <> 'J'.


LOOP AT i_sbook.
READ TABLE i_scustom WITH KEY id = i_sbook-customid.
WRITE: / i_sbook-carrid,
i_sbook-connid,
i_scustom-name,
i_sbook-loccuram,
i_sbook-loccurkey.
ENDLOOP.
ELSE.
LOOP AT i_sbook.
READ TABLE i_scustom WITH KEY id = i_sbook-customid.
WRITE: / i_sbook-carrid,
i_sbook-connid,
i_scustom-name,
i_sbook-loccuram,
i_sbook-loccurkey.
i_arq-carrid = i_sbook-carrid.
i_arq-connid = i_sbook-connid.
i_arq-name = i_scustom-name.
i_arq-loccuram = i_sbook-loccuram.
i_arq-loccurkey = i_sbook-loccurkey.
APPEND i_arq.
ENDLOOP.

v_teste = arq.

CALL FUNCTION 'GUI_DOWNLOAD'


EXPORTING
filename = v_teste
TABLES
data_tab = i_arq
EXCEPTIONS

Todos os direitos autorais reservados à ICTraining – Proibida qualquer reprodução total ou parcial 62
CAPÍTULO 5 FUNÇÕES

file_write_error = 1
no_batch = 2
gui_refuse_filetransfer = 3
invalid_type = 4
no_authority = 5
unknown_error = 6
header_not_allowed = 7
separator_not_allowed = 8
filesize_not_allowed = 9
header_too_long = 10
dp_error_create = 11
dp_error_send = 12
dp_error_write = 13
unknown_dp_error = 14
access_denied = 15
dp_out_of_memory = 16
disk_full = 17
dp_timeout = 18
file_not_found = 19
dataprovider_exception = 20
control_flush_error = 21
OTHERS = 22.
IF sy-subrc <> 0.
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ENDIF.

ENDIF.

Todos os direitos autorais reservados à ICTraining – Proibida qualquer reprodução total ou parcial 63
CAPÍTULO 5 FUNÇÕES

ANOTAÇÕES

ANOTAÇÕES

Todos os direitos autorais reservados à ICTraining – Proibida qualquer reprodução total ou parcial 64
CAPÍTULO 5 FUNÇÕES

Todos os direitos autorais reservados à ICTraining – Proibida qualquer reprodução total ou parcial 65

Você também pode gostar