Você está na página 1de 99

ANOTAÇÕES DA

ACADEMIA ABAP
2008

Marcel Valadares de Oliveira

INDICE

TRANSAÇÕES R/3 8

PRINCIPAIS TABELAS TRANSPARENTES 11

VARIÁVEIS DO SISTEMA (TABELA SY) 12

TABELAS 12
 Para criar um tabela transparente: 12
Academia ABAP - 2008

 Criar índice de tabela: 12


 Declarando tabela interna 15

TABELA CUSTOMIZADA 16
 Etapas para gerar automaticamente via R/3 tratamento para manipular Tabela Customizada 16
 COMO CRIAR A MANUTENÇÃO DA TABELA CUSTOMIZADA 19
 PARA ACESSAR A MANUTENÇÃO DA TABELA VIA TRANSAÇÃO CUSTOMIZADA. 22

COMANDOS PARA TABELAS: 25


 APPEND: 25
 DELETE: 25
 REFRESH / CLEAR: 25
 FREE: 25
 COLLECT: 25
 MODIFY: 25
 SORT: 26
 READ: 26
 UPDATE: 27
 INSERT : 27
 DESCRIBE TABLE: 27

ESTRUTURAS APPEND EM TABELAS TRANSPARENTES 27

TABELAS DE VERIFICAÇÃO 28

MENSAGEM 29
 Classe de mensagem: 29
 Mensagem p/ usuário 30

REPORT 30
 Sequência para criação do Report: 30

SET LEFT SCROLL BOUNDARY COLUMMNS X 31

COMANDOS E/OU TECLAS DE ATALHO 31

OPERADORES LÓGICOS 31

VARIÁVEIS: 32

CONSTANTES 32

ESTRUTURA CONDICIONAL: 32
 IF 33
 CASE 33

2
Academia ABAP - 2008

 Loops de repetição 33
 WHILE 34
 DO 34
 CHECK 35

PERFORM - SINTAXES DE PARÂMETRO 35

PARAMETERS 35

SELECT-OPTIONS: 35

COMANDO DE DESVIO DE EXECUÇÃO 36


 CONTINUE 36
 EXIT 36

PASSAGEM PARÂMETROS PARA PROGRAMA STANDARD 37

COMANDO HOTSPOT ON 38

COMANDO HIDE 38

COMANDO AT LINE-SELECTION 38

COMANDO GET CURSOR FIELD 39

CRIAR TRANSAÇÃO 39

CRIAR AJUDA DE PESQUISA ( SEARCH HELP OU MATH CODE) 41


 PASSO PARA CRIAÇÃO DE AJUDA DE PESQUISA: 41

CRIAR VISÕES ( VIEW ) 43


 PASSO PARA CRIAÇÃO DE UMA VIEW: 44

CRIANDO INCLUDES 47
 PASSO PARA CRIAÇÃO DE UMA VIEW: 47

SUBSTRING 49

PARAMENTROS DE SELEÇÃO 49
 RADIOBUTTON 49
 CHECKBOX 49

RANGE 49

TRANSLATE 50

CONCATENATE 50

SPLIT 50

SHIFT 50

3
Academia ABAP - 2008

SUB ROTINAS 51

MACHCODE OBJECT 51

SET PF-STATUS 51
 Habilitar/Desabilitar botões e funções de um PF-STATUS dinamicamente 52

GERANDO E CARREGANDO ARQUIVOS 53


 WS_DOWNLOAD 53
 WS_UPLOAD 53

SELECTION-SCREEN 54

AT USER-COMMAND 55

UTILIZAÇÃO DE ÍCONES 56

HELP-REQUEST 56

VALUE-REQUEST 56

CRIAÇÃO DE FUNÇÕES 56

COMUNICAÇÃO TELA -> PROGRAMA ABAP 57

BARRA DE STATUS PARA TELAS 58

SCREEN PAINTER – TRANSAÇÃO SE51 59

EDITOR DE LAYOUT DA TELA 60

MODIFICAÇÃO DINÂMICA DE ATRIBUTOS DE ELEMENTOS DA TELA. 60

VERIFICAÇÃO AUTOMÁTICA DE CAMPOS 61


 Verificação automática para um campo: 61
 Verificação automática para vários campos: 61
 Execução condicional de módulos baseados no FIELD - > algum valor que não seja o inicial. 61
 Execução condicional de módulos baseados no FIELD - > alguma alteração 62

Mudança dinâmica de telas em dialog programming. 62

DIALOG PROGRAMMING – TABLE CONTROL 63


 Modificação do atributos de uma table control (exemplos) 64
 Controlando os botões de scroll em uma table control 65
 Tornar uma coluna de um grid visível/invisivel 66
 Habilitar/desabilitar algumas células do grid 67
 VERIFICAR QUAL BOTÃO FOI PRESSIONADO DENTRO DE UMA LINHA DE UM TABLE
CONTROL 67

SET CURSOR 68

4
Academia ABAP - 2008

LEAVE TO LIST PROCESSING 68

SAP MEMORY E ABAP MEMORY 69

TAB STRIP 70
 Criação de tabs trips 70
 Para fazer scroll em uma tabstrip (navegar entre as páginas clicando nas abinhas) sem ativar o PAI.
71
 Para fazer scroll em uma tabstrip ativando o PAI 71

FIELD SYMBOLS 72

CRIAÇÃO DE INTERVALOS DE NUMERAÇÃO 72


 Criação de intervalos de numeração (para geração de número sequencial) 72
 Utilizar intervalo de numeração 73

SAP TRANSACTION 73

ATUALIZAÇÃO SÍNCRONA 74

ATUALIZAÇÃO ASSÍNCRONA 74
 LUW (Logical Unit of Work – Unidade lógica de trabalho) 74

OBJETS DE BLOQUEIO (FUNÇÕES DE ENQUEUE / DEQUEUE) 75


 Criando objetos de bloqueio. 76

FUNÇÕES STANDARD 78
 Para trabalhar com Notas Fiscais: 78
 Para se obter a BOM de um material 79
 Para testar o status de uma ordem 79
 Para criar jobs dentro de um programa abap 79
 Função que calcula diferença entre datas/horas 79
 Executar comandos do UNIX 79
 READ_TEXT 80
 POPUP SCREEN 80
 TEXTOS 82
 GERAL 82
 Funções para conversão de unidades/medidas 85

COMO UTILIZAR AUTHORITY-CHECKS 85


 Código Fonte Modelo. 86

PERFORMANCE E ERROS 87

CONVERSÕES DE DADOS E INTERFACES 88

5
Academia ABAP - 2008

 BATCH INPUT 88
 CALL TRANSACTION 88
 DIRECT INPUT 88
 Delivered BDC 89
 APPLICATION LINK ENABLE 89
 ELETRONIC DATA INTERCHANGE 89
 REMOTE FUNCTION CALL 89
 BUSINESS APPLICATION PROGRAMMING INTERFACE (BAPI) 89

RELATÓRIOS E FORMULÁRIOS 90
 ABAP QUERY 90
 REPORT WRITER e REPORT PAINTER 90
 INFORMATION SYSTEM 90
 SAPScript 90

ENHANCEMENTS 91

COMANDOS UTÉIS 91
 MOVE-CORRESPONDING 91
 SUM, AVG, MIN e MAX 91
 UPDATE TASK 92
 Para mandar um relatório direto para a impressora 92
 Para concatenar variáveis em um único parâmetro utilizar o &: 92

COMENTÁRIOS 92
 ÍNDICE 92
 CÓDIGO MORTO 92

DICAS E TRUQUES 92
 Conversões 92
 Tabelas internas e dicionário 93
 Como buscar resolução do vídeo 94
 Gravar objetos locais para request 94
 Função que cria match-code tipo estrutura de árvore para dados de catálogo 95

ALTERAÇÃO DE BARRA DE STATUS EM LIST VIEW 95

LISTA INTERATIVA – LER UM CHECKBOX MARCADO EM UMA LISTA REPORT 96

CARACTERÍSTICAS HERDADAS 96

BANCO DE DADOS LÓGICO 96

6
Academia ABAP - 2008

EXEMPLOS 99
 Exemplo de matchcode dinâmico dependendo de outro match code 99
 Exemplo criação de JOB 99
 Exemplo envio SAPOFFICE 99
 Exemplo do uso de field-symbol 99
 Relatório chamando job 99
 Enviar e-mail através do R/3 99
 Documentações na Internet: 99

7
Academia ABAP - 2008

TRANSAÇÕES R/3
AL11 Lista diretórios do SAP
AL21 Dados estatísticos sobre o código do programa

BIBS Exemplos de programas (on line) e utilização de controles


CA03 Exibir roteiro
CL03 Exibir classes (características)
CL30N Procurar objetos em classe

CMOD Ampliações - Exit's de campo


CR03 Centro de trabalho
IH01 Árvore hierárquica de local de instalação

LIBS Demostrativo de cores

ME23 Transação de pedido de compras - Criar user-exits


PRFB Field exit – através da CMOD
QS23 Modificar características de controle
QS41 Processar catálogo
S000 Menu principal do sistema (Tela inicial)
S001 Tela do Workbench ABAP/4
SA38 Execução de programa report
SD11 Modelo de Dados
SDBE Explorar SQL
SE01 Correção e manutenção do sistema de transportes
SE03 Utilitários do sistema de transporte - Modificar entrada de catálogos
SE05 Informações sobre transportes
SE07 Tela de status do sistema de transporte
SE09 Organizador do Workbench - Manutenção das change requests (workbench)
SE10 Manutenção das change requests (workbench e customizing)
SE11 Edição e manutenção de tabelas - Criar objetos do dicionário (tabelas, elementos de
dados, domínios...)
SE12 Apenas edição tabelas
SE14 utilitários de Dtabase

8
Academia ABAP - 2008

SE15 Informações do sistema do Dicionário de dados - Sistema info repository


SE16 Visualização e manutenção de tabelas -
SE17 Visualização de tabelas
ABAP/4 Trace - serve para verificar a performance de uma parte do programa -
SE30
Análise de tempo de execução do programa
SE32 Manutenção de elementos de textos
SE35 Módulos de diálogos
SE36 Base de dados lógicas
SE37 Biblioteca de funções ABAP/4 – Editor/criador de função
SE38 Editor de programa ABAP

SE41 Menu Painter - Criar status e menu para programa on-line


Screen Painter - Criar tela para programa on-line - Copiar tela de um programa para
SE51
outro
SE54 Geração visão de tabela
SE63 Tradução de rótulos de campos para outros idiomas
SE71 Cria SapScript - layout de tela
SE73 Manutenção de fontyes
SE78 Importar bitmap para R/3
SE80 Desenvolvimento de Objetos – Classe e outros objetos - Criar objetos (report, on-line,
transação...)
SE84 Informações do repositório
SE91 Manutenção de mensagens - Criação de classes
SE93 Manutenção e criação de Códigos de transação
SHDB Grava todos os processos executados no on-line para criação do batch-input
SHDG Valores Globais
SLIN Verificar a qualidade do código do programa
SM01 Travar transações
SM02 Enviar mensagens de sistema
SM04 Usuários - visualização
SM12 Exibição de transações travadas
SM13 Atualizações de requests

9
Academia ABAP - 2008

SM21 Visualização do log do sistema


SM30 Gerenciador de visualização de tabelas - Utilizada para rodar os programas gerados
com o "Gerador de atualização de tabela"
SM31 Gerenciador de tabelas

SM35 Monitoramento de JOBs em background - Processar pastas gravadas com o programa


de batch input
SM36 Definição de JOBs
SM37 Status de JOBs
SM50 Visualização de processos em andamento

SM51 Servidores do SAP


SM59 Visualização e Manutenção de RFC
SN04 Monitora logins
SN50 Monitora logins
SO99 Informações sobre as versões do R/3
SP01 Manutenção do SPOOL
SPAD Administração do SPOOL
SQ01 ABAP/4 Query - Desenvolvimento e execução
SQ02 ABAP/4 Query - Áreas funcionais
SQ03 ABAP/4 Query - Grupos de usuários
ST01 Trace do sistema (System Trace)
ST05 SQL Trace - Executa o SQL Trace
ST22 Análise de erros (dumps) em ABAP
STMS Gerenciamento de transporte de change request
SU01 Manutenção de Usuários (master)
SU02 Manutenção de "Profiles" de Usuários
SU20 Manutenção de autorizações em campos
SU21 Manutenção de autorizações em objetos
SU3 Definir configurações do usuário
SU50 Manutenção de definições de usuários
SU51 Manutenção de endereços de usuários
SU52 Manutenção dos parâmetros do usuário

10
Academia ABAP - 2008

SU53 Checagem das mais recentes autorizações do usuário


SU54 Menu de usuários
SU56 Exibição das autorizações do usuário

VA01 Ordem de venda


VA31 Programa de remessa
VA35 Lista programas de remessa

PRINCIPAIS TABELAS TRANSPARENTES


AUFK Dados mestres da ordem

AFKO Dados de cabeçalho da ordem de ordens PCP


Número lote controle - prueflos
Nro roteiro de operações da ordem – aufpl

AFFH Atribuição de MAP a ordem de trabalho


Nro roteiro de operações da ordem – aufpl

AFIH Cabeçalho de ordem manutenção


Nro equipamento – equnr

AFVC Operações da ordem


Nro roteiro da operação da ordem – aufpl

QALS Registro do lote de controle

QMEL Nota QM

QMIH Aviso de qualidade - Seção dos dados de manutenção

EQUI Equipamento dados mestres

EQKT Textos breves de equipamentos

KLAH Dados do cabeçalho de classe

KSSK Tabela de atribuição: objeto para classe

T024I Relac centro x grupo de planejamento

TFACS Calendário de fábrica (exibição)

J1BJ Transação p/ ver programa/formulário impressão de nota fiscal

J1B3 Exibir nota fiscal

11
Academia ABAP - 2008

VARIÁVEIS DO SISTEMA (TABELA SY)


sy-SUBRC Variável de retorno para comandos READ, LOOP, SELECT, CALL,
INSERT, DELETE, UPDATE...
sy-PAGNO Número da página do report (automático)
sy-TABIX Número da linha corrente dentro de um loop
sy-LINCT Número de linhas impressas no report (depois de impresso)
sy-LINSZ Número de colunas do report
sy-CUCOL Número da coluna onde o cursor está posicionado (no report)
sy-CUROW Número da linha onde o cursor está posicionado (no report)
sy-LOOPC Número de linhas da tabela interna (só funciona dentro do loop)
sy-LANGU Idioma utilizado no logon
sy-DYNNR Número da tela que está sendo executada (no programa on-line)
sy-MANDT Código do mandante (client) utilizado no logon
sy-TCODE Código da transação que está sendo executada
sy-UCOMM Código da tecla pressionada pelo usuário (report)
sy-DATUM Data do sistema
sy-UZEIT Hora do sistema
sy-REPID Nome do programa que está sendo executado (on-line ou report)
sy-UNAME Nome do usuário que efetuou o logon
sy-TITLE Nome do programa (definido na tela de atributos do programa)
sy-LISEL Contém a linha onde o usuário deu um clique duplo (no report)
sy-ULINE Quando utilizado com "WRITE" imprime um caracter "_" (underscore)
sy-VLINE Quando utilizado com "WRITE" imprime um caracter "|" (pipe)

TABELAS
 Para criar um tabela transparente:

Ir na SE11 digitar o nome da tabela clicar em criar... [E importante observar que o


mandante sempre deve fazer parte da chave primaria.

 Criar índice de tabela:

12
Academia ABAP - 2008

13
Academia ABAP - 2008

Salvar e Ativar.

 que é data element (zed_nome_xx)?


É importante para o texto é a especificação para se visualizar o label, ou seja, o
texto que descreve o campo

 Domínio (zdo_nome_xx) ?
criação de tipo, campo auxiliar que define tamanho e tipo do campo

 OBSERVAÇOES:

Todo campo de valor ou quantidade tem que preencher o campo referência.


Referência de Moeda  T001-waers.
Referência de Qtde  T001-menge.
Qtd de caracter para o nome dos campos na tabela  5

14
Academia ABAP - 2008

 Declarando tabela interna

Data: (nome_ti> like <tabela transp> occurs with hearder line.


(para usar tabela igual à transparente)
Ou
Data: begin of <nome-ti> occurs 0,
<nome-campo> like <tabela-trans> - campo,
.
.
.
end of <nome-ti>.

15
Academia ABAP - 2008

TABELA CUSTOMIZADA
 Etapas para gerar automaticamente via R/3 tratamento para manipular
Tabela Customizada

Definir o Grupo de Função a ser utilizado pelo Repository Object (tcode SE80).

Definir as características do objeto Grupo de Função.

Selecionar o objeto.

Criar novo objeto.

Selecionar a “Classe de Desenvolvimento” a ser utilizado e <Salvar>.

Criar uma nova Request e Avançar <Enter>.

16
Academia ABAP - 2008

O grupo de função definido será criado na classe de desenvolvimento.

O novo Grupo de Função foi


definido.

Criando uma tabela transparente customizada (tcode SE11). Por exemplo

ZCONTROLE.

17
Academia ABAP - 2008

Definir as características da tabela transparente.

Definir a estrutura da tabela (campos, data elements e domínios) e salvá-la.

18
Academia ABAP - 2008

Atribuir as opções técnicas.

Definir as
opções
técnicas e
<Salvar>.

Ao final ativar a nova tabela criada.

 COMO CRIAR A MANUTENÇÃO DA TABELA CUSTOMIZADA

Agora vamos definir a manutenção da tabela transparente. Para acessar o “Gerador


de atualização de tabela”, selecionar no menu Utilitários conforme descrito abaixo.

Definir os parâmetros de manipulação da tabela transparente.

Este botão permite o sistema


sugerir as telas de atualização a
serem utilizadas.

Pode ser utilizado telas de atualização


de duas categorias:
- apenas um nível (apresenta a
síntese da tabela e a alteração da
entrada de dados é efetuada nesta
tela mesmo);
- 2 níveis: um nível de tela de
síntese e uma tela seguinte
somente para alterar a entrada de
dados.

Para que o usuário tenha acesso a manutenção da tabela customizada, utilizar o


caminho apresentado abaixo.

19
Academia ABAP - 2008

20
Academia ABAP - 2008

Nesta tela de visão de tabelas é possível efetuar a atualização de dados.

Esta tela de atualização é a “tela de síntese” (o 1º nível de acesso definido na


geração de manutenção).

Permite o cadastramento de dados


novos na tabela.

Esta tela de atualização é a “tela individual” (o 2º nível de acesso definido na


geração de manutenção).

21
Academia ABAP - 2008

A seguir é apresentado a entrada efetuada na tabela pela tela de atualização


individual.

 PARA ACESSAR A MANUTENÇÃO DA TABELA VIA TRANSAÇÃO


CUSTOMIZADA.

Criar uma nova transação pelo Repository Object (tcode SE80).

22
Academia ABAP - 2008

Selecionar a opção de “transação c/parâmetros”.

23
Academia ABAP - 2008

Definir as características da transação.

Utilizar a transação para


“Atualização de tabela
ampliada”.

Definir também a tabela a ser acessada.

Definir os parâmetros da
tabela a ser atualizada .

Selecionar a “Classe de Desenvolvimento” a ser utilizado e <Salvar>.

Criar uma nova Request e Avançar <Enter>.

24
Academia ABAP - 2008

COMANDOS PARA TABELAS:


 APPEND:
Incluir registro em uma tabela
APPEND <tab_int>.

 DELETE:
Deleta registros da tabela.
DELETE <tab-int>. ou
DELETE <tab_int> INDEX <nro_registro>. ou
DELETE <tab_int> WHERE <cond> = <valor>.
Delete from <tab tranparente> where cod = xxx.

 REFRESH / CLEAR:
Deleta todos os registros da tabela.
REFRESH <tab_int>.
CLEAR <tab_int>[].
CLEAR <tab_int> ( Limpa Header Line ou seja cabeçalho)

 FREE:
Libera tabela da memória.
FREE <tab_int>.

 COLLECT:
Agrupa valores de uma tabela.
Ex. it_pedido (cód_forn, cód_pedido, cód_mat, valor)
It_totais (cód_forn, valor)
LOOP AT IT_PEDIDO.
It_totais-forn = it_pedido-cod_forn.
It_totais-valor = it_pedido-valor
COLLECT it_totais.
ENDLOOP.

 MODIFY:
Modifica registros na tabela interna.
Ex.: LOOP AT it_aluno WHERE it_aluno-bolsa < 10.

25
Academia ABAP - 2008

CLEAR it_aluno-bolsa.
MODIFY it_aluno.
ENDLOOP.

 SORT:
Ordena registros da tabela.

Sempre identifique se um SORT é ASCENDING ou DESCENDING e


especifique a cláusula BY <fields>. Caso contrário, todos os campos serão
classificados.
Evite construções do tipo:

SORT tabela1, SORT tabela2, SORT tabela3.


LOOP tabela1, LOOP tabela2, LOOP tabela3

Para cada SORT faça o LOOP correspondente. Aí então iniciar novo SORT e
LOOP, e assim por diante.

SORT <tabela_interna> BY <campo1> <campo2> ....

Ex. : SORT it_aluno BY it_aluno-nome.


SORT it_aluno BY it_aluno-nome DESCENDING.

 READ:

Sempre deve-se utilizar BINARY SEARCH nos comandos READ TABLE itab
WITH KEY.

Ler registros na tabela.


READ TABLE <tabela_interna> WHITH KEY <campo> = <condição>.
ou
READ TABLE <tabela_interna> WHITH KEY <campo1> = <condição1>
<campo2> = <condicao2> .
ou
READ TABLE <tabela_interna> INDEX <nro_registros>.

 UPDATE:
Atualiza (modifica) dados na tabela transparente
26
Academia ABAP - 2008

UPDATE (TABELA TRANSPARENTE) SET CAMPO1 = ‘VALOR1’


CAMPO2 = ‘VALOR2’
CAMPO3 = ‘VALOR3’.
WHERE CODIGO = (VARIÁVEL).

Se a atualização for bem sucedida, o SY-SUBRC retornará 0.


CUIDADO PARA NÃO TENTAR ATUALIZAR TAMBÉM ALGUM CAMPO
CHAVE. SY-SUBRC RETORNARÁ VALOR DIFERENTE DE 0.

 INSERT :
Inserção de dados na tabela transparente
INSERT INTO ZXXXXX VALUES IT_XXXXX. ( Onde ZXXXXXX = tabela
transparente e IT_XXXXX é uma estrutura (ou tabela interna) contendo os
valores a serem inseridos.
Ex.:
It_aluno-cod = ‘1001’.
It_aluno-nome = ‘Maria’.
INSERT INTO ZTBALUNOS VALUES IT_ALUNO.

CUIDADO PARA NÃO TENTAR INSERIR ALGUM REGISTRO COM CHAVE


DUPLICADA. SY-SUBRC RETORNARÁ VALOR DIFERENTE DE 0.

 DESCRIBE TABLE:
Número de registros da tabela. O comando DESCRIBE é a maneira mais eficiente
de determinar o número de registros de uma tabela interna.

DESCRIBE TABLE <tab_interna> LINES <nro_registros>.


Ex.: DESCRIBE TABLE t_ekko LINES v_reg_ekko.
v_reg_ekko tem que ser declarado com TYPE i.

ESTRUTURAS APPEND EM TABELAS TRANSPARENTES


Conjunto de campos de tabelas (com elementos de dados e domínios) que podem
ser usados por mais de uma tabela através do campo .INCLUDE na lista dos nomes
de campos de uma tabela.

Um exemplo de uso: imagine-se em uma situação em que deve-se associar vários


campos em algumas dezenas de tabelas transparentes. Cria-se uma estrutura com
os campos desejados, e associa-se a estrutura ás tabelas.

Criado através da SE11, outros objetos, estruturas.

27
Academia ABAP - 2008

TABELAS DE VERIFICAÇÃO
Usadas para consistir a entrada de dados em uma tabela transparente, baseado nos
dados já existentes em uma outra tabela transparente. É o modo de criar no R/3,
chaves estrangeiras.

Deve-se procurar atribuir sempre a campos com o mesmo domínio.


Isto é uma tabela de
verifcação

Informe o nome da
tabela de verificação
no campo apropriado.
O botão ‘Gerar
Proposta’,
Verifica se existem
campos em comum
(mesmo domínio)
entre as tabelas e faz
o relacionamento

Dois cliques ali Resultado: a existência do


campo KNUMA_PI da tabela
KONP será verificada
Abri aquilo dali
automaticamente na tabela
KONA.
Dois cliques na chavinha,
Se não existir, a
Abre alí
mensagem
de erro definida será
invocada.

28
Academia ABAP - 2008

MENSAGEM
 Classe de mensagem:

Ir a SE91 e ....

29
Academia ABAP - 2008

 Mensagem p/ usuário

Sintaxe: MESSAGE Sxxx(nome-classe-mensagem).


I  Informação
E  Erro
W  Aviso

Ou.. põe o nome da classe no inicio do prg (cabeçalho) ex.:


REPORT zac2003_bh_gr01_t1 NO STANDARD PAGE HEADING
LINE-SIZE 60
message-id z_cm_bh_06.

REPORT
 Sequência para criação do Report:

1. Tables: Declaração de tabelas transparentes;

2. Declaração de tabelas internas;

3. Declaração de constantes;

4. Declaração de variáveis;

30
Academia ABAP - 2008

5. Inicialização;

6. Tela de seleção;

7. Validação da tela de seleção;

8. Inicio do programa (START-OF-SELECTION);

9. Fim do programa (END-OF-SELECTION);

10. Subrotinas.

SET LEFT SCROLL BOUNDARY COLUMMNS X


Determina o número de colunas fixas ( X ) na saída de um relatório. Essas colunas
não rolarão horizontalmente quando a barra de scroll for acionada.

COMANDOS E/OU TECLAS DE ATALHO


Ctrl + F3 ativa e gerar
F8 compila, executa
* para comentário no inicio da linha
“ para comentário no meio da linha
/n fecha todas as linhas sem salvar e sem perguntar

/ pula uma linha.


/h debug
pretty printer (icone) Para identar
F5 Passo a passo, entrando nas Subrotinas. (ñ usar em select -
endselect)
F6 Passo a passo, mas não entra nas Subrotinas.
F7 Abandona SubRotina, voltando para a Rotina chamadora.

OPERADORES LÓGICOS
AND
OR
NE ou <>
>
<
>=

31
Academia ABAP - 2008

<=
=

VARIÁVEIS:
CHAR Type c
INTEIRO Type i
Valor c/ decimal Type p decimals <n.º de casas decimais>
CHAR (0 a 9) Type N
Valores Hexa Type X
Data Type D
Ex: v_data type D.
v_data like sy-datum.

Data: <nome variável> type i.


Data: v-nome(35) Type C.
Data: v-nome like ztbaluno06-nome.
(assume o mesmo campo – atributo – nome)

CONSTANTES
Sintaxe:

CONSTANTS: <nome_const> TYPE C VALUE <valor>.


ou
CONSTANTS: <nome_const> LIKE <nome-campo-tabela> VALUE <valor>.

Ex. CONTANTS c_cód_aluno(3) TYPE c VALUE ‘001’.


ou
CONTANTS c_cod_aluno LIKE ztbaluno09_código VALUE ‘001’.

ESTRUTURA CONDICIONAL:
 IF

if <condição>.
Comandos….
Else.
Endif.

32
Academia ABAP - 2008

If <condição>.
Commandos
Else if <condição>.
Comandos
Else if <condição>.
Comandos
Else.
Commandos
Endif.

 CASE

O comando CASE geralmente é mais claro, legível e um pouco mais rápido do


que o comando IF. Quando testamos se um campo é igual a um outro campo,
tanto faz usarmos CASE ou IF. Porém, o comando CASE é o melhor pois, além
de facilitar a leitura do código, é mais eficiente depois de 5 IF’s. A cláusula
WHEN OTHERS sempre deve ser codificada também.

Case <variaável>.
When <valor>:
Commandos
When <valor2> :
Commandos
Others:
Comandos
Endcase.

 Loops de repetição

O comando LOOP… WHERE é mais eficiente do que o comando LOOP/CHECK,


pois avalia a condição internamente.

Exemplo 1 :

Esta maneira é mais eficiente do que a última.

LOOP AT T_ABC WHERE K = KVAL.



ENDLOOP.

LOOP AT ITAB.
CHECK T_ABC = KVAL.

ENDLOOP.

Exemplo 2 :

Loop at <TI>.
comandos

33
Academia ABAP - 2008

Endloop.

Loop at <TI> Where cond=….


comandos
Endloop.

AT LAST
Verifica ultimo registro permitindo somatórios e totalizações.

AT NEW
Verificar antes de acessar o registro se é diferente do último lido permitindo
quebras.
Ex. AT NEW <nome_campo>.

PERFORM Imprime_cabecalho.

ENDAT.

AT END
Verificar depois de acessar o registro se o próximo é diferente do registro
atual.

Ex. AT END <nome_campo>.

PERFORM Imprime_subtotal.

ENDAT.

 WHILE

O comando WHILE é mais eficiente do que DO + EXIT. WHILE é mais fácil de


entender e mais rápido durante a execução.

While <condi>.
comandos
Endwhile.

 DO

Do <nº de vezes> times.


comandos
Enddo.

 CHECK

Define condição para continuidade do programa / procedimento.

34
Academia ABAP - 2008

CHECK <condição>.

Ex. PERFORM seleção_dados.

SELECT .....

CHECK sy-sybrc = 0. ( Caso condição falsal  ENDFORM )

PERFORM imprime_aluno.

PERFORM - SINTAXES DE PARÂMETRO


1- Perform <nome form> .
2- Perform <nome from> USING <parametro>.
3- Perform <nome form> changing <retorno>.
4- Perform <nome form> USING <parametro> changing <retorno>.

PARAMETERS
Um parâmetro serve para a criação de uma variável com a intervenção do usuário,
ou seja, a variável recebe um valor que o usuário vai digitar.
Sintaxe:
PARAMETERS: <nome> LIKE <tb>-<campo> .
Type c.
PARAMETERS: <nome> LIKE <tb>-<campo> OBLIGATORY.

SELECT-OPTIONS:
Com esse comando o usuário não precisa de digitar as opções, pois vazio, ele
entende que é para buscar todos os dados do banco.

Estrutura da tabela interna que é gerada pelo comando select-options:


- sigh: I
- option: BT (Between) – nesse caso o low e o high estarão preenchidos com
os valores De e Até. Ou EQ (iqual), onde o low estará com o valor e o high
estará vazio.

Sintaxe: Select-options <variável> for <tabela_transparente-campo>.

COMANDO DE DESVIO DE EXECUÇÃO


35
Academia ABAP - 2008

 CONTINUE

Passa para o próximo registro. Comandos CONTINUE posicionados antes de


eventos AT NEW dentro de um loop fazem os eventos perderem a seqüência
correta

 EXIT
Sai do loop.

Ex.
LOOP AT <tabela interna>.

IF tbl_aluno-bolsa < 10.

CONTINUE.

ENDIF.

IMPRIMA_ALUNO

ENDLOOP.

 BREAK-POINT  Para execução do programa independente do usuário.

 BREAK <usuário>  Para execução conforme usuário logado.

36
Academia ABAP - 2008

PASSAGEM PARÂMETROS PARA PROGRAMA STANDARD


Ex: SET PARAMETER ID 'BES' FIELD t_pedidos-ebeln.
CALL TRANSACTION 'ME23' AND SKIP FIRST SCREEN.

- Teclar F1 no campo de seleção da transação Stantard.


- Clicar no botão de Informações Técnicas

37
Academia ABAP - 2008

Identificador de Parâmetro: BES

COMANDO HOTSPOT ON
Usado no commando WRITE para identificar que o campo permitir duplo click
(mãozinha de seleção)

Ex.: WRITE: <campo1> HOTSPOT ON,


<campo2>.

COMANDO HIDE
Guardar o conteúdo do campo na linha selecionada (HOTSPOT).

Ex.: HIDE: <nome_campo>.

COMANDO AT LINE-SELECTION

Evento que controla campos selecionáveis no Report.

Ex.: AT LINE-SELECTION.

DATA: l_cursor(20).
38
Academia ABAP - 2008

GET CURSOR FIELD l_cursor.

IF l_cursor = <nome_campo1>.
....
ELSEIF l_cursor = <nome_campo2>.
....
ENDIF.

COMANDO GET CURSOR FIELD


Armazena nome do campo selecionado pelo usuário.

CRIAR TRANSAÇÃO
Transação é uma combinação de caracteres que codifica uma tarefa, atividade,
funcionalidade, etc.

Exemplo: a transação que “chama” o editor de programas é a SE38. Equivale ao


seguinte caminho através do menu:
Ferramentas->ABAP Workbench->Desenvolvimento->Editor ABAP.

 Para criar uma transação, utiliza-se a transação SE93.

Ir na SE93:

39
Academia ABAP - 2008

40
Academia ABAP - 2008

CRIAR AJUDA DE PESQUISA ( SEARCH HELP OU MATH


CODE)
Conjunto de valores de uma tabela exibidos em um campo de entrada quando F4 é
teclado.

As ajudas para pesquisa elementares realizam um caminho de pesquisa


para a determinação das entradas possíveis. Ajudas para pesquisa coletiva
são constituídas por várias ajudas para pesquisa elementares.

Depois de definida, a ajuda de pesquisa deve ser associada ao elemento de dados.


Todas as tabelas que utilizam o elemento de dados “herdarão” o matchcode.

 Exibição imediata
Tabela origem  Com restrição – para
dos dados listas grandes. Mostra
campo p/ limitar
quantidade
 Depend conjto valores
– Se lista > 100
registros, mostra
campo limitador de
Campos que quatidade. Se < 100,
apareceram mostra imediatamente
Campo será
na lista exportado para
o parâmetro

Posição Lista será


do Posição do filtrada por
campo campo limitador este valor
na lista na lista

 PASSO PARA CRIAÇÃO DE AJUDA DE PESQUISA:

Entrar SE11

41
Academia ABAP - 2008

CRIAR VISÕES ( VIEW )


Seleção de dados de várias tabelas através de JOIN com possibilidade de
restringir valores.

Pode ser usada no programa como se fosse uma tabela transparente.


Criadas através da transação SE11, selecionando-se “Visões”.

Campos da visão

42
Academia ABAP - 2008

Usa-se a visão criada no seu programa, como se fosse uma tabela transparente
comum.

Pode-se dar um select em seus campos, pode-se joga-la para uma tabela
interna, etc. Só não pode atualizar (inserir, modificar ou eliminar) dados da visão.
A vantagem de usar a visão, que ela já é um “join” de várias tabelas. Quando for
feita a seleção (select * from visão, p.e.), os dados já virão filtrados de acordo
com os parâmetros do join.

Pode-se também declarar tabelas internas like a visão: DATA IT_TABELA LIKE
ZVISAO OCCURS 0...

Imagine uma situação onde deve-se fazer um join de cinco tabelas, para doze
programas diferentes.

Uma situação interessante é criar uma visão das cinco tabelas (o join será
programado na visão) e nos doze programas, fazer o select da visão, ao invés
das tabelas.

 PASSO PARA CRIAÇÃO DE UMA VIEW:

Selecionar tabelas;
Selecionar campos ( todos os campos chaves presentes )
Ligação entre tabelas;
Condições de seleção;

43
Academia ABAP - 2008

44
Academia ABAP - 2008

45
Academia ABAP - 2008

Salvar e ativar.

46
Academia ABAP - 2008

CRIANDO INCLUDES
Programa categoria I que pode ser chamado por vários programas. Pode ter
funções, definição de dados, trechos de processamento. A existência do comando
INCLUDE ZACIXXX em um programa, desvia o processamento para o include
referenciado ZACIXXX e volta para o programa que chamou.

 PASSO PARA CRIAÇÃO DE UMA VIEW:

1 – Entrar na Se38
2 – Escrever no fonte:

Include <nome include> -> clicar duas vezes.

47
Academia ABAP - 2008

48
Academia ABAP - 2008

SUBSTRING
Para variáveis tipo CHAR ou DATA.
SY-DATUM = 20031110
VAR = ‘ACADEMIA’.
SY-DATUM(4) = 2003
VAR(2) = AC
SY-DATUM+4(2) = 11
VAR+2 = ADEMIA
SY-DATUM+6(2) = 10
VAR+2(3)ADE

PARAMENTROS DE SELEÇÃO
 RADIOBUTTON

Parameters: rb_bot1 radiobutton group gr1, Cria dois botões (do tipo rádio)
Rb_bot1 radiobutton group gr1. de seleção mutuamente
exclusiva.
Parameters: rb_bot3 radiobutton group gr2, Cria dois botões (do tipo rádio)
Rb_bot4 radiobutton group gr2. de seleção mutuamente
exclusiva.

 CHECKBOX

Parameters: p_bot5 as checkbox

AT SELECTION-SCREEN  Consistência da tela de entrada de dados.

Ex.
AT SELECTION-SCREEN.

IF <condicao>.
MESSAGE <texto>.

RANGE
Montar intervalos de seleção (semelhante ao SELECT OPTIONS)
RANGE <nome_range> FOR <nome_campo>.
Ex:
A estrutura criada é na verdade uma tabela
RANGES RG_DATA FOR EKKO-AEDAT interna e pode ser tratada como tal:
Ex.: rg_data-sign = ‘I’.
Cria a seguinte estrutura rg_data-options = ‘EQ’.
rg_data-low = ‘20031010’.
SIGN OPTIONS LOW HIGH rg_data-high = ‘20031231’.
append rg_data.

SIGN OPTIONS LOW HIGH


I EQ 20021010 20021231
TRANSLATE
49
Academia ABAP - 2008

Substuição de caracteres / Tradução

Ex.: VAR = ’10,5’.


TRANSLATE VAR USING ‘,.’.  Resultado: ’10.5’.

VAR = ‘YYXX’.
TRANSLATE VAR USING ‘YAXB’  Resultado: ‘AABB’

VAR = ‘aaa’
TRANSLATE var USING UPPER CASE.

CONCATENATE
Agrupar valores.

CONCATENATE <var1> <var2> <var3> INTO <var4> SEPARETED BY SPACE.

CONCATENATE <var1> <var2> <var3> INTO <var4> SEPARETED BY


<separador>.

Ex.:var1 = ‘HEITOR’.
Var2 = ‘CARLOS’.
CONCATENATE var1 var2 INTO var3 SEPARETED BY SPACE.
Resultado  VAR3 = ‘HEITOR CARLOS’

SPLIT
Desagrupar valores.

SPLIT <var1> AT <delimitador> INTO <var1> <var2>.

Ex.: var1 = ‘HEITOR CARLOS’


SPLIT var1 AT ‘ ‘ INTO var2 var3.

Resultado  var2 = ‘HEITOR’


var3 = ‘CARLOS’

SHIFT
Extrair valores de variáveis

SHIFT <var> BY <n> PLACES.

Ex.: var1 = ‘ABAP01’.


SHIFT var1.  var = ‘BAP01’
SHIFT var1 BY 4 PLACES.  var = ‘01’.
SHIFT var1 RIGHT BY 2 PLACES  var = ‘ ABAP01’

50
Academia ABAP - 2008

SUB ROTINAS
PERFORM (<nome_prog>) <nome_rotina>.  Chama uma subrotina de um outro
programa

PERFORM <nome_rotina> USING <var1>.  CHANGING <var2>. Passando e


retornando valores para SubRotinas

Ex.: DATA: vn_var1(5) type n,


vn_var2(5) type n.

vn_var1 = 50.
vn_var2 = 100.
PERFORM calcula USING vn_var1 vn_var2 CHANGING vn_var1.
….
….
FORM calcula USING vn_valor1 vn_valor2 CHANGING vn_valor1.

Vn_valor1 = vn_valor2 / vn_valor1.

ENDFORM.

MACHCODE OBJECT
Cria mathcode para parâmetros.

PARAMETERS <nome_parâmetro> for <nome_campo> MATCHCODE OBJECT


<nome_match_code>.

SET PF-STATUS
Esse é o comando que chama a função do botão. Deve-se clicar duas vezes no
campo ‘sxxx’(que é um número que nós definimos previamente) e criar o objeto.
Neste momento a tela te joga para a criação do ícone. (é localizado na lógica
principal logo após o star-of-selection, antes das chamadas de função)

SET PF-STATUS <nome_botao>.

Cria uma interface de usuário (com menus, botões, teclas de função, barra de
ferramenta) para uma “aplicação”. (No nosso caso, um report).

Definição de interface de usuário com botões:


Duplo clique em FORN
Programa

Duplo clique em ‘S000’:

51
Academia ABAP - 2008

Texto que
aparecerá ao lado
do ícone, no
botão

Na situação acima, será criado o botão quando o relatório for


executado.
Clicando-se no botão, o evento ‘at user-command’ será acionado (se existir) e a
variável
SY-UCOMM conterá o valor do ‘código do objeto’; no caso acima exemplificado,
‘FORN’.
Em teclas de função, seleciona-se a tecla que se deseja ativar o botão ou item
de menu


Lembrar de incluir o código
de função standart para os
botões de voltar, cancelar e
sair!

 Habilitar/Desabilitar botões e funções de um PF-STATUS dinamicamente


SET PF-STATUS XXXX EXCLUDING ‘FFFF’ ( onde FFFF é o código da função
que se quer desabilitar.
DATA: BEGIN OF IT_STATUS
OCCURS 0,
Para habilitar novamente, usar SET PF-STATUS XXXX. VC_FUNCAO LIKE RSMPE-
Para desabilitar vários botões ao mesmo tempo: FUNC,
Criar tabela interna com campo do tipo RSMPE-FUNC; END OF IT_STATUS
Atribuir os códigos das funções para a tabela;
IT_STATUS-VC_FUNCAO =
Utilizar: ‘EXIB’.
SET PF-STATUS XXXX EXCLUDING IT_XXXX APPEND IT_STATUS.
IT_STATUS-VC_FUNCAO =
‘MODI’.
APPEND IT-STATUS.

GERANDO E CARREGANDO ARQUIVOS


 WS_DOWNLOAD
Gera arquivo, joga dados para o servidor de aplicação
No file name, deve se informar nome e caminho

CALL FUNCTION 'WS_DOWNLOAD'


EXPORTING

52
Academia ABAP - 2008

* BIN_FILESIZE =''
* CODEPAGE =''
FILENAME = vc_nomearq
FILETYPE = 'ASC'
* MODE =''
* WK1_N_FORMAT =''
* WK1_N_SIZE =''
* WK1_T_FORMAT =''
* WK1_T_SIZE =''
* COL_SELECT =''
* COL_SELECTMASK =''
* NO_AUTH_CHECK =''
* IMPORTING
* FILELENGTH =
TABLES
DATA_TAB = it_arquivo
* FIELDNAMES =
EXCEPTIONS
FILE_OPEN_ERROR =1
FILE_WRITE_ERROR =2
INVALID_FILESIZE =3
INVALID_TYPE =4
NO_BATCH =5
UNKNOWN_ERROR =6
INVALID_TABLE_WIDTH =7
GUI_REFUSE_FILETRANSFER =8
CUSTOMER_ERROR =9
OTHERS = 10.

 WS_UPLOAD
Carrega arquivo.

CALL FUNCTION 'WS_UPLOAD'


* EXPORTING
* CODEPAGE =''
* FILENAME =''
* FILETYPE = 'ASC'
* HEADLEN =''
* LINE_EXIT =''
* TRUNCLEN =''
* USER_FORM =''
* USER_PROG =''
* DAT_D_FORMAT =''
* IMPORTING
* FILELENGTH =
TABLES
DATA_TAB =
* EXCEPTIONS

53
Academia ABAP - 2008

* CONVERSION_ERROR =1
* FILE_OPEN_ERROR =2
* FILE_READ_ERROR =3
* INVALID_TYPE =4
* NO_BATCH =5
* UNKNOWN_ERROR =6
* INVALID_TABLE_WIDTH =7
* GUI_REFUSE_FILETRANSFER =8
* CUSTOMER_ERROR =9
* OTHERS = 10

 OBSERVAÇÕES:

São funções para gravar dados de uma tabela interna na estação de trabalho
(HD ou unidade de rede) e carregar para uma tabela interna dados presentes na
estação de trabalho. Muito utilizada para gerar arquivos texto (ASCII) para
interfaces com outros sistemas.

Alguns parâmetros: (comuns à função WS_DOWNLOAD e WS_UPLOAD):


CALL FUNCTION Nome da tabela interna
Nome do arquivo gerado/lido. 'WS_DOWNLOAD' Onde estão os dados com os
EXPORTING quais o arquivo será gerado
Se for uma variável, deve ser
FILENAME = P_FILE (no caso de download) ou para
Do tipo RLGRAP-FILETYPE FILETYPE = 'ASC' onde os dados serão
TABLES carregados (upload)
Tipo do arquivo lido. Pode data_tab = it_tab
Ser ASC (ASCII para gerar arquivos
Textos) DAT (campos separados por
Tabulação, WK1, entre outros.

Importante: O ARQUIVO SERÁ GERADO COM A MESMA ESTRUTURA


(MESMO LAYOUT) DA TABELA INTERNA. Usando-se uma tabela interna com
todos os campos tipo CHAR, garante-se que não haverá problemas de conversão ou
geração de arquivos tipo texto (filetype ASC).

SELECTION-SCREEN
 Selection-screen begin of line. Define uma linha no Selection-
Selection-screen end of line. screen. Tudo que estiver dentro
deste bloco, sairá na mesma linha

 Selection-screen begin of line. Cria dois


selection-screen comment 1(5) text-002 for field p_mes. parâmetros de
parameters: p_mes(02) type n. entrada (MÊS e
ANO) na mesma
selection-screen comment 10(5) text-003 for field p_ano. linha, com os
parameters: p_ano(04) type n. rótulos definidos
Selection-screen end of line em TEXT-002 e
TEXT-003 54
Academia ABAP - 2008

 selection-screen begin of line. (faz sair tudo na mesma linha)


parameteres: p_a(5),
p_b(5).
Selection-secreen end of line.

 selection-screen begin of line.


Selection-screen pos 15. (faz sair na posição 15)
parameteres: p_bot1 grupo gr1.
Selection-screen comment p_bot1. (dar2 cliks no nome do botão e colocar o
texto)
Selection-screen end of line.
 At selection-screen.
Ao dar <enter> após digitar o parâmetro o programa procura o At selection-
screen

Evento acionado imediatamente após o “selection-screen” tiver sido executado,


(Após o ENTER, F8, F4, etc.) antes mesmo de entrar no evento START-OF-
SELECTION.

Neste evento, efetua-se a consistência dos parâmetros informados. At selection-


screen on block b1 é chamado somente para as consistências dos parâmetros do
block b1.
AT USER-COMMAND
 No report:
É um evento que intercepta toda entrada do usuário que é feita na interface do
usuário. (é localizado dentro da lógica principal, logo após as chamadas de função)

 No On line:
Intercepta toda ação feita pelo usuário através da Status Gui (interface de usuário).

É o evento que é executado quando, por exemplo, clica-se no botão SALVAR de


uma “barra de status”.

A variável SY-UCOMM recebe o valor passado pela barra de status.

UTILIZAÇÃO DE ÍCONES
Incluir “biblioteca” de ícones no programa:
INCLUDE <ICON>

Exemplo de utilização:
Write: ‘Aluno abaixo da média’, ICON_RED_LIGHT as icon.

Saída: Aluno abaixo da média

55
Academia ABAP - 2008

HELP-REQUEST
Evento invocado quando tecla-se F1 em algum campo de seleção (da tela de
seleção).

At selection-options on help-request for <VARIÁVEL>

Ex.:

Selection-screen begin of ...


Parameter p_cod (2).
Selection-screen end of…
At selection-options on help-request for p_cod.
Write: ‘Usuário clicou F1’.

VALUE-REQUEST
Evento invocado quando tecla-se F4 (ou clica-se em ao lado de campo de
seleção (da tela de seleção).

Exemplo:

At selection-options on value-request for <VARIÁVEL>


Selection-screen begin of ...
Parameter p_cod (2).
Selection-screen end of…
At selection-options on value-request for p_cod.
Write: ‘Usuário clicou F4’.

CRIAÇÃO DE FUNÇÕES
Encapsulamento de um trecho de programação que pode ser chamado por vários
programas, receber, alterar e devolver dados. É chamado através do comando CALL
FUNCTION. Construído através do “function builder” – transação SE37.

Ex.:
Se o parâmetro vai
sofrer modificações
e ser devolvido para
o programa, indique
aqui

56
Academia ABAP - 2008

Desenvolva aqui, o código


Parâmetros de saída. O que a
função vai devolver para o da função
programa que chamou.

COMUNICAÇÃO TELA -> PROGRAMA ABAP


O Fluxo lógico de uma tela é dividido em dois eventos, a saber:

PBO – PROCESS BEFORE OUTPUT ( Processos a serem executados antes da


exibição da tela)

PAI – PROCESS AFTER INPUT (Processos a serem executados após alguma


intervenção do usuário: teclar ENTER, teclas de funções, escolha de botões, etc. ).

O TAB não ativa o PAI.

O processamento no PBO e PAI é feito através de módulos, que chamam o código


no programa principal.

Tela 0001 PBO Quando uma tela é chamada, os comandos do PBO


são executados. Quando o usuário interfere (ENTER
PAI , por exemplo), os comandos que estiverem57no PAI
são executados, e a tela fica paradinha no PBO
novamente, esperando para executar o PAI (para
Academia ABAP - 2008

 A tela é chamada pelo programa através do comando CALL SCREEN ‘9999’.

BARRA DE STATUS PARA TELAS


A construção de uma barra de status para as telas é assaz semelhante à construção
de um “status” para um relatório. A diferença está na forma de tratar as funções
selecionadas pelo usuário. No caso de reports, o tratamento é feito através do
evento “at user-command”. Para telas, o tratamento deve ser feito através de algum
módulo no PAI. O processamento dos botões ‘voltar’, ‘cancelar’ e ‘sair’ deve ser
codificado.

58
Academia ABAP - 2008

Característica SCREEN PAINTER – TRANSAÇÃO SE51


s da tela:
nome, tipo da
tela,
tamanho, etc.

Aqui mostra os objetos da tela

Nesta área codifica-se o


processamento do PBO e PAI.
Ex.: module status_0001’
executará o processamento
definido em
‘module status_0001 output’ do
programa ao
qual a tela está associada. Note
que é incluída a palavra
OUTPUT ou INPUT após nome
do módulo, no programa Trecho do programa principal A variável sy-ucomm
principal, definindo se é um recebe o código da
módulo de PBO ou PAI função escolhido.
Sugere-se que seja
definido um campo no
programa (like sy-
ucomm), que o valor de
sy-ucomm seja movido
para ele e que a
comparação seja feita
através dele.

EDITOR DE LAYOUT DA TELA


59
Academia ABAP - 2008

Clicando-se no botão layout, ativa-se o editor de layout, onde, através de recursos


típicos da “manipulação de elementos gráficos” (não sei se o termo é esse) desenha-
se e ajusta os elementos da tela. (campos, textos, botões, frames, etc...)

Clicando aqui, é possível


selecionar campos do programa
ou de alguma tabela do DDIC

MODIFICAÇÃO DINÂMICA DE ATRIBUTOS DE


ELEMENTOS DA TELA.
No PBO Alguns outros atributos dos
Loop at screen Neste exemplo, se elementos da tela
If screen-name = ‘XXX’. o campo da tela Screen-name Nome do
Screen-input = 0. for o XXX, será campo
Endif. desabilitada a Screen-group1 Nome do
Modify screen. entrada de dados (até 4) grupo
Endloop. no mesmo. Screen-required Obrigatório
Screen-input Campo de
entrada
Screen-output Campo de
saída
Screen-invisible Visível/invisível
Screen-length Tamanho do
campo
Screen-active Campo ativo

VERIFICAÇÃO AUTOMÁTICA DE CAMPOS

60
Academia ABAP - 2008

Para se fazer uma verificação no conteúdo de algum campo em uma tela, enviar
uma mensagem de erro, e garantir que o campo esteja ativo novamente para edição,
usa-se:

 Verificação automática para um campo:


FIELD <CAMPO> MODULE <NOME DO MÓDULO)
Ex.:
No PAI
FIELD VC_CAMPO MODULE VERIFICA_CAMPO.

No programa Neste exemplo, se o


MODULE VERIFICA_CAMPO INPUT. campo for diferente de
IF VC_CAMPO <> ‘ABCD’. ABCD, será enviada uma
MESSAGE E000 WITH ‘CAMPO INVÁLIDO’. mensagem de erro e o
ENDIF. campo ficará disponível
ENDMODULE. novamente para entrada
de dados.

 Verificação automática para vários campos:

CHAIN: Se no módulo VERIFICA_CAMPO tiver uma


FIELD: VC_CAMPO1, mensagem de erro (tipo E, W, etc), a mesma
VC_CAMPO2, será exibida e TODOS OS CAMPOS QUE
VC_CAMPO3. ESTIVEREM ENTRE O CHAIN E ENDCHAIN
MODULO VERIFICA_CAMPO. serão abertos novamente para edição
ENDCHAIN.

 Execução condicional de módulos baseados no FIELD - > algum valor


que não seja o inicial.

FIELD (CAMPO) MODULE (NOME DO MÓDULO) ON INPUT

O módulo referido será executado se o campo em questão tiver algum valor que não
seja o inicial.

Para mais de um campo:


CHAIN:
FIELD: VC_CAMPO1,
VC_CAMPO2,
VC_CAMPO3.
MODULO VERIFICA_CAMPO ON CHAIN-INPUT
ENDCHAIN.

 Execução condicional de módulos baseados no FIELD - > alguma


alteração

61
Academia ABAP - 2008

FIELD (CAMPO) MODULE (NOME DO MÓDULO) ON REQUEST

O módulo referido será executado se o campo em questão tiver sofrido alguma


alteração (usuário digitou algum valor diferente do que já existia).

Para mais de um campo:


CHAIN:
FIELD: VC_CAMPO1,
VC_CAMPO2,
VC_CAMPO3.
MODULO VERIFICA_CAMPO ON CHAIN-REQUEST
ENDCHAIN.

Mudança dinâmica de telas em dialog programming.


Quando cria-se uma tela (dialog) é solicitado informar no campo “tela seguinte”, o
código da próxima tela que será executada após a tela que está sendo criada. Pode-
se interferir nesta seqüência dinamicamente através de alguns comandos a saber:

 SET SCREEN XXXX -> Altera temporariamente a seqüência de ativação


das telas. A tela XXXX será considerada como próxima tela.

 LEAVE SCREEN –> “Encerra” a tela corrente

 LEAVE TO SCREEN XXXX -> Equivale aos dois comandos acima, em


seqüência. Chama imediatamente a tela XXXX

 CALL SCREEN XXX – >Interrompe a tela corrente e processa a tela


XXXX

 SET SCREEN 0 , LEAVE SCREEN ou LEAVE TO SCREEN 0 –> Chama


a tela anterior. Se não houver tela anterior, encerra o programa.

DIALOG PROGRAMMING – TABLE CONTROL

62
Academia ABAP - 2008

Table control é um objeto de dialog programming utilizado para exibir/entrar


dados em uma estrutura semelhante à uma tabela, com funcionalidades úteis:

Tamanho de linhas/colunas ajustáveis para exibição/edição de dados;

Seleção de linhas e colunas;

Cabeçalho de colunas;

Geração automática de barra de rolagem vertical/horizontal;

Atributos de células modificáveis em tempo de execução.

Definição de table control

No top include do programa principal: CONTROLS TC_0001 TYPE TABLEVIEW


USING SCREEN XXXX

Define um objeto do tipo TABLEVIEW, com o nome TC_0001 usando os


parâmetros iniciais definidos na table control XXXX.

Um objeto tipo TABLEVIEW é uma estrutura na qual se define os atributos da


table control (número de linhas, linha do topo, etc. ) Estes atributos podem ser
modificados em tempo de execução.

Desenhar na tela um objeto tipo Table control (Lembrar de definir um control xxx
tipo tableview)

Inserir os campos de uma tabela interna.

Deve haver um loop/endloop da tabela interna tanto no PBP quanto no PAI,


enviando e recebendo dados do programa para a tela e da tela para o programa
respectivamente.

PROCESS BEFORE INPUT Faz um loop na tabela interna


LOOP AT IT_ALUNOS WITH CONTROL TC_XXX transportando os dados para a table
MODULE DEFINE_LINHAS. control tc_xxxx
ENDLOOP. Tentar-se-á preencher todas as linhas
visíveis na tela. Se a tabela interna tiver
menos linhas do que a table control,
PROCESS AFTER INPUT linhas vazias serão acrescentadas.
LOOP AT IT_ALUNOS. Utiliza-se um módulo (no exemplo, o
MODULE ATUALIZA_TABELA. DEFINE_LINHAS) para controlar tal
ENDLOOP. situação:
Module define_linhas input.
If it_alunos is initial.
Aqui são atualizados os dados feitos pelo usuário Exit from step-loop. “Sai do loop do
na table control, para a tabela interna. O módulo PBO
(no exemplo ATUALIZA_TABELA) contém: Endif.
Modify it_alunos index tc_xxx current-line. Endmodule.
 Modificação do atributos de uma table control (exemplos)

63
Academia ABAP - 2008

Quando se declara um “CONTROL” para um table control, (a instrução


CONTROLS TC_0001 TYPE TABLEVIEW USING SCREEN XXXX no
top include), é criado um elemento do tipo TABLEVIEW com a
seguinte estrutura:
Fixed_Cols
Lines
Top_Line
Current_Line
Left_Col
Line_Sel_Mode
Col_Sel_Mode
Line_Selector
V_Scroll
H_Grid
V_Grid
Cols (aqui dentro esta a definição dos atributos para cada
campo da tabela interna associada ao table control)
Invisible

Pode-se alterar dinamicamente os atributos de uma table control,


alterando os valores dos atributos.
Ex.: TC_0001-INVISIBLE = ‘1’, torna o table control TC_0001 invisible.
TC_0001-TOP_LINE = 5, define que a linha de topo da table control será a d
e nro 5.
Habilitar/desabilitar algumas células do grid
* module carrega_ti_ysap01d.
LOOP AT ti_YSAP01d WITH CONTROL tc101 Tornar uma coluna de um grid visível/invisivel
CURSOR tc101-current_line.
MODULE carrega_table_control_101. ...type-pools cxtab.
MODULE Controle_tela. ...data: WA TYPE CXTAB_COLUMN.
ENDLOOP.
MODULE Controle_tela OUTPUT. loop at tc110-cols into wa.
IF YSAP01D-A1 = 'X' . if wa-SCREEN-NAME = 'TI_YSUNITU-
LOOP AT SCREEN. NUMEMB'.
CASE screen-name. wa-INVISIBLE = 1.
* Só exibição para o campo 'Unidade de Medida': modify tc110-cols from wa.
WHEN 'YSAP01D-ESCALA'. endif.
MOVE '0' TO screen-input. endloop.
WHEN 'YSAP01D-CODE'.
MOVE '0' TO screen-input.
WHEN 'YSAP01D-DT_INICIAL'.
MOVE '0' TO screen-input.
WHEN 'YSAP01D-HR_INICIAL'.
MOVE '0' TO screen-input.
WHEN 'YSAP01D-DT_FINAL'.
MOVE '0' TO screen-input.
WHEN 'YSAP01D-HR_FINAL'.
MOVE '0' TO screen-input.
ENDCASE.
MODIFY SCREEN.
ENDLOOP.
ENDIF.

64
Academia ABAP - 2008

 Controlando os botões de scroll em uma table control

Deve-se programar as funções de paginação quando se trabalha com


table control. As funções dos botões de avançar/recuar linha/página
devem ser programadas utilizando os valores do número de linhas
visíveis da table control e o número da linha do topo da table control. O
atributo TC_XXXX-TOP_LINE define qual a linha do topo.

No PBO, a variável de sistema SY-LOOPC contém o número de linhas


da table control. SY-LOOPC somente conterá valores quando o
processamento está dentro do LOOP/ENDLOOP, porque ele conta o
número de passagens do loop.

Programar, na barra de status, os botões para scroll


Obs.: utilizar os códigos de função padrão: P-, P--, P+, P++

No programa

DATA LOOPLINES LIKE


Exemplo SY-LOOPC.
Na tela MODULE GET_LOOPLINES
OUTPUT.
PROCESS BEFORE OUTPUT. LOOPLINES = SY-LOOPC.
LOOP AT TC_0100… ENDLOOP
MODULE GET_LOOPLINES.
ENDLOOP MODULE USER_COMMAND_0200 INPUT.
PROCESS AFTER INPUT. CASE OK_CODE.
LOOP. WHEN ‘P--’.
… TC_0100-TOP_LINE = 1.
ENDLOOP. WHEN ‘P-’.
Outro
MODULE exemplo
USER_COMMAND_0200 TC_0100-TOP_LINE =
TC_0100-TOP_LINE – LOOPLINES.
IF TC_0100-TOP_LINE < 1.
*&---------------------------------------------------------------------
* TC_0100-TOP_LINE = 1
*& Module pula_pagina INPUT ….
*&---------------------------------------------------------------------
*
* text
*----------------------------------------------------------------------
*
module pula_pagina input.

if ok_code = 'P--'.
tc_001-top_line = 1.
elseif ok_code = 'P-'.
tc_001-top_line = tc_001-current_line - 1.
elseif ok_code = 'P+'.
tc_001-top_line = tc_001-current_line + 1.
elseif ok_code = 'P++'.
tc_001-top_line = tc_001-lines - sy-loopc.

endif.
endmodule. " pula_pagina INPUT

65
Academia ABAP - 2008

Outro exemplo de paginação


No módulo PAI da tela:
* Trata paginação da table control
WHEN 'P--' OR 'P-' OR 'P+' OR 'P++'.

PERFORM paginacao_100 USING vc_okcode


vi_linhas_tc_100
vi_linhas_100
CHANGING tc_0100-top_line.

No módulo de função
FORM paginacao_100
USING value(p_okcode) TYPE c
value(p_linhas_tc) TYPE i
value(p_linhas_it) TYPE i
CHANGING p_top_line TYPE i.

CASE p_okcode.
* Posiciona na primeira página
WHEN 'P--'.

p_top_line = 1.

* Subtrai o número de linhas visíveis na table control para


* voltar uma página.
WHEN 'P-'.

SUBTRACT p_linhas_tc FROM p_top_line.


IF p_top_line LT 1.
p_top_line = 1.
ENDIF.

* Soma o número de linhas visíveis na table control para


* avançar uma página.
WHEN 'P+'.
ADD p_linhas_tc TO p_top_line.
IF p_top_line > p_linhas_it.
SUBTRACT p_linhas_tc FROM p_top_line.
ENDIF.

* Posiciona na última página. Para isto deve-se atualizar o


* campo top-line da table control com a seguinte operação:
* Número de linhas preenchidas da tabela interna menos
* o número de linhas visíveis na table control mais 1.
WHEN 'P++'.

IF p_linhas_it > p_linhas_tc.


p_top_line = p_linhas_it - p_linhas_tc + 1.
ENDIF.
ENDCASE.
ENDFORM.

 Tornar uma coluna de um grid visível/invisivel


...type-pools cxtab.
...data: WA TYPE CXTAB_COLUMN.

loop at tc110-cols into wa.


if wa-SCREEN-NAME = 'TI_YSUNITU-NUMEMB'.
wa-INVISIBLE = 1.
modify tc110-cols from wa.
endif.

66
Academia ABAP - 2008

endloop.

 Habilitar/desabilitar algumas células do grid


* module carrega_ti_ysap01d.

LOOP AT ti_YSAP01d WITH CONTROL tc101 CURSOR tc101-current_line.


MODULE carrega_table_control_101.

MODULE Controle_tela.
ENDLOOP.

MODULE Controle_tela OUTPUT.


IF YSAP01D-A1 = 'X' .
LOOP AT SCREEN.
CASE screen-name.
* Só exibição para o campo 'Unidade de Medida':
WHEN 'YSAP01D-ESCALA'.
MOVE '0' TO screen-input.
WHEN 'YSAP01D-CODE'.
MOVE '0' TO screen-input.
WHEN 'YSAP01D-DT_INICIAL'.
MOVE '0' TO screen-input.
WHEN 'YSAP01D-HR_INICIAL'.
MOVE '0' TO screen-input.
WHEN 'YSAP01D-DT_FINAL'.
MOVE '0' TO screen-input.
WHEN 'YSAP01D-HR_FINAL'.
MOVE '0' TO screen-input.
ENDCASE.
MODIFY SCREEN.
ENDLOOP.
ENDIF.

 VERIFICAR QUAL BOTÃO FOI PRESSIONADO DENTRO DE UMA LINHA


DE UM TABLE CONTROL

(Quando rola-se a página, a linha clicada no table control não corresponde à


linha da tabela interna).

… process after input.


… module user_command_0100.

get cursor field wc_field.

67
Academia ABAP - 2008

get cursor line wi_line.

if wc_field = 'TI_OPER-FORMULA'.
clear wc_field.
wi_line = tc1002-current_line - 1.
endif.

O botão corresponde a um campo da tabela interna (TI_OPER-FORMULA)


wi_line será o número da linha da tabela interna correspondente ao botão
clicado.

Entradas negativas em colunas de table control


Ex.:
data: begin of ti_oper occurs 0,
poleo type p decimals 4,
end of ti_oper.

Na coluna do module pool, para o elemento ti_oper-poleo,


definir texto como "_.___.___.___,____V" para saída = 1,0000-
definir texto como "_.___.___.___V" para saída 91

SET CURSOR
Permite definir, em uma tela, o campo e a posição no campo que o cursor será
posicionado:

set cursor vc_campo offset 3 – Posiciona o cursor no campo vc_campo, na


terceira posição

LEAVE TO LIST PROCESSING


A partir de um programa dialog, é possível exibir listas (lembram dos reports?).
Ex.: MODULE IMPRIME LISTA.
SUPRESS DIALOG.
LEAVE TO LIST-PROCESSING AND RETURN (TO SCREEN XXX)
SET PF-STATUS SPACE.
LOOP AT IT_ALUNOS.
WRITE: IT_ALUNOS-COD, IT_ALUNOS-NOME …
ENDLOOP.
ENDMODULE.

O exemplo, lista os dados da tabela it_alunos. SET PF-STATUS SPACE ativa a


barra de status standard. SUPRESS DIALOG faz com que a tela corrente não
seja exibida. Após exibir a lista, retorna-se-á para a tela indicada em set screen

68
Academia ABAP - 2008

O processamento retornará ao dialog quando o usuário sair com F3 ou quando


for encontrado no report, o comando LEAVE LIST-PROCESSING.

Eis uma possibilidade assaz interessante: o programa on-line (dialog, module-


pool) chamar uma lista dentro de uma tela modal. Fica muito bonitinho.
MODULE LISTA OUTPUT.
MODULE XXX INPUT.
SUPRESS DIALOG.
CALL SCREEN 200 “Tela 200 é modal Na tela 200 LEAVE TO LIST-
STARTING AT 20 10
PROCESSING...
ENDING AT 50 15.
SET PF-STATUS SPACE.
ENDMODULE
LOOP AT IT_ALUNOS.
WRITE: IT_ALUNOS-
COD …
ENDLOOP.
ENDMODULE.

SAP MEMORY E ABAP MEMORY


SET PARAMETER e GET PARAMETER enviam e recebem valores para a SAP
memory respectivamente.

Esses valores são específicos para o usuário/sessão, porem disponíveis para


todas as sessões internas.

EXPORT/IMPORT (CAMPO) TO/FROM MEMORY ID utilizam a ABAP memory


para enviar e receber respectivamente, campos, estruturas e tabelas internas
entre programas. (PESQUISAR ATÉ QUE MOMENTO OS DADOS SÃO
MANTIDOS COM GET/SET E EXPORT/IMPORT).

69
Academia ABAP - 2008

TAB STRIP
Tabstrip permitem exibir diferentes componentes de uma aplicação em uma
única tela. Seu design intuitivo permite usuários navegar facilmente entre os
componentes.

Partes de um Tabstrip

Nome da
aba do
tabstrip

Função que
será passada
Página
para o sy-
do
ucomm
Área de tabstrip
quando a
subscreen
“aba” for
pressionada

Nome da
área de
subtela
(subscreen)

Pode-se associar uma área de subtela para cada página do tabstrip ou uma área
comum a várias páginas.
Nas áreas de subscreen são mostrados os dados através de telas tipo Subtela.

 Criação de tabs trips

No top include incluir a instrução CONTROLS TS_001 TYPE TABSTRIP

Criar na tela, um objeto do tipo tabstrip e posicionar no local desejado. (Se


desejar mais páginas, escolha o objeto “botão” e posicione na parte superior
esquerda do tabstrip.)

Dar um nome para cada página do tabstrip.

Click click na abinha de cada página, e colocar o código de função para todas as
páginas (o código que será recebido pelo OK_CODE, através do SY-UCOMM.

Criar dentro de cada página um objeto tipo sub-área (um para cada página ou um
para todos.)

70
Academia ABAP - 2008

Para utilizar uma sub-área para todas as páginas, crie o objeto na primeira
página, e nas seguintes, nos atributos do página (duplo clique nela), colocar o
nome da subárea criada para a primeira página no campo Objeto de referência

 Para fazer scroll em uma tabstrip (navegar entre as páginas clicando nas
abinhas) sem ativar o PAI.

Criar as páginas com o atributo ‘tipo de função” = P


Para este exemplo foram
A codificação será a seguinte: criadas três telas. A
primeira, tipo normal, onde
PROCESSA BEFORE OUTPUT foi desenhado o tabstrip. As
CALL SUBSCREEN SUB1 INCLUDING SY-CPROG ‘0001’. outras duas, do tipo subtela,
CALL SUBSCREEN SUB2 INCLUDING SY-CPROG ‘0002’. que serão apresentadas nas
subáreas da página de tabstrip
PROCESS AFTER INPUT. correspondentes.
CALL SUBSCREEN SUB1. OBRIGATÓRIO fazer o call
CALL SUBSCREEN SUB2. subscreen no PBO e PAI. Senão
não funciona. Não me pergunte
porque. Fica para vocês
pesquisarem.

 Neste exemplo, quando clicar nas abinhas da tabstrip, o PAI não será
invocado.

 Para fazer scroll em uma tabstrip ativando o PAI

Criar as páginas com o atributo ‘tipo de função” = ‘ ‘

TODAS AS PÁGINAS DEVEM COMPARTILHAR DA MESMA SUB-ÁREA

Exemplo da codificação
No top include

controls ts_001 type tabstrip. Define o tabstrip

data: vc_tela like sy-dynnr value ‘0002’, Define 0002 como a tela inicial
ok_code like sy-ucomm,
Para receber o sy-ucomm. Associa-lo à primeira tela

vc_tab like sy-ucomm value ‘TAB1’. Página da tabstrip que será chamada
primeiro. O TAB1 é o código de função definido para uma das páginas do tabstrip

Na lógica de processamento da tela principal: Module define_pagina output.


case vc_tab.
PROCESS BEFORE OUTPUT. when ‘TAB1’.
vc_tela = ‘0001’.
MODULE DEFINE_PAGINA. when ‘TAB1’.
vc_tela = ‘0002’.
endcase.
CALL SUBSCREEN SUB1 endmodule
INCLUDING SY-CPROG VC_TELA

71
Academia ABAP - 2008

PROCESS AFTER INPUT.


Module user_command_001 input.
CALL SUBSCREEN SUB1. ts_001-active = vc_tab. 
case ok_code
when ‘TAB1’.
MODULE USER_COMMAND_001 vc_tab = ‘TAB1’.
when ‘TAB2’.
vc_tab = ‘TAB2’.
endcase.
 Pode-se mudar dinamicamente vários atributos da endmodule
tabstrip. Entre eles está o “TS_XXX-ACTIVETAB”
qque indica qual abinha estará ativa, isto é, qual será
mostrada na frente.

FIELD SYMBOLS
Referem-se a “ponteiros de memória” são estruturas de dados que armazenam
endereços de memória. O valor de um ponteiro é uma posição de memória,
enquanto que, por exemplo, a de um inteiro é um número.

Declaração: FIELD-SYMBOLS <ponteiro>

Durante a execução, um campo é atribuído ao field symbol através do comando


ASSIGN. Todas as operações efetuadas no field symbol serão executadas
também ao campo a ele associado.
Ex.:
DATA: variavel(10) type c value ‘básico’.
FIELD-SYMBOLS <field>.

ASSIGN variavel to <field>.


WRITE: variavel, field.
* A saída será: básico básico

MOVE ‘exemplo’ to <field>.


WRITE: variavel, field.
A saída será: exemplo exemplo

CRIAÇÃO DE INTERVALOS DE NUMERAÇÃO


 Criação de intervalos de numeração (para geração de número
sequencial)
Transação SNRO
Exemplo:
Criar intervalo
Criar na transação SNRO o objeto ZCODINV
Domínio: ZD_CODIN
Porcentagem para aviso: 90,0
Quantidade nºs no buffer: 0
Criar o intervalo:
Nº: 01
Do: 0000000001
Até: 9999999999
Pos.interv.numeração: 1

 Utilizar intervalo de numeração


72
Academia ABAP - 2008

Chamar a função “NUMBER_GET_NEXT” com os parâmetros


nr_range_nr = ‘1’,
object = ‘ZCODINV’
quantity = ‘1’
subobject = ‘ ‘
toyear = ‘0000’
ignore_buffer = ‘ ‘
O número gerado em number será o próximo seqüencial.

Ex.: Numeração automática de documentos, notas fiscais, etc. Cria-se o


intervalo, e o R/3 cuida do gerenciamento da numeração automática, quando é
feita a solicitação da geração do número.

Criam-se intervalos de numeração através da transação SNRO.

Campos básico para criação:

Elemento de dados do sub-objeto – pode-se organizar a faixa de numeração de


acordo com sub-objetos (código da companhia, departamento, etc.). Informe aqui
o elemento de dados do sub-objeto;

Ano fiscal – Pode-se organizar a faixa por ano;

Domínio do número – o tamanho e tipo do número (só é possível alfanumérico –


char e num) é definido pelo domínio informado neste campo.

% de aviso – Será enviada mensagem de erro quando o número gerado


corresponder à porcentagem informada neste campo, em relação a quantidade
de números do intervalo.

 A função NUMBER_GET_NEXT gerará o próximo número do intervalo


de numeração.

 A função NUMBER_CHECK verifica se um número está dentro de um


intervalo de numeração especificado.

 A função NUMBER_GET_INFO retorna informações sobre o intervalo


de numeração especificado (limites, situação atual, etc).

SAP TRANSACTION
Uma SAP Transaction, ou transação SAP consiste de passos de diálogo (dialog
step). Um passo de diálogo começa quando o usuário interfere de algum modo
em uma tela, de modo que ela ative o PAI (um ENTER, uma tecla de função,
clica duas vezes ou escolhe um item de menu). O passo de diálogo termina
quando a próxima tela é mostrada.

E.x:

PBO Tela 100 PAI PBO Tela 200 PAI PBO


Tela 300 PAI
73
Academia ABAP - 2008

Dialog Step Dialog Step


Cada passo de diálogo, pode conter comando para atualização de tabelas
transparentes

ATUALIZAÇÃO SÍNCRONA
No final de cada dialog step, o R/3 atualiza automaticamente todas as
requisições de atualizações na base de dados. Imagine que na tela 100 você
programou a inserção de dados e eliminação de dados da sua tabela
ZTBALUNOXX. Quando você der um enter e o programa passar para a tela 200,
será inserido na sua tabela o registro do modo como você programou e será
eliminada da sua tabela, o registro que você especificou.

ATUALIZAÇÃO ASSÍNCRONA
Algumas vezes é imperativo que os dados não sejam atualizados no banco de
dados, quando “mudar de tela”. Imagine a seguinte situação: “Você tem que fazer
várias atualizações dentro do seu programa (inserir um registro, modificar outro,
eliminar outros dois e inserir mais um). Essas atualizações são feitas por várias
telas diferentes. E mais, se uma dessas atualizações não for bem sucedida (você
tentou inserir um registro com chave duplicada, por exemplo.), nenhuma das
outras atualizações pode ser feita.” Pelo default do R/3, que é atualização
síncrona, se der erro em uma atualização qualquer, JÁ ERA!

A saída para isso é utilizar atualização assíncrona. As solicitações de atualização


não são executadas pelo R/3 até que você o instrua para isso. As solicitações
são “colocadas” em uma tabela de log e só são atualizadas quando você der o
comando específico. Se em alguma das etapas deu erro, simplesmente dê um
comando para que o R/3 descarte essas atualizações.

 LUW (Logical Unit of Work – Unidade lógica de trabalho)

Para trabalhar com atualização assíncrona deve-se estabelecer o ponto onde os


dados serão atualizados (aquele comando para o R/3 atualizar). Isso é feito
combinando-se vários dialog steps.
Linha pontilhada = dialog steps combinados ->

PBO Tela 100 PAI PBO


Tela 200 PAI PBO
Tela 300 PAI
Tela 300
PBO

Dialog Step Dialog Step


Dialog step

Vários dialog steps formam uma LUW.

Na minha seqüência de telas (meu programa) posso ter quantos LUW que quiser.
Programo-os de acordo como (e quando) quero atualizar minha base de dados.
Se todas minhas atualizações forem ok, executo o comando COMMIT WORK. Se
der erro em alguma atualização, executo o comando ROLLBACK WORK.

74
Academia ABAP - 2008

 COMMIT WORK – Pega os dados da tabela de log e efetiva a


atualização deles no banco.

O comando COMMIT WORK sempre deve ser utilizado quando uma ou


mais LUW estão sendo processadas.

 ROLLBACK WORK – Descarta os dados da tabela de log e não


atualiza nada no banco.

 Comandos para trabalhar com atualização assíncrona:


CALL FUNCTION ‘NOME DA FUNÇÃO’ IN UPDATE TASK
PERFORM ‘NOME DO FORM’ ON COMMIT.

As solicitações de atualização (INSERT, DELETE ou UPDATE) que se


encontrarem dentro dos comandos acima, só serão efetivadas no banco de
dados, quando for encontrado um comando COMMIT WORK. Serão
descartadas quando for encontrado o comando ROLLBACK WORK.

NA TRANSAÇÃO ASSÍNCRONA (DEFAULT) O R/3 PROVÊ UM COMMIT


WORK AUTOMATICAMENTE NO FINAL DE CADA DIALOG STEP!

OBJETS DE BLOQUEIO (FUNÇÕES DE ENQUEUE /


DEQUEUE)
Quando um programa atualiza um determinado registro, é feito um ‘lock’ para
este registro. Significa que nenhum outro programa pode fazer nenhuma
atulização com o mesmo, até que o programa que o “pegou” primeiro, o libere.
Ex.: Meu programa lê o registro do aluno de código 001 da tabela ZTBALUNOXX
e faz um UPDATE do nome e endereço.

Select codigo nome endereço from ZTBALUNOXX into it_tabela


Where código = ‘001’.
ZTBALUNOXX-NOME = ‘ABCD’.
UPDATE ZTBALUNOXXX ...

Se na mesma hora, um outro camarada rodar o programa para fazer atualizações


no código 001 (ou algum outro programa que tente modificar este registro) será
enviado para ele uma mensagem informando que o registro em questão já está
sendo processado (ou está em lock) pelo programa que acessou o registro
primeiro. Após a atualização, é feito um UNLOCK, ou seja, o registro é liberado
novamente. O R/3 já cuida do lock/unlock automaticamente.

Muitas vezes, a duração do lock provido pelo R/3 não é suficiente para minha
aplicação.

Imagine que eu tenha que ler um código de aluno, fazer uma porção de consultas
e só depois atualiza-lo. Enquanto eu tiver fazer as consultas, ninguém mais
deveria acessa-lo para modifica-lo ou elimina-lo.

75
Academia ABAP - 2008

Para isso, devo definir um lock no início do processo e um unlock no final da


atualização.

Faço isso através de objetos de bloqueio, ou, funções de ENQUEUE e


DEQUEUE.

 Criando objetos de bloqueio.

Na transação SE11, escolha OBJETOS DE BLOQUEIO e dê um nome à ele.

O nome do objeto de bloqueio deve começar com EZ_

Nome da tabela onde


está o registro que se
quer “bloquear”

76
Academia ABAP - 2008

Aqui define-se como será feito o bloqueio:


E – Bloqueio de escrita
S – Bloqueio de leitura
X – De escrita mas outro usuário não pode
dar um ‘lock’ enquanto estiver bloqueado

O R/3 já sugere
que o lock seja
feito pela chave
primária

Feito isso, serão criadas duas funções: ENQUEUE_EZ_ABC e


DEQUEUE_EZ_ABC para bloqueio e desbloqueio do registro.

 Para usar
O campo it_alunos-aluno conterá o código do aluno que será bloqueado

 Para bloquear

call function 'ENQUEUE_EZ_ABC'


exporting
mode_abc = 'E'
mandt = sy-mandt
serie_despacho = it_alunos-aluno

 Para desbloquear
call function 'DEQUEUE_EZ_ABC'
exporting
mode_abc = 'E'
mandt = sy-mandt
serie_despacho = it_alunos-aluno

WS_EXECUTE - Executa uma aplicação do Windows.

77
Academia ABAP - 2008

Parametros principais:
- Program: caminho do programa (ex. C:\WINDOWS\NOTEPAD.EXE).
- Command: linha de comando (ex. o nome do arquivo).

STATUS_TEXT_EDIT - Lê o status de uma ordem de serviço (FATP, ENTE,


ENCE, BLOQ, etc...).

Parametros principais de exportação:


- Client: mandante (ex.: sy-mandt).
- flg_user_stat: 'X' lê os status criados pelo usuário, ' ' não lê o status criado pelo
usuário.
- objnr: número do objeto (você pode selecioná-lo na tabela AUFK).
- only_active: 'X' mostra apenas os status ativos.
- spras: idioma (ex.: 'P')

Parametros principais de importação:


- line: status de sistema, campo do tipo caufvd-sttxt
- user_line: status criados pelo usuário, campo do tipo bsvx-sttxt

SUSR_USER_ADDRESS_READ - Lê dados de um determinado usuário do


sistema

Parametro principal de exportação:


user_name - username (ex. sy-uname)

Parametro principal de importação:


user_address - dados do usuário, usar uma estrutura do tipo addr3_val.

FUNÇÕES STANDARD
 Para trabalhar com Notas Fiscais:

J_1B_NF_NUMBER_SEPARATE - Nota Fiscal System - Number Separate (NF


number + Series)

J_1B_NF_NUMBER_CONDENSE - Nota Fiscal System - Number Condense (NF


number + Series)

J_1B_NF_NUMBER_GET_NEXT - Nota Fiscal System - Get next Nota Fiscal


number

J_1B_NF_DOCUMENT_READ - Carrega o header da nota fiscal em uma


estrutura

J_1B_NF_VALUE_DETERMINATION - Carrega os itens, seus impostos e o total


líquido do item da nota fiscal

Por questões de performance, os itens podem ser passados para a função


J_1B_NF_VALUE_DETERMINATION para que ela efetue somente os cálculos

78
Academia ABAP - 2008

 Para se obter a BOM de um material

Usar a função CS_BOM_EXPL_MAT_V2

 Para testar o status de uma ordem

Usar a função STATUS_CHECK_BY_SELSCHEM e verificar o retorno FULLFILL


se inicial é porque a ordem não se encontra no esquema de status indicado

 Para criar jobs dentro de um programa abap

Utilizar as funções: JOB_OPEN, JOB_SUBMIT e JOB_CLOSE

As tabelas que armazenam as informações de JOBS são:


TBTCO Job status overview table
TBTCP Batch job step overview

 Função que calcula diferença entre datas/horas


CALL FUNCTION 'Z_DT_HORAS_DIF'
EXPORTING
i_dt_inicio = p_dt_1
i_hr_inicio = p_hr_1
i_dt_fim = p_dt_2
i_hr_fim = p_hr_2
IMPORTING
e_diff_total = v_difer
er_message = v_erro
EXCEPTIONS
OTHERS = 1.
v_min = FRAC( v_difer ) * 60.
v_hora = v_difer - FRAC( v_difer ).

CONCATENATE v_hora ':' v_min INTO v_tempo.

 Executar comandos do UNIX


DATA: t_arq_usudel LIKE rlgrap-filename OCCURS 0 WITH HEADER LINE.
PARAMETERS: p_com LIKE rlgrap-filename DEFAULT
'ls -d /interfaces/log/perfis/usuario/*'.

CALL 'SYSTEM'
ID 'COMMAND' FIELD p_com
ID 'TAB' FIELD t_arq_usudel-*sys*.

IF T_ARQ_USUDEL[] IS INITIAL.

ENDIF.

 READ_TEXT
O nome do texto é simplesmente a chave completa da tabela em questão,
existe uma dificuldade de descobrir o ID e o Objeto a serem passados.
Para acessá-los facilmente, bastar clicar (2x) sobre o texto na transação em

79
Academia ABAP - 2008

que ele aparece, (o modo editor será acionado) em seguida ir no menu: Saltar
-> Cabeçalho e pronto, os campos necessários estão nesta tela.

 POPUP SCREEN

POPUP_TO_CONFIRM_STEP
Cria um box de mensagem com confirmação

POPUP_TO_CONFIRM_WITH_MESSAGE
Cria um box de mensagem com confirmação E 5 LINHAS

POPUP_TO_CONFIRM_WITH_VALUE
Cria Box de Dialogo com passagem de valores como parametro.

POPUP_TO_DECIDE
Cria box de dialogo com opções especificadas.

POPUP_TO_DECIDE_WITH_MESSAGE
Cria Box de dialogo com opções especificas

80
Academia ABAP - 2008

POPUP_TO_DISPLAY_TEXT
Cria Box de Selecão com 2 linhas e Botão

POPUP_TO_SELECT_MONTH
Cria um Box de Seleção para Mês e Ano

POPUP_WITH_TABLE_DISPLAY
Cria um Box de seleção, a partir de uma tabela passada como parâmetro e
retorna qual a opção selecionada pelo usuário.

POPUP_TO_CONFIRM
Exibe uma caixa de textos para confirmação

POPUP_TO_DISPLAY_TEXT
Exibe texto em caixa de textos modal

POPUP_TO_INFORM
Cria caixa de informação

POPUP_TO_CONFIRM_LOSS_OF_DATA
Box de Dialogo

 TEXTOS

SAVE_TEXT
Salva Textos Longos
81
Academia ABAP - 2008

READ_TEXT
Realiza Leitura de Textos Longos no R/3

COMMIT_TEXT
Grava Textos Longos

INIT_TEXT
To load long text into SAP

LIST_TO_ASCII
Converte Relatórios Abap para o formato ASCII

 GERAL
RSTXPDFT4
Converter ordem de spool para PDF
RSTXLDMC
Importar figura (TIF) como texto
RSTXSCRP
Download de sapscript
YS_DESBLOQ_INTERFA
Desbloquear interface
RSTXR3TR
Transporte de sapscript
Ex. Par - Sistema file = servidor
- formato = binário
- file = /usr/sap/trans/tmp/PARK9000.scp
RP_CALC_DATE_IN_INTERVAL
Adiciona/subtrai anos/mêses/dias de uma data
RP_LAST_DAY_OF_MONTHS
Determina ultimo dia do mês
RS_REFRESH_FROM_SELECTOPTIONS
Seleciona Valores de um Select-Options
RS_VARIANT_CONTENTS
Retorna valores de uma variável em uma tabela interna
RZL_SLEEP
Para o Processamento do programa de 1 a 5 Segungos

82
Academia ABAP - 2008

SAPGUI_PROGRESS_INDICATOR
Exibe uma barra de Status, utilizando o SAP GUI
SD_DATETIME_DIFFERENCE
Retorna a diferença entre duas datas e Hora
SO_WIND_SPOOL_LIST
Exibe um Bowse com as impressões do usuário que estão no Spool.
TERMINAL_ID_GET
Retorna o Número IP e o nome do Terminal que o usuário esta logado.
TH_ENVIRONMENT
Retorna Informações sobre o sistema operacional do Servidor SAP.
TH_POPUP
Exibe uma mensagem para o usuário Especificado, em qualquer client.
TH_USER_INFO
Retorna informações sobre o usuário que esta logado.
TH_USER_LIST
Retorna informações de usuários conectados a determinado Servidor
UPLOAD
Abri arquivos na estação Local
WS_DOWNLOAD
Salva Tabela interna na estação de trabalho local
WS_EXECUTE
Executa programas na estação de trabalho
WS_FILE_DELETE
Deleta arquivos na estação de trabalho
WS_FILENAME_GET
Mostra um Browser para Selecionar Arquivos
WS_MSG
Cria um box de dialogo com uma mensagem no padrão Visual Basic
WS_UPLOAD
Carrega dados de arquivos na estação de trabalho para uma tabela interna.
WS_VOLUME_GET
Retorna o Nome do Volume da unidade de disco da estação de trabalho
WWW_LIST_TO_HTML
Salva o conteúdo de um relatório em uma tabela interna no Formato HTML
EPS_GET_DIRECTORY_LISTING
Retorna uma tabela interna com os arquivos de determinado diretório do
servidor.

83
Academia ABAP - 2008

F4_DATE
Exibe um calendário pop-up para escolha
HOLIDAY_GET
Retorna os feriados existentes entre um intervalo de data, baseado no
calendário da fábrica
MONTH_NAMES_GET
Retorna uma tabela interna com os nomes dos meses.
HOLIDAY_GET
Testar se é dia útil.
DAY_ATTRIBUTES_GET
Testar se é dia útil (atributos do dia)
QPK1_GP_CODE_SELECTION
Match-code em estrut. de árvore para dados de catálogo.
SPELL_AMOUNT
Retorna valor por extenso
NUMERIC_CHECK
Verifica se variável é numérica
LOAN_TABLECONTROL_SCROLLING
Controlar scroll de uma table control.
DYNP_VALUES_READ
Lê os valores informados na tela
GET_DYNPRO_LIST
Lê os valores informados na tela. Na tela standard gerada pelo gerador de
atualização de tabelas, só consegui usar este
HELP_VALUES_GET_NO_DD_NAME
Montagem de matchcode dinâmico
RS_VARIANT_CONTENT
Função para leitura de variantes (Ver tabelas VARI e VARID)

 Funções para conversão de unidades/medidas


UNIT_CONVERSION_SIMPLE
UNIT_CONVERSION_SIMPLE_OLD
FLTP_CHAR_CONVERSION

COMO UTILIZAR AUTHORITY-CHECKS


A amarração se dá com um Objeto de autorização para uma ou mais autorizações

84
Academia ABAP - 2008

Perfil é composto por um ou mais objetos de autorizações....

Usuário pode estar presente em N perfis...

Os objetos de autorização, podem ser compostos de vários campos. Conforme o


interesse do objeto. Exemplo, pode-se testar a atividade do usuário de acordo com o
valor preenchido de um determinado campo...como: Autorização de usuário por
empresa campos:
BUKRS - Empresa
ACTVT – Atividade (01-Criação, 02-Alteração e 03-Exibição)

As autorizações podem conter preenchimentos diversos para os objetos de


autorização exemplo anterior:
Autorização = S_EXIBIR, campos/valores:
BUKRS  EMP1
ACTVT  03;

OBSERVAÇÂO:
Estes valores podem ser RANGES ou PARÂMETROS; FIXOS ou VARIÁVEIS.
Em qualquer campo de autorização, o (*) eqüivale a todas as entradas possíveis;

Pesquisando os Objetos de Autorização:


 Caminho: R/3Ferramentas ABAP Workbench DesenvolvimentoOutras
FerramentasObjetos de AutorizaçãoObjetos;
 Transação SU21;
 Selecionar a classe de Objetos do seu interesse;
 Consultar o Objeto em questão;
 Poderá ser criado novos objetos de autorização....

Criando Autorizações;
 Caminho: R/3FerramentasAdministraçãoAtualização UsuárioAutorização
 Transação SU03;
 Seleciona, novamente, a Classe de Objetos desejado;
 Consultar os Objetos existentes, conforme passo anterior;
 Optar pelo objeto de interesse;
 Consultar as Autorizações já existentes para este objeto;
 Poderá ser criado novas autorizações...

Atualizar Perfil:
 Caminho: R/3 FerramentasAdministraçãoAtualização UsuárioPerfil;
 Transação SU02;
 Criação;
 Digite o nome do perfil a ser criado;
 Clicar em ENTER ou GERAR ÁREA TRAB.;
 Exibirá uma lista vazia;
 Clicar em Criar, colocar descrição;
 Perfil individual1 ou coletivo2;

1 Perfil composto por objetos de autorizações.


85
Academia ABAP - 2008

 Na coluna “Objeto”, inserir o nome do Objeto de Autorização;


 Na coluna ”Autorização”, inserir o nome da(s) autorizações desejadas;
 Gravar;
 Observar STATUS, deve estar ATIVO e GRAVADO

Exibição/Modificação;
 Digitar o nome do Perfil;
 Clicar ENTER ou GERAR ÁREA TRAB.;
 Exibirá a lista contendo a autorização selecionada;
 Clicar em MODIF, EXCLUIR,...

Atualizar Perfil do USUÁRIO:


 Caminho: R/3 FerramentasAdministraçãoAtualização UsuárioUsuário;
 Transação SU01;
 Digitar o usuário e nterar como modificação;
 Navegar até a pasta “Perfis”;
 Adicionar o novo perfil à lista do usuário;
 Gravar

 Código Fonte Modelo.

Report com duas possibilidades de resposta (AUTORIZADO ou Não Autorizado).


Contém uma tela de seleção com um parâmetro para CIA ÁREA.

Quando executado, acionará o evento da tela de seleção e efetuará a verificação de


autorização do usuário, conforme digitação em tela...

REPORT ZZZTESTE.

DATA: V_RESULT(20) TYPE C VALUE 'AUTORIZADO'.

PARAMETERS P_CARR LIKE SPFLI-CARRID.

AT SELECTION-SCREEN ON P_CARR.
AUTHORITY-CHECK OBJECT 'S_CARRID'
ID 'CARRID' FIELD P_CARR
ID 'ACTVT' FIELD '02'.
IF SY-SUBRC NE 0.
MOVE 'Não Autorizado' TO V_RESULT.
ENDIF.

START-OF-SELECTION.

WRITE V_RESULT.

PERFORMANCE E ERROS

2 Perfil composto por outros perfis


86
Academia ABAP - 2008

Para identificar alguns erros e problemas de performance, algumas ferramentas


disponíveis no SAP devem ser utilizadas. São elas:

Runtime Analysis (SE30)

Tips and Tricks - Clicando neste botão poderá ser feita comparação entre
comandos Select (diferentes tipos). Dando double-click sobre um dos exemplos você
passará para outra tela, onde você visualizará a medida do tempo em
microsegundos de ambos, servindo de base de comparação.

Runtime Analysis - esta parte é utilizad para analisar a performance do programa.


Ao final da execução você poderá acessar informações sobre o seu programa
(gráficos, acesso a tabelas, etc.). Para tanto clique o pushbutton ANALYSE, que
somente aparecerá depois que for informado o nome do programa e/ou transação e
clicado execute.

OBS: A ferramenta de Runtime Analysis emite um Warning para máquinas com mais
de um processador, neste warning adverte para o fato de não ser precisa para
máquinas com mais de um processador, porém mesmo assim aconselhamos o uso
pois em termos “proporcionais” para se encontrar os “gargalos” do programa a
precisão perdida é dispensável.

SQL Trace - pode ser utilizada para trilhar a lógica de aplicação e verificar possíveis
pontos de correção. Você poderá visualizar os comandos de acesso a banco de
dados, obter informações sobre um comando específico, visualizar os índices que
estão sendo utilizados.

Extended Program Check - é outra facilidade que deve ser empregada visando
manter o seu código o mais correto possível. Nesta opção você poderá selecionar os
itens que você deseja que sejam checados e o sistema apontará o seu parecer.
Para tanto basta clicar os itens e o pushbutton PERFORM CHECK Selecionando
uma linha você poderá ver os detalhes, bem como posicionando o cursor em uma
linha e clicando o pushbutton DISPLAY ALL CHANGES.

CONVERSÕES DE DADOS E INTERFACES


 BATCH INPUT

O mecanismo de batch input (BDC) é o método tradicionalmente utilizado


pelos programas para a transferência de dados. O principal benefício
apresentado por este método é a existência de um utilitário que permite o
gerenciamento das transferências, usualmente chamadas de sessões de
batch input. Essencialmente, uma sessão de batch input é um conjunto de
chamadas a transações e dados que são processados por estas transações.
Uma sessão simula uma entrada de dados manual através de chamadas a
transações que importam dados presentes em um arquivo seqüencial. Cabe
destacar que, todas as checagens de consistência realizadas em modo

87
Academia ABAP - 2008

iterativo, isto é em modo usuário, são também implementadas durante uma


sessão de batch input.

 CALL TRANSACTION

O mecanismo de call transaction (CAT) é um método utilizado pelos


programas de transferência de dados, que processa dados a partir de um
arquivo seqüencial, chamando transações do SAP através de comandos
ABAP. Este método apresenta uma performance superior ao mecanismo de
batch input e ainda possui as mesmas facilidades para checagem e validação
dos dados durante a importação. O CAT deverá ser utilizado pelos programas
de interface para a transferência de dados através de arquivos. Como o
método de call transaction não apresenta facilidades para tratamento de erros,
neste caso, o mecanismo de batch input deverá ser utilizado.

 DIRECT INPUT
O mecanismo de direct input apresenta a melhor performance dentre os dois
anteriores. Essencialmente, este método utiliza um arquivo seqüencial e
funções especiais que processam os dados existentes neste arquivo e que
atualizam as tabelas do sistema R/3 diretamente. A experiência vivenciada em
outros projetos tem mostrado que as funções de direct input apresentam
inúmeros bugs que provocam incosistencias nas tabelas do sistema. Este
método não deverá ser utilizado para a construção das interfaces. Caso o
mecanismo de call transaction não apresente a performance adequada em
alguma interface específica, uma solução baseada em direct input poderá ser
estudada, demandado, entretanto, testes exaustivos face aos problemas de
consistência mencionados.

 Delivered BDC
O mecanismo de delivered BCD representa um conjunto de programas,
fornecidos juntamento com o sistema R/3, que objetivam reduzir o esforço
envolvido no desenvolvimento de novos programas para a transferência de
dados. A experiência tem mostrado que alguns destes programas apresentam
ótima performance (usam direct input), porém sofrem dos problemas de
consistênciam mencionados. Além disso, os delivered BDC utilizam arquivos
de transferência com formato fixo, estabelecido pela SAP. Este mecanismo
não deverá ser utilizado para a construção de interfaces, em virtude dos
problemas discutidos.

 APPLICATION LINK ENABLE

O mecanismo de application link enable (ALE) foi disponibilizado a partir da


versão 3.0 do sistema R/3 com o propósito de suportar a construção e
operação de aplicações distribuídas. Este mecanismo utiliza métodos de
comunicação síncronos e assíncronos para a troca de informações entre
processos de dois ou mais sistemas R/3 distintos, fracamente acoplados.
Também pode ser usado para extração ou carregamento de dados através de
arquivos que utilizam um formato compatível com o tipo de mensagem
associada a conexão ALE. Este método será utilizado para as conversões e

88
Academia ABAP - 2008

interfaces com os sistemas SAP R/3 ou mesmo para integração com


ferramentas de terceiros que possuam suporte a interface ALE. Este
mecanismo será utiliza para construção de interfaces e conversões,
apresentando excelente performance.

 ELETRONIC DATA INTERCHANGE


O mecanismo de eletronic date interchange ou EDI permite a troca de
informações entre duas aplicações, através da transmissão eletrônica de
mensagens que utilizam uma estrutura e formato (IDoc type), estabelecidos
pela SAP. Este mecanismo será utilizado para interfacear o sistema R/3 com
ferramentas de terceiros que possuam suporte a interface EDI.

 REMOTE FUNCTION CALL

O mecanismo de remote function call ou RFC permite que uma aplicação


execute uma chamada a uma função pertencente a uma aplicação que está
executando em um sistema diferente do sistema chamador da função. No
contexto do SAP, as RFCs permitem a construção de interfaces entre dois
sistemas SAP (R/3 ou R/2) ou entre um sistema SAP e um não-SAP. Este
mecanismo deverá ser considerado para a construção de interfaces on-line.

 BUSINESS APPLICATION PROGRAMMING INTERFACE (BAPI)

As BAPIs representam uma interface padronizada de programação que


possibilita as aplicações manipularem processos de negócio e dados do
sistema R/3. As BAPIs são definidas no repositório de objetos do R/3 como
métodos (visão orientada objeto) que realizam transações de negócio
específicas. Exemplificando, o sistema R/3 possui uma BAPI associada a
criação de pedidos de venda. Este mecanismo deverá ser considerado paras
as interfaces e conversões.

RELATÓRIOS E FORMULÁRIOS
 ABAP QUERY

É uma ferramenta que permite realizar extração de dados do SAP para


emissão de listas, formulários sem precisar linha de código. Auxilia o usuário
final a criar listas e levantamentos estatísticos, coletando informações
presentes em diferentes tabelas do sistema R/3. Dispensa quaisquer
conhecimentos de programação ABAP/4.

 REPORT WRITER e REPORT PAINTER

Ferramentas que auxiliam o usuário final na construção de relatórios


complexos. Também dispensa conhecimentos de programação ABAP/4 mas
demanda treinamento específico nestas ferramentas.

 INFORMATION SYSTEM
89
Academia ABAP - 2008

Ferramenta para geração de relatórios que permite ao usuário final criar listas
com layouts específicos e fórmulas (Análise Flexível), apresentar resultados
através de gráficos (Análise Standard), entre outras facilidades. Outras
informações podem ser encontradas na documentação do sistema R/3 no
tópico LIS - Logistics Information System.

 SAPScript

Mecanismo para construção de formulários de impressão com layouts


específicos. Também demanda conhecimentos em programação ABAP/4 e
treinamento em SAPscript.

Os mecanismos de ABAP Query, Report Writer e Report Painter, que


possibilitam ao usuário final gerar relatórios on-line e on-demand devem ser
considerados criteriosamente, pois a utilização destas facilidades pode
provocar impactos na performance do sistema produtivo. Este tópico também
deve ser considerado do ponto de vista dos perfis de segurança, uma vez que
a utilização dos mecanismos citados deve se restringir a poucos usuários,
selecionados pela equipe Funcional.

A Equipe de Tecnologia será responsável pela construção de relatórios e


formulários utilizando programação ABAP/4 e SAPscript. Os demais
mecanismos discutidos serão utilizados pelas Equipes Funcionais, sem o
suporte da Equipe de Tecnologia.

ENHANCEMENTS
1) Para que um field-exit funcione é necessário que o profile parameter
abap/fieldexit esteja com o valor ‘YES’.
Para modificar os valores de um profile parameter utiliza-se a transação RZ11.

2) Enhancements para pedido de vendas – userexit


SPRO - Vendas e distribuição
Adaptação do sistema
User exits
Diversos

1) Quando o frontend sair do ar, para recuperar o que estava fazendo, entrar no
logon do SAP, digitar o user e a senha, não teclar enter, opção de menu Usuário /
Aceitar sessão. Caso o mesmo usuário estiver mais de uma vez na mesma
instância isto não funciona.

2) Ativar o screen painter gráfico:


Para que o screen painter gráfico funcione na estação são necessários os
arquivos: GNEUX.exe / GNETX.exe / EUMFCDLL.dll

3) Transporte de textos standard (texto sapscript)

90
Academia ABAP - 2008

Para transportar textos standard devemos criar uma request manual e no editor
inserir as entradas:
R3TR TEXT <objeto>,<nome do texto>,ST (ID),S (Idioma)
Exemplo:
PgmID Obj Obj.name
R3TR TEXT TEXT,WHIRPOOL-2,ST,E
R3TR TEXT TEXT,LOGO_57_MM ,ST,E
R3TR TEXT TEXT,LOGO_57_MM ,ST,P

COMANDOS UTÉIS
 MOVE-CORRESPONDING

Quando registros têm a mesma estrutura, é mais eficiente utilizar o comando MOVE
do que o comando MOVE-CORRESPONDING.

Exemplo:

MOVE BSEG TO *BSEG

 SUM, AVG, MIN e MAX

Procure usar as funções de cálculo do SELECT ao invés de usar lógicas para obter
os resultados acima.

 UPDATE TASK

Sempre que possível utilize a atualização via UPDATE TASK para programas
“dialog”
Comandos

 Para mandar um relatório direto para a impressora


new-page
print on
no dialog
keep in spool ‘X’
immediately ‘X’
destination ‘ZP05’
copies quantidade de cópias

 Para concatenar variáveis em um único parâmetro utilizar o &:

Perform f_teste using ‘LIXO1’ & ‘ LIXO3’.


Form f_teste using char.
char possui ‘LIXO1 LIXO3’.
Endform.

COMENTÁRIOS
 ÍNDICE

91
Academia ABAP - 2008

Cada índice criado diminui a performance dos inserts e dos updates nas
tabelas. No geral, tabelas onde são feitos muitos inserts e updates, deverão
ter poucos índices. Da mesma forma, tabelas onde há muitos selects, poderão
ter mais índices. Uma média de 3 índices por tabela é aceitável.

 CÓDIGO MORTO

Evite a existência de código morto ao longo dos programas. Remova


definições de campos que nunca serão usados e códigos que nunca serão
executados.

DICAS E TRUQUES
 Conversões

1) A correspondência entre CATEGORIA DE DADOS e TIPO DE DADOS se


encontra no help da cláusula INTO do comando SELECT.

2) Para converter uma data no formato interno (AAAAMMDD) para o formato


que o usuário está trabalhando utilizar: WRITE SY-DATUM TO V_DATA.
Onde o SY-DATUM pode ser qualquer variável tipo data e a V_DATA deve
ser uma variável caractere de 10 posições.

Ou utilizar a função:
Call Function 'PERIOD_AND_DATE_CONVERT_OUTPUT'
Exporting
Internal_Date = variável like sy-datum
Internal_Period = ‘1’
Importing
External_Date = variável char(10) .

3) Para converter um campo numérico para um alfa retirando pontos e vírgulas,


alinhando à direita, arredondando, desconsiderando o sinal e preenchendo
com zeros à esquerda usar:

WRITE: <campo_num> TO <campo_char> DECIMALS 3 USING EDIT


MASK ‘RR______’
(a quantidade de traços deve ser igual a quantidade de casas do
campo_char)
TRANSLATE <campo_char> USING ‘0’

Para considerar o sinal é necessário acrescer um V na última casa excluindo


um dos traços 'RR_____V'. Porém quando o sinal for positivo a posição ficará
em branco.

4) Para converter uma quantidade em outra unidade de medida utilizar a


função UNIT_CONVERSION_SIMPLE

5) Para converter o mês por extenso utilizar a tabela transparente T247

92
Academia ABAP - 2008

 Tabelas internas e dicionário

1) Para eliminar entradas repetidas de uma tabela interna usar:


SORT <ITAB> BY F1 F2 F3...
DELETE ADJACENT DUPLICATES FROM <ITAB> COMPARING F1 F2
F3...

2) Alguns campos de tabela possuem formatos diferentes de exibição


(OUTPUT) e gravação (INPUT). Para converter esses valores, ou para
saber se o campo possui essa característica, verificar se o domínio do
campo possui um valor no campo Conversion exit.

Por exemplo, o campo LIKP-VBELN possui em seu domínio o Conversion


exit ALPHA.

Isso indica que existem duas funções standard para converter o valor
desse campo:

CONVERSION_EXIT_ALPHA_INPUT – converte o campo para o


formato de gravação, neste caso, alinhado à direita e preenchido com
zeros à esquerda.

CONVERSION_EXIT_ALPHA_OUTPUT – converte o campo para o


formato de exibição, neste caso, alinhado à esquerda sem zeros à
direita.

3) Para transportar somente o conteúdo de uma tabela transparente, criar


uma change request, e no EDITOR inserir a entrada: PgmID = R3TR , Obj
= TABU e no campo Obj.name colocar o nome da tabela transparente.
Depois de inserido a linha dar um duplo clique para preenchimento da
chave. Para transportar todos os registros inserir apenas um asterisco no
primeiro campo genérico.

4) Para encontrar os textos descritivos de uma informação geralmente há


uma tabela de nome semelhante terminada em T. Como por exemplo, a
tabela TVKGR - Grupo de Vendedores possui o nome dos vendedores na
tabela TVGRT. Ao fazer um trace SQL na transação SE16 na tabela
TVKGR por exemplo, é possivel achar o relacionamento.

5) O limite de uma tabela interna são 4.394.608 registros.

6) Cardinalidade das chaves externas do dicionário

Lado Esquerdo:

1 = Para cada registro da ChvExt, existe exatamente um registro na


“Check Table”

C = Não precisa existir o registro, Pode ser Branco


Lado Direito:

93
Academia ABAP - 2008

1 = Existe somente um registro para cada valor da “Check Table”


C = No máximo um registro dependente para cada registro da “Check
Table”
N = Tem pelo menos um registro dependente para cada registro da
“Check Table”.
CN = Qualquer número de registros para cada registro da “Check Table”

 Como buscar resolução do vídeo


case sy-srows
when 19. 640x480
when 27. 800x600
when 37. 1024x768
endcase.
 Gravar objetos locais para request
Transação SE03, modificar entradas catálogo objetos

 Função que cria match-code tipo estrutura de árvore para dados de


catálogo

CALL FUNCTION 'QPK1_GP_CODE_SELECTION'


EXPORTING
* i_katalogart = tq80-mfkat
i_katalogart = 'V'
I_CODEGRUPPE = 'SSE-BPOR'
* I_CODE = ysap01d-code
I_CODE = '*'
i_sprache = sy-langu
i_winx1 = 10
i_winx2 = 60
i_winy1 = 5
i_winy2 = 25
i_display_mode = ' '
i_return_if_one = ' '
i_pickup_mode = 'X'
TABLES
t_qpk1cdtab = iqpk1cd
t_codegrptab = g_codegrptab
EXCEPTIONS
no_match_in_range = 1
no_user_selection = 2
no_authorization = 3
no_selection_specified = 4
object_locked = 5
lock_error = 6
object_missing = 7
OTHERS = 8.

ALTERAÇÃO DE BARRA DE STATUS EM LIST VIEW


Copiar a barra de status “Standart” do grupo de funções SALV e altera-la a
seu bel-prazer.
Na função do list-view, colocar parâmetro “i_callback_pf_status_set” e criar a
form
'F_SET_STATUS'
call function 'REUSE_ALV_LIST_DISPLAY'

94
Academia ABAP - 2008

exporting
i_callback_program = g_repid
i_callback_user_command = 'USER_COMMAND'
i_callback_top_of_page = 'TOP_OF_PAGE'
i_callback_pf_status_set = 'F_SET_STATUS'
it_fieldcat = gt_fieldcat

types: slis_t_extab type slis_extab occurs 1.

form f_set_status using extab type slis_t_extab.


set pf-status 'S100'.
endform.

LISTA INTERATIVA – LER UM CHECKBOX MARCADO EM


UMA LISTA REPORT
Durante a impressão:
LOOP AT IT_ZFIT0014.
WRITE: /1 SY-VLINE,
2(9) '*' COLOR COL_KEY,
6 IT_ZFIT0014-LIB_COMP AS CHECKBOX,
(…)
ENDLOOP.

No AT USER-COMMAND.(por exemplo)
* Testa de o checkbox foi marcado
DO.
ADD 1 TO VI_CONT.
READ LINE VI_CONT.
IF sy-lisel+5(1) = 'X' AND sy-lisel+16(1) = 'X'.
(…)

CARACTERÍSTICAS HERDADAS
Algumas características associadas a um objeto podem ser herdadas de uma classe
superior. Sempre que utilizar a função de classificação de características, assinalar com X o
parâmetro inherited_char. É a garantia de que as características herdadas serão
selecionadas.

call function 'CLAF_CLASSIFICATION_OF_OBJECTS'


exporting
class = t_claf-class
classtype = t_claf-klart
clint = t_claf-clint
features = 'X'
language = sy-langu
object = t_claf-objek
inherited_char = 'X'

BANCO DE DADOS LÓGICO


Transação - SE36
Programas que utilizam. Ex.: J_1BLB01 utiliza o banco de dados lógico J5F
Para FCA, copiei o banco de dados J5F para ZJ6F e o programa J_1BLB01 para ZJ_1BLB01
Na SE38, alterei o atributo do programa “Banco de dados lógico”

95
Academia ABAP - 2008

Ajuda de pesquisa...

Visão condição de seleção...

96
Academia ABAP - 2008

Normalmente quando temos que mapear uma table control em um BI ou call


transaction,
temos problema com a quantidade de linhas visíveis para saber quando fazer um
page
down ou chamar um comando para inserir mais registros.

Para resolver esse problema, existe uma conta que pode ser feita com a variável
sy-srows.

Primeiro é necessário descobrir quantas linhas da tela não pertencem a table


control.
Para isso, entre na transação e conte o número de linhas que estão visíveis. De
posse
desse número, execute o debug e veja o valor do sy-srows.

Subtraia o valor do sy-srows do número de linhas visíveis que voce contou.


Esse resultado, por exemplo, pode ter sido 8.

De posso desse número, é só incluir uma formula no programa:

v_limite = sy-srows - 8.

O v_limite vai ter sempre a quantidade de linhas visíveis da table control


independente
da resolução do monitor.

97
Academia ABAP - 2008

EXEMPLOS
 Exemplo de matchcode dinâmico dependendo de outro match code
Ver programa YSRCS_REDEFINICAO_MODAL

 Exemplo criação de JOB


SAPMZPP119

 Exemplo envio SAPOFFICE


ZPPI0136

 Exemplo do uso de field-symbol


Ver programa EXEMPLO_FIELD_SYMBOL
 Relatório chamando job
Ver programa YSRSD_RELATORIO_DAS_DESCARGAS

 Enviar e-mail através do R/3


Ver programa YSRMM_MATERIAIS_ROMPIMENTO_EST.TXT

 Documentações na Internet:
http://ifr.sap.com/

98
Academia ABAP - 2008

99

Você também pode gostar