0% acharam este documento útil (0 voto)
714 visualizações265 páginas

ABAP - Curso Completo PDF

O documento apresenta um workshop sobre ABAP no SAP, abordando tópicos como dicionário de dados, criação de tabelas, programas, parâmetros de seleção, eventos, ALV, module pool, debug, exits, BAPI e performance. O índice aponta seções sobre introdução ao SAP, dicionário de dados, exercícios, ajuda para pesquisa, visões, sapscript e ferramentas de análise e monitoramento.

Enviado por

r.borges
Direitos autorais
© © All Rights Reserved
Levamos muito a sério os direitos de conteúdo. Se você suspeita que este conteúdo é seu, reivindique-o aqui.
Formatos disponíveis
Baixe no formato PDF, TXT ou leia on-line no Scribd
0% acharam este documento útil (0 voto)
714 visualizações265 páginas

ABAP - Curso Completo PDF

O documento apresenta um workshop sobre ABAP no SAP, abordando tópicos como dicionário de dados, criação de tabelas, programas, parâmetros de seleção, eventos, ALV, module pool, debug, exits, BAPI e performance. O índice aponta seções sobre introdução ao SAP, dicionário de dados, exercícios, ajuda para pesquisa, visões, sapscript e ferramentas de análise e monitoramento.

Enviado por

r.borges
Direitos autorais
© © All Rights Reserved
Levamos muito a sério os direitos de conteúdo. Se você suspeita que este conteúdo é seu, reivindique-o aqui.
Formatos disponíveis
Baixe no formato PDF, TXT ou leia on-line no Scribd

Consystem

Informática WORKSHOP ABAP

ÍNDICE
Introdução ao SAP.....................................................................................................3
Dicionário de dados .................................................................................................48
Criação de domínios ................................................................................................49
Criação de elementos de dados................................................................................50
Criação de tabelas ....................................................................................................52
EXERCICIO - Dicionário de Dados .......................................................................55
Ajuda para pesquisa.................................................................................................59
Objetos de bloqueio .................................................................................................71
Visões ......................................................................................................................72
PROGRAMAS ........................................................................................................73
Parâmetros de seleção - Parameter ..........................................................................76
Parâmetros de Seleção – Select-Options .................................................................77
EXERCÍCIO - Report .............................................................................................78
EXERCÍCIO 2 – Report ..........................................................................................82
EVENTOS ...............................................................................................................83
EXERCÍCIO – Report - Evento ..............................................................................85
REPORT zcalculadora2. .........................................................................................88
Listas X ALV ..........................................................................................................90
Exemplo de programa ALV ....................................................................................92
Module Pool ............................................................................................................97
PROCESS BEFORE OUTPUT...............................................................................98
PROCESS AFTER INPUT .....................................................................................99
Transação ...............................................................................................................101
Passo a Passo para criação de um module pool.....................................................103
Debug ....................................................................................................................162
Exits .......................................................................................................................171
Exemplo field exit para o campo centro (elemento de dados WERKS_D) ..........175
Badi .......................................................................................................................184
Sapscript ................................................................................................................187
Estrutura de Chamada e Controle do SAPSCRIPT ...............................................188
O formulário ..........................................................................................................189
Copiando um formulário .......................................................................................190
Execute a transação SE71......................................................................................190
Partes de um formulário ........................................................................................195
Janelas de página – É o local onde as janelas são associadas às páginas. .............202
Criação de sapscript - Exemplo .............................................................................208
Programas de impressão ........................................................................................221
Customizações .......................................................................................................226
Comandos de Controle ..........................................................................................227
Formatando Opções ...............................................................................................228
BAPI / Batch Input ................................................................................................229
Batchinput .............................................................................................................232
Geração do SHDB .................................................................................................234
Performance...........................................................................................................242
Comunicação entre Application Server e Database Server ...................................244
Seleções de múltiplas tabelas ................................................................................248

Consystem Informática Ltda Página 1 de 265


Consystem
Informática WORKSHOP ABAP

Cláusula “For All Entries”.....................................................................................249


Cláusula “Inner Join” ............................................................................................250
Cláusula “Left Outer Join” ....................................................................................251
ST02 - System Workload Analysis: ......................................................................256
ST04 - Cursor Cash ...............................................................................................257
SE30 - Runtime Analisys ......................................................................................259
SM50 - Process Overview .....................................................................................261

Consystem Informática Ltda Página 2 de 265


Consystem
Informática WORKSHOP ABAP

Introdução ao SAP

Consystem Informática Ltda Página 3 de 265


Consystem
Informática WORKSHOP ABAP

Consystem Informática Ltda Página 4 de 265


Consystem
Informática WORKSHOP ABAP

Consystem Informática Ltda Página 5 de 265


Consystem
Informática WORKSHOP ABAP

Consystem Informática Ltda Página 6 de 265


Consystem
Informática WORKSHOP ABAP

Consystem Informática Ltda Página 7 de 265


Consystem
Informática WORKSHOP ABAP

Consystem Informática Ltda Página 8 de 265


Consystem
Informática WORKSHOP ABAP

Consystem Informática Ltda Página 9 de 265


Consystem
Informática WORKSHOP ABAP

Consystem Informática Ltda Página 10 de 265


Consystem
Informática WORKSHOP ABAP

Consystem Informática Ltda Página 11 de 265


Consystem
Informática WORKSHOP ABAP

Consystem Informática Ltda Página 12 de 265


Consystem
Informática WORKSHOP ABAP

Consystem Informática Ltda Página 13 de 265


Consystem
Informática WORKSHOP ABAP

Consystem Informática Ltda Página 14 de 265


Consystem
Informática WORKSHOP ABAP

Consystem Informática Ltda Página 15 de 265


Consystem
Informática WORKSHOP ABAP

Consystem Informática Ltda Página 16 de 265


Consystem
Informática WORKSHOP ABAP

Consystem Informática Ltda Página 17 de 265


Consystem
Informática WORKSHOP ABAP

Consystem Informática Ltda Página 18 de 265


Consystem
Informática WORKSHOP ABAP

Consystem Informática Ltda Página 19 de 265


Consystem
Informática WORKSHOP ABAP

Consystem Informática Ltda Página 20 de 265


Consystem
Informática WORKSHOP ABAP

Consystem Informática Ltda Página 21 de 265


Consystem
Informática WORKSHOP ABAP

Consystem Informática Ltda Página 22 de 265


Consystem
Informática WORKSHOP ABAP

Consystem Informática Ltda Página 23 de 265


Consystem
Informática WORKSHOP ABAP

Consystem Informática Ltda Página 24 de 265


Consystem
Informática WORKSHOP ABAP

Consystem Informática Ltda Página 25 de 265


Consystem
Informática WORKSHOP ABAP

Consystem Informática Ltda Página 26 de 265


Consystem
Informática WORKSHOP ABAP

Consystem Informática Ltda Página 27 de 265


Consystem
Informática WORKSHOP ABAP

Consystem Informática Ltda Página 28 de 265


Consystem
Informática WORKSHOP ABAP

Consystem Informática Ltda Página 29 de 265


Consystem
Informática WORKSHOP ABAP

Consystem Informática Ltda Página 30 de 265


Consystem
Informática WORKSHOP ABAP

Consystem Informática Ltda Página 31 de 265


Consystem
Informática WORKSHOP ABAP

Consystem Informática Ltda Página 32 de 265


Consystem
Informática WORKSHOP ABAP

Consystem Informática Ltda Página 33 de 265


Consystem
Informática WORKSHOP ABAP

Consystem Informática Ltda Página 34 de 265


Consystem
Informática WORKSHOP ABAP

Consystem Informática Ltda Página 35 de 265


Consystem
Informática WORKSHOP ABAP

Consystem Informática Ltda Página 36 de 265


Consystem
Informática WORKSHOP ABAP

Consystem Informática Ltda Página 37 de 265


Consystem
Informática WORKSHOP ABAP

Consystem Informática Ltda Página 38 de 265


Consystem
Informática WORKSHOP ABAP

Consystem Informática Ltda Página 39 de 265


Consystem
Informática WORKSHOP ABAP

Consystem Informática Ltda Página 40 de 265


Consystem
Informática WORKSHOP ABAP

Consystem Informática Ltda Página 41 de 265


Consystem
Informática WORKSHOP ABAP

Consystem Informática Ltda Página 42 de 265


Consystem
Informática WORKSHOP ABAP

Consystem Informática Ltda Página 43 de 265


Consystem
Informática WORKSHOP ABAP

Consystem Informática Ltda Página 44 de 265


Consystem
Informática WORKSHOP ABAP

Consystem Informática Ltda Página 45 de 265


Consystem
Informática WORKSHOP ABAP

Consystem Informática Ltda Página 46 de 265


Consystem
Informática WORKSHOP ABAP

Consystem Informática Ltda Página 47 de 265


Consystem
Informática WORKSHOP ABAP

Dicionário de dados

O dicionário abap é utilizado para descrever e gerenciar todas as definições de dados


usadas pelo sistema.

Transação: SE11

Consystem Informática Ltda Página 48 de 265


Consystem
Informática WORKSHOP ABAP

Criação de domínios

Um domínio descreve os atributos formais de um campo, como formato (caractere,


numérico, data...) e o tamanho.

Para criar um domínio, execute a transação SE11 e clique em Criar

Informe os parâmetros Categoria de dados e número de posições

Salve e ative o domínio.


Consystem Informática Ltda Página 49 de 265
Consystem
Informática WORKSHOP ABAP

Criação de elementos de dados

Um elemento de dados contém informações sobre um determinado campo como, por


exemplo, o tipo de dado (domínio), o help on-line (F1), a lista de valores possíveis para
o campo (matchcode) e a descrição funcional do campo.

Para criar um elemento de dados, execute a transação SE11, marque Categoria dados,
informe o nome do elemento de dados e clique em Criar.

Na tela seguinte, marque Elemento de dados e clique em OK

Consystem Informática Ltda Página 50 de 265


Consystem
Informática WORKSHOP ABAP

Preencha a descrição do elemento de dados e informe o domínio onde o tipo de dados


deve ser definido. Em seguida clique na guia Denomin.Campo

Na guia Denomin.campo informe as descrições, breve, média e longa e o título do


elemento de dados. Salve e ative o elemento de dados.

Consystem Informática Ltda Página 51 de 265


Consystem
Informática WORKSHOP ABAP

Criação de tabelas

Pool de tabelas
É possível utilizar as tabelas pool para arquivar dados de controle (por exemplo,
seqüências de telas, parâmetros de programa ou dados temporários). É possível agrupar
várias tabelas pool em um pool de tabela. Ao pool de tabela corresponde uma tabela
física no banco de dados, na qual estão arquivados todos os registros das tabelas pool
atribuídas.

Tabela cluster
Em tabelas cluster é possível arquivar textos continuos como, por exemplo,
documentação. É possível agrupar várias tabelas cluster em um cluster de tabela. Nesta
categoria de tabela, são agrupadas várias linhas lógicas de diferentes tabelas em um
registro físico. Desse modo, é possível uma gravação por objeto ou um acesso por
objeto. Como condição prévia para o agrupamento de tabelas em clusters, é necessário
que exista uma correspondência pelo menos entre partes da sua chave. Várias tabelas
cluster são gravadas em uma tabela correspondente no banco de dados.

Tabela transparente
Existe uma tabela física no banco de dados para uma tabela transparente. Os nomes da
tabela física e da definição lógica de tabela são coincidentes no ABAP Dictionary.
Todos os dados empresariais e dados de aplicação são arquivados em tabelas
transparentes.

Para criar uma tabela transparente, execute a transação SE11, informe o nome da tabela
e clique em Criar.

Consystem Informática Ltda Página 52 de 265


Consystem
Informática WORKSHOP ABAP

Informe a descrição, Classe de entrega, Tipo de atualização e clique em Campos

Na guia de Campos informe o nome dos campos definindo-os através dos respectivos
elementos de dados. O primeiro campo deve ser sempre o mandante definido pelo
elemento de dados MANDT.

Consystem Informática Ltda Página 53 de 265


Consystem
Informática WORKSHOP ABAP

Salve a tabela. Não ative ainda. Clique em Configurações técnicas. Preencha a categoria
de dados e categoria de tamanho

Salve novamente e clique em Voltar para retornar à tela principal de atualização de


tabelas. Ative a tabela

Consystem Informática Ltda Página 54 de 265


Consystem
Informática WORKSHOP ABAP

EXERCICIO - Dicionário de Dados

Domínio

Objetivo: Criação dos domínios que serão utilizados durante todo o treinamento.

Criar os domínios abaixo com suas respectivas características:

NOME DESCRIÇÃO TIPO DE TAMANHO


DADO
ZD_XX_NUM05 Numérico – 5 NUMC 5
ZD_XX_CHAR50 Caracter – 50 CHAR 50
ZD_XX_CHAR10 Caracter – 10 CHAR 10
ZD_XX_DEC10V2 Decimal – 10 DEC 10,2
inteiros e 2
decimais
ZD_XX_DATA Campo data DATS 8
ZD_XX_CHAR01 Caracter - 1 CHAR 1

Consystem Informática Ltda Página 55 de 265


Consystem
Informática WORKSHOP ABAP

Elemento de dados

Objetivo: Criação dos elementos de dados.

Criar os elementos de dados descritos abaixo seguindo as orientações da tabela:

NOME DESCRI DOMÍNIO BREVE MÉDIA LONGA TÍTULO


ÇÃO
ZE_XX_CODDEP Código do ZD_XX_NUM05 Cód. Cód. Cód. Código do
Dependente Dep. Depend. dependente dependente
ZE_XX_NOME Nome ZD_XX_CHAR50 Nome Nome Nome Nome
ZE_XX_CODFUN Código do ZD_XX_NUM05 Cód. Cód. Código Código do
Funcionário Func. Funcion. Funcionário Funcioná
rio
ZE_XX_CARGO Cargo ZD_XX_CHAR10 Cargo Cargo Cargo Cargo
ZE_XX_SALARIO Salário ZD_XX_DEC10V2 Salário Salário Salário Salário
ZE_XX_DTADM Data de ZD_XX_DATA Dt. Adm. Dt. Data Data de
admissão Admissão Admissão Admissão
ZE_XX_DTNASC Data de ZD_XX_DATA Dt. Nasc. Dt. Data Data de
Nascimento Nascimen Nascimento Nascimen
to to
ZE_XX_GRAUPR Grau de ZD_XX_CHAR01 Grau Par. Grau Grau Grau de
parentesco Parent. Parentesco Parentesco

Consystem Informática Ltda Página 56 de 265


Consystem
Informática WORKSHOP ABAP

Tabela

Objetivo: Criar as tabelas de Dependente e Funcionário que serão utilizadas durante


todo o treinamento

Criar as seguintes tabelas abaixo observando a definição das colunas

Tabela ZTXX_FUNC

- Descrição: “Tabela de Funcionários”


- Classe de Entrega: “A”
- Marcar o check box “Atual. Tab. Permitida”

- Definir as seguintes colunas

NOME CAMPO CHAVE ELEMENTO DE DADOS


MANDT √ MANDT
CODFUN √ ZE_XX_CODFUN
NOME ZE_XX_NOME
CARGO ZE_XX_CARGO
SALARIO ZE_XX_SALARIO
DATA_ADM ZE_XX_DTADM

- Salvar
- Clicar em Opções técnicas e preencher tipo de dados com “USER1” e categoria de
tamanho com “0”.
- Salvar. Clicar em “Voltar”.
- Ativar a tabela

Consystem Informática Ltda Página 57 de 265


Consystem
Informática WORKSHOP ABAP

Tabela ZTXX_DEP

- Descrição: “Tabela de Dependentes”


- Classe de Entrega: “A”
- Marcar o check box “Atual. Tab. Permitida”

- Definir as seguintes colunas

NOME CAMPO CHAVE ELEMENTO DE DADOS


MANDT √ MANDT
CODFUN √ ZE_XX_CODFUN
CODDEP √ ZE_XX_CODDEP
NOME ZE_XX_NOME
DATA_NASC ZE_XX_DTNASC
PARENTESCO ZE_XX_GRAUPR

- Salvar
- Clicar em Opções técnicas e preencher “tipo de dados” com “USER1” e “categoria de
tamanho” com “0”.
- Salvar. Clicar em “Voltar”.
- Ativar a tabela

Consystem Informática Ltda Página 58 de 265


Consystem
Informática WORKSHOP ABAP

Ajuda para pesquisa

Uma ajuda para pesquisa é um objeto do ABAP Dictionary que permite definir as
entradas possíveis em um campo. É possível criar objetos para as novas tabelas criadas
ou ainda utilizar ajudas prontas (search help standard).

Para utilizar um matchcode standard é necessário descobrir o seu nome para associa-lo
ao campo desejado.
Existem várias formas para encontrarmos o matchcode:

Consystem Informática Ltda Página 59 de 265


Consystem
Informática WORKSHOP ABAP

1) No help do campo
- Colocar o cursor no campo desejado

- Pressionar F1 e Clicar no ícone da ferramenta

Consystem Informática Ltda Página 60 de 265


Consystem
Informática WORKSHOP ABAP

O matchcode será exibido

2) No campo da tabela no dicionário de dados


Entrar na transação SE11, informar o nome da tabela e clicar em Exibir

Consystem Informática Ltda Página 61 de 265


Consystem
Informática WORKSHOP ABAP

Clicar 2x sobre o campo desejado

O matchcode será exibido

Consystem Informática Ltda Página 62 de 265


Consystem
Informática WORKSHOP ABAP

3) No elemento de dados do campo


Entra na se11, exibir a tabela desejada e clicar 2x sobre o elemento de dados do campo

Na tela do elemento de dados clicar sobre a guia Características adicionais

Consystem Informática Ltda Página 63 de 265


Consystem
Informática WORKSHOP ABAP

O matchcode será exibido

4) No domínio do campo – Valores fixos


Entrar na se11, exibir a tabela desejada e clicar 2x sobre o elemento de dados do campo

Consystem Informática Ltda Página 64 de 265


Consystem
Informática WORKSHOP ABAP

Na tela do elemento de dados clicar 2x sobre o nome do domínio

Na tela do domínio clicar na guia Intervalo de valores

Consystem Informática Ltda Página 65 de 265


Consystem
Informática WORKSHOP ABAP

O matchcode será exibido

5) No domínio do campo – Tabela de valores


Entrar na se11, exibir a tabela, clicar 2x sobre o elemento de dados e em seguida clicar
2x sobre o domínio

Consystem Informática Ltda Página 66 de 265


Consystem
Informática WORKSHOP ABAP

Clicar na guia Intervalo de valores


O matchcode será exibido

Consystem Informática Ltda Página 67 de 265


Consystem
Informática WORKSHOP ABAP

6) Matchcode dinâmino
Entrar na transação onde se encontra o campo e pressionar F1 com o cursor sobre ele.

Na tela de help clicar no ícone da ferramenta

Consystem Informática Ltda Página 68 de 265


Consystem
Informática WORKSHOP ABAP

Na tela de informações técnicas, clicar 2x sobre o número da tela

Será exibido o código da tela

Consystem Informática Ltda Página 69 de 265


Consystem
Informática WORKSHOP ABAP

Rolar o código até encontrar o comando PROCESS ON VALUE-REQUEST. O


matchcode é construído a partir da programação da exibição dos valores

Consystem Informática Ltda Página 70 de 265


Consystem
Informática WORKSHOP ABAP

Objetos de bloqueio

O acesso simultâneo de vários usuários ao mesmo conjunto de dados, é controlado por


um mecanismo de bloqueio no sistema SAP. A definição e a liberação de bloqueios, são
efetuadas dentro dos programas, mediante a chamada de módulos de função gerados
automaticamente a partir da definição do objeto de bloqueio.

Ao ativar um objeto de bloqueio EVVBAKE, são gerados os módulos de função


ENQUEUE_ EVVBAKE (definição de bloqueios) e DEQUEUE_ EVVBAKE
(liberação de bloqueios).

Consystem Informática Ltda Página 71 de 265


Consystem
Informática WORKSHOP ABAP

Visões

Uma visão é uma representação lógica de uma ou várias tabelas. A visão não é
arquivada fisicamente, mas deriva de uma ou de várias tabelas.
A visão pode consistir em ocultar um ou vários campos de uma tabela (projeção) ou em
transferir apenas determinadas entradas de uma tabela para a visão (seleção).
As visões mais complexas podem envolver várias tabelas (JOIN). Através da definição
de visões, é possível gerar visões lógicas ajustadas na aplicação que permitem um
acesso direto aos dados. A estrutura deste tipo de visão é determinada através da
indicação das tabelas e campos implicados na visão.

Consystem Informática Ltda Página 72 de 265


Consystem
Informática WORKSHOP ABAP

PROGRAMAS

Reports são programas executáveis que podem servir a diferentes propósitos:


- Exibição de relatórios em tela
- Exbição de listas
- ALV
- Interfaces de carga ou extração de dados
- Consultas
- Algumas atualizações

Programas do tipo Report podem ser executados através da transação SE38 ou criando-
se uma transação.

Para criar um programa, entre na transação SE38, informe o nome do programa e clique
em Criar

Consystem Informática Ltda Página 73 de 265


Consystem
Informática WORKSHOP ABAP

Informe os atributos do programa. O Tipo de programa “1” define o programa como


Report. Clique em Gravar

Consystem Informática Ltda Página 74 de 265


Consystem
Informática WORKSHOP ABAP

Para executar o programa a partir do editor, salve, ative o programa e pressione F8.

Consystem Informática Ltda Página 75 de 265


Consystem
Informática WORKSHOP ABAP

Parâmetros de seleção - Parameter

Os parâmetros de entrada (PARAMETERS e SELECT-OPTIONS) criam uma tela com


critérios de seleção para serem utilizados como filtro pelo programa.
PARAMETERS
Este comando deve ser utilizado para criar um campo na tela para que o usuário possa
entrar um valor como filtro.

O exemplo

Produz como resultado

Consystem Informática Ltda Página 76 de 265


Consystem
Informática WORKSHOP ABAP

Parâmetros de Seleção – Select-Options

Este comando cria na tela um range de valores para serem utilizados como filtro pelo
usuário

O exemplo

Produz o resultado

Consystem Informática Ltda Página 77 de 265


Consystem
Informática WORKSHOP ABAP

EXERCÍCIO - Report

Criar um report que funcione como uma calculadora. O programa deverá pedir o
primeiro valor, o sinal, o segundo valor e quando o usuário executar o relatório consistir
se os campos foram informados e se o sinal é um valor válido. Em seguida deverá listar
na tela a operação completa da seguinte forma:

campo1 operador campo2 = resultado

O programa deverá exibir a seguinte tela.

Consystem Informática Ltda Página 78 de 265


Consystem
Informática WORKSHOP ABAP

Quando o usuário preencher os parâmetros de entrada e executar o relatório, exibir uma


tela semelhante à que se segue:

Listar o primeiro valor, o sinal, o segundo valor, um “igual” e o resultado da operação.

Consystem Informática Ltda Página 79 de 265


Consystem
Informática WORKSHOP ABAP

• Através da transação “SE38” criar o report com o nome de


ZRXX_CALCULADORA.

• Título: “Calculadora”
• Categoria: “1 – Programa executável”
• Status: “K – Programa de clientes produtivo”
• Aplicação: “* – Válido para várias aplicações”
• Grupo de autorizações: Em branco
• Banco de dados lógico: Em branco
• Versão tela seleção: Em branco
• Bloqueio do editor: Em branco
• Aritmética em ponto fixo: Marcado
• Início via variante: Em branco

• Gravar
• Se for solicitada a classe de desenvolvimento e request, definir como “Objeto local”
• Incluir o código abaixo no report criado.

REPORT zwander.

* Variável para calcular o resultado


DATA v_total TYPE p DECIMALS 2.

* Comando que monta uma tela para entrada de dados


* do usuário
PARAMETERS: p_op1 TYPE p DECIMALS 2,
p_sinal(1) TYPE c,
p_op2 TYPE p DECIMALS 2.

* Evento que é disparado quando o usuário preenche a tela e


* executa o programa através da tecla "F8"
START-OF-SELECTION.

* Efetua o cálculo
IF p_sinal = '+'.
v_total = p_op1 + p_op2.
ELSE.
IF p_sinal = '-'.
v_total = p_op1 - p_op2.
ELSE.
IF p_sinal = '*'.
v_total = p_op1 * p_op2.
ELSE.
IF p_sinal = '/'.
v_total = p_op1 / p_op2.
ENDIF.
ENDIF.
ENDIF.
ENDIF.
Consystem Informática Ltda Página 80 de 265
Consystem
Informática WORKSHOP ABAP

* Imprime o resultado na tela.


* O comando write imprime uma variável na tela.
* Ele sempre imprime um campo na frente do outro.
* Se quiser imprimir na linha seguinte é necessário passar
* um parâmetro para o comando write. Será visto no próximo
* exercício
WRITE p_op1. "Operador 1
WRITE p_sinal. "Sinal
WRITE p_op2. "Operador 2
WRITE '='. "Texto (não é constante)
WRITE v_total. "Variável de resultado

SALVE, ATIVE e EXECUTE O SEU REPORT.

Consystem Informática Ltda Página 81 de 265


Consystem
Informática WORKSHOP ABAP

EXERCÍCIO 2 – Report

Calcular o índice de massa corporal do usuário e imprimir o resultado.

Soliticar na tela o peso e a altura do usuário

Tabela de referência
Tipo Mínimo Máximo
Abaixo do peso 0 19,99
Normal 20,00 24,99
Obesidade leve 25,00 29,99
Obesidade moderada 30,00 39,99
Obesidade mórbida 40,00 100,00

Fórmula para calcular o IMC (Índice de massa corporal)

IMC = Peso
(Altura x Altura)

EXEMPLO.: Para saber se uma pessoa de 1,65 m e com 70 quilos de altura encontra-se acima do peso:
IMC = 70 = 25, 7 => Obesidade leve
(1,65 x 1,65)

Determinar o índice de massa corporal e imprimir as seguintes informações:

Peso que o usuário digitou


Altura que o usuário digitou
IMC que você calculou
Resultado (tipo)

Consystem Informática Ltda Página 82 de 265


Consystem
Informática WORKSHOP ABAP

EVENTOS

Os programas escritos em abap trabalham com alguns eventos pré-definidos

O programa abaixo, possui 3 eventos AT SELECTION-SCREEN para validar campos


da tela.
*&---------------------------------------------------------------------*
*& Report ZTESTE_REPORT
*&
*&---------------------------------------------------------------------*
*&
*&
*&---------------------------------------------------------------------*

REPORT zteste_report.

DATA v_vbeln TYPE vbak-vbeln.


DATA v_matnr TYPE vbap-matnr.

* Parâmetros de entrada
SELECTION-SCREEN BEGIN OF BLOCK bl1 WITH FRAME.
PARAMETERS p_vbeln TYPE vbak-vbeln OBLIGATORY. "Ordem de venda
PARAMETERS p_posnr TYPE vbap-posnr OBLIGATORY. "Item
PARAMETERS p_matnr TYPE vbap-matnr OBLIGATORY. "Material
SELECTION-SCREEN END OF BLOCK bl1.

* Consiste a ordem de venda


AT SELECTION-SCREEN ON p_vbeln.
SELECT SINGLE vbeln
INTO v_vbeln
FROM vbak
WHERE vbeln = p_vbeln.

IF sy-subrc NE 0.
MESSAGE e398(00) WITH 'Ordem não existe'.
ENDIF.

* Consiste ordem de venda e item (Bloco BL1)


AT SELECTION-SCREEN ON BLOCK bl1.
SELECT SINGLE vbeln
INTO v_vbeln
FROM vbap
WHERE vbeln = p_vbeln AND
posnr = p_posnr.

IF sy-subrc NE 0.
MESSAGE e398(00) WITH 'Ordem/Item não existem'.
ENDIF.

* Consiste todos os campos da tela (PARAMETERS/SELECT-OPTIONS)


AT SELECTION-SCREEN.
SELECT SINGLE matnr
INTO v_matnr
FROM vbap
WHERE vbeln = p_vbeln AND
posnr = p_posnr.

IF v_matnr NE p_matnr.
MESSAGE e398(00) WITH 'Material informado difere do item'.
ENDIF.

Consystem Informática Ltda Página 83 de 265


Consystem
Informática WORKSHOP ABAP

Alguns eventos

INITIALIZATION
START-OF-SELECTION
END-OF-SELECTION
TOP-OF-PAGE
AT LINE-SELECTION
AT USER-COMMAND
AT SELECTION-SCREEN OUTPUT

Consystem Informática Ltda Página 84 de 265


Consystem
Informática WORKSHOP ABAP

EXERCÍCIO – Report - Evento

Criar um report que funcione como uma calculadora. O programa deverá pedir o
primeiro valor, o sinal, o segundo valor e quando o usuário executar o relatório consistir
se os campos foram informados e se o sinal é um valor válido. Em seguida deverá listar
na tela a operação completa da seguinte forma:

campo1
operador campo2
------
resultado

Para isto vamos utilizar o evento


AT SELECTION-SCREEN ON campo.

Quando o usuário preenche os campos na tela e manda executar o programa verifica se


existe algum evento “at selection-screen” para algum campo. Ele executa todos os
eventos desse tipo que houver no programa e em seguida roda o START-OF-
SELECTION que tem o processamento.

Atenção: EVENTOS possuem momentos específicos para execução. Não importa o


local do programa onde são executados e sim a ORDEM de execução deles.
Exemplo:

Report zwander.
START-OF-SELECTION.
Write ‘Rodrigues’.
INITIALIZATION.
Write ‘Wander’.

Mesmo com o evento initialization declarado no final do programa, ele é executado


SEMPRE ANTES do start-of-selection.

Consystem Informática Ltda Página 85 de 265


Consystem
Informática WORKSHOP ABAP

O programa deverá exibir a seguinte tela.

Quando o usuário preencher os parâmetros de entrada e executar o relatório, consistir:

1) Se todos os campos foram informados. Se algum campo estiver em branco,


enviar mensagem de erro (Campo XXXXX obrigatório) onde XXXX é o
campo que está com erro.
2) Verificar se o sinal é um sinal válido. Se for diferente de ‘+’, ‘-‘, ‘*’, ‘/’ enviar
mensagem (Sinal inválido, informe +, -, * ou /).

Listar o primeiro valor na primeira linha, o sinal e o segundo valor na segunda linha, um
traço na terceira linha e o resultado da operação na quarta linha.

O resultado final deverá parecer com a tela a seguir.

Consystem Informática Ltda Página 86 de 265


Consystem
Informática WORKSHOP ABAP

Através da transação “SE38” criar o report com o nome de ZRXX_CALCULADORA2.

Título: “Calculadora 2”
Categoria: “1 – Programa executável”
Status: “K – Programa de clientes produtivo”
Aplicação: “* – Válido para várias aplicações”
Grupo de autorizações: Em branco
Banco de dados lógico: Em branco
Versão tela seleção: Em branco
Bloqueio do editor: Em branco
Aritmética em ponto fixo: Marcado
Início via variante: Em branco

Gravar
Se for solicitada a classe de desenvolvimento e request, definir como “Objeto local”

Tente fazer o código antes de ver como ele ficaria, na página seguinte.

Consystem Informática Ltda Página 87 de 265


Consystem
Informática WORKSHOP ABAP

REPORT zcalculadora2.
* Variável para calcular o resultado
DATA v_total TYPE p DECIMALS 2.

* Comando que monta uma tela para entrada de dados


* do usuário
PARAMETERS: p_op1 TYPE p DECIMALS 2,
p_sinal(1) TYPE c,
p_op2 TYPE p DECIMALS 2.

* Evento que é disparado quando o usuário preenche a tela e


* executa o programa através da tecla "F8"
START-OF-SELECTION.

* Efetua o cálculo
* Para melhorar a legibilidade do código o IF do exercício
* anterior foi substituído pelo case
CASE p_sinal.
WHEN '+'.
v_total = p_op1 + p_op2.
WHEN '-'.
v_total = p_op1 - p_op2.
WHEN '*'.
v_total = p_op1 * p_op2.
WHEN '/'.
v_total = p_op1 / p_op2.
ENDCASE.

WRITE AT 3 p_op1. "Posiciona na coluna 3 antes de


imprimir.
WRITE / p_sinal. "A BARRA força o WRITE a começar na
linha seguinte
WRITE p_op2. "Como não tem barra, imprime depois do
sinal
WRITE /3 '-----------------'. "Salta linha e imprime na
coluna 3
WRITE /3 v_total. "Imprime o total na coluna 3 da linha
seguinte

* Estes eventos "AT SELECTION-SCREEN" logo abaixo, rodam


antes do
* START-OF-SELECTION e servem para consistir campos.
* Quando o usuário preenche a tela e manda executar, estes
eventos
* são executados e só depois é que o start-of-selection
roda

Consystem Informática Ltda Página 88 de 265


Consystem
Informática WORKSHOP ABAP

* Consiste o campo p_op1


AT SELECTION-SCREEN ON p_op1.

* Verifica se o campo p_op1 está preenchido


IF p_op1 IS INITIAL.
MESSAGE e398(00) WITH 'Informe o primeiro valor'.
ENDIF.

* Consiste o campo p_op2


AT SELECTION-SCREEN ON p_op2.

* Verifica se o campo p_op2 está preenchido


IF p_op2 IS INITIAL.
MESSAGE e398(00) WITH 'Informe o segundo valor'.
ENDIF.

* Consiste o campo p_sinal


* Note que a consistência do sinal está depois da
consistência do
* segundo valor. Mas a ordem de execução dos eventos
* "at selection-screen" é a ordem em que eles são exibidos
na
* tela e portanto o sinal é consistido ANTES do segundo
valor.
AT SELECTION-SCREEN ON p_sinal.

* Verifica se o sinal é válido


IF p_sinal <> '+'
AND p_sinal <> '-'
AND p_sinal <> '*'
AND p_sinal <> '/'.
MESSAGE e398(00) WITH 'Informe somente + - * ou /'.
ENDIF.

SALVE, Verifique a sintaxe, ATIVE e EXECUTE O SEU REPORT.

Consystem Informática Ltda Página 89 de 265


Consystem
Informática WORKSHOP ABAP

Listas X ALV

Listas são relatórios produzidos com o comando WRITE. Normalmente tem layout
parecido com o da figura abaixo:

ALV são listas com uma interface gráfica aprimorada e com uma série de funções pré-
definidas como, por exemplo, envio do relatório por email, gráficos, filtros dinâmicos,
subtotais e totais definidos pelo usuário, etc...
É criado através do uso de funções e/ou métodos já existentes no sap. Ex. função
REUSE_ALV_GRID_DISPLAY.

Consystem Informática Ltda Página 90 de 265


Consystem
Informática WORKSHOP ABAP

O ALV permite a inclusão de logotipo em tela, porém não permite a impressão. Para
modificar fonte, cores, desenhar quadros e incluir logotipo deve-se utilizar a ferramenta
de sapscript ou smartform.

Consystem Informática Ltda Página 91 de 265


Consystem
Informática WORKSHOP ABAP

Exemplo de programa ALV

************************************************************************
*** CONSULTOR ABAP...........: Wander Rodrigues
*** NOME DO PROGRAMA ABAP....: ZALV
*** TIPO DO PROGRAMA.........: Report (ABAP LIST VIEW)
*** DESCRIÇÃO BREVE..........: Lista materiais agrupados por setor
************************************************************************
REPORT zalv LINE-SIZE 132 NO STANDARD PAGE HEADING.

* Tabelas
TABLES: mara.

* Linha de detalhe do list view


TYPES: BEGIN OF st_saida,
matnr LIKE mara-matnr,
maktx LIKE makt-maktx,
peso_bruto TYPE p,
peso_liquido TYPE p,
END OF st_saida.

DATA it_saida TYPE TABLE OF st_saida WITH HEADER LINE.

* Definições para ALV


TYPE-POOLS: kkblo.

DATA: st_fieldcat TYPE kkblo_fieldcat,


it_fieldcat TYPE kkblo_t_fieldcat,
st_variant TYPE disvariant,
st_layout TYPE kkblo_layout,
st_header TYPE kkblo_listheader,
it_fieldcat_alv TYPE slis_t_fieldcat_alv,
it_special_groups TYPE slis_t_sp_group_alv,
it_layout_alv TYPE slis_layout_alv,
it_header TYPE kkblo_t_listheader,
it_sort TYPE slis_t_sortinfo_alv WITH HEADER LINE.

* Parametros de seleção
SELECTION-SCREEN BEGIN OF BLOCK f1 WITH FRAME TITLE t01.
SELECT-OPTIONS: s_matnr FOR mara-matnr.
SELECTION-SCREEN END OF BLOCK f1.

START-OF-SELECTION.
PERFORM f_seleciona.

END-OF-SELECTION.
PERFORM f_cabecalho.
PERFORM f_catalogo.
PERFORM f_layout.
PERFORM f_relatorio.

Consystem Informática Ltda Página 92 de 265


Consystem
Informática WORKSHOP ABAP

*&--------------------------------------------------------------------*
*& Form f_seleciona
*&--------------------------------------------------------------------*
* Seleção dos dados
*---------------------------------------------------------------------*
FORM f_seleciona.
SELECT mara~matnr
makt~maktx
mara~brgew
mara~ntgew
INTO TABLE it_saida
FROM mara
UP TO 20 ROWS
INNER JOIN makt
ON makt~matnr = mara~matnr
WHERE mara~matnr IN s_matnr
AND makt~spras = sy-langu.

DELETE it_saida WHERE peso_bruto IS INITIAL.

SORT it_saida BY matnr ASCENDING.


ENDFORM. "f_seleciona
*&--------------------------------------------------------------------*
*& Form f_cabecalho
*&--------------------------------------------------------------------*
* Formata o cabeçalho
*---------------------------------------------------------------------*
FORM f_cabecalho.
REFRESH it_header.

* Título do relatório
CLEAR st_header.
st_header-typ = 'H'.
st_header-info = 'Lista de materiais'.
APPEND st_header TO it_header.

* Parâmetros de seleção
CLEAR st_header.
st_header-typ = 'S'.
st_header-key = 'Cabeçalho'.
st_header-info = 'Texto do cabeçalho'.
APPEND st_header TO it_header.

* Linha informativa
CLEAR st_header.
st_header-typ = 'A'.
st_header-key = ' '.
st_header-info = 'Outra linha do cabeçalho'.
APPEND st_header TO it_header.
ENDFORM. "f_cabecalho

Consystem Informática Ltda Página 93 de 265


Consystem
Informática WORKSHOP ABAP

*&--------------------------------------------------------------------*
*& Form f_catalogo
*&--------------------------------------------------------------------*
* Definição das colunas
*---------------------------------------------------------------------*
FORM f_catalogo.
DATA i TYPE i.

REFRESH it_fieldcat.

i = i + 1.
CLEAR st_fieldcat.
st_fieldcat-row_pos = 1.
st_fieldcat-col_pos = i.
st_fieldcat-fieldname = 'MATNR'.
st_fieldcat-ref_fieldname = 'MATNR'.
st_fieldcat-ref_tabname = 'MARA'.
APPEND st_fieldcat TO it_fieldcat.

i = i + 1.
CLEAR st_fieldcat.
st_fieldcat-row_pos = 1.
st_fieldcat-col_pos = i.
st_fieldcat-fieldname = 'MAKTX'.
st_fieldcat-ref_fieldname = 'MAKTX'.
st_fieldcat-ref_tabname = 'MAKT'.
APPEND st_fieldcat TO it_fieldcat.

i = i + 1.
CLEAR st_fieldcat.
st_fieldcat-row_pos = 1.
st_fieldcat-col_pos = i.
st_fieldcat-fieldname = 'PESO_BRUTO'.
st_fieldcat-ref_fieldname = 'BRGEW'.
st_fieldcat-ref_tabname = 'MARA'.
APPEND st_fieldcat TO it_fieldcat.

i = i + 1.
CLEAR st_fieldcat.
st_fieldcat-row_pos = 1.
st_fieldcat-col_pos = i.
st_fieldcat-fieldname = 'PESO_LIQUIDO'.
st_fieldcat-ref_fieldname = 'NTGEW'.
st_fieldcat-ref_tabname = 'MARA'.
APPEND st_fieldcat TO it_fieldcat.
ENDFORM. "f_catalogo
*&--------------------------------------------------------------------*
*& Form f_layout
*&--------------------------------------------------------------------*
* Layout de exibição
*---------------------------------------------------------------------*
FORM f_layout.
CLEAR st_layout.
st_layout-no_zebra = 'X'.

CALL FUNCTION 'REUSE_ALV_TRANSFER_DATA_BACK'


EXPORTING
it_fieldcat = it_fieldcat
is_layout = st_layout
IMPORTING
et_fieldcat = it_fieldcat_alv
es_layout = it_layout_alv
et_special_groups = it_special_groups.

ENDFORM. "f_layout

Consystem Informática Ltda Página 94 de 265


Consystem
Informática WORKSHOP ABAP

*&--------------------------------------------------------------------*
*& Form f_relatorio
*&--------------------------------------------------------------------*
* Exibe o relatório
*---------------------------------------------------------------------*
FORM f_relatorio.
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
EXPORTING
i_callback_program = 'ZALV'
is_layout = it_layout_alv
it_fieldcat = it_fieldcat_alv
i_callback_top_of_page = 'TOP_OF_PAGE'
TABLES
t_outtab = it_saida[]
EXCEPTIONS
program_error = 1
OTHERS = 2.

IF sy-subrc <> 0.
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ENDIF.
ENDFORM. "f_relatorio
*&---------------------------------------------------------------------*
*& Form top_of_page
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
FORM top_of_page.
CALL FUNCTION 'REUSE_ALV_COMMENTARY_WRITE'
EXPORTING
it_list_commentary = it_header.
ENDFORM. "top_of_page

Consystem Informática Ltda Página 95 de 265


Consystem
Informática WORKSHOP ABAP

O resultado deverá ser parecido com a tela a seguir:

Note que o relatório já tem um layout gráfico bem diferente do que é feito com os
comandos WRITE. Além disso você pode ver as funcionalidades que são adicionadas
automaticamente ao relatório.

Veja a barra de botões

Todos estes botões foram criados pelo ALV e já estão prontos para serem usados pelo
usuário (ordenar, totalizar, filtrar, imprimir, enviar para o excel, word ou arquivo texto,
enviar por email, análise ABC, gráficos e modificação do layout)

Consystem Informática Ltda Página 96 de 265


Consystem
Informática WORKSHOP ABAP

Module Pool

Module pool são programas geralmente utilizados para entrada de dados / interface com
o usuário. Devem ter, obrigatoriamente, uma transação para execução.
A transação SE80 mostra a lista de objetos de um module pool

Os programas do tipo Module Pool possuem basicamente dois eventos:

Consystem Informática Ltda Página 97 de 265


Consystem
Informática WORKSHOP ABAP

PROCESS BEFORE OUTPUT


Código que será executado antes da tela ser exibida para o usuário

Consystem Informática Ltda Página 98 de 265


Consystem
Informática WORKSHOP ABAP

PROCESS AFTER INPUT


Código que será executado quando o usuário teclar ENTER ou clicar em algum
botão de função, por exemplo, Salvar, Page Up, ESC...

Todo module pool possui um include com a terminação “TOP”. Neste include toda
variável, tabela, estrutura, constante declarada terá escopo global, ou seja, será “vista”
em todos os pontos do programa.

Consystem Informática Ltda Página 99 de 265


Consystem
Informática WORKSHOP ABAP

Para executar um programa do tipo Module pool, é necessário criar uma transação.

Consystem Informática Ltda Página 100 de 265


Consystem
Informática WORKSHOP ABAP

Transação

A transação para criação de transações é a SE93.


Informe o código da transação e clique em Criar

Preencha a descrição, escolha a opção de transação de diálogo e clique em OK

Consystem Informática Ltda Página 101 de 265


Consystem
Informática WORKSHOP ABAP

Informe o nome do programa, a tela inicial e clique em SALVAR

Consystem Informática Ltda Página 102 de 265


Consystem
Informática WORKSHOP ABAP

Passo a Passo para criação de um module pool


Criar o module pool SAPMZXX001 para consultar a tabela T001 (Tabela standard de
empresas no SAP).

Entrar na transação SE80:

No repository browser, coloque o nome do programa e tecle ENTER

Consystem Informática Ltda Página 103 de 265


Consystem
Informática WORKSHOP ABAP

Clique em Yes na mensagem que diz que o programa não existe

Cliquem em OK na mensagem que pede para informar o nome do programa

Clique em OK na mensagem que pede para informar o nome do include TOP

Consystem Informática Ltda Página 104 de 265


Consystem
Informática WORKSHOP ABAP

Coloque o título do Module Pool, e preencha o tipo, status e aplicação. Depois clique
em Salvar

Clique em objeto local na janela que pede o pacote

Consystem Informática Ltda Página 105 de 265


Consystem
Informática WORKSHOP ABAP

Você verá a tela abaixo:

Clique no triangulo à esquerda do texto Includes para exibir os includes:

A tela ficará assim

Consystem Informática Ltda Página 106 de 265


Consystem
Informática WORKSHOP ABAP

Clique 2x no include MZXX001TOP para abrir o include na janela da direita

Repare que do lado direito agora é exibido o include MZXX001TOP.

Clique no lápis para alternar para o modo de edição.

Consystem Informática Ltda Página 107 de 265


Consystem
Informática WORKSHOP ABAP

Altere o include TOP para que fique da seguinte forma:

Salve o include.

Ative o include

Consystem Informática Ltda Página 108 de 265


Consystem
Informática WORKSHOP ABAP

Vamos agora criar a primeira tela do programa. Clique com o botão direito no nome do
programa básico (SAPMZXX001) na janela da direita

Informe 9000 no número da tela e clique em OK

Consystem Informática Ltda Página 109 de 265


Consystem
Informática WORKSHOP ABAP

Você irá ver a janela de atributos da tela. Preencha a descrição da tela

Clique na guia Element list

Você irá ver um campo do tipo OK.

Preencha esse campo com a variável V_OKCODE

Consystem Informática Ltda Página 110 de 265


Consystem
Informática WORKSHOP ABAP

Clique no botão Layout e aguarde o Screen painter ser


carregado. Pode demorar um pouco.

Você irá ver a janela para desenhar o layout da tela

Clique em Dictionary/Program fields

Consystem Informática Ltda Página 111 de 265


Consystem
Informática WORKSHOP ABAP

Vai aparecer a tela abaixo

Coloque a variável V_BUKRS no campo table/field name e clique em Get from

Program

Consystem Informática Ltda Página 112 de 265


Consystem
Informática WORKSHOP ABAP

Marque a linha do grid e clique em OK

O cursor irá se transformar em um retângulo que é o contorno do campo. Clique em


algum ponto da tela para colar o campo.

Irá ficar mais ou menos assim:

Consystem Informática Ltda Página 113 de 265


Consystem
Informática WORKSHOP ABAP

Agora clique no botão de Text Field

O cursor irá se transformar em um retângulo pequeno. Posicione-o em um lugar da tela


à esquerda da variável V_BUKRS e clique para colar.

O campo em rosa indica que ali falta uma informação. Digite “Empresa” no campo
Text.

Consystem Informática Ltda Página 114 de 265


Consystem
Informática WORKSHOP ABAP

O layout da tela está pronto. Clique em Flow logic para ir para o PBO/PAI da tela.

Você irá voltar para esta tela

Clique em Salvar para gravar a tela criada.

Agora vamos criar um título para a tela 9000.

No programa básico clique com o botão direito e escolha


Create, Gui titles

Consystem Informática Ltda Página 115 de 265


Consystem
Informática WORKSHOP ABAP

Preencha o código do título e a descrição do título e clique em OK

Pronto. Foi criado o título T9000 cuja descrição é “Primeira tela do programa”.

Agora vamos criar uma barra de botões para a tela 9000. Esta tela terá o ENTER
para consultar funcionário e o botão de voltar para sair do programa.

No programa básico clique com o botão direito e escolha


Create, Gui Status

Consystem Informática Ltda Página 116 de 265


Consystem
Informática WORKSHOP ABAP

Preencha o código do status “S9000” e a descrição do status. Marque o radiobutton


Normal screen e clique em OK.

Você vai ver esta tela

Consystem Informática Ltda Página 117 de 265


Consystem
Informática WORKSHOP ABAP

Clique no sinal de mais localizado à direita de Function Keys

A tela irá se abrir

O primeiro botão é o ENTER. Para que ele funcione, vamos colocar um código nesse

botão. Digite PROCESSA no campo em cima do ENTER e dê


<ENTER>

Consystem Informática Ltda Página 118 de 265


Consystem
Informática WORKSHOP ABAP

Na tela a seguir clique em OK

Preencha o campo Function text e clique em OK

Agora escreva SAIR no campo em cima da seta verde para a esquerda e


de <ENTER>.

Consystem Informática Ltda Página 119 de 265


Consystem
Informática WORKSHOP ABAP

Clique em Salvar para salvar a barra de botões.

Pronto. Agora o título e a barra de botões da tela 9000 já estão prontos.


Agora vamos colocar um código na tela 9000 que faz com que ela utilize o título e os
botões criados.

Do lado esquerdo da tela abra o nó de Screens

Clique 2x sobre a tela 9000

Consystem Informática Ltda Página 120 de 265


Consystem
Informática WORKSHOP ABAP

Do lado direito da tela você verá o PBO e PAI da tela 9000

O Process Before Output (ou PBO) é o processo que é executado antes da tela 9000 ser
exibida para o usuário.

Altera a lógica de processamento da tela para que fique da seguinte forma:

Consystem Informática Ltda Página 121 de 265


Consystem
Informática WORKSHOP ABAP

Clique em Salvar para gravar a nova lógica de processamento da tela .

Antes da tela aparecer temos que informar a ela que ela deve utilizar o título T9000
(criado anteriormente) e a barra de botões S9000 (também já criada). Então vamos no
PBO da tela, que é o evento executado antes da tela ser exibida, para fazer isso.

Clique 2x sobre o texto status_9000.

Clique em Yes na pergunta sobre a criação do módulo PBO status_9000

Na próxima tela

Consystem Informática Ltda Página 122 de 265


Consystem
Informática WORKSHOP ABAP

Troque o nome MZXX001_STATUS_9000O01 por MZXX001O01 e conforme a


seguir

Note que o include MZXX001O01 tem o nome parecido com o do include TOP. O
prefixo é o mesmo MZXX001 e o que muda é que o include de variáveis globaix
termina com TOP e o include de módulos PBO termina com O01.

Clique em OK.

Clique em OK no aviso sobre a inserção do include MZXX001O01

Consystem Informática Ltda Página 123 de 265


Consystem
Informática WORKSHOP ABAP

Você verá a tela abaixo:

Repare que o module é semelhante ao FORM.


Ex. FORM:
Perform f_cadastra.
...
...
Form f_cadastra.
...
...
Endform.

Ex. MODULE:
Module status_9000.
...
...
Module status_9000.


Endmodule.

A diferença é que o FORM é chamado com o comando PERFORM e o MODULE é


chamado com o comando MODULE mesmo. Além disso o MODULE só pode ser
usado dentro do PBO ou do PAI de uma tela.

Consystem Informática Ltda Página 124 de 265


Consystem
Informática WORKSHOP ABAP

Acrescente os comandos que vão associar o título T9000 e a barra de botões S9000 à
tela 9000.

Clique em Salvar

Pronto. O título e os botões já estão sendo chamados no módulo status_9000 que é


executado no PBO da tela 9000 e com isso consegue associá-los antes da tela ser
exibida.

O primeiro passo da tela 9000 está pronto. O segundo passo é, depois que o usuário
informa a empresa e der enter, o programa deve verificar se a empresa existe e, caso
exista, chamar a segunda tela para exibir os dados da empresa.

Clique 2x na tela 9000 para voltar à lógica de processamento da tela (PBO/PAI)

Consystem Informática Ltda Página 125 de 265


Consystem
Informática WORKSHOP ABAP

Você verá a lógica do pbo/pai

O módulo user_command_9000 vamos cria-lo daqui a pouco.

Primeiro vamos criar um módulo para verificar se a empresa digita existe. Se existir, já
trazemos os dados que serão exibidos para o usuário na próxima tela. Se não existir,
vamos dar uma mensagem de erro.

Altere o Process After Input para que fique da seguinte forma:

O comando FIELD xxxx MODULE yyyy funciona da seguinte forma: O módulo yyyy é
executado. Se houver alguma mensagem de erro ele irá posicionar o cursor no campo
xxxx.

Clique em SALVAR
Consystem Informática Ltda Página 126 de 265
Consystem
Informática WORKSHOP ABAP

Para criar o módulo, clique 2x sobre o nome m_le_tabela_empresa.

Responda Yes na pergunta sobre a criação do módulo

Consystem Informática Ltda Página 127 de 265


Consystem
Informática WORKSHOP ABAP

Na tela abaixo

Troque o nome MZXX001_M_LE_TABELA_EMPRESAI01 por MZXX001I01 e dê


OK

Dê ok no aviso sobre a criação do include MZXX001I01

Consystem Informática Ltda Página 128 de 265


Consystem
Informática WORKSHOP ABAP

Você vai estar nesta tela, vendo o include MZXX001I01 na janela da direita, com o
módulo m_le_tabela_empresa sendo exibido.

Para consistir a empresa, temos que ler a tabela de empresas (T001) com o código da
empresa informado pelo usuário

Altere o módulo para que fique da seguinte forma:

Consystem Informática Ltda Página 129 de 265


Consystem
Informática WORKSHOP ABAP

Clique em Salvar
Pronto. A consistência e busca dos dados já está feita. Após a leitura (select) o programa
testa o SUBRC. Se ele for diferente de zero, signifca que a empresa informada
(v_bukrs) não existe no banco de dados e dá mensagem de erro. Se o SUBRC for igual
a zero, significa que a empresa existe no banco e que os dados que serão exibidos já
estão na estrutura w_empresa.

Vamos voltar para a lógica de processamento da tela 9000 para criar o


user_command_9000. Este módulo irá chamar a tela 9100 que é a tela que exibe os
dados da empresa.

Clique 2x na tela 9000 para voltar à lógica de processamento da tela (PBO/PAI)

Você irá voltar para o pbo/pai da tela 9000

Clique 2x sobre o módulo user_command_9000 para criar o módulo

Consystem Informática Ltda Página 130 de 265


Consystem
Informática WORKSHOP ABAP

Responda Yes na pergunta sobre a criação do objeto

Na tela abaixo

Marque o include MZXX001I01 pois esse é um módulo do PAI e deve ficar no include
com final I01. Clique em OK

Consystem Informática Ltda Página 131 de 265


Consystem
Informática WORKSHOP ABAP

Você verá a tela abaixo, que mostra o include MZXX001I01 contendo o módulo
m_le_tabela_empresa (que já havia sido criado antes) e o módulo user_command_9000
que vamos criar agora.

Altere o módulo user_command_9000 para que fique da seguinte forma

Salve o módulo criado .

Consystem Informática Ltda Página 132 de 265


Consystem
Informática WORKSHOP ABAP

Pronto o módulo user_command_9000 já está criado e codificado corretamente. Todas


as funcionalidades da tela 9000 estão prontas. Vamos agora fazer a tela 9100.

A tela 9100 é a tela que irá exibir os dados da empresa.


Vamos então criar a tela.

No programa básico clique com o botão direito e escolha Criar/Tela

Informe o número da tela (9100) e clique em OK

Consystem Informática Ltda Página 133 de 265


Consystem
Informática WORKSHOP ABAP

Preencha a descrição da segunda tela e clique em Element list

Na tela de Element list você verá um campo do tipo OK. É este campo onde devemos
colocar a variável que irá guardar a tecla pressionada pelo usuário.

Preencha este campo com a variável V_OKCODE e clique em Layout

Consystem Informática Ltda Página 134 de 265


Consystem
Informática WORKSHOP ABAP

Será exibida a tela do Screen painter gráfico para desenharmos o layout da segunda tela.

Clique no botão Dictionary/Program fields

Consystem Informática Ltda Página 135 de 265


Consystem
Informática WORKSHOP ABAP

Será exibida a seguinte tela

Preencha o campo Table/Field Name com W_EMPRESA (estrutura que foi preenchida
com os dados da empresa) e clique em Get from Program

São exibidos todos os campos da estrutura w_empresa

Consystem Informática Ltda Página 136 de 265


Consystem
Informática WORKSHOP ABAP

Marque todos os campos e clique em ok

O cursor irá se transformar em uma seqüência de retângulos que correspondem aos


campos que serão colados na tela.

Consystem Informática Ltda Página 137 de 265


Consystem
Informática WORKSHOP ABAP

Clique em algum ponto da tela para colar os campos, deixando um espaço do lado
esquerdo

Agora clique no botão de texto para colocar um texto na frente de cada campo

O cursor irá se transformar em um retângulo pequeno

Posicione o cursor à esquerda do primeiro campo e clique para colar

Consystem Informática Ltda Página 138 de 265


Consystem
Informática WORKSHOP ABAP

A tela irá ficar mais ou menos como a seguir

A cor rosa indica que falta preencher alguma informação. Então no campo “Text” digite
“Nome da empresa”

Consystem Informática Ltda Página 139 de 265


Consystem
Informática WORKSHOP ABAP

Faça o mesmo processo de clicar no campo de Texto para criar os demais textos de
forma que fique como a tela abaixo:

Como o programa é somente de consulta temos que proteger os campos para que o
usuário não altere as informações na tela. Para isso clique 2x sobre o campo nome da
empresa (o campo, não o texto)

Consystem Informática Ltda Página 140 de 265


Consystem
Informática WORKSHOP ABAP

Serão exibidas as propriedades do campo w_empresa-butxt (nome da empresa)

Consystem Informática Ltda Página 141 de 265


Consystem
Informática WORKSHOP ABAP

Clique na guia Program

Na guia Program, desmarque o checkbox Input field

Clique no X azul para fechar a janela de atributos do campo

Consystem Informática Ltda Página 142 de 265


Consystem
Informática WORKSHOP ABAP

Clique 2x em cada campo da tela e retire o atributo de Input field para que todos fiquem
protegidos, conforme a tela abaixo

O layout da tela está pronto.

Clique em Flow logic (lógica de processamento) para voltar para


o pbo/pai da tela 9100.

Consystem Informática Ltda Página 143 de 265


Consystem
Informática WORKSHOP ABAP

Você irá retornar para esta tela.

Clique em Salvar para gravar o layout

Agora vamos criar o título da tela 9100.

No programa básico clique com o botão direito e escolha


Create, Gui titles

Consystem Informática Ltda Página 144 de 265


Consystem
Informática WORKSHOP ABAP

Preencha o código do título e a descrição do título e clique em OK

Pronto. Foi criado o título T9100 cuja descrição é “Segunda tela do programa”.

Agora vamos criar uma barra de botões para a tela 9100. Como esta tela é somente para
consulta, ela terá somente o botão de voltar para voltar para a primeira tela.

No programa básico clique com o botão direito e escolha


Create, Gui Status

Consystem Informática Ltda Página 145 de 265


Consystem
Informática WORKSHOP ABAP

Preencha o código do status “S9100” e a descrição do status. Marque o radiobutton


Normal screen e clique em OK.

Você vai ver esta tela

Consystem Informática Ltda Página 146 de 265


Consystem
Informática WORKSHOP ABAP

Clique no sinal de mais localizado à direita de Function Keys

A tela irá se abrir

O único botão que vamos colocar é o BACK (Voltar).

Escreva SAIR no campo em cima da seta verde para a esquerda e dê


<ENTER>.

Consystem Informática Ltda Página 147 de 265


Consystem
Informática WORKSHOP ABAP

Clique em Salvar para salvar a barra de botões.

Pronto. Agora o título e a barra de botões da tela 9100 já estão prontos.


Agora vamos colocar um código na tela 9100 que faz com que ela utilize o título e os
botões criados.

Do lado esquerdo da tela abra o nó de Screens

Clique 2x sobre a tela 9100

Consystem Informática Ltda Página 148 de 265


Consystem
Informática WORKSHOP ABAP

Do lado direito da tela você verá o PBO e PAI da tela 9100

O Process Before Output (ou PBO) é o processo que é executado antes da tela 9100 ser
exibida para o usuário.

Altere a lógica de processamento da tela para que fique da seguinte forma:

Consystem Informática Ltda Página 149 de 265


Consystem
Informática WORKSHOP ABAP

Clique em Salvar para gravar a nova lógica de processamento da tela .

Antes da tela aparecer, temos que informar a ela que ela deve utilizar o título T9100
(criado anteriormente) e a barra de botões S9100 (também já criada). Então vamos no
PBO da tela, que é o evento executado antes da tela ser exibida, para fazer isso.

Clique 2x sobre o texto status_9100.

Clique em Yes na pergunta sobre a criação do módulo PBO status_9000

Consystem Informática Ltda Página 150 de 265


Consystem
Informática WORKSHOP ABAP

Na próxima tela

Troque o nome MZXX001_STATUS_9100O01 por MZXX001O01 e conforme a


seguir

Note que o include MZXX001O01 tem o nome parecido com o do include TOP. O
prefixo é o mesmo MZXX001 e o que muda é que o include de variáveis globais
termina com TOP e o include de módulos PBO termina com O01.

Clique em OK.

Consystem Informática Ltda Página 151 de 265


Consystem
Informática WORKSHOP ABAP

Você verá a tela abaixo:

Repare que o module é semelhante ao FORM.


Ex. FORM:
Perform f_cadastra.
...
...
Form f_cadastra.
...
...
Endform.

Ex. MODULE:
Module status_9000.
...
...
Module status_9000.


Endmodule.

A diferença é que o FORM é chamado com o comando PERFORM e o MODULE é


chamado com o comando MODULE mesmo. Além disso o MODULE só pode ser
usado dentro do PBO ou do PAI de uma tela.

Consystem Informática Ltda Página 152 de 265


Consystem
Informática WORKSHOP ABAP

Acrescente os comandos que vão associar o título T9100 e a barra de botões S9100 à
tela 9100.

Clique em Salvar

Pronto. O título e os botões já estão sendo chamados no módulo status_9100 que é


executado no PBO da tela 9100 e com isso consegue associá-los antes da tela ser
exibida.

Vamos agora criar o user_command_9100 que irá tratar o botão de voltar.


Clique 2x na tela 9100 para voltar à lógica de processamento da tela (PBO/PAI)

Consystem Informática Ltda Página 153 de 265


Consystem
Informática WORKSHOP ABAP

Você irá voltar para o pbo/pai da tela 9100

Clique 2x sobre o módulo user_command_9000 para criar o módulo

Responda Yes na pergunta sobre a criação do objeto

Consystem Informática Ltda Página 154 de 265


Consystem
Informática WORKSHOP ABAP

Na tela abaixo

Marque o include MZXX001I01 pois esse é um módulo do PAI e deve ficar no include
com final I01. Clique em OK

Consystem Informática Ltda Página 155 de 265


Consystem
Informática WORKSHOP ABAP

Você verá a tela abaixo, que mostra o include MZXX001I01 contendo o módulo
m_le_tabela_empresa (que já havia sido criado antes), módulo user_command_9000
(também já criado) e o módulo user_command_9100, que vamos criar agora.

Altere o módulo user_command_9100 para que fique da seguinte forma

Salve o módulo criado .

Consystem Informática Ltda Página 156 de 265


Consystem
Informática WORKSHOP ABAP

Pronto o módulo user_command_9100 já está criado e codificado corretamente. Todas


as funcionalidades da tela 9100 estão prontas.

O programa está quase pronto. Como é um module pool ele tem que ter uma transação
para poder ser executado.

Vamos então criar a transação.

No programa básico clique com o botão direito e escolha


Create, Gui titles

Preencha o código da transação, a descrição e marque o primeiro radiobutton . Clique


em OK

Consystem Informática Ltda Página 157 de 265


Consystem
Informática WORKSHOP ABAP

Você verá a tela de atributos da transação

Consystem Informática Ltda Página 158 de 265


Consystem
Informática WORKSHOP ABAP

Preencha o nome do programa e a tela inicial

Clique em Salvar para gravar a transação criada.

Na tela de request, selecione Objeto local

Pronto. Todos os objetos do Module pool já foram criados.

Consystem Informática Ltda Página 159 de 265


Consystem
Informática WORKSHOP ABAP

Agora temos que nos certificar de que não tenha ficado nenhum objeto inativo (de cor
azul na janela esquerda)

Para ativar todos os objetos de uma só vez, clique no nome do programa básico com o
botão direito do mouse e selectione Ativar.

Consystem Informática Ltda Página 160 de 265


Consystem
Informática WORKSHOP ABAP

Será exibida a janela com todos os objetos inativos do seu module pool, já selecionados
para serem ativados. Clique em OK

Pronto, o module pool está concluído e todos os objetos estão ativos.

Para executar o programa basta digita o código da transação na linha de comando.

Consystem Informática Ltda Página 161 de 265


Consystem
Informática WORKSHOP ABAP

Debug

Teclas de função
F5 – Avanço de linha
F6 – Executar (form, função, submit)
F7 - Retorno (Ex.: Se você entrou em um form, ao pressionar F7 o programa termina a
execução do form e passa para a próxima instrução)
F8 – Avançar (até o cursor ou executar tudo sem debug)

Consystem Informática Ltda Página 162 de 265


Consystem
Informática WORKSHOP ABAP

Para inspecionar o conteúdo de variáveis basta clicar 2x sobre ela

Consystem Informática Ltda Página 163 de 265


Consystem
Informática WORKSHOP ABAP

Para visualizar uma tabela interna, clicar no botão e digitar o nome da


tabela interna

É possível criar pontos de parada clicando 2x depois do ponto final de uma determina
linha. Desta forma, ao se pressionar F8, o programa será executado até alcançar o ponto
de parada

Consystem Informática Ltda Página 164 de 265


Consystem
Informática WORKSHOP ABAP

Outra opção de ponto de parada é o Watchpoint. Com o watchpoint é possível fazer o


programa parar para debug somente se uma variável receber um determinado valor
O exemplo abaixo faz com que o programa pare somente quando a variável sy-tabix for
igual a 2.

Consystem Informática Ltda Página 165 de 265


Consystem
Informática WORKSHOP ABAP

Para colocar o ponto de parada em uma instrução específica:


Entrar na transação que será depurada

Iniciar o debug com o comando /H e ENTER

Clicar na opção desejada para iniciar a depuração (neste exemplo: ENTER)

Consystem Informática Ltda Página 166 de 265


Consystem
Informática WORKSHOP ABAP

A tela de debug será exibida

Clicar em Ponto de parada, ponto de parada em, Instrução abap

Será exibida a tela para informar o comando onde o programa deve parar

Consystem Informática Ltda Página 167 de 265


Consystem
Informática WORKSHOP ABAP

Informe o comando desejado e clique em OK

Clique em F8 para executar até o ponto de parada ser atingido

Consystem Informática Ltda Página 168 de 265


Consystem
Informática WORKSHOP ABAP

Para criar um ponto de parada antes do programa ser executado.

Entrar na transação SE38 (ou se80) e editar a parte do código onde o ponto de parada
deve ser incluído

Consystem Informática Ltda Página 169 de 265


Consystem
Informática WORKSHOP ABAP

Coloque o cursor na linha onde deseja que o programa inicie a depuração e clique no

botão STOP

O sistema irá indicar que o ponto foi definido

Execute o programa normalmente. Quando o ponto de parada for atingido o programa


iniciará a depuração

Consystem Informática Ltda Página 170 de 265


Consystem
Informática WORKSHOP ABAP

Exits
Tipos de exit

- Field exit – Utilizada sobre um determinado elemento


de dados, a exit de campo será executada, por padrão,
em todos os campos de tela que fizerem referência ao elemento de dados utilizado.

Ex.: Se for criada uma field exit para o elemento de dados VBELN_VA (Documento de
vendas), a field exit será executada em toda tela que possuir um campo de entrada que
faça referência a este elemento de dados.

Em tese a field exit só deve ser utilizada para validar o conteúdo do campo ao qual se
relaciona, mas é possível verificar/modificar o conteúdo de outros campos dentro de
uma field exit. Para isso, cada caso deve ser avaliado individualmente.

Para que uma field exit possa ser executada é necessário verificar se ela será associada a
um campo do dicionário.
Para verificar esta opção entre na transação onde está o campo para o qual a field exit
será criada

Coloque o cursor no campo e pressione F1

Consystem Informática Ltda Página 171 de 265


Consystem
Informática WORKSHOP ABAP

Clique no botão da ferramenta

Clique 2x sobre o número da tela

Consystem Informática Ltda Página 172 de 265


Consystem
Informática WORKSHOP ABAP

Clique no botão Layout

Clique 2x sobre o campo desejado


Na tela de atributos, verifique se o flag “Do Dict.” está marcado.

Se sim, a field exit será executada, caso contrário ela não pode ser criada.
É possível também filtrar a field-exit para que ela funcione em somente uma tela.
Como a field exit está associada a um elemento de dados, ao ser ativada, ele será
executada em todas as telas que contenham campos definidos por aquele elemento de
dados. Para indicar somente uma tela, entre na transação CMOD e digite PRFB na linha
de comando.

Consystem Informática Ltda Página 173 de 265


Consystem
Informática WORKSHOP ABAP

A lista de field exits será exibida

Marque a field exit desejada e clique em atribui progr/tela

Informe o nome do programa e o número da tela onde a field exit deve ser executada e
clique em Gravar.

Consystem Informática Ltda Página 174 de 265


Consystem
Informática WORKSHOP ABAP

Exemplo field exit para o campo centro (elemento de


dados WERKS_D)

Para este exemplo funcionar é necessário criar primeiro um grupo de função com o
nome ZTESTE e ativá-lo, na transação SE80.

Execute a transação CMOD, digite PRFB na linha de comando e tecle ENTER

A tela abaixo lista as field exits já existentes. Clique em exit de campo e depois em
Criar.

Consystem Informática Ltda Página 175 de 265


Consystem
Informática WORKSHOP ABAP

Informe o nome do elemento de dados e clique em OK

O programa irá exibir a transação SE37 para poder criar a função


FIELD_EXIT_ELEMENTODEDADOS. Clique em Criar

Informe o grupo de funções, a descrição e clique em Gravar

Consystem Informática Ltda Página 176 de 265


Consystem
Informática WORKSHOP ABAP

No texto fonte da field exit, o código abaixo irá gerar uma mensagem de erro caso o
centro não tenha sido informado

Salvar e ativar a fiel exit


Ao retornar, a field exit aparece na lista de field exits como inativa

Consystem Informática Ltda Página 177 de 265


Consystem
Informática WORKSHOP ABAP

Para ativar basta marcar a exit, e clicar no menu Exit Campo e em seguida em Ativar.

Consystem Informática Ltda Página 178 de 265


Consystem
Informática WORKSHOP ABAP

- User exit – É o espaço, dentro do programa standard,


em que podemos inserir um código sem abrir o objeto e perder sua
garantia.

- Customer function – É identificada facilmente pelo comando


CALL CUSTOMER-FUNCTION...

Este tipo de exit está associado a uma ampliação, que, por sua vez, deve ser
associada a um projeto e este projeto deve ser ativado para que a exit seja
executada.

Para localizar este tipo de exit, deve-se procurar pelo programa a constante
“CUSTOMER-FUNCION”.
Após encontrada a exit a mesma deve ser codificada, incluída em um projeto e ativada
para que possa ser executada.

Para adicionar a exit em um projeto:


Localizar a exit dentro do programa

Consystem Informática Ltda Página 179 de 265


Consystem
Informática WORKSHOP ABAP

Clique 2x sobre o número em frente ao “customer-function” (neste exemplo, 002). A


função da exit será exibida

Copie o nome da exit (EXIT_SAPMV45A_002)


Entre na transação SMOD

Consystem Informática Ltda Página 180 de 265


Consystem
Informática WORKSHOP ABAP

Clique no menu Utilitários, Procurar

Clique no botão “Todas as seleções” para expandir a tela

Consystem Informática Ltda Página 181 de 265


Consystem
Informática WORKSHOP ABAP

Cole o nome da exit no campo Nome de componente e clique em executar

A ampliação será exibida

Toda exit está associada a uma ampliação e é esta ampliação que deve ser incluída em
um projeto para poder ser ativada.

Consystem Informática Ltda Página 182 de 265


Consystem
Informática WORKSHOP ABAP

- Form – Neste caso, a exit está criada e já está sendo


executada, porém sem código. Basta inserir o código e salvar que ele
será executado. Para localizar este tipo de exit deve-se procurar por EXIT ou
USEREXIT ou ainda verificar se há alguma documentação no customizing que informe
quais são as exits disponíveis.

Consystem Informática Ltda Página 183 de 265


Consystem
Informática WORKSHOP ABAP

Badi

Badi (Business Add In) é a nova técnica de ampliação da SAP.

Para utilizar uma badi são necessárias duas etapas:

Definição: Na seção de definição é criada uma ampliação a ser chamada dentro do


código. Um badi standard já possui a definição criada através da transação SE18

Consystem Informática Ltda Página 184 de 265


Consystem
Informática WORKSHOP ABAP

Implementação: é onde é gravado o código que será executado no momento em que os


métodos da badi forem chamados.

Consystem Informática Ltda Página 185 de 265


Consystem
Informática WORKSHOP ABAP

Uma das formas utilizadas para se encontrar uma badi em um programa é pesquisar pelo
método get_instance.

No exemplo abaixo o método get_instance está verificando se a badi EHS_PS_002 está


implementada ou não. Se estiver ativa ele irá chamar o método ENTRY_INQUIERY.

Consystem Informática Ltda Página 186 de 265


Consystem
Informática WORKSHOP ABAP

Sapscript

Um formulário SAPscript é utilizado para criar layout de páginas e para a impressão de


imagens.

Um formulário tem no máximo 16 caracteres e pode ser constituído por letras


maiúsculas e números. O nome tem de começar por uma letra.

O SAPSCRIPT é a ferramenta do SAP para criação de formulários. A opção pela


utilização desta ferramenta se dá pela necessidade de alguns recursos gráficos que não
podem ser obtidos através de código de ABAP comum (Reports). Com o SAPSCRIPT é
possível criar um formulário com logotipo, letras formatadas de vários tamanhos,
criação de grades, código de barras, etc.

Apesar de ser uma ferramenta poderosa na geração de formulários, o SAPscript ainda


apresenta uma série de limitações, o seu verificador de erros e debug não possuem as
mesmas características do editor ABAP. Caso, seja digitado um comando com grafia
errada ou sem sentido lógico dentro de um formulário, não será detectado pelo mesmo e
poderá não ser executado, passando às vezes despercebido pelo programador.

Para que o SAPSCRIPT funcione é necessário um programa ABAP que deverá conter
algumas funções de chamada e controle do SCRIPT

Consystem Informática Ltda Página 187 de 265


Consystem
Informática WORKSHOP ABAP

Estrutura de Chamada e Controle do SAPSCRIPT

CALL FUNCTION
“OPEN_FORM”

CALL FUNCTION
“START_FORM”

CALL FUNCTION
“WRITE_FORM”

CALL FUNCTION
“END_FORM”

CALL FUNCTION
“CLOSE_FORM”

Esta seqüência de funções deverá ser inserida no programa ABAP que irá iniciar
o SAP SCRIPT.

Consystem Informática Ltda Página 188 de 265


Consystem
Informática WORKSHOP ABAP

O formulário
Trabalhar com um formulário SAPscript não é complicado, desde que se entenda
seus componentes da maneira correta. Um formulário começado de maneira errada pode
ser um grande problema pois para ser corrigido pode ser necessário o mesmo ou mais
tempo que a criação de um novo.

Para isto é aconselhável que se saiba qual o tipo de impressora utilizada, se a


impressora for do tipo matricial é aconselhável que as medidas utilizadas na construção
do formulário seja LN(Linha) e CH (Caracteres); se a impressora for laser, jato de tinta,
térmica ou qualquer tipo de impressora gráfica deve-se utilizar CM (Centímetro),
MM(Milímetro). É importante salientar que se estivermos utilizando uma impressora
matricial a ordem de impressão é muito importante para a correta edição do formulário
pois os comandos de posição funcionam mas devemos lembrar que a cabeça de
impressão não volta ou seja a leitura do formulário é feita linha a linha, já as
impressoras gráficas isso não ocorre pois a leitura é feita página a página.

O SAP possui vários formulários standards incluídos, estes formulários estão


localizados no mandante 000 e através deles é possível fazer uma cópia e alterá-los. Os
formulários standard funcionam como programas standards, e os formulários criados
devem ser iniciados pelas letras Z ou Y. Para modificar um formulário standard é
necessário fazer uma cópia do mesmo, modificar a cópia e, em seguida, alterar a
configuração no R/3 para que utilize o novo formulário.

Consystem Informática Ltda Página 189 de 265


Consystem
Informática WORKSHOP ABAP

Copiando um formulário
Execute a transação SE71

Colocar o nome do formulário e o idioma desejado. Se o formulário for standard


deve-se utilizar o idioma no qual o formulário foi criado. Primeiramente devemos fazer
uma cópia do mandante 000 para o que se está trabalhando.

Seqüência de Cópia:

Passo 1 Passo 2

Mandante 000 Mandante de Mandante de


Idioma : Original desenvolvimento desenvolvimento
Idioma Original Idioma PT

Consystem Informática Ltda Página 190 de 265


Consystem
Informática WORKSHOP ABAP

PASSO 1

1 – Copiar o formulário. Ex: Formulário MEDRUCK

2 - Digitar o Nome do Formulário original (MEDRUCK)

3 - Digitar o Mandante de origem (000)

4 - Digitar o Formulário de destino (temporário ZXX_TESTE)

5 – Desmarcar “Só idioma original” e marcar “Log processo”

6 - Clicar no botão Executar F8

Consystem Informática Ltda Página 191 de 265


Consystem
Informática WORKSHOP ABAP

Log da copia

Consystem Informática Ltda Página 192 de 265


Consystem
Informática WORKSHOP ABAP

PASSO 2

7 – Note que o idioma original foi definido em D (Alemão). Entre na transação SE71
para modificar o formulário no idioma original (DE).

8 - Dentro da tela do formulário, clique em Utilitários / Converter idioma original

Consystem Informática Ltda Página 193 de 265


Consystem
Informática WORKSHOP ABAP

9 – Informe o idioma desejado (PT)

10 - O formulário será modificado para o idioma original PT.

Obs : Para criar um formulário novo, basta criar diretamente no idioma PT

Consystem Informática Ltda Página 194 de 265


Consystem
Informática WORKSHOP ABAP

Partes de um formulário

1. Dados Administrativos – Nome, descrição do formulário, idiomas criados,


autor, e status são algumas das informações exibidas neste item.

Consystem Informática Ltda Página 195 de 265


Consystem
Informática WORKSHOP ABAP

2. Configurações globais - Informações gerais do formulário, como formato e


orientação da página que serão utilizados, parágrafo e fontes utilizados como
default (quando nenhum for especificado).

Consystem Informática Ltda Página 196 de 265


Consystem
Informática WORKSHOP ABAP

Páginas - São definidas uma ou várias páginas, que


devem ocorrer no formulário. Dos atributos de uma página fazem
parte o nome da página seguinte, assim como o tipo de numeração de páginas. Através
da indicação da página seguinte assim como da definição de uma página inicial do
formulário nos dados de cabeçalho, o usuário determina a seqüência de páginas.

São os elementos responsáveis pelo agrupamento das janelas. Você deve criar uma
página para cada layout de impressão definido. Por ex.: Para um relatório que terá
sempre um cabeçalho e linhas de detalhe você só ira precisar de uma página mas, para
uma Nota Fiscal que tem uma layout para a primeira página e um outro diferente para as
páginas seguintes, você terá que definir 2 páginas.

Consystem Informática Ltda Página 197 de 265


Consystem
Informática WORKSHOP ABAP

Note que a primeira página (FIRST) tem como página seguinte a NEXT. Na página
NEXT a página seguinte é ela mesma.

A primeira página do relatório terá o layout da FIRST. Todas as demais terão o layout
da NEXT.

Consystem Informática Ltda Página 198 de 265


Consystem
Informática WORKSHOP ABAP

Janelas - As janelas representam unidades lógicas,


ainda não têm nenhuma expansão física, mas um nome, que indica
a finalidade do texto a sair na janela. Por exemplo, uma janela de endereço, uma janela
para o cabeçalho de uma carta, etc.

A cada janela está atribuída uma categoria de janela. A categoria mais importante é a
janela principal. Na janela principal aparece texto "corrido", é possível se estender
através de janelas principais de várias páginas. Ao contrário, as outras categorias de
janela não permitem que o texto que já não cabe na janela, seja prosseguido em uma das
páginas seguintes quando ocorrer novamente a janela.

As janelas são a base da construção do layout. As janelas podem ser criadas sem limites
e tem por finalidade dividir espacialmente as regiões de um formulário para operações
independentes. Fica a critério do desenvolvedor, no caso da criação de formulários
novos, a quantidade, a localização e o tamanho das janelas a serem criadas.

Consystem Informática Ltda Página 199 de 265


Consystem
Informática WORKSHOP ABAP

Essas janelas podem ser criadas basicamente em 3 tipos distintos:

MAIN - janelas do tipo MAIN são as mais importantes do relatório (janela pela
qual o formulário se guia). Somente é permitido um tipo de janela MAIN por
formulário, e é a única janela obrigatória em uma página, ou seja, todo
formulário deve conter pelo menos a janela main. Pode-se criar mais de uma
janela MAIN por página, no entanto essas janelas, na verdade, só são divididas
fisicamente, uma vez que seus elementos e processamento obedecem aos
mesmos comandos, e não podem ter nomes diferentes. A passagem de uma
janela MAIN para outra pode ser automática ou forçada pelo usuário. Quando o
espaço físico de uma janela MAIN está tomado e necessita-se de mais dados na
mesma, o formulário automaticamente passa à próxima janela MAIN do
formulário. É através desse princípio que uma relatório ganha número de
páginas automaticamente quando da execução de um relatório desse tipo,
conforme os dados são preenchidos. Para forçar a passagem de uma janela
MAIN para outra, o usuário poderá utilizar o comando:

/: NEXT-WINDOW

A lógica de sequência das janelas MAIN de um formulário segue sempre a um


critério. Dentro de uma página a navegação de uma MAIN para outra segue de
acordo com os índices dessas janelas dentro do formulário, e quando uma nova
página é gerada, a contagem segue a mesma disposição, continuamente.
O exemplo abaixo, figura a situação de uma diagramação conforme uma página
de jornal. A sequência de preenchimento dos dados na página através do
povoamento normal segue:

Consystem Informática Ltda Página 200 de 265


Consystem
Informática WORKSHOP ABAP

VAR - essa janela apresenta uma característica própria, que necessita de


verificação constante do formulário com seus dados, que podem variar durante a
execução do relatório. Esse tipo de janela deve ser utilizado quando se pretende
trabalhar com textos e valores que variam, como exemplos de mensagens que
podem mudar durante o decorrer da execução do formulário. Janelas do tipo
VAR podem ter tamanhos diferentes em cada página.

CONST - são janelas onde os dados são constantes desde seu primeiro
preenchimento até o fechamento do formulário. Geralmente nesse tipo de janela
são incluídos objetos e textos que permanecem os mesmos durante todo o
relatório, independente do número de páginas, como logos e rodapés. Janelas do
tipo CONST devem ter o mesmo tamanho em todas as páginas.

Consystem Informática Ltda Página 201 de 265


Consystem
Informática WORKSHOP ABAP

Janelas de página – É o local onde as janelas são


associadas às páginas.
As Janelas de página podem ser entendidas pelo nosso conceito de layout propriamente
dito. São os elementos responsáveis pelo aparecimento ou não das janelas dentro de
uma determinada página, bem como seu posicionamento em relação à folha impressa. É
também através das Janelas de página que o desenvolvedor terá acesso aos Text
Elements de cada uma dessas janelas, responsáveis pelo tratamento dos dados em tempo
de execução do formulário

Consystem Informática Ltda Página 202 de 265


Consystem
Informática WORKSHOP ABAP

No nosso formulário, algumas janelas serão exibidas somente na página FIRST,


outras somente na NEXT e algumas serão exibidas nas 2 páginas.

Consystem Informática Ltda Página 203 de 265


Consystem
Informática WORKSHOP ABAP

Formatos de parágrafo - Os parágrafos são as


unidades de layout em SAPscript. Todos os textos entrados no
editor são compostos por parágrafos diferentes. O início de um parágrafo está marcado
pela marcação de parágrafo na coluna esquerda do editor. No formulário são definidos
os nomes e as características dos parágrafos.

Das características, ou atributos, que podem ser definidos para os parágrafos, faz parte,
por exemplo, o alinhamento do texto, o espacejamento de linhas, a família de caracteres
utilizada, etc.

São elementos que podem ser criados pelo usuário e apresentam informações dos textos
de uma determinada janela. Nesses parágrafos são determinados tipos de fontes,
tabulações, negrito ou sublinhado, etc... São configurações específicas para um
determinado parágrafo a ser impresso

Consystem Informática Ltda Página 204 de 265


Consystem
Informática WORKSHOP ABAP

Formatos de caracteres - As cadeias de caracteres são


elementos de layout, que atuam em uma seção de texto de um
parágrafo. As cadeias de caracteres são inseridas no texto atual. O início da seção de
texto é marcado com a combinação de caracteres <XX> e o fim com </>. XX que
corresponde ao nome da cadeia de caracteres que é definido no formulário.

São informações semelhantes às do parágrafo, no que diz respeito a formatação de


textos, no entanto podem ser aplicados a trechos de textos e não necessariamente a
linhas inteiras do formulário.

Exemplo:

Para imprimir o texto abaixo,

Texto normal – Texto em Negrito

A codificação no Sapscript seria da seguinte forma:

Texto normal - <B>Texto em Negrito</>

Consystem Informática Ltda Página 205 de 265


Consystem
Informática WORKSHOP ABAP

Elementos de texto - Corresponde à lógica de


processamento e comportamento de uma janela durante a
execução do formulário. É responsável pelos valores que serão impressos no mesmo,
bem como seu posicionamento dentro da janela e seu tipo de caracter.

No botão Janelas de página, é possível selecionar qualquer uma das janelas existentes
em uma determinada página, simplesmente clicando o mouse sobre o seu nome e
apertando o botão selecionar, ou mesmo dando um “double-click” diretamente sobre o
nome da janela desejada. Uma vez selecionada a janela e clicando em (Elementos
de Texto) será exibida a tela para criação dos textos a serem impressos.

Consystem Informática Ltda Página 206 de 265


Consystem
Informática WORKSHOP ABAP

Nesses elementos do SAPscript, o programador poderá utilizar alguns comandos


semelhantes ao do ABAP/4, com a indicação de que se trata de uma linha de comando
para o formulário (/: à esquerda da linha). Abaixo, alguns dos comandos que podem ser
utilizados de dentro dos elementos de texto de uma janela em SAPscript:

IF..ELSE..ENDIF

CASE..WHEN

DEFINE

PERFORM..USING..CHANGING

BOX..FRAME

INCLUDE

O comando include dentro de uma janela de um formulário SAPscript serve para


inserir um objeto. Esse objeto pode ser desde um logo, até um texto com várias
linhas.

Ex.:

/: INCLUDE name OBJECT object ID id LANGUAGE spras

Consystem Informática Ltda Página 207 de 265


Consystem
Informática WORKSHOP ABAP

Criação de sapscript - Exemplo

- Entrar na transação SE71


- Informar o nome do formulário (ZXX_NOVO) e clicar em Criar.

- Clicar em OK

Consystem Informática Ltda Página 208 de 265


Consystem
Informática WORKSHOP ABAP

- Informar a descrição do formulário

- Clicar em Configurações / Form Painter para certificar-se de que a opção Form Painter
gráfico está marcada.

- Clicar em OK

- Clicar no botão de Layout

Consystem Informática Ltda Página 209 de 265


Consystem
Informática WORKSHOP ABAP

Será exibida a tela de layout do sapscript. São exibidas 2 janelas, uma contendo os
dados da primeira página e outra exibindo o layout da página. A Janela MAIN da página
1 é criada automaticamente.

Consystem Informática Ltda Página 210 de 265


Consystem
Informática WORKSHOP ABAP

- Redimensionar a janela Main para o formato aproximado ao da figura abaixo:

Consystem Informática Ltda Página 211 de 265


Consystem
Informática WORKSHOP ABAP

- Criar uma janela de cabeçalho clicando no botão criar no quadro Janela

Será criada a janela WINDOW1 dentro da página 1 e será selecionada automaticamente


na tela principal

Consystem Informática Ltda Página 212 de 265


Consystem
Informática WORKSHOP ABAP

- Clicar no botão de renomear para modificar o nome da Janela WINDOW1.


Informar o nome CAB e clicar em OK

- Redimensionar a janela CAB para o formato aproximado ao da figura abaixo

Consystem Informática Ltda Página 213 de 265


Consystem
Informática WORKSHOP ABAP

- Criar uma janela de RODAPE clicando no botão criar no quadro Janela

- Será criada a janela WINDOW1 dentro da página 1 e será selecionada


automaticamente na tela principal.

- Clicar no botão de renomear para modificar o nome da Janela WINDOW1.


Informar o nome RODAPE e clicar em OK
- Redimensionar a janela RODAPE para o formato aproximado ao da figura abaixo

Consystem Informática Ltda Página 214 de 265


Consystem
Informática WORKSHOP ABAP

- Criar um formato de parágrafo clicando no botão Formatos de parágrafo.

Consystem Informática Ltda Página 215 de 265


Consystem
Informática WORKSHOP ABAP

- Criar o formato de parágrafo NO

- Criar o formato de parágrafo NE

- No parágrafo NE, clicar no botão e marcar o atributo Negrito.

Consystem Informática Ltda Página 216 de 265


Consystem
Informática WORKSHOP ABAP

- Depois de criar os parágrafos clicar no botão para exibir os dados do cabeçalho


do formulário

Consystem Informática Ltda Página 217 de 265


Consystem
Informática WORKSHOP ABAP

- Clicar em Configurações Globais

- Informar o parágrafo NO como parágrafo default do formulário

Consystem Informática Ltda Página 218 de 265


Consystem
Informática WORKSHOP ABAP

- Clicar em Janelas de página para incluir as informações a serem impressas.

- Com a janela MAIN selecionada (cor azul) clicar em Elemento de texto . Criar os
2 elementos de texto abaixo (CABECALHO e DETALHE)

- Voltar para a tela de Janelas de página e criar os textos abaixo:

Consystem Informática Ltda Página 219 de 265


Consystem
Informática WORKSHOP ABAP

- Salvar e ativar o formulário.

Consystem Informática Ltda Página 220 de 265


Consystem
Informática WORKSHOP ABAP

Programas de impressão
Os programas de impressão são os programas que preenchem os dados do formulário e
chamam as funções de impressão.

Criação do programa de impressão (report) ZRXX_NOVO.

- SE38

- Criar

Consystem Informática Ltda Página 221 de 265


Consystem
Informática WORKSHOP ABAP

- Codificar o programa de impressão.


*&---------------------------------------------------------------------*
*& Report ZRXX_NOVO
*&
*&---------------------------------------------------------------------*
*&
*&
*&---------------------------------------------------------------------*

REPORT zrxx_novo.

TABLES: t001.

* Tipos
TYPES: BEGIN OF ty_empresa,
bukrs TYPE t001-bukrs,
butxt TYPE t001-butxt,
END OF ty_empresa.

* Work area da tabela interna de empresa


DATA: wa_empresa TYPE ty_empresa.

* Tabela interna de empresas


DATA: t_empresa TYPE TABLE OF ty_empresa.

* Parâmetros de seleção
SELECTION-SCREEN BEGIN OF BLOCK param WITH FRAME TITLE text-001.
SELECT-OPTIONS: s_empr FOR t001-bukrs.
SELECTION-SCREEN END OF BLOCK param.

START-OF-SELECTION.
* Seleciona tabela empresa
SELECT bukrs butxt
INTO TABLE t_empresa
FROM t001
WHERE bukrs IN s_empr.

IF sy-subrc EQ 0.
SORT t_empresa BY bukrs.
ENDIF.

END-OF-SELECTION.
* Abre o formulário
CALL FUNCTION 'OPEN_FORM'
EXPORTING
device = 'PRINTER'
dialog = 'X'
form = 'ZXX_NOVO'
EXCEPTIONS
canceled = 1
device = 2
form = 3
OPTIONS = 4
unclosed = 5
OTHERS = 6.

IF sy-subrc NE 0.
MESSAGE ID sy-msgid TYPE 'E' NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ENDIF.

Consystem Informática Ltda Página 222 de 265


Consystem
Informática WORKSHOP ABAP

* Imprime o elemento de texto CABECALHO da janela MAIN


CALL FUNCTION 'WRITE_FORM'
EXPORTING
element = 'CABECALHO'
window = 'MAIN'
EXCEPTIONS
element = 1
function = 2
type = 3
unopened = 4
unstarted = 5
window = 6
OTHERS = 7.

IF sy-subrc NE 0.
MESSAGE ID sy-msgid TYPE 'E' NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ENDIF.

LOOP AT t_empresa INTO wa_empresa.


* Imprime o elemento de texto DETALHE da janela MAIN
CALL FUNCTION 'WRITE_FORM'
EXPORTING
element = 'DETALHE'
window = 'MAIN'
EXCEPTIONS
element = 1
function = 2
type = 3
unopened = 4
unstarted = 5
window = 6
OTHERS = 7.

IF sy-subrc NE 0.
MESSAGE ID sy-msgid TYPE 'E' NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ENDIF.
ENDLOOP.

CALL FUNCTION 'CLOSE_FORM'


EXCEPTIONS
unopened = 1
OTHERS = 2.

IF sy-subrc NE 0.
MESSAGE ID sy-msgid TYPE 'E' NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ENDIF.

Consystem Informática Ltda Página 223 de 265


Consystem
Informática WORKSHOP ABAP

Exemplo de programa standard de impressão: O programa RFFOBR_D é o programa de


impressão de boletos. A impressão é feita através do formulário J_1B_BOLETO_ITAU,
por default.

Consystem Informática Ltda Página 224 de 265


Consystem
Informática WORKSHOP ABAP

Consystem Informática Ltda Página 225 de 265


Consystem
Informática WORKSHOP ABAP

Customizações
É possível modificar, via transação SPRO, o programa de impressão e o formulário de
um determinado processo.

No exemplo abaixo, para imprimir uma cotação, no módulo de vendas, será utilizado o
programa RVADOR01 e o formulário RVORDER01.

Ambos podem ser copiados e modificados. Em seguida a configuração deve ser alterada
para utilizar o novo programa ou o novo formulário.

Consystem Informática Ltda Página 226 de 265


Consystem
Informática WORKSHOP ABAP

Comandos de Controle
ADDRESS Formatação automática de informação de endereço
BOTTOM Usado apenas na janela MAIN para imprimir no rodapé da janela
BOX Cria caixa
CASE Cria condição para argumentos
DEFINE Cria um novo símbolo em tempo de execução
HEX Passa valores hexadecimais diretamente
IF Cria condição para argumentos
INCLUDE Incluí outros textos e logotipos
NEW-PAGE Força uma nova página
NEW- Força uma nova janela
WINDOW
PERFORM Chama subrotina
POSITION Usado para caixas setando X & Y
PRINT- Inicializa um seqüência definida de controle de impressão
CONTROL
PROTECT Protege uma página de parada
RESET Reestarta seqüência de números de saída
SET COUNTRY Seta o país para campos
SET DATE Seta formato de data
MASK
SET SIGN Coloca o campo a direita ou esquerda do número
SET TIME Seta formato de hora
MASK
SIZE Usado apenas para caixa onde seta o tamanho da caixa
STYLE Usa um diferente tipo de estilo
SUMMING Adiciona valores para um total
TOP Usado apenas na janela MAIN para imprimir no topo da janela

Consystem Informática Ltda Página 227 de 265


Consystem
Informática WORKSHOP ABAP

Formatando Opções
(<) Alinha a esquerda
(>) Alinha a direita
‘’ Insere um prefixo ou sufixo literal
(C) Representa símbolo retirando-se os espaços em branco
(n) Define um comprimento explícito
(. n) Seta o número de casas decimais
+n Caracteres não setados a direita
(En) Representa um símbolo como um número exponencial
(Ff) Utiliza um tipo de caracter nos espaços
(I) Representa apenas valores não iniciais
(K) Ignora conversão de rotinas
( R) Força alinhamento a direita
( S) O símbolo é representado através de um campo
(T) O símbolo é representado através de um separador de milhar
(Z) Ignora zeros

Consystem Informática Ltda Página 228 de 265


Consystem
Informática WORKSHOP ABAP

BAPI / Batch Input

BAPI

A transação utilizada para visualizar todas as BAPIs é a BAPI.

BAPIs podem ser entendidas como funções (SE37) que são acessadas de dentro do sap
ou remotamente (RFC) para um determinado propósito. Em alguns caso elas
substituem totalmente um batchinput. Em outros casos pode ser necessário chamar 2 ou
mais bapis em seqüência para obter o mesmo resultado.

Consystem Informática Ltda Página 229 de 265


Consystem
Informática WORKSHOP ABAP

Ex.: A BAPI BAPI_SALESORDER_GETLIST lista todas as ordens de venda de um


cliente de acordo com parâmetros de entrada informados

Consystem Informática Ltda Página 230 de 265


Consystem
Informática WORKSHOP ABAP

O botão verde na frente de cada parâmetro exibe uma documentação sobre o que deve
ser preenchido naquele campo

Para utilizar a bapi, dentro do sap ou remotamente, ela deve estar com o status liberado

Consystem Informática Ltda Página 231 de 265


Consystem
Informática WORKSHOP ABAP

Batchinput

Os programas de batchinput são criados, na maioria das vezes, para fazer a entrada de
dados no SAP. Através de arquivos texto, planilhas excel ou outra origem, o programa
lê os dados, faz um mapeamento das telas e executa a transação que irá gravar as
informações no sap.

Para fazer o mapeamento das telas deve-se utilizar a transação SHDB

Exemplo de mapeamento das telas da transação ZTBB01

Consystem Informática Ltda Página 232 de 265


Consystem
Informática WORKSHOP ABAP

Em algumas transações, principalmente nas transações enjoy (com N no final: VT01 ->
VT01N) não é possível executar totalmente o batchinput. Estes casos devem ser
avaliados individualmente para escolher a melhor opção: Utilizar a transação antiga,
checar se a parte onde o batchinput funciona atende ao que é solicitado, verificar se
existem bapis com a mesma funcionalidade, combinar o uso de batchinput com bapi,
verificar outra transação para entrar com dados.

Consystem Informática Ltda Página 233 de 265


Consystem
Informática WORKSHOP ABAP

Geração do SHDB
Para gerar o SHDB, execute a transação SHDB conforme abaixo:

Nesta tela clique em New recording

Consystem Informática Ltda Página 234 de 265


Consystem
Informática WORKSHOP ABAP

Preencha os campos abaixo e clique em OK

Preencha a primeira tela do cadastro de bancos (FI01) e tecle ENTER

Consystem Informática Ltda Página 235 de 265


Consystem
Informática WORKSHOP ABAP

Preencha o nome do banco e clique em Salvar

Consystem Informática Ltda Página 236 de 265


Consystem
Informática WORKSHOP ABAP

Será exibida a tela final do SHDB. CLIQUE EM SALVAR.

Clique em Voltar para retornar à primeira tela da transação SHDB

Quando quiser exibir o SHDB, basta executar a transação SHDB, marcar a linha
desejada e clicar em exibir (óculos)

Consystem Informática Ltda Página 237 de 265


Consystem
Informática WORKSHOP ABAP

Você irá ver o SHDB gerado para a transação FI01

Para montar o mapeamento do SHDB dentro do seu programa você deve declarar uma
tabela interna da seguinte forma:

DATA: it_bdcdata TYPE TABLE OF bdcdata WITH HEADER LINE.

A tabela interna é do tipo bdcdata que é uma estrutura standard específica para executar
batchinput. Você pode entrar na transação SE11 e exibir a estrutura BDCDATA:

Consystem Informática Ltda Página 238 de 265


Consystem
Informática WORKSHOP ABAP

A sua tabela interna terá então 5 campos:


PROGRAM
DYNPRO
DYNBEGIN
FNAM
FVAL

Esta tabela interna deverá ser preenchida exatamente de acordo com o SHDB gerado
(exceto a primeira linha), mudando apenas os valores fixos pelos valores da tabela
interna de banco. Exemplo:

Primeira linha do SHDB – IGNORAR

Consystem Informática Ltda Página 239 de 265


Consystem
Informática WORKSHOP ABAP

Segunda linha

Neste caso preencher a tabela interna it_bdcdata da seguinte forma:


Clear it_bdcdata.
It_bdcdata-program = ‘SAPMF02B’.
It_bdcdata-dynpro = ‘0100’.
It_bdcdata-dynbegin = ‘X’.
Append it_bdcdata.

Terceira linha

Neste caso preencher a tabela interna it_bdcdata da seguinte forma:


Clear It_bdcdata.
It_bdcdata-fnam = ‘BDC_CURSOR’.
It_bdcdata-fval. = ‘BNKA-BANKL’.
Append it_bdcdata.

E daí em diante até a última linha do mapeamento.

Cada coluna do SHDB corresponde a um campo da tabela interna.

Consystem Informática Ltda Página 240 de 265


Consystem
Informática WORKSHOP ABAP

Ao final do mapeamento sua tabela interna it_bdcdata estará preenchida com todas as
informações necessárias para cadastrar um banco na transação standard FI01. Em
seguida, chamar a transação FI01 passando a tabela it_bdcdata como parâmetro para
que o cadastro seja efetuado.

Sintaxe:
CALL TRANSACTION ‘FI01’
USING it_bdcdata
MODE ‘A’
UPDATE ‘S’
MESSAGES INTO it_mestab.

A tabela interna it_mestab deve ser do tipo BDCMSGCOLL e irá conter as mensagens
emitidas durante a execução da transação FI01.

Resumindo, a lógica do programa pode ser definida assim:

Selecionar entrada (arquivo txt, planilha Excel, tabela transparente, tabela em outro
banco de dados)

Para cada banco encontrado (loop na tabela interna de bancos)

Limpar a tabela interna it_bdcdata e it_mestab.

Preencher a tabela interna it_bdcdata conforme o SHDB gerado modificando os


valores utilizados na geração do SHDB pelos campos da tabela interna de
bancos.

Chamar a transação FI01 para executar o batchinput

Em caso de erro, tratar a tabela interna it_mestab.

Fim para cada banco

Consystem Informática Ltda Página 241 de 265


Consystem
Informática WORKSHOP ABAP

Performance

Conceitos Básicos - Arquitetura Cliente-Servidor

O R/3 trabalha com a filosofia de cliente/servidor de 3 níveis:


Database Server: responsável pelo acesso e pela atualização de dados
Application Server: responsável pelo processamento de aplicação (tempo gasto com a
interpretação de comandos ABAP)
Frontend: responsável pelo processamento dos gráficos (tempo gasto pelo sistema R/3,
ou seja, o middleware e o kernel).

A carga de processamento entre estes 3 níveis pode ser visualizada da seguinte forma:

Quando se utiliza um “logon service” a alocação de servidores de aplicação é definida


automaticamente no momento do logon (é utilizado o servidor que está menos
carregado).

Sendo assim, para obtenção de melhor performance, deve-se minimizar o tempo


de comunicação entre os três níveis. Com o intuito de auxiliar esta tarefa, iremos
apresentar alguns pontos que devem ser observados na criação de programas.

Consystem Informática Ltda Página 242 de 265


Consystem
Informática WORKSHOP ABAP

Como obter melhor performance

Grandes vilões

Podemos destacar algumas construções como vilões no que dizem respeito à


performance:

Selects encadeados ao invés do uso de For All Entries;

Select ... Append ... Endselect ao invés do uso de Into Table;

Select * ao invés de Select <campos>;

Select single sem a chave completa ao invés de Select Up To 1 Rows;

Não uso de índices ou pesquisa por chaves primárias;

Falta de atenção no uso de selects em Cluster Tables;

Move-Corresponding por necessitar de comparação campo a campo.

Sort itab ao invés de Sort itab by campo1 campo2.

Read table sem binary search.

Consystem Informática Ltda Página 243 de 265


Consystem
Informática WORKSHOP ABAP

Comunicação entre Application Server e Database


Server

A comunicação entre o servidor de aplicações e o servidor do banco de dados é


realizada por meio de pacotes, que possuem tamanho fixo de bytes. Quanto maior for a
quantidade de informações solicitada ao banco de dados, maior será o número de
pacotes a ser trafegado na rede. Além disso, temos que cada pacote necessita de um
registro de header para que ele possa encontrar seu destino na rede. Como
consequência, temos um maior overhead na comunicação.
Isto significa que selecionando somente as colunas desejadas das tabelas, temos uma
redução no número de informações trafegadas e, consequentemente, um tempo menor
na comunicação.

Exemplo:
Select * from vbak.
Supondo que a tabela VBAK possua 1.000 registros e que cada registro possua 575
bytes, temos um total de 575.000 bytes a trafegarem pela rede. Se a rede estiver
configurada para utilizar pacotes de 32 Kbytes (32.768 bytes), temos 18 pacotes.
Considerando que cada pacote possui um header para identificação, podemos chegar a
até 25 pacotes. Se fossem selecionadas somente as colunas desejadas, poderíamos obter
um ganho no número de pacotes a transitarem na rede.

Selects encadeados
Quando temos que utilizar seleções entre tabelas dependentes, aparentemente é mais
simples encadear os selects e no final processar o dado encontrado. Porém, quanto mais
cursores o R/3 possui aberto, mais lenta é a pesquisa. Por este motivo construções onde
temos selects encadeados, ou ainda, vários comandos dentro do bloco select ... endselect
são condenadas.

Cursor Cashing
Quando um comando select é executado, o database server executa comandos de
Declare e Prepare antes da seleção propriamente dita. Em seleções repetidas dentro de
um mesmo programa, estes comandos podem ser evitados desde que os campos da
cláusula where e os campos de seleção estejam sempre na mesma ordem. Para isto,
sugere-se que se utilize sempre a mesma ordem do Data Dictionary.

Exemplo:
Pela ordem invertida dos campos, cada um dos comandos abaixo utiliza os comandos
Declare e Prepare.
Select vbeln auart into (vbak-vbeln, vbak-auart) from vbak where vbeln = xxx and auart = yyy.
Select vbeln auart into (vbak-vbeln, vbak-auart) from vbak where auart = yyy and vbeln = xxx.
Select auart vbeln into (vbak-auart, vbak-vbeln) from vbak where vbeln = xxx and auart = yyy.
Select auart vbeln into (vbak-auart, vbak-vbeln) from vbak where auart = yyy and vbeln = xxx.

Consystem Informática Ltda Página 244 de 265


Consystem
Informática WORKSHOP ABAP

Logical Database
Supondo um banco de dados lógico definido com quatro tabelas e um programa que
utiliza somente duas (a primeira e a terceira da hierarquia). Caso somente as três
primeiras tabelas sejam declaradas na cláusula tables, o banco de dados lógico trará
automaticamente todos os campos chaves da tabela omitida e todos os campos das
tabelas declaradas e que não são utilizadas no comando get. Sendo assim, é mais
vantajoso declarar todas as tabelas e realizar um get nas não utilizadas somente com um
dos campos chave.

Exemplo:
Logical Database VAV: VBAK → VBUK → VBKD → VBPA

tables: vbak, vbuk, vbkd, vbpa.


get vbak fields vbeln auart kunnr.
get vbuk fields vbeln. ← Somente para não buscar todos os campos chaves
get vbkd fields vbeln. ← Somente para não buscar todos os campos chaves
get vbpa fields vbeln parvw kunnr.

Direct Access
Sempre que não for possível direcionar a pesquisa para a chave primária ou índices
secundários, o sistema realizará uma busca sequencial no banco de dados, isto significa
que ele passará por todos os registros da tabela para conseguir encontrar os registros
desejados. Especificando os campos chaves ou os campos de algum índice secundário
na relação de campos do where, o sistema realiza um acesso direto, reduzindo
bruscamente o número de registros pesquisados.
Para saber se um determinado índice secundário está sendo utilizado, pode-se utilizar a
transação ST05 (SQL Trace) e na lista apresentada, selecionar a opção “Explain SQL”.

Recursos do Banco de Dados


Sempre que possível, utilize recursos do banco de dados como os comandos sum, avg,
min e max. Com isto, obtemos ganho em relação à comunicação, onde o volume de
informações a trafegarem diminui e em relação à processamento interno, visto que o
programa não precisará realizar o comando já executado pelo banco de dados. Isto é, em
vez de selecionar, por exemplo, 1.000 registros com valores de ordens de vendas para
somá-los no programa, utilize o comando sum e pegue apenas 1 registro com o valor da
soma.

Uso dos Operadores


O uso de vários operadores or para o mesmo campo pode ser substituído por um
operador in.
Exemplo:
A operação lógica: x1 = a1 and ( x2 = y1 or x2 = y2 or x2 = y3)
Pode ser substituída por: x1 = a1 and x2 in (y1, y2, y3)

Consystem Informática Ltda Página 245 de 265


Consystem
Informática WORKSHOP ABAP

Comando “update”
Podemos utilizar o comando update...set... no lugar dos comandos select... e update... .

Exemplo:
Em vez de utilizar o comando:
Select * from sflight
where carrid = ‘LH’.
Add 1 to sflight-seatsocc.
Update sflight.
Endselect.

Deve ser utilizado o comando:


Update sflight
set seatsocc = v_seatsocc + 1
where carrid = ‘LH’

Comando “insert”
Ao realizar a inserção de vários registros de uma mesma tabela interna para uma tabela
transparente, podemos utilizar um único comando insert ... from table ... accepting
duplicate keys ao invés dos comandos loop ... insert ... endloop.
A adição “accepting duplicate keys” deve ser utilizada se existe a suspeita de que algum
registro da tabela interna possa existir na tabela transparente. Neste caso, o comando
não é terminado no meio da execução, mas SY-SUBRC é zerado. Em caso de erro, deve
ser utilizado um update ... from table ... para que os registros existentes possam ser
atualizados.

Consystem Informática Ltda Página 246 de 265


Consystem
Informática WORKSHOP ABAP

Cluster Tables
Aparentemente, sempre é mais vantajoso especificar todos os campos possíveis na
cláusula where, pois assim diminuímos o número de dados selecionados já no Banco de
Dados. Esta regra possui uma única exceção: Cluster Tables. Este tipo de tabela, possui
uma estrutura diferente no Banco de Dados. Os campos que ela possui são os campos
chaves e um outro que possui todos os demais campos compactados. Tomando por
exemplo a tabela BSEG, podemos dizer que ela possui 6 campos: MANDT, BUKRS,
BELNR, GJAHR, BUZEI e todos os demais campos compactados em um só. Em
termos práticos, se especificarmos na cláusula where algum campo que não seja chave,
o banco de dados terá que descompactar todo o campo para realizar a comparação.

Exemplo:

O comando abaixo deve ser evitado:

Select belnr buzei zuonr


into table i_bseg
from bseg
for all entries in i_bkpf
where bukrs = i_bkpf-bukrs and
belnr = i_bkpf-belnr and
zterm = ‘0001’.

E o comando abaixo deve ser utilizado:

Select belnr buzei zuonr zterm


into table i_bseg
from bseg
for all entries in i_bkpf
where bukrs = i_bkpf-bukrs and
belnr = i_bkpf-belnr.
Delete i_bseg where zterm <> ‘0001’.

Consystem Informática Ltda Página 247 de 265


Consystem
Informática WORKSHOP ABAP

Seleções de múltiplas tabelas

Para a seleção em mais de uma tabela, dispomos de alguns meios que não prejudicam a
performance. O que podemos definir como regra é o que não fazer: utilizar selects
encadeados.

Os meios disponíveis dependem da versão do R/3 que está sendo utilizada:


A cláusula “For all entries”;
A cláusula “Inner Join”;
A cláusula “Left Outer Join”;
Criação de Views no Dicionário de dados.
Baseado em testes realizados com o Runtime Analise (transação SE30), foi comprovado
que a melhor solução, quando possível, é utilizar as cláusulas de join no banco de dados
(Inner Join e Left Outer Join). Estas opções são válidas para versões de Kernel do SAP
R/3 acima de 31I. Mesmo quando a versão é 30F, podemos ter o kernel atualizado para
31I.

Consystem Informática Ltda Página 248 de 265


Consystem
Informática WORKSHOP ABAP

Cláusula “For All Entries”


Esta cláusula deve ser utilizada sempre que a seleção de uma tabela depende
diretamente dos dados que estão em outra. Por exemplo, tendo uma tabela interna com
todas as ordens de venda (i_vbak) podemos utilizar este comando para selecionar todos
os itens destas ordens de venda (vbap) com apenas um comando.

Exemplo:

Em vez de utilizar:
loop at i_vbak.
Select vbeln posnr matnr appending table i_vbap
from vbap where vbeln = i_vbak-vbeln.
endloop.

Pode-se utilizar o comando:


Select vbeln posnr matnr into table i_vbap
from vbap
for all entries in i_vbak
where vbeln = i_vbak-vbeln.

Além de permitir a seleção em apenas um comando, temos ainda um ganho de


performance. No primeiro exemplo, para cada select executado dentro do loop, o banco
de dados realiza um Fetch / Open / Close. Para o segundo exemplo, temos a sequência
Fetch / Open / Fetch / Reopen / ... / Fetch / Reopen / Close. O tempo do ganho é,
basicamente o temos de todos os Close somados. Para analisar estes resultados, utilize a
transação ST05 (SQL Trace).

Cuidados especiais com o For All Entries


Registros repetidos: todos os registros repetidos na tabela de resultados são eliminados.
Portanto é aconselhável a utilização de campos chaves na tabela final para evitar a
duplicidade. Por exemplo, se a partir de uma tabela de ordens de venda, deseja-se
selecionar todos os itens com suas quantidades, na tabela de itens devemos utilizar os
campos vbeln e posnr, pois somente assim ordens com o mesmo material e quantidade
serão apresentadas.
Tabelas em branco: caso a tabela do for all entries esteja vazia, todos os registros da
tabela selecionada serão lidos. Portanto, deve-se tomar cuidado com o valor do sy-subrc
em selects sucessivos.
Dados inválidos: se a tabela do for all entries possuir algum dado inválido, o select será
abortado.

Consystem Informática Ltda Página 249 de 265


Consystem
Informática WORKSHOP ABAP

Cláusula “Inner Join”


Esta cláusula tem o mesmo resultado de uma definição de view no Dicionário de dados.
As duas tabelas são relacionadas e os registros que pertencem às duas são selecionados.

Exemplo:

Select f~carrid f~connid f~distance b~carrid b~connid b~bookid


into table i_bookflight
from sflight as f inner join sbook as b
on f~carrid = b~carrid
and f~connid = b~connid
and f~fldate = b~fldate
where f~fldate = '19990623'
and b~smoker = space.

Consystem Informática Ltda Página 250 de 265


Consystem
Informática WORKSHOP ABAP

Cláusula “Left Outer Join”


Esta cláusula difere da anterior pelo fato de que para um registro entrar na tabela de
resultados, não necessita estar nas duas tabelas, bastando estar em uma das duas.

Exemplo:
Select f~carrid f~connid f~distance b~carrid b~connid b~bookid
into table i_bookflight
from sflight as f left outer join sbook as b
on f~carrid = b~carrid
and f~connid = b~connid
and f~fldate = b~fldate
where f~fldate = '19990623'
and b~smoker = space.

Criação de Views
Ao criar uma view no dicionário de dados, estamos criando também uma view no banco
de dados e, portanto o seu acesso torna-se rápido.

Consystem Informática Ltda Página 251 de 265


Consystem
Informática WORKSHOP ABAP

Table Buffering
Utilizando-se corretamente a buferização, pode-se reduzir consideravelmente o tempo
que se leva para recuperar um registro.
Tipos de buferização
Completo: no primeiro acesso à tabela, todo o seu conteúdo é armazenado no buffer;
Genérico: é especificado um número ‘n’ de campos chaves desejados e assim que um
acesso é efetuado, todos os registros que contém chave igual aos ‘n’ campos chaves do
acesso são armazenados no buffer;
Parcial: Somente os registros lidos são armazenados no buffer.
Para analisar se o tipo de buferização está correto, pode-se utilizar a transação ST02.

Quando buferizar?
Tabelas pequenas;
Tabelas acessadas muito mais para leitura que para escrita;
Tabelas de controle (parametrização);
Tabelas Master Data pequenas.

Bypassing buffer
Podemos destacar alguns comandos que ignoram a existência do buffer:
select ... bypassing buffer;
select ... from <database views>
select ... distinct;
select ... count, sum, avg, min, max;
select ... order by (campos que não são chaves);
select ... for update;
cláusula where que contém o comando IS NULL;
SQL nativo (EXEC SQL ... ENDEXEC).

Índices secundários para as tabelas transparentes


Somente é possível criar índices secundários para tabelas transparentes. Tabelas cluster
e polled não possuem esta característica. Sempre que uma tabela é acessada por campos
que não são os campos chaves, deve ser analisada a possibilidade de criação de índices,
porém devemos ter cuidado na utilização para garantir que o comando está utilizando o
índice correto. Pode-se verificar o índice utilizado pela transação ST05. Sempre que
necessária a criação de um índice secundário, esta possibilidade deverá ser analisada por
um DBA.

Exemplo:
Caso tenho sido criado um índice com os campos campo3 e campo7 de uma
determinada tabela, o comando

select <campos>
from <tabela>
where campo3 = ‘AAA’ and
( campo7 = ‘2’ or campo7 = ‘3’ )

pode não executar corretamente o índice criado.

Consystem Informática Ltda Página 252 de 265


Consystem
Informática WORKSHOP ABAP

Portanto deve-se preferir o comando


select <campos>
from <tabela>
where ( campo3 = ‘AAA’ and campo7 = ‘2’ ) or
( campo3 = ‘AAA’ and campo7 = ‘3’ )

Quando utilizar índices secundários


Campos não chaves são repetidamente utilizados para seleções;
Somente uma pequena parte de uma grande tabela é selecionada;
Cláusulas where não muito complexas;
Campos que compõe o índice reduzem significativamente o número de registros

Quando não utilizar índices secundários


Tabelas que são atualizadas constantemente gereram excessivos overheads durante a
atualização dos índices;
Campos que possuem valores semelhantes em toda a tabela.

Consystem Informática Ltda Página 253 de 265


Consystem
Informática WORKSHOP ABAP

Minimizando o tempo de processamento do Application Server

Tabelas internas e alocação de memória


Vimos que selects encadeados são vilões contra a performance. A solução é jogar os
dados para a memória com a cláusula into table. Porém também não podemos ficar com
todos os dados na memória por muito tempo, pois caso a memória RAM do Application
Server esteja esgotada, ele deverá utilizar memória virtual, ou seja, armazenar
informações e dados dos programas em disco, ocorrendo perda de tempo com paginação
e E/S de disco. A solução é utilizar o comando free para liberar todas as tabelas internas
que não serão mais utilizadas pelo programa.

Definição de tabelas internas


Para a definição das tabelas internas, é necessário que seja preenchida a cláusula occurs.
Como definí-la? Para isto, deve-se conhecer o volume de dados e a forma de inserção
dos dados na tabela interna. Isto porque o número especificado para as ocorrências
(occurs) indica de quanto em quanto a tabela terá sua alocação de memória. Isto é, para
uma tabela definida com occurs 10, na primeira inserção de dados (append, collect,
insert), serão alocados 10 registros; na inserção do 11o. registro, serão alocados mais 10
posições e assim por diante.

Desalocação temporária de memória


Caso uma tabela interna deva permanecer na memória enquanto é realizado algum
processamento “pesado”, uma solução é exportar a tabela para a memória (com o
comando export <i_tab> to memory id <posição de memória>) e ao final deste
processamento, buscar a tabela de onde ela se encontra (com o comando import <i_tab>
from memory id <posição de memória>).

Expressões lógicas
Toda expressão lógica é interpretada da esquerda para a direita, isto é, se uma expressão
com duas condições e um operador ‘and’ é processada e a primeira condição é falsa, a
segunda nem será processada. Portanto, todas as expressões lógicas deverão ser
montadas levando-se em conta a probabilidade de sucesso ou falha em cada uma de suas
condições

Call Function ... In Update Task


Praticamente todos os programas standard utilizam esta ferramenta para que a
atualização de dados não se torne o gargalo do sistema. Isto significa que a transação
realiza todas as verificações necessárias e em seguida chama uma função que enfileira
no servidor a requisição para a atualização dos dados. Caso aconteça alguma exceção na
atualização dos dados, o usuário recebe uma mensagem de ‘update was terminated’.

Consystem Informática Ltda Página 254 de 265


Consystem
Informática WORKSHOP ABAP

Ferramentas para auxílio no desenvolvimento


Em busca de uma melhor performance no desenvolvimento das aplicações, podemos
contar com uma série de ferramentas disponibilizadas no R/3, onde podemos verificar
os recursos utilizados pelos servidores de aplicação e de banco de dados.

Consystem Informática Ltda Página 255 de 265


Consystem
Informática WORKSHOP ABAP

ST02 - System Workload Analysis:


Nesta transação é possível analisar o tempo de resposta de diversas operações
executadas pelos servidores.

Consystem Informática Ltda Página 256 de 265


Consystem
Informática WORKSHOP ABAP

ST04 - Cursor Cash


Nesta transação é possível analisar a performance do banco de dados por completo.

Consystem Informática Ltda Página 257 de 265


Consystem
Informática WORKSHOP ABAP

ST05 - SQL Trace


Nesta transação, temos a relação de todas as tabelas acessadas durante o período em que
o Trace permaneceu ligado, juntamente com o número de registros lidos, os campos
utilizados para pesquisa, qual índice secundário foi utilizado, o número de
prepare/fetch/open executados pelo banco de dados, entre outras funcionalidades.

Consystem Informática Ltda Página 258 de 265


Consystem
Informática WORKSHOP ABAP

SE30 - Runtime Analisys


Nesta transação, podemos selecionar quais os objetos que serão analisados: subrotinas,
tabelas internas, acessos à BD e acesso à memória. A execução, simula a transação (ou
programa) em questão e no final, exibe um relatório detalhado de todos os acessos
realizados pelo programa.

Consystem Informática Ltda Página 259 de 265


Consystem
Informática WORKSHOP ABAP

Consystem Informática Ltda Página 260 de 265


Consystem
Informática WORKSHOP ABAP

SM50 - Process Overview


Durante a execução de uma transação (ou programa), podemos analisar quais tabelas
estão sendo acessadas, se o acesso é sequencial ou direto, e até se é uma transação que
está sobrecarregando o servidor.

Consystem Informática Ltda Página 261 de 265


Consystem
Informática WORKSHOP ABAP

ANOTAÇÕES

Consystem Informática Ltda Página 262 de 265


Consystem
Informática WORKSHOP ABAP

ANOTAÇÕES

Consystem Informática Ltda Página 263 de 265


Consystem
Informática WORKSHOP ABAP

ANOTAÇÕES

Consystem Informática Ltda Página 264 de 265


Consystem
Informática WORKSHOP ABAP

ANOTAÇÕES

Consystem Informática Ltda Página 265 de 265

Você também pode gostar