Você está na página 1de 267

Todos os Direitos Reservados © Valores Corporativos Softtek S.A. de C.V. 2015. Interno.

Academia
de ABAP
01/2016
Treinamento de Introdução
Conhecendo o SAP

Todos os Direitos Reservados © Valores Corporativos Softtek S.A. de C.V. 2015. Interno.
História do
SAP R/3

Todos os Direitos Reservados © Valores Corporativos Softtek S.A. de C.V. 2011. Interno. 3
História da SAP

Sistemas, Aplicações e Produtos em


Processamento de Dados
“Systeme, Anwendungen, Produkte in der Datenverarbeitung”

• Fundada na Alemanha em 1972;


• Matriz em Walldorf (Alemanha);
• Solução única, totalmente Integrada;
• Automação de todos os processos inerentes a uma Empresa;
• Líder absoluta em software de gestão de negócios no mundo;
• Centro de prestação de serviços e de suporte localizado nas principais
cidades do mundo;
Características
do SAP R/3

Todos os Direitos Reservados © Valores Corporativos Softtek S.A. de C.V. 2011. Interno. 5
Características do SAP R/3

• ERP – Enterprise Resource Planning;


• Flexível: desenhado para todos os tipos de Negócios, permite
Customização, multi-plataforma, multi-moeda e multi-Idioma e
interfaces p/ Softwares externos;
• Vários usuários podem alterar dados simultaneamente;
• Evolução e melhorias constantes;
• Dividido em módulos de aplicação integrados;
Características do SAP R/3
• O SAP R/3 trabalha com uma filosofia de cliente/servidor de 3 camadas;
 A camada de interface com o usuário (cliente, “front-end” ou servidor de apresentação).
 A camada de lógica de negócio (a camada de aplicação onde os programas SAP são
executados de fato).
 A camada de banco de dados (o sistema de banco de dados “back-end” que armazena os
dados do SAP).
Características do SAP R/3

Banco de Dados
R/3
Características do SAP R/3

Servidor Servidor Servidor


DV4 QA4 PR4

Ambiente de Ambiente de Ambiente de


desenvolvimento consolidação produção

Mandante
100

Servidor
DV4

Mandante
200
Fases do Projeto

Testes individuais
Levantamento Produção
/integrados

Modelagem dos
Validação Melhorias
processos

Customização Desenvolvimento
Módulos SAP

Todos os Direitos Reservados © Valores Corporativos Softtek S.A. de C.V. 2011. Interno. 11
Módulos do SAP R/3

SD FI
Sales & Financial
Distribution Accounting
MM CO
Materials
Controlling
Mgmt.
PP AM
Production Fixed Assets
Planning
R/3 Mgmt.

QM
Quality
Client / Server PS
Project
Manage-ment
PM ABAP/4 WF
System
Plant Main-tenance Workflow
HR IS
Human Industry
Resources Solutions
Módulos do SAP R/3
Módulos do SAP R/3
Módulos do SAP R/3
Módulos do SAP R/3
Módulos do SAP R/3
Módulos do SAP R/3
Módulos do SAP R/3
Módulos do SAP R/3
Módulos do SAP R/3
Módulos do SAP R/3
Módulos do SAP R/3
Módulos do SAP R/3
Módulos do SAP R/3
Navegando no
SAP R/3

Todos os Direitos Reservados © Valores Corporativos Softtek S.A. de C.V. 2011. Interno. 26
Navegando no SAP R/3
Navegando no SAP R/3
Navegando no SAP R/3
Navegando no SAP R/3

• As transações são utilizadas para iniciar um processo dentro do SAP.


São atalhos para execução das tarefas;
As transações podem ser
acessadas via menu, abrindo-se as
pastas até se chegar à transação As transações podem ser acessadas
desejada; diretamente, digitando-se seu código;
Navegando no SAP R/3

• Na tela Inicial é possível digitar o código da


transação diretamente para acessa - lá;

• Digite /o antes do código da transação caso


deseje iniciar em uma nova seção;

• Digite /n antes do código da transação caso


deseje terminar a transação atual antes de
começar a transação que será digitada;
Navegando no SAP R/3

• Matchcode: Lista as possíveis informações


do campo correspondente;
• Para localizar as informações incompletas
utiliza-se o “ * ”;
• Exemplo: Para localizar o código do
material “ 145 ”, pode ser utilizado uma
busca através do mathcode da seguinte
forma “ 14* ” (Será listados todos os
códigos de materiais com o prefixo “ 14 “);
Navegando no SAP R/3
• Os campos com preenchimentos obrigatórios são identificados pelo símbolo ;
Transações Úteis

SE09 – Organização de transporte (Utilizado para controlar as request’s).


SE11 – Dicionário ABAP (Utilizado para criar, alterar e apagar domínios, elemento de dados, campos,
tabelas, estrutura).
SE16 – Data browser
SE37 – Módulos de função ABAP. (Utilizado para criar, alterar e apagar funções (Módulos de
funções).
SE38 – Editor de programas ABAP. (Utilizada para criar, alterar e apagar programas ABAP).
SE39 – Editor de tela dividida
SE80 – Repository Browser. (Utilizado para criar, alterar e apagar, Programas (Module Pool, grupos
de função, etc.).
SE91 – Atualização de mensagem
SE93 – Códigos de transação (Utilizado para criar, alterar e apagar transações).
SM12 – Exibir e eliminar bloqueios (Utilizado para desbloquear programas, transações, etc.).
SM35 – Moritorar pasta de Batch-Input.
ST05 – Possui várias funções, a mais utilizada e para realizar o trace SQL.(Mostra todos acessos
realizados no BD).
ST22 – ABAP análise dump.
SHDB – Registrador transação - batch input. (Utilizado para criar o “mapeamento” para
posteriormente criar os programas para gerar a pasta de batch input.).
Treinamento de Introdução
Conhecendo ABAP/4

Todos os Direitos Reservados © Valores Corporativos Softtek S.A. de C.V. 2015. Interno.
História do
ABAP/4

Todos os Direitos Reservados © Valores Corporativos Softtek S.A. de C.V. 2011. Interno. 36
Definição

A dvanced
B usiness
A pplication
P rogramming
/
4
• Linguagem de programação do SAP de 4a. Geração que permite desenvolver
interfaces/programas no sistema SAP R/3
História

• O ABAP é uma linguagem de programação dentro da categoria das Linguagem de


programação de quarta geração desenvolvidas nos anos 80 que são linguagens
de programação de alto-nível com objetivos específicos, como o desenvolvimento
de softwares comerciais de negócios. Foi originalmente concebida como uma
linguagem para construção de relatórios para o SAP R/2 (o significado original de
ABAP é Allgemeiner Berichts Aufbereitungs Prozessor, que em alemão significa
processador genérico para preparação de relatórios). O objetivo original da
linguagem era ser uma ferramenta de programação suficientemente simples para
ser usada pelos utilizadores finais. No entanto, o ABAP é uma linguagem que
necessita de conhecimentos avançados de programação e é principalmente
utilizada pelos programadores da SAP que desenvolvem o software e por
consultores que adaptam o software às necessidades dos clientes.
• O ABAP é a principal linguagem utilizada no software cliente-servidor SAP R/3.
Em 1999, com a versão R/3 4.5, a SAP lançou uma versão de ABAP que
suporta programação orientada a objetos.
• A versão mais recente da plataforma de desenvolvimento da SAP, o NetWeaver,
suporta programação em ABAP e em Java.
Características
do ABAP/4

Todos os Direitos Reservados © Valores Corporativos Softtek S.A. de C.V. 2011. Interno. 39
Características do ABAP/4

• Em linguagens como Java ou C#, os arquivos de código fonte ficam na máquina


do próprio desenvolvedor. Uma IDE como o Eclipse ou Visual Studio é usada
para fazer as modificações nos arquivos e compilar o projeto para em seguida
publicar em um servidor. Já no caso do ABAP, o SAP é a própria IDE de
programação e também o ambiente de execução do código. Isto significa que os
arquivos são criados e armazenados diretamente dentro do banco de dados
SAP.
• O SAP já vem com um sistema de controle de versão embutido que apesar de
não ser tão completo como as ferramentas convencionais, possui as funções
básicas e mais importantes como o histórico de alterações e comparação de
versões.
• Além disso, existe também o Transport Management System que é usado para
fazer o deploy de objetos do ambiente de desenvolvimento para o ambiente de
teste e produção.
• Os códigos ABAP quando executados pela primeira vez são compilados para
uma linguagem intermediária conhecida como ABAP Load. Após este processo
a Virtual Machine (localizada no SAP Kernel) é responsável por interpretar o
Load e converter em linguagem de máquina. Desta forma o código ABAP roda
em diversos sistemas operacionais (Windos, Unix e etc...).
Características do ABAP/4

• A sintaxe do ABAP segue o mesmo conceito de outras linguagens de quarta


geração e é frequentemente comparada ao COBOL. Os comandos são mais
próximos da linguagem humana e muitas vezes são comandos específicos do
ambiente.
• Dessa forma podemos destacar os seguintes pontos:
• A linguagem ABAP pode ser programada de forma estruturada ou com
orientação a objetos.
• É utilizada para desenvolver dois tipos de programa; os que executam em modo
reporting e os que executam em modo de diálogo. Existem conjunções que
permitem comutar entre os dois.
• Está dirigida por eventos.
• Está integrada com o sistema SAP ERP.
• Está preparada para que seja multi-idioma.
• É uma linguagem tipada, ou seja, os objetos ou variáveis tem um tipo definido e
que precisa ser informado.
Arquitetura do Development Workbench

• O ABAP Workbench contém ferramentas que permitem a edição de objetos


específicos que representam um ciclo total de software;
• Exemplos:
• ABAP Editor: Para escrita e edição de códigos de programa;
• ABAP Dictionary: para edição de tabelas;
Repository R/3

• Classe de desenvolvimento: trata-se da forma a qual os programas, o


dicionário de dados, as transações etc.. serão gravados e identificados no
repository R/3;
• Quando o objeto não é atribuído a uma classe de desenvolvimento, este objeto é
gerado como Objeto Local ( $TMP );
Repository R/3

• ORDENS (CHANGE REQUEST): recurso através do qual um conjunto de objetos


podem ser transferidos de um ambiente para outro;
• É solicitada sempre que o objeto estiver atribuído a uma classe de desenvolvimento.

• ORDENS E TAREFAS (TASKS): cada ordem pode possuir uma ou mais TASKS.
Cada TASK possui os objetos agrupados de acordo com seu tipo e ordem na
qual deverão ser criados no cliente de destino;
Repository R/3
Treinamento ABAP/4

Todos os Direitos Reservados © Valores Corporativos Softtek S.A. de C.V. 2015. Interno.
Dicionário de
dados

Todos os Direitos Reservados © Valores Corporativos Softtek S.A. de C.V. 2011. Interno. 47
Principais Transações

• SE16 - Permite a visualização do conteúdo de


tabelas SAP;

• SE11 – Permite a criação e visualização da


arquitetura de uma tabela/estrutura do SAP;

• SM30 - Atualização de visão de tabelas;


Dicionário de Dados

• O dicionário de Dados do ABAP/4 é uma fonte central de informações provenientes


do sistema gerenciador de dados do SAP

Integração
Gerenciamento de Dados
Atribuição
Descrição e Significado
Ativação dos Dados

Banco de Dados
R/3
Elementos do Dicionário de Dados
• Tabelas: armazenam dados;
• Estruturas: Possuem os mesmos elementos das tabelas mas não armazenam
dados. Só estão preenchidas em run-time;
• Visões: JOIN de tabelas e restrição de campos;
• Campos: não são objetos independentes e podem ser atualizados apenas dentro
das tabelas, pois pressupõem a existência de um elemento de dados
• Elementos de dados: é o objeto semântico. Descreve exatamente a finalidade de
um domínio em uma opção comercial específica para os campos que dela
dependem;
• Domínios: É o objeto central usado para descrever os atributos de um objeto;
• Ajuda de pesquisa: É um objeto de pesquisa do dicionário ABAP com o qual
contribui na execução do matchcode (F4);
• Ajuda de Pesquisa: É utilizada para fornecer ao usuário, quando solicitado (tecla
F4), uma lista de valores possíveis para determinado campo na tela
(principalmente campos de entrada de dados). Esta funcionalidade também é
conhecida como search help ou match code.
• Include struture: Existe uma maneira de se criar grupos de campos que possam
ser utilizados em diversas tabelas transparentes ou estruturas, isto chamamos
de include ou append.
Elementos do Dicionário de Dados

Tabelas, domínios e elementos de dados constituem os objetos básicos de definição


de dados do ABAP Dictionary. Os domínios descrevem os atributos técnicos dos
campos de tabela (por exemplo, categoria ou comprimento de campo) e os
elementos de dados contêm a definição semântica (por exemplo, uma descrição
breve);

Banco de
Dados R/3 Tabela

Campo

Utiliza

Definição Semântica Elemento de Dados


Utiliza
Definição Técnica Domínio
Elementos do Dicionário de Dados

Tabela 1 Tabela 2 Tabela 3 Tabela 4 Tabela 5

Elemento de Dados 1 Elemento de Dados 2 Elemento de Dados 3

Domínio
Elementos do Dicionário de Dados

Table T1
Field 1 Field 2 Field 3 Field 4

Foreign Key Field


Primary Key

Table T2 (check table)


Field A Field B Field C Field D

Primary Key
Elementos do Dicionário de Dados

Caminho: Ferramentas > ABAP/4 Workbench > Dictionary (transação SE11);


Domínio

1. Nome do Domínio.
2. Descrição do Domínio.
3. Tipo de dados (ex: CHAR, NUMC, DATS...).
4. Número de posições de um campo sem contar as
pontuações.
5. Número de casas decimais.
6. Rotina de conversão de entrada e saída de dados.
7. Domínio aceita ou não valores negativos.
8. Domínio fará distinção entre maiúsculas e
minúsculas.
Domínio

1. Valores fixos podem ser individuais ou intervalos. Restringem os valores que podem ser
atribuídos a aquele domínio..
2. Descrição do valor fixo.
Elemento de dados

1. Nome do Elemento de Dados.


2. Descrição do Elemento de Dados.
3. Domínio que representa o Elemento de
Dados.
4. Caso não deseje indicar o tipo através do
Domínio, pode-se escolher o Tipo
Incorporado e indicar sua categoria de dados
e comprimento.
Elemento de dados

1. A denominação do campo é o texto que irá aparecer como descrição do campo em uma
tabela transparente (dando sentido semântico) e também pode ser utilizado como forma de
ser o label de campos nos programas que se utilizarem deste Elemento de Dados. Os
textos aqui inseridos podem ser traduzidos através do menu Ir Para > Tradução.
Estrutura

1. Nome da estrutura
2. Descrição da estrutura
3. Nome do campo
4. Elemento de dados que representa o campo
Estrutura

1. Insere chave estrangeira no campo selecionado


2. Insere ajuda de pesquisa para o campo selecionado
Tabela transparente

1. Nome da tabela
2. Descrição da tabela
3. Classe de entrega: Onde classificamos o tipo de dados que será armazenado nesta
tabela; se é de dados mestre e movimentação, se é de customizing onde é necessária
uma request para transportar cada registro salvo nesta tabela, entre outros.
4. Regra de atualização onde podemos permitir atualização e exibição desta tabela pela
transação SE16; podemos restringir a atualização e permitir apenas a exibição, ou
ainda não permitir a atualização ou exibição da mesma pela transação SE16.
Tabela transparente

1. Acesso as configurações
técnicas
2. Acesso a criar, editar, ou deletar,
índices da tabela
3. Insere estrutura de append na
tabela
4. Adiciona chave estrangeira ao
campo selecionado
5. Adiciona Ajuda de Pesquisa ao
campo selecionado
6. Nome do campo da tabela
7. Elemento de dados do campo
8. Indicador que o campo é chave
(PRIMARY KEY)
9. Indicador se o campo deve inserir
valores iniciais para quando não é
enviado valor para este campo
Tabela transparente

1. Insere chave estrangeira ao campo selecionado


2. Insere ajuda de pesquisa ao campo selecionado
Tabela transparente

1. Determina o nível lógico, em que


área física no banco de dados será
arquivada a tabela.
2. Determinação do espaço previsto
da tabela no banco de dados
3. Opções para armazenamento em
buffer da tabela
Visões

1. Nome da visão
2. Descrição da visão
3. Tabelas que serão
utilizadas na seleção da
visão
4. Condições de
relacionamento entre as
tabelas do item 3
Visões

1. Campos que estão


disponíveis na saída da
visão
Ajuda de Pesquisa

1. Nome da ajuda de pesquisa.


2. Descrição da ajuda de pesquisa.
3. Tabela ou Visão que são utilizados como fonte de pesquisa.
4. Permite o uso de módulos de função para manipulação do resultado da pesquisa.
5. Nome do campo, este nome é o mesmo da tabela ou visão inserida no item 3
6. Indicador se o parâmetro é um parâmetro de importação.
7. Indicador se o parâmetro é um parâmetro de exportação.
Estrutura Append

1. Instrução necessária para inserir include.


2. Nome da estrutura criada para ser incluída dentro da tabela
Estrutura Append

É recomendado que todo campo inserido no APPEND comesse com ZZ ou YY no


nome. Isso previne conflitos com campos previamente criados pela SAP

1. Resultado do INCLUDE
2. Resultado do APPEND
ABAP/4
Open SQL

Todos os Direitos Reservados © Valores Corporativos Softtek S.A. de C.V. 2011. Interno. 70
ABAP/4 Open SQL

• O ABAP Open SQL permite acessar as tabelas transparentes declaradas no


dicionário de dados independentemente da plataforma de banco de dados que o
sistema SAP R/3 está utilizando (Oracle, SQL Server e etc..). Os resultados das
operações e as mensagens de erro são independentes do sistema, ficando a
cargo da camada do OPEN SQL esta tratativa e então enviá-la de volta a camada
do sistema SAP.

Sistema SAP

OPEN SQL

Oracle, SQL Server, DB2 ...

• Instruções Open SQL só podem trabalhar com tabelas de banco de dados que
foram criadas no dicionário de dados. Para acesso a tabelas externas ao SAP é
necessário utilizar SQL Nativo.
SELECT
SELECT

-SELECT
Comando SQL utilizado para leitura das informações de uma tabela do banco de dados SAP.
Possui diversas variações.

-Select de todos os campos de uma tabela.

SELECT * FROM <tabelaSAP>.


instruções.
ENDSELECT.

Obs.: O comando SELECT em si, pede um ENDSELECT para fechá-lo. Em algumas variações isto não
se faz necessário.
Esta variação não é um modo eficiente para acesso ao banco. Não indicado, mesmo com
inclusão da clausula WHERE.

-Select para variáveis.

SELECT campo1 campo2 campo3 … INTO (var01, var02, var03, …)


FROM <tabelaSAP>
WHERE <condição>.

-Select inserindo em uma tabela interna.

SELECT <campos> INTO TABLE <t_tabela01>


FROM <tabelaSAP>
WHERE <condição>.
SELECT

-Select inserindo dados em determinados campos de uma tabela interna.

SELECT <campos> INTO CORRESPONDING FIELDS OF TABLE <t_tabela01>


FROM <tabelaSAP>
WHERE <condição>.

-Select inserindo dados em uma tabela, usando como base os dados de outra já preenchida.

SELECT <campos> INTO TABLE <t_tabela02>


FROM <tabelaSAP>
FOR ALL ENTRIES IN <t_tabela01>
WHERE <condição>.

Obs.1: Se ao buscar os registros com FOR ALL ENTRIES, e dois registros forem iguais, o
sistema só irá trazer um. Portanto CUIDADO com este tipode select. Sempre buscar um
campo que garanta a unicidade dos dados.

Obs.2: Sempre verificar se a tabela interna, de referência< tabela interna1>, contêm dados
e os mesmo estejam ordenados.
SELECT

-Select para buscar apenas um registro específico.

SELECT SINGLE <campos> INTO TABLE <t_tabela01>


FROM <tabelaSAP>
WHERE <condição>.

Obs.: Para o uso do SELECT SINGLE, deve-se utilizar a chave completa da tabela. Se não
possuir as chaves todas, utilizar a opção UP TO 1 ROWS.

SELECT <campos> INTO TABLE <t_tabela01>


FROM <tabelaSAP>
UP TO 1 ROW
WHERE <condição>.
ENDSELECT.

-Select com range de valores.

SELECT <campos> INTO TABLE <t_tabela01>


FROM <tabelaSAP>
WHERE <campo> BETWEEN <valor1> AND <valor2>.

-Select em um intervalo de valores

SELECT <campos> INTO TABLE <t_tabela01>


FROM <tabelaSAP>
WHERE <campo> IN (valor_mínimo,valor_máximo).
INSERT

INSERT

-INSERT
1.Insere registros na tabela do dicionário.

INSERT INTO <tabelaSAP> [ FROM ][ VALUES ] <estrutura>.

Exemplos:
TABLES: SPFLI. Grava os valores da estrutura WA
na tabela SPFLI.
DATA: WA LIKE SPFLI.

WA-CARRID = 'LH'.
WA-CITYFROM = 'WASHINGTON'.

INSERT INTO SPFLI VALUES WA.

WA-CARRID = 'UA'. Mesmo feito do comando


WA-CITYFROM = 'LONDON'. acima.

INSERT SPFLI FROM WA.
INSERT

INSERT

2.Insere registros na tabela do dicionário, a partir de uma tabela interna.

INSERT INTO <tabelaSAP> FROM TABLE <t_tabela01> [ ACCEPTING DUPLICATE KEYS ].

Exemplos:
TABLES: SPFLI.

DATA: ITAB LIKE SPFLI OCCURS 10 WITH HEADER LINE.

ITAB-CARRID = 'UA'.
ITAB-CONNID = '0011'.
APPEND ITAB.

ITAB-CARRID = 'LH'.
ITAB-CONNID = '1245'.
APPEND ITAB.

ITAB-CARRID = 'AA'.
ITAB-CONNID = '4574'.
APPEND ITAB.

INSERT SPFLI FROM TABLE ITAB.


UPDATE
UPDATE

-UPDATE
1.Modifica registros na tabela do dicionário. Um registro por vez.

UPDATE <tabelaSAP> [ FROM <estrutura> ].

Exemplos:
TABLES: SPFLI.

DATA: WA TYPE SPFLI.

MOVE 'AA' TO WA-CARRID.


MOVE '0064' TO WA-CONNID.
MOVE 'WASHINGTON' TO WA-CITYFROM.

UPDATE SPFLI FROM WA.

MOVE 'LH' TO SPFLI-CARRID.


MOVE '0017' TO SPFLI-CONNID.
MOVE 'BERLIN' TO SPFLI-CITFROM.

UPDATE SPFLI.
UPDATE
UPDATE

2.Modifica registros na tabela do dicionário. Vários registros por vez.

UPDATE <tabelaSAP> SET <S1> .. <Sn> [ WHERE condição ].

Exemplos:
TABLES: SFLIGHT.
UPDATE SFLIGHT SET PLANETYPE = 'A310'
FLPRICE = FLPRICE - '10000'
WHERE CARRID = 'LH'.

3. Modifica registros na tabela do dicionário, a partir de uma tabela interna.

UPDATE <tabelaSAP> FROM TABLE <t_tabela01>.

Exemplos:
TABLES: SPFLI.

DATA: ITAB LIKE SPFLI OCCURS 10 WITH HEADER LINE.

ITAB-CARRID = 'UA'. ITAB-CONNID = '0011'.


APPEND ITAB.
ITAB-CARRID = 'LH'. ITAB-CONNID = '1245'.
APPEND ITAB.
ITAB-CARRID = 'AA'. ITAB-CONNID = '4574'.
APPEND ITAB.

UPDATE SPFLI FROM TABLE ITAB.
MODIFY

MODIFY

-MODIFY
Este comando também altera registros na tabela do dicionário, mas contém uma diferença
importante. Com este comando, se o registro a ser alterado não for encontrado, ele é
inserido na tabela do dicionário.
Segue o mesmo esquema do comando UPDATE.

MODIFY <tabelaSAP> [ FROM <estrutura> ].

MODIFY <tabelaSAP> FROM TABLE <t_tabela01>.

Exemplos:
TABLES: SPFLI. TABLES: SPFLI.
DATA: WA LIKE SPFLI. DATA ITAB LIKE SPFLI OCCURS 10 WITH HEADER LINE.
MOVE 'AA' TO WA-CARRID. ITAB-CARRID = 'UA'. ITAB-CONNID = '0011'.
MOVE '0064' TO WA-CONNID. APPEND ITAB.
MOVE 'WASHINGTON' TO WA-CITYFROM. ITAB-CARRID = 'LH'. ITAB-CONNID = '1245'.
… APPEND ITAB.
MODIFY SPFLI FROM WA. ITAB-CARRID = 'AA'. ITAB-CONNID = '4574'.
APPEND ITAB.

MODIFY SPFLI FROM TABLE ITAB.
DELETE

DELETE

-DELETE
1.Deleta registros da tabela do dicionário.

DELETE <tabelaSAP> FROM <estrutura>.

Exemplos:
TABLES: SPFLI.

DATA: WA LIKE SPFLI.


‘Serão deletados os registros na estrutura
MOVE 'AA' TO WA-CARRID. WA, de acordo com os campos chave.
MOVE '0064' TO WA-CONNID.

DELETE SPFLI FROM WA.

2.Deleta registros da tabela do dicionário. Vários registros por vez.

DELETE FROM <tabelaSAP> WHERE <condição>.

Exemplos:
TABLES: SFLIGHT.

DELETE FROM SFLIGHT WHERE PLANETYPE = 'A310' AND


CARRID = 'LH'.
DELETE

DELETE

3. Modifica registros na tabela do dicionário, a partir de uma tabela interna.

DELETE <tabelaSAP> FROM TABLE <t_tabela01>.

Exemplos:
TABLES SPFLI.

DATA ITAB LIKE SPFLI OCCURS 10 WITH HEADER LINE.

ITAB-CARRID = 'UA'.
ITAB-CONNID = '0011'.
APPEND ITAB.

ITAB-CARRID = 'LH'.
ITAB-CONNID = '1245'.
APPEND ITAB. Os registros são deletados baseando-se
nos campos chave.
ITAB-CARRID = 'AA'.
ITAB-CONNID = '4574'.
APPEND ITAB.

DELETE SPFLI FROM TABLE ITAB.


COMMIT WORK / ROLLBACK WORK
COMMIT WORK

Efetiva as operações realizadas nas tabelas para o SAP.


Enquanto o COMMIT não é executado, o SAP trabalha em uma área separada. Só carrega as
modificações para o banco, quando o comando é executado.

ROLLBACK WORK

Desfaz as modificações efetuadas pelo programa, antes de ser executado o COMMIT.


Após a execução do COMMIT, o ROLLBACK não mais consegue desfazer as modificações.
Primeira gravação.
Exemplos:

COMMIT WORK. Deleta registros da tabela.

<instruções>

DELETE FROM bkpf WHERE … Insere registros na tabela.

<intruções>

INSERT zteste_001 from zteste_001.
Se ocorrer erro na inserção, desfaz tudo
IF sy-subrc <> 0. o que foi feito após o primeiro COMMIT.
ROLLBACK WORK.
continue.
ELSE. Efetiva operações realizadas até este
COMMIT WORK. COMMIT.
ENDIF.
SQL Nativo

SQL Nativo permite que você use as instruções SQL especificas do banco de dados em um
programa ABAP. Sintaxe:

EXEC SQL [EXECUTA <form>].

<Instrução SQL Native>

ENDEXEC.
ABAP/4
Codificação

Todos os Direitos Reservados © Valores Corporativos Softtek S.A. de C.V. 2011. Interno. 84
Principais Transações

SE38 – Editor de programas ABAP. (Utilizada para criar, alterar e apagar


programas ABAP).

 SE80 - Repository Browser. Utilizado para criar, alterar e apagar,


Programas (On-Line ou Module Pool), grupos de função, etc.;

 SE93 – Códigos de transação. Utilizado para criar, alterar e apagar


transações;

 SE91 – Classe de mensagem. Utilizado para criar, alterar e apagar classe


de mensagem;
Variáveis de Sistema

As variáveis de sistemas são preenchidas em tempo de execução, segue a relação


de algumas destas variáveis:

SY-SUBRC - Valor de retorno após instruções ABAP;


SY-TABIX - Tabelas internas, índice de linha atual;
SY-PAGNO - Criação de lista, página atual;
SY-LANGU - Sistema R/3, idioma atual;
SY-DATUM - Data e hora, data (data de aplicação de servidor) atual;
SY-UNAME - Sistema R/3, nome de logon do usuário;
SY-REPID - Programa ABAP, programa básico atual;
SY-ULINE - Constantes, traço horizontal de comprimento 255;
SY-VLINE - Constantes, traço vertical;

Observação: A tabela transparente SYST contêm todas as variáveis de sistema.


Declaração de variáveis

- Por referência a outro campo de tabela já existente :

DATA: variavel01 TYPE tabela01-campo01.

- Pelo tipo que queremos :

DATA: variavel02(04) TYPE c.

- Uma variável com a estrutura de outra :

DATA: variavel03 TYPE variavel01.


Declaração de Tabelas

Tabelas do dicionário de dados

TABLES: tabela01, tabela02, … .

Tabelas internas

TYPES BEGIN OF ty_tabela01,


campo1(16) TYPE c,
campo2 TYPE tabela01-campo,
...
END OF ty_tabela01.

DATA t_tabela01 TYPE TABLE OF ty_tabela01.


Declaração de Tabelas

Tabelas internas

TYPES BEGIN OF ty_tabela02.


INCLUDE STRUCTURE tabela02.
TYPES END OF ty_tabela02.

DATA t_tabela02 TYPE TABLE OF ty_tabela02.


Declaração de WORK AREA

Work area

TYPES BEGIN OF ty_tabela01,


campo1(16) TYPE c,
campo2 TYPE tabela01-campo,
...
END OF ty_tabela01.

DATA: wa_tabela01 TYPE ty_tabela01,


wa_tabela02 TYPE tabela02.

1001 ABC A90S 23,00 Work Area

Obs.: A WORK AREA é criada apenas em tempo de execução, nunca é


armazenada.
Tipos de dados

Tipos

I -> inteiro (4 bytes c/ sinal)


entre -2,147,483,648 e 2,147,483,647.
N -> numérico (só números)
P -> Decimal com tamanho e casas decimais variáveis
F -> ponto flutuante com 16 casas decimais
C -> Caractere alfanumérico e de tamanho variável
D -> data (AAAAMMDD)
T -> hora (HHMMSS)
X -> hexadecimal (sequência de bytes)

Obs.: se não for atribuído tipo a variável, esta será definida como caracter,
automáticamente.
Header Line

Header Line

1001 ABC A90S 23,00 Registros da Tabela

1002 DEF J82J 02,03


2003 GHI KK89 00,01

Obs.: os registros são trabalhados no Header e posteriormente levados à tabela.


Tela de seleção
Tela de seleção

SELECTION-SCREEN BEGIN OF BLOCK bloco1 WITH FRAME TITLE text-001.


SELECT-OPTIONS: s_period FOR sy-datum OBLIGATORY.
SELECTION-SCREEN END OF BLOCK bloco1.

SELECTION-SCREEN BEGIN OF BLOCK bloco2 WITH FRAME TITLE text-002.


SELECT-OPTIONS: s_pernr FOR pa0000-pernr, “Crachá
...
SELECTION-SCREEN END OF BLOCK bloco2.

SELECTION-SCREEN: BEGIN OF BLOCK bloco3 WITH FRAME TITLE text-014.


SELECT-OPTIONS: s_tipo FOR zthrvrub-tipo NO INTERVALS,
s_awart FOR pa2001-awart NO INTERVALS. "Ausência
SELECTION-SCREEN: END OF BLOCK bloco3.
Tela de seleção

SELECTION-SCREEN BEGIN OF BLOCK bloco4 WITH FRAME TITLE text-032.


PARAMETERS: p_data TYPE sy-datum OBLIGATORY.
SELECTION-SCREEN END OF BLOCK bloco4.

SELECTION-SCREEN BEGIN OF BLOCK BLOCO5 WITH FRAME TITLE TEXT-033.

SELECTION-SCREEN BEGIN OF LINE.


PARAMETERS: P_FAB RADIOBUTTON GROUP RADI.
SELECTION-SCREEN COMMENT 5(30) TEXT-034
FOR FIELD P_FAB.
SELECTION-SCREEN END OF LINE.

SELECTION-SCREEN BEGIN OF LINE.


PARAMETERS: P_CD RADIOBUTTON GROUP RADI.
SELECTION-SCREEN COMMENT 5(30) TEXT-035
FOR FIELD P_CD.
SELECTION-SCREEN END OF LINE.

SELECTION-SCREEN END OF BLOCK BLOCO5.

SELECTION-SCREEN SKIP 1. O comando SKIP pula o número de linhas identificado

SELECTION-SCREEN ULINE. O comando ULINE imprime uma linha contínua


Eventos

• A programação ABAP é orientada a eventos que ocorrem conforme um fluxo de


execução. Existem eventos que sempre ocorrem e outros que dependem de ação
do usuário para que ocorram (ex AT LINE-SELECTION que apenas ocorre quando o
usuário realiza um duplo clique em um item de relatório). Vamos abordar os
principais eventos de programas clássicos e programas interativos. Os eventos de
programa do tipo Module Pool serão abordados no item próprio.
Eventos

INITIALIZATION: Onde se pode setar variáveis e preencher


atributos ao se inicializar o programa.

START-OF-SELECTION: Corpo principal do programa. Onde as


seleções de dados são feitas e informações
trabalhadas.

END-OF-SELECTION: Não é obrigatório, mas costuma-se utilizar


este ponto para impressão de relatórios e
finalização do processo.

TOP-OF-PAGE: Este evento se processa antes do primeiro


dado ser impresso em cada página. Pode ser
usado como cabeçalho, em companhia do
NO STANDARD PAGE HEADING.

END-OF-PAGE: Este evento ocorre quando se ultrapassa o


número de linhas da página corrente.
Ou quando se passa de uma página à outra.

AT LINE-SELECTION: Este bloco é executado quando o usuário


realiza duplo clique em um registro exibido
em tela.

AT USER-COMMAND: Este evento ocorre quando um botão da barra


de menu ou de ferramentas é acionado pelo usuário.
Eventos

•AT SELECTION-SCREEN OUTPUT: Acionado quando a tela de seleção é carregada


na memória antes de ser exibida. Pode ser utilizado
para modificar a tela de seleção, por exemplo, ocultar
um campo de seleção, desativá-lo e etc.

•AT SELECTION-SCREEN: Este evento é executado antes de sair da tela de seleção,


Ocorre quando o usuário aciona um código de função na tela
de seleção (ou seja, clicando em um botão ou pressionando
uma tecla).

GET ou GET LATE: Evento GET pode ser utilizado apenas em listas básicas em
um report. O evento GET é acionado cada vez que uma linha é
lida a partir de uma tabela de banco de dados lógico.
Os dados deste registro é carregado na work área.
O evento GET LATE ocorre antes da próxima linha de registro
do GET seja carregada do banco de dados lógico.
O evento GET requere que o banco de dados lógico seja
definido como um atributo do report (no editor ABAP,
utilize o caminho do menu Ir para > Atributos).
Comandos básicos - IF
IF

-IF… ENDIF.
Este comando permite que se desvie o fluxo do programa, dependendo da condição. Para
encerrar usa-se: ENDIF, pode-se ainda ELSEIF e ELSE. O programa só irá executar a condição
correta.

IF <condição> .

ENDIF.

Exemplo: IF VBAP-VBELN IS INITIAL.


MESSAGE E001(ZSSI).
ENDIF.

-IF... ELSE... ENDIF.

IF <condição> .

ELSE.

ENDIF.

Exemplo.: IF VBAP-VBELN is INITIAL.


MESSAGE E001(ZSSI).
ElSE.
MOVE VBAP-VBELN TO W_VBELN.
ENDIF.
Comandos básicos - IF

-IF …ELSEIF…ELSEIF…ENDIF.

IF <condição1> .

ELSEIF <condição2> .
...
ELSEIF <condição3> .
...
ENDIF.

Exemplo.: IF VBAP-VBELN is INITIAL.


MESSAGE E001(ZSSI).
ElSEIF not VBAP-VBELN is INITIAL .
MOVE VBAP-VBELN TO W_PERNR.
ELSEIF not VBAP-VBELN is INITIAL AND
W_VBELN is INITIAL.
MOVE VBAP-VBELN TO W_VBELN.
ENDIF.
Comandos básicos - LOOP

LOOP

-LOOP …ENDLOOP.

LOOP AT <itab> into <work area>.





ENDLOOP.

LOOP AT <itab> into <work area> WHERE <condição>.





ENDLOOP.

LOOP AT <itab> into <work area> from <indice>.





ENDLOOP.
Comandos básicos - CASE

CASE

-CASE …ENDCASE.
É um controle baseado em índice de objeto de dados. Este controle deve ser concluído
com ENDCASE.

CASE <f>.
WHEN <f 01> [OR <f 02> OR ...].
...
WHEN <f 03>.[OR <f 04> OR ...]
...
WHEN <f 05> [OR <f 06> OR ...].
...
WHEN ...
...
WHEN OTHERS.
...
ENDCASE.

Exemplo: CASE W_DATA(02).


When ‘01’.
W_DATA = W_DATA + 1.
When ‘02’.
W_DATA = W_DATA + 2.
When others.
Clear W_DATA.
ENDCASE.
Comandos básicos - DO

DO

-DO …ENDDO.
Repete o processamento que está dentro de DO e ENDDO.
Terminando com os comandos EXIT, STOP e REJECT.
Pode usar CONTINUE, para terminar o passo do DO e continuar o passo seguinte.

DO < n > TIMES.


...
ENDDO.

Exemplo1:
DO 10 TIMES.
IF VBAK-VBELN eq VBAK-VBELN.
W_VBELN = VBAK-VBELN.
ENDIF.
ENDDO.

Exemplo2:
DO.
IF VBAK-VBELN is INITIAL.
EXIT.
ELSEIF VBAK-VBELN in P_VBELN.
CONTINUE.
ENDIF.
ENDDO.
Comandos básicos – WHILE/CHECK
WHILE

-WHILE …ENDWHILE.
Repete o processamento que está dentro de WHILE e ENDWHILE, se a expressão é verdadeira.
A cada passagem a expressão é verificada.
Pode usar CONTINUE , para terminar o passo do WHILE e continuar o passo seguinte.

WHILE expressão.


ENDWHILE.

Exemplo:
WHILE W_WRITE <= 10.
WRITE: / TEXT-001.
W_WRITE = W_WRITE + 1.
ENDWHILE.

CHECK

- CHECK
Para encerrar uma sub-rotina usa-se, frequentemente, ENDFORM.
Podemos terminar antes, usando os comandos EXIT e CHECK.
Se a expressão lógica estabelecida no CHECK for falsa, a sub-rotina será encerrada.
Se a expressão CHECK for aplicada a um LOOP, encerra-se o LOOP.

CHECK SY-SUBRC = 0.
Comandos básicos - MOVE

MOVE

-MOVE

MOVE <c1> TO <c2> .

<c4> = <c3> = <c1>

-MOVE utilizando tabela interna

MOVE <itab1> TO <itab2>.

<itab2> = <itab1>

A citação acima tem o mesmo efeito que <itab2> = <itab1>.

-MOVE-CORRESPONDING

Este comando move os campos idênticos de uma estrutura para outra.

MOVE-CORRESPONDING <struct1> TO <struct2>.


Comandos básicos – CLEAR/SKIP/ULINE
CLEAR

Reseta o valor da variável. Também aplica-se a estruturas e tabelas, limpando o header line,
mas não interferindo nos dados – no caso de tabelas.
Se a variável for alfanumérica, volta a ser branco. Se for numérica, retorna a zero.

Exemplos:
CLEAR <var1>.
CLEAR <t_tab1>. “limpa o header line da tabela

SKIP

-SKIP n
Realiza o salto de linhas. A variável n identifica a quantidade de linhas a ser pulada.

Exemplos:
SKIP. “Irá pular 1 linha – mesmo efeito que SKIP 1
SKIP 10. “Irá pular 10 linhas

ULINE

-ULINE
Imprime uma linha corrente.

Exemplos:
ULINE. “Imprime linha corrente da largura da página
ULINE /35(50). “Linha começará na posição 35 e terá comprimento
de 50 bytes
Comandos básicos - COMENTÁRIOS

COMENTÄRIOS

Algumas das formas como podemos documentar um programa ABAP.

* -> um asterisco na frente da linha, já serve para comenta-lá toda.

“ -> a aspas dupla, na mesma linha do código, serve para comentar dali para frente.

Exemplos:
* IF t001-text IS INITIAL.
* ADD 1 TO w_number.
* ENDIF.

IF t001-text IS INITIAL.
continue. “Comando para sair do Loop atual
ENDIF.
Comandos básicos – FORM/PERFORM
FORM

-FORM … ENDFORM.
Define uma subrotina dentro do programa ABAP. Pode ser executada a qualquer momento, dentro
do programa.

Exemplos:
FORM f_leitura_bseg.
Instruções.
EDFORM.
Opções:
FORM <nome_form> USING p_variavel_referencia
CHANGING p_variavel_valor
TABLES p_tabela.
Instruções
ENDFORM.

PERFORM

-PERFORM
Executa chamadas de subrotinas do programa ABAP.

Exemplos:
PERFORM f_leitura_bseg.
Opções:
PERFORM <nome_form> USING v_variavel_referencia CHANGING v_variavel_valor
TABLES t_tabela.
Tabela interna – Limpeza e Inicialização

CLEAR

-CLEAR
Limpa/Inicializa a header line da tabela interna.

Exemplo:
CLEAR t_tabela01.

REFRESH

-REFRESH
Este comando limpa os dados da tabela interna. Não libera a memória carregada.

Exemplo:
REFRESH t_tabela01.

FREE

-FREE
Este comando apaga os dados da tabela interna, liberando a memória onde ela estava
carregada.

Exemplo:
FREE t_tabela01.
Tabela interna – READ / Leitura
READ

-READ…
Realiza a leitura de dados de uma tabela interna.

READ TABLE <table01> into <work area> WITH KEY …

READ TABLE <table02> into <work area> INDEX …

Exemplos:
READ TABLE table01 into <work area> WITH KEY nome = w_nome. “Busca por campo específico

READ TABLE table02 into <work area> INDEX w_index. “Busca por posição do registro

SY-SUBRC

-SY-SUBRC
É um campo de sistema, que retorna o resultado do último comando processado.
Se estiver abaixo de um READ, retorna a condição de processamento do mesmo. Se SY-SUBRC = 0,
Significa que foi processado corretamente. Diferente disso, ERRO.

Exemplos:
READ TABLE table WITH KEY nome = w_nome.

IF sy-subrc <> 0.
WRITE: /001 ‘Erro na leitura do arquivo…’.
ENDIF.
Tabela interna – APPEND / Gravando

APPEND

-APPEND
Para incluir novos registros na tabela interna.

APPEND <work area> to <table01>.

Exemplos:
CLEAR wa_table01. “Limpa a header line da tabela
wa_table01-nome = ‘Jose’.
wa_table01-cracha = v_cracha.
wa_table01-situacao = ‘Ativo’.
APPEND wa_table01 to table01. “Insere o registro na tabela table01

APPEND I_BKPF

BUKRS GJAHR BELNR BUDAT


5510 1999 72000001555 25.10.1999

5510 1999 72000001554 25.10.1999


5510 1999 72000001553 25.10.1999
5510 1999 72000001552 25.10.1999
Tabela interna – MODIFY/DELETE
MODIFY

-MODIFY
Comando para alterar registro de uma tabela interna.

MODIFY <itab>.

Exemplos:
MODIFY t_tabela01.

Opções:
MODIFY t_tabela02 INDEX sy-index.

DELETE

-DELETE
Comando para deleção de registro de uma tabela interna.

DELETE <itab>.

Exemplos:
DELETE t_tabela01.

Opções:
DELETE t_tabela02 INDEX sy-index.
DELETE t_tabela03 WHERE cracha = 3005.
DELETE t_tabela04 FROM 3 to 5.
Tabela interna – COLLECT
COLLECT

-COLLECT <itab01>.
Este comando também insere registros na tabela interna. A particularidade é que, ele analisa
os campos alfanuméricos. Estes sendo iguais, ele realiza a soma dos campos numéricos.

NAME PRICE

LH 100000

AR 50000

FL 10000000

LH 50000 150000

Soma os campos numéricos


Tabela interna – SORT/DESCRIBE
SORT

-SORT
Comando utilizado para se sortear a tabela interna.

SORT <itab>.

Exemplos:
SORT t_tabela01.

Opções:
SORT t_tabela02 BY campo2 campo3.
SORT t_tabela03 BY campo4 ASCENDING campo5 DESCENDING.

DESCRIBE

-DESCRIBE
Comando para gerar informações sobre determinada tabela interna.

DESCRIBE TABLE <itab> LINES …

Exemplos:
DESCRIBE TABLE t_tabela01 LINES LINHAS “Nº linhas preenchidas
OCCURS OCORRENCIA. “Nº ocorrências na def. da tabela

Obs.: As variáveis utilizadas para se obter o resultado (LINHAS/OCORRENCIA) devem ser


definidas com tipo inteiro (I).
Trabalhando com cadeia de caracteres
CONCATENATE
Utilizado para concatenar/juntar várias strings em uma só.

CONCATENATE <var1> <var2> … <varN> INTO <varDESTINO> [ SEPARATED BY <carac> ].

CONDENSE
Utilizado para eliminar os espaços em branco de uma string.

CONDENSE <string> [ NO-GAPS ].

TRANSLATE
Utilizado para transformar os caracteres em maiúsculos ou minúsculos. E também para
converter uma string a partir de outra.

TRANSLATE <string> TO UPPER CASE.


TRANSLATE <string> TO LOWER CASE.
A string utilizada para o TRANSLATE,
TRANSLATE <string1> USING <string2>. STRING2 tem a seguinte instrução :
A  x
DATA: STRING1 (10) VALUE 'AbCdEfGhIj', b  X
STRING2 (20) VALUE 'AxbXCydYEzfZ'. C  y
d  Y
TRANSLATE STRING1 USING STRING2. E  z
f  Z
WRITE / STRING1.

A saída será a seguinte string : xXyYzZGhIj


Trabalhando com cadeia de caracteres
REPLACE
Substitui o conteúdo de uma string por outra, em uma outra string destino.

Exemplos:
DATA: T(10) VALUE 'abcdefghij',
STRING LIKE T,
STR1(4) VALUE 'cdef',
STR2(4) VALUE 'klmn',
STR3(2) VALUE 'kl',
STR4(6) VALUE 'klmnop'.

STRING = T.
REPLACE STR1 WITH STR2 INTO STRING.
WRITE / STRING.

A saída na string será a seguinte : abklmnghij

STRING = T.
REPLACE STR1 WITH STR3 INTO STRING.
WRITE / STRING.
STRING = T.

A saída na string será a seguinte : abklghij

REPLACE STR1 WITH STR4 INTO STRING.


WRITE / STRING.

A saída na string será a seguinte : abklmnopgh


Trabalhando com cadeia de caracteres

SEARCH
Permite que se busque uma string em uma cadeia de caracteres ou em uma tabela interna.

SY-SUBRC = 0, string encontrada.


SY-FDPOS = , retorna a posição em que foi encontrada.
SY-SUBRC = 4, string não encontrada.

SEARCH <string> FROM <string_procurada>.

SEARCH <t_tabela01> FOR <string_procurada> [ AND MARK ].

Obs.: No caso de busca em tabela interna, a variável SY-TABIX retorna a linha em que a
string procurada foi encontrada.

STRLEN
Devolve o tamanha da string referenciada.

v_tamanho = STRLEN( ‘IVAN RODRIGO’ ).

v_tamanho = STRLEN( TEXT-001 ).


Comando SET PF-STATUS

O SET PF-STATUS é um evento que indica qual a barra de status GUI (menu de
botões) que deve ser apresentada para o relatório.
ABAP/4
Depuração da
codificação

Todos os Direitos Reservados © Valores Corporativos Softtek S.A. de C.V. 2011. Interno. 119
Ativando a Depuração de Programas

Entrar em Sistema >


Utilitários > depuração
ABAP/4

Digitar /H para iniciar


o processo de
Debugger
Botões de Navegação

F5 F6 F7 F8
Variáveis e Parâmetros

• Clicando é possível manipular as variáveis e tabelas em tempo de execução.


Alterando Valores de Campos

• Com dois clicks no é possível modificar o valor de uma variável em tempo de execução
Variáveis e Parâmetros

• Clicando em Locais/Globais é visualizar tudo que o SAP carregou na memória para aquele
programa.
• Em Desktop2 é possível navegar na pilha e visualizar cada programa sendo executado.
Verificando Tabelas

• Selecionando uma tabela interna os dados são exibidos e apertando o botão direito é possível inserir
e eliminar registros em tempo de execução.
Pontos de Paradas

• É possível manipular todos os pontos de paradas e Watchpoints.


• Para definir um ponto de parada basta dar dois cliques na linha do código ou apertar o botão .
Ponto de Parada WATCHPOINT

Para criar um WATCHPOINT basta clicar no botão , informar a variável e o valor que pretende
localizar.
Chamadas Efetuadas

• Para verificar todas as rotinas executadas até o momento, selecione a ABA


Pontos de Parada Pré-Definidos

• É possível definir pontos de parada através de comandos ABAP, métodos, módulos de função,
FORMs...
Reprocessamento

• Colocando o cursor no trecho de código já executado e apertando SHIFT+F12 o debug permite


reprocessa-lo(No reprocessamento as variáveis e tabelas são mantidas com os dados atuais, isto é,
os valores não retornam para os valores inicias antes do processamento).
ABAP/4 Funções

Todos os Direitos Reservados © Valores Corporativos Softtek S.A. de C.V. 2011. Interno. 131
O que é o Módulo de função?

• Módulos de Função são sub-rotinas externas com uma interface transparente. A


interface é considerada transparente porque ele não é parte da declaração do
programa ABAP para a porção executável do módulo de função. A interface pode
ser mantida independentemente do código.

• Os Módulos de Função são unidades de modularização com nomes específicos


que podem ser chamados a partir de qualquer programa em todo o sistema de
R/3. Eles armazenam o código que é utilizado por mais de um programa.
Chamadas de Módulos de Função

• Cada módulo de função pertence a um grupo de função. Um grupo de função


é uma coleção de programas que tem uma estrutura pré-definida. Todos os
nomes de programas dentro do grupo contêm o ID do grupo de função de
quatro caracteres.

• Quando você chama um módulo de função, o sistema baixa a entrada do


grupo de função dentro da área de memória ligando um programa de
chamada.

• Os módulos de função em um grupo de função têm uma ideia principal em


comum. Por exemplo, todos os módulos de função em grupo de função SCAL
executam cálculos de data.

• A transação se37 é conhecida como Function Builder e é onde são criadas e


testadas as funções ABAP. Um Function Group (Grupo de Função) pode ser
criado através da transação se80.
RFC

• RFC é a interface padrão de comunicação entre sistemas SAP. É através


deste protocolo que as informações são trocadas entre diferentes
ambientes. Para que isto funcione é necessário configurar na transação
SM59 o que são chamados de RFC Destination. Quando criamos uma RFC
Destination é necessário informar as configurações técnicas, logon e
também um nome. É este nome que é usado quando precisamos chamar
uma função no sistema de destino.

• Assim com funções do tipo RFC (que é configurado na aba de


características na transação SE37) é possível executar funções que estão
em outro sistema SAP ou permitir que sistemas externos tenham acesso a
funções no SAP; sendo estes sistemas externos SAP ou não.
Criando Grupo de Função

 Transação: SE80

Clicar em Processar
Objeto
Criando Grupo de Função
- Adicionar no Campo Obrigatório o Grupo de Funções que deverá ser criado
anteriormente e um Texto Breve do que executa a Função.
Adicionar nome do grupo
a ser criado

Adicionar uma
descrição para o Grupo
e Salvar
Clicar em Criar (F5)
Criando Grupo de Função

Selecionar uma classe de


desenvolvimento

Aparecerá a tela para criação de request

Clicar em Salvar
(Enter)

Clicar em Criar
Ordem (F8)
Criando Grupo de Função

Adicionar uma descrição


para a request

Aparecerá a tela com o número da request


Clicar em
Salvar

Clicar em
Avançar (Enter)
Criando Grupo de Função

Clicar em Ativar
(Ctrl+F3)
Criando Módulo de Função

 Para criar módulos de função, você usa o construtor de função, uma das
ferramentas de referencia de trabalho do ABAP.
Transação: SE37

Criei um nome para a


função

Clique em Criar
Adicione o nome do Grupo
de Função criado
anteriormente

Clique em Gravar
Criando Módulo de Função

 Na Aba Característica, aparecerá na Classificação o seu Grupo de Funções,


juntamente com a sua descrição, e o seu texto breve da tela anterior.
 No Tipo de Execução deverá estar selecionado o Módulo de Função Normal, pois a
de Acesso Remoto só deverá ser selecionado caso for uma RFC.

Aba Características
Criando Módulo de Função

 Na Aba Importação, deverá ser colocado (não é obrigatório) os dados que serão
importados para a Função (Nome Parâmetro, Atributo(like ou type) Tipo Referência)
o Texto breve aparecerá assim que estes campo forem preenchidos e dado “Enter”,
para a próxima linha.

 Obs.: Para Criação de RFC o tributo será somente Type , o Checkbox Opcional e
Transferência de Valor devem estar marcados.

 Na Aba Exportação será passada o valor que deve retorna para o Programa
depois que forem feitas todas as “seleções” feitas na função. O preenchimento é
idêntico ao da Aba Importação.

 Obs.: Na RFC o checkbox Transferência deverá estar flegado.


 Na Aba Texto fonte será o local que será desenvolvido a lógica para atender a
função.

 Obs: Repare que na Interface local aparece todos os parâmetros que foram
inseridos nas Abas anteriores, mostrando toda a Estrutura da Função.
Criando Módulo de Função

 Na Aba Modificação, somente de for para ser alterado o valor de algum campo,
caso seja necessário, pois sempre que o programa for executado haverá a
modificação.

 Na Aba Tabelas, poderão (não obrigatório) ser inseridas as tabelas internas que
serão utilizada no programa (texto fonte) (declaradas desta forma ela traz a tabela
inteira uma estrutura, caso necessite poucos campos é aconselhável declarar dentro
do texto fonte a tabela interno contendo somente os campos que serão utilizados
(sempre com campos chaves juntos), questão de performance).

 Na Aba Exceções, somente colocar o retorno dos erros da função (não é


obrigatório, mas aconselhável, pois a não utilização do sy-subrc na função ela
sempre retornará 0, fazendo com que o SAP entenda que está tudo OK).

No Local de Exceção, colocar os campos que possam retornar erros.

No Texto Breve, colocar a descrição do erro.


Criando Módulo de Função

Na aba Importação insira


parâmetros que serão importados
para a função.
Criando Módulo de Função

Na aba Exportação insira


parâmetros que serão
retornados pela função.
Criando Módulo de Função

Na aba Texto Fonte insira o código da função,


repare que os parâmetros de importação e
exportação já estão na chamada da função.

Código inserido entre FUNCTION


e declarações de
ENDFUNCTIONS.
Criando Módulo de Função
Clique em Gravar e Verificar

Clique em Ativar

Clique em Avançar
Criando Módulo de Função

Clique em testar/executar
(F8)

Função está ativa


Criando Módulo de Função
Clique em Executar (F8)

Será apresentada a tela onde mostrará os parâmetros


que estão sendo passados para o código da função,
no exemplo foram inseridos valores Default
Criando Módulo de Função

Valor passado para exportação depois de


passar pelo texto fonte da função
Criando Módulo de Função

 Depois de terminado e ativado um módulo de função, você pode testar no


construtor de função, permitindo especificar os parâmetros de IMPORTAÇÃO. O
resultado é transferido aos parâmetros de EXPORTAÇÃO.

 Você pode usar a função construtor teste para testar módulos de função com
parâmetros de mesa.

 O módulo de função pode ser chamado a partir de um programa caso ele esteja
ativo no R/3.

 Utilizar padrão de declaração do relatório através do botão MODELO.

 O sistema gera uma declaração CALL FUNCTION <nome de módulo de função>,


junto com a interface do módulo de função, e insere isto no programa a partir da
posição atual do cursor.

 Descomentar os parâmetros a serem utilizados preenchendo com valores,


referências, tabelas internas.
Criando Módulo de Função

REPORT Z_REPORT_ACADEMIA.
Exemplo: Relatório que *-----------------------------------------------------------------------
chama a função que * Variáveis
*-----------------------------------------------------------------------
multiplica dois números: DATA num3 TYPE i.
*-----------------------------------------------------------------------
* Tela de Seleção
*-----------------------------------------------------------------------
SELECTION-SCREEN BEGIN OF BLOCK bl1 WITH FRAME TITLE text-000.
parameters: num1 type i obligatory,
num2 type i obligatory.
SELECTION-SCREEN END OF BLOCK bl1.

if num1 is initial and num2 is initial.


message i000(ZCLL) with 'Digitar valores para os campos!!!'.
else.
*-----------------------------------------------------------------------
* Chamada da Função
*-----------------------------------------------------------------------

CALL FUNCTION 'Z_FUNCAO_ACADEMIA'


EXPORTING
P1 = num1
P2 = num2
IMPORTING
P3 = num3.

*-----------------------------------------------------------------------
* Impressão do valor retornado pela função na tela.
*-----------------------------------------------------------------------
write:/ 'Número gerado pela função Z_FUNCAO_ACADEMIA =', num3 .
endif.
Criando Módulo de Função

Em um report clicar em Modelo


para utilizar o padrão da chamada
da função
Criando Módulo de Função

Adicionar o nome da
função criada

Clicar em Avançar
Criando Módulo de Função

A função é criada automaticamente,


descomentar os parâmetros e adicionar as
variáveis que passarão os valores para a
função
Criando Módulo de Função

Executar o programa e adicionar os


valores que serão passados para a função
Criando Módulo de Função

Resultado exportado pela


função e impresso na tela
Exemplos com Funções Standards

 MONTH_NAMES_GET : Retorna uma tabela interna com o nome dos meses.

Nessa função é passada uma tabela interna onde


serão armazenados os nomes dos meses.
Exemplos com Funções Standards

• Na aba Exceptions são definidas quais as possíveis exceções que a função


pode devolver. Uma exceção é uma validação de negócio que impede que a
função seja executada até o final. Desta forma o programa que executa a
função pode fazer o devido tratamento do erro. Para disparar uma exceção é
utilizado o comando RAISE.

Aba Exceções
Exemplos com Funções Standards

Tabela interna com o resultado passado


pela função
Exemplos com Funções Standards

Resultado dentro da tabela


interna
POP- UP

POPUP_TO_CONFIRM_STEP – Cria um BOX de mensagem com confirmação.

Pop-up executado na
transação SE37.
ABAP/4
Relatório (WRITE)

Todos os Direitos Reservados © Valores Corporativos Softtek S.A. de C.V. 2011. Interno. 163
Formatando listas : Overview

Comandos de saída/Opções de formatação :


WRITE
FORMAT

Eventos : TOP-OF-PAGE - Inserir aqui as informações que deseja que apareçam


no cabeçalho do relatório.
AT LINE-SELECTION – Quando é selecionado uma linha do relatório
(É utilizado geralmente com HOTSPOT).
AT USER-COMMAND - Quando um botão é acionado.

Elementos de texto :
TEXT-SYMBOLS
HEADINGS
SELECTION TEXTS
Editar LISTA

• DESCRIBE LIST NUMBER OF LINES V_LINHAS;

Comando utilizado para descrever a quantidade de linhas do relatório.

• READ LINE SY-INDEX;

Comando utilizado para ler as linhas do relatório

• MODIFY CURRENT LINE;

Comanto utilizado para modificar linha corrente.

Exemplo:

MODIFY CURRENT LINE LINE FORMAT COLOR 7.


Comando - REPORT

O comando REPORT são definidas as características básicas para um programa ABAP, como o nome
do programa, a classe de mensagens utilizada, o tamanho da folha de impressão, etc.

Exemplos:

REPORT Z_ACADEMIA_ABAP “ nome do relatório


NO STANDARD PAGE HEADING “ não exibe o cabeçalho padrão de relatório
LINE-SIZE 170 “ define o tamanho da linha em 170 caracteres
LINE-COUNT 65 “ define o número de linhas por página
MESSAGE-ID ZSADUP “ define a classe de mensagens
RESERVE 8 LINES. “ pelo menos 8 linhas serão impressas na última página
Comando - WRITE
WRITE

-WRITE
É comum os campos saírem justificados a esquerda. Os campos numéricos são alinhados a
direita.

Exemplos:
WRITE <f>.
WRITE: /TEXT-001, TEXT-002, TEXT-003+2(8).
WRITE: /002 TEXT-004.

Opções:
... NO-ZERO.
... NO-SIGN.
... DD/MM/YY.
... MM/DD/YY.
... DD/MM/YYYY.
... MM/DD/YYYY.
... DDMMYY.
... CURRENCY w.
... DECIMALS d.
... ROUND R.
... UNIT u.
... USING EDIT MASK mask.
... UNDER g.
... NO-GAP.
... LEFT-JUSTIFIED.
... CENTERED.
... RIGHT-JUSTIFIED.
Comando - WRITE
WRITE

Exemplos:

WRITE: ‘****************’.

WRITE: ‘Date’, sy-datum.

WRITE: ‘Time’, sy-uzeit.

WRITE: 5 `****************’.

WRITE: /10 ‘Usuário:’, 30 sy-uname.

SKIP 2.

ULINE.

ULINE /5(40).

V_DATUM = SY-DATUM.
V_UZEIT = SY-UZEIT.

WRITE: 5 ‘Datum’, 20 V_DATUM DD/MM/YYYY.

WRITE: /10 ‘Time’, 25 V_TIME USING EDIT MASK ‘__:__:__’.


Comando - FORMAT
FORMAT

-Trabalhando com cores.

Opções para se modificar as cores da lista, via comando FORMAT.

1. … COLOR n [ON] or … COLOR OFF


2. … INTENSIFIED [ON] or … INTENSIFIED OFF
3. … INVERSE [ON] or … INVERSE OFF
4. … HOTSPOT [ON] or … HOTSPOT OFF
5. … INPUT [ON] or … INPUT OFF
6. … RESET

FORMAT INTENSIFIED OFF.


FORMAT INTENSIFEID.
FORMAT COLOR COL_KEY.
FORMAT COLOR COL_TOTAL INTENSIFIED OFF.
WRITE: /05 V_TOTAL COLOR COL_POSITIVE.
Comando NEW-PAGE / END-OF-PAGE

NEW-PAGE

O comando NEW-PAGE inicia uma nova página, durante o processamento da lista.


Ele não imprime páginas em branco. Ele as ignora.
O comando incrementa o contador de páginas do sistema – variável SY-PAGNO.
Para ser executado, a opção NO STANDARD PAGE HEADING deve ser colocada no programa.

END-OF-PAGE

O comando é executado sempre a área definida para impressão na página acaba.

ALGUNS CAMPOS DO SISTEMA PARA CRIAÇÃO DE LISTAS

SY-PAGNO : número da página corrente.


SY-LINNO : número da linha corrente.
SY-COLNO : número da coluna em que o cursor está posicionado.
Layout
ABAP/4
Relatório ALV

Todos os Direitos Reservados © Valores Corporativos Softtek S.A. de C.V. 2011. Interno. 172
O que é ALV

 O Abap List Viewer (ALV) é uma ferramenta que padroniza


e simplifica o uso de listas e relatórios no sistema R/3 tanto
para o desenvolvedor tanto para o usuário que interage com
o relatório.

 O ALV através de suas funções e estruturas torna o


desenvolvimento mais simples na Medida que economiza
significativas linhas de código como por exemplo no
tratamento de quebras, totais, subtotais, cores e outras
vantagens.
Características do ALV

O ABAP List Viewer permite :

• Usar variantes de exibição standard predefinidas pela SAP .

• Ordenar os dados : crescente e decrescente.


Ordenar as linhas de acordo com os valores das colunas,
em seqüência crescente ou decrescente.

• Definir um filtro.
Exibir somente os campos desejados.

• Formar totais e subtotais.


Em uma lista, é possível calcular totais e
subtotais de uma ou mais colunas selecionadas.
Características do ALV

• Exibição de informações detalhadas.


Pode-se acessar informações detalhadas de linhas individuais
da lista.

• Pesquisa.
É possível pesquisar informações específicas.

• Impressão de listas e pré-visualização.


Pode-se imprimir as listas e chamar uma pré-exibição antes de
imprimir.
Características do ALV

• Exportação de dados.
Pode-se copiar as listas, por exemplo, para uma planilha
ou gravá-las como arquivo local.

• Deslocar colunas.

• O ALV é formado basicamente por :


- Uma barra de ferramenta
- Um título
- Uma lista de saída.
Barra de ferramenta
Barra de ferramenta
Criando um ALV

Grupo de tipos:
É necessário a declaração do grupo de tipos SLIS onde se encontram os tipos
fundamentais para a saída de um relatório ALV.
Comando: TYPE-POOLS: SLIS.

Fieldcat: A estrutura slis_t_fieldcat_alv determina o modo de apresentação


campo a campo dos dados do relatório.
Declarar estrutura do tipo slis_t_fieldcat_alv:
Data: t_fieldcat type slis_t_fieldcat_alv ,
wa_fieldcat type slis_fieldcat_alv .

Abaixo estão alguns campos :


Ex: clear wa_fieldcat.
wa_fieldcat-fieldname = ‘CARRID'.
wa_fieldcat-tabname = 'T_SAIDA'.
wa_fieldcat-ref_fieldname = ‘CARRID’.
wa_fieldcat-ref_tabname = ‘SCARR’.
wa_fieldcat-key = ‘X’.
Append wa_fieldcat to t_fieldcat.
Criando um ALV

Layout: Parâmetros gerais do Layout do relatório


Declarar uma estrutura do tipo slis_layout_alv:
Data: wa_layout type slis_layout_alv.

Abaixo os campos mais utilizados:


Ex: wa_layout-box_fieldname = 'BOX'. "campo checkbox p/tab_saida
wa_layout-get_selinfos = 'X'. “Mostrar tela de seleção”.
wa_layout-detail_popup = 'X'. “Mostrar detalhe via popup”.
wa_layout-detail_initial_lines = 'X'. “Todos os campos em detalhes”.
wa_layout-zebra = 'X'. “Cor sim / cor não”.
wa_layout-colwidth_optimize = 'X'. “Otimização de largura de colunas
Criando um ALV

Sort: Parâmetros de ordenação


Declarar uma estrutura do tipo slis_t_sortinfo_alv:
Data: t_sort type slis_t_sortinfo_alv .
wa_sort type slis_sortinfo_alv .

Abaixo os campos mais utilizados :


Ex: clear s_sort.
wa_sort-up = 'X'. “Ordenação crescente
wa_sort-fieldname = 'campo pelo qual queremos ordenar da Tabela interna de
saída'.
wa_sort-tabname = 'Tabela interna de saída'.
wa_sort-spos = '1'. “Prioridade de ordenação
Append wa_sort to t_sort.
Criando um ALV

Call function 'REUSE_ALV_HIERSEQ_LIST_DISPLAY' Call function 'REUSE_ALV_GRID_DISPLAY'


exporting exporting
i_callback_program = sy-repid i_callback_program = c_repid
i_callback_pf_status_set = 'SET_PF_STATUS' i_callback_pf_status_set = 'SET_PF_STATUS'
i_callback_user_command = 'USER_COMMAND' i_callback_user_command = 'USER_COMMAND'
is_layout = s_layout i_callback_top_of_page = 'TOP_OF_PAGE'
it_fieldcat = s_fieldcat[] is_layout = s_layout
it_special_groups = s_grupos[] it_fieldcat = s_fieldcat[]
* - Parâmetro p/executar sempre com a variante default it_sort = s_sort[]
i_default = ‘X’ * - Parâmetro p/executar sempre com a variante default
* - Se é possível salvar as variantes i_default = ‘X’
i_save = 'A' * - Se é possível salvar as variantes
* - Nome da variante selecionada i_save = 'A'
is_variant = variante * - Nome da variante selecionada
i_tabname_header = 'IT_CABECALHO' is_variant = variante
i_tabname_item = 'IT_ITEM' is_print = s_print
is_keyinfo = s_keyinfo it_special_groups = s_grupo[]
is_print = s_print tables
tables t_outtab = t_saida
t_outtab_item = t_saida. exceptions
program_error = 1
others = 2.
Relatório ALV LIST

BARRA DE FERRAMENTA

Função:
“REUSE_ALV_LIST_DISPLAY”
Relatório ALV GRID

Função: “REUSE_ALV_GRID_DISPLAY”

BARRA DE FERRAMENTA
ABAP/4
Importando e
Exportando
Dados

Todos os Direitos Reservados © Valores Corporativos Softtek S.A. de C.V. 2011. Interno. 185
Importando e exportando dados

• Um dos desenvolvimentos mais comuns no SAP envolve programas que irão


exportar ou importar dados, isso também pode ser conhecido como
processos de Inbound, Outbound ou programas de interface já que podem
gerar arquivos ou receber arquivos de, para, outros sistemas.
Importar arquivos

• Quando desejamos importar arquivos, e esses podem ser em formato txt,


excel, ou outro que possa ser reconhecido pelas funções de importação,
nós basicamente realizamos três passos:

1. Construímos uma tela de seleção que permita ao usuário escolher um


arquivo (a origem deste arquivo, seu caminho na máquina ou servidor),
definir se é um arquivo local ou se esta no servidor (os tratamentos e
funções utilizadas são diferentes para quando o usuário realizar o upload
de um arquivo local ou do servidor).
2. Após o usuário executar o programa, buscamos este arquivo, realizamos
leitura de seus dados e jogamos em uma estrutura interna ou tabela
interna.
3. Por fim, damos um destino a estes dados, seja preencher uma tabela do
banco de dados, uma BAPI (para criar ordens de venda, por exemplo), ou
realizar um Batch Input para automatização de alguma transação ou
processo.
Importar arquivos

• Ao criamos a tela de seleção, precisamos de um campo onde seja possível


navegar pela máquina local do usuário, ou digitar o caminho para o servidor
(algumas vezes o caminho do servidor não é inserido pelo usuário; pode ser
definido dentro do programa ou através de configuração).

• É necessário implementar o evento AT TABLES rlgrap.

SELECTION-SCREEN ON VALUE-REQUEST DATA: it_tab TYPE filetable WITH HEADER LINE,


FOR para que ao clicar no campo se abra a gd_subrc TYPE i.
janela para selecionar o arquivo desejado. SELECTION-SCREEN BEGIN OF BLOCK m WITH FRAME.
Dentro deste evento temos que utilizar a PARAMETERS p_fpath TYPE rlgrap-filename.
seguinte função (A função amplamente SELECTION-SCREEN END OF BLOCK m.

utilizada é a F4_FILENAME, porém ela é AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_fpath.


considerada obsoleta e assim estamos
utilizando os métodos da classe REFRESH: it_tab.
CALL METHOD cl_gui_frontend_services=>file_open_dialog
CL_GUIFRONTEND_SERVICES): EXPORTING
window_title = 'Select File'
default_filename = '*.txt'
multiselection = space
CHANGING
file_table = it_tab[]
rc = gd_subrc.

READ TABLE it_tab INDEX 1.


p_fpath = it_tab-filename.
Importar arquivos

• Esta função é a responsável em abrir a janela do sistema local e retornar o


caminho do arquivo.

Tela de seleção com o campo que


seleciona o caminho para o arquivo de
importação.

Resultado após a seleção do arquivo


Importar arquivos

• Esta Após a seleção do caminho ao CALL METHOD cl_gui_frontend_services=>gui_upload


EXPORTING
arquivo é necessário realizarmos o filename = p_fpath
filetype = 'ASC'
upload do mesmo para uma tabela has_field_separator = 'X'
interna. Existem diversas funções CHANGING
data_tab = t_dados
como a EXCEPTIONS
ASLM_EXCEL_TO_INTERNAL_TABLE file_open_error
file_read_error
=1
=2
onde conseguimos trabalhar com no_batch =3
gui_refuse_filetransfer = 4
arquivos no formato Excel, passando o invalid_type =5
caminho para o arquivo temos o no_authority =6
unknown_error =7
resultado em uma tabla interna, porém bad_data_format =8
a função mais utilizada é a header_not_allowed
separator_not_allowed = 10
=9

GUI_UPLOAD onde trabalhamos com header_too_long = 11


unknown_dp_error = 12
arquivos ASC e dados tabulados. access_denied = 13
• A função GUI_UPLOAD também é dp_out_of_memory = 14
disk_full = 15
considerada obsoleta, passamos a dp_timeout = 16
utilizar o método GUI_UPLOAD da not_supported_by_gui = 17
error_no_gui = 18
classe CL_GUIFRONTEND_SERVICES. OTHERS = 19.
Importar arquivos

• Com os dados em nossa tabela interna podemos realizar a inserção de registros


em tabelas transparentes, utilizar BAPIs para processos standard, ou realizar um
Batch Input.
• Para realizar a leitura de arquivos que não sejam locais, ou seja, que estejam
localizados no servidor precisamos utilizar outro comando, o OPEN DATA SET com
comandos de leitura.
• O Comando OPEN DATA SET no da a possibilidade de ler, gravar, ou alterar
arquivos no servidor. Para realizar a leitura de um arquivo no servidor seguimos os
seguintes passos:
1. Declaramos nossa tabela interna.
2. Utilizamos o OPEN DATA SET ABAP para abrir o arquivo no servidor da aplicação.
3. Utilizamos o READ DATASET ABAP para ler cada linha do nosso arquivo e mover
para uma work area e então inseri-la em uma tabela interna.
4. Utilizamos CLOSE DATASET ABAP para fecharmos o arquivo no servidor de
aplicação.
5. Processamos os dados da tabela interna.
Importar arquivos

• Exemplo: DATA: lv_data TYPE string.

* Caminho,nome do arquivo
gv_file = 'spfli.txt'.

*Abre arquivos no servidor da aplicação


OPEN DATASET gv_file FOR INPUT IN TEXT MODE ENCODING
DEFAULT.
IF sy-subrc NE 0.
MESSAGE 'Não foi possível abrir o arquivo' TYPE 'I'.
ENDIF.
DO.
* Loop no arquivo, enquanto existir linhas
READ DATASET gv_file INTO lv_data.
IF sy-subrc = 0.
* Split dos campos em uma estrutura temporária, work area.
SPLIT lv_data AT ',' INTO gwa_spfli-carrid
gwa_spfli-connid
gwa_spfli-countryfr
gwa_spfli-cityfrom
gwa_spfli-airpfrom
gwa_spfli-countryto
gwa_spfli-cityto
gwa_spfli-airpto
gwa_spfli-arrtime.
APPEND gwa_spfli TO gt_spfli.
CLEAR gwa_spfli.
ELSE.
EXIT.
ENDIF.
ENDDO.
* Fecha o arquivo no servidor de aplicação
CLOSE DATASET gv_file.
Exportar arquivos

• Quando desejamos exportar arquivos, e esses podem ser em formato txt,


excel, ou outro que possa ser reconhecido pelas funções de exportação, nós
basicamente realizamos três passos:

1. Construímos uma tela de seleção que permita ao usuário escolher o caminho


de destino deste arquivo, definir se é um arquivo local ou se esta no servidor
(os tratamentos e funções utilizadas são diferentes para quando o usuário
desejar realizar o download de um arquivo local ou quando ou no servidor).

2. Após o usuário executar o programa, buscamos os dados conforme regras


de negócio.

3. Por fim, damos um destino a estes dados, preenchendo uma tabela interna e
utilizando funções, comandos para o usuário realizar download ou para
enviar ao servidor da aplicação.
Exportar arquivos

• Ao criamos a tela de seleção, precisamos de um campo onde seja possível


navegar pela máquina local do usuário, ou digitar o caminho para o servidor
(algumas vezes o caminho do servidor não é inserido pelo usuário; já foi definido
dentro do programa ou através de configuração) indicando onde será salvo nosso
arquivo. TABLES rlgrap.

DATA: gv_full_path TYPE string,


• É necessário implementar o evento AT gv_file_name TYPE string,
gv_path TYPE string.
SELECTION-SCREEN ON VALUE-
REQUEST FOR para que ao clicar no SELECTION-SCREEN BEGIN OF BLOCK m WITH FRAME.
PARAMETERS p_fpath TYPE rlgrap-filename.
campo se abra a janela para SELECTION-SCREEN END OF BLOCK m.

selecionar o caminho de destino. AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_fpath.


Dentro deste evento temos que utilizar CALL METHOD cl_gui_frontend_services=>file_save_dialog
EXPORTING
a seguinte função (A função window_title = 'Select Path'
amplamente utilizada é a default_extension = 'TXT'
with_encoding = 'X'
F4_FILENAME, porém ela é initial_directory = 'C:\'
prompt_on_overwrite = 'X'
considerada obsoleta e assim estamos CHANGING
utilizamos os métodos da classe filename
path
= gv_file_name
= gv_path
CL_GUIFRONTEND_SERVICES). fullpath = gv_full_path
EXCEPTIONS
cntl_error =1
error_no_gui =2
not_supported_by_gui = 3
OTHERS = 4.
IF sy-subrc = 0.
p_fpath = gv_full_path.
ENDIF.
Exportar arquivos

• Esta função é a responsável em abrir a janela do sistema local e retornar o


caminho onde o usuário deseja que salve o arquivo.

Tela de seleção com o campo que


seleciona o caminho onde será salvo
o arquivo.

Resultado após a
seleção do caminho.
Exportar arquivos

• Após a seleção do caminho ao arquivo é necessário realizarmos o download


do mesmo para o caminho indicado, seja local ou no servidor. A função mais
utilizada para este destino é a GUI_DOWNLOAD, onde trabalhamos com vários
formatos de arquivos.
• A função GUI_DOWNLOAD também é considerada obsoleta, passamos a
utilizar o método GUI_DOWNLOAD da classe CL_GUIFRONTEND_SERVICES.

CALL METHOD
cl_gui_frontend_services=>gui_download
EXPORTING
filename = gv_filename
filetype = 'ASC'
write_field_separator = 'X'
CHANGING
data_tab = gt_spfli.
Exportar arquivos

• Com os dados em nossa tabela interna podemos chamar a função de download


que irá salvar os dados em nosso destino, esta é uma forma de gerarmos
arquivos que podem ser utilizados em outros sistemas, enviados por email,
abertos no Excel e etc.
• Para realizar a gravação de arquivos que não sejam locais, ou seja, que estejam
localizados no servidor, precisamos utilizar o comando OPEN DATA SET com os
parâmetros de escrita.
• O Comando OPEN DATA SET nos da a possibilidade de ler, gravar, ou alterar
arquivos no servidor. Para realizar a leitura de um arquivo no servidor seguimos
os seguintes passos:
1. Montamos nossa tabela interna.
2. Utilizamos o OPEN DATA SET ABAP para abrir o arquivo no caminho
especificado no servidor de aplicação.
3. Utilizamos o TRANSFER para ler cada linha de nossa tabela interna e mover para
o nosso arquivo no caminho especificado.
4. Utilizamos CLOSE DATASET ABAP para fecharmos o arquivo no servidor de
aplicação.
Exportar arquivos

• Exemplo: DATA: lv_data TYPE string.

* Caminho,nome do arquivo
gv_file = 'spfli.txt'.

*Abre arquivo no servidor da aplicação


OPEN DATASET gv_file FOR OUTPUT IN TEXT MODE
ENCODING DEFAULT.
IF sy-subrc NE 0.
MESSAGE 'Não foi possível criar o arquivo' TYPE 'I'.
EXIT.
ENDIF.

LOOP AT gt_spfli into gwa_spfli


* Monta tabela interna para saida
CONCATENATE gwa_spfli-carrid
gwa_spfli-connid
gwa_spfli-countryfr
gwa_spfli-cityfrom
gwa_spfli-airpfrom
gwa_spfli-countryto
gwa_spfli-cityto
gwa_spfli-airpto
gwa_spfli-arrtime
INTO lv_data
SEPARATED BY ','.
* Transfere para o arquivo no servidor
TRANSFER lv_data TO gv_file.
CLEAR: gwa_spfli.
ENDLOOP.
* Fecha o arquivo no servidor de aplicação
CLOSE DATASET gv_file.
ABAP/4
Module Pool
(Online)

Todos os Direitos Reservados © Valores Corporativos Softtek S.A. de C.V. 2011. Interno. 199
Definição

Module Pool - É um conjunto de módulos que são executados em blocos, utilizando os


seus principais eventos: PBO e PAI, para integração de telas e tratamento dos
processos.

Esses tipos de programas funcionam online, ou seja, instantaneamente. Por isso, eles
são dotados de uma maior capacidade de customização das telas e maior
flexibilidade para criarem uma interface mais amigável com o usuário.

Screen Attributes
Global Data
Screen layout
Screen PBO Module
Field Attibutes Painter ABAP
PAI Module
Flow Control
PBO x PAI

PBO - PROCESS BEFORE OUTPUT


 É executado antes da tela ser
enviada para exibição;
 Seleção inicial de dados e
atribuição de valores a serem
exibidos na tela;

PAI – PROCESS AFTER INPUT


 É executado após o usuário
interagir com a tela (Enter, click de
um botão, etc...);
Código ABAP para execução da
lógica do comando;

Os módulos do PBO ficam armazenados em um include do próprio PBO. O mesmo


acontecendo com os módulos do PAI.
SCREEN

• Consiste de uma máscara de input/output de dados , atributos e fluxo


lógico.

• É um container para outros Screen Objects.

• E possível definir uma sequência fixa de telas – em Next Screen colocar o


número da próxima tela, se informado zero, permanece o fluxo lógico da
mesma

• As sub-rotinas chamadas a partir da lógica de programação das telas,


recebem o nome de módulo – MODULE...

• Tipos : NORMAL, SUBSCREEN, MODAL DIALOG BOX, SELECTION


• SCREEN
Transação SE80

Lista de objetos
do Module Pool

Área de
programação
Lógica de processamento

PBO

PAI
Lógica de processamento

No include TOP ficam definidas as variáveis


globais, tabelas, estruturas. Bem como
definições de includes e tables-control.

No include O01 ficarão armazenados


os módulos dos PBOs.

No include I01 ficarão armazenados


No include F01 são definidas as sub- os módulos dos PAIs.
rotinas (FORMs) utilizados nos módulos,
etc…
Lógica de processamento

STATUS GUI
 Onde pode ser customizada as barras de menu, de botões e teclas de função.

TITLE GUI
• Onde é modificado os nomes/’título das telas.
Lógica de processamento

 Estes eventos são definidos para a criação no PBO no MODULE STATUS...


gerado pela tela criada.
SCREEN PAINTER

Aciona o SCREEN PAINTER


para a edição da tela
SCREEN PAINTER

Elementos disponíveis
para a tela

Propriedades
de cada
objeto

Área para
desenho da tela
SCREEN OBJECTS

 É qualquer elemento da tela dentro do R/3 que permite o usuário interagir com programa ABAP.
Segue abaixo alguns exemplos:

• SCREEN
• TITLE BAR
• TEXT FIELD
• INPUT/ OUTPUT FIELD
• STATUS ICON
• GROUP BOX
• RADIO BUTTON AND CHECKBOX
• PUSHBUTTON
• SUBSCREEN
• TABSTRIP CONTROL
• TABLE CONTROL
• GUI STATUS
• LIST
• SELECTION-SCREEN
SCREEN OBJECTS

Labels
Edits
Checkbutton
Radiobutton
Button
TabStrip
TabStrip (assistente)
Frame

TabControl
SCREEN OBJECTS

Atribuição do nome

Conteúdo

Atribuição de um Ícone

Tamanho do Campo

Atribuição de um código de retorno


(Exemplo: botão).
É detectado pela variável de sistema SY-UCOMM

Ajuda de Pesquisa (SEARCH HELP)


Comandos

 SET SCREEN XX - substitui temporariamente o parâmetro Next Screen;

 CALL SCREEN XX - chama a tela mas após o processamento da tela chamada, retorna
para o próximo comando depois do call screen;

LEAVE SCREEN - pode ser usado em conjunto ou não com SET SCREEN;

 LEAVE TO SCREEN XX - é utilizado quando se deseja ir imediatamente para a tela


informada no comando;

LEAVE PROGRAM - Para sair do programa;

 SET CURSOR FIELD ... - Posicionar o cursor em um determinado campo;

Variável de sistema SY-DYNNR contém o número da tela em tempo de runtime.


Comandos

• Consistência para entrada de dados


PROCESS AFTER INPUT.

FIELD screen-field
MODULE checa_cont.

MODULE chec_cont.
MESSAGE E....
ENDMODULE.
• Consistência para Grupo de Campos

PROCESS AFTER INPUT.


CHAIN.
FIELD: screen-field1, screen-field2, screen-field3.
MODULE checa_cont.
ENDCHAIN.

MODULE chec_cont.
.....
MESSAGE E.... ( exemplos de message no help )
ENDMODULE.
Tabela de sistema: SCREEN
 É inicializada no PBO de cada tela.
 É manipulável como se fosse uma tabela interna, mas não necessita ser declarada.

Exemplo:

LOOP AT SCREEN. Segue abaixo alguns campos:


IF SCREEN-GROUP1 = ‘SEL’.
SCREEN-INPUT = 1. SCREEN-NAME
ENDIF. SCREEN- GROUP1
IF SCREEN-NAME = ‘SFLIGHT-CARRID’. SCREEN-GROUP2
SCREEN-INVISIBLE = 1. SCREEN-GROUP3
ENDIF. SCREEN-GROUP4
ENDLOOP. SCREEN-LENGHT
SCREEN-INPUT
SCREEN-OUTPUT
SCREEN-REQUIRED
SCREEN-INTENSIFIED
SCREEN-INVISIBLE
SCREEN-ACTIVE
SUBSCREEN

A SUBSCREEN é uma área na Tela onde podemos variar os


campos conforme a necessidade, não deixando fixo os campos
numa tela e não havendo necessidade de replicar alguns campos
e várias telas.

Podemos dividir a definição da SUBSCREEN em 2 Partes:


 Tela de Origem: onde definimos uma área específica para
chamada da Subtela.

 SUBSCREEN: Tela onde serão definidos os campos da Subtela.

216
SUBSCREEN

Na criação da Tela em que será feita a referência à Subtela, criamos uma área
específica para esta Subtela.

Área para Subtela

Botão para Criar a


Área para Subtela

217
SUBSCREEN

 Definições de SUBCREEN

A Subtela (ou
Subscreen) é definida
nas características da
Tela.

218
SUBSCREEN

 Tela de Origem
Na PBO (PROCESS BEFORE OUTPUT) deverá existir um comando para a execução desta
subtela, sendo:
CALL SUBSCREEN sub1 INCLUDING programa dynpronr.
SUB1 – Seria o nome da área definida para a SUBSCREEN
PROGRAMA – Nome do Programa onde se encontra a SUBSCREEN. Normalmente, se refere
ao mesmo programa da Tela Normal
DYNPRONR – Número da SUBSCREEN a ser executada
Quando este comando é executado, a PBO desta SUBSCREEN é executada, com todas as
rotinas definidas nela.
Na PAI (PROCESS AFTER INPUT) deverá existir um comando para a execução desta
SUBSCREEN, sendo:
CALL SUBSCREEN sub1.
Onde: SUB1 – Seria o nome da área definida para a SUBSCREEN (como na PBO)
Quando este comando é executado, a PAI desta SUBSCREEN é executada, com todas as
rotinas definidas nela.
A SUBSCREEN não tem PF-STATUS definido, utiliza-se as definições da Tela de Origem, de
onde está sendo executada a SUBSCREEN.
219
TABLE CONTROL

Opção para Criar


Table Control
TABLE CONTROL

 Definição de Campos na TABLE CONTROL


Os campos devem ser incluídos dentro da Table Control. Se for utilizado a opção de
busca de campos do Banco de Dados ( ), é incluído automaticamente o campo de
Entrada de Dados e o cabeçalho do Campo.

221
TABLE CONTROL
Change and save table
Change column width settings
Mark and swap
columns

FROM TO DEPART ARRIVE

Mark
rows

Automatic horizontal and


vertical scrolling
TABLE CONTROL

 Atributos da Table Control


Nos Atributos da Table Control existem algumas
informações que podem ser úteis, conforme a necessidade
do desenho da Table Control.
Define se os campos terão
Título

Define se a Table Controle


terá Título

Define se a Table Control terá Linhas


Verticais e Horizontais separando os
Campos

Define se as Linhas e Colunas terão


marcador, e se serão Simples ou
Múltiplas

223
TABLE CONTROL

Declaração da Table Control


no Include TOP

Loop para carregar


dados na Table Control

Loop (obrigatório) da Table Control, quando utilizar


a seleção é necessário jogar o module dentro do loop.
Para tratamento da linha selecionada
TABSTRIP

 Apresenta de forma fácil e amigável de informações de um mesmo contexto separados em


diversas abas.
TABSTRIP

 Componentes da TABSTRIP :

Scroolbar for more tab pages

Current tab title


tab List of all tab pages, current page is
indicated

Subscreen area Tab border


CONTEÚDO (
subscreen)
TABSTRIP

Criando um TABSTRIP:

 No SCREEN PAINTER, criar um TABSTRIP e atribuir um nome;


 Este nome deverá ser declarado com Comando CONTROLS no include TOP:
CONTROLS: ZTABSTRIP TYPE TABSTRIP;
 O campo ACTIVETAB conterá o nome do código de função definida para cada pasta,
os demais campos são de uso de sistema.

Definir a chamada das SUBSCREENs criadas


na tela principal;
TAB STRIP/TABLE CONTROL (Via Assistente)

Exemplo:
ABAP/4
BDC SESSION

Todos os Direitos Reservados © Valores Corporativos Softtek S.A. de C.V. 2011. Interno. 229
BDC SESSION

 ABAP/4 tem uma técnica de programação para a colocação de dados


dentro do SAP conhecida como Batch Data Communication Session
(BDC Session).

Passos para criação de uma BDC Session:

• Identificar as telas que a transação processará;


• Escrever o programa em ABAP para gerar a tabela de BDC que
submeterá os dados na transação;
• Submeter a tabela de BDC para o sistema em modo batch Input ou
através do comando CALL TRANSACTION;
BDC SESSION

• Esta Técnica é realizada através da simulação de entradas do usuário nas telas de


transações existentes. As telas podem não ser apresentadas, sendo executadas em
segundo plano. Todas as verificações, validações, regras, enhancements da transação
são executadas normalmente em um processo de Batch Input.
• É uma ótima maneira de se realizar upload de dados para o sistema SAP; foi criada
em um período pré BAPIs. Atualmente a SAP disponibilizou BAPIs para as mais
diversas funcionalidades. BAPI deve ser a primeira opção para o desenvolvedor
prover uma solução, só se não existir uma BAPI para o processo deve-se utilizar Batch
Input. Existem outras formas de se inserir dados em massa são LSMW e IDocs.
BDC SESSION

Não realizar atualização direta dos dados


externos
Sistema Externo nas tabelas da base de dados SAP.
(Legado)

Sessão de
BATCH INPUT

Programa

Banco de Dados
SAP
BDC SESSION

Dados
Externos

Programa
ABAP/4

Batch Call
BAPI
Input Transaction

SAP
BDC SESSION

Modo de execução

Visível Mostra Passo a Passo a transação

Exibir Apenas Erro Mostra apenas a transação quando der erro

Background Não mostra nada


BDC SESSION

Função OKCODE
Sai da transação corrente, marca como incorreta /n
Apaga o dado corrente na transação /bdel
Sai da transação e marca como incorreta /bend
Muda de “Display Error...” para “Foreground” /bda
Muda de “Foreground” para “Display Errors...” /bde
BDC SESSION

Batch Input Call Transaction

Código de Retorno Não Sim

Log de Erro Sim Não

Processamento 2 Fases Imediato


Transação SHDB
Transação SHDB
Transação SHDB

Aperte ENTER
Transação SHDB
Transação SHDB
Mapeamento de tela

Programa Tela Início Nome do Campo Valor do Campo

<Programa> <Número 1> X

<Campo 01> <Valor 01>

<Campo 05> <Valor 05>

<Programa> <Número 7> X

<Campo 11> <Valor 11>

<Campo 02> <Valor 02>


Mapeamento de tela

DATA t_bdc TYPE TABLE OF bdcdata.

* Mapeia tela inicial


PERFORM z_insere_bdc USING: 'X' 'SAPMF02B' '0100',
' ' 'BDC_CURSOR' 'BNKA-BANKL',
' ' 'BDC_OKCODE' '/00',
' ' 'BNKA-BANKS' wa_banco-banks,
' ' 'BNKA-BANKL' wa_banco-bankl.

* Mapeia dados e comando Salvar


PERFORM z_insere_bdc USING: 'X' 'SAPMF02B' '0110',
' ' 'BDC_CURSOR' 'BNKA-BRNCH',
' ' 'BDC_OKCODE' '=UPDA',
' ' 'BNKA-BANKA' wa_banco-banka,
' ' 'BNKA-PROVZ' wa_banco-provz,
' ' 'BNKA-STRAS' wa_banco-stras,
' ' 'BNKA-ORT01' wa_banco-ort01,
' ' 'BNKA-BRNCH' wa_banco-brnch.
Mapeamento de tela

FORM z_insere_bdc USING p_dynbegin


p_field
p_value.

DATA: wa_bdc TYPE bdcdata.


CLEAR wa_bdc.

IF p_dynbegin EQ 'X'.
wa_bdc-dynbegin = 'X'.
wa_bdc-program = p_field.
wa_bdc-dynpro = p_value.
ELSE.
wa_bdc-fnam = p_field.
wa_bdc-fval = p_value.
ENDIF.

APPEND wa_bdc TO t_bdc.


ENDFORM. " Z_INSERE_BDC
CALL TRANSACTION

Call Transaction <Código da Transação>

USING <Tabela BDC>


MODE <Modo de Visualização>
UPDATE <Modo de Atualização>
MESSAGES INTO <Tabela de Mensagem>

Modo de Visualização
A - Visualiza Tudo <default>
E - Visualiza apenas se der erro
N - Não Visualiza nada
Modo de Atualização
S - Modo Síncrono (Espera terminar)
A - Modo Assíncrono <default>
CALL TRANSACTION

SY-SUBRC

0 - Sucesso
<1000 - Erro no Programa do SAP
>1000 - Erro no Processamento
(Ver campos de Sistema)

Campos de Sistema
SY-MSGID - Classe da Mensagem
SY-MSGTY - Tipo da Mensagem (E, I, W, S, A)
SY-MSGNO - Número da Mensagem
SY-MSGV1 - Variável de Mensagem 1
SY-MSGV2 - Variável de Mensagem 2
SY-MSGV3 - Variável de Mensagem 3
SY-MSGV4 - Variável de Mensagem 4
BATCH INPUT

ABRIR SESSÃO DE BATCH INPUT

INSERIR DADOS DA TRANSAÇÃO

FECHAR SESSÃO DE BATCH INPUT


BATCH INPUT
BATCH INPUT

CALL FUNCTION ‘BDC_OPEN_GROUP’


EXPORTING
Client * = <Client> (Sy-Mandt)
Group * = <Nome da Sessão>
Holddate = <Data>
Keep * = Flag de Deleção
User * = <Usuário BDC> (Sy-Uname)
EXCEPTIONS

* - Parâmetros Obrigatórios

* - Default = ‘ ’ (apagar a sessão)


BATCH INPUT

CALL FUNCTION ‘BDC_INSERT’


EXPORTING

Tcode = <Código da Transação>

TABLES

Dynprotab = <Tabela BDC>

EXCEPTIONS

Internal_Erro =1
Not_Open =2
Queue_Error =3
Tcode_Invalid =4
Transação SM35
Transação SM35
ABAP/4 BAPI

Todos os Direitos Reservados © Valores Corporativos Softtek S.A. de C.V. 2011. Interno. 253
BAPI

O que é BAPI?

• Business Application Program Interface.


• BAPI – Módulo de Função(RFC)

BAPI – Atualização de dados nas tabelas

X
Batch-Input – Atualização de dados via transação
BAPI

• Imagine a situação onde desenvolvemos um sistema onde seja possível criar ordens
de venda a partir de um dispositivo móvel e queremos integrá-lo ao SAP. Quando o
vendedor fizer uma venda é necessário criar uma ordem de venda no SAP. A VBAK é
a tabela onde é registrada parte dos dados da ordem de venda, mas não temos
segurança alguma para ir diretamente na tabela e executar um comando INSERT. Isto
porque além desta tabela também devem existir outra dúzia de tabelas
correlacionadas onde é necessário fazer alguma operação para que o pedido seja
criado corretamente.
• O sistema SAP é altamente integrado e realizar operações diretamente em tabelas
standard são de alto risco.
• São casos como este que devemos usar as BAPI. No caso da criação de ordem de
venda devemos usar a função BAPI_SALESORDER_CREATEFROMDAT2 ou outra
equivalente. O sistema SAP prove uma infinidade de BAPIs que realizam as mais
diversas operações no sistema, podemos pesquisá-las na transação chamada BAPI e
verificar seus parâmetros de entrada, saída e documentação.
• Utilizando nosso exemplo, toda e qualquer transação que cria uma ordem de
venda precisa necessariamente usar uma BAPI. É desta forma que o SAP garante a
consistência dos dados de pedido.
BAPI - Exemplo

CALL FUNCTION 'BAPI_BANK_CREATE'


EXPORTING
bank_ctry = v_bank_ctry
bank_key = v_bank_key
bank_address = wa_address
IMPORTING
return = wa_return.

IF sy-subrc = 0.
CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
EXPORTING
wait ='X'.
ELSE.
CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'.
ENDIF.
CLEAR: wa_banco, v_bank_ctry, v_bank_key, wa_address.
Transação BAPI
ABAP/4
Enhancements

Todos os Direitos Reservados © Valores Corporativos Softtek S.A. de C.V. 2011. Interno. 258
Enhancements

• Enhancements são a forma que a SAP criou para que possamos criar ou modificar
funcionalidades já existentes em aplicações standard da SAP.
• Quando você tenta modificar um programa standard, é solicitada uma chave de
acesso especial, isso traz como consequência a perda de garantia do programa
modificado não sendo mais atendido pelo suporte da SAP; porém se utilizarmos
enhancements, não é requisitada uma chave de acesso especial e podemos realizar
nossa implementação com garantia.
• Existem cinco formas de implementarmos enhancements no sistema SAP:
• User Exits
• Menu Exits
• Screen Exits
• BADIs
• Enhancement Framework
Enhancements – User Exists

• User Exits permitem a modificação do comportamento de transações standard. A


SAP provê muitas sub-rotinas onde implementamos nosso código e validações
dentro das mesmas.
• As transações SMOD e CMOD são as responsáveis em criar projetos, criar
ampliações, e onde podemos pesquisar as exits.
• Na transação SMOD temos acesso a todas as ampliações que a SAP provê, nesta
transação também podemos acessar todos os componentes de uma ampliação, que
são as funções, áreas de telas (screem exits), includes e etc...
• Na transação CMOD criamos o projeto que agrupa varias ampliações e realiza o
controle de ativar ou desativar essas ampliações.
• Existem algumas maneiras de localizar uma exit, podemos utilizar programas que
varrem as transações em busca do comando CALL CUSTOMER-FUNCTION, este
comando chama as funções registradas como componentes na SMOD. Também
podemos buscar exits utilizando o F4 na transação SMOD, ao fazer isso a janela de
pesquisa irá abrir e podemos utilizar palavras chaves para encontrar a exit desejada.
Enhancements – User Exists
Enhancements – Menu Exists / Screen Exits

• Menu Exits - São enhacements disponíveis para atuarmos em menus de tela do


sistema. Podemos trocar o texto do menu e sua lógica. O código de função de menu
exits sempre começa com o sinal ‘+’ e são encontrados como componentes na
transação SMOD.

• Screen Exits - Utilizado para adicionar campos de seleção em trechos de telas


standard. Screen Exits são componentes encontrados através da transação SMOD e
ativados após serem vinculados a um projeto pela transação CMOD.
Enhancements – BADI

• Podemos definir uma BADI como um objeto definido por classes, métodos,
atributos de entrada e saída. Podemos realizar múltiplas implementações da mesma
BADI.
• A transação SE18 exibe as BADIs disponíveis para implementar e na transação SE19
criamos novas implementações das BADIs.
Enhancements – BADI

• Para pesquisarmos se um programa


standard possui uma BADI durante
uma determinada ação, podemos
acessar a transação SE24, colocar
classe CL_EXITHANDLER, selecionar o
método GET_INSTANCE e colocar um
BREAK-POINT utilizando o botão de
“definir ponto de parada” na barra de
menu.

• Acesse a transação que deseja encontrar a BADI e realize o processo, quando


ocorrer o ponto de seu interesse e o debugger parar no BREAK-POINT que inseriu,
observe o valor da variável EXIT_NAME, ela terá o nome da BADI disponível. Assim
acesse a transação SE18 e verifique se esta BADI possui os campos e métodos que
você precisa.
• BADIs possuem a limitação dos campos de entrada e de saída que podemos
trabalhar; já possuem estes campos definidos deixando engessada as variáveis
disponíveis para se trabalhar.
Enhancements – Enhancement Framework

• Esta é uma forma de implementarmos nosso código diretamente no código


standard. Porém não podemos inserir em qualquer ponto, o sistema indica os pontos
onde podemos inserir código ABAP.
• Para pesquisar enhanchements points devemos acessar o programa standard pela
transação SE80, acessar o menu Processar > Operações de Ampliação > Visualizar
pontos de ampliação implícitos.

Linha indicativa do ponto onde é possível adicionar código


Enhancements – Enhancement Framework

• Para criar o enhancement point aperte SHIFT + F4, selecione o ponto do


enhancement e clique em Operações > Criar.
• Clique em Codificar, selecione a implementação ou clique no ícone “novo”.
Implemente seu código e clique no ícone “ativar ampliações”.
• Para eliminar uma implementação, acesse a transação SE80, clique no botão
“processar objeto”; escolha a aba “ampliações” e informe o nome da implementação
que deseja eliminar. Clique no ícone de “exibir lista de objetos” no menu, selecione a
implementação e clique com o botão direito, escolha “eliminar”.
Todos os Direitos Reservados © Valores Corporativos Softtek S.A. de C.V. 2011. Interno. 267

Você também pode gostar