Você está na página 1de 98

p

ABAP
REPORT

ABAP
REPORT

1.00 - 2

Qual a funo do R/3?


oferecer um conjunto integrado compacto, de aplicativos empresariais de grande escala. O conjunto padro de aplicativos integrados com cada sistema R/3 o seguinte: PP $$ %& () +O *$ P% .( )% 3R P$ 4$ Production Planning ! planejamento de produ"o# $aterials $anagement ! gerenciamento de materiais# %ales and &istri'ution ! vendas e distri'ui"o# (inancial *ccounting ! conta'ilidade financeira# +ontrolling ! controladoria# (i,ed *ssets $anagement ! gerenciamento de ativos fi,os# Project %-stem ! sistema de projeto# .or/flo0 ! flu,o de tra'al1o# )ndustr- %olutions ! solu"2es de industria# 3uman Resources ! recursos 1umanos# Plant $aintenance ! manuten"o das instala"2es# 4ualit- $anagement ! gerenciamento da 5ualidade#

6stes aplicativos so c1amados 7reas funcionais, 7reas de aplicativo ou, 7s ve8es, m9dulos funcionais do R/3. :odos estes termos so sin;nimos. :radicionalmente, as estruturas empresariais desenvolvem um conjunto de aplicativos de processamento de dados avaliando produtos individuais e comprando esses produtos separadamente de diversos fa'ricantes de soft0are. )nterfaces entre eles so ento necess7rias. Por e,emplo, o sistema de gerenciamento de materiais precisar7 ser vinculado com as vendas e a distri'ui"o e com os sistemas financeiros, e o sistema de flu,o de tra'al1o precisar7 de uma alimenta"o a partir do sistema do 3R. <ma 5uantidade significativa de tempo e din1eiro de )% gasta na implementa"o e manuten"o dessas interfaces. O R/3 vem predefinindo com os aplicativos empresariais '7sicos necess7rios = maioria das grandes corpora"2es. 6sses aplicativos coe,istem em um am'iente 1omog>neo. 6les so projetados para funcionar utili8ando desde um ?nico 'anco de dados e um conjunto muito grande# de ta'elas. Os taman1os de 'anco de dados de produ"o atuais variam de @A giga'-tes a apro,imadamente 3 tera'-tes. +erca de B.CCC ta'elas de 'anco de dados so distri'uDdas com o produto R/3 padro.

ABAP
REPORT

1.00 - 3

Por que voc precisa saber isso?


importante para voc>, como um programador de *E*P, sa'er por 5ue esses aplicativos so todos escritos inteiramente em *E*P. 6sses so os aplicativos 5ue voc> deve entender para ser um 'om desenvolvedor de R/3. Por e,emplo, supon1a 5ue voc> con1ece *E*P e ten1a rece'ido a incum'>ncia de escrever um relat9rio financeiro 5ue resume d'itos e crditos de cada ano fiscal para cada fa'ricante na empresa. :alve8 voc> sai'a escrever c9digo em *E*P, mas voc> sa'eria como come"ar a resolver essa tarefaF Ou talve8 seu tra'al1o e,ija um novo desenvolvimento em *E*P/G. Hoc> incum'ido de projetar um sistema 5ue ofere"a informa"2es de esto5ue para potenciais compradores. %e voc> no con1ece os sistemas de vendas e financeiro e de distri'ui"o, voc> no sa'er7 se est7 criando algo 5ue j7 e,iste em R/3. :ampouco voc> poder7 sa'er se 17 ta'elas do R/3 5ue j7 cont>m dados semel1antes ou id>nticos aos tipos de dados 5ue voc> 5uer recuperar. 6sses aplicativos so altamente integrados. <m desenvolvedor 5ue assume a a'ordagem Ieu construirei min1as pr9prias ta'elas e manterei min1as pr9prias c9pias dos dadosJ, pode logo desco'rir 5ue seus dados so redundantes e devem ser rotineiramente sincroni8ados com o resto do 'anco de dados. 6le construiu um aplicativo 5ue no tira proveito da nature8a altamente integrada do am'iente R/3. importante 5ue o *E*P seja desenvolvido com a certe8a de 5ue dentro do R/3 no possua nada 5ue j7 no atenda as necessidades da 7rea funcional.

ABAP
REPORT

1.00 - 4

o!on
*travs do logon o sistema identificar7 se o usu7rio esta autori8ado a entrar no %*P no client 5ue est7 acessando, e atravs do seu <ser)d 5ue identificado a 5ue m9dulos e transa"2es voc> ter7 acesso.

+lient onde se desenvolver7 a atividade

Earra de :Dtulo Earra de (erramentas %tandard

+ampo command Earra de ferramentas application

$enu do )nterface

Krea %creen

Earra de %tatus

ABAP
REPORT

1.00 - 5

"ores
Para 5ue voc> possa alterar as cores de seu am'iente tornando mais agrad7vel, utili8e o recurso a'ai,o demonstrado.

+li5ue nas 'olin1as coloridas e depois em IOptions...J.

ABAP
REPORT

1.00 - 6

#cones no $AP
*'ai,o alguns e,emplos, com descri"o, dos Dcones 5ue voc> ter7 contato no %*P.

ABAP
REPORT

1.00 - 7

%icion&rio
O &icion7rio um utilit7rio 5ue define o'jetos de dados, nele voc> pode criar e arma8enar o'jetos como ta'elas, estruturas e visuali8a"2es. +amin1o: +li5ue no menu a op"o IFerramentasJ L IABAP WorkbenchJ L IDicitionaryJ.

DICA: %e voc> digitar ISE11J no campo command a tela de entrada do *E*P &ictionarir7 surgir.

ABAP
REPORT

1.00 - 8

Tabelas
&entro do R/3, uma table uma cole"o de lin1as onde em cada lin1a contm campos ou tam'm c1amados de colunas. 6m uma table so arma8enados dados persistentes, se voc> colocar dados em uma table, eles continuaram ai mesmo depois de voc> finali8ar seu programa e ali ficaro at seu ou outro programa altera!los ou e,clui!los. O nome de uma table ?nico dentro de todo o sistema. <tili8aremos a sflight para e,emplificar uma table.

ABAP
REPORT

1.00 - 9

%a'a ele(en'
<ma table composta de campos, mas para criar um campo voc> precisa de um data element 5ue contm os r9tulos de campo e a documenta"o online F1# para o campo. <m data element pode ser utili8ado em mais de um campo e em mais de uma table. Para 5ue voc> veja os data element, cli5ue duas ve8es com o mouse so're o campo I Elem. dadosJ. <tili8aremos o campo Mandt para e,emplificar.

ABAP
REPORT

1.00 - 10

%o()nios
O domDnio contm a caracterDstica tcnica de uma campo, como o comprimento do campo e o tipo de dado. Os domDnios tam'm so reutili87veis podendo ser usados em mais de um data element. Para 5ue voc> veja os domnio, aproveitaremos o e,emplo da p7gina anterior, cli5ue duas ve8es com o mouse so're o campo INome do domnioJ. <tili8aremos o campo Mandt para e,emplificar.

ABAP
REPORT

1.00 - 11

$'ruc'ure
<ma structure uma descri"o de uma srie de campos agrupados so' um nome em comum. 6la descreve os nomes de campo, sua se5u>ncia e seus tipos e comprimentos de dados. *ssim como a table, uma structure no ter7 outra com seu nome e nem com o de uma table.

<ma estrutura pode agrupar dados de v7rias ta'elas, ela difere de uma ta'ela transparente pois s9 matm os dados em tempo de e,ecu"o do programa.

ABAP
REPORT

1.00 - 12

Tabelas *n'ernas
:a'elas internas so utili8adas para arma8enar em tempo de e,ecu"o os dados necess7rios para a processamento do seu programa. 6stes dados podem ser selecionados de diversas ta'elas transparentes. O n?mero de lin1as de uma ta'ela no fi,o, a medida 5ue a sele"o feita voc> pode acrescentar os dados na sua ta'ela. O acesso a ta'ela interna feito lin1a a lin1a utili8ando uma 0or/ area como interface para transferir dados para ou de uma ta'ela, esta 0or/ area utili8ada para arma8enar temporariamente uma entrada da ta'ela de dados. 4uando lemos uma ta'ela interna o conte?do de endere"amento enviado para uma 0or/ area. 6sta 0or/ area tem a mesma estrutura da sua ta'ela interna.

ABAP
REPORT

1.00 - 13

*travs deste conceito temos dois tipos de ta'elas internas. .):3 36*&6R M)N6 O O sistema automaticamente cria uma 0or/ area id>ntica a lin1a da sua ta'ela interna. .):3O<: 36*&6R M)N6 O O sistema no recon1ece a 0or/ area, 5ue deve ser definida no programa.

ABAP
REPORT

1.00 - 14

"riar Pro!ra(as
Caminho: +li5ue no menu a op"o IFerramentasJ L IABAP WorkbenchJ +li5ue no 'oto IEditor ABAPJ. +1egando na tela do IABAP/4 EditorJ, deve!se entrar com o nome do programa 5ue ser7 criado. +li5ue em criar.

DICA: %e voc> digitar ISE38J no campo command a tela de entrada do editor de *E*P ir7 surgir.

Obs.: Todo o programa que for criado deve comear por Y ou Z

ABAP
REPORT

1.00 - 15

Nesta tela voc> ir7 digitar os dados assinalados e clicar em salvar. *'rir7 uma tela menor I!odi"icar entrada cat#lo$o ob%etosJ onde voc> dever7 preenc1er o campo I&lasse dese'ol'im.J com a sua classe.

DICA: %e clicar no 'oto I(e)to "onteJ o editor de *E*P ir7 a'rir j7 no programa como apresentado na pr9,ima p7gina.

&escri"o %imples :ipo de programa Krea de aplica"o do programa

Obs.: *p9s clicar em salvar na tela I!odi"icar entrada cat#lo$o ob%etosJ uma outra tela surgir7 solicitando o n?mero da re5uest, caso voc> j7 ten1a criado uma re5uest anteriormente, salve o seu programa nela, caso contr7rio crie uma nova. Im .: <ma re5uest permite o transporte do seu programa de uma m75uina de desenvolvimento para uma outra de produ"o fisicamente diferente, pois na mesma m75uina os programas so vDstos em todos os clients pois so independentes. +aso no 1aja necessidade de transporte pode!se criar como MO+*M OEP6+:.

ABAP
REPORT

1.00 - 16

Retorne para a tela inicial e tecle I!odi"icarJ. O editor *E*P ser7 a'erto. * primeira lin1a indicar7 o nome do programa e atravs desta lin1a 5ue o sistema identificar7 e e,ecutar7 o programa ou por e,ecu"o direta ou por um atal1o E).: <ma transa"o#.

ABAP
REPORT

1.00 - 17

Tipos de Edi'or
Caminho: No menu cli5ue em I*+,-esJ +li5ue em I!odo de edi,.o...J *'rir7 a tela a'ai,o para 5ue voc> selecione 5ual editor ir7 tra'al1ar.

Ca!a"#$!%s#i"as: &o'o (C "om n)m$!a*+o '$ ,inhas -(C mo'$ .i#h ,in$ n)mb$!s/ Proporciona um estilo de Iprocessador de te,toJ com comandos de c9pia, recortar e colar mas com a numera"o de lin1as incluDdas. 6ste o modo default do %*P. &o'o (C "om n)m$!a*+o '$ ,inhas -(C mo'$ .i#ho)# ,in$ n)mb$!s/ Proporciona um estilo de Iprocessador de te,toJ com comandos de c9pia, recortar e colar. &o'o Coman'o -Comman' mo'$/ Proporciona a mesma funcionalidade associada a verso R/A do %*P.

ABAP
REPORT

1.00 - 18

Brea+poin'

<tili8e o 'rea/point 5uando for necess7rio analisar o programa lin1a a lin1a e verificar o acontecimento dos erros. * fun"o Continue no de'ugger e,ecuta comandos at o pr9,imo ponto de 'rea/point. Pode!se colocar um ponto de 'rea/point na posi"o atual do cursor selecionando a fun"o Set Breakpoint ou atravs de duplo cli5ue. Min1as onde um ponto de 'rea/ point for fi,o esto marcadas com um sDm'olo de %:OP. 6,i'a tudo so're os 'rea/point atualmente fi,ados, selecionando Goto Breakpoint. Pode!se apagar pontos de 'rea/point atravs de duplo cli5ue, ap9s posicionar o cursor em um deles ou usando o menu de ponto de 'rea/point. <tili8e a declara"o ER6*Q!PO)N: no 6ditor *E*P. Posicione o cursor e ento pode escol1er Utilities Breakpoint Set. (i,e pontos de 'rea/point dependente em %R!%<ER+ SL C atravs de Erea/point Erea/point at... +omandos orientados de 'rea/point: Hoc> pode fi,ar pontos de 'rea/point atravs do *E*P para palavras!c1ave, eventos e se5T>ncia de dados escol1endo Erea/point Erea/point at...

ABAP
REPORT

1.00 - 19

$elecionar Tabelas
&eve!se declarar as ta'elas, como demonstrado na lin1a 3, 5ue sero utili8adas no programa. Para leitura da 'ase de dados :a'elas# voc> usa o comando select. O select no perform7tico sem autori8a"2es de c1ec/s. Meitura de todos os dados de uma simples entrada. Meitura de dados especificando colunas. Na lin1a U, voc> v> 5ue foi utili8ado o comando select para recuperar os registros dos 'ancos de dados, onde * indica 5ue todos os campos na ta'ela devem ser recuperados. *p9s a figura a'ai,o sero apresentadas outras op"2es de select.

ABAP
REPORT

1.00 - 20

/int.: select single * from... - s$,$"iona )m 0ni"o !$1is#!o/ 6ste comando de select usado para um acesso simples na entrada de dados. Hoc> tem 5ue especificar a c1ave completa da ta'ela, para o'ten"o de um ?nico registro, para usar a c1ave use dentro do comando a condi"o where... +aso voc> no ten1a especificado a c1ave completa, uma mensagem de .arning aparecera no avisos do editor com erro de sinta,e c1ec/ sua performance#, neste caso trar7 o primeiro registro encontrado na ta'ela. Para c1ec/ use a vari7vel do sistema sy-subrc retorna C se a leitura foi feita com sucesso, retorna G se entrada no e,iste# 6ste comando no tem endselect. ______________________________ select * from... endselect. fa8 um processo de loop sem restri"2es # 6ste tipo de comando fa8 uma leitura sem restri"2es , seria um tipo de leitura se5T>ncia de uma ta'ela, esse tipo de processo no perform7tico 6ste comando tem 5ue ser finali8ado com endselect. Para c1ec/ use a vari7vel do sistema sy-subrc retorna C se a leitura foi feita com sucesso, retorna G se entrada no e,iste# ______________________________ select * from... where... endselect. fa8 um processo de loop com restri"2es # 6ste tipo de comando fa8 a leitura com restri"2es 5ue esto nas condi"2es do where, segue tam'm um processo de Moop tem uma performance muito maior 5ue o anterior. 6ste comando tem 5ue ser finali8ado com endselect. Para c1ec/ use a vari7vel do sistema sy-subrc retorna C se a leitura foi feita com sucesso, retorna G se entrada no e,iste# Operadores de compara"o para comando where. eq ge le ne gt lt V LV SV SL L S VL VS LS

______________________________

ABAP
REPORT

1.00 - 21
<f2>...! from....

select <a1> <a2> ... into (<f1> where... endselect. leitura de colunas simples#

6ste comando seleciona somente os campos definidos <a1> <a2>...com a condi"o imposta no where. Na adi"o do into ap9s o select voc> especifica a sua 7rea de tra'al1o no caso <f1> <f2>... com cada campo preenc1ido no processo de loop. Os argumentos <a1> <a2>... tem 5ue conter o mesmo numero de elementos para <f1> <f2>.... ______________________________ select ma" (distance! min (distance! count(*! from <table> into (... ... ...! where... leitura de colunas agregando fun"2es# 6ste comando determina o numero total dos registros de uma ta'ela, retorna o valor m7,imo ,o valor mDnimo, a 5uantidade total, voc> pode usar tam'm as fun"2es a#g mdia# e sum soma# :odas estas fun"2es s9 podem ser usadas para campos numricos. 6ste comando no tem endselect. Hoc> pode tam'm a op"o adicional distintc, esta fun"o agrega somente um registro o primeiro 5ue encontrar, s9 poder7 ser usado 5uando tiver diferentes valores nas colunas. ______________________________ select into corres$onding fields of <wa>. carrega os dados correspondente a 0or/ area definida# 6ste comando carrega os dados numa area de tra'al1o 5ue tem 5ue ser definida, os nomes dos campos tem 5ue ser iguais para 5ue sejam transportado os dados. 6ste comando no recomendado devido a sua 'ai,a performance pois demanda tempo na compara"o dos campos. 6ste comando no tem endselect. ______________________________ select into corres$onding fields correspondente a uma ta'ela interna definida# of table <itab> . carrega os dados

6ste comando carrega os dados numa ta'ela interna 5ue tem 5ue ser definida, os nomes dos campos tem 5ue ser iguais para 5ue sejam transportado os dados. 6ste comando so'rescreve os registros. 6ste comando no recomendado devido a sua 'ai,a performance pois demanda tempo na compara"o dos campos. 6ste comando no tem endselect.

ABAP
REPORT

1.00 - 22

______________________________ select into a$$endig corres$onding fields of dados correspondente a uma ta'ela interna definida#

table <itab>. carrega os

6ste comando acrescenta os dados numa ta'ela interna 5ue tem 5ue ser definida, os nomes dos campos tem 5ue ser iguais para 5ue sejam transportado os dados. 6ste comando no so'rescreve os registro e sim acrescenta novos registro 6ste comando no tem endselect. ______________________________ select * from <table> where <table field> between <field1> and <field2>. leitura de dados com limite de e,tenso# 6ste comando tem o mesmo processo de um select s9 5ue voc> define um processo de range onde <field1> e <field2> so os limites dos campos <table field>. 6ste comando no tem endselect. ______________________________ select * from <table> where <table field> li%e...&...& leitura de dados com pes5uisa# 6ste comando permite 5ue voc> fa"a uma pes5uisa de campos definida no M)Q6 usando caracteres especiais. +aracteres especiais coringas# IWJ, IXJ., voc> s9 pode usar esta procura para campos caracteres. /int.: ... select * from mara where matnr li%e '(ca). ... ______________________________ select * from <table> where <table field> in (... ...! leitura de dados com lista# 6ste comando usado na clausula where para compara"o de lista de valores ou valores ?nicos, os campos no so um intervalo e sim valores fi,os ______________________________

ABAP
REPORT

1.00 - 23

select * from <table> where <table field> in <itab> leitura de dados com operador de uma ta'ela # 6ste comando usado na clausula where para compara"o de lista dentro de uma ta'ela interna 5ue conten1a valores fi,os * ta'ela interna deve sempre incluir os campos sign, o$tion, low, high. ______________________________

select * from <table> where <table field> in <wor% area>

leitura de dados com operador de uma 0or/ area#

6ste comando usado na clausula where para compara"o de um ?nico parYmetro dentro de uma 0or/ area. O conte?do de um campo definido. ______________________________ select * from ( <table> ! where ( <itab> ! leitura de dados dinYmica# 6ste comando permite 5ue voc> crie uma ta'ela interna com dados montados contendo uma lin1a com ZA caracteres seriam dados constantes nessa lin1a podendo conter par>nteses aspas campos em 'rancos enfim 5ual5uer tipo de caracter. 6le retorna na condi"o where os dados contidos na ta'ela interna O nome das ta'elas devem estar entre par>nteses com 'ranco separando os nomes. 6ste tipo de comando no retorna erro de sinta,e. ______________________________ select * from (<table>! into table <itab> 6ste processo e 'astante r7pido para leitura de dados de ta'ela interna, s9 5ue no so'rescreve nen1um registro, fa8 o processo de loop e 'usca cada registro na ta'ela interna um a um. 6ste comando no tem endselect. ______________________________ select * from (<table>! a$$ending table <itab> 6ste processo e 'astante r7pido para leitura de dados de ta'ela interna, s9 5ue acrescenta os registros , fa8 o processo de loop e 'usca cada registro na ta'ela interna um a um. 6ste comando no tem endselect.

ABAP
REPORT

1.00 - 24

______________________________ select * from (<table>! for all entries in <itab> where... 6ste processo seleciona todos os registros para a ta'ela interna. %e a ta'ela interna no contem dados no use a condi"o where. Os campos da ta'ela transparente e da ta'ela interna tem 5ue ser iguais. 6sta condi"o for all entries e,clui a adi"o do comando order by.... ______________________________

select * from (<table>! order by <field1> <field2> $rimary %ey leitura de dados com sele"o de ordena"o# 6ste comando permite 5ue voc> selecione os dados na ordem da c1ave primaria da ta'ela em ordem ascendente ou os campos definidos <field1>, <field2>#, tam'm em ordem ascendente Hoc> tam'm pode acrescentar a ordem ascending ou descending, o default e a ordem ascendente Hoc> pode tam'm fa8er a ordem de uma ta'ela interna, neste caso deve conter a lista de campos <f1>, <f2>.... *s entradas da ta'ela interna tem ser do tipo caracter e no m7,imo com ZA caracteres. ______________________________

select <a1> <a2> ... into (<f1> from.<table> grou$ by...

<f2>...!

6ste comando permite um grupo de entrada do conte?do de um campo. 6le determina o m7,imo e o mDnimo <a1> <a2> de um determinado campo. ______________________________ select * from (<table>! by$assing buffer 6ste comando permite acesso por um determinado perDodo no usando a area de mem9ria. Hoc> tem 5ue ter a certe8a da leitura dos dados. [eralmente esse comando usado para ta'elas em tela em tempo de e,ecu"o.

DICA: <tili8e o 'oto modelo na e,ecu"o do programa para gerar um select demonstrando 5ue no 1aver7 erro na ordem da sele"o dos campos c1aves.

ABAP
REPORT

1.00 - 25

ABAP
REPORT

1.00 - 26

,e'
%e em uma 'ase de dados l9gica for necess7rio a sele"o de campos para uma ta'ela, voc> pode utili8ar a declara"o [6: para especificar somente os campos necess7rios para e,ecutar o processo. E).: re$ort *e"em$lo. tables+ s$fli sflight sboo%. get s$fli fields carrid connid cityfrom cityto de$time arrtime. write+ s$fli-carrid s$fli-connid s$fli-cityfrom s$fli-cityto s$fli-de$time s$fli-arrtime. get sflight fields fldate $rice currency. write+,1- sflight-fldate sflight-$rice sflight-currency. get sboo% fields boo%id customid custty$e. write+,2- sboo%-boo%id sboo%-customid sboo%-custty$e. No recomendado a utili8a"o deste comando por comprometer a performance.

ABAP
REPORT

1.00 - 27

Acessando a base de dados


./.0 0rogram

./.0 4$en 156

7879 156

:M042;

... 1.0 2,3 1ystem

<tili8e a declara"o 6\6+ %4M 5uando for necess7rio uma interven"o direta por parte do usu7rio na 'ase do 'anco de dados. *ssim 5ue a declara"o 6\6+ %4M for processada em seu programa *E*P, ela torna o programa *E*P inoperante at 5ue a declara"o 6N&6\6+ seja processada. /int.: ... e"ec sql. <sql statement> ende"ec. ...

ABAP
REPORT

1.00 - 28

E-ibir %ados . write


4uando se fa8 necess7rio a e,i'i"o na tela do resultado de um re$ort voc> utili8a o comando write e todo o conte?do 5ue estiver ap9s a instru"o at ser finali8ado por I .J gerar7 um relat9rio de saDda. +omo no e,emplo a'ai,o, o write ir7 fornecer uma listagem de dados 5ue foram selecionados dentro da ta'ela sflight produ8indo um resultado como demonstrado a'ai,o. E).: report zexemplo. tables: sbook. select * from sbook where carrid = 'lh' and connid = '0400'. write: / sbook-carrid, 0 sbook-connid, !0 sbook-fldate, "# sbook-bookid, #0 sbook-l$%%wei%ht, &0 sbook-w$nit. endselect. if s'-s$brc ne 0. write: / 'n(o existem entradas para esta sele)(o.'. endif. skip #. $line. skip.

ABAP
REPORT

1.00 - 29

Even'os . selection

iniciali*ation/

start-of-

<m evento como uma su'!rotina em outras linguagens, trata!se de uma se"o independente do c9digo 5ue e,ecuta uma tarefa e ento retorna para o ponto de c1amada, contudo, ao contr7rio das su'! rotinas, voc> no codifica a c1amada para um evento, ao contr7rio, o sistema aciona o evento para voc> 5uando uma condi"o especifica surge. <m evento um tag contador# 5ue identifica uma se"o de c9digo, 5ue associada com um evento come"a com um nome de evento e termina 5uando o pr9,imo nome encontrado. Os nomes dos eventos so palavras reservadas, no se podendo criar novos eventos. Os nomes dos eventos so:

iniciali*ation
4uando voc> e,ecuta um programa onde um critrio de sele"o definido, o sistema normalmente processa a tela primeiro. %e voc> 5uer 5ue um 'loco de comandos seja e,ecutado antes da tela de sele"o utili8e este comando.

/int.: *ntes do comando: report sapmztst. parameters firstda' like s'-dat$m defa$lt s'-dat$m. tables spfli.

ABAP
REPORT

1.00 - 30

*p9s o comando report sapmztst. parameters firstda' like s'-dat$m defa$lt s'-dat$m. tables spfli. initialization. cit'*fr = 'new 'ork'. cit'*to = 'frankf$rt'. carrid-si%n = 'i'. carrid-option = 'e+'. carrid-low = 'aa'. append carrid. firstda',&-!. = '0 '.

/int.: report zexemplo. tables sbook. select-options fl*date for sbook-fldate. initialization. mo/e: '0' to fl*date-si%n, '12' to fl*date-option, s'-dat$m to fl*date-low. append fl*date. mo/e: '34' to fl*date-option, ' 55&0 0 ' to fl*date-low, ' 55&0&"0' to fl*date-hi%h. append fl*date.

ABAP
REPORT

1.00 - 31

start-of-selection
%e a primeira instru"o e,ecut7vel em seu programa no for procedida por um nome de evento, o sistema automaticamente insere start-of-selection antes da primeira lin1a de c9digo e,ecut7vel. Permite o processamento antes da e,ecu"o de leitura das ta'elas transparentes atravs do comando sempre acompan1ado pelo comando end-of-selection.

ABAP
REPORT

1.00 - 32

E).:

0es1ltado:

ABAP
REPORT

1.00 - 33

Posiciona(en'o de dados no rela'0rio . uline/ s%i$


6specifica"2es para o comando write.

uline
6screve um tra"o no relat9rio de saDda ou tela de sele"o

s%i$
[era lin1as em 'ranco, para mais de uma lin1a em 'ranco E).2 s%i$ n#, tam'm podendo deslocar! se para outro ponto de saDda do relat9rio E).2 s%i$ n to line n#. /int.: ... 67041: '4ext ......'. 890:. 67041: '4ext ! ......'. ... 0es1ltado: ;e"t 1 ...... ;e"t 2 ...... / pula uma lin1a, $ posi"o da coluna#, l deslocamento a es5uerda#.

,$(l!

/int.: ... write+ ,< (3-! field ...

ABAP
REPORT

1.00 - 34

"o(andos de sa)da do pro!ra(a sto$


6ste comando interrompe o processo de leitura e vai para o final do evento end of selection, caso no ten1a usado o evento ele interrompe o programa, tam'm podendo ser utili8ado para interromper a e,ecu"o de um loo$ indo direto para o endloo$.

e"it
:ermina o loo$ imediatamente ap9s a sua utili8a"o, e o processo somente continua no instru"o imediatamente ap9s o endloo$. Normalmente utili8ado 5uando se 5uer testar condi"2es dentro do loop. E).: re$ort e"em$lo. tables t1--. data sa$=count ty$e i. select * from t1-- where s$rsl > sy-langu and arbgb > ?ds?. write , t1---te"t. if t1---te"t cs ?sa$?. add 1 to sa$=count. if sa$=count > 3. e"it. endif. endif. endselect.

ABAP
REPORT

1.00 - 35

1ovas p&!inas . new $age


Hoc> vai utili87!lo para causar a saDda do comando 0rite para gerar uma nova p7gina. * pagina"o do sistema autom7tica, especificado no ca'e"al1o do relat9rio. /int.: ... new-$age @no title A with-titleB @no heading A with-headingB @line-count o n (m!B @line-si*e kB @$rint on A $rint offB ... n, m e k so vari7veis numricas ou literais. no title desativa o tDtulo padro nas p7ginas seguintes e with-title ativa. no heading desativa o tDtulo ca'e"al1o!padro de coluna nas p7ginas seguintes e withheading ativa. line-count configura o n?mero de lin1as por p7gina e o n?mero de lin1as reservado na parte inferior de cada p7gina para um rodap. line-si*e configura o n?mero de colunas de saDda para as p7ginas seguintes. $rint on fa8 com 5ue a saDda das instru"2es write sejam enviadas para o spool em ve8 da lista, s9 permitindo a visuali8a"o do relat9rio atravs do spool e o $rint off fa8 o contr7rio. O comando new-$age no aciona o evento end-of-$age. 6le pode ser utili8ado em 5ual5uer ponto do programa.

ABAP
REPORT

1.00 - 36

2O3E
Para mover uma valor de um campo para outro, utili8e o comando move. Parte do conte?do ou todo ele pode ser movido. *o invs de move possDvel utili8ar o operador se atri'ui"o V. /int.: ... data+ number ty$e i fi#e ty$e i. mo#e < to fi#e. mo#e fi#e to number. ...

ABAP
REPORT

1.00 - 37

%o
O comando do correspondente a um mecanismo de loop '7sico. /int.: ... do. write+ , ?sy-inde" - begin+? if sy-inde" > 1-. e"it. endif. write+ ?end+? (3! sy-inde". enddo. ...

(3! sy-inde".

ABAP
REPORT

1.00 - 38

Tabelas de operacional
E).: sy-subrc sy-datum sy-uname sy-langu ...

!erencia(en'o

do

sis'e(a

*lgumas vari7veis foram criadas para validar a e,ecu"o e entrada de dados no sistema, estas vari7veis encontram!se na estrutura %R%:. Halor de retorno de acordo com determinadas instru"2es *E*P/G %istema: &ata do dia do logon %esso: <su7rio %*P no %*P logon +9digo de idioma do logon no sistema %*P

ABAP
REPORT

1.00 - 39

"ase
O comando case e,ecuta uma srie de compara"2es onde somente as instru"2es ap9s a primeira correspond>ncia when sero e,ecutadas. %endo muito semel1ante a if/elseif, sendo sua ?nica diferen"a 5ue em cada if/elseif voc> pode especificar uma e,presso comple,a e em case s9 pode especificar um ?nico valor a ser comparado e os valores so sempre comparados 5uanto a igualdade. *s strings de campo so tratadas como sendo vari7veis de tipo + /int.: ... data: one t'pe i /al$e , three t'pe p /al$e ". fo$r t'pe p /al$e 4. do 4 times. case s'-index. when one. write / 'that is'. when !. write 'a'. when three. write '%ood'. write 'example'. when others. write ';'. endcase. enddo. ...

ABAP
REPORT

1.00 - 40

"onca'ena'e
<ne duas ou mais lin1as ou campos, voc> ter7 de informar onde os dados sero posicionados. /int.: ... data+ one(1-! two(3! three(1-! name(2-!. concatenate one ... 0es1ltado: Cohn D. Eennedy

#alue ?Cohn? #alue ?D.? #alue ?Eennedy? two three into name se$arated by s$ace.

ABAP
REPORT

1.00 - 41

"ondense
<tili8e o comando condense para unir campos 1avendo a necessidade de desloc7!los da posi"o em 5ue se encontram. E).: report zexemplo. data name-"0.. name- 0. = '<r.'. name, 0- 0. = '=ichael'. name,!0- 0. = '>ofmann'. condense name. write name. 0es1ltado: Fr. Michael Gofmann

ABAP
REPORT

1.00 - 42

4or(a' color / 5ri'e color

Para diferenciar ou destacar uma ou mais lin1as voc> utili8a os comandos format color e write color. /int.: ... loop at i*tab. if /*fla% is initial. format color ! intensified on. /*fla% = '?'. else. format color ! intensified off. clear /*fla%. endif. write: /00 i*tab-tabname- #., 0 @ i*tab-fieldname- #., 0"4 i*tab-rollname- #., 0# i*tab-domname- #., 0&A i*tab-datat'pe, 0@4 i*tab-len% no-zero, 0A! i*tab-decimals no-zero, 050 i*tab-tabclass. endloop.

ABAP
REPORT

1.00 - 43

...

ABAP
REPORT

1.00 - 44

$)(bolos e )cones
Hoc> tem a op"o de criar sDm'olos e Dcones para os seus programas. <m s'mbol uma figura 'icolor simples de um sDm'olo comum como um circulo, 5uadrado, uma pasta ou documento ocupando em sua maioria apenas um caracter na lista de saDda, tendo alguns ocupando dois caracteres] j7 um icon semel1ante a um sDm'olo e,ceto por ser multicolorido, c1egando a ocupar at mais 5ue dois caracteres. /int.: ... :H96IF7 <1JM/46>. K2:;7+ , 1JM=2:LG;=G.HF .1 1JM/46 ?;i$ Hote? 1JM=67D;=G.HF .1 1JM/46. ... ... :H96IF7 <:94H>. K2:;7+ , :94H=4E.J .1 :94H ?;e"t line?. ...

M out$ut as symbol M out$ut as symbol

Mout$ut as icon

ABAP
REPORT

1.00 - 45

T)'ulos dos rela'0rios . te"t elements


Caminho: +li5ue no menu a op"o IFerramentasJ L IABAP WorkbenchJ +li5ue no 'oto IEditor ABAPJ. +1egando na tela do IABAP/4 EditorJ, selecione a op"o I(e)t3elementsJ e cli5ue em criar ou modificar Hoc> pode definir os elementos de te,tos num relat9rio. Hoc> edita um titulo] define um ca'e"al1o] define colunas. %int.: ... write #a ...

te"t---1.

te"t---1 o elemento de te,to 5ue voc> tra'al1ar7.

ABAP
REPORT

1.00 - 46

Reservando lin6as . reser#e


Hoc>, as ve8es, pode necessitar escrever de maneira agrupada informa"2es relacionadas 5ue se distri'uem por v7rias lin1as, para isso voc> pode utili8ar o comando reser#e, 5ue reservar7 lin1as em um relat9rio para 5ue no 1aja 5ue'ra indevida de informa"o. 4uando o comando reser#e e,ecutado, o sistema verifica se 17 n lin1as disponDveis na p7gina atual, se 1ouver menos 5ue n lin1as so'rando na p7gina atual, uma 5ue'ra de p7gina ocorrer7 acionando o end-of-$age se e,istir#, seguido pelo comando to$-of-$age se e,istir# fa8endo a instru"o 0rite come"ar na parte superior da nova p7gina. %e pelo menos n lin1as no estiverem disponDveis 5uando a instru"o reser#e for e,ecutada, o c9digo no far7 nada.
^

n um literal numrico e vari7vel.

/int.: ... select * from <table>. reser#e 3 lines. write+ , <table-c1> <table-c2> , <table-c3> <table-cN> , <table-cO>. s%i$. endselect. to$-of-$age. write , '2elatPrio). uline. ... <table> uma ta'ela. <table-cn> so os campos da ta'ela.

<table-c<>

0es1ltado: Relat9rio !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! @@@@@ %o Paulo Rua %o Paulo, ____ C@@!___!____ @@@@A Rio [rande do %ul Rua Porto *legre, ____ CG@!___!____

ABAP
REPORT

1.00 - 47

E).:

ABAP
REPORT

1.00 - 48

4or(a'o de p&!inas
Hoc> pode usar parYmetros para controlar o taman1o da p7gina do relat9rio, para isso voc> pode utili8ar os seguintes comandos: line-si*e line-count &efine a largura da p7gina &efine o n?mero de lin1as por p7gina.

/int.: re$ort *teste line-si*e 132 line-count 1<. tables... ...

ABAP
REPORT

1.00 - 49

*ncluindo dados . a$$end


Para adicionar uma ?nica lin1a em uma ta'ela interna, voc> pode utili8ar o comando a$$end ele copia uma ?nica lin1a de 5ual5uer 7rea de tra'al1o e a coloca no corpo ao final da lin1as e,istentes, podendo ser a lin1a de ca'e"al1o ou 5ual5uer outra string de campo com a mesma estrutura de uma lin1a no corpo. /int.: .$$end wa to it. wa o nome de uma 7rea de tra'al1o it o nome de ta'ela interna.

ABAP
REPORT

1.00 - 50

A!rupando dados . collect


*rma8ena os dados somando os campos numricos de uma ta'ela interna, assegurando 5ue no 1aver7 duplicidade de registros. 4uando o collect for e,ecutado, o sistema formar7 uma c1ave a partir dos campos de c1ave padro da 7rea de tra'al1o, o sistema pes5uisar7 o corpo da ta'ela interna 5uanto uma lin1a com uma mesma c1ave da5uela na 7rea de tra'al1o.

ABAP
REPORT

1.00 - 51

"lassificar os dados . sort


Para classificar o conte?do de uma ta'ela interna voc> pode utili8ar o comando sort, as lin1as podem ser classificadas por uma ou mais colunas em ordem ascendente ou descendente, sendo 5ue a pr9pria se5u>ncia de classifica"o pode ser alterada. E).: report zexemplo. data: be%in of person occ$rs #, name- 0. t'pe c, a%e t'pe i, co$ntr'-". t'pe c, end of person. person-name = '=$ller'. person-a%e = !!. person-co$ntr' = 'B8C'. append person. person-name = '=oller'. person-a%e = !#. person-co$ntr' = 'D7E'. append person. person-name = '=Fller'. person-a%e = !!. person-co$ntr' = 'B8C'. append person. person-name = '=iller'. person-a%e = !". person-co$ntr' = 'B8C'. append person. sort person. 0es1ltado: =iller =oller =$ller =Fller !" !# !! !! B8C D7E B8C B8C

ABAP
REPORT

1.00 - 52

er os dados . loo$ at
Para ler algumas ou todas as lin1as de uma ta'ela interna, voc> pode utili8ar a instru"o loo$ at, ela l> o conte?do da ta'ela interna, colocando as lin1as do conte?do, uma por ve8, na 7rea de tra'al1o. O loop termina automaticamente 5uando a ?ltima lin1a lida e a instru"o ap9s endloo$ e,ecutada. /int.: ... loo$ at itab into struc. write+ , struc-name struc-blnce. endloo$. ...

... loo$ at itab into struc where blnce <> -. write+ struc-name struc-blnce. endloo$. ...

ABAP
REPORT

1.00 - 53

"on'role de quebras at first at last


Hoc> pode utili8ar estes comandos para e,ecutar um trec1o entre a primeira e a ?ltima passagem do loop por uma ta'ela interna. O's.: :odos estes comandos devem ser finali8ados com endat. /ist.: ... loo$ at itab. ... at first. ... endat. ... at last. ... endat. ... endloo$. ...

at new

at end of

<tili8e estes comandos para detectar uma altera"o em uma coluna de uma passagem de loop para a seguinte. O's.: :odos estes comandos devem ser finali8ados com endat. /ist.: ... sort by c. loo$ at itab. ... at new c. ... endat. ... at end of c. ... endat. ... endloo$. ...

ABAP
REPORT

1.00 - 54

ABAP
REPORT

1.00 - 55

$eleo $i(ples . $arameters


6ste comando 5uando e,ecutado em um programa gera um campo de entrada de dados numa tela de sele"o antes do programa realmente em si ser e,ecutado, esta tela onde voc> digitar7 a informa"o 5ue ser7 a c1ave para a sele"o dos dados do seu programa. /int.: $arameters $1 @(1!B @ty$e tB @decimals dB... $1 o nome do parYmetro. 1 a especifica"o interna de comprimento. t o tipo de dado d o n?mero de espa"os decimais utili8ado apenas como tipo p#. E).: report 8e,emplo parameters aircom li/e spfli!carrid. 0es1ltado:

ABAP
REPORT

1.00 - 56

$eleo co( u( in'ervalo . select-o$tion


%emel1ante ao comando $arameters, o comando select-o$tions cria critrios de sele"o para um campo do 'anco de dados, a diferen"a 5ue select-o$tions e,i'e dois campos para entrada de dados com um intervalo entre eles, campo to e campo from, podendo ser restringido a um s9 campo com no-inter#als na sinta,e select-o$tions. E).2 report zexemplo. tables sbook. select-options fl*date for sbook-fldate. initialization. mo/e: '0' to fl*date-si%n, '12' to fl*date-option, s'-dat$m to fl*date-low. append fl*date. mo/e: '34' to fl*date-option, ' 55&0 0 ' to fl*date-low, ' 55&0&"0' to fl*date-hi%h. append fl*date. 0es1ltado:

ABAP
REPORT

1.00 - 57

$eleo Pr78%efinida . chec%bo"


Os paramentos podem ser criados como campos de dados 5ue conten1am apenas um valor de entrada e tam'm podem ser criados como cai,as de sele"o. 4uando os $arameters assumem a forma das cai,as de se@e"o, eles so declarados como tipo + e dessa forma arma8enam o valor de 4 5uando verificados e da tecla 6spa"o 5uando no verificados. <ma 'oa utili8a"o do parYmetro chec%bo" solicitar ao usu7rio para indicar se ele 5uer 5ue certos componentes de um relat`rio sejam e,i'idos.

$e*eo e( u( !rupo . radiobutton


*ssim como o c1ec/'o,, o radio'utton est7 selecionado ou no, mas somente operam em um ou mais grupos, sendo 5ue apenas um ?nico do grupo pode estar selecionado no momento da e,ecu"o do programa.
/int.2

... selection-screen begin of bloc% rad=bl% with frame title te"t-444. $arameters+ rad=e"l radiobutton grou$ one rad=e"2 radiobutton grou$ one rad=e"l radiobutton grou$ one selection-screen end of bloc% rad-bl%. ...

ABAP
REPORT

1.00 - 58

No e,emplo a'ai,o estaremos demonstrando $arameters, chec%bo" e radiobutton. E).: report zexemplo. parameters: p - #. t'pe c, p! like p obli%ator' lower case, p" like s'-dat$m defa$lt s'-dat$m, cb as checkbox, cb! as checkbox, rb radiob$tton %ro$p % defa$lt G?H, rb! radiob$tton %ro$p % , rb" radiob$tton %ro$p % . write:/ 'Io$ entered:', / G p = G, p , / G p! = G, p!, / G p" = G, p", / G cb = G, cb , / G cb!= G, cb!, / G rb = G, rb , / G rb!= G, rb!, / G rbl= G, rb". 0es1ltado:

ABAP
REPORT

1.00 - 59

3arian'es
4uando voc> entra com os mesmos dados constantemente voc> pode salvar estes dados em uma variante. Para 5ue se salve os dados, voc> deve estar na tela onde eles sero preenc1idos e cli5ue no Dcone de salvar, de um nome para sua variante. Preenc1a a tela como do e,emplo a'ai,o.

ABAP
REPORT

1.00 - 60

E-pandir lin6as do rela'0rio . at selection

line-

<m programa de relat9rio consiste de uma simples lista de informa"2es, isto significa 5ue 5uando o relat9rio e,ecutado os dados esto disponi'ili8ados de acordo com o 5ue o l1e foi solicitado. 6stes relat9rios podem se tornar e,tensos, sendo 5ue muitas ve8es seu foco distorcido mediante tantas informa"2es. Para estas situa"2es utili8amos o recurso de listas secund7rias. 6ste tipo de relat9rio no pode ser e,ecutado em 'ac/ground, a atua"o do usu7rio direta. 4uando 1ouver necessidade de informa"2es adicionais, o usu7rio interage durante a e,ecu"o. Relat9rios )nterativos permitem voce utili8ar listas secund7rias, outros relat9rios e transa"2es passando dados entre eles atravs do comando 3)&6.

6ventos de controle de um Relat9rio )nterativo: *t line!selection ! *t P( SnnL ! Ocorre ap9s o usu7rio clicar duas ve8es so're uma lin1a do relat9rio. Ocorre ap9s o usu7rio pressionar uma tecla de fun"o. 6,emplos: 3elp ! (@ / +ancel ! (@3 / 6,it ! (@U *t user!command ! Ocorre ap9s o usu7rio clicar um 'oto definido na tela.

ABAP
REPORT

1.00 - 61

Para o ca'e"al1o da lista secund7ria utili8e o comando ! :op!of!page during line!selection

*'ai,o relacionamos algumas vari7veis do sistema 5ue ajudam nos controles das listas secund7rias.

ABAP
REPORT

1.00 - 62

,ui in'erface / ,ui s'a'us / $e' pf8s'a'us / $e' 'i'lebar / A' user co(aand
gui interface 6sta ferramenta nos permite montar um I!en1 Painter2 onde voc> define fun"2es como no .indo0s, tratada como interface com o usu7rio. :itle Ear :itulo do $enu Painter $enu Ear $enu 5ue sera criado %tandard :oolEar Onde voc> define Dcones *plication :oolEar Eotoes novos. gui status a defini"o do tipo fun"2es de um $enu 5ue sero ativados ou desativados: :ipos de %tatus %crenn &ialog Eo, Mist Mist in &ialog Eo, set $f-status um comando para uso da determina"o da LI: para cada lista criada. Hoc> se refere a um status e tem 5ue definir o I!en1 PainterJ. Para uma lista '7sica voc> pode escol1er o sua LI: com status tipo IM)%:J Na realidade um nome com m7,imo de B caracteres, para acionar a sua LI: set titlebar 6ste comando e para determina"o do tDtulo da sua LI:. at user-comand 6ste comando 5ue vai controlar a a"o do usu7rio ap9s definida a sua LI:.

ABAP
REPORT

1.00 - 63

*s figuras a'ai,o demonstram como criar fun"2es em uma tela: 6ntre na %63B e informe as ta'elas com as 5uais ir7 tra'al1ar, salve e saia.

6ntre na op"o !en1 Painter para 1a'ilitar as fun"2es. Preenc1a as informa"2es conforme modelo a'ai,o.

ABAP
REPORT

1.00 - 64

%iga as recomenda"2es 5ue esto com a^b para definir as fun"2es. O'serve 5ue e,istem o PE) Process after )nput# e o PEO Process 'efore output#.

ABAP
REPORT

1.00 - 65

%iga como a'ai,o.

%iga as recomenda"2es 5ue esto com a^b ou ap9s aJb.

ABAP
REPORT

1.00 - 66

%iga as recomenda"2es 5ue esto com a^b ou ap9s aJb.

6sta funcionalidade permite 5ue voc> crie Dcones e fun"2es. 6,.: Eot@ e EotA.

ABAP
REPORT

1.00 - 67

6st7 op"o deve ser utili8ada para criar o tDtulo.

ABAP
REPORT

1.00 - 68

is'as secundarias co( 9anelas :"o(ando 5indo;<


6ste comando voc> especifica as coordenadas de uma janela. * se5T>ncia inicio da coluna e n?mero da lin1a., finali8a fim da coluna e fim da lin1a. *utomaticamente crida uma janela, ou voc> pode escol1er list in dialog bo" de uma LI:, onde voc> cria titulo, 'ot2es dentro desta janela. 6,.: window starting at c1 l1 ending at c2 l2 Para gerar um tDtulo para 0indo0 use o adi"o no comando with frame title...#.

ABAP
REPORT

1.00 - 69

"o(ponen'es de li!ao
&entro do programa de *E*P voc> pode c1amar outros programas de report ou transa"o atravs dos comandos call e submit.

"6a(ando ou'ro rela'0rio . submit


6ste comando utili8ado 5uando for necess7rio dentro de um programa voc> c1amar e processar outro programa. Hoc> pode impor condi"2es para 5ue o submit ocorra, tam'm pode declarar o nome do programa 5ue vai ser e,ecutado.

Nome da ta'ela selecionada ou campo e5, ne, cp, np, ge, lt, le, gt Nome do campo ou constante :a'ela interna com strutcure R%P*R*$%

Nome do campo ou constante :a'elas internas declaradas usando [*N[6% Nome da variante selecionada

ABAP
REPORT

1.00 - 70

Re'orno ao rela'0rio . submit and return


6ste comando semel1ante ao anterior, sendo sua diferen"a a op"o de retornar ao programa principal ap9s ser processado o programa 5ue foi c1amado por s)bmi#. /int.: ... submit re$ort-1 #ia selection-screen using selection-set ?#ariant1? using selection-sets of $rogram ?re$ort--? and return. ...

ABAP
REPORT

1.00 - 71

Transferncia de dados . e"$ort / im$ort


6stes comandos podem ser usados para importar ou e,portar dados entre dois programas 5ue fa8em parte de uma se5T>ncia de c1amada. No es5uecer 5ue voc> tem 5ue ter um submit no programa 5ue vai e,portar os dados. Hoc> pode utili8ar o parYmetro id 5ue ajudar7 a gerenciar a mem9ria evitando 5ue no futuro ten1a pro'lemas com o grande volume de mem9ria ocupada por esta opera"o. /int.: E3(O45 6'a#a",)s#$!7 #o m$mo!8. I&(O45 6'a#a",)s#$!7 #o m$mo!8. Os parYmetros to e from so opcionais. E).: report exemplo. tables indx. data: indxke' like indx-srtfd /al$e 'ke'/al$e', f -4., f! t'pe p, be%in of itab" occ$rs !, cont-4., end of itab". indx-aedat = s'-dat$m. indx-$sera = s'-$name. * export data. export f f! itab" to database indx-st. id indxke'.

report exemplo. tables indx. data: indxke' like indx-srtfd, f -4., f! t'pe p, be%in of tab" occ$rs 0, cont-4., end of tab". indxke' = 'indxke''. import f f! tab" from database indx-st. id indxke'.

ABAP
REPORT

1.00 - 72

"ons'an's
+omo o nome j7 di8 uma constante, sendo 5ue 5uase id>ntica a uma vari7vel, e,ceto 5uanto ao fato de 5ue seu valor no poder7 ser alterado. * instru"o constants semel1ante = instru"o data] entretanto, a adi"o do comando #alue necess7rio. O comando constants pode ser usado 5uando for incluir um literal v7rias ve8es no mesmo programa definindo um valor igual ao da literal e utili8ar a constante no corpo do programa e 5uando for necess7rio alterar o valor de sua literal 'asta apenas alterar o valor de sua constante. /int.: constants co1@(l!B @ty$e tB @decimals dB #alue ?*a*a?. E).: ... constants char /al$e 'x'. ... constants int t'pe i /al$e 55. ... constants: be%in of const*rec, c-!. t'pe i /al$e 'xx', n-!. t'pe n /al$e ' !', x t'pe x /al$e 'ff', i t'pe i /al$e 55, p t'pe p /al$e 55, f t'pe f /al$e '5.55e5', d t'pe d /al$e ' 55#0 0 ', t t'pe t /al$e '!"#5#5', end of const*rec. ... co1 o nome da constante (l! a especDfica"o interna de comprimento. t o tipo de dado. d o n?mero de casas decimais utili8adas apenas com o tipo $#. 'zaza' um literal 5ue fornece o valor da constante.

ABAP
REPORT

1.00 - 73

T=pes
* instru"o ty$es utili8ada para definir seus pr9prios tipos de dados e orientar!se nos tipos j7 e,istentes. /int.: t-pes tp@ c# t-pe t decimals d. t-pes tp@ li/e g@. E).: report zexemplo. t'pes wa-!. t'pe c. data: /a t'pe wa /al$e 'DK=1', /a! t'pe wa /al$e '81<1'. write /a , /a!. 0es1ltado: D4M7 17F7 :ipos de ;y$es: 5i o 9 H F ; 8 : 0 D D$s"!i*+o :e,to +aracter# :e,to Numrico &ata RRRR$$&&# 3ora 33$$%%# 3e,adecimal .1ole num'er integer# Pac/ed num'er (loating point num'er 5amanho @ @ B ` @ G B B 9a,o! Ini"ia, 1$ace ?--...-? ?--------? ?------? 8?--? ?-.-? t$1 o nome do tipo. g1 o nome de uma vari7vel previamente definida no programa ou o nome de um campo 5ue pertence a uma ta'ela ou estrutura no &ata &ictionar-. d# a especDfica"o interna de comprimento. t o tipo de dado. d o n?mero de casas decimais utili8adas apenas com o tipo p#.

ABAP
REPORT

1.00 - 74

T=pes Es'ru'urados
5uando um tipo definido pelo usu7rio pode ser 'aseado na defini"o de uma string de campo, utili8ado para redu8ir a redundYncia e tornar a manuten"o mais f7cil. e,emplo: report zexemplo. t'pes: be%in of address, street-!&., cit'- #., postal*code-5., end of address. data: c$stomer*addr t'pe address, /endor*addr t'pe address. c$stomer*addr-street = 'zazzaza'. write: / c$stomer*addr-street.

ABAP
REPORT

1.00 - 75

"lear
O comando clear configura o valor de uma vari7vel ou string de campo como 8ero. %e o dado do tipo c, o valor , por sua ve8, ser7 configurado como espa"os em 'ranco. /int.: clear c1 @with c2 + with ?.?+ with nullB c1 e cA so nomes de string de campo ou vari7veis. ?.? um literal de 5ual5uer comprimento.

E).: ... <C4C: 41?4- 0. LCMB1 '>ello', NB=317 4I:1 0 LCMB1 !"4#, 7K6- 0. 4I:1 N LCMB1 ' !"4#&@A50', 31E0N KD :MCI17, NC=1- 0. LCMB1 'Oohn', 41M-A. 4I:1 N LCMB1 '0A #4@ ', =KN1I 4I:1 : LCMB1 "0000, 1N< KD :MCI17. ... PM1C7: 41?4, NB=317, :MCI17. ...

ABAP
REPORT

1.00 - 76

4ree
<tili8e o comando free para e,cluir todas as lin1as de uma ta'ela interna e li'erar a mem9ria associada. :ra'al1a da mesma forma 5ue o comando clear. /int.: free itab. E).: data: be%in of itab occ$rs ", t like s'-index, end of itab. do " times. itab-t = s'-index. append itab. enddo. loop at itab. write itab-t . endloop. free itab. if itabQR is initial. write: / 'n(o existe indica)(o na itab apSs instr$)(o free'. endif. 0es1ltado: 1 2 3 nQo e"iste indicaRQo na itab a$Ps instruRQo free itab uma ta'ela interna com ou sem uma lin1a de ca'e"al1o. todas as lin1as so e,cluDdas e toda a mem9ria utili8ada pelo corpo da ta'ela interna li'erada. a lin1a de ca'e"al1o, se e,istir, permanecer7 inalterada. utili8e free 5uando terminar de utili8ar uma itab.

ABAP
REPORT

1.00 - 77

Refres6
6le e,clui todas as lin1as de uma ta'ela interna, mas dei,a a mem9ria alocada, voc> utili8a 5uando 5uiser preenc1er a ta'ela novamente. %e voc> necessita utili8ar a ta'ela imediatamente ap9s limp7!la, o comando refresh mais eficiente do 5ue free j7 5ue impede aloca"2es desnecess7rias de mem9ria. /int.: refresh itab. itab uma ta'ela interna com ou sem uma lin1a de ca'e"al1o.

:odas as lin1as so e,cluDdas. :oda a mem9ria utili8ada pelo corpo da ta'ela interna permanece alocada. * lin1a de ca'e"al1o, se e,istir, permanecer7 inalterada

E).: data: be%in of itab occ$rs ", t like s'-index, end of itab, / like s'-index. do " times. / = s'-index. do " times. itab-t = / * s'-index. append itab. enddo. write: / ''. loop at itab. write itab-t . endloop. refresh itab. enddo. 0es1ltado: 1 2 3 2 N O 3 O S

ABAP
REPORT

1.00 - 78

E-ecu'ando "&lculos com$ute


)nstru"o utili8ada com mais fre5T>ncia para e,ecutar c7lculos. /int.: com$ute #a3 > #a1 o$ #a2 E).: ... /a" = /a! , /a". /a = - /a! , /a" . * /a4 ... 4uando for necess7rio tra'al1ar com par>nteses utili8e um espa"o, I I , I #J, antes e depois do valor dentro do par>nteses. #a3 a vari7vel de rece'imento do resultado do c7lculo. #a1 e #a2 so os operandos. o$ um operador matem7tico.

add ou add-corres$onding
O comando add utili8ado para adicionar um n?mero a outro, com add-corres$onding as strings de campo com os dados 5ue t>m o mesmo nome podem ser adicionadas juntamente. /int.: ... add #a1 to #a2. add-corres$onding st1 to st2 ...

ABAP
REPORT

1.00 - 79

*ssim como demonstrado em add fun"o de adicionar# a'ai,o demonstraremos su'trair, multiplicar e dividir. *s instru"2es a'ai,o operam de forma semel1ante a add. subtract ou subtract-corres$onding /int. subtract #a1 from #a2. subtract-corres$onding st1 from st2.

multi$ly ou multi$ly-corres$onding /int.2 multi$ly #a1 by #a2. multi$ly-corres$onding st1 by st2.

di#ide ou di#ide-corres$onding /int.2 divide va@ '- vaA. divide!corresponding st@ '- stA.

ABAP
REPORT

1.00 - 80

"6ec+
*ssume a condi"o de )( mas com menos comple,idade, com a mesma efici>ncia e tam'm podendo ser codificada dentro de um loop, passa o controle imediatamente = instru"o de termina"o do loop e desviando das instru"2es intermedi7rias. *ceita uma e,presso l9gica. %e a e,presso for verdadeira, no far7 nada. %e for falsa, pular7 para o final do loop. /int.: ... select ^ from mara 01ere matnr V @. c1ec/ s-!su'rc V C. ... E).: report zexemplo. tables: spfli, sfli%ht. ... select-options: sf*price for sfli%ht-price, sp*carr for spfli-carrid, sp*from for spfli-cit'from no database selection, sp*dept for spfli-deptime. ... %et sfli%ht. check select-options. ...

ABAP
REPORT

1.00 - 81

Read Table
utili8ado para ler e locali8ar uma ?nica lin1a 5ue corresponde aos critrios especDficos e a coloca em uma 7rea de tra'al1o. O comando read table s9 pode ser utili8ado para a leitura de ta'elas internas, no funcionando com 'anco de dados. E).: report zexemplo. data: be%in of ti occ$rs ", /a -!. t'pe n, /a! t'pe i, end of ti, /a" like ti. ti-/a = '#'. ti-/a! = !. append ti. ti-/a = ' 0'. ti-/a! = #. append ti. read table ti index !. write: / 's'-s$brc =', s'-s$brc, / 's'-tabix =', s'-tabix, / ti-/a , ti-/a!. 0es1ltado: sy-subrc > sy-tabi" > 12 <

ABAP
REPORT

1.00 - 82

*nser'
Hoc> pode utili87!lo para inserir uma ?nica lin1a em uma ta'ela interna. %int.: ... insert @wa intoB itab @inde" nB ... wa uma 7rea de tra'al1o com a mesma estrutura de uma lin1a de ta'ela interna itab. n uma constante, literal ou vari7vel numrica. se wa for especificado, o conte?do dela ser7 inserido em itab. wa dever7 ter a mesma estrutura 5ue itab. se wa no for especificado, o conte?do da lin1a de ca'e"al1o ser7 inserido em ita'. %e itab no tiver uma lin1a de ca'e"al1o, wa dever7 ser especificado. se inde" for especificado, a nova lin1a ser7 inserida antes da lin1a n. * lin1a n se tornar7 ento a lin1a n c @. a instru"o insert pode ser utili8ada dentro ou fora de loo$ at itab. %e utili8ada fora, a adi"o inde" dever7 ser especificada. %e utili8ada dentro, inde" ser7 opcional. %e a adi"o no for especDficada, a lin1a atual ser7 assumida.

e,emplo: data: be%in of itab occ$rs #, fa like s'-index, end of itab. do # times. itab-fa = s'-index. append itab. enddo. itab-fa = -55. insert itab index ". loop at itab. write / itab-fa . endloop. loop at itab where fa T= 4. itab-fa = -AA. insert itab. endloop. skip. loop at itab. write / itab-fa . endloop.

ABAP
REPORT

1.00 - 83

0es1ltado: 1 2 SS3 N < 1 2 SS3 TTN TT<

ABAP
REPORT

1.00 - 84

2odif=
%erve para modificar o conte?do de uma ou mais lin1as de uma ta'ela interna /int.: modify itab @from waB @inde" nB @trans$orting c1 c2 ... @where expBB obs.: se from wa for especificada, a lin1a ser7 so'rescrita com o conte?do de wa. se from wa no for especificada, a lin1a ser7 so'rescrita com o conte?do da lin1a de ca'e"al1o. se inde" n for especificada, n identificar7 o n?mero da lin1a 5ue foi so'rescrita. modify itab pode ser especificada dentro ou fora de loo$ at itab. %e especificada fora, inde" n dever7 ser especificado. 4uando especificada dentro, inde" n ser7 opcional. %e no for especificada, a lin1a atual ser7 modificada. trans$orting especifica 5uais componentes devem ser so'rescritos e o restante permanecer7 inalterado. %em ela, todos eles sero so'rescritos. usar a condi"o where depois de trans$orting far7 com 5ue os componentes especificados sejam so'rescritos em todas as lin1as 5ue satisfa8em a condi"o where. O lado es5uerdo de cada parte de exp deve especificar um componente de itab. O mesmo componente pode ser especificado depois de transporting e em exp. itab o nome de uma ta'ela interna com ou sem uma lin1a de ca'e"al1o. wa uma 7rea de tra'al1o com a mesma estrutura de uma lin1a no corpo de ita'. v uma constante, vari7vel ou literal numrica. c1 e cp2 so componentes de itab. el uma e,presso l9gica envolvendo componentes de ita'.

No poder7 utili8ar modify itab com where: ! dentro do loo$ at itab ! com a adi"o inde"

ABAP
REPORT

1.00 - 85

E).: report zexemplo. data: be%in of itab occ$rs #, t like s'-index, t!, end of itab, %ama-#. /al$e 'pla$t'. do # times /ar'in% itab-t! from %ama,0 next %ama, . itab-t = s'-index. append itab. enddo. itab-t! = '/'. modif' itab index 4. loop at itab. write: / itab-t , itab-t!. endloop. loop at itab. itab-t = itab-t * !. modif' itab. endloop. skip. loop at itab. write: / itab-t , itab-t!. endloop. itab-t! = '6'. modif' itab transportin% t! where t UT 0. skip. loop at itab. write: / itab-t , itab-t!. endloop. 0es1ltado: 1 2 3 < < 2 N O 112 $ l a # t $ l a # t K

ABAP
REPORT

1.00 - 86

N O 11-

K K # t

ABAP
REPORT

1.00 - 87

%ele'e
+om o comando delete voc> poder7 e,cluir uma ou mais lin1as de uma ta'ela interna. %emel1ante as inser"2es, as e,clus2es dentro do loo$ at itab no afetaro imediatamente a ta'ela interna, ao contr7rio, se tornaro efetivas na pr9,ima passagem do loo$. /int.: Felete itab @inde" cB @from vB @to lB @where expB itab uma ta'ela interna c, v e l so constantes, vari7veis e literais numricos exp uma e,presso l9gica envolvendo os componentes de itab.

Occurs
No limita o n?mero de lin1as 5ue pode ser adicionado = ta'ela interna, teoricamente o n?mero de lin1as 5ue pode ser adicionado a uma ta'ela interna apenas limitado a mem9ria virtual disponDvel no servidor do aplicativo. O sistema utili8a o comando occurs apenas como uma especifica"o para determinar 5uanta mem9ria ser7 alocada.

ABAP
REPORT

1.00 - 88

5i'6 >e=s
%e a utili8a"o da adi"o for especificada, o sistema locali8ar7 uma lin1a 5ue corresponda com a e,presso /e- e a colocar7 na lin1a de ca'e"al1o. <sando a e,presso /e-, voc> pode procurar por uma lin1a especificando um valor ao invs de Dndice. E).: report zexemplo data: be%in of itab occ$rs ", t -". t'pe n, t! t'pe i, t"-". t'pe c, t4 t'pe p, end of itab, be%in of tabi, t like itab-t , t! like itab-t!, end of tabi, tabt like itab, t-A.. itab-t = ' 00'. itab-t" = 'pp'. itab-t! = itab-t4 = . append itab. itab-t = '!00'. itab-t" = 'll'. itab-t! = itab-t4 = !. append itab. itab-t = '"00'. itab-t" = 'aa'. itab-t! = itab-t4 = ". append itab. read table itab with ke' t = '"00' t! = ". write: / 's'-s$brc =', s'-s$brc, / 's'-tabix =', s'-tabix, / itab-t , itab-t!, itab-t", itab-t4. t = 't!'. read table itab into tabt with ke' -t. = !. write: /, / 's'-s$brc =', s'-s$brc, / 's'-tabix =', s'-tabix, / itab-t , itab-t!, itab-t", itab-t4, / tabt-t , tabt-t!, tabt-t", tabt-t4. clear tabi. tabt-t = ' 00'. tabt-t" = 'pp'.

ABAP
REPORT

1.00 - 89

tabt-t! = tabt-t4 = . read table itab with ke' = tabt. write: /, / 's'-s$brc =', s'-s$brc, / 's'-tabix =', s'-tabix, / itab-t , itab-t!, itab-t", itab-t4. tabi-t = '!00'. tabi-t! = !. read table itab into tabt with ke' tabi. write: /, / 's'-s$brc =', s'-s$brc, / 's'-tabix =', s'-tabix, / itab-t , itab-t!, itab-t", itab-t4.

0es1ltado: sy-subrc > sy-tabi" > 3-sy-subrc > sy-tabi" > 3-2-sy-subrc > sy-tabi" > 1-sy-subrc > sy-tabi" > 1-3 3 2 3 2 1 1 2 1 00 1 00 1 .. 66 3 2 .. 3

ABAP
REPORT

1.00 - 90

4or(
&efine o fim do evento precedente e o come"o de uma su'!rotina. *s su'!rotinas no podem ser e,cessivas no interior de eventos. /int.: form <sub> tables pa1 pa2... using pa3 #alue pa4. ... endform. SsubL o nome da su'!rotina. pa1 e pa2 so parYmetros. E).: 4I:18: 31E0N KD DM0E>4*847BP, DMPC770< M091 8DM0E>4-PC770<, :70P1 M091 8DM0E>4-DM<C41, 1N< KD DM0E>4*847BP. <C4C: =I*DM0E>4 03KK9 03KK9! 847BP 4I:1 M091 M091 M091 DM0E>4*847BP KPPB78 0, 83KK9 KPPB78 0, 03KK9 KPPB78 0, 83KK9. 03KK9! 847BP. =I*DM0E>4QR 03KK9 QR 03KK9!QR 847BP.

:17DK7= <08:MCI B80NE =I*DM0E>4 03KK9 DK7= <08:MCI B80NE :*04C3 :*3KK9 :*3KK9! :*847B M091 M091 M091 M091

<C4C: M*DM0E>4 M091 M0N1 KD :*04C3, M*PC770< M091 M*DM0E>4-DMPC770<. ... 67041: / :*847B-PC770<, :*847B-PKNN0<. ... MKK: C4 :*04C3 0N4K M*DM0E>4 6>171 DMPC770< = M*PC770<. ... 1N<MKK:. 1N<DK7=.

ABAP
REPORT

1.00 - 91

Perfor(
utili8ado para c1amar uma su'!rotina, no caso o form. E).: report zexemplo. data: n$mber*i t'pe i /al$e #, n$mber*p t'pe p /al$e 4, be%in of person, name- 0. /al$e 'pa$l', a%e t'pe i /al$e !A, end of person, alpha- 0. /al$e 'abcdef%hiV'. field-s'mbols UpointerT. assi%n n$mber*p to UpointerT. perform chan%e $sin% n$mber*i n$mber*p UpointerT person alpha,n$mber*i-UpointerT.. *------------------------------------------------------------------* * form chan%e * *------------------------------------------------------------------* * ........ * *------------------------------------------------------------------* * --T /al$e-par* . * * --T par*n$mber*i * * --T par*n$mber*p * * --T par*pointer * * --T par*person * * --T par*part*of*alpha * *------------------------------------------------------------------* form chan%e $sin% /al$e-par* . par*n$mber*i par*n$mber*p par*pointer par*person str$ct$re person par*part*of*alpha. add par* to par*n$mber*i. par*n$mber*p = 0. par*person-name,4- . = alpha. par*person-a%e = n$mber*p , !#. add n$mber*i to par*pointer. par*part*of*alpha = space. endform.

ABAP
REPORT

1.00 - 92

*nclude
<m programa include um aplicativo em 5ue o conte?do projetado para ser utili8ado por outro programa, podendo estar incluDdo em mais de um programa. Normalmente ele no completo so8in1o. <m programa include deve ser do tipo i. O c9digo do programa include copiado como est7 e su'stitui o comando include no tempo de gera"o do programa. E).: (!o1!ama (!in"i a, report zexemplo. tables: Utab T, Utab!T. parameters /a*/ar like tab -camp . incl$de: zexemp , zexemp!. top-of-pa%e. write: / '7es$ltado', /a*/ar . $line.

In",)'$ ZE3E&(1 *** incl$de zexemp . select sin%le * from tab

where camp

= /a*camp .

In",)'$ ZE3E&(2 *** incl$de zexemp!. select * from tab! where camp write: / tab!-camp . endselect.

= tab -camp .

ABAP
REPORT

1.00 - 93

"all func'ion
6ste comando utili8ado para c1amar um m9dulo de fun"o. call function um comando especDfico, no necessitando 5ue seja colocado pontos ou vDrgulas depois de parYmetros ou nomes de e,ce"o. O nome do m9dulo deve ser codificado em letras mai?sculas, se for codificado em letras min?sculas, a fun"o no ser7 locali8ada e um dump ocorrer7. e,emplo: data be%in of bdcdata occ$rs 00. incl$de str$ct$re bdcdata. data end of bdcdata. data be%in of itab occ$rs 0. incl$de str$ct$re bdcms%coll. data end of itab. data pro%ram like s'-repid bdcdata-pro%ram bdcdata-d'npro bdcdata-d'nbe%in append bdcdata. clear bdcdata. bdcdata-fnam bdcdata-f/al append bdcdata. ... call transaction = 'sapms"Am'. = '0 00'. = 'x'. = 'rs"Am-pro%ramm'. = pro%ram. 'se"A' $sin% bdcdata mode 'n' messa%es into itab.

ABAP
REPORT

1.00 - 94

Top8of8pa!e
6ste comando utili8ado para criar tDtulos personali8ados ca'e"al1os#. %e no 1ouver uma tela de sele"o, o primeiro comando write e,ecutado acionar7 o to$-of-$age, caso o seu programa possua uma tela de sele"o possDvel 5ue o to$-of-$age seja acionado duas ve8es, primeiro pelo comando write e,ecutado antes da tela de sele"o ser mostrada ou pelo comando write e,ecutado ap9s a tela de sele"o ser mostrada. E).: report zexemplo no standard pa%e headin%. data: /a -#. /al$e '%ata', /a!-#. /al$e 'carla'. write: / 'Pomo /aiW'. top-of-pa%e. write: / '8rta.', /a!. $line. 0es1ltado:

ABAP
REPORT

1.00 - 95

End8of8pa!e
6ste comando cria rodaps de p7gina, os comandos 5ue estiverem ap9s o end-of-$age sero e,ecutados antes da gera"o de cada nova p7gina. Hoc> precisa reservar espa"o na parte inferior da p7gina line-count# para o end-of-$age. E).: report zexemplo line-co$nt #-!. no standard pa%e headin%. data: /a -#. /al$e '%ata', /a!-#. /al$e 'Parla'. do !0 times. write: / 'como /ai', s'-index, 'times'. enddo. top-of-pa%e. write: / '8rta.', /a!. $line. end-of-pa%e. write: / s'-$line, / '1ste X o rodapX com d$as linhas reser/adas'. 0es1ltado:

ABAP
REPORT

1.00 - 96

A' selec'ion8screen
processado depois da entrada do usu7rio na tela de sele"o ativa, podendo ocorrer ap9s o usu7rio clicar um 'oto. *lm da verifica"o de valida"2es de dados, mensagens de aviso, altera"o do status [<) e at mesmo janelas pop!up podem ser a'ertas utili8ando este evento. E).: ... select-options name for s'-repid modif id x'z. ... at selection-screen o$tp$t. loop at screen. check screen-%ro$p = 'x'z'. screen-intensified = ' '. modif' screen. endloop. ....

ABAP
REPORT

1.00 - 97

A' user8co((and
Os 'ot2es, assim como muitas outras op"2es de tela de sele"o 'aseadas em evento, podem ser muito ?teis na manuten"o da intera"o com usu7rio e na valida"o de entrada do usu7rio. data: n$mber t'pe i /al$e !0, n$mber! t'pe i /al$e #, res$lt t'pe i. start-of-selection. write: / n$mber , 'W', n$mber!. at $ser-command. case s'-$comm. when 'add'. res$lt = n$mber , n$mber!. when 's$bt'. res$lt = n$mber - n$mber!. when 'm$lt'. res$lt = n$mber * n$mber!. when 'di/i'. res$lt = n$mber / n$mber!. when others. write '$nknown f$nction code'. exit. endcase. write: / 'res$lt:', res$lt.

0es1ltado: 2U <

ABAP
REPORT

1.00 - 98

2essa!e
*s mensagens so mantidas e arma8enadas na ta'ela :@CC e podem ser acessadas a partir do *E*P .or/'enc/. <m programador efetivo emite mensagens 5ue so descritivas e ajudam o usu7rio a entender a nature8a do flu,o do programa. possDvel atri'uir a cada instru"o de mensagem tipos de mensagem 5ue t>m diversos efeitos no resultado do programa.