Escolar Documentos
Profissional Documentos
Cultura Documentos
Abap Report
Abap Report
ABAP
REPORT
ABAP
1.00 - 2
REPORT
Estes aplicativos so chamados reas funcionais, reas de aplicativo ou, s vezes, mdulos funcionais
do R/3. Todos estes termos so sinnimos.
Tradicionalmente, as estruturas empresariais desenvolvem um conjunto de aplicativos de
processamento de dados avaliando produtos individuais e comprando esses produtos separadamente de
diversos fabricantes de software. Interfaces entre eles so ento necessrias. Por exemplo, o sistema de
gerenciamento de materiais precisar ser vinculado com as vendas e a distribuio e com os sistemas
financeiros, e o sistema de fluxo de trabalho precisar de uma alimentao a partir do sistema do HR.
Uma quantidade significativa de tempo e dinheiro de IS gasta na implementao e manuteno
dessas interfaces.
O R/3 vem predefinindo com os aplicativos empresariais bsicos necessrios maioria das grandes
corporaes. Esses aplicativos coexistem em um ambiente homogneo. Eles so projetados para
funcionar utilizando desde um nico banco de dados e um conjunto (muito grande) de tabelas. Os
tamanhos de banco de dados de produo atuais variam de 12 gigabytes a aproximadamente 3
terabytes. Cerca de 8.000 tabelas de banco de dados so distribudas com o produto R/3 padro.
ABAP
1.00 - 3
REPORT
ABAP
1.00 - 4
REPORT
Logon
Atravs do logon o sistema identificar se o usurio esta autorizado a entrar no SAP no client que est
acessando, e atravs do seu UserId que identificado a que mdulos e transaes voc ter acesso.
Barra de Ttulo
Barra de
Ferramentas
Standard
Campo command
Menu do Interface
rea Screen
Barra de Status
ABAP
1.00 - 5
REPORT
Cores
Para que voc possa alterar as cores de seu ambiente tornando mais agradvel, utilize o recurso abaixo
demonstrado.
Clique nas
bolinhas
coloridas e
depois em
Options....
ABAP
1.00 - 6
REPORT
cones no SAP
Abaixo alguns exemplos, com descrio, dos cones que voc ter contato no SAP.
ABAP
1.00 - 7
REPORT
Dicionrio
O Dicionrio um utilitrio que define objetos de dados, nele voc pode criar e armazenar objetos
como tabelas, estruturas e visualizaes.
Caminho: Clique no menu a opo Ferramentas > ABAP Workbench > Dicitionary.
DICA: Se voc
digitar SE11 no
campo command a
tela de entrada do
ABAP Dictionary
ir surgir.
ABAP
1.00 - 8
REPORT
Tabelas
Dentro do R/3, uma table uma coleo de linhas onde em cada linha contm campos ou tambm
chamados de colunas. Em uma table so armazenados dados persistentes, se voc colocar dados em
uma table, eles continuaram ai mesmo depois de voc finalizar seu programa e ali ficaro at seu ou
outro programa altera-los ou exclui-los. O nome de uma table nico dentro de todo o sistema.
Utilizaremos a sflight para exemplificar uma table.
ABAP
1.00 - 9
REPORT
Data element
Uma table composta de campos, mas para criar um campo voc precisa de um data element
que contm os rtulos de campo e a documentao online (F1) para o campo. Um data element
pode ser utilizado em mais de um campo e em mais de uma table.
Para que voc veja os data element, clique duas vezes com o mouse sobre o campo Elem.
dados. Utilizaremos o campo Mandt para exemplificar.
ABAP
1.00 - 10
REPORT
Domnios
O domnio contm a caracterstica tcnica de uma campo, como o comprimento do campo e o tipo de
dado. Os domnios tambm so reutilizveis podendo ser usados em mais de um data element.
Para que voc veja os domnio, aproveitaremos o exemplo da pgina anterior, clique duas vezes com
o mouse sobre o campo Nome do domnio. Utilizaremos o campo Mandt para exemplificar.
ABAP
1.00 - 11
REPORT
Structure
Uma structure uma descrio de uma srie de campos agrupados sob um nome em comum. Ela
descreve os nomes de campo, sua sequncia e seus tipos e comprimentos de dados. Assim como a
table, uma structure no ter outra com seu nome e nem com o de uma table.
Uma estrutura pode agrupar dados de vrias tabelas, ela difere de uma tabela transparente pois s
matm os dados em tempo de execuo do programa.
ABAP
1.00 - 12
REPORT
Tabelas Internas
Tabelas internas so utilizadas para armazenar em tempo de execuo os dados necessrios para a
processamento do seu programa. Estes dados podem ser selecionados de diversas tabelas transparentes.
O nmero de linhas de uma tabela no fixo, a medida que a seleo feita voc pode acrescentar os
dados na sua tabela.
O acesso a tabela interna feito linha a linha utilizando uma work area como interface para transferir
dados para ou de uma tabela, esta work area utilizada para armazenar temporariamente uma entrada
da tabela de dados.
Quando lemos uma tabela interna o contedo de endereamento enviado para uma work area. Esta
work area tem a mesma estrutura da sua tabela interna.
ABAP
1.00 - 13
REPORT
ABAP
1.00 - 14
REPORT
Criar Programas
Caminho:
DICA: Se voc
digitar SE38
no campo
command a tela
de entrada do
editor de ABAP
ir surgir.
ABAP
1.00 - 15
REPORT
DICA: Se clicar
no boto Texto
fonte o editor de
ABAP ir abrir j
no programa
como
apresentado na
prxima pgina.
Descrio
Simples
Tipo de programa
rea de aplicao do programa
Obs.: Aps clicar em salvar na tela Modificar entrada catlogo objetos uma outra tela surgir
solicitando o nmero da request, caso voc j tenha criado uma request anteriormente, salve o seu
programa nela, caso contrrio crie uma nova.
Imp.: Uma request permite o transporte do seu programa de uma mquina de desenvolvimento para
uma outra de produo fisicamente diferente, pois na mesma mquina os programas so vstos em
todos os clients pois so independentes. Caso no haja necessidade de transporte pode-se criar como
LOCAL OBJECT.
ABAP
1.00 - 16
REPORT
ABAP
1.00 - 17
REPORT
Tipos de Editor
Caminho:
Caractersticas:
Modo PC com numerao de linhas (PC mode with line numbers)
Proporciona um estilo de processador de texto com comandos de cpia, recortar e colar mas com a
numerao de linhas includas. Este o modo default do SAP.
Modo PC com numerao de linhas (PC mode without line numbers)
Proporciona um estilo de processador de texto com comandos de cpia, recortar e colar.
Modo Comando (Command mode)
Proporciona a mesma funcionalidade associada a verso R/2 do SAP.
ABAP
1.00 - 18
REPORT
Breakpoint
Utilize o breakpoint quando for necessrio analisar o programa linha a linha e verificar o
acontecimento dos erros.
A funo Continue no debugger executa comandos at o prximo ponto de breakpoint.
Pode-se colocar um ponto de breakpoint na posio atual do cursor selecionando a funo Set
Breakpoint ou atravs de duplo clique. Linhas onde um ponto de break point for fixo esto marcadas
com um smbolo de STOP. Exiba tudo sobre os breakpoint atualmente fixados, selecionando Goto
Breakpoint. Pode-se apagar pontos de breakpoint atravs de duplo clique, aps posicionar o cursor em
um deles ou usando o menu de ponto de breakpoint.
Utilize a declarao BREAK-POINT no Editor ABAP.
Posicione o cursor e ento pode escolher Utilities Breakpoint Set.
Fixe pontos de breakpoint dependente em SY-SUBRC <> 0 atravs de Breakpoint Breakpoint at...
Comandos orientados de breakpoint: Voc pode fixar pontos de breakpoint atravs do ABAP para
palavras-chave, eventos e seqncia de dados escolhendo Breakpoint Breakpoint at...
ABAP
1.00 - 19
REPORT
Selecionar Tabelas
Deve-se declarar as tabelas, como demonstrado na linha 3, que sero utilizadas no programa.
Para leitura da base de dados (Tabelas) voc usa o comando select.
O select no performtico sem autorizaes de checks.
Leitura de todos os dados de uma simples entrada.
Leitura de dados especificando colunas.
Na linha 5, voc v que foi utilizado o comando select para recuperar os registros dos bancos de
dados, onde * indica que todos os campos na tabela devem ser recuperados.
Aps a figura abaixo sero apresentadas outras opes de select.
ABAP
1.00 - 20
REPORT
Sint.:
select single * from... ( seleciona um nico registro)
Este comando de select usado para um acesso simples na entrada de dados. Voc tem que
especificar a chave completa da tabela, para obteno de um nico registro, para usar a chave use
dentro do comando a condio where...
Caso voc no tenha especificado a chave completa, uma mensagem de Warning aparecera no
avisos do editor com erro de sintaxe (check sua performance), neste caso trar o primeiro registro
encontrado na tabela.
Para check use a varivel do sistema sy-subrc (retorna 0 se a leitura foi feita com sucesso,
retorna 4 se entrada no existe)
Este comando no tem endselect.
______________________________
select * from...
endselect. (faz um processo de loop sem restries )
Este tipo de comando faz uma leitura sem restries , seria um tipo de leitura seqncia de uma
tabela, esse tipo de processo no performtico
Este comando tem que ser finalizado com endselect.
Para check use a varivel do sistema sy-subrc ( retorna 0 se a leitura foi feita com sucesso,
retorna 4 se entrada no existe)
______________________________
select * from...
where...
endselect. (faz um processo de loop com restries )
Este tipo de comando faz a leitura com restries que esto nas condies do where, segue
tambm um processo de Loop tem uma performance muito maior que o anterior.
Este comando tem que ser finalizado com endselect.
Para check use a varivel do sistema sy-subrc ( retorna 0 se a leitura foi feita com sucesso,
retorna 4 se entrada no existe)
Operadores de comparao para comando where.
eq
ge
le
ne
gt
lt
=
>=
<=
<>
>
<
=>
=<
><
______________________________
ABAP
1.00 - 21
REPORT
of
table
<itab>.(carrega os dados
Este comando carrega os dados numa tabela interna que tem que ser definida, os nomes dos
campos tem que ser iguais para que sejam transportado os dados.
Este comando sobrescreve os registros.
Este comando no recomendado devido a sua baixa performance pois demanda tempo na
comparao dos campos.
ABAP
1.00 - 22
REPORT
______________________________
select into appendig corresponding fields of
dados correspondente a uma tabela interna definida)
table <itab>.(carrega os
Este comando acrescenta os dados numa tabela interna que tem que ser definida, os nomes dos
campos tem que ser iguais para que sejam transportado os dados.
Este comando no sobrescreve os registro e sim acrescenta novos registro
Este comando no tem endselect.
______________________________
Sint.:
...
select * from mara where matnr like %ca.
...
______________________________
ABAP
1.00 - 23
REPORT
______________________________
ABAP
1.00 - 24
REPORT
ABAP
1.00 - 25
REPORT
______________________________
select * from (<table>)
for all entries in <itab>
where...
Este processo seleciona todos os registros para a tabela interna.
Se a tabela interna no contem dados no use a condio where.
Os campos da tabela transparente e da tabela interna tem que ser iguais.
Esta condio for all entries exclui a adio do comando order by....
______________________________
ABAP
1.00 - 26
REPORT
DICA: Utilize o boto modelo na execuo do programa para gerar um select demonstrando que no
haver erro na ordem da seleo dos campos chaves.
ABAP
1.00 - 27
REPORT
Get
Se em uma base de dados lgica for necessrio a seleo de campos para uma tabela, voc pode
utilizar a declarao GET para especificar somente os campos necessrios para executar o processo.
Ex.:
report zexemplo.
tables: spfli, sflight, sbook.
get spfli fields carrid connid cityfrom cityto deptime arrtime.
write: spfli-carrid, spfli-connid, spfli-cityfrom, spfli-cityto,
spfli-deptime, spfli-arrtime.
get sflight fields fldate price currency.
write:/10 sflight-fldate, sflight-price, sflight-currency.
get sbook fields bookid customid custtype.
write:/20 sbook-bookid, sbook-customid, sbook-custtype.
No recomendado a utilizao deste comando por comprometer a performance.
ABAP
1.00 - 28
REPORT
ABAP
Program
EXEC SQL
IMPORT
...
SAP R/3 System
Utilize a declarao EXEC SQL quando for necessrio uma interveno direta por parte do usurio na
base do banco de dados.
Assim que a declarao EXEC SQL for processada em seu programa ABAP, ela torna o programa
ABAP inoperante at que a declarao ENDEXEC seja processada.
Sint.:
...
exec sql.
<sql statement>
endexec.
...
ABAP
1.00 - 29
REPORT
ABAP
1.00 - 30
REPORT
Eventos
selection
inicialization,
start-of-
Um evento como uma sub-rotina em outras linguagens, trata-se de uma seo independente do
cdigo que executa uma tarefa e ento retorna para o ponto de chamada, contudo, ao contrrio das subrotinas, voc no codifica a chamada para um evento, ao contrrio, o sistema aciona o evento para
voc quando uma condio especifica surge. Um evento um tag (contador) que identifica uma seo
de cdigo, que associada com um evento comea com um nome de evento e termina quando o
prximo nome encontrado. Os nomes dos eventos so palavras reservadas, no se podendo criar
novos eventos. Os nomes dos eventos so:
inicialization
Quando voc executa um programa onde um critrio de seleo definido, o sistema normalmente
processa a tela primeiro. Se voc quer que um bloco de comandos seja executado antes da tela de
seleo utilize este comando.
Sint.:
Antes do comando:
report sapmztst.
parameters firstday like sy-datum default sy-datum.
tables spfli.
ABAP
1.00 - 31
REPORT
Aps o comando
report sapmztst.
parameters firstday like sy-datum default sy-datum.
tables spfli.
initialization.
city_fr = 'new york'.
city_to = 'frankfurt'.
carrid-sign
= 'i'.
carrid-option = 'eq'.
carrid-low
= 'aa'.
append carrid.
firstday+6(2) = '01'.
Sint.:
report zexemplo.
tables sbook.
select-options fl_date for sbook-fldate.
initialization.
move: 'I'
to fl_date-sign,
'EQ'
to fl_date-option,
sy-datum to fl_date-low.
append fl_date.
move: 'BT'
to fl_date-option,
'19960101' to fl_date-low,
'19960630' to fl_date-high.
append fl_date.
ABAP
1.00 - 32
REPORT
start-of-selection
Se a primeira instruo executvel em seu programa no for procedida por um nome de evento, o
sistema automaticamente insere start-of-selection antes da primeira linha de cdigo
executvel. Permite o processamento antes da execuo de leitura das tabelas transparentes atravs do
comando sempre acompanhado pelo comando end-of-selection.
ABAP
1.00 - 33
REPORT
Ex.:
Resultado:
ABAP
1.00 - 34
REPORT
uline
Escreve um trao no relatrio de sada ou tela de seleo
skip
Gera linhas em branco, para mais de uma linha em branco (Ex.: skip n), tambm podendo deslocarse para outro ponto de sada do relatrio (Ex.: skip n to line n).
Sint.:
...
WRITE: 'Text 1 ......'.
SKIP.
WRITE: 'Text 2 ......'.
...
Resultado:
Text 1 ......
Text 2 ......
/p(l)
Sint.:
...
write: /5 (30) field,
...
ABAP
1.00 - 35
REPORT
exit
Termina o loop imediatamente aps a sua utilizao, e o processo somente continua no instruo
imediatamente aps o endloop. Normalmente utilizado quando se quer testar condies dentro do
loop.
Ex.:
report exemplo.
tables t100.
data sap_count type i.
select * from t100 where sprsl = sy-langu and
arbgb = 'ds'.
write / t100-text.
if t100-text cs 'sap'.
add 1 to sap_count.
if sap_count = 3.
exit.
endif.
endif.
endselect.
ABAP
1.00 - 36
REPORT
ABAP
1.00 - 37
REPORT
MOVE
Para mover uma valor de um campo para outro, utilize o comando move. Parte do contedo ou todo
ele pode ser movido. Ao invs de move possvel utilizar o operador se atribuio =.
Sint.:
...
data: number type i,
five
type i.
move 5 to five.
move five to number.
...
ABAP
1.00 - 38
REPORT
Do
O comando do correspondente a um mecanismo de loop bsico.
Sint.:
...
do.
write: / 'sy-index - begin:', (3) sy-index.
if sy-index = 10.
exit.
endif.
write: 'end:', (3) sy-index.
enddo.
...
ABAP
1.00 - 39
REPORT
Tabelas de
operacional
gerenciamento
do
sistema
Algumas variveis foram criadas para validar a execuo e entrada de dados no sistema, estas variveis
encontram-se na estrutura SYST.
Ex.:
sy-subrc
sy-datum
sy-uname
sy-langu
...
ABAP
1.00 - 40
REPORT
Case
O comando case executa uma srie de comparaes onde somente as instrues aps a primeira
correspondncia when sero executadas. Sendo muito semelhante a if/elseif, sendo sua nica
diferena que em cada if/elseif voc pode especificar uma expresso complexa e em case s
pode especificar um nico valor a ser comparado e os valores so sempre comparados quanto a
igualdade. As strings de campo so tratadas como sendo variveis de tipo C
Sint.:
...
data: one
type i value 1,
three type p value 3.
four type p value 4.
do 4 times.
case sy-index.
when one.
write / 'that is'.
when 2.
write
'a'.
when three.
write 'good'.
write 'example'.
when others.
write '!'.
endcase.
enddo.
...
ABAP
1.00 - 41
REPORT
Concatenate
Une duas ou mais linhas ou campos, voc ter de informar onde os dados sero posicionados.
Sint.:
...
data: one(10)
two(3)
three(10)
name(20).
concatenate one
...
value 'John',
value 'F.',
value 'Kennedy',
two three into name separated by space.
Resultado:
John F. Kennedy
ABAP
1.00 - 42
REPORT
Condense
Utilize o comando condense para unir campos havendo a necessidade de desloc-los da posio em
que se encontram.
Ex.:
report zexemplo.
data name(30).
name(10)
= 'Dr.'.
name+10(10) = 'Michael'.
name+20(10) = 'Hofmann'.
condense name.
write name.
Resultado:
Dr. Michael Hofmann
ABAP
1.00 - 43
REPORT
Para diferenciar ou destacar uma ou mais linhas voc utiliza os comandos format color e write
color.
Sint.:
...
loop at i_tab.
if v_flag is initial.
format color 2 intensified on.
v_flag = 'X'.
else.
format color 2 intensified off.
clear v_flag.
endif.
write: /001 i_tab-tabname(15),
017 i_tab-fieldname(15),
034 i_tab-rollname(15),
051 i_tab-domname(15),
068 i_tab-datatype,
074 i_tab-leng no-zero,
082 i_tab-decimals no-zero,
090 i_tab-tabclass.
endloop.
ABAP
1.00 - 44
REPORT
...
ABAP
1.00 - 45
REPORT
Smbolos e cones
Voc tem a opo de criar smbolos e cones para os seus programas.
Um symbol uma figura bicolor simples de um smbolo comum como um circulo, quadrado, uma
pasta ou documento ocupando em sua maioria apenas um caracter na lista de sada, tendo alguns
ocupando dois caracteres; j um icon semelhante a um smbolo exceto por ser multicolorido,
chegando a ocupar at mais que dois caracteres.
Sint.:
...
INCLUDE <SYMBOL>.
WRITE: / SYM_RIGHT_HAND AS SYMBOL,
'Tip, Note',
SYM_LEFT_HAND AS SYMBOL.
...
...
INCLUDE <ICON>.
WRITE: / ICON_OKAY AS ICON,
'Text line'.
...
"output as icon
ABAP
1.00 - 46
REPORT
ABAP
1.00 - 47
REPORT
Sint.:
...
select * from <table>.
reserve 3 lines.
write: / <table-c1>, <table-c2>,
/ <table-c3>, <table-c4>, <table-c5>,
/ <table-c6>.
skip.
endselect.
top-of-page.
write / Relatrio.
uline.
...
<table> uma tabela.
<table-cn> so os campos da tabela.
Resultado:
Relatrio
---------------------------------------------------------------------11111
So Paulo
Rua So Paulo, 9999
011-999-9999
11112
Rio Grande do Sul
Rua Porto Alegre, 9999
041-999-9999
ABAP
1.00 - 48
REPORT
Ex.:
ABAP
1.00 - 49
REPORT
Formato de pginas
Voc pode usar parmetros para controlar o tamanho da pgina do relatrio, para isso voc pode
utilizar os seguintes comandos:
line-size
line-count
Sint.:
report zteste line-size 132 line-count 15.
tables...
...
ABAP
1.00 - 50
REPORT
ABAP
1.00 - 51
REPORT
ABAP
1.00 - 52
REPORT
23
25
22
22
USA
FRG
USA
USA
ABAP
1.00 - 53
REPORT
...
loop at itab into struc where blnce <> 0.
write: struc-name, struc-blnce.
endloop.
...
ABAP
1.00 - 54
REPORT
Controle de quebras
at first, at last
Voc pode utilizar estes comandos para executar um trecho entre a primeira e a ltima passagem do
loop por uma tabela interna.
Obs.: Todos estes comandos devem ser finalizados com endat.
Sist.:
...
loop at itab.
...
at first.
...
endat.
...
at last.
...
endat.
...
endloop.
...
at new, at end of
Utilize estes comandos para detectar uma alterao em uma coluna de uma passagem de loop para a
seguinte.
Obs.: Todos estes comandos devem ser finalizados com endat.
Sist.:
...
sort by c.
loop at itab.
...
at new c.
...
endat.
...
at end of c.
...
endat.
...
endloop.
...
ABAP
1.00 - 55
REPORT
ABAP
1.00 - 56
REPORT
ABAP
1.00 - 57
REPORT
ABAP
1.00 - 58
REPORT
...
selection-screen begin of block rad_blk with frame title text-OOO.
parameters: rad_exl radiobutton group one,
rad_ex2 radiobutton group one,
rad_exl radiobutton group one,
selection-screen end of block rad-blk.
...
ABAP
1.00 - 59
REPORT
ABAP
1.00 - 60
REPORT
Variantes
Quando voc entra com os mesmos dados constantemente voc pode salvar estes dados em uma
variante.
Para que se salve os dados, voc deve estar na tela onde eles sero preenchidos e clique no cone de
salvar, de um nome para sua variante. Preencha a tela como do exemplo abaixo.
ABAP
1.00 - 61
REPORT
line-
Um programa de relatrio consiste de uma simples lista de informaes, isto significa que quando o
relatrio executado os dados esto disponibilizados de acordo com o que o lhe foi solicitado. Estes
relatrios podem se tornar extensos, sendo que muitas vezes seu foco distorcido mediante tantas
informaes. Para estas situaes utilizamos o recurso de listas secundrias.
Este tipo de relatrio no pode ser executado em background, a atuao do usurio direta.
Quando houver necessidade de informaes adicionais, o usurio interage durante a execuo.
Relatrios Interativos permitem voce utilizar listas secundrias, outros relatrios e transaes passando
dados entre eles atravs do comando HIDE.
At line-selection -
Ocorre aps o usurio clicar duas vezes sobre uma linha do relatrio.
At PF <nn>
At user-command -
ABAP
1.00 - 62
REPORT
Abaixo relacionamos algumas variveis do sistema que ajudam nos controles das listas secundrias.
ABAP
1.00 - 63
REPORT
ABAP
1.00 - 64
REPORT
ABAP
1.00 - 65
REPORT
Siga as recomendaes que esto com * para definir as funes. Observe que existem o PBI (Process
after Input) e o PBO (Process before output).
ABAP
1.00 - 66
REPORT
ABAP
1.00 - 67
REPORT
Esta funcionalidade permite que voc crie cones e funes. Ex.: Bot1 e Bot2.
ABAP
1.00 - 68
REPORT
ABAP
1.00 - 69
REPORT
ABAP
1.00 - 70
REPORT
Componentes de ligao
Dentro do programa de ABAP voc pode chamar outros programas de report ou transao atravs dos
comandos call e submit.
ABAP
1.00 - 71
REPORT
ABAP
1.00 - 72
REPORT
report exemplo.
tables indx.
data: indxkey like indx-srtfd,
f1(4), f2 type p,
begin of tab3 occurs 10,
cont(4),
end of tab3.
indxkey = 'indxkey'.
import f1 f2 tab3 from database indx(st) id indxkey.
ABAP
1.00 - 73
REPORT
Constants
Como o nome j diz uma constante, sendo que quase idntica a uma varivel, exceto quanto ao fato
de que seu valor no poder ser alterado. A instruo constants semelhante instruo data;
entretanto, a adio do comando value necessrio. O comando constants pode ser usado
quando for incluir um literal vrias vezes no mesmo programa definindo um valor igual ao da literal e
utilizar a constante no corpo do programa e quando for necessrio alterar o valor de sua literal basta
apenas alterar o valor de sua constante.
Sint.:
constants co1[(l)] [type t] [decimals d] value 'zaza'.
co1 o nome da constante
(l) a especficao interna de comprimento.
t o tipo de dado.
d o nmero de casas decimais (utilizadas apenas com o tipo p).
'zaza' um literal que fornece o valor da constante.
Ex.:
...
constants char1 value 'x'.
...
constants int
type i value 99.
...
constants: begin of const_rec,
c(2) type i value 'xx',
n(2) type n value '12',
x
type x value 'ff',
i
type i value 99,
p
type p value 99,
f
type f value '9.99e9',
d
type d value '19950101',
t
type t value '235959',
end of const_rec.
...
ABAP
1.00 - 74
REPORT
Types
A instruo types utilizada para definir seus prprios tipos de dados e orientar-se nos tipos j
existentes.
Sint.:
types tp1(c) type t decimals d.
types tp1 like g1.
tp1 o nome do tipo.
g1 o nome de uma varivel previamente definida no programa ou o nome de um campo que
pertence a uma tabela ou estrutura no Data Dictionary.
(d) a especficao interna de comprimento.
t o tipo de dado.
d o nmero de casas decimais ( utilizadas apenas com o tipo p).
Ex.:
report zexemplo.
types wa(2) type c.
data: va1 type wa value 'FOME',
va2 type wa value 'SEDE'.
write va1, va2.
Resultado:
FOME SEDE
Tipos de Types:
Tipo
C
N
D
T
X
I
P
F
Descrio
Texto (Caracter)
Texto Numrico
Data (YYYYMMDD)
Hora (HHMMSS)
Hexadecimal
Whole number (integer)
Packed number
Floating point number
Tamanho
1
1
8
6
1
4
8
8
Valor Inicial
Space
'00...0'
'00000000'
'000000'
X'00'
0
0
'0.0'
ABAP
1.00 - 75
REPORT
Types Estruturados
quando um tipo definido pelo usurio pode ser baseado na definio de uma string de campo,
utilizado para reduzir a redundncia e tornar a manuteno mais fcil.
exemplo:
report zexemplo.
types: begin of address,
street(26),
city(15),
postal_code(9),
end of address.
data: customer_addr type address,
vendor_addr
type address.
customer_addr-street = 'zazzaza'.
write: / customer_addr-street.
ABAP
1.00 - 76
REPORT
Clear
O comando clear configura o valor de uma varivel ou string de campo como zero. Se o dado do
tipo c, o valor , por sua vez, ser configurado como espaos em branco.
Sint.:
clear c1 [with c2 : with 'A': with null]
c1 e c2 so nomes de string de campo ou variveis.
'A' um literal de qualquer comprimento.
Ex.:
...
DATA: TEXT(10)
VALUE 'Hello',
NUMBER TYPE I VALUE 12345,
ROW(10) TYPE N VALUE '1234567890',
BEGIN OF PLAYER,
NAME(10)
VALUE 'John',
TEL(8) TYPE N VALUE '08154711',
MONEY TYPE P VALUE 30000,
END
OF PLAYER.
...
CLEAR: TEXT, NUMBER, PLAYER.
...
ABAP
1.00 - 77
REPORT
Free
Utilize o comando free para excluir todas as linhas de uma tabela interna e liberar a memria
associada. Trabalha da mesma forma que o comando clear.
Sint.:
free itab.
itab uma tabela interna com ou sem uma linha de cabealho.
todas as linhas so excludas e toda a memria utilizada pelo corpo da tabela interna liberada.
a linha de cabealho, se existir, permanecer inalterada.
utilize free quando terminar de utilizar uma itab.
Ex.:
data: begin of itab occurs 3,
t1 like sy-index,
end of itab.
do 3 times.
itab-t1 = sy-index.
append itab.
enddo.
loop at itab.
write itab-t1.
endloop.
free itab.
if itab[] is initial.
write: / 'no existe indicao na itab aps instruo free'.
endif.
Resultado:
1
2
3
no existe indicao na itab aps instruo free
ABAP
1.00 - 78
REPORT
Refresh
Ele exclui todas as linhas de uma tabela interna, mas deixa a memria alocada, voc utiliza quando
quiser preencher a tabela novamente. Se voc necessita utilizar a tabela imediatamente aps limp-la, o
comando refresh mais eficiente do que free j que impede alocaes desnecessrias de
memria.
Sint.:
refresh itab.
itab uma tabela interna com ou sem uma linha de cabealho.
Todas as linhas so excludas. Toda a memria utilizada pelo corpo da tabela interna permanece
alocada.
A linha de cabealho, se existir, permanecer inalterada
Ex.:
data: begin of itab occurs 3,
t1 like sy-index,
end of itab,
v like sy-index.
do 3 times.
v = sy-index.
do 3 times.
itab-t1 = v * sy-index.
append itab.
enddo.
write: / ''.
loop at itab.
write itab-t1.
endloop.
refresh itab.
enddo.
Resultado:
1
2
3
2
4
6
3
6
9
ABAP
1.00 - 79
REPORT
Executando Clculos
compute
Instruo utilizada com mais freqncia para executar clculos.
Sint.:
compute va3 = va1 op va2
va3 a varivel de recebimento do resultado do clculo.
va1 e va2 so os operandos.
op um operador matemtico.
Ex.:
...
va3 = va2 + va3.
va1 = ( va2 + va3 ) * va4
...
Quando for necessrio trabalhar com parnteses utilize um espao, ( , ), antes e depois do valor
dentro do parnteses.
add ou add-corresponding
O comando add utilizado para adicionar um nmero a outro, com add-corresponding as
strings de campo com os dados que tm o mesmo nome podem ser adicionadas juntamente.
Sint.:
...
add va1 to va2.
add-corresponding st1 to st2
...
ABAP
1.00 - 80
REPORT
Assim como demonstrado em add (funo de adicionar) abaixo demonstraremos subtrair, multiplicar
e dividir. As instrues abaixo operam de forma semelhante a add.
subtract ou subtract-corresponding
Sint.
subtract va1 from va2.
subtract-corresponding st1 from st2.
multiply ou multiply-corresponding
Sint.:
multiply va1 by va2.
multiply-corresponding st1 by st2.
divide ou divide-corresponding
Sint.:
divide va1 by va2.
divide-corresponding st1 by st2.
ABAP
1.00 - 81
REPORT
Check
Assume a condio de IF mas com menos complexidade, com a mesma eficincia e tambm podendo
ser codificada dentro de um loop, passa o controle imediatamente instruo de terminao do loop e
desviando das instrues intermedirias. Aceita uma expresso lgica. Se a expresso for verdadeira,
no far nada. Se for falsa, pular para o final do loop.
Sint.:
...
select * from mara where matnr = 1.
check sy-subrc = 0.
...
Ex.:
report zexemplo.
tables: spfli,
sflight.
...
select-options:
sf_price for sflight-price,
sp_carr
for spfli-carrid,
sp_from
for spfli-cityfrom no database selection,
sp_dept
for spfli-deptime.
...
get sflight.
check select-options.
...
ABAP
1.00 - 82
REPORT
Read Table
utilizado para ler e localizar uma nica linha que corresponde aos critrios especficos e a coloca em
uma rea de trabalho. O comando read table s pode ser utilizado para a leitura de tabelas
internas, no funcionando com banco de dados.
Ex.:
report zexemplo.
data: begin of ti occurs 3,
va1(2) type n,
va2
type i,
end of ti,
va3 like ti.
ti-va1 = '5'. ti-va2 = 2. append ti.
ti-va1 = '10'. ti-va2 = 5. append ti.
read table ti index 2.
write: / 'sy-subrc =', sy-subrc,
/ 'sy-tabix =', sy-tabix,
/ ti-va1, ti-va2.
Resultado:
sy-subrc =
sy-tabix =
10
0
2
5
ABAP
1.00 - 83
REPORT
Insert
Voc pode utiliz-lo para inserir uma nica linha em uma tabela interna.
Sint.:
...
insert [wa into] itab [index n]
...
wa uma rea de trabalho com a mesma estrutura de uma linha de tabela interna itab.
n uma constante, literal ou varivel numrica.
se wa for especificado, o contedo dela ser inserido em itab. wa dever ter a mesma
estrutura que itab.
se wa no for especificado, o contedo da linha de cabealho ser inserido em itab. Se itab
no tiver uma linha de cabealho, wa dever ser especificado.
se index for especificado, a nova linha ser inserida antes da linha n. A linha n se tornar
ento a linha n + 1.
a instruo insert pode ser utilizada dentro ou fora de loop at itab. Se utilizada fora, a
adio index dever ser especificada. Se utilizada dentro, index ser opcional. Se a adio
no for especficada, a linha atual ser assumida.
exemplo:
data: begin of itab occurs 5,
fa1 like sy-index,
end of itab.
do 5 times.
itab-fa1 = sy-index.
append itab.
enddo.
itab-fa1 = -99.
insert itab index 3.
loop at itab.
write / itab-fa1.
endloop.
loop at itab where fa1 >= 4.
itab-fa1 = -88.
insert itab.
endloop.
skip.
loop at itab.
write / itab-fa1.
endloop.
ABAP
1.00 - 84
REPORT
Resultado:
1
2
993
4
5
1
2
993
884
885
ABAP
1.00 - 85
REPORT
Modify
Serve para modificar o contedo de uma ou mais linhas de uma tabela interna
Sint.:
modify itab [from wa] [index n] [transporting c1 c2 ... [where exp]]
itab o nome de uma tabela interna com ou sem uma linha de cabealho.
wa uma rea de trabalho com a mesma estrutura de uma linha no corpo de itab.
v uma constante, varivel ou literal numrica.
c1 e cp2 so componentes de itab.
el uma expresso lgica envolvendo componentes de itab.
obs.:
se from wa for especificada, a linha ser sobrescrita com o contedo de wa.
se from wa no for especificada, a linha ser sobrescrita com o contedo da linha de cabealho.
se index n for especificada, n identificar o nmero da linha que foi sobrescrita.
modify itab pode ser especificada dentro ou fora de loop at itab. Se especificada fora,
index n dever ser especificado. Quando especificada dentro, index n ser opcional. Se no for
especificada, a linha atual ser modificada.
transporting especifica quais componentes devem ser sobrescritos e o restante permanecer
inalterado. Sem ela, todos eles sero sobrescritos.
usar a condio where depois de transporting far com que os componentes especificados
sejam sobrescritos em todas as linhas que satisfazem a condio where. O lado esquerdo de cada
parte de exp deve especificar um componente de itab. O mesmo componente pode ser
especificado depois de transporting e em exp.
No poder utilizar modify itab com where:
- dentro do loop at itab
- com a adio index
ABAP
1.00 - 86
REPORT
Ex.:
report zexemplo.
data: begin of itab occurs 5,
t1 like sy-index,
t2,
end of itab,
gama(5) value 'plaut'.
do 5 times varying itab-t2 from gama+0 next gama+1.
itab-t1 = sy-index.
append itab.
enddo.
itab-t2 = 'v'.
modify itab index 4.
loop at itab.
write: / itab-t1, itab-t2.
endloop.
loop at itab.
itab-t1 = itab-t1 * 2.
modify itab.
endloop.
skip.
loop at itab.
write: / itab-t1, itab-t2.
endloop.
itab-t2 = 'W'.
modify itab transporting t2 where t1 <> 10.
skip.
loop at itab.
write: / itab-t1, itab-t2.
endloop.
Resultado:
1
2
3
5
5
p
l
a
v
t
2
4
6
10
10
p
l
a
v
t
ABAP
1.00 - 87
REPORT
4
6
10
10
W
W
v
t
ABAP
1.00 - 88
REPORT
Delete
Com o comando delete voc poder excluir uma ou mais linhas de uma tabela interna. Semelhante
as inseres, as excluses dentro do loop at itab no afetaro imediatamente a tabela interna, ao
contrrio, se tornaro efetivas na prxima passagem do loop.
Sint.:
Delete itab [index c]
[from v] [to l]
[where exp]
itab uma tabela interna
c, v e l so constantes, variveis e literais numricos
exp uma expresso lgica envolvendo os componentes de itab.
Occurs
No limita o nmero de linhas que pode ser adicionado tabela interna, teoricamente o nmero de
linhas que pode ser adicionado a uma tabela interna apenas limitado a memria virtual disponvel no
servidor do aplicativo. O sistema utiliza o comando occurs apenas como uma especificao para
determinar quanta memria ser alocada.
ABAP
1.00 - 89
REPORT
With Keys
Se a utilizao da adio for especificada, o sistema localizar uma linha que corresponda com a
expresso key e a colocar na linha de cabealho. Usando a expresso key, voc pode procurar por
uma linha especificando um valor ao invs de ndice.
Ex.:
report zexemplo
data: begin of itab occurs 3,
t1(3) type n,
t2
type i,
t3(3) type c,
t4
type p,
end of itab,
begin of tabi,
t1 like itab-t1,
t2 like itab-t2,
end of tabi,
tabt like itab,
t(8).
itab-t1 = '100'.
itab-t3 = 'pp'.
itab-t2 = itab-t4 = 1.
append itab.
itab-t1 = '200'.
itab-t3 = 'll'.
itab-t2 = itab-t4 = 2.
append itab.
itab-t1 = '300'.
itab-t3 = 'aa'.
itab-t2 = itab-t4 = 3.
append itab.
read table itab with key t1 = '300' t2 = 3.
write: / 'sy-subrc =', sy-subrc,
/ 'sy-tabix =', sy-tabix,
/ itab-t1, itab-t2, itab-t3, itab-t4.
t = 't2'.
read table itab into tabt with key (t) = 2.
write: /,
/ 'sy-subrc =', sy-subrc,
/ 'sy-tabix =', sy-tabix,
/ itab-t1, itab-t2, itab-t3, itab-t4,
/ tabt-t1, tabt-t2, tabt-t3, tabt-t4.
clear tabi.
tabt-t1 = '100'.
tabt-t3 = 'pp'.
ABAP
1.00 - 90
REPORT
tabt-t2 = tabt-t4 = 1.
read table itab with key = tabt.
write: /,
/ 'sy-subrc =', sy-subrc,
/ 'sy-tabix =', sy-tabix,
/ itab-t1, itab-t2, itab-t3, itab-t4.
tabi-t1 = '200'.
tabi-t2 = 2.
read table itab into tabt with key tabi.
write: /,
/ 'sy-subrc =', sy-subrc,
/ 'sy-tabix =', sy-tabix,
/ itab-t1, itab-t2, itab-t3, itab-t4.
Resultado:
sy-subrc =
sy-tabix =
300
sy-subrc =
sy-tabix =
300
200
sy-subrc =
sy-tabix =
100
sy-subrc =
sy-tabix =
100
0
3
3
AA
0
2
3
2
AA
LL
3
2
0
1
1
PP
0
2
1
PP
ABAP
1.00 - 91
REPORT
Form
Define o fim do evento precedente e o comeo de uma sub-rotina. As sub-rotinas no podem ser
excessivas no interior de eventos.
Sint.:
form <sub> tables pa1 pa2...
using pa3 value pa4.
...
endform.
<sub> o nome da sub-rotina.
pa1 e pa2 so parmetros.
Ex.:
TYPES: BEGIN OF FLIGHT_STRUC,
FLCARRID LIKE SFLIGHT-CARRID,
PRICE
LIKE SFLIGHT-FLDATE,
END
OF FLIGHT_STRUC.
DATA: MY_FLIGHT
IBOOK1
IBOOK2
STRUC
TYPE
LIKE
LIKE
LIKE
FLIGHT_STRUC OCCURS 0,
SBOOK
OCCURS 0,
IBOOK1
OCCURS 0,
SBOOK.
P_ITAB
P_BOOK1
P_BOOK2
P_STRU
LIKE
LIKE
LIKE
LIKE
MY_FLIGHT[]
IBOOK1[]
IBOOK2[]
STRUC.
ABAP
1.00 - 92
REPORT
Perform
utilizado para chamar uma sub-rotina, no caso o form.
Ex.:
report zexemplo.
data: number_i type i value 5,
number_p type p value 4,
begin of person,
name(10)
value 'paul',
age type i
value 28,
end
of person,
alpha(10)
value 'abcdefghij'.
field-symbols <pointer>.
assign number_p to <pointer>.
perform change using 1
number_i
number_p
<pointer>
person
alpha+number_i(<pointer>).
*------------------------------------------------------------------*
*
form change
*
*------------------------------------------------------------------*
*
........
*
*------------------------------------------------------------------*
* --> value(par_1)
*
* --> par_number_i
*
* --> par_number_p
*
* --> par_pointer
*
* --> par_person
*
* --> par_part_of_alpha
*
*------------------------------------------------------------------*
form change using value(par_1)
par_number_i
par_number_p
par_pointer
par_person structure person
par_part_of_alpha.
add par_1 to par_number_i.
par_number_p = 0.
par_person-name+4(1) = alpha.
par_person-age = number_p + 25.
add number_i to par_pointer.
par_part_of_alpha = space.
endform.
ABAP
1.00 - 93
REPORT
Include
Um programa include um aplicativo em que o contedo projetado para ser utilizado por outro
programa, podendo estar includo em mais de um programa. Normalmente ele no completo sozinho.
Um programa include deve ser do tipo i. O cdigo do programa include copiado como est e
substitui o comando include no tempo de gerao do programa.
Ex.:
Programa Principal
report zexemplo.
tables: <tab1>, <tab2>.
parameters va_var1 like tab1-camp1.
include: zexemp1,
zexemp2.
top-of-page.
write: / 'Resultado', va_var1.
uline.
Include ZEXEMP1
*** include zexemp1.
select single * from tab1 where camp1 = va_camp1.
Include ZEXEMP2
*** include zexemp2.
select * from tab2 where camp1 = tab1-camp1.
write: / tab2-camp1.
endselect.
ABAP
1.00 - 94
REPORT
Call function
Este comando utilizado para chamar um mdulo de funo. call function um comando
especfico, no necessitando que seja colocado pontos ou vrgulas depois de parmetros ou nomes de
exceo. O nome do mdulo deve ser codificado em letras maisculas, se for codificado em letras
minsculas, a funo no ser localizada e um dump ocorrer.
exemplo:
data begin of bdcdata occurs 100.
include structure bdcdata.
data end of bdcdata.
data begin of itab occurs 10.
include structure bdcmsgcoll.
data end of itab.
data program like sy-repid
bdcdata-program
bdcdata-dynpro
bdcdata-dynbegin
append bdcdata.
clear bdcdata.
bdcdata-fnam
bdcdata-fval
append bdcdata.
...
call transaction
= 'sapms38m'.
= '0100'.
= 'x'.
= 'rs38m-programm'.
= program.
'se38'
ABAP
1.00 - 95
REPORT
Top-of-page
Este comando utilizado para criar ttulos personalizados (cabealhos). Se no houver uma tela de
seleo, o primeiro comando write executado acionar o top-of-page, caso o seu programa
possua uma tela de seleo possvel que o top-of-page seja acionado duas vezes, primeiro pelo
comando write executado antes da tela de seleo ser mostrada ou pelo comando write executado
aps a tela de seleo ser mostrada.
Ex.:
report zexemplo no standard page heading.
data: va1(5) value 'gata',
va2(5) value 'carla'.
write: / 'Como vai?'.
top-of-page.
write: / 'Srta.', va2. uline.
Resultado:
ABAP
1.00 - 96
REPORT
End-of-page
Este comando cria rodaps de pgina, os comandos que estiverem aps o end-of-page sero
executados antes da gerao de cada nova pgina. Voc precisa reservar espao na parte inferior da
pgina (line-count) para o end-of-page.
Ex.:
report zexemplo line-count 15(2) no standard page heading.
data: va1(5) value 'gata',
va2(5) value 'Carla'.
do 20 times.
write: / 'como vai', sy-index, 'times'.
enddo.
top-of-page.
write: / 'Srta.', va2.
uline.
end-of-page.
write: / sy-uline,
/ 'Este o rodap com duas linhas reservadas'.
Resultado:
ABAP
1.00 - 97
REPORT
At selection-screen
processado depois da entrada do usurio na tela de seleo ativa, podendo ocorrer aps o usurio
clicar um boto. Alm da verificao de validaes de dados, mensagens de aviso, alterao do status
GUI e at mesmo janelas pop-up podem ser abertas utilizando este evento.
Ex.:
...
select-options name for sy-repid modif id xyz.
...
at selection-screen output.
loop at screen.
check screen-group1 = 'xyz'.
screen-intensified = '1'.
modify screen.
endloop.
....
ABAP
1.00 - 98
REPORT
At user-command
Os botes, assim como muitas outras opes de tela de seleo baseadas em evento, podem ser muito
teis na manuteno da interao com usurio e na validao de entrada do usurio.
data: number1 type i value 20,
number2 type i value 5,
result type i.
start-of-selection.
write: / number1, '?', number2.
at user-command.
case sy-ucomm.
when 'add'.
result = number1 + number2.
when 'subt'.
result = number1 - number2.
when 'mult'.
result = number1 * number2.
when 'divi'.
result = number1 / number2.
when others.
write 'unknown function code'.
exit.
endcase.
write: / 'result:', result.
Resultado:
20
ABAP
1.00 - 99
REPORT
Message
As mensagens so mantidas e armazenadas na tabela T100 e podem ser acessadas a partir do ABAP
Workbenck. Um programador efetivo emite mensagens que so descritivas e ajudam o usurio a
entender a natureza do fluxo do programa.
possvel atribuir a cada instruo de mensagem tipos de mensagem que tm diversos efeitos no
resultado do programa.