Académique Documents
Professionnel Documents
Culture Documents
.\
co nsulto riaern ,SAP Novt.l::; ty1o~us ~ Inc, sediada em \ Ontario, .~~nada. Ele tam~e~'e instrutor de ' . . .... I Certificacao em SAP da America's ABAP/4 Academy: . ': Boston; no Lambton Collegeem Ontario ~
. ....
.~
. , .~,
_~" . De~e!J'vol~ e. uti U~~~fetjvap:!~oterel.atqrio~ , .. . iru:luiiidG a sua fo'rlnata<;ao"com 'sfmbolos :." ' . . , ' ".... ~...... .grM. e .fc_oneS':~ . ;' ,; ., icos : "-:'.'" . .
~,
~ . . .,~.. ; .~. . ., UtilJ7e.o Data Di~ioriary p-;;';a-exibir tabelas, .~' . chaves estrangeir~:e'indiCes secundarios . .; . ~ . ' ',i ," , ~:.~
6/'
'J
. ~
!il,
j -'7
...."
contem: '
. .. ,
'}a Mais de st;~eric~s "erh 'Y1~~S' tbj~ sess6~:i-e- . . trelnamento Individuals a que "QCe~pode assiWf e re\::isar a qualquer rnornento, ilus.t;and9:passq a passo as p rQcedim,,~ntos cont idos no liv re .' . .. . l :: ~. ~ ~~( ." . . . \. ' _ . I, i! C6digofonteli>m ABAP/4 testado para os prog~as de exemplo, e~:~.t~ibS e solucoes lnciuldos ~o Iiv o.
'50'
'-
. '
\IV\IV\N. ..
..J
)
1 ,,;~};i:.;D~~ :>,;;l~l:{~ .',.,~.\t\'i;:1 "'_~ ~ ~i~r~).f ,~ it.':~W ;i ;~~ .:~.~.{.~~1:; ~ ' :: \1:.'~;,, .f/. . ,1 2 ; .'I,,! I~n " .it-."\ ;o;.;~, pla .3:q:,:~r' ~ ~ ,JI,~~,~:, Dia 4:\:!11_" ~'1~' , 3 . -, "" 1\0 , ;- .:,'. . .I< L ~'. .. . ... III!,I'. ~ ", ' ..,-' ,'.-,. ,-,' 1" , .1 .<..iM.-: ...';'. ,,,,,.... "' .(, ~". " .
"
. ,.;) ;".;,Dla 6.
Coo e utilI Indices
seQ.Jrxlar!os aproprieda menle;config ure osalriltJlos16cnlcos para labolas Iransparenles: configure 0 usadebuller para tabela s, Ap llqul 0 ulW1aria de banco ee dados para newtar I vo rUlcllt;ao decoer l!nd:l; atesteInlormaes de banco dedades espadlicas de labela; Insira a rec ra labelas nobanco dedados.
Enlendaos eLemenlOi de $lntaxe do ABAPI":
;i;f.{~:: :,:~,.,
";
Enlellda a que' um sls lema de RI'J. sua aparllnda e lunciollamenlo para0 U5udrio; apreAda sobfe larqu~e lurl do slslema emque programas A8AP/41unclonam,
ulilizando 0 Dala Dictionary; adldone comenl4rio1e documen t~o. eeus prog llmas.
Descreva asdlIerent;aS 8l'ltrt labelas transparentes, labolat de poole de du slp. r, erie domlnlos. elementos de dadose \abelas transparentesno Data O!cllonary .
')
')
':' i
'j ; .Pt ".;!" :~}.1 ',,'; , ;') ~ :':;':'~'-:~, : l1:t~~~:" ~.'~~~ 9, ~ >"' !~ ; ~ ,J.l'!i..,:i.:P(~ 1~.:~\\;t:, .',
ISlnSIrues comunsdlt conlrole i f.
Cod~e
I'
UIiIlzoa nstM;Aotab 1e s para dellnlf strings de campo ontenda a Inst J;fto ; n types eutilize-ap8fa delinlr seIlSPJ6prios tipe s dedados.
!0:tt~" ~,i~\2.(: ~ ~ ;~ ~(
v,
Dla13
Dla14
En lerda0 ele~o do! \IpOs de dados nasalda: utlllza as oP95es de)Ofma la~o
case. do ewhtl e:
cootrol& I seqiillnclado progrlm au!iIIzando ex i t , conti nuee chec k: codique especficllt;ees simples dlt pos~o 0 decomprmento nl Ins trOlfAo wri te o
Defina umalabE IaIntema Reconh~ 0 opefalb de com ousom umallnhade corpo delabltla It umze-e para tester a oxlstllnclade ca bSl;alho;preencl\a essa labelautilzaooo append dados emuma labela ehave uma irmade s Inlemae compauuo a cab~lt1o Otl um e dr eade . conteudo deduas label s . Intemas quanta! Iguaklade. Ifabalho explidla; c:lasslnque labeln! kltlt as ' m autilize a ad~!o as text.
Pre&flCha umalabela Jnlama apar1ir deuma labela debanco dedado. u~lizando aseSlruturas (consll1lcl ~ ma tser lcienles ; relllillt processamento de ln lll"u~1o decontmleem lab s Inlernes utI~zando ela at e cn c hange of.
da ~o i,fr 1te;
,
:t"
\.'1; :l . ~
, D" ' 15. If,.''.," '. '::':'!D . 1 ~/:!;',;I:: j~;:;~. o E\ " la.. '1 la l;{1
,{,
,~ :
,Dla 19 .f
',\ ':'
,:.
"
Dla 20
Dia21
Cod lfiquelela. dnse lel;lo que interagem com 0 osuarb; utilize elementos de !orma!a~o para crlar lelas desel iO!o bem e pl'ojeladas eellcienles: utilize lelesde snl~o para manter aintagrk1ade dos
U~Vze as ~es do
Iormata9io grallca da
lnstrur;io wr i t e (as sy mbo l , a s icon, as 11 ne): lmprma salde de Isla a manlpure I , aidanospool.
UtilizeasIns lrues comuns delormalao ne w- l 1ne, ne w-page, ski p, back. pas i t 1o n e set b lan k lines; envle salda pala0 spool IIlil/zando ne w-page print.
Ulllize asavenlos init 1a1 1zat i on , s t ar t - o f se lec ti o n, end-of -se 1ecti on; donn.$Ub-fo1lnas eklemas e Inlerna$; conflguro variaveis locals, global! e eslali:as,alllm deareas de lraba tlode labela.
Entonda e utilizea Instr~o in c 1ude; crIo grupes de funyao e I'llOOJos de fun ~D; dannapa!lmellos l deimponaljio, eXpDrlao
e alle ~o .
En tenda 05componenles I a eslrulull de urn grupo de tunr;l o;definadados glDbals 0 sUb-rotinas denlro de umgru de Iunc?o. po
d_.
~--- ~_-...
...... ,,~
- ;1: .-<
rI:!'~~""",.~",,",""-:;"
'''~';'
_ _ 'n'_.,....
~.-
.,.. . .. h
~
'
lido
-n
f~j ~'
r--: h ~c ~
..
CJ
~.
!< o
Z
;lfl l; itr h i
I
P" ~ <
"
Jl
fT1 ;U
J>
CJ
~ ~
o
<1l
~ J>
()
;U
J>
"H o
OJ
J>
CJ
:s
J>
I
I I
, \S
- " : . . . - - -. ._
.1'.
v_ ,.......
_ _
-:....---.1-.........:.... :-;...............-::.:..
~:
~.
...: ..- -_ . - - --
._-----~
-_ ..,- - - -- - .--/
~~
...
Ken Greenwood
Consultor Editorial
Ferna ndo Barcellos Ximenes
~Y
'lle"o Site
et"
Aprenda
---==.m.: . e.. .: .
~. <"
i!b
Comp leto e
,<>"
ef!'
21 dias.
SAMS
(2
C M'PUS 'A
;
00"""'" sams
Tead'I Yourwlt ABA P/4 k'l 21 Days Tradul<Jo .lIlofIz8da do idioma ilglts da edIlWAO publlca da ~ CopyrightCo' 1999 by Sarns
s.ns
Dedicatoria
Este liuro ededicado a meus pais. Marian e Vern Greenw ood Obrigado por tudo.
uea.
. eilltr6nicos. meclrleos, lotogri llcos, grava9!o au quaisque r Qui os. r Tode 0 esfon;a filllelte para romecer . ma is compl ela I al1equlIGa irllom'I.a ,.ao.
COnk/do. l(!Ito,... o{.} aul or{lIs) nAo U$Uffi8m responsabilldade
pelos
~Ionts
resultados . US(! da. Inronna~ Iomecida. Reeomendamo. aos Inlar. 'I11ormat;:4o antn de sua UIiIIZ a<,;:iO.
"d".
Paoo Vrtmlel10
""" ee.-_
A Qualid.dll da Inlormat;llo. Rua Sell d. Slllembra. 111 - 16' andar ~AlodIlJ_iro RJ Bl1Isil Tel_lone: (021) 509-5340 FAA{0211507t99,
CIP-Bra$LC.~.forIte.
Gre_ood, Ken Aprellda em 21 dias ASAP .. I Ken Greenwood; tra~lo ' Ed, Of1 Futmankiewicz..- RID de Jenllro : Cempus, 1999.
" (Apr&nda)
98-1991
99 00 01 02
r
I
f GlSTRO 22~.f2-~
IATA:2 / . / ?'L ICERVO;Z3 0 2 9 /
'p , l .. .. __
Q' ,3.....;
Dia 20 D ia 21
SEMA NA
619 653
. 68 7
T elas de selecao
Sumario geral
Introducao
Convencoes utilizadas neste livro
3 Revisao
....... 1
2
689 697
719
l
SEMANA 1
Visao geral. . . . . . .
0 ambiente de desenvolvimento
.
. .
. 5 7
7 7
Dia 1
8
9
Por que voce precis a saber isso? Descobrindo 0 R/ 3 . Utilizando as areas conceituais do sistema R13 Descobrindo a interface com 0 usuario do RJ3 Enrendendo 0 Basis . Entendendo 0 clienre/servidor . Arquitetura do sistema RJ3 . . . o serv idor de apresentacao . o servidor de aplicativo . . . Descobrindo 0 servidor de banco de dad os Configurando os servid ores . Definindo urn sistema R/3 . Definindo uma instdncia R/3 . Arquiterura do servidor de aplicativo . Enrendendo urn contexto do usuario Enre ndendo uma area de rolagem .. Entendendo os passos de dialogo .. Entendendo 0 processarnento roll in/roll ou t . Descobrindo como os dados sao enviados ao servidor de apresentacao . . . . . . . . . . . . . . . . . . . . . . . Entendendo as cornponentes de urn pro cesso de tra balho Enrendendo os tipos de processo de trabalho . . . . . . . Entendendo 0 cliente de logon . . . . . . . . . . . . . . . Entendendo tabelas dependentes e independent es de cliente U cilizando 0 Open SQL da SAP . . . . . . . . . . . . . . Pcnabilidade . . . . . . . . . . . . . . . . . . . . . . . Ucilizando buffer de dados no servidor de aplicativc . Tratamento automdtico de cliente Resurno . . P&R . . .
10 10 15
20
22
24 24 24
25 25 26 26 27 27
28 28
30 31 31 32 32 32 36 36 36 37 37 38 38 39
39
.. , ..
XII
"RENDA EM 21 DI AS ABAp/' SU"'''DGERAl
XIII
Dia2
Antes de prosseguir . Explorando 0 ambienee de desenvolvimento Descobrindo tipos de prog rama . Definindo relatorios . Definindo programas de dialogo . . Descobrindo componen res de rela ta rio . . D escobrindo a ob jeco de tempo de execucac de prograrna Inrroduzindc as conven co es de atribui'):ao de nome de programa Criando seu primeiro programa . . . Exp lorando 0 editor de codigo-fome . . Utilizando a Editor: Initial Screen Explora ndo a funcionalidade do editor de codigo-fo nr e Obten do ajuda . . . . . . . . . . . . . . . . . . . . . . . . . Obtendo a ajuda F1 . O bt endc a ajuda R/3 Libr ary . Localizando seus ob jeto s de desenvolvimento . Introduzindo 0 R/3 Data Dictionary . Explo rando as tabelas e as esrrururas . Exibind o uma ta bela ou definicao de estrutura Exibindo 05 dados na tabela . . . De termin andc campos exibidos . Entendendo a sintaxe do ABAP/4 . . Introduzindo a instruci c se 1ect . . . . . Entende ndo as areas de t rabalhos de tabela "In trc duzindo a clausul a w here . Trabalhando com variaveis de sistema . Utilizando 0 ope rado r de encadeamenro . Utilizando a instrucio se l ect singl e . . . Comentando 0 c6digo e a documen tacao formal Resumo . P&R . Workshop .. Teste . . . Exercfcios do edito r . . Exercfcios de prcgramacac
. 43 43
44
45 45 46 46 47 47 48 50 51
51
64 64 65
66
67 68 70 70 71
72 72
76 78 79 82 83 85 85 86 87 87 88 93
95 95 96
. Explorando componentes de tabela . Mantendo as caractertsticas tecnicas de s campos . Determinando quando crier ou reu rilizar dominie s e elementos de dados _. . C onvencoes de atribuicac de nome para tab elas e seus componentes C rian do uma rabela transparence e seus componentes Abordagens para criar tabelas . A tiva<;ao de objetos DDIC . Desccbrindo dominies . Descob rind c elemento s de clade s Descobrindc tabelas transparentes . M odificand o tabelas . . . C opiando uma tabela Excluindo uma tabela Adicionando campos Excluindo campos . . Aleerando 0 ripe de dado ou comprimento de urn campo Trabalhando com dados . Acessando a funcionalidade do navegador de dados de dentro doODle . Utilinrios gerais de navegador de dados . Exibindo os dados utilizandc seu proprio programa de ABAP/4 Utilizando a ajuda Fl Resume .. P&R . . W orkshop Quescionario . Exercfcio 1 . . Exerdcio 2 . .
102
104
. 104
112
.116
. 124
. 124
125 126 127 127 128 128 . 131 . 135 . 135 . 139 . 139
. 140
. 140
141 141
Dia4
. . . . . . . .
. 143
.143 . 143 . 144 .145 . 146 .149 . 149
.150 151
Dia3
. . 95
97 97 98 99
. 101
Objetivos do capitulo . . . . . . . . . D escobrindo as chaves estrangeiras . Acionando a verifica<;ao de chave estran geira Requisites tecnicos para cria r uma chave estran geira Criando uma chave est rangeira . Des cobrindo a coluna CheckTable . Dererminacio automdtica de campos de chave esr rangeira . Relacionando as chaves esrrangeiras com a seta parabaixo e a ajuda F4 . Chaves estrangeiras e programas em lore Chaves esrrangeiras cornpostas . .. Entenda a cardinal;dade . . . . . . . Tipo de campo de chave estrangeira Chaves esrrange iras constantes e genericas Chaves estrangeiras adaptadas . . . . . . .
. 152
154
. 156
161
. 163
XIV
SU MARIO G ERAl
XV
Definindo uma tabela de valor Campos especiais de T abela . . Os campos monetarios . campos de qua nridade . As esrruturas no D ata Di ctionary Enrendendo Includes . . . . . Incluindo a mesma estrutura diversas vezes Resumo . . P&R . . .
as
Workshop Teste .
Exercfcio Exerclcio Exercfcio Exercfcio Exercicio Exercicio Exercicic 1 2 3 4 5 6 7 .
164 168 168 . 170 171 .1 72 174 . 175 . 176 . 177 . 177 .177 178 . 178 178 179 .180 .180 183 . 183 . 183 186 187 189 .190 191 193 . 193 195 . 195 . 196 .213 . 214 .214 .215 .2 15
U cilizando 0 utilicirio de banco de dad os Verificacoes de coerencia . Exibindo 0 log de ativacao . Exibindo e mcdificando parametres de armazenamento Excluindo e recriando as tabelas no ban co de dados Resumo . , P&R . . .
.. 225 .226
.230
Workshop
Te ste . Exercfcios 1 .\ .
. 231 .232 .233 .233 .234 . 234 .234 235 . 235 . 236 . 236 . 237 .238 . 241 .254 . 255 .255 .256 . 256
Dia 7
Dia5
.. ...
O bjetivcs do capftulc . Entendendo as Indices de tabela . Exibindo indices . Consider acbes ao cria r urn Iodice Criando urn Indi ce secundario . . Excluin do urn Indice secun dsrio . D etermin ando qu al Indice esu sendo uti lizado 'Exibindo configuracoes tecnicas Classe de dados '. . ': Ca tegoria de taman hc . Exib indo 0 nu mero de extens6es alocadas para uma tabela . Utilizacic de buffer em um a tabe1a Res umo . . P&R . . .
Workshop
Teste . Exerctcio 1
SEMANA 1 SEMANA 2
. 2 57 .259
261
Dia 8
Workshop
Teste . . Exerd cio 1
Dia 6
. 217
. 217 .217 . 218 .221 . 221 .222 .223 .223
Objetivos do capi tulo . H ist6r ico auto mati co de tabela e documentos alterados D ocumen tos alterados . Sabendo quand o ut ilizar hist 6rico automdtico de tabela Resumindo as configuracoes tecnicas versees ativas e revisadas . Vers6es adicion ais . D escartando uma verssc revisada
. 261 Objetivcs do capitulo . . 261 Definindo constantes . .262 Sintaxe da instrucao CONSTANTS .263 Definindo strings de campo . . . . , .263 Urilizando a instrucao DATA para definir uma string de camp o . Utilizando uma string de campo como uma varidvel do tipo char . .267 .268 Utilizando a instrucao TABLES para definir uma st ring de camp o String de campo defi nida u tilizando TABLES in teragindo com SELECT . . 269 .270 Visibil idade de uma string de camp o definida uril izand o TA BLES .270 Definindo ripos . .270 Sintaxe para a inserucao TYPES .272 Tipos estruturados . . 273 Grupos de ripe . .274 Criando urn grope de ripe .275 Resume. .276 P&R .
XVI
SUMARID GERAl I
XV"
Especificacoes simples de comprimento e posici c cia instrucdo wri te . 341 Sintaxe para especificacoes simples de co rnprimemo e posica c na instrucfo wri te . . 341
Resumo . .
Dia 9
279 .279 . 279 .280 .283 .286 .286 . 291 . 303 . 304 .309 . 310 . 311 . 312 .312 . 312
P&R .. .
Workshop Teste . Exercfcio 1
Dia 11
Tabelas in ternas . . . . . ..
Obierivos do capitulo . Princfpios da tabela interna . Definicao de urna tabela interna
349 .349 .349 .350 .353 . 359 . 376 . 382 . 383 .385 . 385 .385 387 . 387 . 388 .388 .389 . 389 .390 . 391 .392 .393 . 395 .395 ; 395 . 397 .398 . 400 . 400 . 403 . 403 . 405 . 406 . 408
P&R .. .
Workshop Teste . Exercfcio 1
Adicionando dad os em uma rabela interns util izando a instrucac append . Lendo 'dados a partir de uma tabela interna . C lassificandc 0 ccnteodo de uma tabela intem a Resumo . .
P&R .. .
Workshop Teste . Exercfcic 1
Dia 10
.. 31 5
.315 . 315 .316 .317 .319 . 320 .32 1 .326 .326 . 327 .327 . 328 . 328 .330 .332 . 334 . 336 . 336 .337 .338 .339 .340 .341
Dia 12
Tabe1as internas avancadas, Parte 1 . Objetivos de capitulo . Testando e modificando 0 conreudo da tabela inrerna
Obtendo informacoes sobre uma tabela interna .. .. Determinando se uma tabela interna esta vazia .. Deterrninando 0 numero de linhas ern uma tabela interne Prograrna de exemplo que obtem as informacoes so bre uma
Utilizando a instrucao cas e . Sineaxe cia instrucao cas e Utilizando a instrucao exi t . Sintaxe cia instructo exi t Utilizando a instrucio do . . Sintaxe cia instrucdo do .
Terminando urn loop sem fim Utilizando a adic;ao varying . Madificando valores dentro de do ... varyi ng/enddo Urilizando a instruc;2.o whi 1e . .
tabela intema
Copiando clades de uma tabela inrem a par.1 um a a utra . . _ . -: . Copiando uma parte de uma tabela int ema . P rograma de exemplo que copia os dado s ~n tr e as tabelas internas Cornparando 0 conreudo de duas tahelas internas U tilizando a instrucl c edi tor-ca11 ..
Sintaxe da inspucac whil e . . Utilizando a instruc;ao cont i nue . Sineaxe da instrucac conti nue Utilizando a insrrucdc check . Sintaxe da insrru cdc check . Camparando as instrucoes exit , continue e check
Excluindo 0 conteudo da tabela interna . Utilizando free para excluir 0 conreudo da tabela interna .
conteudo da tabela interna . . Utiliaando a instruljao de1ete para excluir as linhas de uma tabela interna , . Utilizando r ef r esh-para excluir
0
S MARlOG U ERAl t
k.IX
Workshop . .
Teste . . . . Exercic io 1 .
Esp ecificando decimals e arr edondamento Mudando 0 alinhame nto . Resu mo . . P&R ."..
Workshop
Teste . E xer clcio 1
".
. 4 95 .497
499
Dia 13
. Preen ch end o uma tabe1a in terna a partir de uma tabela de banco de dados . Selecionando rmiltiplas linhas diretam ente para uma tabela intern a Adicionando Iinhas, uma por uma , utilizando se1ect Resumindo se 1ect, tabelas in temas e eficiencia .. . U rilizandc as tabelas de exemplo 1fal , 1fbi , 1f el e 1fe3 Process amento de interrupcao de con trole . . . . Utilizando as in struc oes at fi r st eat l ast . Utilizando as instru co es at new e at end of . Ut ilizando a instrucdc sum . Llrilizand o a ins trucio on change of Resumo . P&R .
. 425 . 425
. 425 . 426 .434 .437 . 438 .439 " 440 . . 444 .449 .451 .45 8 . 459 . 460 . 460 .460 .460
Objetivos do capitulo . . 499 Fo rmatacic grafica com a inscructo write . .499 Sint axe paraas adiljoes graficas par a inscrucao write a .500 Utilizando a adic;ao as symbol . . .500 Utilizando a adic;ao as i con . . 501 Utilizando a adifjao as 1; ne . . 503 Exibindo os sfmbclos, leones e caracreres 1i ne-drawdisp onjveis . . 506
Formatando e imprimindo relatorios . Contro lando 0 tamanho de pfgina . Criando cabecalhos e rodap es de p agina . Res umo . . P&R . . .
Workshop Teste .
Exe rdcio 1 . .
Dia 14
A instrucao write . . . . . . . . . . . . . . . .
. 461
.461 . 461 . 461 . 462 .463 .465 .467 . 468 . 470 .471 .472 . 473 . 474 . 476 . 479 . 481
D ia 16
Objetivos do capitulo . Porrnatacao e comprimentos padra o Co mprim enros padrao Campos compactados . Eormatacao padrao . P ro grama de exemplo dem on st rand o a formatacao padrdo . Adiljoes para a instrucao writ e .
Workshop Teste .
Exercfcic 1 . . .
527 .527 .527 . 528 . 529 . 530 . 534 .536 . 538 .540 . 541 .542 . 542 .542 . 542
...
.. 559
ng
9 .622 .623
ng .
18
Mc)duLlaI'lzalGajO:
nassanuo
oal~anletroS para
571
.571 .573 .576 .578
Passando parametros . . . . . . , . . . . Criando parametros digitados . . . . Controlando como os pararnetros sao passados .. U tilizando as metodos de passagem de parametros Passando tabelas intern as como parametros . Definindo e chamando sub-retinas externas . Resumo . . . P&R . . . . . Workshop Teste . Exerclcio 1
Definindo as sub-retinas em U1U gropo de Liberando um modulo de . . . . . . Testando um modulo de . Localizando modules de funcao existentes Explorandoos cornponentes do seu grupe de Iuncao . Localizando e corrigindo erros em modules de fun~ao Configurando 0 valor de sy-subrc no retorno . Utilizando a instrucao rai se . Utilizando a instrucao message. '0 rai si ng Definindo excecoes na interface . . . . , .. Inserindo automaticamente a instrucao ca 11 funct ion Resumo .
.583
.592
P&R
Dia 21
Objetivos do capitulo . . . ' . . . Programacao baseada em evento U tilizando 0 evento i ni t i ali zat ion .
Utilizando 0 evento at sel ect i on-screen .. Utilizando 0 evento at user-command ... Validacao de dados utilizando chaves estrangeiras Validacao de dados utilizando matchcodes Sintaxe para utilizar um matchcode .
Formatando telas de selecao .
597
U tilizando a instrucao include . . . Sintaxe para a instru<sao include Introduzindo modules de Iuncao . Entendende gropos de fun~ao . Acessando a biblioteca de fun~ao Ativando urn modulo de fun<sao . . . . . Definindo dados dentro de urn Definindo a interface de modulo de Passando parametres ., U tilizando parametros dizi tacos e nao dizitaacs Chamando modules de fun<$ao . . . . . . para a instro~ao ca11 functi on . Executando um modulo de fun<sao de exemplo Criando urn m6dulo de Resumo. .. . . .
.597 .598 .600 .601 .602 .604 .605 .605 .607 .608 .. 609
U tilizando
se1ect i on-screen .. Sintaxe para sel ecti on-screen block com frame.
... . . .
.653 .653 .654 .655 . 6~5 ,657 .659 .666 .666 .667 .667 ,668 .670 .671
,672 .672
610
eo'
.611 .613
.673 .673
-.,.,
,~t..
;il~\
v
IXXII
~A P R E N D A EM 21 DIAS ABA P/ ~
Workshop Teste .
Exercfcio 1
Introdu~ao
Tendo ministrado 0 curso de certif icacao em ABAP/4 para centenas de novatos e desenvolvedores experientes, tanto na SAP como em outras insritui<;oes, conbecc a ripe de prob lemas e perguntas que voce ted. quando aprender essa linguagem poderosa. Incorporando neste livre todas as m elh ores tecnicas que enconrrei, espero compartilhar essa mesma expe rien cia de aprendizagem com voce tambem. Para esse [im, este Iivro e repleto de diagramas detalhados, imagens de tela in reira, programas func ionais de exemplo, ap resentacoes (sereencams) narradas em ingles e procedimenros passo a passo . Toclos os prcgramas de exemplc tambem sao forne cidos no CD-ROM de modo que voce possa earregar e executa-los em seu pr6prio sistema. Alem disso, as utilirarios que Iorn eco para todas as minhas classes eseao incluidos no CD -RO M, mais alguns novos que desenvolvi especificamente para as leitores deste livro. o ABAP/4. apesar de toda sua simpiicidade na supe rflcie, euma comple- . xa lingua gem. Par causa disso, 0 iniciante frequenremente fica desnorteado com seu comportamento. Entendendo 0 [un cionamen to subliminarmente, voce sed. capaz de dominar essa linguagem. Entendend o a como e 0 porque, voce ira adquirir urn conhecimento que poucos tern nesse empolgante campo . Este livre 0 guiara ao longo das ccmplexidades da linguagem e do ambiente do ABA P/ 4 urn passo de cada vez. Depois de comp letar cadacapitulo ; voce praticara atraves de exercrcios para reforcar seu aprendizado. As so lucoes funcionais sao ofereeida s para todos os exercfcics no C D -ROM. Como programador es experientes sabem, e as iniciantes logo saberao, criar programas ABA P/4 freqUentemente significa de senvolver mais que apenas urn programa. Esse trabalho frequentemen te envolve a criacao de ob jeros de desenvolvime nto para supo na- lo. Os procedimentos para criar esses objetos sao todos explicados em detalhes ut ilizando uma Iista de passos numerados. Cada passo contem a titulo das telas que voce encontra e as respostas esperadas para cada coma ndo. Todos os procedimentos sao acompanhados po r uma screencam que mostra exatamente como eles sao feito s. Agora. voce nao 56 pode aprender observando-me, como tambem pede adiantar e retroceder. o enorme volume de informacces necessario para dominar 0 ABAP e uma tare'[a desanimadora para a maioria das pessoa s, mas selecionei as informaco es mais vitais de que voce precisa e as dividi em 21 part es gerenciaveis. Com 0 conhecimento que voce adquire utilizando este livre, voce sera capaz de ramificar as tarefas complexas do ABAP/4 tendo urn entendimento solido por base. Se tiver problemas ou perguntas ao esrudar a assume, visite a site da Internet http ://www.abap4.net. N esse site. po starei respostas a perguntas [requentes (FAQ s) e pro blemas com que voce pode se deparar que nao foram abordados aqui.
SEMANA 3 Revisao
687
689 . 689 . 690 .691 . 691 697
Apendi ce A Convencoes de atribu i<;iio de nome .. Convencoes de arribuicao de D .ome de programas . Co nvencoes para arribuic do de nomes a relat6rios . Convencoes para atribuicao de nomes a p rogramas de dialogo Inrervalos de nomes de dientes : . . Apend ice B Resp ostas as perguntas dos teste s e exer cfcios Indice .
719
"
IIIll<OOU(AC
Espero que voce ache 0 esrud o deste livre tao agrsdfvel quanto achei escreve-Io. Boa sorte! Eis 0 seu A BA P/4 em 21 dias!
Z
~ m
o texro que voce digita e a texto qu e voce ve na tela aparecem em fon te monoespacada
para sirnular a forma que 0 texto assume na sua tela. Variaveis e placeholders (palavras que espelham 0 que voc e realmente onoespacoda e em ttouco. digitara ) aparecem em fonre m Cada capit ulo econcluldo com perguntas relativas ao assunto do dia, co m respostas do autor. A maioria do s capftulos tambem inclui u ma se~ao de exerc fcios e urn quesrionaric pr ojetados para refo rcar as conceit os do dia. (A s respo stas aparecem no Apsndice B.)
Umo nota op resentc tnformccoe s i~teressontes relacion odos com disccssco.
V
ENlllOI~
Iliol ~
INAtIIE ~
Uma dico cfere ce ccnselh cs ou mostro umo moneira mois f6cilde fozer olgumo coisa .
~o
I Fa~a
"-- - - - - - -- - - -- ------'
Um oviso de cvldodc clertc poro urn possfvel problema e oferece conselbos sobre como evlto-lo.
Esses quodros-de FO/iolN eo fOlio oferecem dices perc a que fozer e nco fozer com 0 ASAP/ 4.
que
s cmNUMlIltr...
Muitos dos proced imentos neste Ilvro sao demonstrodo s vtilizondo screencoms . ,.. As screencoms s60 como filrn es; mostrom umo sene de telcs, induindo pressionomentos de teclo e movimentos de mouse, com umo ncrrocdo " descrifivo em ingles. Termos novas s60 introduzidos utilizcndo a kane Novo Terma .
.,
milo ,.
NOYO ...
'.
Sumcirio
Inrroducao
SEMANA 1
.. . . . . .
. . . 1
Visco geral . . . . . .
0 ambiente de desenvolvimento .. Seu primeiro programa em ABAP/4
..
5
. 7 43 95
.257 .259
261 279 315 . 349 387 425 461
Dia 8 Dia 9
Dia 10
Tabelas internas
Tabelas internas avancadas, Parte 1 Tabelas internas avancadas , Parte 2 A instrucao write . .. .
. 495 .499
499 527 545 571 597
Di a 15 D ia 16 D ia 17 Di a 18 Dia 19
SEMANA
Visao geral
Voce comeca a Semana 1 aprendendo sabre 0 ambiente do R/3, incluindo 0 Basis, clienees de logon, 0 ABA P/4 Development Workbench e 0 Data Dictionary. Dentro do dicionario, voce cria tabelas transparentes utilizando elementos de dados e dominios, adiciona chaves extemas para validar entrada e prepara indice s secunddrios ou usa de buffer para acelerar a acesso aos dad os. Voce tamb em aprende a criar ajuda Fl e F4 para 0 usuario, corne ca a escr ever programas ABAP/4 simples e familiariza-se com 0 editor do ABAP/4 . 0 Dia 1, "0 amb ience de desenvolvimenro", explica 0 que e urn sistema R/3 e sua interface com 0 usuario. Voce aprende sabre a arqu irerura do sistema em que fun cio nam prograrnas no ABAP/4.
. 0 Dia 2, "Seu primeiro programa ABAP/4", ensina a criar e modificar programas ABAP/4 simples. Voce tambem exibe uma tabela e seu conreudo utilizando 0 D ata Di cti onary, assim como adiciona com entarios e documentacao aos seus programas.
0 Dia 3, ...0 Data Dictionary, Parte 1", descreve as diferencas entre tab elas de poo l, tabela s tran sparentes e de cluster. Voce tambem aprende a criar dominies, elem entos de dados e tabelas transparentes no Data Dictionary.
No Dia 4, " 0 Data D icti onary, Parte 2", voce cria 'chaves externas, cria e uriliza tabelas de text c , des creve a diferenca entre uma estrutura e uma tabela e erie estrur uras no R/3 Data Dictionary. Durante 0 Dia 5, "0 Data Dictionary, Parte J", voce cria e utiliza indic es secundarios apropriadamente, configura os arributcs tecnico s para tabel as tran sparen tes e ajusra 0 uso de buffer para tabelas,
No Di a 6. "0 Data Dic tionary, Parte 4". voce rrabalha com 0 utilitario ~e banco _de dados para execurar verifica~ao de coe renc ia, acess o de mform a!Soes de tabelas especfficas de banco de dad . . d . d b as, m serm 0 e recnan 0 ta elas no banco de dados. Depoi s do Dia 7, "De finindo dados no ABAP/ 4 Part I" , ente d I d . , e , VOce n e as e ementos a smtaxe do ABAP/ 4 d . bi d d escreve 0 concerto de o ~~;~s e dad~s e SU~ : isibilidade, utiliza Iiterais e entende como co 1 lear ca a np o, definin do e utilizando constantes.
o ambiente de desenvolvimento
Qbjetjvos do capitul.... o'-_
D epois de conduir este capitulo, voce devers ser capaz de responder as seguintes perguntas:
I I
o
1
0 que
0
Que plataformas 0 R/3 suporra? Q uais sao as possfveis configuracces do sist ema R/3? 0 que e a arq uitetura de servidor do R/3 ? 0 que
e clienre d,elogon ?
que
R/3 urn conjunto inregrado de aplicativos projetado para tratar 0 processamento de dado s em grandes corporacoes. Ele foi desenvolvido na Alemanha pela empres a denominada SAP {uma sigla de Systems Applications and Produc ts for data processing - aplicativos e produrcs de sistemas para processamento de dados). .
e R/3?
e
'"
lA, .NT. .D l
VOl
EN'
WF
Quando voce ve a pclovro SAP por si mesma, ela e pronunciodo "es -ei-pl". Quando e combinodo com Dutro pclovro, e pronunciodo
r:w orkflow -
IS (Industry Solutions -
sop, como em "teclo sap" . Voce nunce deve dizer "sop" quando se referlr o empreso SAP. Sempre 0 pronuncie como "es-el-pl". Dlzer "sop" eo mesmo que dizer lieu n60 sei node sabre SAP".
HR (Human Resources - recursos humanos) . PM (Plant Maintenance - rnanutencao das insta~a~6es). QM (Quality Management gereneiamento da qualidade) Estes aplicativos sao chamados areas [uncionais, areas de aplicativo ou, as vezes, modulesfuncionais do R/3. Todos Esses termos sao sinonimos . Tradicionalmente , as estruturas empresariais desenvolvern urn conjunro de apjicativos de processamentc de dado s avaliendo produ tos individuais e . cornprando Essesprodutos separadamente de diversos fabri cantes de software. Interfaces entre eles sao entsc necessarias . Por exemplo, 0 sistema de geren ciamemo de materiais precisara ser vinculado com as vendas e a dist ribuicao e com as sistemas financeiros, e 0 sistema de luxo de trabalho precisari de uma alimentacao a partir do sistema de HR. Uma quantidade.significativa de tempo e dinheiro de IS e gasta na implementacao e manutencao dessas interfaces. a BJ3 vern predefinido com os aplicativos empresariais basicos ne cessarios a maioria des grandes corporacoes, Esses aplicativo s coexistern em urn ambiente homcgeneo. Eles sao projetados para funcionar uti lizando desde urn unico banco de dados e urn conjunto (muito grande) de tabelas. Os tamanhos de banco de dados de producao atuais variam de 12 gigabytes a aproximadamente 3 terabytes. Cerca de 8.000 tabelas de banco de dados SaO distribuidas com 0 produto R/3 pad rdo.
Demro do R/3 , hi urn ambience de tempo de execucao e urn conjunto integrado de programas aplicativos escritos em 4GLdo SAP -ABAP/4. Esses programas aplicarivos foram projetados para atender ao processamento de clades necessaries para negocios muito grandes. R/3 e seu predecessor Rf2 sao particularmente populares no setor industrial. o RJ3 e 0 sist ema em que seus programas ABAP/4 serao executados. A Figura 1.1 oferece uma representacfo 1 6gica disso.
Fig ur a
1 1
Todos os m6dulos de
oplicotivo s60 escritos em ABNJ/4, que e
pp
inlerpretodo por
executovets Basis, que
BAS IS
SISTEMA OPERACIONAl
S al.l:H~rU:ISil '-lO= e :S
'
E importante para
I I
VOCe, como urn programador de ABAP / 4, saber p.or que esses aplicativos sao todos escritos inteiramente em ABAP/ 4. Esses saO os aplicativos que voce deve entender para ser urn born deserivolvedor de R/3. Por exemplo, suponha que voce conhece ABAP/4 e tenha recebido a incumbencia de escrever urn relat6rio financeiro que resum e debitos e crediccs de cada ano fiscal para cada fabricante na empresa. Talvez voce saiba escrever c6digo em ABAP. mas voce saberia como comecar a resolver essa tarefa? au talvez seu trabalho exija urn novo desenvolvimemo em ABAP/4. Voce e incumbido de projetar urn sistema que ofereca inf ormacoes de estoque para potenciais compradores. Se voce njio conhece os sist emas de vendas e financeiro e de disrribuicao, voce nac sabere se esta criando algo que ja. existe em Rl3. Tampouco voce pode saber se ha tabelas do R/3 que ja contem dados sernelhantes ou identicos aos ripos de dados que voce que r recuperar. Esses aplicativos sao altamente integrados. Urn desenvolvedor que assume a abordagem "eu construirei minhas pr6prias tabelas e manterei minh as pr6prias capias dos dados", pode logo descobrir que seus dados sao redu ndant es e devem ser rotineiramente sincronizados com 0 resto do banco de dados. Ele construiu
fjguro 1 2
urn aplicativo que nao tira proveito da natureza altam ente inte grad a do ambi= ~ M.
o kane do R/3 no
6reo de trcbcfbc-
M encionei isso apenas porque muitos d esenv olvedores qu e des ejam tomar-se consultores independent es pensam que aprender ABAP/4 erud o de que eles precisam para se aperfeicoar no sisterna-RJ3. Ecertamente urn grande infcio, mas e apenas 0 come co. A impcrrancia de treinarnento em uma are a funcicnal pede ser supervisionada ou desc onhecida par esses interessadcs em se tomar consultores p rofi cientes d e ABAP/ 4. Obviamente, muito de sse ap rendizado pede e sera Ieiro na p ratica do rrabalho, En tretanto, espero ilustrar o fate de que aprendera Iinguagem ABAP/4 esomente 0 comecc de uma longa viagem dentro do SAP . Se deseja sec bern-sucedido co m o urn cons ul tor independente, voce acabara precisand o adquirir urn con hecim en to funciona l a da " rea.
lce ne
do R/3
Voce pode cprender sa bre as 6reos funcio nois lende 0 referencia o nline do R/3 (cominho de menu do R/3 Help-> R/3 libra ry). Ela cc ntem tutoriois e Inicrmccoes de todo s os areas funclc ncls . 5e voce ti ve r ocesso 0 um sistema com dodos do IDES (Internat io na l Demo and Education Sysfem), voce tcrnbem pcderc troba lhor co m as exerdcios do R/3 library. Perc lnformocces sebre-e dispcn'btlidcde de cu rsos de trelncm entc, co ntofe a SAP (ht tp ://www . s ap. com) o u la mbto n Col-
EJgurp
Descobrind"'o!..Co"'-'R>L/.3'-..
Em urn amb ient e do Windows, voce eferua logon no R/3 escolhendo urn caminho a partir do men u Iniciar, ou dando urn clique duple ern urn Icone R/3, como 0 mosr rado a segu ir na Figura 1.2. sistema R/3 solic itara a voc e urn ID de usuario e senha. A tela de logon apa rece na Figura 1.3. Voce pr eench era esses dois campos eentao pre ssionaci Enter. o sistema R/3 entao exibire uma tela de direitos autorais e, quando voce pressionar Enter, exibira 0 men u principal do R/3 como mos trado na F igura 1.4.
\
i
I
I !
I
j
-j
J
.~.
Development Workbench
._ - -'--
,.. r
12
APIENDA EM21 DIAS ASAP,.
Fig ura J 4
1~ R' 9 It . . . .lcVo'c< - - - ., _ - . , _ _ 1_
~1
.lit
,EI
ESE
LV
ITC
;: _. -~r_
1,1,,1
~
-'e'.. .1
Figura] 5
:" 1
~.::r~-:+- ~
a cominho de menu
otuolizo urn
registro-mestre do fobriconte (porte i ).
o Development Workbench e utilizadc para criar e testar progremas ABAP/4. Como urn programador em ABAP / 4, voce gastara a maior parte do seu tempo dentro do Workbench. Para acessar 0 Development Wo rkbench, escolha 0 caminho de menu Tcols-c-Developrnent Workbench. Entretanto, seu c6dig o devers ler ou atua lizar as clados de aplicativo e, portant o, sera des tinado a to mar-se parte cia area de aplicativos. Com isso em mente, vamos olhar cleona de uma area Applications prim eiro. Para n osso exemp lo, imagine que voce' e urn atendente que trabalha em urn departamento de ccntas a pOl gar. Urn fabricanre Iiga para dizer que 0 endereco dele mudou. Voce coloca urn marcador no artigo de revista que estav a lendo (Visao criminologista dos problemas relacionados com a contabilidade criatiua} e precede a atualizacao de endereco no sistema R/3. Primei ro, voce alcanca 0 men u Accou nt s Payable escolhendo 0 caminho de menu Ac counting->Financial Accounring- S-Acccunts Payable [veja a Figura 1.5). Voce entao cria a rransacic de manutencao de registro-mest re de urn fabricante escolhendo 0 caminho de menu Master Records->Change (veja a Fi gura 1.6). Voce vera a tela Change Vendor: Initial. Na tela Init ial mostrada na Fi gura 1.7, digite 0 rrdmero do fabricante, fafSa . uma marca de selecao na caixa de selecao Address e pressione a tecla Enter. Voce entao veri a tela Address (veja a Figura 1.8). Vo ce altera seu endereco e pressiona 0 botao Save {veja a Fi gura 1.9). Ao salvar, 0 sistema retorna a voce Change Vendo r: Initial Screen. Ele tambem exibe um a mensagem de exito dentro da barra de status posicionada na part e inferior da t ela (veja a Figura 1.1 0).
Figur a]
A...--
o cominho de me:nlJ
otuolizoo registro-mestre de um fobriconle (p orte 2).
14
Fig ura 1 9
@ sr '.:
;_ [Ill
f! -'
G.- ' _-
Solvondo oltero~6e s
no eneJerer;o do fobriconte.
I __._ d o:" . D, x -~ M : i:l ~ o ~ ,:rq . . '. , ~~;i.;i;;'I~I~"ldl lio~;t ,_'\1 ~" " ;~.;-' f':'~'~/~" ... " .> _.
II"
.,::,. _.',.
.. ' .. "
.1.".. ,1
'.-~','~ - .~ ':-'",:
[~;?:;;r~;t~:, '~ . ~I; ~'~~:: .: .-c{t,~&t~~jTft ~.ft t. i ~I~li~~;,d;_:: :j~ '5116' , -..': ,.f ~f;~61t;~%~;E~~::!:~;;;'~; ~' ' I . . . ;~~Z ~{~~,i~~:$:~J ,. ~1 :, ~ :.' -. :. "
.
tf~~~~~}~~~~~~~;;{t:~}tii~~ f
E..i..Q..ura 1 8 A tela Vendor Moster Update Tronsodion;'
Address .
TI1"h....
I"]
~, ..ht..
Io/fIlI';1
.-
.-,'
~.
figur "
con ~rmo
1 10
, ,"
~':
A Initi l Screen o
q ue 0 o/leroljoo de e ndere'i0 fei feito.
Essa t ran sacao e urn exernplo de muitas das rransacoes no sistema Rl3. A maioria das rransacoes de dados-mes tres tern aparencia e significado semelhan res.
usu6rio do R/3
16
A barr~ de menu: a conteudo ciabarra de menu altera-se com cada tela. P esquisando as menus dentro dele, vo ce pode descobrir todas ' as fun~6es qu e sao p ossfveis na tela atua]. Os menus System e Help estao presentes em cada tela e as itens de menu que eles contem nunca se alte ram. .
Menu de interface: permite que voce pers onalize as caracterfsticas da interface com 0 usudrio, acesse a area de rrans fer encia do Windows e gere imagens. A seC;ao a seguir abordara mais profundamente os recursos do menu de in terface. Area Screen: esta e a area grande no mei o da t ela que exibe os dados de relat6rio ou a tela de urn programa de dialogo . A barra de status: exibe mensagens, 0 ID de sistema, 0 numero de sessj.o, 0 numero de cliente, 0 indicador do modo inserirl sob rescrever
e a hora! data atua]. Voce pode ativar e desativer a maioria dos elemento s da tela. Se sua tela nao se parecer au se comportar como descrito neste capit u lo, siga as instrucoes na proxima sec;ao para corrigi-la.
A, ~arra de ferramentas Standard: contem a campo Command e uma sen e_de ~ot6e~, Eles nunca se alterariio na aparencia, posicao 0'; fun<,;ao, e estarao presentes em cada tela . Algumas podem estar acinzen radas por fora se sua funcionalidade estiver atualmente indis p onfvel.. A b~rra de ferramentas Application: altera -se com cada tela. Ex ibe as botoes que dec a voce acesso rap ido a irens de me nu des sa tela . .
Figura " 1 1 ]
titulo
Compo Command
o leone corn tres cfrculos coloridos no canto superi or direit o da janela do R/3
menu de interface
e chamado menu de interface. Com ele, voce pode pe rsonalizar a interface com
o usudrio configurando cores de tela, tamanhos de Fonte e a co mportarnento do cursor. Para realizar isso, de urn clique no le on e no canto superior direito da janela do R/3 (veja a Figura 1.12) . Urn menu aparec era; de urn clique no item de menu Options.
Figura 1 12
o menu de interface
com 0 item de menu Options destocado.
Barra de status
18
01.
JA Jll
:D r
VD'
IEN- .J ~ ..-
De urn cliqu e na guia Ge neral e altere suas configuracoes para coinc idir
corn . as mcstradas na Figura 1.13. Pazendo isso, voce assegura que a sua interfa ce com 0 usuririo ficard par ecida e se comportara como descrito ne ste livre. A tive todas as barras de [erramentas (fa~a um a mar ca de selecso em codas elas) e configure Quick Info como Quick. Fac;a um a marea de selecao na p rimeira e na ultima das caixas de selecao de mensagem como mosrr ado. De urn clique em Apply.
Figura 1 14
Lists.
~!i~i~J,
.~"",~ ~~ .. ,,, . ~?,
Voce deve dar urn clique no batao Apply ou OK ant es de escother ovtrc g uio. Se voce nc o fizer issc, sues clterc coes noo tenSa efe ito.
. De urn clique na guia Col ors In Lists e fac;a uma marea de selecao na caixa
de selecac Lines In Lists como m ostrado na Fi gura 1.14. De urn clique em OK para reto rna r.
F ig u ra 1 13
num erico.
Utiliza ndo
Comma nd Field
N a barra de [erramentas Standard est auma ar ea de entrada chamada Com mand Field. Aqui voce pede inserir comandos de sistema. Para uma lists do s comandos que voce pede inserir aqui, coloqu e seu cursor no camp o de comand o e pr essione a tecl a FI. Este ca~po e mars frequentemente utili~do para uuciar uma nova
rran sacao.
Por enqucnto, pense em um progromo como ume trcnsc ce o. O s do is sa o grosseiromente eq uivole ntes. Quando voce inicic umo trc nsocc o, voce est6 inician do urn progr oma .
milo"
NOYO ....
Em vez de escolher urn co minho _de menu pora inicior uma tronsac;o~, voce pe de inserir 0 c6d iga de tronsa c;oo no eampo de eam a ndo. Um c6d!go de trc nsocoo e um c6digo de 3 ou 4 cc rocteres associodo o ume nc nsocc c - voce pad e utiliz6. 1 para lnlcic r 0 tronsccoc sem unlucr um ca minho de men u. Ca do trc nsc coo te m o um c6 digo de tronsOf; do (tam bem den orninodo tcode).
20
--~-
Para localizar 0 c6digo pa ra qualqu er transacac , voce invoca a tr ansacl o e enrao escolhe 0 caminh o de menu Sysrem- c-Status. A tela System:_Status sera exibida. codigo de transacao aparecera no campo Transaction. Por exemplo, a partir do menu principal R/ 3, escolha 0 caminho de menu A ccounting-c- Financial Accounting->Accoun ts Payab le. Vo ce vera a tela Accounts Payable. A partir daqui, escolha 0 caminho de menu Ma ste r Records- >Display. Voce vera a tela Syste m:_Status . Escolha 0 caminho de menu Systern -c-Srarus . Aparecerf a tela System: _Status. N o campo T ransaction esti 0 codigo de transacio para essa tela: FK 03. . Agora que voce tern 0 c6digo de transaca o, pede iniciar essa transacao de qualquer tela digitando 0 camp o de com ando I n seguido pelo codigo de transacao. Por exem plo, re tome ao men u principal (de urn clique no bo ta o Cancel duas vezes e emac de u rn clique no bono Back). No campo de cornando digite / nfk 03, enrac de urn clique na tecla Enter. Voce imediatamenre vera a Display Vendor: Ini tial Screen.
Em qua lquer tela, voce pode encontrar 0 c6diga de trcnsocco do troosccec etuel. Pera fozer isso, escolho 0 cominho de menu System- >Stotus.
Enten d en d o
lUMO "
N ~ OVO
Basis
Basis e como um sistemo operocional para R/3. Ele fico entre 0 c6digoAB AP/4 eo sistema cperoooncl da computodcr. ASAPgosta de chcmc-lo middlewore porque ele fico no mete, entre 0 ABAP/4 e 0 sistema operacionel.
Basis para prograrnas ABAP/4, enquanto a Windows para programas Windows. Basis oferece 0 ambiente de tempo de execucao para programas ABAP /4 . Sem de, programas ABAP/4 nao pod em ser executados. Quando 0 operador inicia 0 R/3, voce pode cons iderar que ele est a iniciando 0 Basis. Ele e uma colecsc de programas de sistema R/3 que apresen ta uma interlace a voce. Utilizando essa interface a usuario pode iniciar programas ABAP /4. Para instalar 0 Basis, urn instalador exe cut a 0 pro grama r3 in st no nfvel do pr ompt de comando do sistem a operaeional. C om o na maio ria das in stala~6es, essa operacio erie uma esrrurura de diret6rios e copia urn conjumo de executaveis para ela. Esses executaveis torn ado s juntos com o uma unidade fo rm am 0 Basis. Para inieiar 0 sistema R/3, 0 oper ador digita 0 comando starts ap. Os executaveis d o Basis iniciam e permanecern sendo executado s, aceit ando solicitacoes do usuario para execur ar p rogramas ABAP/4. Programas ABAP/ 4 sao executados dentro do ambienc e protetcr do Basis; eles nao sao executaveis que fun ciona m no sistema operacional. Em ve z disso, 0 Basis Ie 0 c6digo do ABAP/ 4 e os inte rp re ta com o instrucoes do sistem a operacional. as programas ABAP/4 nfo acessam fun~6e s de sistema operacional diretamente. Eles u tiiizam fuDc;oes do Basis para execu rar E/S de arquivo e exibem dados em janelas . Esse nfvel de iscla m entc do sistema operacional permite que p rogramas AB AP/4 sejam adaptado s sem modificarao de qualquer sistem a que suporte R;3 . Esse us o de buffer e. construldo diretamente na pr6pria linguagem de ABAP/4 e etotalrnente transpar ente para 0 programador. Basis torna os programas ABAP/4 portateis. As plataformas em que o R;3 po d e ser executado sao mostradas na Tabela 1.1.
Sistema operational
AIX SINIX SOLARIS HPUX
D ;g~ol .UN IX
Hardwa re suportado
IBMSNISUN
Di gital HP
Bull AT&TCompoq BulllZen;lh HP (Inlel) SNI IBM(Intel) Diqltcl (Intel)
Dcto-Geoerc l
O rccle 7.1
ADABAS D
Macintosh Windows NT
W;n 3. 1/ 95/NT OSF/ Mot;f OS/2
Macintosh
OS/400
AS/400
W;n95 OS/2
DB2/4 00
22
... <
DlH.O....BIEHlE D EDESENVDLVIMENTD
23
com urn banco de dados Info rmix e uma interface OSF/Motif, esse mesmo
programa deveria sec executado sem modificartio em uma mdquina Windows NT com urn banc o de dados Oracle e uma inte rface Windows 95. Ou, ele pode sec executado em urn AS/400 com urn banco de dados DB2 utilizandc OS /2 com o front -end . A SAP tambem oferece urn co njun to de [erramentas para adm inistrar 0 sistema do Basis. Essas ferramentas executam tarefas como monitoracao do desempenho do sistema, alem d a con figuracso e manutencio de sistema. Para
chama uma sub -retina transfere 0 controle para a sub-r otina e nao pode ser executado em qualquer processamento at e a sub-retina retoma r 0 controle. Os programas cliente e servidor sao processos independen tes. Se 0 cliente envia uma soliciracao ao servidor, ele eSta livre para executar outre trabaiho enquanto espera a respcsta. A Figura 1.16 mostra as rres configuracoes cliente/servidor padrao . 0 R/ 3 pod e ser modelado para trabalhar em qualqu er uma dessas configuracoes. Quando 0 programa cliente e 0 servid or sao execu tados no rnesmo cornpu tador, a cccfiguracao e referida como cliente/servido r em urna camada. [Uma camada (tier) e 0 limite entre dois computadores.] Quando des sao execurados em cornputadores diferentes, a configuracao e referida como eliente/ servidor em duas camadas . Urn programa pode func ionar como urn cliente e como urn servidor, se ele tanto solicita informacoes como responde as solicitac oes. Quando voce tern treS programas em comunicaclo, como e mo strado na Figu ra 1.16. a configuraliaO e chamada client e/ servidor em tres cam adas. A configuracao cliente/ servidor permite que 0 sistema R/3 divida sua c.arga com mul tiple s computadores. 1 550 oferece ao cliente a capacidade de ajustar a escala ao poder de processamento do sist ema para cima ou para baixo simplesmente adicionando Dutro computador a u ma configuracio existence , em vez de substiruir urn {mica computador que executa todo 0 processamento, como ocorre no mundo des mainframe s.
F igmn 1 16
Time).
o Basis foi p rcj etado para ser executadc em uma configuracac cliente/servido r.
ConfjgLlro~6es
~
dienle/servidor em
Limo.
dLios e Ir comodos. es
... _e-acIo
Entenderidc.c.cliente/serxidcr
NOVO .... llRIIO
_
0
outre [ve]o
flgu rg 1 1 5
Solicitocc c de
inform oc; 0 6
....... .....
Progro mo 2
Progromo servidor
AeSSEmOo do sistema
c1iente/servi or. d
Progromo 1
Progrom o
Resposto
..f=fl-I-- -} -
._. ......""",
die nte
Aqui vemos 0 Programa 1 solicitando algumas informacoes ao Programa 2. 0 Pro grama 1 e 0 ciiente e 0 Programa 2 e 0 seruidor. 0 Programa 2 oferece ao Programa 1 as inf ormacoes que ele solicitou. I sso e diferen re de urn pre grarna prin cipal que chama uma sub -retina e retorna. Urn pr ograma que
24
1..
~rvidor
de opresentoc;60
TEmO "
NOVO ...
servidor de opresento~ oo reo lmente um progroma identificodo como sapgui . exe. Normolmente, elee inst lodoem umoestccsc de trobolhode uscorio. o Para inicc-lo, a usu6rio d6 urn d ique duple em urnleone no area de trobalho ou escolhe um caminho de menu. Quando lnkio do, a servidor de opresenfoc;cio exibe a s me nus do R/3 dentro de ume janela. Esso jonelo e comumente coohecidc como SAPGUI, ou como interface com a usu6rio (au simplesmenfe, interfa ce). A interfoce oceifo entrada do usvoric no forma de pressionomentos de tecla, cliques de mouse e teclos de func;oo e envlo esscs sclicltccoes 00 servidor de aplicotivopare serem processados. 0 servidorde oplicotivo envio as resultados de volta 0 SAPGUI que entoc fonnata a soido a fim de exibi-Ia para 0 usu6rio.
Descobrindo
F i g u ra] 17
A orquiteturo do'
sistema R/3.
Serwdor de
gptl!5 entgO
mwo ,.
KOVO....
0 servidor de banco de dodos e um con junto de execvtovels que oceitc solicltocoes de banco de dodos do servldor de op licotivo. Essos scllcttccces soo passodos pora 0 RDBMS (Relation Database Management System). 0 RDBMS envlc os dodos de volta 00 servidor de banco de do dos , que ente o posse as iniormccces nova mente 00 servidor de c pllcotivc. 0 servidor de c piiccttvo pa r suo vez transfere essos inform e~ 6e s pore se u progromo ABAP/4.
Hoinormalmente urn computador especjfico dedicadc a abri gar 0 servidor de banco de dados; e 0 RDBMS pode ser executado nesse computador tam bem, ou pode ser instalado em seu proprio computador.
o servidor de oplicotjvo
milD r
NOYO '"
Urn servidor de aplicativo urn conjunto de executoveis que interpreta ccletivomente os progrom os ABM/4 e gerendo a entrada e 0 sc fdo para eles. Qua ndo urn servidor de cplicctivc e inicioda, todos esses execvtovels inicicrn 00 mesrno tempo. Quando um servidor de cplicctivo e interrompido, tadas eles porarn juntos. 0 ncrnerc de precesses que sao inidodos quando voce exlbe 0 servidor de ap licotivo e definido em urn vnico orquivo de confjg urc~ao chomodo perfil do servidor de ap!icofivo.
Cada servidor de aplicativo tern urn perfil que especifica suas caractertsticas quando ele inicia e enquantc esta sendo executado. Por exernplc, urn perfil de aplicativo servidor especifica:
26
I "RENDA EM 21 nus ABAP/4
--
27
Em uma configuracao clienre/servidor em tres cam adas, todos a s servidores de apresenracio, de aplicativos e de banc o de clados sao executados em mdqu inas separadas. Essa e a configuracao mais comum para sistemas grand es e e comum na ar ea de pro ducao. Na dist ribuicao cia configu raclo de apresentacao, 0 aplicativo e a s servi dores de banco de clados sao combinadas em urn co mp utado r e os servidores de apresenracao sao executados separadam ente. 1550 e utilizado para sistema s men ores e {requentemente e visro em urn sistem a de desenvolvimento. Na configuracac cliente/servidor em duas camadas, as servidores de apresentacao e de aplicativo sao com binada s e 0 servido r de banco de dados e separado. Essa configuracac e uti lizad a em conjuncao com outros servidores de aplicativo. Ela eaplicada para urn servidor em lote quando este esta separado dos servidores online. Uma SAPGUI e instalada nele para oferecer controle
Em te rm os mais gerai s, uma instdncia eurn seruidor. UIDa in stan cia eurn con junto de process os do R/3 que oferecem servic e s ao sist ema R/3.
Ela con sisce em urn dispatcher e multiples p roc essos de trab alho. T odas as solicitacoes provenientes de servidores de apresen taci o sao dir igidas prim eiro eo di spatcher. 0 dispatc her grava-as prim eiro na camada do disp atc her. 0 dispatcher extrai as soliciracces cia camadautilizando 0 algoritmo primeiro a entrar, primeiro a sair . Cada solicicacao e entao alocada para 0 primeiro pr oces so de trabalho disponivel. Urn proc esso de trabalho trata uma solicitacao por vez.
Figura 1 19
local.
Quando todo s as servidores sao combinadas em uma unica maquina, voce tern um a configuracao central. Isso raramente evisto porque des creve urn sistema R/3 independent e com apenas urn unicc usuario .
A ofquiteturo do
servidorde opJi otivo. c
Do servidor de cplicotivo _
1 I
I I I I
I
I
I
I I
I I
-- ---- - -- - - -
NOVO....
URMO
sistemas dentro de umo Instclccoo de SAPe a forma como eles s60 designados, tois como desenvclvirnentc, teste ou prodocec.
Definlndc
NOYO ~
P ara executar qualquer processamento para uma solicitacio do usuario, urn processo de trabalho precise enderecar duas areas espe ciais da memoria: 0 con texte do usuario e a area de rolagem do pro grama . 0 contexte do usuario euma area da memoria que contem as inforrnaco es sobre 0 usue rio, e a area de ro lagem e uma area de memoria que conc ern as infor rnacoes sobre a execucjo des program as. .
TtRMO ~
Quendo voce ovvir o!guem utlllzcr 0 po lovro insfdncia , no maio rio de vexes essa pessoo estero se referinda 0 um servldor de ap Jicotivo. 0 le rma instdnci o sin6nima de servidor de apficatiYo .
servidor de aplicarivo e servidor de banco de dado~ residem na mesma maquina, o termo instdncia central refere-se ao computado r em que os dois residem.
URMO ~
r...
Um contexto do usu6rio memo ria alo ca do que co ntem as corcctertstlccs de urn usucrtc que estc con ecto do 00 sistema R/3. Ele ormozeno as lnformccoes
~r
I ,
,..,
r-=--~~~~~------- --~~
,
28
I
-- - --- __ - ~~ ~~
...
~-- ~~~
J-----.-:-----~==:::=.Fjgurg 1 20
D I: 0AMBIflffi. DE OEStNVOlYIMENTO IA
29
Um posse de di61ogo
Pcsscr do Initi l o
FK02
lnif. IScree n o
Address Screen
ADO
Quando urn usuario eferu a lo go n, u rn contexte do usuario ealocado para esse logon. Q uando esse u suario efet ua a logoff, 0 contexte e liberaclo. Ele e uti lizado durante 0 processamento de urn programa e sua importancia edescrita em mais detalhes nas secoes a seguir.
Foboccnte 0
Enderecc
c1 Endereco
= = = ==
c:::l
Urno orec de rolcgem e 0 mem6rio que e c locodo po r um pro cesso de trobolho pora umc instc ncio de um progromo. Elo ormozeno informoc;6es necessc rics R/3 sabre 0 execvcco do prog romo , como;
,
Dispatcher
As alocacoes de m emoria dina-mica 0 pon teiro d o programa arual T o da vez que urn usuari o inicia urn programa, urna area de ro lagem e criada para essa instancia do p rograma . Se doi s usuaries utilizarem 0 mesmc programa simultaneamente, existirao duas areas de rolagem - uma para cada usuario . A area de rolagem e lib erada quando 0 programa e encerrado.
-+--+~
\..
\
'1..05 I
, \
i
!
'
0 termc 6reo de rolcq em referindo -se a todcs a s 6rea s de rologem pa ra um usu6rio ou oinda todos os 6reas de rologem em um servidcr de cpllcof ivc. Normalm ente, voce pode de duzir 0 significad o prete ndido a po rtirdo cont exte em qu e
tel utlllzodo.
Urn passo de didlcgo e 0 proces sarnento nec essario para sair de uma ~e.la pan a proxima. Ele inclui rode 0 processamento que ocorre de: d.equ e 0 us~a.no faz uma soliciracao ate . e incluindo, 0 processarnento n.ecessano para exibir a .p r6xima tela. Por exemplo, quando 0 usuario dol. urn ch~ue DOl tecla Enter n o Change Vendor: I nitial Scre en, ele in icia urn passe de dialogo e a amp~lheta apa rece , impedindo out ra entrada . 0 p rograrna sapmf02k recupera as infermacoes do fabricante e as exib e na t ela C hange Vendor: Addr.ess, e.a ~mpulheta desaparece . 1 550 marca 0 fim do passe de dialogo e agora 0 usuano e capaz de faz.er o utra solicitacao . Ha quatro maneiras de
0
Tanto a area de ro lage m como 0 contexte do usuario representam urn papel importance no processamento de passos de urn dialogo.
Figura 1.20) .
Dar urn clique em urn bono na te la. Escolher urn item de m enu. Eim port ante para 0 prog ramador de ABAP/4 conhecer sa bre pass os de dialcgo porque eles formam uma un idade discrera de processamento para um
Um posse de di61 0ga utilizodc pelcs ccnsultores de Basis como umo vnidode de medida pa ra 0 tempo de respcstc do sistema.
programa ABAP/4.
f
I
--0
II
30
I 'PREND' EM 21 DIAS 'UPI'
31
Entendendo
NOYO Ilrrr..
lERMO
Urn programa ABAP/4 ocupo openos urn process o de trobolho pora urn passo
contexte do usu6rio
safrern roll in pora 0 processo de trobolho. No lim do posse de di6logo, eles sofrem roll out. Isso e i1ustrado no Figura 1.2 1.
Fi g u r a 1 21
Os progro ma s ABM' 4 noo tern a copoddode de intercept or mu itos / eventcs com uns no Windows . Os eventos que gerom rnuitos me nsagens co mo pressiono mento de urno teclc , chero cees de Ieee e movime ntos de mo use, noo sao pc ssodcs para prog romos AW/4. Com o um resultodo, n60 no como executo rolguma s func;6es que sao encontro da s em o utros prog romos Windows. Pe r exernplo, no ABM/4 , voce n60 pode volidor a ccnteudo de urn co mpo quan do 0 usu6rio pressiono a tedo Tab . Em vez disso, voce de ve espe ror 0 usu6 rio lnicicr outre posso d o di6logo.
~~
.,.
Durante 0 roll in, as ponteiros para a area de rolagem e 0 contexte do usuario sao ocupados no processo de trabalho. 1550 permite ao processo de trabalho acessar os dados nessas areas e entao executar processamento para esse usuario e tal programa. 0 processamento continua ate 0 programa enviar uma tela ao usuario. Nesse memento, as duas areas sofrem roll out. 0 roll out invalida as pocteircs e desassocia essas areas do processo de trabalho. Esse p rocesso de trabalbo agora esta livre para execurar processamento para ourra solicitacio. 0 programa esta no memento apenas ocupando memoria e nac consome nada da C PU. 0 usudrio ve a tela que foi enviada e logo enviara ourra solicieacsc. Quando a proxima soliciracjo e enviada do usuario para con tinuar 0 processamento, 0 dispatc her aloca essa solicitacao para 0 primeiro processo de trabalho disponivel. Este pode ser 0 mesmo ou urn processo de trabalho diferente. 0 contexte do ususrio e a area de rolagem para esse programa novamente sofrem roll in para 0 pro cesso de trabalho e 0 processamento reassume do ponto em que foi deixado. 0 processamento continua at~ a proxima tela ser moserada, ou ate 0 programa term iner. Se outra tela for enviada, as areas novamente sofrem roll out. Quando 0 programa termina, a area de rolagem e liberada. 0 contexte do usudrio permanece alocad o ate 0 usuari o efetuar logoff. Num sistema com muitos usudrios utilizando mu ito s prcgramas, apenas alguns desses programas estarao ativos nos pro cessos de trabalho de cada vez , Quando eles nso estiverem ocupando urn processo de tra balh o, des sofrem roll OUt para a mem6ria estendida e apenas ocupam a RAM. Isso poupa a CPU e permite ao sistema R/3 alcancar urn alto throughput de transacio.
As mensagens trocadas entre 0 servidor de apr esentacjio e 0 servid~r de aplicativo estao em [ormato SAP proprietdrio. 0 SAPGUI acena ~s informacoes de tela enviadas do servidor de aplicativo e [ormatadas a~ropn adamente para a plataforma em que esta send o executado. Isso permlte ~ue diferenees plataformas de hardware do usu ario final conectem~se a urn unic o servidor de aplicativo. Par exemplo, urn PC OS/2 e urn PC Wmdows p odem cc nectar-se ao m esm o servidor de aplicarivo ao mesmo tempo.
urn
Os componentes de um proceno de
trabo/ho.
e composto do seguinte:
Um handler de tarefa
U rn interpretado r de ABAP/4 Urn interpretador de tela U rna interface de banco de dado s Todas as soliciracces passam pelc handler de tarefa , que entao afunila a solicieacio para a parte apropriada do proce sso de tr abalho. interpretadores interprerarn 0 codig o do ABAP / 4. Note que hi dois interpretadores: 0 inrerpretador do ABAP/4 e 0 int erpr etador de tela'. Hi
as
r------------~--
'W .....--
-- .... 1
D~ h 0U BiEIffi DEDESENVDl~M", O
I .
32
33
realmente d uas varialjoes de ABAP/4. Urna e a linguage m de p rocessamento de dados do ABAP/4 completamente desenvolvida e a out ra e u ma lingu agem muito especializada de processamemo de tela. Cada uma delas e processada pelo seu pro prio interpretador. A inter face de banco de clades trata 0 trabalha de comunicacdo com 0 banco de dado s.
Fjgura 1 23
a usu6ria digifo a
d iente de logon no tela de logon no compo Client.
l' -'
b"!P
g-"
~ _ ,", - . ~
,: ~. ~ _~ , ....
Tipo de processo
o IDio log)
V (Update)
B (Background)
Scllcltccoes de di6!ogo
Sclicltccoes para ctuclucr dados no ban co de dodos Trobolho s de segundo plano Imprime so licitac;ees de spool Solicitoc;5es de bloqueio 1 6gico
Roteio as men sagens entre os servidores de op licotivo den tro
Fjg ura 1 2 4
S (Spool)
E (Enqueue)
M (Message)
E lobelo ~ sto
depen dente de di ente porque 0
primejro ccmpc
~
de urn sistema R/3 G (Ga teway) Afunila a s me nsagens dentro e fora do sistema R/3
do tipo COO.
Entendendo
c1iente de logon
termo cliente de logon DaO tern nada a ver com Cliente/Servidor com plet amente diferente. 0 clients delogon se refere ao mimerc que 0 usuario digita no camp o C lient na tela de logon (veja a Figura 1.23). o mimero digitado aqui pelo usuario corresponde a urn conjunto de linhas dentro de cada tabela dep endente de clienre dentro do banco de dados .
34
":"\
r>
-r> r ~-;-,-...,.---~~ -
--- _ --
;W _
-w
.,....
__
..
35
e do tipo
CLNT.
mecan ismo de clience de logon divide as linh as dentro de uma tabe1a de dep endenc ia de clien te em grupos distintos. Pa ra acessar urn conjunto diferenre de da do s, 0 usuerio efet ua lo gon e especifica urn nume ro diferente de' cliente.
Os registros-mestres de usu6rio (co ntendo IDs de usu6rio do R/3) sao de pendentes de cliente. Portonto , pa ra go nhor oce sso a um c1iente, 0 ad minisirodo r de seg uron<;o deve crie r um novo ID de vsvcrio para voce de ntro desse cllente .
A Figura 1.26 mostra como este camp o afeta 0 usuario. Na Figura 1.26, 0 usuari o efetua lo gon para 0 cliente 800 e executa 0 programa mostrado. Este programa seleciona linha s de tabela Hal e emite 1fal -l; f nr. Quando esse programa e executado, so men te dua s linhas sao selecionadas: apenas nos casas onde mandt e igual a 800. 1550 acontece autom aticam ente porqu e 0 primeiro campo na tabela ede tipo CLNT. Hoi cinco linhas na tabela, mas 0 programa apenas emi te essas linhas onde mandt e igual a 800. Se 0 usuario est iver para efetuar logon para 0 cliente 700 e executar 0 mesmo programs, tr es linhas de dados seriam localizadas e seriam emitidas. Se 0 usuario estiver para efet uar logon para 0 eIiente 900, apena s uma linh a de dado s seria localizada.
Figura 1 26
o efeito do
dependencio de cliente.
elelllO logon e
o ulv6rio
[]QQ]
f---...,.-~ ~ e;:~:e
Jcbe lc lFAt
MANDT
700
lIFNR
I 11
700 80 800
12
100
1 1
' @]
Sardo
: :
100 : 101 :
Os de senvolvedores e a s testers u tiliz am 0 mec anismo de cliente de logon para criar e acessa r multiples conjunros in dependentes de dados dentro de uma unica tabela . Por exempl o, suponh a que da is tfp icos programadores anti-sociais estao trabalhan do em urn aprimorament o do sistema de cob ranca. Romeu esta modificando a rransacao de atualizacao e J ul ieta est a criando urn novo re latorio para acompanhar as mcdificacoes de Romeu . Jul ieta co nfigu ra a s clados para seu tes te, executa 0 re latorio e obtem uma sarde. Romeu trabalh a na sala ao lade, mas deviclo a suas tendencias anti-sociais esti feliz ignorando que sua tr ansac ao utiliza as mesmas tabe las que 0 relat6rio de Jul ieta. El e execut a sua tra nsa cac e atuaiiza os dados . Romeu obteve 0 que ele que ria, ma s Julieta entao modifica seu c6digo e executa seu programa novam en te. Sua safda difere da ultima e m uitas diferencas nao resultam de suas alteracoes, ma s das aheracoes de Romeu. 0 que tem os aqui e uma falha de comunicac t o . Se as tabelas u tilizadas p or Rom eu e os programas de Julieta fossem depend ent es de cliente , eles poderiam con ecrer-se a clientes separados, configurar conj untos independentes de dado s e testar seus programas sem jamais conv ersare m urn com 0 outro. Eles p oderi am execut ar to do seu "teste no conforto de sua sala e isolado s de seu companheiro de tr abalho. Par a torn ar suas rabelas dependences de clien te, eles apenas precis am ter ma ndt co m o 0 primeir o cam po e 0 sist em a R/3 cuid ara do restc. Quando registros sao adi cionado s a tabela, 0 siste ma automaticamente move 0 cliente de logo n at ual no campo ma ndt quand o 0 re gisrro for enviado ao banco de dados . Suas instrucoes se l ect em Open SQL somente retornarao as Iinhas em que 0 numerc de clience na tabela for igual ao seu num ero do client e de logon atual. odi As ins trucoes i nse rt, update, m fy e del et e de ban co de clados Open SQL tambem ofere cern tratamentc automatico de clienre . Se todas as tabelas envolvidas forem dep endentes de cliente, poderd haver mais de urn grupo de restad ores trabalhando ao mesmo t empo ern urn sistema de teste, D ua s equipes de resr ador es poderao obrer resulta dos de funcionalidade divergences com 0 m esm o con jun to de programas simultaneam ente se
r
36
-r-
r r
~"
37
efetuarem logon 'com diferentes clientes de logon. As atualizacoes feitas pa r uma equipe nao alterarac as dados que pertencem aoutra equipe. Tambem poderia existir no sistem a de teste urn treinamento de cliente. Os alunos poderiarn conectar-se a urn cliente e as tesradore "s poderiam conectar-se a outre. Os dois teriam executad o 0 mesmo conjunto de programas, mas a s programas acessariam conjuntos de dados independentes.
de buffer reduz a carga no servidor de banco de dados e no vfnculo de rede entr e 0 banco de dados e os servidores de aplicativo e pede acelerar 0 acesso ao banco de dados de 10 a 100 vezes mais.
F; gllrg 1 27
o ccmponenle de
interfac e d e bonco de
dodos do processo de
( N ota
A instcloccc mais com um do R/3 tem tres sistema s: deseovolvimento, teste e producoo . Pa r podroo , cod a sistem a vern co m tres clientes instolodos: ODD, 001 e 066" Eco mum ter de tres 0 se is c1ient es nos sistemas de desenvolvlmento e de teste, ma s roromente voce vera mois de um cliente no producdo.
trobe/he"
'U c
~D B
1=\
IIF
Ope n SQl
Uti Iizoad 0
_
Buffer de dodos
SQL nativ e
o c6digo do ABAP/4 po de ser portado de urn banco de dados para outro. Para acessar 0 banco de dados ern urn program a ABAP/4 voce codificara a Open SQL da SAP. 0 Open SQ L e um subconjunt o e uma variaclo do ANSI SQL. o interpretador do ABAP/4 passa tod as as instrucoes ern Open SQL para parte da interface de banco de dados do processo de trabalho (veja a Figura 1.27). Ai" e1as sao convertidas em SQL que e nativo para 0 RDMS inscalado. Por exemplo, sevoce esriver execurando urn banco de dados Oracle, seu Open SQ L ABAP/4 seria convertido pela interfac e de banco de dados em instrucoes de Oracle SQL. Se voce utiliza Open SQL, suas instrucces de SQL serao passadas para a interface de banco de dados. Utilizar Open SQL tern tres vantagens principais. Todas elas sao implementadas por rneio da interface de banco de dados .
Servrdor de
bcncc de dcdo5
8
Troto me nto o!ltom6tico de c1i ente
A terceira vantagem de utilizar Open SQL eo" tratan:zento automdtico de cliente. Com Open SQL, 0 campo de cliente automaticamente e ocupado pela interface de banco de dados. Isso ofereee as suas equipes de desenvolvimento e de teste muitas vantagens, como a capacidade de executar multiples testes e treinamencos simultsn eos em urn unico banco de dados sem incerferencia de urn em outro.
f-OJiahilidad=----- - -e
A primeira vantagem e 0 face de que suas insrrucces de SQL serao portaveis entre bancos de dados. Por exemplo, se por alguma razao sua empresa quisesse alternar de urn banco de dados Oracle para urn Informix, 0 banco de dados poderia ser alrerado e seu c6digo ABAP/4 cont inuaria a ser executado sem nenhuma alteracao.
- - - - - -- -
Resu m o
0 R/3 sup~rtamultiplas platafo rmas de hardware, sistema operac ional
e bancos de dados .
--- 38
W'
'W" _
.w
DIA 1, DAMBIEHTIDE DEIENY lY D IMENTD
39
0 cliente de logon perm ite que mulriplos grupo s de dados independentes sejam armazenados ria rnesma tabela. Os dados que voce acessa dependem do numero de c1ientes que voce digitou quando efetuou lo gon.
Teste
1. Eseolha 0 caminho d e menu T ool s-> Ad ministr ation, Monitoring ->System monircring-> User overview. Qual eo c6digo de tr ansa!S3.o para essa transacio? 2. Qual e 0 codigo de transacio par a 0 menu principal R/3 ? (0 menu principal e 0 primeiro menu exibido ape s 0 logon.) 3. Qual e 0 codigo de transacjlo par a 0 caminho de menu To ols-o-Development Workbench? 4. Se hi treS sistemas R/3 na sua paisagem de siste ma atua], quantos bancos de dados existem ? 5. Se urn sistema R!3 tern dais servidores de aplicativo, quan tas inst ancias ele tern? 6. 0 que e Open SQU 7. Quais as van tagens que 0 Open SQL of erece sob re 0 SQ L native ? 8. Qual e a parte do processo de t rabalho ut ilizada para implementar OpenSQU 9. Quando um a area de rolagern e alocada, quando edesaloc ada e 0 que ela contem? 10. Quando urn contexte do usuario e alocado, quando e desalocad o e 0 que ele contem? 11. Quando ocorre roll out e por que isso oeorre?
P&R
o o
Po sse copiar urn clienr e existente para um novo cliente? consulto r do Basis pode fazer isso pa ra v oce utilizando urn utilit ario de c6p ia de clien te. Cada sistema de desenvclvimento normalmente tern p elo menos urn clienre de refer en cia e urn clience de trabalho. Seus clados "validos" sao man tides no elien te de refe rencia. Eles sao copiados para eriar 0 cliente de trabalho. Se voce COHamper 0 clien te de trabal ho, 0 consultor do Basis pode restaurar seu estado original copiando 0 cliente de referencia novam en re.
Po sso escrever urn p rograrna que Ie dados de u rn outro cliente que nolo 0 clien t e a que estou atualmente conectado? Sim . Voce pede adicionar as palavras-chave clientspecified em qualquer inst ruc ao de Open SQL. Por exemplo, pa ra ler os dados no cliente 900, voce escreverie 0 seguinte codigc:
sele ct
o o
Exerd cio 1
As tabelas na figuras de 1.28 a 1.31 sao depe ndentes
Entretanro, voce deve saber que voce apenas faria isso se estivesse escrevendo urn p rograma de sistema. Isso nunca e feito em urn programa aplicativo; eles sempre devem ser independentes de client e. Se voce precisa rransmitir clados entre dois cliente s de producao, deve imp lernen rar a tran sferencia de dados via ALE .
OU
clienre?
Workshop
o Wo rkshop oferece duas mane iras de voce verificar 0 que aprendeu neste capjrulo. A Se!1aO T este oferece perguntas para ajudar a solidificar seu ente n dimente do cont eudo aborclado e a selSao Exercfcio permi re que voce pratique 0 que aprendeu. Vo ce pe de encon trar as respostas as perguntas do teste"e dos 'exerc fcios no Ape ndice B, "Resposras as perg untas e aos exercfcios".
"""""-~---40
'PREHD' E." DiAl AB "/4
- ...
41
Figura 1 30
': , . l ,
Sf
J,ftj
fIf
~".,
1.
g, ,:.i;"'4o .Ii
, ;; -
":~. <
Fig ura 1 29
Esto lobe/a e dependentt! au independente de
cliente?
Figura 1 31
~ -- - -.- _
.. . -._.
- -_ .
~~~-----------
Exibir uma tabela e seus conreados utili zando 0 Data Dictionary. Utilizar as instrucoes t ables e select. Encadear instrucoes urilizando
0
Antes de-Prosseg"uLli.Lr
Antes de prosseguir, voce dev e:
Senti r-se a vontade com uma linguagem de programacao como C, COBOL ou Visual Basic. Para aproveitar ao maximo este e rodos as capitulos seguinr es, voce deve tambem ret dais anos au mais de experiencia em desenvo lvimenro.
hllp:/Iwww.comput.eom. bt
....
s_~
_. ~-
..........
'W _
-~~' --.r
--
--
44
45
Configurar sua interface como recomendado no Dia I, na Se~ao "0 Inte rface Menu", se voce nao river feit o isso ate agora. Execurar 0 p roced imen ro de instalacao para as ScreenCams no CD-ROM. Esse procedimento esta descrito no arquivo rea dme . txt localizado no diret6 rio raiz do CD-ROM.
uma [erramenta de teste auxiliada por comp utador para regressgo de teste uma ferramenta de pesquisa de repositorio p ara encontrar objeros de desenvolvimento
0 Workbench Organi zer para registrar alteracoes em obj ecc s e promove -las na produclo
ltiMO r"
HOVO ...
Muitos dos procedimentos neste [ivrcs60 demonstrodos vtilecndc ScreenComs . ScreenComs s60 como filmes; elos mostram vmo sene de telcs . ind uinclo pressionomentos de tedo e movimenios de mouse, com umo norro~60 des critivo. Elos pcdem ser enccntrcdcs no CDROM que vern com este llvro . Vejo 0 orquivo readme. txt loca lizodo no diret6rio rulz do CO-ROM para mois Infcrrn ocoes.
I
/ ,
fxplora ndo
MOYO lit.. H~O
ombiente de desenvolvimento
e qualquer cclsc criodc por urn desenvclvedor.
Exem plos de objetos de dese nvo!vimento s50 programos, telcs, tcbelos, visuo1i ZQ ~6eS, estrvlvrcs, modelos de dod os, mensoge ns e includes .
Um ob jeto de desenvofvimento
Todos os objeros de desenvolvimemo sao portateis, 0 que signifiea que voce pod e copia -los de urn sistema do R/3 para outro. Is50 norrna lmenre efeico p ;;fa mover seus objeros do sistema de desenvolvimento para 0 sistema de producio. Se os sistemas de origem e de des tino es-se em sistemas operacionais diferentes ou utilizam sistemas de ban co de dados diferentes, seus objetos de desenvolvimemo executarao na Integra e sem qualqu er modificacao. Isso e verdadeiro para todas as plataformas suportadas pelo R/3. (p ara uma Iista de hardware e sist emas operacionais suportados, veja a Tabela 1.1.)
NY OO.... TIR.\IO ~ .
0 sistema do R/3 ccntem ferromentos para crier e testar objetos dedesenvclvimento. Essos ferromentos estoo locolizodos no R/3 Development Workbench. Perc ccesscr quolqu er ferromento de deseovclvlmentc , voce ir6 para workbench.
workbench contem as seguintes ferramentas para ajuda -lo a criar objetcs de desenvolvimemo:
Definind o relat6rios
ce digo -fonre do ABAP/ 4 e outros componenres de prcgrama 0 D ata D ict ionary onde voc e pede criar tabelas, est ruturas e visualiza~6 e s
o prop6sito de urn relat6rio eler dados a partir do ban co de dados e escreve -los. Ele consisre apenas em duas telas {veja a Figura 2.1) .
NOVO lrl.r.. TE~O "
echomo da tela de se/e~60 (seledion screen). Ela con tem campos de entrada que permitem 00 usu6rio inserir critertcs para 0 relot6rio. Po r exemplo, 0 relctoric pede pradu zir ume listo de vendee para urn dodo interva lo de dotes,
A prime ira tela
doABAP/4
A tela e menu pintores onde voce pode criar uma interface com usus ric para seus programas
0
TERO"
NOVO
h..
ABAP/4 Debugger
A tela de selecsc e opcional. Nem todos as relat 6r ios tern uma. Entretanto. todos os relat6rios geram uma Iista. Neste livro, voce aprende ra a criar programas de relat orio.
SQL
0 analisado r de tempo de execu~ao para otimiza~ao de desempenho do seu programa
.... 46
DlA 2,S UPR E IMEIRO PR G O RAMA EM A MP/.
AP"NDA EM21 DIAl ABAP/4
EW=>..-2L..Ll_ _ A tela de setecoc e a lela de soldo . Tela de selecee (pcnimetros de e ntra da )
liste [soldo do re lot6 rio) Soles Per Period '
r-
47
Se voce alterar 0 codigo-Ionre, 0 objero de tempo de execucao sera autom aticamente gerado novamente, na pr6xima vez que voce executar 0 programa .
D~-SCQbrim:lQ~ornpon.entes
de relat6rio
Os relat6rios do ABAP/4 con sisrem em cinco componentes (mostrados na Figura 2.2) ; 0 codlgc-Ionee
chomod a s intervalo de nome de elienfe. Pa ro os proqrc rnos. 0 Intervolo de nome de diente tem de dots a oilo corccteres de co mprime nto e nome do prog rarna de ve lnlcicr com a letro y ou z. A SAPreserve a s letros de a a x para sevs pr6prios progra mas.
NOVO.... URMO'-
Atributos
Dedique urn memento para esco lher urn identificador de tres co roderes especffic pa ro seus progromos. Deotro deste livre, farei refere ncio 0 esse o iden tificodor como sev handle . Ele deve comeccr com urn y ou z. Por exemplo, voce pode uftliaor 0 letro z seguido por sues duos iniciois. A notc ccc indicor6 o nd e voce deve utilizer seu hand le. Por exemplo, se voce escolhev zkg e viu 0 direr:;oo H Digite 0 nome de progrom o abc" voce digitar io zkgabc . Recomendo que, a medida que ovcnccr oeste livre, voce utilize seu hand le como os primeiros tres corode res de todos objetos de desenvo lvimento que voce criar . Se voce fleer isso, eles sereo f6ceis de reca nhecer ma is ta rde e mois f6ceis de lc coluor.
I
As convencces de atribuicao de nome de programa adctadas para este livre sao as seguintes: Programas de exemplo do texto de capirulos seguem a convencao ztxccnn , onde cc e 0 mimero de capfrulo e nn eurn numero sequencia] Somenre 0 c6digo-fonte e os componentes de atributo de programa sao exigidos. Os demais componentes sao opciona is. Todos os objetos de desenvolviment o e seus componentes sao armaze nados no banco de dado s do R/3 . Por exemplo, 0 codigo-fonte para urn reldtorio e armazenado na tabela dd010s do banco de dados. de 01 a 99. Nomes de p rograma ut ilizados em exercfcios seguem a convencao zt ycc nn,on de cc e0 mim ero de capftulo e nn eurn numero sequencial. nom e de programa para a solu;ao sera. zt zccnn.
'** c,
48
APiEN DA EM 21 Dl AS ABAP/ .
49
Programas utilirarios oferecidos no C D -ROM seguem a convencao de atribuicgo de nome y -xxxxxx, onde xn:xxx e 0 nome do utilitario.
programa de in stalacao que cria objetos d e desenvolv imento e os carregacom dad os pa ra a s exercfcios echamado y-s etup. Se necessaria, ele pode sec executado de n ovo a qualqu er mem ento para rest aurar a cond icao orizinal dos dados do exercfcio. Para remover [OdDS as objeros de desenvolvimenro e dadcs criados pelo program a de inst alacj o do siste ma, execute y- uninst. Veja
7. Di gire urn asterisco (*) no campo Application. 0 valor no campo Ap plication indic a a area do aplicarivo a que esse programs penence. A lista compleca de valores pod e ser obtida posicionando 0 cursor ness e campo e en tao danclo u rn clique na seta para baixo adireita dele. Po r exempl o, se esse pr ogram a perr encesse ao gerenciamento Inventory, voce colocaria urn L no campo App lication . C omo e urn pro grama simples de test e, uti lizei urn asteri sco para indi car que d e nao pertence a qualquer area especlfica do aplicativo. 8. Faca uma marca de selecf o na caixa de selecfc Editor Lock. Ativendo o Editor Lock, voce evitara alteracoes no programa per qualquer ou tra pessoa alem do criador . Para seus exercfcios, fa<,ia uma marca de selecac nessa caixa para proteger seus programas de modificacsc acidemal por ou tros. Enrretan to, voce ndo deve uti lizar isso para blo quear programas de desenvolvim en to reais. Esse recurso impedira que outros p rogramad ores facam a manu rencao depois . 9. Para salvar os atr ibutos de programa, pr essione 0 bo tac Save na barn de ferrame ntas Standard. A tela Create Object Catal og Entry e exibida. 10. Pressione 0 borao Local Obj ect. A tela de atributos do programa e reexib ida. Na barra de status na parte inferior da tela, a mensag em "Attribut es for pr ogram saved" aparece. (Nota: a mensagem que voce ve con tern 0 nom e do programa tamb ern, mas como esse nome varia para cada usuari o, ele foi deixado fora do texro deste livre. Essa con v en<.iac de deixar 0 nom e de obieto de desenvolviment o for a cia mensagem sera mantida ao longo de todo esre livrc.) 11. Pressione 0 batao Source Ccdena barra de [erramentas do aplicarivo. A tel. ABAP/4 Editor : Edit Program e exibida. 12. Escolha 0 caminho de menu Serrings- > Editor Mode . A tela Edito r: Settin gs e exibida. 13, Escolha 0 borao de 0P<,i3.0 PC Mode With Line Numbering. 14. Escolha 0 bota o de 0P<,iaOLower Case . 15. P ressioo e 0 bot ao C opy (a marca de selecso verde). Voce agora salvou suas configuracoes de edit or. (As configuracoes do edit or precisam 'ser configu raclas apenas uma vez.) 16, O llie na linha 1. Se ela nac contiver a mstru<,iao report 0201. , digite -a agora, com o mostrado na Listagem 2,1. 17.Nalinha2,digitewrite ' Hello SAP worl d '. Utilize aspas simples e coloque urn po nto no final da lin ha, 18. Pressione 0 botao Save na barra da ferram entas Stand ard.
----'-
que vern abaix c urria descricao d o processo que voce seguirf p ara criar urn programa. . Quando voce efetua logo n no R/ 3 para criar seu primeiro pr ograma em ABAP /4, a primeira tela que voce ve e 0 menu p rincipal da SAP. A partir dar, voce i.r.i para a Development Workbench e depois para a editor. Voce ira digitar urn nome de programa e cria-lo. A prim eira tela que voce vera sera a tela Program Attributes. Af voce deve inser ir os arributos de pro grama e salvd-los. Voce enuc teci permissdo para pros seguir para 0 editor de codi go-fcnte . N o editor de codigo -fonte, voce ici inserir o codigo-fonte, salvs-lo e entdo execurar o programa.
SCRHNW ~ lnicie a ScreenCom " Hew To Crea te Your First Proqrc m" ag ora.
Siga este procedimento para criar seu prim eiro programa. A ajuda para problemas comuns e oferecida no D iagn6 stico e Solu~ao de Problem as que se segue a ele. Se voce tiver problemas com qualquer urn dos passos , njio es que ~a de consultar esse procedim en to.
I. Do menu principal do R/3, sele cione
0
eexibida.
2. Press ione
botao do ABAP/4 Editor na barr a de ferrame ntas do aplicativo. 0 ABAP/4 Edi tor: Initial Screen e exibido.
0
I
I
3. No campo Program, digite 0 nome do pro grarna 0201. 4. Pressione 0 boreo Create. A tela ABAP/4: Program Attributes e exibida. a s campos que contem pontes de inre rrog acio sao exigidos . S. Digite My First ABAP/4 Progr am no camp o Tide. Po r padrao. 0 conr eudo desse campo apareceni no topo da lista, 6. Digite 1 no campo Type, a mimer o 1 in dica que 0 programa eurn relat 6rio .
--r"- --~~_;. .
50
51
19. Para exe cu ta r seu programa, escolha 0 caminho de menu Program- c-Execure. Urna tela com 0 titulo My First ABAP/4 Pro gram e exibida e as palavras Hello SAP world serao escritas embaixo dela. Essa e a safda do relatorio, tambem conhecida como lista.
Utiliza ndo a Editor' Initial Scree n A ABAF/4 Editor. InitialScreen emostrada na F igura 2.3. A partir dar,voce pode
exibir au alterar todos os componentes de programa. Par exemplo , para alterar 0 componente de ccdigo-font e, escolha a ba tao de op~ao Source Code e entac pressione 0 bene Change. Ou, para exibir 0 componente de atributos, escolha 0 batao de op~ao Attributes e entao pr essione 0 batao Display.
em ABAP/4
Pressicncr 0 botao Change exlbe 0 componente se lecionado no modo de olterc/iao, que cerm tte que voce c ltere 0 componente.
Imprimir lPrinl) locolizor (find) locoFizor 0 pr6lcimo(find Null Prtmelrc p6gino (fin.1 Page) P6gino onte rior (Previou Pagel s PrOximo p6gino (Next Pagel
Canceler (ConO!Q
Scir (Exit)
Vollar (Bode )
Parabens, voce acaba de escrever seu primeiro programa em ABAP/4! Para retomar 41.0 editor, pressione 0 batao de seta verde na bar ra de [erramentas Stan dard [ou a tecl a F3 ) .
Salvor (Sevel
Compo de comclF'ldo
S Cl z o Problema ~ n
0
Esses se c os prob lemas co mu ns e ncontrados no cricccc de urn prog ra ma e sue s respe ctivcs sc lucoes
Sol u!;oo
Voce digilou a nome e-rode de progromo . Seus names de progroma devem inicicr com y ou z. Pressione 0 bcteo Ccncel {a X e m vermelbol para retomc r e digitor um novo nome de progruma . Voce digitou a nome de progromo errcdc. Seus names de progromo devem inicior com y au z. Presslcne c boteo Cancel (0 X em verrnelhc] para retomor e digitar um novo nome de progromo. No Tela Create Object Catalog Entry, noo digite um vola r no compo de clcsse. Em vez dtsso , press ione 0 botoo local Object.
0 ...
C
'"
l>'
AD pressionor a batao Create, voce cbtem umo coixo de di610ga duende De Not Oecte Objects SAP Nom e Ronge.
Quonda voce pressiono 0 botcc C reol e, voce cbtem umo caixa de di610ga com urn ca mpo de enfrada que pede uma teclo.
j
1 1 I
.n
.'" ....
0
'"
0
Explo ra odo
"
'"
'" ~
Voce esto c btendo vmc tela Change Request Query pedinda um Request Number.
No Figura 2.3, note que a ccbc de grupo Object Components envolve bot6es de cpce c, a batao Display e botcc Change. Quando voce vir umo coixo de grupo envolvendo bot6es de op;oo e bctces (pushbutto n), os botoes de OPl;aO determincm a componenfe que ag iu sa bre os botces . (pushbutton) erwolvldcs. 0 efeilo des bctces de op<;oo llmitodc pelc cc ixo de grupe; eles 060 tem efeito em botces (pushbutto n) foro do ccbo.
Nesta se~ao, voce apre nders como subordinar e aprendeni a ut ilizar duas telas nesra secao. A ABAP/4 Ed itor: Initial Screen A tela ABA P/4 Editor: Edit Program
52
53
1 ,
' J
, '-
Exibi, < -> Alterer (Display <. > C Verificer (Check) Llstc circunstonciol (Where-used lisI) Pilhe (Stock) Linhe de inse n;oo (Insert line) Cortor (CUi)
Figura 2 5
II
....
. --'~""- ,
NW/4_
Os ccotrcles do barre de
ferrcmentos Standard
~'-do buffer pnsen" ' , bvf{e ~ porc o "~' ", Imerir From
EJgllra 2 4
.
'!. . 4
Uti ize a tela l ABAP/4 Ed itor: Edit Progrom para olterar Ivncionolidade de componenle.
..
'-_~r.llfJlx Q,1,a!:.
-- -- ,
.'
..:: .~,'
""'
"
~~. , .,~~',~~,.~ ~ " ""-,-;c.,~l-y. :r"iJ .'1., "!~-....a:-.l"i) .- w.~~> ,i~~""". -,-t";-"'-iff.<'5,Y' . ~1~-1;(~ ~4i-" "."'~""~ W~;;:;,.... . ~. -;;-.~;_::' '' :: ., ": .;;,< ,....~.....:-:5.- , :.:;:'!-.- :i~~ ::
Mu ito s desenvclvedo res ochom a interface com 0 usu6 rio do R/3 cc mple xc e porton to dlfkl l de oprender. Sugiro que vo ce cdote uma obordagem met6dica que Ihe permito fleer vontode com cede novo tela. Sempre que voce se deparar com uma novo te la. examine minuciosomente os itens de men u e bot ees. Comece no estremidcde superior esquerda da te lo e sigo para ba ixo e perc a direita . Mantenho o cursor sobre cod a ite m par tempo suficien te para ler a di ce de telo que a oco mp onha . Gos tor olguns minutes em codo novo telo 0 ojudar6 a se fa milia rizar com as fun c; e s dtspcofvets. 6
Enter: Pression ar 0 bon o Enter tern 0 mesmo efeito que pre ssionar a t ecla Enter. E tambem a funS-ao de divisao de lin ha. P ara dividir uma linha de c6digo, posicione a cursor no ponto on devoce quer dividir a linha e pre ssione Enter. C om man d Fi eld: Esse campo aceita codigos de tr ansaci o e vari es outros comandos . Back e Exit: Os dois levam 0 usuario de volta aABAP / 4 Editor: Initial Screen . Se-nao river salvo as alteracoe s, vo ce ser a solicitado a salvd-las.
C anc el: Leva a usudrio de volta aABAP/4 Editor: Ini tial Screen' sem salvar suas alteracoes. Se voce nao river salvo as alteracc es, voce sera solicitado a fazer isso. Print: Esse coman do imp rimirf a c6di go-fon te de seu programa. Quando voce 0 pressi ona, a tela Print P arameters eexibida. Para recebe r sua saida, cenifique-se de que a caixa de seles-ao Print Immed. esta ativada.
Find: Proporciona pesquisa e subsrieui a funci ooalidade. Quando voce o pression a, a tela de Search/Replac e emo strada. Uma explicacio mais detalhada segu e abaixo. Find.Next: Esse eum atalhc amao pa ra localizar a proxima ocorrenci a de uma string. Firs t Page , Previous Page, N ext P age e Last P age: Esses comandos permitem que voce role para cima e para baixo p elo c6digo-fome. H elp : Exibe uma caixa de diilogo a partir da qual voce pode obter ajuda sabre 0 ed itor e a sintax e do ABAP/4, ent re outras ccis as. Posicion e o cu rsor em uma palavra-chave do ABAP/ 4 ou em uma linha em branco an tes de pressionar 0 botao H elp. Para mais informacoe s, veja a seS-ao intirulada "Obtendo ajuda" ma is adianre oeste capitulo.
as co m ro les de barra de ferramentas Standard sao most rados na Figura 2.5. Os _ cont roles de barre de ferrarnentas Standard (veja a Figura 2.3), na ordem, sao :
54
55
IFa~a
Solve seu progro mo ante s de digitor urn cc mc ndo /n no cam po de cc rncnd o. Coso cootrone , voce perc/ere sue s clte rcco es. Nee feche a ic nelo de edito r presslcnc odc a bctcc X no extremidode superior direlto do jonelo. Voce perder6 as clte rccoes n60
salvos.
Para executar uma pesquisa co m curingas, utilize os caracre res + e " , o sin al + corr esponderf com qualquer caractere unico e 0 sinal '" corresponde d . com qualque r st rin g de caracteres. Ent retan to, '" so mente pode ser ut iliz adc como um curinga no comeco a u no fina l de uma string; dent ro do corpo d e uma string ele na c age como urn curinga. Por exem plo, a string de pesquisa wo+d loc alizard w ord ou wood; a st rin g j ++n corresp on dera co m joh n ou joan , mas njio jan. E van localizara ia n, joan ou ate an. Uma ve z que " inc or porad c dentro de uma str ing na o age como urn curinga, para localizar a string select '" from, digire simplesmente sel ect'" f rom. Nore que uma string que tern * no corneco a u final produz as mesmos resul tad os que a mesma String sem 0 *; 0 curinga '" portanto nae e particularmente {nil. _. : : sao caracteres esp eciais. Se sua string inicia corn quaisquer desses carac teres, voce deve envc lve-los dentro de delimitadore s. Voce pode esc olher qual que r urn desses mesmos caracteres para urn delimirador con tanto que ele nao apare~a dentro de sua strin g de pesquisa. Por exemplo, : hh com eca com urn caractere espe cial. P ara localizar essa suing,di gite -:hh-ou .:hh. ou , : hh ou ; :hh; . 0 caractere # tambem e especial. Para localizar uma strin g que contem # em qual qu er lugar dentro dele . voce deve subs tituir II par cada urn
# que ocoere na string. Por exemplo , para localizar a string alb, utilize a string-de pesqui sa all b .
IIrrrrrr..
Pression e 0 botac F in d na barra de [erramenras Standard e 0 sistema exibira a tela Search/Replace (veja a Figura 2.6). Insira a string que voce quer lc caliza r no campo Fi nd.
F igu ra 2 6
Etta e a tela
Seon:~/Reploce.
Bo
de coroctere em sec
progromo.
lnide
Para configurar
siga est es passo s: 1. Na tela Sear ch/Replace, digite a string qu e voce qu er localizar no
processo de localizacjo:
campo Find.
A s a String fad. com que sua string seja localizada em qualquer lu gar no program a. A s a Word [ocalizara ape nas casas em qu e espaccs em bran co ou p onruacao envo lvem a pa lavra dentro do codigo-fonte . U pp er/Lower C ase fara a pesquisa dif erenciar letras mai usculas de min usculas.
2. Escolha 0 botio de opc;ao In C urrent Source Code. 3 . E scolha a bono de op~ao Fro Cursor para comecar a pesquisa na posicic arual de cu rso r. Altemativam ente, voce pode escolher 0 botao
de opcao Fro m Line e digitar pa ra a p esqm sa.
05
4. P ressione
I !
Para pes quisar uma strin g que con tern espacos em br anco inco rporados, sim plesmente digite a string junto co m as espacos em branco no cam po Find. N ao cc loqu e a String entre aspas. Se fizer isso, as aspas serao con sideradas parte cia string de pesquisa.
0 bon o C o ntinu e. 0 cursor e co locado a esq ue rda da primeira st ring de coincidencia. 5. Pressione 0 pr6xim o botao Fi nd pa ra localizar a p roxim a string de coincidencia.
IIrrrrrr..
\CRENCAM E JI""
,I
56
APRENDA EM 21 DIAl ABAP/4
'W'
- . -- ..
57
Para localizar todas as ocorrencias de uma string: 1. Na tela Search/Replace, digite a string que voce quer localizar no campo Find. 2. Escolha
0
3. Press ione a batao Continue. Urn resumo das ocorrencias localizadas eexibido na tela Global Search In Programs.
5. Pressione
grams.
6. P ression e 0 botao Back mais uma vez para retornar ao editor de codigo -fonte.
S(mHCAM~ lnkle a SereenCom "How to Search and Replace in the Source Code" ogara.
Para localiz ar e substituir no codigo-fonte. 1. Na tela Search/Replace, digite a string que voce quer localizar no campo F ind. 2. Paca uma marca de seleliao ern Replace By e digire uma string de substituicao no campo Replace by. 3. Pressione 0 bouo Continue. A tela ABAP / 4 Editor: Edit Program e exibida com 0 cursor pcsicionado a esquerda da proxima string coincidente. 4. Para subsr itu i-la, pre ssione 0 botso Replace. A string n a posicao de curso r e subs titufda e 0 cursor e posicionado na p roxima string coincidente. 5. Para ir para a proxim a posicio sem substituir, pressiona 0 bone Next H it. 0 cursor e p osieionado na pr6xima string coincidente. 6. Para substituir todas as coincidencias restantes da posicao do cursor atua] para 0 fim do cod igo-fonte, pressione 0 borso de No Confirmation.
S(mNCAM~ lnicie a ScreenCom "How to Seor ch and Replace Via a Summary Screen" agora .
Antes de prosseguir, maximize sua janela (se ela ja nao esciver maximizada). Voce nao .pode ver os botoes na extremidade direita da barra de ferramentas Application se sua janela for menor que 0 tamanh o maximo. Os con troles de berra de ferramentas Application sao m ostrados na Figura 2.7.
Figura 2 7
Para pesq uisar e substituir via uma tela de resume: 1. Na tela Search/Replace. digite a string que voce quer localizar no campo F ind. 2. Faca ~~a marca de selecsc em Replace By e digite uma string de substituicac no campo Replace by.
~ ~
---~www_
_.
........ ....- _
58
59
urna linha com a linha seguinte. Para dividir uma [inha, posicione 0 cursor onde voce quer que a divisao ocorra e pressione a tecla Enter. Duplicate Line: D uplic a uma unica linha au urn bloco in teiro de c6digo se urn est iver seleciona do {veja 0 botao Select, acima}.
D isplay < -> C han ge: Altera a tela de modo de exibicao para mudar o mo do . Pressio n e-a novamente para altera -la de volta ao modo de
exibicao.
Check: Verifiea a sintaxe do pr ograma atual. Where-Used List : Q uando voce pressiona esse botao enq uamo 0 cursor esta em qualquer nome de varifvel, ele exibird rodas as linhas
de c6digo que a utilizam. Stack: Exibe 0 conteudo cia pilha de navegacao atual.
Cut: Exclui a linha que contem
0
Move Line: Move linhas a esquerda e a direi ra. P ara mover uma Iinha, coloque a cursor na posicao de destine e pr essione 0 bcrao Move Line. Para mover urn bloco inteiro de cc digc, marque 0 bloco e cola que 0 cursor na primeira Iinha do bloco na posicxo para a qual de deve ser mo vidc e entao pressione 0 botao Move Line. Para move-lo para a esquerda, coloque 0 curs or aesquerda no comecc cialinha e pressione a borao Move Line. Mark Line: Co loque urn bookmark em uma Iinha . Voce po de exibir todas as linh as marcadas com 0 cami nho de menu Goto -> Markers.
;I I , I
cursor para
o buffer.
Ins er t From Buffer: Ins ere 0 conteudo do buffer ern uma nova linha acima cia p osi<;ao de cu rsor atua]. Insert Line: In sere uma linh a em branco acima da posi csc atual do curs or. Select: Selecion a um a unica linha ou urn bloco de Iinhas para mover, conn e colar. Coloque a cursor na primeira linha do bloeo e pressione Select. C ola que 0 cursor na ultima linha do bloeo e pressione Select n ovamente. A s linh as contidas no bloeo se romarao ver m elhas. Voce po de agora cortar, co piar ou duplicar 0 bloco de codigo da mesma maneira que voce fez para uma unic a linha. Para tirar a selecao das Iinh as selecionadas, escolha 0 caminho de menu Edit- c-Deselect . U n do: In verte sua ultima variavel. Somenre urn nfvel de desfazer este
Para trozer uma linha para a tope do [onelu do ed itor,de urn clique duple entre as polcvrcs ov no final do linha . Mas n60 de um clique duplo em umo polovrc, isso n60 funcio nor6. Um metcdo alternative e colocor c cursor no fina l de umo linho e pressionor a teclo F2.
I ,
N~ mai oria dos aplicativos Windows, ha u ma area de transferencia para operacoes de cortar e colar . No RJ3 , h.1 cinco areas de t ransfere ncias. ATabela 2.1
descreve codas elas.
disponfvel.
ABAP /4 He lp: Oferece ajuda sabre geral.
0
editor e sobre
ABAP/4 em
o Buffer
as Buffers X ,Y,Z
P att ern : Pe rmire que voce digire uma instrucao ABAP/4 gerada automa ricam ente. P or exem plc, para inserir uma instrucfo write qu e escr eve do coneeu do de uma variavel identificada vt, pressione o bo tao P attern, escolha a botao de opcac W rite, pressione a batao Continue, dig ite 0 nome de va riavel no campo Fld e enn c pressione o batao Copy. Uma inst ru cao write sera inserida na posicao de cursor atua l. Concatenate: Une duas linhas . Para utilizd-lo, coloque 0 cursor no final de uma linha e pressione 0 batao Concatenate para concatenar
Area de
trcnslerenoc
R/3
-:
_
60 ,
AP RENDA EM 21 ClASAB AP/ 4
- R/3 e outro
opllc oftvos
'!='
'!'!'
61
Tabela 2 .1 Confinuoc;60
Chama d o Como Copia r para e re Como Colo r a partir de le
Ceminho de menu : Block/Buffer- > Insert from Clipboard para inserir as ccnteedcs do area de trcnsjerenclc como linhos novas no progromo no pos iCioO do cursor. Ou Orl+V perc color no topo dos linhos exlstentes. Com Ctrl+V, as dodos seroo truncodos se tod os eles noo se o justc rem no tela
ofvcl. - coplc e c6d igo do c jv dc F1
ou para a esqu erda (voce apenas pede destacar uma linha par vel. utilizan do esse metodo). Para dest acar mul tiplas linhas, de urn clique rnais um a vez na tela com 0 mouse e entao pressio ne C trl + Y. 0 ponteiro mud ara para a forma de uma cruz . Arraste a cru z para desracar a secac que voce quer copier. Pre ssione Crrl + C para copiar 0 texto dest acado para a area de transferencia ou pressione Ctrl + X para cortaro Cole da area de rrans ferenc ia utilizando Cr rl + V.
1,
d
I
I!
I
I
I
Escolha a caminho de me nu Help- >Exte nde d He lp. Coloqoe 0 cursor em umc pc lovro-chcve dentro da c6digo e pressione Fl .
1- De um clique
pora
ed itor
I I
. N a primeira linha da T abela 2.2 esta 0 buffer especffico do programa, simplesmenre chamado buffer. Ele permite que voc e copie demro de urn pro gra~a. Para ut iliza-lo, coloqu e 0 cursor em um a linha au marq ue urn bloco e preSSlOne as bot oes C ut, Copy ou Insert Fr om Buffer . 0 conteddc do buffer e perdido quando voce deixa a editor. as bu ffe:~ X, Y e Z sao utilizados para copia r c6digo de urn pro grama pa ra D Utro . U tilize a menu Block/Buffer para acessa-lo s. Embora eles tenham tres buffers separad os, tc dos eles sao utilizados da mesma mane ira. Seus cont ea dos sao retidos dep cis qu e voce deixa 0 editor, mas d es sao pe rdidos quando voce efeeua 0 logoff . A area de tran sferen cia ea m esma que a area de transferenci a do Windows. Utilize-a para cort ar e colar em outros aplicarivos do Win dows como 0 MSWord au 0 Bloco de Notas. Ela tamb em e utilizada para eop iar texto de telas de ajuda Pt [veja a seguime sefSao int irulada "Obtendo ajuda") . Alem dos bo tc es na barra de ferramentas Ap plication e as menus, voce pode urilizar func oes Windows padrac para execurar opera!;oes de cortar e colar. Para destacar uma palavra ou linha, arcaste a cursor atraves dela ou mamenha pressionada a tec1a Shift e pressione as tec1as de seta pa ra a direita
F9 (seleciona) . Entoo coloque -o na ultimo hnhc do bloco e pressione F9 no vornente. Seledone 0 bloco e press ione 0 bctc o Cut.
Pressicn e
0
( ,-
r
I: i I,
Posicione 0 cc rsc rno ponto de divisoo e presstcne a tedo Ente r. Posicicne 0 cursor no tim do linho e presslone 0 botoc Concat enate. Morque urn bloco . Pressicne 0 bctcc Copy To Buffer. Entoa posicione 0 cursor no ponto o nde 0 c6d igo devere se r inserido e p ressio ne 0 botoo Insert From Buffer.
.'
7Z
63
Tabela 2 .2 Ccnnnoccec
Para...
Copter as Iinhas perc o utro programo
FOlj o
FOlja...
Marque um bloco . Escolha a cominha de menu BlockiBuffer->Copy to buffer X. Abro urn novo progroma e escolhc 0 eom inho de me nu Block/Buffer-> Insert Xbuffer. (Voce tcmbem pode utilizer os buffers Y e Z do mesma ma ne iro.) Marque urn blocc. Esco!ho a eom inho de menu Block/Buffer- >Copy to the clipboard. Entao escolho cominho de men u Block/Buffer-> Insert clipboard. Marque um bloco e escol ho 0 comi nho de menu BlocklBuffer->lnsert com me nt. Ma rque um bloc o e escolho 0 caminho de menu Block/Buffer->Delete comment. Pressione
0
cominho de
menu Proqrcrn-c-SoveAs.
Iniciondo em quo lque r tela, cbro umo novo [cnelc que utilizQ 0 com inho de men u Systern-c-Creote ne w session. No novo jcnelc , ...6 para ABM/4 Ed itor: Initia l Screen,
insirc
0
bc tco Display or Chonge. Compara r dois progromos diferentes Do ABAP/4 Editor: lnitlol Scree n, escolhc 0 cc mlnho de menu Utilities->Splitscreen ed itor. lnsiro dais names de
crcqrcrnc e pressione 0 bata o Display. Para exlblr a
sabre um blccc de linhos Remover 0 coment6rio de um blccc de linhcs Imprimir seu progromo Imprimir sua scldc do progromo
botco Print.
0
primeirc dderencc , pressione a ba tao Next Diffe re nce . Para cltnhcr as dais prog ram as nc prOxima linho ldermcc, press ione 0 botcc Alig n. Da ABAP/4 Editor: Initial Scree n, escclh o 0 comj~ho de menu Utilities->Splits:::reen ed itor . Presslooe 0 botao Compore Dift Systems. Insira dois nomes de prog ro ma e urn id de sistema e presslone 0 bctoc Display. De dentro do editor, escolha a caminho de menu Progrom-> Generote ve rsion. 0 prog roma otuol e sclvc ' no ba nco de dodos do ve rseo . Da tela Editor Initial, escolho 0 cami nho Utilities ->Version management . A te la Versions Of Object Of Type REPS ~ exlbldc . Tire 0 sele ce c do verseo ctivc e Ieee umo marco de setecec no verseo 0 resta urar. Pressione 0 bctec Retrieve e e ntco pressicne 0 botoo Bock. Clique em Yes e a versec atual tomo-se a geroc;eo -1 e uma c6pia do ve rsec se lecionodo tomo-se a versec at ual. A partir do tela Initial Editor, escclh c 0 cominho de men u Utilities - c-Ve rslon monagement. A tela Versions Of Object Of Type REPS e exibido. fo cc uma marco de se'ecec nos vers6 es que voce q uer cc mpc rc r e pressione 0 batao Compare . A tela Com pe re Programs: All e exlbidc . Role para ba ixo para visualizer as diferenccs. Escolho o cominho de menu Prog rom- > Print. No pr6ximo tela , especifique umo impressora e foc;o uma marco de se le1;ao no coixo de se lec;ao Print lmmed.
lccchrcr e repetir a
loeo lizoo Mudor 0 c6digo poro a esquerde e perc a direita
Presslcne as bo f6es Find e Find Next. Co loque 0 cursor no linho a ser rncvidc, no coluna que voce quer mcve-lo. Entao press ione 0 bcteo Move line (F6). Para mover um blccc, pcsicicne 0 cursor no primeira linho e entcc presslcne 0 bo tec Move line. Pressione Escolha Escolha
0 0
Desfazer a ultimo vcricvel Formotor automotieamente o c6d igo -fonte Fazer download de um progromo poro urn arquivo em seu PC Fazer upload de urn progromo de urn arquivo em seu PC Solver umo e6pia ternpcrcric de seu programo Recuperor 0 c6p ia tempor6rio de seu progroma Puler diretomente paro editor Copiar um progroma Renomeor um programo
0
Escolhc
Escolho 0 co minho de menu Program->Sove Temp . A c6pio te mpo r6ria e exd uido q uando voc e sa lvo a prog romo . Escolha 0 caminho de menu Prog rom->Get Temp . Version. Voce pede recuperor a c6p io sclvc de quolquer nume rc de vezes cte qu: voce solve 0 progromo. De qualquer tela , digite / nse38 no compo de eomando e pressione Enter. Do ABAP/4 Editor: Initiol Screen, esc o lha menu Progrom->Copy. Do ABAP/4 Editor: Initia l Scree n, esc olho men u Prog rom->Renome.
0
cominho de caminho de
64
65
I.
2. Escolha 0 caminho de menu Help-s-Extended Help. A tela SAP RJ3 Help e exibida. 3. D e urn clique no tex ro ABAP!4 Editor. A tela BC ABAP/4 D evelopmentWo rkbench To ols e exibida. 4. De urn clique em qualquer rexto sublinhado para ob eer ajuda sobre esse t6p ico.
Dentro da ajuda ha frequentemen re exemplos de co digo. Para cortar e cola-lo s em seu programs, pressione Cu-l + Y e entac marque urn bloco de ccdigo, arrastando 0 cu rsor arraves dele a part ir da extrernidade superior esqu erda para a ext remidade inferio r direita. Deixe 0 mouse e pressione Ctrl + C . Pressione 0 bo tao Back par a reromar ate1aABAP/4 Editor : Ed itPrograrn e cole em seu programa utilizando Block/Buffer-> Insert Clipboard. au voce pode colar na parte superiorde seu c6digo utilizan do Crrl + V. (Ctrl + V nao cola na origem) mas na tela , encso isso nao colard na part e inferior da pdgina
vislvel.}
ABAP/4.
He dots tipos b6sicos de c judo no editor, 0 oiudo Fl eo oiudo R/3 Ubrory. A civdo Fl tc mbem e conhecido como documenlo.:;60 de pelovros-chove do
. 'A a;.u.da F1 desc reve a sintaxe de palavras-chave do ABAP/4 e da exemplos de sua utilizacao. Ela e baseada em texto e reside em tabelas dentro d o banco de dados do R!3. A ajuda R/3 Library e muito mais exrensa e contem visoes gerais e procedim entos para criar objet os de desenvolvimento. Ela euma ajuda baseada no Windows e reside fora do banco de clados do R/3. normalmente em um CD-ROM.
e exibida.
4. Daqui voce pode ob eer ajuda detalhada em qua se qualquer aspecto de programacic em ABAP/4. De urn clique no tema sobre 0 qual voce qu er ajuda. . Adicionalmente, a ajuda pode ser obtida do A BAP/ 4 Editor: Initial Screen. Para visualiza-la:
co ntem exemplos
eexibida.
1. va para a ABAP/4 Editor: Initial Screen. 2. Escolha 0 caminho de menu Utilities - >ABAP/ 4 key word doc. A tela Display Structure: ABAP/4_SAP's 4GL Pro gram Language e exibida. 3. Pressione 0 batao Find na barre de ferramen tas Application. A tela . Search Chapter Titles e exibida. 4. Digire 0 texto que voce quer localizar n o campo Find.
5. P ressione 0 bouo Continue. A primeira linha que contem esse texto e destacada. 6. De urn clique duplo na linha destacada para exibir mais informacoes ou pressione 0 botao Continue Search na bar ra de [erramentas Standard para localizar a proxima ocorrencia. A ajuda tamb em pode ser obtida de denrro do editor enq uanto voce esta editando 0 codigo-fonte. Escolha 0 caminho de menu U tilities->Help on. Aqui, voce pode obter os seguintes tipos de ajuda:
Den no .da ajuda FI, as palavras destacadas sao vfnculos de hipertexro. Dando urn clique n elas, voce ob tem mais informacoes.
Voce pede utilizer 0 utilit6rio Findlt no CD RO M pore localizer ma is exemplos de c6d igo.
66
67
Aj uda do editor Visso geral do ABAP/4 Pa!avra-chave do ABAP/4 Novas recu rsos da linguagem ABAP/4 Exibir modules de funlSao Exibir estruturas de rabela
Se voce estiver procurando urn programa e souber os primeiros caracreres de seunome, poderalocalizs-lo a partirdeABAP/4 Editor. Initial Screen. Parafazer isso:
1. Va para a AJ3AP/4 Editor: Initial Screen. 2. N o campo Program, digite os primeiros caracreres de seu nome de
pr ograma seguidos par urn asterisco. Por exemplo, para exibir eodos os programas que comecam com z tx , digire ztx *. 3. De urn clique na seta para baixo a direita do campo Pr ogram. A tela Programs e exlbida. Urna Iista de nom es de programas coinciden tes aparece nesta tela:A direita de cada no me de programa esn a descricso Shan dos atributos de programs. 4. D e urn clique du plo n o nome do prog rama que voce quer editar. A ABAP/4 Editor: Initial Screen e exibida e 0 no me do programa em que voce deu um clique duplo apar ece no campo P rogram.
Introduzind o
Para exibir todos as objero s de desenvolvimento que voce criou no sis tema RJ3 :
mllo r
NOYO""""
.de dodos. Pore utilizer 0 ODIC, voce ped e crier e annozenor cb jetcs como tcbelcs .
a RJ3 Doto Dictionary lou ODIC pera obrevcf eum utilitOrio para definirobjetos
i, DOl tela ABAP/4 Development Workbench, pressione 0 bono Object Browser. A Object Browser: Ini tial Screen
e exibida.
2. Escolha
3. Pressione 0 bon o Display. A tela Object Browser: Development Class $TMP e exibida. Aq~i voce veri uma lista de categorias de
objero de desenvolvimento. A esquerda de cada categoria hi urn sinal de adi!fao. 4. De urn clique em urn sinal de adi!fao para expandir 0 n6 . 5. De urn clique duple em Urn nome de objeto para exibi-lo . Se o objero em que voce deu urn clique duple era urn programa, uma visualizacao em arvore do p rograma e de seus componentes e exibida. 6. Para exibir 0 c6d ige-fonte de programa, de urn clique duple no nome do prog rams na parte superior da more. A tela ABAP/4 Editor: Display Program e exibida. Voce esta agora no modo de exibicio no obje to selecionado. Voce pede press ionar 0 bone Displ ay < -> Change para alrernar no modo de edi~ao.
Esse metodc somente funciona com cb jetos que forom selves como cbjetos lcc cis. Eles seroc exlbidcs cq ul somente se voce tiver pressionodo 0 bctoo locol Ob ject no telc Creote Object Cotolog Entry quondo voce crlcu 0 c bjeto.
1. Va para a tela do ABAP/4 Development Wo rkben ch. 2. Pressione 0 botao ABAP/ 4 Dicti onary na barra de [err am en ta s Standard . A Dictionary: InitialScreen eexibida, como mo strad o na Figura2.8.
H lll... OYO fiRMO
0 ODIC estc dentro d o sistema Rl3 . Voce pe de pensa r nele como estondo ocima de urn banco de dodos como Orocle ou lnformix e ogindo como um co ntrcle remote, qu e gero e envin jnstrucces de SO Lpa ra ele. Por exernolc , voce pode crier umo de finio de fobelo no ODIC. Qua ndo voce ativa a definit;oo de to belc , as instrut;6e s de SQl soc gerado s e enviodas pa ra 0 ROBMS, fozendo co m que ele erie 0 tobelo ree l no ba nco de dodos. Quondo quiser mcdficc r 0 ta bela, voce deve mcdificcr a defini<;6 0 de tobelo no ODIC. O ucndo ctivor a tobelo novcmente, mois SOL e gerodo, fozendo coni que 0 ROBMS modifique a tcbelc.
Fa~a
Noo rncdifiqve urno tcbelc ou quo lquer co iso no nlvel de ROBMS. A definit;oo Dote Dicncnc ry nco pede atua lizor a si pr6prio e elc este ro fo ra de sincronio com 0 banco de dodos. lssc pede cou sar erros de c plkctivc e ate lever 0 urno perdo de integrida de do s do dos.
"..- .,,, "'- ... ~_..__.._ ..._ .... .... ..._ ....... '"..._ _ _ P
:w:o
... , . _
...-~----------------------------~-
68
69
fig ur e 2 8
.':' 4'
A Dictionary:Initiol
. ~'"
. ..-'.
Screen.
i,.o
-. I
~ 0
. .c,,,,
F i g ur a 2 9
.> }.
Estritam en te falando, uma estrurura e algo que 56 existe dentro do R/3 Data Dictionary. Se visse a palavra estrutura , voce imediatamenre pensaria na "est ru rura de DDIC", Entretanro, a docum entacio da SAP ut iliza tambem a palavra estrutura"para referir-s e a u rn grup o de varidveis dentro de urn programa. A estrutura ema re emostrada na Figu ra 2.10 como urn exemplo de como uma estrutura ap arece n o DDIC.
Fi g ur a 2 10
Uma tabela armazena dad os persist entes. Ern outras palavras, se voce coloca dados em uma tabela, e1es permanecem ai depois que seu programa finalizar. Eles permanece rao ate serem ahera dos a u exclufdcs par seu pro grama a u curro. 0 n ome de um a tabela eunico dentro do sistema R/3 inteiro. Quando voce olha u ma tabe1a no DD IC , esta visualizando a descricto de uma tabela no banco de dad os subja cen te. Voce nao esta olhando diretament e a pr6p ria tabela de banco de dados. A Figura 2.9 mostra como u ma definicao de tab ela aparece no R/3 DDIC.
A defjnit;dode ODIC
para 00 eslrvturo
emora.
NOYO ....
lIiMO"
No R/3 vmc estrutvro e urno descrit;60 de urn g ropo de compos. Elc descreve os nomes de compo, suo seq uencia e sees tipos e comprimentos de dodos. Ce do esmnurc fern urn nome q ue e c nicc dentro do sistema inteiro do R/3. Umo estrufuro nCio pede ter 0 mesmo nome que umo tc belo.
Urn nom e de estrutu ra pede ser utilizado de du as maneiras: Em urn prog rams, urn n ome de estrutura pede ser utilizado par a alocar mem oria pa.ra urn grop e de campos. Em uma tabela, urn nom e de estrurura pode ser utilizado p ara descrev et urn conjunto de campos.
4az::;:
cc;:_~
."' -
70
71
No R/3, tabelas e estruturassao definidas no DDIC. Voce no tara entretanto, quando as visualiza, ha uma diferenca muito peguena entre elas. Isso e porgue, no RJ3, uma tabela esomente uma descripio de uma tabela real de banco de dados. E a estruturada tabelano banco de dados. Entao, tanto tabelas como estruturas dentro do DDIC defin em urn layout - uma serie de campos. A diferenca principal entre as duas eque uma tabela tern uma outra subjacente de banco de dados associada a ela. VIDa estrutura rdo tern, Algumas pessoas, as vezes, acham a documenrac ao do R/ 3 confuse, uma vez que a SAP ocasionalrnente utiliza esses dais termos int ercambiavelrnent e.
E.ig ll r g 2 1 1
Nco deixe em bronco 0 cc rnpc Maximum No. Of Hitspara exibir todos a s registros, 0 menos que voce reolmente pretendo procurar no listo Inteirc. Para tobelos grondes, isso pode conwrnir muito CPU nos dois boncos de dodos e servidores de op licativo, clem de tombem ovme ntc r significativamente 0 tr6fego no rede, fer nando ossim a sistema le oto. Se um relotcrlo multo grande fo r necessaria, em gem ! ele deve se r executodo em lote. A obo rdoge m preferida e estreitc r suo pesq uisa , digita ndo volores nos cam pos Doto Browser; Table: Selection Screen. Isso sera a bordado em deto lhe em capitulos posteriores.
r-ra II-!
1_ _
!
[ olt
""' _ ~ .$""'"
1IftI " , -
.-
<.
-: :,;,
.. . . .._I<!Oj"l "
'
,
"
'.
1~
Data Dictionary, nao a tabela real de banco de dados. No R/3 , apenas a estrutura da tabela pode ser definid a, jun to com alguns atributos com o os campos de chave primaria.
l~ .,
1. Va para a tela Dictionary: Table/Structure: Display Fields. 2. Escolha a caminho de menu Utilitie s-s-Table contents . A Da ta Browser: Table : Selection Screen eexibida. 3. Para exibir todas as linhas na tabela, pressione 0 botao Execute sem inserir qualquer crirerio de pesquisa. A tela Da ta Browser : Tab le Select Entries e exibida (vejn a Figura 2.11).
o numerc de registros 'exibido eIirnitado peIo valor no campo Maximum No. Of H its na Data Browser: Tab le: Selection Screen.
72 APR ~NOA ~M
I
21 DIAS
ABAP/~
DIA7: seuPRIMflR R G OP O RAMA ~M ABAP/4 ,
73
Vll
---,---,
V12
V2 VJ
V4
tn
VI
a seguinre c6d igo mostra a sintaxe simplificada para a insrru cdo se l ect:
select .. from tl (i nt o 11'0] (w here f l op vI and/or 12 op v2 .. .J [order by f l] . (other abap/4 s t at em s) ent endselect.
YO
V7
va
V9
onde:
"
ENTRAOA~
* indica que todo s os campos na rabela devem ser recuperados. tl ~ 0 nome deuma tab ela previarnenre definida em uma instrucio tabl es.
11 e a nome de urn campo na rabela t l , ~p eurn dos seguin tes operadores logicos: = v1 e urn literal ou um a variavel. and/or e uma palavra and a u uma palavra or.
Lf a1 e 0 to belc-mestre do fa brico nte no R/3. Zt xl f al foi criodo pelc rotina de configuro~60 de CD-ROM e e se me lha nte a 1fa l, mas e utilizado poro as exercicios neste livre. com po 1i fnr 0 ccm po de n c rnerc de fobriconte .
ANAlIS~ ~ Esse progr~mo Iefodos as reg isiros detobelo zt xl fa l e escreve a contecdc do compo 1 i fnr (0 ncme ro do fob riconte ) em o rdem crescente.
Na Iinha 1, a instrucao report esolicitada como a primeira linha de urn relar6rio. 0202. Digite 0 c6diga como N a linha 2, a instrucao tables faz a~ duas coisas. Primeiro, ela aIoca uma area de mem6ria (chamada area de t ra balho) ide nt ificada ztx l f al. A area de trabalho tern a mesmo layout qu e a definicao de DDIC de rabela ztxlfa l. Segundo, ela da acesso ao p rograms para a tabela de banco de dados ztxlfal. Na linha 3, a insrrucao sel ect comeca urn loop . A endsel ect na linha 5 marca 0 fim do loop. As linhas de c6digo entre se 1ect e endse1ect sao executadas uma vez para cada linha retornada do banco de dad os. Na linha 4, a instrucfo write e executada uma vez para cada linh a que elida da tabe la.A / (barra) depois de wri te corn e~a uma nova linha. N ote que em seu programa, voce tern duas co isas identificadas como ztx lfal: uma area de trabalbo e uma tabela. A du as te rri 0 mesmo nome zt xl fa I. A pcsicao do name ztxl fal denrro de uma inst rucdo de termina aqual voce se refere. Na lin ha 3, a primeira ocorrencia de zt xlfal se refere a rabe1a de banco de clados. A segunda ocorrencia refere-se a area de trabalho.
,,
, ;!
i!
I
1- report ztx0202. 2 tables ztxlfal. 3 set ect .. f rom ztxl fill into ztxl fal order by 1ifnr . 4 write / ztxlfal -lifnr . 5 endselect.
SAioA~
I
E "
I
1020
1030
1040
1050
I ,
_ .J.;,
74
75
lVI
1. Pressionar Page Down [az com que uma soliciracfo seja enviada do SAPGUI para 0 dispatcher DO servidor de aplicacivo para obter a proxima pdgina de saida a partir de ztx0202.
0 primeiro processo de trab alb o disponivel. 3. 0 contexte de usuario e a area de rolagem para ztx0202 sao deslocados para 0 processo de trabalho.
2. A solicicacao
e despachada
para
disponfvel.
3.
4. 0 prog rama
0 servidor de apresentacao. 5. A area de rolagem t: 0 contexte de usuario sao deslcca dc s para fora do processo de trabalho .
5. 0 processo de trabalho aloca uma area de rolagem para armazenar as variaveis do program a, 0 ponteiro atua l de programa e as alocacoes privadas de mem oria.
Figura 2 12
Esto e 0 moneiro
como a ins/rus:oo se lect fundono.
6. 0 programa e int erpretadc pelc processo de trabalho no servidor de aplicativo e corn elia execu tan do na linha 3. (As linhas 1 e 2 sao declaracoes, Da O c6digo executavel .) 7. A linha 3 faz com que uma linha seja lida da tabela de banco de dados zt xl fa l e colocada na area de trabalho identificada ztxl fa I. 8. A prim eira linh a de tempo 4 e executada, uma pagina vir tual ealocada para a Iista. 9. A Iinha 4 causa 0 campo 1; fnr a ser escrito da area de trabalho ztx l fal para a pegina virtual. 10. Alinha 5 faz urn loop novamente na linha 3. 11. A pr6xima linha e lida da tabela ztxl fal e e colocada na area de trabalho zt xl te t, so brescrevendo a linha anterior.. 12.0 campo 1; fnr e escrito na proxima linha da pagina virtual. 13. Os passos 9 a 11 sao rep etidcs para todas as linhas J?a tabela ztxlfal. 14.0 loop termina aut omaticamenre quando a ultima linha elida de
ztxl fa l.
DBS
':~~i ;
};
~'4~~~.~{t~;:.;,~ ,
. .. L
~ ' ~i.:~:';"~~
17
15. 0 programa termina, mas a area de rolagem (contendo a pagina virtual) perman ece alocada . 16. 0 processo de traba lbo determina 0 numero de linhas que a tela do usudrio ecapaz de exibi- e errvia essas muitas linhas cia pagina virtual como a pr imei ra pagina da lista para 0 servidor de apresentacao.
1. 'P ression ar Back faz com que uma sclicitacao seja enviada do SAPGUI para 0 dispatcher no servidor de aplicativo para terminar 0 programa
ztx0202. 2. A soliciracao e despachada para 0 primeiro processo de trabalho disponfvel. 3. 0 contexte de usuario e a area de rolagem para ztx 0202sao deslocados no processo de trabalho. 4. 0 sistema libera a area de rolagem para 0 programa.
5. 0 contexte de usuario
processamento prossegue
-.;
-"".~ --=-----=--=-=-,,,""""""'------------~---~~--~-------------~
D 2, l EU P'W.EliU P' 06RAJI,A EM ABAP/~ IA
76
77
F jgura 2 13
Co mp arada a Listagem 2.2, apenas a linha 3 mu dou. Esse programa funci ona exatamente da mesma maneira e produz a mes ma saida que a anterior. C omo a clausula i nt o nao foi especificada na instrucao se 1ect, 0 sistema utiliza a drea de trabalho cia tabela padrsc ztxlfal.
qrcm -o-C cpy do telo iniciol do ed ito r. Alternotivo mente, enqoontc editc
As.
L-
- - - - - - - ---I- - HI va V9
. _
.1..0
de
data
ItO
like tl.
onde:
'f
Ita
e a no m e de uma ta bela qu e voc e quer para padrjio em sua area de trabalho de poi s .
tl
TfRMO~
No linho 3 do listog e m 2.2, as polovros ; nto zt xl f al sse opcion ois. Se voc e debe-los de foro, 0 crec de trobolho co m 0 mesmo nome do tcbelo e uftlizode. Em outros polovros, 0 linho otuol outomo ticomenfe entre no crec de trobolho ztxl fal. Per esse rcreo , ela e canhecido como 6reo de trobolho do tobe lo podrt50. Nesse coso , a c reo de trebo lho zt xl f al e 0 area padrOo pore a tobelc ztxlfal. Por isso, 0 c6d igo no listogern 2.2 pode ser sirnplificodo como mostredo no listcgem 2.3.
il...
A Listagern 2.4 mostra como utilizar a in srrucao dat a para criar um a nova area de trabalho.
[NTiAOA~
1 report ztx0203. 2 t abl es ztx lfa l. 3 sel ect > f rom zblfal order by ll fnr . 4 write / ztxlfal- lifnr. 5 endset ect ,
--- 78
APREN" EM 21 DIAS ABAP/4 DlA 2:SEU PRIMEIRO PROGRAMA EM A BAPf4
79
c6digo na Lisragern 2.4 deve produzir a me sma saida que as duas listagens anteriores (veja a saida cia Listagem 2.3). Observe que nesse exemplo njio e necessaria defini r uma n ova area de trabalha - uma e utilizada apenas para ilusrrar 0 conceito .
ANALISE....
ANlus[ ~
A 1inha 3 define uma nova area de trabalha chamada ~a como a estrutura zt xl fal de DDIC.
~ A linha-lle uma linha de uma vez cia tabela ztxl fal na area de trabalho
Este programa Ie todcs as reqlstro s de tobelc ztxlfal onde 0 nc rnero do ,. fahrican te e menar que 2000 e escreve 0 contecdo do compo 1i f nr (a ncmerc de fabriconte). No banco de dodos, 1; fn r e urn compo de ccroctere cc nte ndo vclcres nurr-ericos que estcc exa tcmente [ustificcdos e p reenchtdcs 6 esquerdo co m ze ros. Portanto, 0 vola r a ser comparedo com 1; f nr deve fer 0 mesmo formata e tipo de dodos pore evitor o converscc de dodos e osseguror que os resultados desejodos se jam obtido s.
1 ;
..
Note que codificar urn caractere literal em ABAP/4 (como '0000002000 I na linha 3), deve envolver a string de caractere dentro de aspas simples.
NOVO....
rrRMO "
frobo/he explfdfo .
sistema R/3 tome as vcriovels de sistema disponiveis dentro de sev pro groma . Voce n60 tern de defioir quolquer coiso para ccessc-lcs, elas estcc s.::mpre disponive is e automaticomente sec ctucluodcs pe lo sistema como cltero coes sue s no ombiente do progroma. Todos os vcrioveis de sistema comeccrn co m 0 prefixo 5Y - . Par exemplo, a dote otuol de sistema esto dlsponrvel no ccmpo de sistema sy - datum e a ho ra otuol em sy-uzeit. Em gerel, eles soo chomados obrevtcdcmente de com pos sy [prc rw oclo -se "'sci'").
Todas as var iaveis de sistema sao definidas na estrutura sys t de DDIC. Mas nao def ina syst em seu programa; seus campos estao dispo niveis automaticamente dentro de cada programa.
I'
2 tables ztx.lfa1. 3 select * from ztxlfa1 where lifnr 4 write / zt xlfal l ifnr .
<
endsetect .
as names de vcrtcveis de sistema podem ser codificodcs utilizando 0 prefixo sy- ou syst -. Por exemplc, sy-datum tornbem pod e ser codiftcodo co mo sy st-datum; eles s60 funciono lmenle equlvclentes . Sy- e 0 formvlcrtc preferido, embora voce occsionalmente veto sy stem progremos mais a ntigo s. Syst eo unico estrutura que tem umo duolidade de prefixes . Para todos as outros, voce de ve utilizor 0 nome complete de estruturo como 0 preflxo.
I
I
![
of
or
o
SAiDA ~
1000
1010
Duas verieveis de sistema sao muito tite is para saber qu and o co dificar a inscrucao se 1ect :
II
1020
1030
sy-subt-c
1040
1050
sy -dbcnt
1060 1070
1080 1090
Deseobrindo sy-subre
HRMO"
NOVO .... \ Pcro d~:e rmincr s.e a instru<;oo s e lect retor~ou qU~is~uer linhos: teste 0 volar do vcridve ] de slstemc sy-subrc fprcnunclo-se sol-sub-cre-st"] depois do
instru<;oo endsel ect. Se as ltnhos foram loeo lizodos, a vclor de sy -s ubr c se ra O. Se nenhuma linho [o! lccclizcdc, a valor sera 4. (Veic a listagem 2.6.)
.f
:f d
---~~~~~~~~~~~~~~----------'--~---------------~
80
APRENDA EM 21 DlAS ABAP/4 DIA 2:StU PRIMEIROPROG AAMA EM ABAP/4
81
Depois de endselect. elo reter6 seu volar e entcc ccnterc 0 ruimerc de linhos selecionodos. Por exemplo, pora irnprimir rujmercs seqcenclots 00 lado de coda fobriconte e imprimir um tolo l do nomero de llnhos selecionodos no po rle inferior do relot6rio, utilize o c6d igo no listogem 2.7.
ETRAA Listagem 2.7 Utilizando 0 sy-dbcnt para co ntor lmhc s retomados do N DlItr..
" instrucoo select
1 re port ztx0207 . 2 tables ztxlfaL 3 se lect 10" from ztxlfa1 order by lifnr. 4 wri t e / sy- dbcnt , 5 w ite ztx lfa1-1ifnr. r 6 endse tect . 7 write / sy-dbcnt . B wri te ' r ecor ds fou nd'.
No records found
ANALISE..... A instru<;oo se lecionodo no linha 3 estc restringido par umo cl6usu la where.
~epois do
Nesse coso, nenhumo linho coincide com a criteria no d6usulo where , entoo
endselect,
valor de sy -subrc
e configurodo como 4.
1 2 3
Muitos pclovrcs-chove otribuem vclores a sy -subrc . Algumas polovrcs-chove slmplesmente nco 0 configurorn. Se urne pe lovra-chave configura sy -subre, as volores oossrvels 500 documentodos no ojuda Fl para esse pclcvrc -chcve.
Se voce codificou u m a set ect e quiser testar 0 valor de sy-subr-c, seu teste deve vir depois de en dse 1ect. Por que? A resposta reside no fato de que 0 codigo entre select e end select e executado uma vez para cada linha retornada do banco de dados . Se nenhuma linha (zero) eretornada do banco de dados, 0 codigc entre select e endselect nunea e executado. Pcrtanto, voce deve codificar 0 teste para sy-subrc depois de endsel ect.
1000 1010 1020 4 1030 5 1040 6 1050 7 1060 8 1070 9 1080 10 1090. 11 2000 12 VI 14 15 16 17 18 19 20
21
I I
I
I
13 VlO VlI
VI2 V2
V3
V4
V5 V6
V7
Sy-subt-c noo e outomot icomente inicializodo como zero quando seu progromo lntctc. Entretcntc, isso nunco deve ser umo preo cupoceo, porque voce nee deve venficc-lo ate q ue umo instruceo que oconfiguro tenhc exeeutado.
A A E~ NliS
HRMO"
NOVO ~
Poro determinor a nume rc de Jinhos retornodo por umo instru<;60 sel ect, teste a valor de sy-dbcnt decors de endsel ect . Voce tombern pode utilizo-lo como urn contodorde 1 00Pi entre sel ect e endsel ect , elcccntem uma soma do itera'ioo otuol. Pore a prirneiro linho, sy -db cnt se ra 1, durante a segu ndo sera 2 e ossim por dionle .
A linha 4 escreve 0 valor de sy-docn t para ca d a linha que e retomada pela sel ect . A barra (/) comeca em uma nova Iin h a, eneao cada sy-dbcnt comeca em uma nova linha. A linha 5 escreve
sy-dbcnt.
0
-,;.;.:,
82
83
Exi bindo
es trutura sys t
Por exemplo, para definir duas tabelas, voce poderia codificar isro:
tables ztxlfal. tables ztxlfbl.
Va para
Data D ictionary , insira syst, se1ecione a bctao de 0pljao Structure e pressione a batao Display
0
Para localizar C'flmpos dentro cia estrutura, pressione a batao Find na barra de ferramentas Standard e digire 0 nome do campo que voce quer local izar. Se voce nao sabe 0 nome do campo que quer localizar, mas antes deseja localizar urn par descncao, voce tambem pode pesquisar as descricoes.
S(RHN(AM~ lnicie a Screeotlcm "How to Seorch Through Field Descriptions" ogora.
Funcionalmente, os dais segmentos precedentes de c6digo sao identicos e ern tempo de execucio nao hi nenhuma diferenca em desempenho. Durante a gerecac de c6digo, 0 segundo segmento de c6digo e expandido em duas instrucces. Entao, de um ponto de vista funcional os dois prograrnas sao identicos. as operadores de encadeamento devem ser ut ilizados p ara m elh orar a legibilidade de seu programa. A utilizacao do operador de encad eamenro e ilustrada na Listagem 2.8.
Para pesquisar par descricoes de campo, utilize este procedimento: 1. Comece na tela de campos Dictionary: Table/Structure: Display. 2. Escolha 0 caminho de menu Table->Print.. Uma caixa de dialogo aparece ra perguntando quais compon-entes voce deseja imprimir.
0 batao Continue. Uma caixa de didlogo aparecera pergunrandc a voce as parametres de impressao.
1 2 3 4 5 6
report ztx0208. tables ztxlfal. select * from ztxlfal order bylifnr . write: / sy-cbcnt , ztxlfal-lifnr. endselect. . write: / sy-dbcnt, 'records found'.
4. P ressione 0 borao Print Preview. A caixa de dialogo se fechara e uma lista contendo uma pequena fonte aparecerd. 5. Escolha 0 caminho de menu Goto-> List Display. A Iista mudara para uma fonte maier de especc fixo. 6. No campo de comando, digite %sc ~ pressione a tec1a Enter. A caixa de dialogo Find aparecera. 7. Digite 0 texto que voce quer localizar e pressione a tecla Enter. Uma lista de coincidencias aparecera e cada ccincidencia sera desracada.
a c6digo na Lisragem 2.8 produz a mesma saida que 0 pro gram a anterior (veja a saida da Listagem 2.7).
ANAliSE ~
A linha 4 combina as linhas 4 e 5 da Listagem 2.7 em uma unica linha utilizando 0 op erador de encadeamento. A linha 6 combina as linhas 7 e 8 da Listagem 2.7 em uma u nica linha utilizando o operador de encadeamento.
Utilizondo a
jnst[lJ~ao
Utilizondo
A instrucao select single recupera urn registro do banco de dadc s. Se voce conhece a cbave primaria inteira do registro que deseja recuperar, se 1ect s i ngl e emuito rnais rapida e mais eficiente que select/endselect.
sinal de dois-pontcs (: l chamado operodor de encodeomento. Uttllze-c HRMO"" para combiner linhas de c6digo que cornecom com e mesmo polcvro ou seqvencio de polovrcs. Coloque a parte comum no comeco do i n stru ~a a seguida par dois -ponios. Enta o, coloque as partes fmcls das instru<;6es depots dele, coda uma seporoda par uma virgule.
Nova... a
."""".
- - - - - - - - - - - - ..,
.....r-"_ _....
D : SEU P IA2 RIMEIROPR G O RAMA EM A8AP/~
...._ _ .
84
85
III
s el ect
Co me nta nd o
c6 d igo e a
d ocumenta~ao
fo rm al
~ m
T
onde:
Ha duas maneiras de colocar comentarios em seu c6dig o: Urn * (asterisco ) na primeira coluna indica que a linh a inteira e urn comentdrio. Ela ficare em vermelho dentro do edit or para indicar que eurn comentario de linha inteira.
II . (aspas duplas) em qualquer luga r em uma linha indicam que a res tante da linha e urn com entario. 0 com en rario nao ficar a em vermelho como para urn comen tario de linha in teira.
wa 11
e0 e
P a r exemplo:
* Isto e um ccnentartc
ta b' es ztxlfal.
Certifique -s e de que uma linha un ica foi retomada, voce deve especificar todos os camp o s de chave prim aria na cldusula whe re. Se voce nao fize r isso, seu p ro grama ex ecu tara, mas obt era urn aviso. (Para ex ibir os avis os , es c ol h a 0 caminho de menu Programa Program-c-Check -> Display Warnings.)
A Listagem 2.9 ilustra a instrucao select s t ngl e. Para praticar, erie urn novo program a e digite 0 c6 digo como mostrado na Listagem 2.9.
Nao ha caractere end- comnent (fim de co mentario). Em outras palavras, quando voce comeca urn comentario, 0 res tante da linha sera apenas urn comen tdric. Nenhum c6d igo adicional pode entrar nessa linha. 0 comentario termina no final cialinha atual. Independenremente dos comentarics, voce pode formalmente registra r seu c6d igo no componente de document aci o do progra ma. Para fazer isso, va para a tela Editor I nitial, de urn clique no batao de opca o D ocumentation e pre ssione Change. Digite sua documentacio e pr essione Save.
Resum o
O s programas do ABAP/4 sao compostos de compone ntes . Os cornponentes sao atriburos, codigo-fonte, vari ante s, elementos de tex to e documenracao. No minimo, urn programa deve ter atributos e codi gofonte.
Os rela t6rios do ABAP/ 4 devem comecar corn a instrucao re port. A insrrucao tables aloca uma area de trabalho da tab ela p adrao e tambern da acesso ao programa para a tabela de banco de clade s do mesmo nome. A instrucao se 1ect recupera as linhas de uma tabe la de banco de dad os. Utilize select si ngl e par a recuperar uma Iinha. Utilize select/e ndse 1ect para recuperar multiplas linhas. select/endselect forma urn loop. 0 codigo no loop e execu tado uma vez para cada linha de tabela que sati sfaz a clausul a where. 0 loop rermina automaticamente quando todas as linh as forem processadas. Se voce DaO esp ecificar uma clausula ; nto, cada [inha sera colocada na area de trabalho da tabela padrao e sobrescreverd a linha anterior. sy-subr-c configurado como 0 se quaisquer Jinhas fo rem selecion adas, e con figura do como 4 se nen huma linha for selecionada. sy-d bcnt e
fHTRADA~
I repor t zt x020 9. 2 tables zt xl fa l . 3 sel ect sing le * from ztxlfal where lifnr" 'VI ' . 4 if sy-subrc z o. 5 write : / ztxlfaI l i fnr , zt xlfal - nam el. 6 el se . 7 wri t e 'record not found" . 8 endif.
SAiD! ~
o
VI
!NjllSE~
.,..
86
"RENDA EM 1\ DIAl ABAP/4
- .....
'W' W
_ -w
D 2: S PRIME DPROGRAMA E A P!. IA EU IR M SA
87
aumentado sempre uma vez p elo loop e dep ois do endsel ect ele con tem 0 mimero de linh as recuperadas. 0 operador de encadeamento e dois-ponccs (:) . :E urilizado para reduzir a redunddncia on de dua s ou mais insrrucoes comecam com a mesma pala vra ou sequencia de palavras.
P&R
o o
Se eu estiver edltando um programa, 0 que acontece com minhas alteracces se estiver desconectado do R/3 j por exemplo, se meu PC trava e tenho de rei niciaIizar? Perderei m inhas altera<;6es?
Se voce efecuar logon novamente den tro de 5 ou 10 m in utes, pod era recone ctar-se a sua sessao. Q uando voce efetuar logo n novamente, digite seu ID de usuario e senha mas nsopressione a tecla En ter na tela de logon; em vez disso, escolha 0 caminh o de menu User-> Copy Session. Voce sera reconectado a sua sessdo anterior e tude sera restaurado da maneira que estava quando voce perdeu sua con exao.
edito r teria acabado. Hoi agora duas vers6es do seu pr ograma no banco de dados: a versao alterada (a que voce acabou de executar) e a original. (A versso alrerada e armazenada com urn nome temporario que consisre em ! e os ultimos sere caracteres de seu nome de programa.) Sevoc e agora retornar ao edicor e tent ar editar seu programa no vamente, 0 sist ema detectara 3 presence de duas vers6es no banco de dad os e exibira um a caixa de dialc go que solicita 3 voce qual versao voce qu er ed itar, a primeira (salva) ou 3 temporaria. Para exibir a copia rempor aria (3 prirneira que voce executou) simple smen te pressio ne 0 bo-ac Continue.
Quando copio urn programa in teiro, a inst ru cao report ain da contem 0 nome antigo do relat6ri o. Mas se eu a executa, ele roda sem erro . Ele nao dev eri a me dar u rn erro?
o
o
o nome de p r ogram a n a instrucj.o r eport e~brigat~ri o, mas nao tern de corresponder com 0 nome real do pro grama. E apenas para documentaclo.
Toda vez que efetuo 0 logoff do R/3 ob tenho uma caixa de mensagern que diz "Unsaved data will b e lo st" - mesm o depois que salv ei tude. POl' que~ Apesar de sua s p alavras , essa m en sagem njio signifies que ha dados njio salvos qu e serao perdidos. Ela sign ifies "Se voce nao salv ou seus dados, eles serdo p erdi dos" . A melhor coisa a fazer e ap ena s ignora-la. Todo mundo faz issc . Possa aninhar as in struco es sel ect dentr o de autra? Sim, pede, mas n a m aicria das vezes voce nao deve, p orque ela po d e ser extremamen te ineficiente. Uma altern ativ e melhor e u rilizar um a visualizapi o do banco de clade s.
0-
e o
o
o o
Wo rksho p
Os exercrcios a seguir oferecem uma prarica para utilizar 0 editor e escrever progra mas simples que utiliz am as instrucoes t abl es, sel ect e wr it e. As respostas estao n o Apendic e B, "Re spos ras as pergumas e aos exercfcios" .
"::'!!!'-------------~-88
APREHDA EM 21 DIAS AWl' D1A 2,SEU PRIMEIRO P RDGRAMA EM AMP/4
",.
.. ,
89
Teste
1. Quais as duas coisas que a instrucao tabl es faz? 2. A que 0 termc area de trabalho da tabela padrao se refere? 3. Se a inscru cao sel ect esta faltando em urna clausula ; nto, onde entrarao as linhas? 4. Se uma inst rucao w rite nao contem uma barra, a safda e escrita na mesm a linha que a saida para a instrucfo write an terior ou e escri ta em uma nova linha? 5. Qual e 0 nome da varidvel de sistema que ind ica se quaisquer linhas for am localizadas pela instrucao select? 6. Qual e0 nome da variavel de sistema que indica quantas linhas foram localizadas pela insrrucao select? 7. .Veja a Listag em 2.6. Se h a 30 linhas na rabe la ztxl fal, quanras vezes a linha 4 foi executada? 8. Veja a Listag em 2.6. Se a tabela ztxlfal esdver vazia (se contem 0 linhas), guantas vez es.a linha 4 foi executada?
5. Retorne da ajuda novamente para seu programa. (Pres sion e 0 bo rao Back na barre de ferram entas Application.) 6. Exiba as arribuicoes de tecla de funcio. (De urn clique com 0 bono dire ito do mouse em qualquer lugar na area de tela da janela.)
7. Traga a linha 3 para 0 tOPO da tela . (De urn clique duplo no espaco em branco na linha 3, mas nao em uma palavra .)
.,
8. Exclua a Iinha 6. (Cologue 0 cursorna linha 6 e pres sione 0 batao Cut na berra de ferramentas Application.)
9. Abra uma nova sessao e exiba a programa zty0200b. (Escolha 0 caminho de menu Syst em-> Create session. Uma nova janela de SAP R!3 e exibida. Escolha 0 caminho de menu Tools- >ABAP/4 Workbench. A telaABAP/4 Development Workbench eexibida. Pressione o botac ABAP/4 Editor na barre de [erramentas Application. No campo Program Name, digite zty0200b. Pressione a bocao Display.) 10. Marque as linhas 2 a 4 utilizando 0 botac Select. (Coloque 0 cursor na linha 2. Pressione a borao Select na barra de ferramentas Application . A linha 2 tom a-se azu l. Coloque 0 cursor na linh a 4. Pressione o botao Select novamente. As linhas 2 a 4 sao rnarcadas em azul.) 11. Copie 0 bloco marcado para 0 buffer X. (Escolha a caminho de menu Block/Buffer-> Copy to X Buffer.) 12. Alterne de volta para a jane la em que programs - 0200a e exibido. 13. Cole as linhas do buffer X depois da Iinha 5. (Cologue 0 cursor na linha 6. Escolha 0 caminho de menu Block/Buffer-> In sert X Buffer.) 14. Marque 0 bloco de linhas 6 a g. (Coloque 0 curs or na linha 6. Pressione 0 botao Select na barra de [erramentas Applicati on . Coloque 0 cursor na linha 8. Pressione 0 botac Select novamente .) IS. Mova 0 bloco quarro espacos para a esquerda, alinhe a inst rucao ; f com a inscrucao select. (Coloque 0 cursor na linha 6 na coluna 1. Pressione 0 batao Move Line na barra de ferramentas Application.) 16. Escolha 0 caminho de menu Program->Save As e salve seu programa modificado como > - 0200b. 17. Exiba 0 programa _ . -0200b utilizandc 0 caminho de menu Program-> Other Program. 18. Corrija 0 nome de programa na instruqao repo rt. (Altere _ 0200a para 0200b na linha 1.) 19. Selecione as linhas 3 a 5. (Cologue 0 cursor na linha 3. Pression e 0 batao Select na barra de [erramentas Application. Coloque a cursor na linha 5. Pressione 0 batao Select novamente.) 20. Ccpie 0 bloeo selecionado para a buffer interne do pr ograma. (Pressione 0 batao Copy To Buffer na barra de ferram entas Application.)
2 . Edite 0 programa - 0200a. Corrija 0 nome de relat6rio na insrrucao report. 3. Insi ra uma nova linh a depois da linha 1. Digite a instrucao tables apropriada nessa linha. 4. Obtenha ajuda para a instrucfo tables. (Coloque a cursor na instru~ ao tabl es e press ion e F1.)
i ,i'" , 90
};."': ;or'
....~""r-"--.... e-"="....,=-....",......,.....
~I APRENDA EM 21 OJAS ABAP/~
-~~~~---~
..
.w _
91
21. Cole 0 bloco que voce acabou de copiar no final do seu prcgrama. (Coloque 0 cursor na Iinha 9 e pressione 0 borao Insert From Buffer na barra de ferramentas App licarion.) 22. Cole 0 mesma bloco novamenre no final de seu programa. (Ccloque o cursor na linha 12 e pressione 0 borde Insert From Buffer na barra de [erramentas Application.) 23. Des faca a ultima colagem. (Pressi one [erramentas Applicarion.)
0
24. Digite 0 seguinte c6digo nas Iinhas 12 a 14. Comece cada Iinha na coluna 1.
if sy-dbcnt > O.
34. Substitua todas as ocorrencias cia s tring zt xlfal nas linhas 10 e 11 com a string ztxlfbl utili zan do a fun~ao Search/ Replace. (Culo que o cursor na linha 10. Press ione 0 borso Select. C oloque 0 cursor na linha 11. Press ioneo botao Select. As linha s IDe 11 agoraesno marca d as como urn bloco em verrnelho. Pressione 0 botao Find.. A tela Search/Replace eexibida. Digite ztxl fal no campo Find. Paca um a marca de selecao na caixa de selecao Replace By. Digire ztxl fbl no campo Rep lace By. Pressione 0 botao Continue. A tela ABAP/ 4 Editor: Edit Program e exibida . Pressione 0 botec No Confirmation . Tod as as ocorrencias cia string dentro do bloco marcado sao substitufdas.) 35. Utilize urna teela de funcac para salvar seu p rograma e outra tecla de funlJao para execun-la. (Pressione F I t. Pre ssion e F 8.) 36. Salve a saida de lista para urn arqu ivo em seu disco rigido esco lhendo o carninho de menu List - c-Save- > Fi le. Utilize formate nao convertido. 37. Exiba sua saida descarregada ut ilizando 0 Bloeo de N ota s. 38. Retorne para editar seu codigo. (Pressione
0
write : endif.
25. Automaricamente fixe a endentacao, escolhendo 0 caminho de menu P rogram- > Pretty Printer. 26. Salve seu p rograma. (Pressione
0
botso Save.)
27 . Retcme para 0 ABAP/4 Editor: Initial -Screen e documente seu programa. (P ressione 0 batao Back na barra de ferramentas Standard. Escolh a 0 bo tao de opcao Documentation. Pressione 0 bouo Change.)
28. Salve sua documen tacao e retom e para editar 0 codigo-fonte. (Pressione 0 botao Save. Pressione 0 botao Back. Escolha 0 botao de op~ao Source Code. D igite 0200b no campo P rogram. Pressione 0 bo tao - p ushbutton - Change.)
29 . Exi ba as componentes cia estrutura SYST clando urn clique dup lo em
b otao Back.)
39. Faca download de seu prograrna para 0 arquivo c: \ temp\ 0200b. tx t. (Escolha 0 caminho de menu Utilities- c-Download. A tela Transfer to a Local File e exibida. Digite c: \ t em 0200b. tx t n o campo File p\ Name. Pressione 0 botao OK. A mensagem "277 bytes tr ansferred" aparece na barra de status na parte inferior da jane1a.) 40. Ed ite seu programa depois de fazer download ut ilizando 0 Bloco de Notas. Adic ione urn comentario de linha inteira dep ois da in stru cao de relat6rio com seu no me nele . (Insira uma n ova Iinha .depois cia insrructo report: *Created by Seu nom e.) 41. Digite 0 segu inte comentario no final da primeira ins truc io sel ect:
II
urn campo sy. (De urn clique duplo na palavra sy-subrc na linh a 6. A estrutu ra SYST e exibida .) 30. Rerorne para .edirar seu programa. (Pressione 0 botac Back.) 31. Localize a primeira ocorrencia da string ztx lfal em seu programa. (Pressione 0 bon o Find. A tela Search/Replace e exibida . Dig ire ztxlfal no camp o F ind . Pressione 0 bo tao de op~ao From Line. Pressione 0 botao Continue.) 32 . Repita a pesquisa, localizando cada ocorrencia sucessiva ate que voce encontre to das elas. (Pressione 0 batao Find Next repetidamente ate a mensagem "Strin g wri te not found" aparecer na barra de status na parte inferior da janela.) 33. Adicione a nome de tabela zt x'lfal a instrucfo tabl es. (Alterando a instrucao de tabe las, de modo que e1a exiba tables: ztx'l tef , zl xlfbJ.) ,
OK.)
44 . Salve 0 programa carregado. (P ression e 0 batao Save.) 45. Imprima seu programa. (Pressione 0 botao Print na barra de ferramentas Standard. A tela Print Paramet ers e exibida. Ce rt ifique-se de que a caixa de sel e~ao Print Immed. est a at ivada. Pressione 0 botao Print . Sua saida e enviada para a imp ressora e voc e e ret omado para a tela ABAP/4 Edi tor: Edit Program.)
92
APRENOA EM21 DIAS ABA P/4
93
fxerdcios de
47. Retome para editar programa 0200b e salve uma versao dele no
banco de dados Ve rsions. (Pressione 0 botao Back para retornar para a tela ABAP/4 Editor: Edit Program. Escolha 0 cam in ho de menu Program->Generate Version .) 48. Substirua todas as ocorrenc ias de ztxlfbl com ztxlfc3. (Pressione 0 boeo Find. A tela Search/Replace e exibida. Digire ztxl fbI no campo Find. Faca uma marca de selecao na caixa de selecso Replace By. Digite ztx l fc3 no campo Replace By. Pressione a batao de opcao In Program. Press ione 0 bon o Continue. A tela Global Replace In Programs e exibida. P ressione 0 botao No Confirmation . Todas as ocorrencias da string sao substituidas. Pressione 0 batao Save. Pressione a batao Back. Voce e retornado para a tela ABA P/4 Editor: Edit Program.) 49 . Salve suas alreracoes. (Pressione
0
S ioA A ~
Y9
YB
Y6
V9
botao Save.)
50 . Retorne ao edito r tela inicial e compare as duas vers6es. (Pressione 0 bo tao Back. A ABAP/ 4 Editor: Initial Screen e exibida. Escolha 0 cam inho de me nu U rilities -c-Version management. A te la Vers ions Of O bject 0200b Of Type REPS e exibida. Eaca uma marca de selecao na caixa de selecao Version 00001. Pressione 0 bor ao Compa re na barra de ferramentas Application. A tela Compare Programs: All e exibid a. Role para baixo para visualizar as diferencas .) 5 1. Recu pere a vers ac original. (Pressione 0 botao Back. A tela Versions Of O bject ' 0200b Of Type REPS i exibida. Remova a marca de selecso da caixa de selecao Act. Pressione 0 bono Re trieve na barra de [err ame ntas Application (0 sistema nao oferece uma resposta). Pressione 0 bon o Back. A tela Res tore Version e exibida . Pressione o botao Yes. A tela Versions Of Object e 0200b O f Type REPS i exibida. Pressione 0 bo eso Back. A ABAP/4 Editor: Initial Screen e exibida.) 52. Edite seu p rograma e m arque as ulrimas tres Iinhas como urn bloco. (Pressione 0 bono C hange. A tela ABAP/4 Editor: Edit Pro gram i exibida . Colcque 0 cu rsor na linha 13. Pressione 0 botao Select. A lin ha 13 torna-se vermelha. Coloque 0 cursor na linha 15. Pressione o botao Select. 0 bloco e marcado em vermelho.) 53. Comente 0 bloco utilizando 0 caminho de menu Block/Buffer-> In sert Comment ". 5 4. Marque as ultimas tres linhas como urn bloco (veja 0 passo 51) .
2. Copie 0 progl'ama zty0202 para e02D2 (a listagem aparece a seguir). Ele nac produz qualquer saida. Localize 0 bu g n ele e corrija-o. Depois de voce [azer isso, a safda correta deve ser no re cor ds found.
1 report zty020Z.
2. tables 'ztx1fal.
if sy -subrc <> O.
5
6
write / ztxlfal-1ifnr.
endsel ect ,
3. Copie 0 programa zty0203 para e02Q3 (a listagem aparece a seguir) . E le contem urn erro de sintaxe e urn bug. C o rrija 0 erro de sintaxe e 0 bug. Quando corrigido, eIe deve exibir numeros de fabricante maiores que 1050 da tabela ztxlfal.
1 report zt y0203. 2 tables ztxlfa1 3 setect > from ztxlfal where 11fnr 4 write / ztxlfa1~ 1i fnr . 5 endse1ect .
>
' 1050' .
4. Copie 0 programa zty0204 para e0204 (a listage m aparece a seguir) . A safdaestd incorreta. Olhe a saida, descubra 0 que ha de errado e corrija 0 programa.
1 report zty020 4. 2 tables ztxlfal. 3 select'" from ztxlfal where 1ifnr 4 write I ztxlfal-1ifnr.
>
' 0000001050'.
94
5. Copie 0 program a zt y020S para e02 DS (a listagem apare ce a seguir}. A safda esta incorreta. Examine a safda, desc ubra 0 que ha de errado e co rrija 0 p rograma.
1 2 3 4 5
report zt y020S. tab les zt xl fal . setect ... from ztxlfal wh ere lHnr endselec t. write / ztx lfal-l ifnr.
:>
' 0000001050' .
6. Copie a programa zty0206 para - e0206 (a listagem aparec! a segu ir). Simpl ifiqu e 0 programs removendo 0 codigc desnecessario e palavras inuteis.
1 report 2t y0206 . 2 tables : ztx 'lf al , ztx l f bl . ztxlfc3 .
3 data we l i ke zt xl f bl. 4 setect > f rom ztxlfal into ztx lfa1.
5 write I ztxlfal- lifnr . 6 wri t e ztxlfal -nam el. 7 enese1ect . 8 if sy- subrc <> 0 or sy-dbcnt .. O. 9 write / ' no records f ound i n ztxl fa l" , 10 endif . 11 ul t ne. 12 set ect ... f rom ztxl fbl int o ea . 13 w rite / ee- Itfnr- . 14 write wa-bukr s .
15 encsete ct , 16 if sy-subrc <> O. 17 write I 'no record s found'. 18 endi f .
U tilizar os qua tro navegadores de clades fo rn eeidos pela SAP para visu alizar e m odificar dado s de ntro de tabelas
7. C opie 0 prog rama zty0207 para e0207 (a Iisragem aparece a seguir). Ele contem tanto urn erro de sintaxe como urn erro de prog ramacao. D esc ubra 0 que hi de errado e corrija 0 pro grama . A safda deve exibir urn un ico registro (fabricance 1000) utili zan do a est ru rura (co ns tru ct) de programacfo mais eficiente.
1 re port zty0207. 2 ta bl es zt xlfal. 3 sele ct s ingle '" from ztxlfa l w re lifnr > ' 0000001000 ' . he 4 write I ztxlfal -l1fn r. 5 endsetect 6 if sv- suer c <> O. 7 writ e I ' no records f ound' . 8 endi f.
Este livre foi tes tado em urn sistema 3.of. Seu siste ma pe de ser em Outre nivel de versao. Embora a maicria das difer encss deva ser menor com referencia aos temas abord ad os aqui, algum as pod em causar confu seo au most rar infer-
hllpJlwww.ccmpl1$.com.br
----~~--~ - - - ----------- -- - - - - - - - - ~
96
APRE M EM 21 DIAl ABAP/~ DA
DlA3:0DATA DlaJONAR ,P R EI Y AT
97
macoes neste livre como incorretas. P or exemplo, caminhos de me nu po dem ser alterados ent re os nfveis de versao. Sempre que possfvel, as di ferencas que pod em causar confusao foram observadas neste texto. Entretant o, se a fun cionalid ad e em seu sistema parec e diferir da descrit a aqui, voc e pode cons ultar as no tas de versao do R/3 , disponfveis online, para det erminar se a diferenca po de ser atribulda ao nivel de versa-a. Para acessar as notas devcrsao, u tilize 0 segu inte proc edimen to:
S(RHH(AM ~ lnicie a ScreenCom "How to Display R/3 Release Notes" ogara .
R/3.
To b./o ~'p<l,.ft"
1. Va pa ra
0 m enu p r i nci p al e es co l ha 0 ca m inho d e menu T ools->Find->Search Interface. A tela Search Interface: Request aparece.
2. Escolha
3. Pressione
eexibida.
eexibida.
~,
"'''' "" R/3, m<>' "p' u"'" '" be'a "" DOIC. At. Ichb. "" IVJpode m "" hila I., ",,"'pc" d. e..... . p<imO';"
.", 0GnI"",
Moo"", ..bel",
ITlJ """"-A
",b.le>T9
",b."'T9
do dod<l. t,,,,' """' . d;I <. nl. G nii me... d. C<lmp<>< d,I,,.,,,.. a' <''''PG .lim .,.,.,. d,I., ,.. <!G IO bela ODIC do IVJ
"'belode
bo",,"----
ITT]
.o.q....... "'llelcl.> "" R/3. """.0 Iab.le> ""
At. ",bel", I'", pole>
booc:"d. dod... .
0 no . Modifications To ABAP aparecera sob 0 no de Basis, debaixo do subn6 ABAP/4 Development Workbench.
NV O O...
Tn.MO ~
As tab ela s trcn sporentes sec multo mois comuns do que as tobelos de pool cu de duster. Elcs sao utilizad os pa ra a rmazenor dodos de oplicotivo. Os dodos
Muites cble tcs de dese nvclvlmento ufilizodos com o exemples 0 0 le ngo de fodo esfe livre (como tobelos, dominios e e lementos de dodos ) sao bosec dos em oo jetcs reo's de desen volvlmen to no sfstemc R/3. O s objetos de exernplo te reo a mesmo nome que a s o bletos do R/3 reots, mas eles serco prefixodos com ztx. Par exemplc, 1f al e umo tabe lo real em R/3 e a fobela de exemplo neste livre e zt xlfal.
de cplicctivc sao os dc dos-mestres o u c s dodos de frc nsc coo ufilizodos po rum cpllcotlvo. Um exemplo de dod os-mestres e a tobelo de fobrico nfes (chomoda da dos-mestres de fa briconfes) ou a tobe lo de clientes (cham oda dados-mestres de di entes). Um exemplo de dodos de trcoscceo sec a s pedidos feito s pelcs cllentes ou as ped idos envia do s para as Icbricont es.
As tabe1as rran sparent es sao provavelmente 0 unico tip o de tabela que voce criara.. As tabelas de pool e de cluster nao sao normalmente utilizadas para armazenar dados de aplicativo mas, em vez dis SOl armazenam dado s de sistema, como as informac oes de configu racao de sistema ou dado s esratlsticos e
historiccs .
98
99
Tanto as tabelas de pool como as de clus te r tern relacionamentos rnuieospara-urn com tabelas de banco de dad os . As duas podem aparecer como m uitas tabelas em R/3, m as elas sao arm azenadas como urna iinica tabela no banco de dados. A rabela de banco de dadc s tern urn nome diferente, numero de campos diferente e nomes de campo diferentes dos cia tabela do R/3. A diferenca entre as dais ti pos permaneee na carac terf srica dos dados que des armazenam e sersc expli cadas nas se~6es a seguir.
Alguns exemplos de dados contidos nas tabelas de pers onalizacao sao ccdigos de parses, c6d igos de regiao {esrado au provincia), numeros de conta de reconciliacao, taxas de cambio, meeodcs de depreciacfo e condicces de pre c;o. Cada fluxo de tela, validacao de campo e atributos individu ais de campo sao as vezes ~orientados por tabela via configuracces nas tab elas de personalizac;ao.
Fig ur a 3 2
As lobe/os de pool
femum
re/ocionome"to
Umo tobe/o de pool no R/3 tem um relociono mento muitos- poro- um com umo
mvitos-poro-um com
tc belo no banco de dodos [vejo as Figuros 3.1 e 3.2). Pore ume tcbelc no bonco de dodos, ha muitos tabelos no Dota Oid ionory do R/3 . A tobelo no bonco de
dodos tern um no me diferen te do dos tcbelcs no ODIC, tem um ncrnerc de campos diferente e os compos tornb em tem nomes dlferentes. As tobelos de pool sao umo estruturo (construct) pro priet6rio do SAP.
Quondo exomino umo tcbelc de poo l no R/3, voce ve umo descdccc de umo fobelo. Entretonto, no banco de dodos, elc e onnozenodo junto com o utros tcbelcs de pool em umo cntcc tobelo chomodo pool de tobelos. Urn pool de tobe los e umo tobelc de banco de dodos com umo estruturo especicl que perm ite qu e 05 dodos de muitos tobelos do R/3 sejom ormozenod os dentro dele. Ele pode openos ormo zenor tcbelcs de pool.
-:
Durante a implemenracic inicial do sistema os dad os nas tabelas de personalizacao sao configurados par urn analista fun cional . Es se pro fissio nal nonnalmente tera experiencia relacionada co m a area de ne g6cio sendo implernentado e recebera treinarnen to ex tenso na configuracso de urn siste m a R/3.
.,
ri
I'
o R/3 utiliza poo ls de tabela paraarmazenar um grande numero (dez enas a milhares} de tab elas muit o pequenas (ap roximadamenre de 10 a 100 linhas cada um a}. Os poo ls de tab ela reduzem a quantidade de recurs os de banco de dados ne cessarie s quando mui ras tabelas pequenas tern de ser abertas ao mesmo tempo. A SAP as uriliza pa ra dados de sist ema. Voce pode criar urn p ool de tab elas se precisar criar cen renas de pe quenas tabelas que armaze na m , cad a uma, apenas algum as linh as de dados. Para impl ernentar essas pequenas tabelas como tabelas de pool, voce prim eiro cria a defini~o de urn pool de tabelas no R/3 para arm azenar to das elas. Quando ativada, uma unica tabe1a associada (0 pool de tabelas) sera criada n o banco de dados. Voce entdo pode definir as tabelas de pool dent ro do R/3 e at ribuir t odas etas ac seu pool de tab elas (veja a Figura 3.2). As tab elas de po ol sao prin cipalmenre utilizadas pelo SAP para armazenar dad os person alizados.
NOYD ....
Quando umo empresa lnstclc quo lquer sistema grande, ele normo lmente e JrutO ~ perso nolizodo de o lgumo moneirn perc encontror 05 necess idades c niccs do empreso . No R/3, esso perscncluccec e feila via tobelos de personolizoo. As tcbelos de person olizoc;oo co ntem co digo$, volidoc;oes de compo, intervolos d e numero e parametros que olterom a mon eiro como os op!icotivos do. R/3 se comportom.
;
I
I
Como as tabelas de p ool , as de cluster sao out ra estrutura (co nstru ct) proprietaria ciaSAP. Elas sao utilizadas para armazenar clados de algumas (aproximadamente de 2 a 10) tabelas muito grandes. As tabelas de cluster s.eriamutilizadas quando essas tabelas tivessem uma parte de suas chaves prim arias em comum e se as dados nessas tabelas fossem to dos acessados simultaneamente. as dados sao arm azenados logicamente como rnostrado na Figura 3.3.
100
101
Os clusters de tabela contem menos tabelas que as pools de tabela e, dif erenre dos pools de tabela, a chav e p rimaria de cada tabela dentra do cluster de tabelas ccrneca com a mesmo campo ou campos. As linhas das tabelas de cluster sao combinadas em uma (mica linha no cluster de tabelas. As linhas sao combinadas com base na parte cia chav e primaria que elas tern em co mum. As sim , quando uma linha elida de qualquer uma das t abelas no cluster, codas as linhas relacionadas em todas as t abelas de clus ter t am bem sao recuperadas, mas apenas uma {mica E/S e necessaria . Urn cluster e vantajoso no caso em que as clados sao acessados a partir de multiples tabelas simultaneamente e essas tabelas tern pelo menos urn de seus campos de chave primaria em co mum . As t abelas de cluster reduzem 0 numero de leituras do banco de dad os e assim melhoram 0 de sempenho.
Figurg 3 3
cdpos
fern os
I I
CDHDR
Cluster !able
I I
COpa s
Cluster table
primeiros quatro campos de creve primaria em comum e sempre sao ccesscoos iuntos e enlao s60 ormozenodos no cdcls de duslerde lobe/os .
Key Typa
l engtll
Os clusters de lobe/a
orm ozenom
dodos de
171 CLNT
OBJECTCLAS
CHANGENR
T EXT_CASE
vc rtes lobe/os bcseocos nos compos de chove prim6rio que e/os fern em comum.
0. c/adm0P'l"'''''''
no R{.!"""", so
IObolo, .. ~,.do,.
,",I~ ....
I
I
Tabla Cluster CDClS
~:~;~~: ~ I R ~:~
[II
171 CHAR
CHAR
171 CHAR 171 CHAR 171 CHAR 171 CHAR 170 171 CHAR 110 171 CHAR J1 171 CHAR 11" 17
[7 1
13
CHAR
r-wr--.w r-wr-w-
fUNiTrs
. ", ."..
0"""'.""'"
M"
O, do<Io> ..,.I o
-'-
:-:::~~ --~~
clII1lor: ~
....
02 02
03
I I
Fieldname.
.:
J2i4 J2i4
MANDANT
OBJECTCLAS
Per exemplo, como mostrado na Figura 3.4, os quatro primeiros campos de chave primaria em cdhdr e cdpos sao identicos. Eles rornam-se a chave primaria para 9 cluster de tabelas com a adiliaOde urn cam po pad rao de sistema pageno para assegurar que cada linha e(mica. Como outro exemp lo, suponha qu e os dados de cabecalho d o pedido e as tabelas de itens do pedido sejam sempre nece ssaries ao mesmo tempo e ambos tenham uma chave primdria que cornelia com 0 mimerc do pedido. Tanto 0 cabecalho como os itens poderiam ser armazenados em uma (mica tabela de clus ter porque 0 primeiro campo de su as chaves prim arias e a m esm o. Quando implementado como urn cluster, se uma linha de cabecalho for lid a, todas as linhas de item para de tambem serao lidas p orgue rodas elas sao armazenadas em uma unica linha no clust er de tabe1as. Se urn uni cc item for lido, a cabecalho e rodos os irens tam bern serac lid os, porque eles sao armazenados em uma (mica Iinha.
I IPAGENO
PAGElG
IOBJECTlO CHANGENR
I IVARDATA
ITI MESTMP
~~J
102
" m DA EM 21 DlAS AWl'
-.v
Da D
v v.v
w. w
--
w.tW. w:ww _ _
-~103
Os indic es secundarios
F igura 3 5
HI 0"
Voce: DaD pede utilizar as estrururas (constructs) do ABA P/4 sel ect dt sti net ou grou p by. V oce DaD pede ut ilizar SQ L nativo.
Voce nac pode especifi car no mes de campo depois cia cldus ula or der ary key. by. A unica variacao permitida e orde r by pr i m
Compo
I"
Eo
cc mcostc de um
"
Elemento de dod os
-,
preci ~e
de urn
(Cuicfudo
'~
F jgurg 3 6
Um exemplo de
praiela utili ondo z tobelos, ele mentos de dodos e dom lnios.
Domfn io
Par causa dessas restricoes nas tabel as de pool e de cluster e par causa de sua utilidade limitada, este livre concen tra-se na criacao e u tilizacao de tabel as transparentes. A criacao de tabelas de pool e de cluster na o e abordada .
~
Zphonew ROtu\o: numern comerci ol
Zphon.
phonew
Zpho nel
phonef phoneh
Voce ja sabe a que as tabe las transparentes sao e as dif erencas entre tabel as transparentes, tabe las de pool e de cluster. Agora, voc e apr enderd as co mpo nentes que sao necessaries para criar tab elas.
NOVO....
I'
ifRMO"
Umo tobelo e compostc de campos . Para crier um compo voce precise de um e leme nto de dodos . 0 eleme nta de dodos conte m os rctvlcs de ccmpo e a docwnentccoc online [tcmbern chcmcdc ojuda FJ) para a ca mpo. Ele e purome nte descritivo; co ntem as ccrccterlst'ccs sem enticcs para 0 compo , tcm bem co nhecidas como "co ntexte do neg6do"' . Os rotulos que voce oferece dent ro de um ele mento de dod os seroo exlbidos no tela 00 lodo de um compo de entrada . 0 ele mento de dodos tcmbern contem docomentccec que e exlbidc quando a vsuc ric pede c judc nesse compo pressionand o a tedo Fl . Umo defini'ioo do eleme nte de dodos eXi ~ e um dom;nio (veia a Figura 3.5). 0 dam inio co ntem a coraderfstico tecnco de um ca mpo, como 0 co mprimenta do compo e 0 tipo de dado.
NOYO ~
HRMO"
O s domtnios e as elemen tos de da do s sao reutiliz ave is . U rn domfnio po de s er utilizado em mais de urn elemento de dados , e u rn elemento de dado s pode ser utilizado em mais de urn campo e em mais de uma tabela. Par exemplo, imagine que voce ' precise pr ojetar um a tab ela de informacoes de cliente chamada zcust que deve canter os nti meros de te lefo ne ccmerc ial, fax e residencial (veja a Figura 3.6) .
Par a crier urn campo, voce normalmente inicia criando urn dom inic para ele. N este caso, voce pode criar urn dominic generico de numero de telefone, chamado zphone e dar a ele urn tipo de dado de CHAR e urn comprimento de 12. Isso seria u rn dominic generic o de numero de relefone : a maioria de s ripos de mime ros de t elefone poderia ser armazenada ut ilizando-se esse dominie. Como esse, ele pede ser ut ilizado para definir tipos especrficos de num eros de telefone, co mo fax ou nu meros de tel efone residencial. Dep ois de criar 0 do mfnio pa ra armazenar a descricao puramen te tecnica de urn cam po, voce entac cria urn elemento de dados para armazenar a s atr ibutos descritivos do campo . N o elem en to de clades, voce deve digitar 0 no me de u rn domini c par a dar-Ihe a caracterfst ica tecnica . Entao, voce insere os r6tulos e a documentacto (ajuda F1 ) para d escr ever as dado s que voce armazenara. N esse exemp lo, voce provavelm en ce criaria nes elem en tos de dudes, urn pa ra cada numero de telef one resid encial, comercial e fax. Em cada elemento de dad os, voce di gitaria ro rulos de campo descrevendo 0 tipo de numero de te lefone que voce arma zen ara co m ele e a ajuda Fl pa ra a usuario
final.
---- w_ - -----
104
APiENOA EM 21 OIAI ABAP"
w _
-~
OIuoomOlmOHARY,PARTE l
105
Te ndo criado a s elem entos de dados, voce agora p ode criar a tabela, Voc e p od eria criar treS camp os de ndmero de telefone na tab ela {residencial, comercial e fax) e arribuir 0 elemento de dados corresp ond ence a cada campo. U rn eleme nto de dados eat ribufd o a cada campo. 1 550 oferece informacoe s descritivas do campo do elemento de da dos e informacoes te cnicas do do minic a que e1e faz referencia. Quando 0 campo e utilizado em uma tela, ele obtem urn rotulo e a documentacao de ajuda Fl do elemen to de dad os e seu com primento
Po r exemplo, im agine que voce deseja cria r uma nova tabe la que co nrem informaco es adicion ais de fabri cante. Quando voce p rojeta a tabela, voce deve associar as fab rican te s em sua tabel a com esses na tab eia de SAP . Em sua tab ela, erie um a chave primdria con tendo 0 mimero de fab ricante. Utilize 0 elemen to de dad os exist ente para cria r seu campo. As dua s rabe las estjo agora ch aveadas no campo de numerc de fabricante de SAP urilizandc os mesmos elem entos de dados e do mlnios. Se a SAP alterar 0 tipo de dad o ou o comprim en to do seu camp ?, 0 seu mudara au to rnaticamente.
Em outre exemplo, voce pode pre cisar armazenar urn no m e da pes soa em tres tab elas diferentes: tab elas de clientes, [abricantes e empregados. Na tabela de clientes, voce q uer arm azenar urn nome de cliente: na tabe1a de fabricante urn nome de fabrican te e na tabela de empregado urn nome de empregado. Par isso, e uma boa ideia dar 0 mes mo rip e de dado e comprimento para todos as campos de nome de pessoa: voce pod e criar urn unico domlnio generico de nome d e p essoa , par exemplo zper snam En rao voce pode criar urn eleme nto e. de dados para carla urilizacfo de neg6ci o de urn nom e da pessoa: p ara 0 n om e de clienr e, 0 nome de fabricanre e 0 nom e de emprega do . D entro de cada elemento de dados voce referencia seu dominic zpersname pa ra da r a todos eles a m esma caracterf srica. Voce en tao pode urilizar esses eleme ntos de dad os para criar camp os denero de cada tab ela.
Tabela 3.1 Convencoes de otribu i~50 de nome para tobe los, compos, ele me ntos de dod os e do minios criodo s pelo cli ente
Tipo de objeto Comprimento max. d e nome
10 10 10 10
Tobelo
clemente de dodos Domlnio
s, z
v, z
r, z
Quolquer ccrcctere
Compo
Determ ina ndo quando criar ou reul ilizar domini os e elementos de dodos
Cada sistema R/3 vern co m mais de 13.000 dom inios preexist entes criados pe1a SAP. Q uand o voce cria urn novO camp o, voce deve de cidir se cria urn no vo domini o o u reutiliza urn existente. Para tomar essa clecisao, detennine se a tipo au co mprimem o de dados de seu campo deve ser dependeme de urn campo existente da SAP . Se seu camp o precisa ser in depen dent e, erie urn novo dominio. Se seu camp o cleve ser depend ente, reuti lize urn domin io de SAP existente. De forma similar, voc e deve reutilizar elem entos de dados se seus rotulos de campo e docu m en ta~a o alt erarem quando a SAP alterar os de1a.
T odos os nomes tern urn m aximo de 10 caracte res de comp rimenro. Os nomes de todas as tabelas, dominios e elem ent os de dados que voce cria devem iniciar com 0 caractere y ou z, Voce nao p od e utiliz ar qualquer outro caractere no comeco; todos as outros sao reservado s peia SAP . 0 sistema RJ3 imp oe essa convencio: voce obterd uma mensagem de errc se tentar criar u rn c bjeto que tern urn nome qu e na c se adapte a essas convencoes. Os n om es de campo podem comecar co m qual quer caractere. Entretanto, cert as palavras sao reservad as e njio podem ser u tilizadas com o names de campo. A tabela de DDIC t rese cc ntem a lis ra completa das palavras re s er~ vadas. 0 conteudo de t re se pode ser exib ido utilizando 0 procedim en ro do Dia 2 na seiSao intitul ada "Exib indo os clados na tabela" .
Nas sec;6es a seguir, voce cria ra dominio s, elemen tos de dado s e, por fim, sua primeira tabela transpa ren te - ela sera um a versao escalada para baixo da tabela-mestre de fabricante fornecida pela SAP iden tificada Hal.
_.
e.w
106
w __
._~_~_
...
107
Para as prcpcsitos deste livre, porto do pressupostc qu e a siste ma R/3 j6 noo armoze na quoisq uer Informocoes-mestres do fob riconte . Ima g-
ine que a tobe lo Hal noo existe, nem sevs elementos de dodos, nem
seus dominios. Portonto, nestes exerdcios nos as crlcremos.
Para armazenar informacoes-mesrres do fabricante voce criara a tabela -1fal. Ela contera campos para urn mimero de fabricante, urn nome, urn c6digo de regiso e urn ccdigc de pais. Os nomes de campo e as caracterfsricas tecnicas que voce utilizara sao mostrados na Tabela 3.2. Urn x na coluna de PK indica campos que formam a chave primaria . (0 procedimento de instalacao criou uma tabela identificada zt xlfal em seu sistema R/3. Ele e muito semelhante a tabela - - -Lfal . Utilize-a como uma referencia enquanto Ie esse capftulo.)
Na abo rdagem bottom-up, voce primeiro cria as domini os, dep ois os elemento s de dados e per fim a tabela. N a abo rdagem top-down, voce cria primeiro a tabela e depois cria os eleme nto s de dados e os dominies a medida qu e vo ce avanca. A abordagem bottom-up emais intuitiva para 0 alun o iniciante, mas rapidamente to rna-se incomoda. A abordagem top-down e muito mais facil de utilizar depois de voce se familiarizar urn pouco com a pr ocesso de cria~ao de tabela. P a r essas razoes, demonstrarei as duas tecnicas, iniciando co m bo ttom-up. Q uando ler as secoes a seguir , voc e primeiro ap rendera sob re urn objeto _ como um do min ic - e encao criara urn. Os ob jetos qu e voce cria ra sao descriros na Tabe1a 3.2.
~o
PK
Nome
de DE
Nome
de OM
Tipo de dado
Comprimen10
mandt
1ifnr namel regio 1andl x
mandt
- 1 i fnr -- - namel regi 0 landl " lifnr - -name - reg i 0 -land!
L ernbre-se, quand o crier qua lque r dos objetos neste livro, utilize seu hand le ( -j como os primeiros tres cc rocteres do nome de c bjeto. [Os corocte res represe ntam seu hand le. 0 handle foi desc rlto no Ca pitulo 2, no secco intituloda "Introdu zindo convencces de otrtbuke c de nome de progroma".) Nee utilizeat x como os primeiros tres ccrc cteres. Se voce utilizer ztx, sera muito difidl dete rminar quais 5 6 0 as se us cbjetcs.
CHAR CHAR
CHAR
10
35 3 3
CHAR
Esses names de campo e suas carac terlsticas tecnicas sao beseadcs em campos reais da tabela Hal.
N60 altere as na mes mostrodos oclmo. Os exerclclcs mois adian te neste liv contcrn com esses names de compo como mostrodo. Se re voce n60 utiliza esses names exctcs, as exerclclos sobseoueroe s nco podem funcionar.
Como essa tabela contem cladas de aplicativo, ela dev e ser dependenc e do cliente. Portanto, 0 primeiro campo deve ser mandt. (C a nsult e 0 Capitulo 1 se voce precisar revisar as tabelas dependentes de cliente.)
Depois de criar urn objero Data Dictionary, vo ce 0 ativara. Ativar urn o bjeto e simples _ voce simp lesmente deve pres sio nar 0 botao Active. 1550 alrera 0 statu s do obj eto para ativo . Urn objeto deve est ar ativo antes de pcder ser ud lizado. Por exernpl o, se tent ar utilizar urn e1emento de dados inativo 01.0 criar urn campo, voc e obtera uma mensagem dizendo qu e 0 elemento de dados na o exisce nem esra ativo. Sua respos ta seria ativar 0 elemento de dados. Se voc e altera urn o bjeto, deve ariva-lo n ovamente para as alreracoes to rnare m -se efetivas. Se voce salvar as alteracoes mas n jio ativar 0 objero, os o bjeros que se re ferem a ele nao "saberao" da altera~ao.
Ab..~pa ra
bottom-up top-down
cria r tobelas
cris-lo . Na Fi gura 3.7 esta a tela que voce utilizara para eriar urn dominio - a tela Dict io nary: Maintain Domain. Nessa tela, voce especifica 0 texto curtO, 0 tipo de dado, urn comprimento de camp o e opcionalmente urn comprimento de saida. Estes iteus sao explicados naS se~6es segu intes.
~- TT
W w W o o_
W Yo W W W o o
w.
W W WWW.WWWi
--~
--- -
--
--- -
108
109
A tela DidionOlY:
Maintain Doma in e
Descr isa o
Strings de cc roctere (maximo de 255 ccroctere s] Vclores decimais (cornprtmento maximo de 31) Compo Dote Compo Time Volores inteiros Compo de coroctere que pa de canter epenes nurnencos
D EC
O ATS TIMS INTI, INT1 , INT4 N UMC
Voce cleve sempre pressionor a tecla Ente r depo is de preencher a compo tipo de dodos. Pressionor Enter ceuso a cltercc oo do tela bcsecdc no tipo de dodo que voce especificou. Se 0 tipo de dodo e urn tipo numertco com sinal, uma coixo de seleceo Sign opcrecero. Para compos que permilem decimais , urn campo Decimal Places oporecerc . Pere campos de coroctere, uma ccixo de selece o Lowercase Letters c pcrecero .
us uario final nunea a ve j ela e exibida apenas par a os desenvo lvedores . Voce a vera quando abrir uma lista de do minies , com o em uma pesquisa. N esse campo , voce des crevera as tipcs de dados que voce quer que 0 dominic cont enha. Por exempl o, a descr icao de u rn domin ic de numero de telefone reutilizavel pode ler "Nemero de telefone generico" ou "Ncrnero de telefo ne geral".
Adicionor a pclc vrc "dcrnlnic" no finol do descrtce c de texto curto e red undonte e deve ser evltc do. Por exemplo, 0 texto curto "Ncmero de telefone de dominic qenericc" devero ser evttodc. Em vet dtssc, digite "Ncme rc de telefon e gene rico".
o campo Da ta Type
o
campo D ata Typ e especifica a repres entacao utilizada internamenre pelo banco de clados par a arma zenar 0 valor desse campo. Para alguns ripos de dados, e1e tambem dete rmin aa validacfc de formato de entrada e formate de saida do camp o. Po r exemplo, campos do tipo de dado OATS (data) e TlMS (hora) sao automaticamente fo rmatados com separadores em uma de saida de lista ou quando sao exibidos na tela. Na entrada, e1 es rambern devem estar no formato de data ou he ra ou um a mensagem de erro e emitida para 0 usu ario. Os tipos de dados mais comumente utilizados sao iistados na Tabela 3.3.
~.~ll<~ O .
_,~~t2}~'
APREND A
E"~lf;:~:B~:~4
111
Problema
Nee posso criar
SolUliCO
urn comprimento de saida que in c1ua urn byte para 0 ponto decimal e outro para cada separador de milhar que pos sa ser exibido. Entretanto, 0 sistema calcu lara 0 comp rim ento de saida se voce simplesmente deixar em branco 0 campo O utput Length e pressionar En ter. .
botco
o dominio
Olhe no barro de status no porte inferior do janelo e pressione 0 balao novomente. Epr cvc vel que voce vera umo mensogem
cl.
I,
:~
Domain" ogoro .
Q uand o pressiana a ba tao Creole, voce ve a me nsagem "Syste m change o ption do e s not allow cha nge s to SAP o bjects". Q ua ndo pressiono 0 batao Cre ate , voce ve a me nsa ge m " Enter occess key". Q uan do presslonc a bctoc Create, voc~ ve a mensoge m " You are not authorized to moke cha nges". Q uonda pressiono a botcc Creole, vo ce ve a mens agem "a lrea dy exists". O btendo mensa gem "W: {calculate d output length is sma ller tha n specified)." "E: Value table doe s not exist."
Execute esse pr ocedimento duas vezes para erial' os dominies '1; fnr e namel. A ajuda com problemas comuns e dada no diagn6stico e solucao de problemas que se segue. Se voce river problemas ern alguns des passos, nao se esquec;a de consulter 0 . diagn6stico e solucac de problemas. 1. Comece na tela D ictionary : Initial Screen . (P ara chegar la a partir d o menu principal SAP, escolha 0 caminho de menu Tools->ABAP/4 Workbench, Development-> ABAP/4 Dictionary.)
2. Digire
3. Escolha 0 batao de 0PliaODomains. 4. Pression e 0 batao Create. Voc e entac ve a tela Dictionary: Maintain Domain. as campos contendo pontos de in terrogacao sao campos obrigatorios. 5. Digite uma descric ao do dominio no campo Short Tex t.
6, Preencha no campo Data T yp e. Voce p ode colocar 0 cursor nesse campo e pressionar a seta para baixo a fim de exibir uma lists de tipos de dados permitidos . Selecione urn ripe cialista ou digire urn.
7. Digi te urn comprimento de campo. 8. Pressione 0 botco Active na barra de [erramenras Application par a co mesmo tempo salver e ativar 0 domfn io. A tela Create Object Catalog Entry e exibida . 9. Pressione 0 botao Local O bject. Vo ce tionary: Maintain D omain ,
domfnios.
Se voce deseja ver a do cumentacao que descreve todos os ripo s de dados e suas u tilizacces, coloque a cursor no campo Data T yp e e pressione Fl . Voce vera uma caixa de dialogo cam en do campos destacados. De urn clique nesses camp os destacados para mais detalhes. Vo ce pode tambem consultar a ajuda da biblioteca do R/3 para encon rrar docu me nt acao adicional sobre tipos de dados e outras proprie dades do dom fnio, Para visualizar essa documenracao, a partir de qualquer tel a escolha o caminho de menu Help->R/3 Library. Voce vera o menu principal da biblio reca do R/3 , A partir daf de urn clique nas seguintes guias: Basis Componen ts- > ABAP/ 4 De velopment Workbench- > ABAP/4 Di ctiona ry- > New D evelopments In The ABAP/ 4 Dic tionary In Release 3.0. Para ainda m ais documentacdo sabre tip os de dcdos no dominic, de dent ro do do minic escolha 0 caminho de me n u Help-> Extended help . Entao
10. Pressione 0 botao Back na barra de ferramen ras Stan dard. 1550 0 leva de volta para onde voce comecou nes se procedi mento, a tela Dictionary: Initial.
j-
113
El ment, e
e frequ entemente muilo util progro mad or. l endo esse elu de Fl , 0 progro mod o r pode determiner 0 utilizo<;oo de neg6cio dos dodos, Pcrtc ntc, voce sem pre deve crior o juda Fl para 0 usu6 rio otraves do batao Docume ntatio n.
para
0
I
l
t
/
de dados.
S(RHNCAM~ Inicie a Screen Co m "How to Creote a Data Element" ogo ra .
Exec~t e esse prc cedi mento du as vezes para criar os elementos de dados edada no diagnosrico e solucjo de problemas qu e se segue. Se voce tiver problemas com qualquer u rn dos passes, nao se esqueca de consultar a Sclucac de pr oble mas.
" . , i fn r e " ' namel. A ajuda corn proble mas comuns
I
;
I
114
115
1. Comece na Di ctionary: Initial Screen. (Para chegar ai a partir do menu principal SAP, siga 0 caminho de menu Tools->ABAP/4 Workbench, Developmen t-> ABAP/ 4 Dictionary.) 2. Digite 0 nome de elernentc de dados no campo Object Name. 3. Escolha 0 borso de op~ao Data Elements. 4. Pressione 0 bo-se Create. A tela Dictionary: Change Data Element aparece. 5. Digite rexto curto para 0 elemento de dados. 6. Digire urn nome de dominic e pressione a tecla Enter. Se 0 dominic existe e ests ativo, seu tipo de dado e comprimento aparecerao. Se voce nao vir urn tipo de dados e comprimento depois de pressionar Enter, verifique 0 nome de Data Element. Se a nome estiver correto, verifique se esta ativo abrindo urna nova sessao (utilize 0 caminho de menu System- >C reate Session) e exibindo-o no Data D ictionary. 7. Insi ra rotu los de campo nos campos Field Label Shorr , Medium, Long e Header. a valor no campo Short deve ter no maximo 10 caracreres, o Medium deve ter no maximo 15 e Long deve t er no maximo 20. 0 valor no campo H eader deve ter 0 mesmo comprimento ou ser menor que a comp rimento de saida no dominic . 8. Pressione a bono Save na barra de [erramentas Standard. A tela C reate Object Catalog Ent ry e exibida. 9. Pressione 0 botao Local O bject. Voce e levado de volta a tela Dictio nary: Change Data Element . as campos Status con tern os valores New e Saved e a mensagem "Saved without check" aparece na parte inferior de janela na barra de status. a bccso Documentation (entre outros) aparece na barra de ferramentas App lication. 10. Pressione 0 borso Documentation. A tela Change Data Element: Language E e exibida. Aqui voce pede digitar a documentacio de usuario final. Essa documentaci o e exibida quando 0 usuario solicita ajuda F1 para os campos criados utilizando esse elemento de dados. A primeira linha contem os caracreres &DEFI NITION&. Isso eurn titulo; nao altere essa linha. D igire sua documentacao comecando na Iinha dois. Pressione a tecla Enter para comecar cada novo paragrafo . 11. Pr essione 0 borao Save Active na barra de [erramentas Application para salvar seu texto. A mensagem Document was saved in active status" aparece na barra de status . 12. Pressio ne 0 botso Back na barra de ferramentas Standard. Voce e levado de volta atela Dictionary: Cha nge Data Element. 13. Pressione 0 bordo Active na barra de ferramentas Application. a valor no campo Status altera-se para A . e a mensagem "was ct activated" aparece na barra de status.
Problema
Possive is
SoluCjoo
stntem es
Nsc posso
crier elementos
de dodos
0 1he no borra de stotus no parte inferior do jonelo e ~ressi on e 0 botco nova mente. E prov cvel que voce vejc umo mensag em. Altere 0 nome do elemento de dod os pa ra inicior com y ou z.
Quando pressiono 0 botoo Create, voce ve 0 mensagem "System change option does not a llow changes to SAPobjects". Quando presslono 0 botcc Create, voce ve a me nsoge m "Enter access key". Quando pressiona 0 botoo Create, voce ve a mensa gem "You o re not authorized to make changes" . Quando pressio no 0 batao Cre ate, voce ve a mensogem "'olreodyexists".
Nne posso otivcr elementos de dados
o no me q ue voce inseriu i6
existe no Dota Dictiona ry.
Aporece a mensog em "No act ive domoin exists with nome". nome de dominio que voce d igitou no lela an terior n60 exlste ou ':l0oestc ctlvo.
I
I
\
I
I
I ~,J
!!
&
Soluljao
Se, de pais de da r urn clique duplo , voce vir a tela
Dicti on ary: Display Domain,
116
117
Problema
Possiveis
sintomas
Toble/ Structure:
Chonge Fie lds cnvc fexto curta, otribu los e nam es de compo 0 serem inse ridos.
.~ : iFol.
:,, 1
TYIn1
tela. New
a dominic precise ser ativodo. Pressione 0 batao Activate e entoo pressione 0 botoo Bock para retarnor 0 0 eleme nto de
"I~~~~~ 1t;~'jf
Fwi'n~ j(.~
UtI
.1.~. TYi'f l.ng~h cb.~kI~bl. -Sh or t. ~.~.~~ _, . ,<, :: ~~:, .. . " ' ."':"- ;t. , ~ ,
.. s:::'.'
Obtendo
mensa ge ns
Par a uma listc co mplete de vclores v61idos e seus significa do s, cclcque o cursor no ca mpo Delive ry Closs e cresslcne Fl .
Ocampo Tab.Maint.Allowed
Marcar a caixa de selecso Tab.Maim.Allowed faz com que 0 caminho de menu U tilities-> C reate Entries seja ativado. Depois de arivar a tabela e esco lher esse caminho de menu, a tela Table Insert e exibida, permitindo que vo ce digite dado s em sua tabela. Eutil para tes te e en trada manual de quantidades pe quenas de dados. Se a caixa de s ele~ao T ab.Maine.Allowed estiver em br anco, 0 caminho de menu U tilitie s- >Create Entries esta ra acinzentado.
os mesmos pro p6sitos que os campo s Short Text de dominic. 0 usuari o final mo vera essa descricao em qualquer lugar, mas 0 desenvolvedor veri quando trazer a to na um a lista de tabelas .
o valor no campo Delivery Class identifi es 0 "proprietario" dos dados nesta tabela. 0 proprietario e responsavel pela manutencao do con teudo cia tabela. Nas tabelas de cliente, voce deve sempre inserir urn A aqui , que indica que a tabela cont em dados de aplicativo po ssuldo s apenas pelo cliente . Ou tro s valores inseridos no campo sao cre is somente para a SAP e ind icam que ele possui os dados ou a SAP e 0 clienre em con jun to pos su em os dados.
Cria ndo umc tabela transparente usa ndo dom inios preexistentes e elementos de dados
Nes ta s e ~ao, voce aprendera a abordagem bottom-up para erial' uma tabela transparente.
===
118 I
APRE!fDA EM 21 DIAS ABAP /~
==.--=====--
"
119
.... Inide a Screent.crn "Hew to Create a Tra nspa re nt Table Using Preexisting
Se voce agora estiver olhando 0 elem en to de dados, observe 0 valor campo Status deve co nter Act . para indicae que no cam po Status. est a ativo . Se na o esti ver, pr essione 0 bo tao Active e verifiqu e se 0 status esca agora Act . (Se e1e nao fun cionar, arive 0 Diagno stico e solccao de problemas associado com 0 proc edim ento para criar elem en to s de dados.) U ma vez que 0 elemento de dados for ativado, press io ne bor do Back para retomar a tela D ictionary : Table/ St ructu re : Change Fi elds.
13. Repita os passo s 8 a 12 para cada urn dos campos restantes na tabela
,(' - -1; fnr e _ neme f) , 14. Pressione 0 bono Save na barra de fer ra men tas Standard. Vo ce entao
vera a tela C reate Object C atalo g Ent ry . 15. Pressione 0 b atao Local O b ject. Voce entao e ret ornado a tela D ictionary : Table/S truc ture: Change F ields . 16. Pressione 0 bot ao T echni cal Settings na barra de [erramenras Application. A tela ABAP/4 D icti onary: Maintain Technical Sett in gs e exibida. 17. No camp o Data C lass) digite APPl O (APPlO com urn zero, nao com a
!i I,
'I
3. Escolha 0 batao de 0Pl1ao Table s. 4. Press ione 0 bots o Create (pushbutton) . V oce vera
atela Dictionary:
I;
Il
"
Table/Structure: Change F ields. 5. Digite 0 texto curto para descrever a tab ela. 6. Digite urn An o campo Delivery C lass. 7~ Faca uma marca de verificacao na caixa de selecao T ab .M aint.Al lowed. 8. Na coluna Field Name, di gite 0 no me do primeiro campo cia tabela. 9. Falia uma marca de ver ificacao na coluna Key se ela faz parte da chave
Ii
letra 0 ).
18. Digite 0 (z ero) no campo Size C at ego ry. 1'9. P res sione 0 bono Save. 20. Pressione 0 botao Back. Voce e levado de volta a tela Dic tio nary : Ta ble/ Stru ctu re: Change Fields. 2 1. Pressione 0 botao Active na barra de ferrame n tas Applicatio n. Se a ativ aliao for bem-sucedida, a mensagem "was acti vated" apare cer a na barra de Statu s e 0 campo Status tera 0 valor Act . 22. Pr ession e 0 bo tao Back para re tornar a D icti on ary: Initial Scree n .
I,
I
i
L
i!
primaria.
10. D igite a nome de urn elem ento de dados na coluna Data Elem .
11. Pression e a tecla En ter. 12. Olhe na berra de Status. Se voce vir a mensagem "Data element is not active", 0 elemento de dados nao existe ou foi ativado. Estas sao as pos sfveis raz6es por que voce pode ver essa mensagem: Ele nao foi criado. Urn erro de ortografia ocorreu quando voce criou dados.
0
Pro ble ma
Possivei s sintomas
Qu a ndo voce presslonc Create, nada oco ntece.
0
Sol ufjao
elemento de
Nco posse
crier a tobela
batao
O lhe no barra de status no pa rte inferior do [c nelo e pressione a botoc novomente. Eprcvovel que voce veja uma mensagem. Altere a n~me do tobelo poro que passe a lnlclcr com y au z.
w.w --~~---~-~~~-~-~~--120
"RENDA EM 21 DIAS ABAP/4
Solu~60
121
Problema
Possiveis sintomas
Quando presslo no 0 bata o Create, voce ve a me nsagem "Syste m change option does not allow changes to SAP o bjects". Quanda press iona a batao Create, voce ve c me nsoge m "You are not au thorized to ma ke changes". Quando pressio na a ba tao Create, voce ve a mensag e m "already exists".
Problema
Posslveis sintomas
"E- Field (Data eleme nt or domai n
is not act ive or does nat exist} ."
SoluCjoo
Ve ja a linha "Nco poss e otivo r a tobelc", cnterlcrrnente . Procure mais e mboixo umo men sagem (em vermelho) scbre 0 Data Closs au a categorio Size. Proc ure odio nte umo mensogem (em vermelhoJ sa bre Data C loss ou cotegorio Size. Procure adiante uma me nsogem (em ve rmelho) sobre Da ta Closs a u categor ia Size.
digito u ia exlste no Da ta Dictionary . Escolho um no me de dominic diferente. Volte pa ra a tela do tobela Dictionary: Ta ble/ Structure C han ge Fields . De um clique d uplo no no me do elementc de dodos. Voce vera uma cclx o de di6logo ou a proprio ele mento de dodo s. Se voce vir uma co ixo de ogo com 0 titulo Creote d i61 Data Element, a elernento de dodos noo exlste. Verifique 0 no me coidcdoscmente . Voce digito u 0 nome errado? Pode ser um o boa ideio abrir umo nova sesseo e exibir os obietos qu e voce criou usando 0 Ob ject Browser . (No Dia 2, velo 0 seccc "locchzondc seus o bjete s de desenvolvimento".) Se voce puder exibir a elem e nta de dodo s, examine a co mpo Stat us. New e um stat us? Se nco, 0 elemento de do do s precise ser cttvcdo. Presslone 0 botdo Activote e e nloe presslo ne a ba tao Back para retornor a tabela .
creating ta ble in the DB" "E- Ta ble (Sta teme nts coul d not be ge ne rated)."
Nco posso
c tlvor a tobelo
Aporece a me nso gem "E-Held (Data element or domai n is not active or does not exist)".
Voce dig itou um va lor invalido no co mpo Size Category des confiqurocoes tecoicos . Pres sione Back seguido de Technica l Settings e mude c Size Category para 0 (zero). Voce digitou urn valor inv6!ido no compo Size Category des configurac;6es tecnlcos. Presslone Back seg uido de Technica l Settings e mude 0 Da ta C loss pora APPLD (use um zero no fina l de APPL}.
Oe campos de chove prim6 rio
nem compos choves. [Tados as marcos de verificao;oo no colune Keydevem este r juntos no comeco de to belo .)
Venda
tela
ABAP/4
Dictionary : Ma intai n
Technlccl
Settings
O s ctrtbvtos tec nfco s fora m au nao lnseridos a u selves. Insira entoc as otnbutcs tecnlcos, pressionando a bctcc Save e par ftrn pressione Back.
DIA 3, 0OATAOICTIOHARY, PA T R E1
123
122
Problema
Vendo a cclxc de di6loga Adjust Table cam a texto Table must
Possiveis sintomas
A tobelc preciso ser convertido.
Solu~ao
be adjusted
in the
Voce mud au a tobelc e cqoro umo eonverseo de tobel o deve ser feita para completer a ctlvccoc. Escolho um flpc de processa me nto Online e pressione 0 botoc Adjust..
1. Comece na D ictionary: Initial Screen (para chegar at a partir do menu principal SAP, utilize 0 caminho de menu Tools->ABAP/ 4 Workbench, Development->ABAP/4 D ictionary ). 2. Digite 0 nome de tabela - H al no campo Object Na me,
datab as e.
Aa oparecer a mensogem no porte inferior do tela "Initial va lue not permitted as the field nome" ou: e impassivel desloccr-se para cimo au nco e pas sive! ver os com pos d igitodos
Nee consiqo
Voce tentou remover um compo delxcndo-c em bronco. Nco se pa de fozer lsso: voce deve excluir os cam pos usonda o bctcc Cut no borro de ferromentos. Pressiooe Cut ate voce ver a mensogem "Selected entries were copied to the clipboard" no parte interior do [cnelo no borro de status.
3. Escolha a botao de op~ao Tab les. 4. Pressione 0 botao Change. Is50 0 leva a tela D ictionary: T able/ Stru cture: Change Fields. 5. Pr essione 0 botao New Fields. Linhas ern branco-aparecem na parte inferior ciatela e as campos existentes de tabela sao rolados para cima.
6. Na coluna Fiel d Name, digire 0 nome do camp o que voce deseja adicionar. 7. FalSa u ma marca de verificacao na coluna Key se ela e parte de chave primaria. (Os campos -- - regia e - - e Land l nao sao, mas esse procedimentc e escrito gener icamente para que seja utilizado em situa'i0 es gerais.) 8. Digite 0 nome dos elem entos de dados associa do s na coluna Data Elem. 9. Pressione a recla Enter. 10. O lhe na barra de status. Voce deve ver a mensagem "D ata element is not active, porque 0 elemento de dados nac exist e. 11. De urn clique duplo n o no me do elemento de dados . A caixa de dialo go C reate D ata Elem ent sed, exibida. No camp o Data Element estar a a nome do elem ent o de dados a ser criado. Este naturalmente sera 0 eiem enro de dados que voce deseja criar , entao a menos que esteja incorr eto, nao 0 altere aqui . 12. Pressione 0 batao Continue . A tela Dictionary: C hange Data Element aparece . 13. Digite 0 te xro curro para 0 elemento de dado s.
I'
I,
I
Uma mensog em ca mec;ando com os corccteres "W:" oporece no borro de status e voce n60 pode prosseg uir.
i
I
14. Digice urn nome de dominic . 15. De urn clique duplo no nome de dominic para cria-lo. A caixa de dialcgo Create D omain sera,exibi da. No campo D omain N ame estara a nome do dominic a ser criado. Este naruralment e sera 0 domfnio que voce deseja criar, entao a menos que esteja incorreto, nao 0 altere aqul . 16. Pressione 0 botao Continue. A tela Dictiona ry: Maintain Domain e exibida. 17. Preencha os campos Short Text, Data Typ e e Eield Length.
--t. .
<:...:~.. .
~. _'I .
. .. . . . .
* w
'W
w w w w w . it . :5 -;;
DIU aDATA DICTIONARY, PART< 1
125
18. P ression e 0 bo rao Active na barr a de ferramentas Application. 19. P ressione 0 botsc Local Object. Voce e levado de volta a tela Dictionary: Maint ain D omain. 0 valor no campo Status se alter-a para Act. e a mens agem "was activated" aparece na barra de sta tus . 20. Pression e 0 batao Back na barra de [erramentas Standard para retornar a tela Di ctionary : C hange Data Element. 21. Digire os campos r estant es no elemen to de dado s (v eja 0 passo mimero 7 do Procedi me nt o de Criacao de Elemento de Da dos na se~ao "Criando urn elem ento de dados" ). 22 . Pressione 0 bot ao Active n a barre de [erramentas Application . Voce entao vera a tela Create O bject Catalog Entry. 23. P ressione 0 bo tao Local Object. Voce e levado de volta a tela Di ctionary : C hange Data Elem ent . 0 valor no campo Status se altera para Act . e a men sagem "was activated" aparece na barra de status. 24 . P ressione 0 bo tac Back na barra de ferr amentas Standard. Voce e levado de volta a tela Dictionary: Table/ Str ucture: Change Fields . Nao havera nenhuma m ensagem na barra de Status , 25. Repita os passos 5 a 23 para cada novo elemento de dados que voce quiser crier. 26. Depois que voce criou to dos os dominios e elemento s de dad os, pressione 0 botac Active na bar ra de [erramentas App lication. Se a ativacao for bem-s ucedida , a mensagem "was activate d" apar ecera ria barra de status e 0 campo Status ira ca nte r 0 valor A . ct 27. Pressione a botao Back para retomar a. D ictionary: Initial Screen.
nalidade de dicionario qu e ePOllCO con hecida para voce , sem querer modificar uma tabela exisrente. Para cop iar uma tabela, siga est e procedimento: 1. Va para a Dictionary: In itia l Screen . (Pa ra chegar ai a partir do menu pri ncipal SAP, utilize 0 caminho de menu Tools- >ABAP / 4 Workbench, Development->ABAP/4 D icticnary.) 2. Esc olha 0 botao de 0Pliao T ables. 3. Pressione 0 borao Copy na barra de [erramentas Application. 4. Digite 0 nome das tabe las F rom e To. 5. Pressione 0 be-eo Continue. Voce elevado de volta para a Dictionary: Initial Screen e a mensagem + + aparece na bar ra de Status na parte inferior da janela. 6. Pressione 0 botao Active na barra de ferr amentas Application para ativar a nova tabela.
As tabelas noD padem ser renomeadas . Pa ra cltercr a nome de umo delcs, 'lace deve co plo-lc para umo tabe la diferente com 0 nome desejodo e entcc exclulra tab ela original. Se 'lace preclscr fozer isso, certlftque-se de copiar tonto a estruturo como os dodos do tooele.
Esse procedimento copia apenas a estrutura de tabel a, nao 05 dados. Para copiar os dados de tabela, escreva urn programa pequeno de ABAP/4 de sua propriedade.
Modificondo tabelos
D ep ois que voce criou uma tab ela, voce pede:
copia-la
exclu i-la
adicion ar mais camp os nela excluir os campos dela alterar os campos dent ro dela Essa secao descreve como executar est as fcncoe s.
1. Va par a Dictionary: Initial Screen. (Para chega r af a partir do menu principal de SAP, utilize 0 caminho de menu Tools- > ABAP/4 Workbench, D eve!opment-> ABAP/4 Dictionary.) 2. Digice 0 nome de tabe la no campo Object N am e. 3. Escolha 0 botac de op ~ao T ables. 4. Pressicne 0 bono De lete na ban-a de [erra men tas App lication. U rn pop-up pedira a voce a confirmacao do pedido de exclusao . 5. Verifi que 0 nome da tabela que voce digitou e pression eYes se desejar continuar.
I ~ i' .j!
W._ WW W 9&* _
"'!!!!""""'!!!!.... !!!'~~""l;!i! I
DIA3,DDATADICT1DN' R, P, RTE I Y
127
Adicionando
camp~Ol:>S
Excluindo campos
Voce pode excluir campos existentes de uma tabela. Voce pode desejar fazer isso se 0 campo nac for mais necessario na tabela au se voce tiver criado urn campo para os propcsitos de experimenrar funcionalidad e de dicionario que e pouco conhecida para voce. Para excluir um campo de uma tabela, compl ete os seguintes passos: 1. Va para Dictionary: Initi al Screen. (Para chegar af a partir do menu principal de SAP, utilize 0 caminho de men u Tools- > ABAP/4 Wo rk bench, Development-> ABAP/4 Dicricnary.) 2. Digi te 0 nome de tabe1a. 3. Escolha 0 borao de opc;ao Tables. 4. . Pressione 0 botao Change. 5. Coloque 0 cursor no campo a ser exclufdo. 6. Pressione 0 bcrac Cut na barra de ferramentas Application ou escolha o caminho de menu Edit-s-Delete Field. 7. Ativ ea tabela. A tela Adjust Table eexibida. Pressione 0 botao A djusr para converter a tabela no banco de dados.
Inserir urn campo permire que voce posicione urn campo antes de outre existente . Acrescentar urn campo permite que voce adicione novos campos no fim da tabela, depois de todos as campos existentes.
Inserindo um campo Para inserir urn novo campo acima de urn campo existente, execute esse proce dimento:
1. Co mece na Dictionary: Initial Screen. (Para chegar afa parti r do menu principal de SAP, utilize 0 caminho de menu Tools -> ABAP/ 4Workbench, D evelopment - > ABAP/ 4 D ictionary.) 2. D igite 0 nome de tabela no campo Object Name . 3. Escolha 0 bata o de opc;ao Tabl es. 4. Pressione 0 botsc Change. Isso 0 leva para a tela Dictionary: Table/St ructure: Change Fields. 5. Posicione 0 cursor em urn campo. 6. Pressione 0 ba tao Insert Field na berra de ferramentas App lication. : U ma nova linha aparecera acima da posicao do cursor. 7. erie seu novo campo na linha que voce acabou de digitar.
~o
Para excluir um compo de umo tabela , nco de ixe em bronco a nome de compo. Em vel disso, coloque 0 cursor sa bre 0 nome e pressione o botdo Cut. Se voce simplesmente de ixar em bronco 0 nome, 0 mensagem " Initial value not permitted as field na me" cp crecer o no porte inferlcrde suo tela no barro de'status e voce nco poderc continuor ate que exdua 0 linho que voce deixou em bronco.
Ac rescenfando um campo Para acrescentar urn campo no fim de uma rabela, execute este procedi menta:
1. Comece na Dictionary: Initial Screen. (Para chegar aia partir do menu principal de SAP, utilize 0 caminho de menuTools->ABAP/4 Wo rkbench, D evelopment- > ABAP/4 Dictionary.) 2. Digite 0 nome de tabela no campo Object Name. 3. Escolha 0 botao de op~ao Ta bles. 4. Pr essione 0 bono Ch ange. Is50 leva voce para a tela D ictionary: Table/Structure: Change Fields. 5. Pressione 0 boec New Fields na barra de ferramentas Application . N a metade inferior da tela, os campos existentes rolam para permitir que voce digite campos adicionais no fim. 6. Crie seus novos campos nas linhas que voce acaba de digitar.
128
"RENDA EM,l DIAS A BA'" Din 0 D TA DICTIONARY, PARTEI A
129
3. Escolha 0 bocao de opclo Tables. 4. Pressione 0 ba tao Display . 5. De urn clique duplo no elememo de dados correspondente ao campo
que voce quer aItera r. 0 elemenro de dados sera exibido.
fun cionalidade
e a partir
6. De urn
clique duple n o nome de dominic no elemenro de dados . a dominic sera exibido. 7. Pressione 0 batao D isplay < -> Chan ge na barra de [erramentas Application. Voce agora sera capaz de alterar os atributos do dominic.
8. Deixe em branco 0 campo Output Leng th. 9. Altere 0 tipo de dado e/on compriment o.
10. Pr essione 0 batao Ac tive. A tela Please note! e exibida para mostrar uma lista de todas as tabelas e estrururas que utilizam esse dominic . Elas scrao todas afetadas . Para continual', pressicne 0 batao Co nnnue.
programa de
utlllzcm.
Table" agora .
NOVO...
Execute esse procedimento para adic ionar clados asua tabela. A ajuda com problemas comuns e dada no D iagnostico e solocso de probl em as que se segue. Se voce tiver problemas com quaisquer urn do s pas sos, nac se esque<;.a de con sultar 0 Diagnostico e solu<;ao de problemas. 1. Va para Dictionary: Initial Screen. 2. Digite
0
Voc e pode ut ilizar os utilitarios de navegador de dados para exibir ou modificar dados den tro de tabelas das seguintes maneiras: proeu rando e exibindo as Iinhas que en contram criteria especificadc adicionando novas linhas . modificando linhas existentes excluindo linhas Esta se<;ao descreve como u tilizar os navegadores de clados pa ra executar essas fun~5es.
3. Pressione 0 botao Display. A tela Di ctionary: T able/ Stru cture: Display Fields e exibida. 4. Escolha 0 caminho de menu Utilities- c-Create Entries. Observe a barra de status na parte inferior de sua tela quando voce escolhe 0 caminho de menu; vo ce pode ser capaz de ver a m ensagem "Compiling. .". Essa mensagem indica que 0 sist ema esta gerando a atualizacao de programa. A tela Table Insert e exibida. Nessa tela, ha urn campo de entrada para cada campo em sua rebels . A esquerda de cads campo de entrada, aparece 0 no me de campo . Os campos de chave primaria apare cem primeiro, seguidos po ruma linha em branco, depois seguem as campos restantes da tabela. Para ver 0 programa que foi gerado, escolha Utilities->Creat e Ent ries e depois escolha a
._., ~
'J:fr
'. oil
,....,.....
r- ,..
...,
r-..,.....
'131
130
caminho de menu System -c-Status. 0 nome de programa aparece no campo Program (Screen).
Problema
Possiveis sintom as
Quando presslcno 0 botoc Save , voce ve 0 mensagem II A data record with the specified key a lready exists" na porte inferior do [onelc.
SoluljOO
A tob elc ;0 cc ntem um reqlstro co m 0 mesmo chove prima rio que a primeiro que voce estcvc tentondo salvor. O s compos de chove prirnorlo sec os prlrneircs grupos de ca mpo s que oporecem no tela. Hd urn espoco em bronco no telo sobre 0 ultimo camp o no chove primcric . Altere 0 va lor no primeiro des compos ocimo do espoco e tente solver seu registro novomente .
Se voce coloco 0 cursor em qualquer campo e presslcno a tecla telo Help - Ta ble Insert e exlbido. Nessa tela, voce vera a documentac;co que voce digitou no elemento de dodos. Para reto ma r tela Table Insert, pressione botcc Continue ou Concel.
Fl '~
5. Preencha os campos com as dados que voce quer digirar em sua tabela. 6. Pressione 0 botso Save na barra de ferramentas Standard. Voce vera a mensagem "Da tabase record successfully created" na barra de status. 7. Repita os passos 5 e 6 para cada linha que voce quer inserir. 8. Pressiorie 0 botao Back para retornar a tela Dictionary: Table/Structure: Dis play Fields. 9. Escolha 0 caminho de menu Utilities->Table Contents para exibir as linhas que voce acabou de criar. A tela DOl ta Browser: Table: Selection e exibida. 10. Para exibir todas as linhas na rabela pressione 0 botao Execu te sem inserir qualquer criteri o de pesquisa. A tela Data Browser: Table Select Entries e exibida e as novas linhas que voce inseriu serao mostradas em uma lista.
No
Utiliza nda
SE16
Problema
Nso posso adicianar dodos
Po ssive is sintomas
A ca ixa de seleceo Tob.Moint.Allowed nee estc otivada. Va para a tela Dtctlcncry: Table/Structure: Change Fields (para chegar ate 1 exiba a tobelo e clique 6 no bcteo Display -c-c- Chonge no borro de ferromentos Application ate que os compos seja m modificcdos) . Adicione umo marco de verlficcccc em Ta b.Moint.Allowed. Pressione o batao Activate.
D a tela Di ctionary: Table/Structure: C hang e Fields, escolha minho de menu U tilitie s-c-Table Contents. Digire /nse16 no campo Command.
ca-
S(mHCAM~ lnlcte a ScreenCam "How to Display Tc ble Da ta Using the Doto Browser" agora.
iI
1. 2. 3. 4.
Digi re / nse16 no campo Command. Pres sione a tecla Enter. A Data Brow ser: Initial Screen aparece. Digire seu nome de tabela no campo Table Name. Pressione 0 batao Table Contents na barr a de [erram entas App licatio n. Se a tabe1a contiver mais de 40 campo s, voce vera a tela Ch oose Fields For Selection. Se voce a vir, coloque um a marca de verificacao ao lado dos campos pelos quais voce quer ins erir a s crireri os de pesquisa e pressione 0 batao Execute. O s campos que voce ativou
-~-
-':--'-~.""~"O"'''''''''''"--;;'=~~~-'!!!"""",!,!!,"",'''''''''''''''''''''''''''''''''''''''''''''''-''''''-''''''''''--~,,,,!,,----------------------------~~~======~
132
'P RE Ho , EM 2J DiAl ' ' ' PI' , TE DIU 0OAT' olmoNARYP' R I
133
serao mostrados na pr oxima tela - a tela Data Browse r: T able: Selection. Essa tela ena maioria das vezes simplesment e chamada tela de selerao. A qui voc e po de inserir os criterios de pesquisa para locali z ar as linhas espedficas na tabela. P ara exibir todas as Iinhss, D aD digite qualqu er crirerio de pesquisa. Se hellyer m ais de 500 Iinhas que coincida m com seu criteria e voce quiser exibir codas elas, deixe em branc o 0 valor no cam po M aximum No. Of H its.
5. Pre ssione 0 bo tao Execu te na barra de [erramentas Application. Voce eneac vera a tela Da ta Browser: Table Select Entries. T odas as linhas que coincidem com seu criteria serao exibidas ate 0 numero maximo de linhas espec ificadas no campo Maximum No . of H its.
a esquerda e a direita.
0
De urn clique dup lo em um a linha para ver mais campos de uma vez .
caminh o de me nu Tabl e
0
Altere uma linha existe n te ativando-a e entao escolhendo de menu Table Entry -c-Change.
caminho
Altere as mulriplas linhas ma rcando-as, escolhendo 0 caminho de menu Table Ent ry- > Chang e e entao pressione os bot6es Next Entry e Previous Entry na barra de fer ram entas Application. Copie uma linha existe nte m arcando -a e entjio escolhendo de menu Table Entry-> C reate w/reference.
0
caminho
Problema
Node c contece quan do voce pressiono 0 botdo Exec ute.
Solusao
Voce intenciona lmente au acid entalmente deve ter digitado a lga em um campo no tela de seleccc e nenhumo linha coincidiu co m esse criteria de pesquisu. Deixe e m bronco todos as compos no tela de selecc o e presstcn e Execute
novorn ente.
Copie as mulciplas linhas marcando-as, escolhendo 0 caminho de menu T able Entry->Change e cntsc pressionando os bo roes Next Entry e Pr eviou s Entry na barra de ferramentas Application.
Exclua uma linha ou mais marcan do-as, escolhendo 0 caminho de menu T able Ent ry- c-C reare w/ refer en ce e coeac pr essiona nd o 0 boteo Delete Ent ry na barra de fer ramentas Application para cada linha que voce quer excluir. Selecione todas as linhas e tire a selecso de rodas as linhas pressionando os bot6es correspondentes na ba rra de ferramentas Ap plication . Im prima a lista pressionando Standard.
0
Voel! inseriu dodos no tabela? Voce pressionou Save depois de coda regi stro ~ Voce iosenu vclcres de compos de chove ."; ' primc rio para code registro? Voce intencionol ou oclde ntclme nte digitou olga em um campo no tela de sele<;60e nem tcdos os registros eoincidem co m esse c-iteric de pesquisa. Retorne para 0 tela de setecec , delxe em bronco fodo s os campos e pressic ne o bat ao Execute nova mente.
C lassifique a lista colocando 0 cursor em uma coluna para classificar e entao pressiona ndo os bo t6es Sort Ascending ou Sort Descendin g na barra de fer ramentas App lication. Localize um a st ring pression ando 0 ba tao Find n a barra de [erramentas Standard. D igite a st ring, pressione Find e entao de urn clique em uma area dest acada para visu alizar essa linha. Palja download cia lista para urn arqu ivo em seu disc o rigid o es colhendo o caminho de menu Edit-> D own load. Voce: pede esco lh er ASCII, form ato de plan ilha ou Rich Te xt F orm at. Selecione os campos que vo ce quer vel' na lista esco lhen do de menu Setrings-> List fo rm at-> C hoose fields.
0
Do mesrnc forma qu e a caminho de menu Utilities->Create Entries, Utilities->Table Contents tombern gero um prog romo, e le e ge ra do novamente se voce cltercr 0 estruturc de tab elo. Poro exibir 0 progromo q ue ele gem , c pa rtir do fela de sele<;60 escolha a cominho de menu System- > Status.
caminho
S(RHNCAM ~ Inicie
Varies outrOS parametres de Iista m ilium 0 caminho de menu Settings-> U ser parameters. Aqui voc e pode configurar a largura de safda, o mimero maxim o de linhas que pode ser exibido, ativar saidas de
seguinte:
135
,1 t l
conversjo ou exibir 0 nu mero real de linhas que coincide com 0 criterio de selecsc. Voce tambem pede alterar os tftulos de coluna para utiliz ar os r6t ulos de elementos de dados em vez dos nomes de campo das
tabelas.
nolo sera capaz de utili zar 516 se a tabela river urn malogo de manuten~ao padra o. Ness e case, use 0 SM3l. A maneira mais simples de dizer se voce deve utilizar S 16 ou SM31 e aimplesmenre experiments-los. Se urn deles nao funcionar, enrsc 0 OUtrO pr ovavelmente resolved. Se nenhum funcionar, recorra ao SM30.
niMO r
NOVO lrl...
Um di6/ogo de monuteno podroo e um progromo ABAP/4 qu e voce gero . Qu a ndo voce choma 5M31 a u SM30, 0 novegodor de dodos c uto rncficcme nte lccchzc e corrego esse pragroma gerodo. He oferece umc interface mois campfe xc e mois funciono lidode do que 0 5E 16. Poro mois informa lioes sobre di61ogos de monutencec e procedimento po ro eric-los, consulte a e lude R/3 Library.
ENTRAOA~
Para localizor as informo<;6es em di6!ogos de mcnuten ceo no R/3 library, escolh a 0 com inho de menu Svstern-> R/3library Help. A partir da l, de um clique nos seguintes guias: Basis Components>ABAP/4 Deve lopment wcrkbench-> Extended App lica tions Funct ion U brary->E xle nded Table Maintenance.
a 5E17 emuito semelh ante ao 5E 16 no sent ido de qu e pode ser u tilizado para
pesquisar linhas especjficas dentro de uma tabela. Enrretanro, 0 SE17 nao pode ser utilizado para atualizacoes. U tilizando 0 5E16, voce pede especificar criterio de pesquisa complexo para urn maximo de 40 campos p or vez; com SE17, voce . pode especificar criterios de pesqui sa simples pa ra qualquer numero de campos de urna vex. 516 somente at iva a safda a ser classificada par um a un ica coluna de um a vez; 0 SE17 permite que voc e especifique qualquer sequencia de tipc ao longo de varias colunas. 5E16 nao func iona ra para uma tabe1a que tern urn dialcgc de manutencio padrao, mas a SE17 fun cionarg.
Comparanda
1 report ztx0301. 2 tables ztxlfaL 3 se je ct > from ztxlfal. 04 wr H e : I ztxlfal-11fnr, 5 zt xlfal-nam , el 6 ztx lfal-regi o, 7 ztxlhl-landl. 8 endsete ct 9 if sy-subrc <> O. 10 write 'Table is empty.' . 11 end1f.
Utiliza ndo
qjuda El
A ajuda Fl e a documenracjo vista pelo usuario para urn' campo. Para obra-la, o ususrio coloca 0 curso r no campo e press iona Flo A do cumentacao e exibida em uma caixa de dialogo. Voce utilizara 0 seguinr e proc edime n to para modificar a ajuda F I que voce cri ou ant::riormente para 0 campo 1i fnr.
SmtHCAM~ lnicle a 5creenCom "How to Crea te or Mod ify Fl Help" oga ra .
"'l!'"
",!!!!" --'!!!9 ~ .~ -
~'~i ~:C
"'
137
2. Localize 0 campo para 0 qual voce quer edicionar ajuda e de urn clique duplo no nome do elemento de dado s correspondence a esse campo. A tela D ictionary: Disp lay Data Element sera exibida. 3. Pressione 0 botao Display < -> Change na barra de ferramentas App lication. A tela muda para 0 modo de alreracao. 4. Pressione 0 borao D o cumen tation na barra de ferramentas Application. A tela Change Da ta Element: Language E e exibida. 5. Digite 0 texro que 0 usu erio deve ver quando ele solicitar ajuda para esse campo. A primeira linha contern os caracteres &D EFINITION &. Isso e urn titulo; nao altere essa linha. Digite sua documenracao comecando na linha da is. Press ione a tecla Enter para comecar cada novo pardgrafo. 6. Press ione 0 botao Save Activ e na barra de ferram entas Appl ication para salvar suas alreracoes . A mensagem "Document was saved in active status" aparece na barra de status . 7. Pr essione 0 batao Back na barra de ferramentas Standard. VocS e levado de volta a tela Dictionary: Change Data Element. 8. Pressio ne 0 botao Back mais uma vez para retomar a tela Dictionary: Tab le/Structure.
1. Comece no menu principal do R/ 3 e escolha 0 caminh~ de menu Too ls->ABAP/4 Development Workbench. A tela ABAP/4 Development Wo rkbench e exibida.
2. Escolha 0 caminho de menu Utilities- >Docu mentation. A Document Maintenance: Initial Screen e exibida. 3. De urn clique na seta para baixo do campo Document Cla ss. U ma lisra de classes de docurnento e exibida. 4. De urn clique duple em General Text . a campo D ocu ment C lass agora contem 0 valor Genera 1 text e u rn campo identificado Gen eral Text e exibido na parte superior cia tela Document Maintena nce. (0 campo Documentation Type ja deve conter 0 valor Orig; nal us ervSe ele nao contiver, de urn clique na seta para baixo no fim do campo e o ahere. ) S. No campo General Text, digite 0 nome de urn documento que vo ce quer criar. 0 nome deve iniciar com y ou z. LEMBRE-SE DESSE
N OME.
6. Pressione e exibida.
0
7. Digite seu doc umentc aqui. Pressio ne a tech Enter no final de cada paragrafo. 8. Pressione-o botec Save Active . A tela C reate Object Catalog Entry e
exibida.
9. Pressione 0 bo-se Local Object. Voc e elevado de volta a tela Change General Text e a mensagem "Document was saved in active st atus" aparece na barra de Status. '10. Pressione 0 batao Back para retornar a tela D ocument Maint enance: Initial. 11. Pressione 0 batao Back novamente para ret omar Development Workbench.
a tela de ABAP/4
NOVO ~
12. Entre no Data Dictionary e exiba seu elemenro de-dado. 13. Pressione a batao D isplay < -> Change na barra de {erramentas Application. Sua tela altema-se para alrerar 0 modo. 14. Pressione 0 bono Documentation na barra de feITa~emas App lication. A tela Change Data Elem en t: Langua ge E e exibida. 15. Coloque 0 cursor na posicao ern que voce quer inserir urn hiperlink. 16. Escolha 0 caminho de menu Inc1ude->Reference. A tela Insert Link
eexibida.
17. De urn clique na seta para baixo no fim do campo Selected Reference. A tela Title e exibida: note que ela conte m uma lista de classes de do cumentc.
138
139
18. De urn clique duple em General text. 0 campo Selected Reference agora contem 0 valor General text e urn campo rotulado General
Resumo
a Data Djctio~ary e uma ferramenta utilizada por program as em ABAP/4 para cnar e man ter tabelas . Hi tres ripos de tabelas: transparente, de pool e de cluster. As tabelas transparentes sao as mais comuns e sao utilizadas para armazenar dados de aplicarivo. As rabelas de pool e de cluster sao principalmenre utilizadas pela SAP para armazenar dados de sistema. Para criar uma tabela, voce pr imeiro p reeisa de dominies e de elementOSde dados . a s domfnios ofere cern as caracteristicas recnicas de urn campo; os .elementos de dad os ofere cern os r6tulos de campo e a ajuda FI. as dois sao reutilizaveis.
no passo 6, 20. N o campo Name In D ocumen t, digite 0 texto de hipe rlink. Esse e 0 tex to que sera. dest acado e no qual 0 usuario sera capaz de dar urn clique par a reeeber ma is ajuda. 21 . Pressione 0 batao Continue . Vocee levado de volta para a tela Change Data Element: Language E e urn link aparece na posiceo do cursor , 22 . P ression e 0 botao Save Ac tive na barra de fer ramentas Application.
23. Voce pode experimentar seu novo hiperlink imediatamenre escclhendo 0 caminho de menu Document-c-Sc reen Output. A tela Display D ocument ation e exib ida, seu texto de ajuda aparece e seu hi perlink devera ser desta cado. 24. De urn clique no h ipe rlink. A tela Display Hypertext: e exibida e seu doc umento prov avelmente aparecera. 25. P ressione Back tre.s vezes para retomar para a.tela Dictionary: Table/St ructure. . 26. Para testar seu hiperlink, exiba sua t abela e escolhao caminho de menu Uriliries- c-Create Entr ies. A te la T able Insert e mos tr ada .
o~ .objetos de .dieiomirio devem estar ativos antes de poderem ser utilizados. Se fizer uma alteracao para urn objeto de dicionario, voce deve reativar 0 objero para que as alteraqoes tome m-se efetivas .
a s n avegadores de dados permitem que vo ce exiba e modifique os dados dentro de tabelas. a SE16 e 0 navegador mais geral de dados. o SEll, 0 SM30 e 0 SM31 sao os out ro s navegador es que oferecem capacidades variadas. ~oce po de erial' ajuda Fl dentro de u rn elemento de dados pressl~nando 0 bordo Documentation. Dentro dess a ajuda Ft, voce pode cnar vfnculcs de hipertexto para outros docum entos de aju da FI.
27. P osicione 0 cursor no campo n o qual voce criou a ajuda Flo 28 . Pressione Flo Seu textc de ajuda com 0 hiperlink devers ser exibido. 29. D e urn clique no hiperlink. Seu novo documento deve ra ser exibido.
P&R
o E 'j;l, o
c
..
Problema
Nee posse loca lizer Gener al Text no llsto de classes de docvmento. Aparece a mensagem "Chonqe relevant to trcnslotlo nt" Aparece 0 mensogem "Dote element is not used in on ABAP/4 Dictionory structure.
H
Sol u ~ ao
Se deixo 0 comprirn ento de urn campo menor alt era n do 0 do mfnio e, se esse campo e ut ilizado em uma tab ela que ja con rem dados pree n ch en do 0 comprimento in tei ro do campo, o qu e acon t ece? Q uando voce ativa a domfnio, 0 sist ema ten rar a ativar as tabelas qu: sao dep~ndentes desse domfnio. A ariva cao das tabelas que teriam perdido dados falharia e um a lis ta d essas rabelas seria m os rrada para voce. Se voce en tao p rosseguir e ativar essas tabelas, 0 sistema au tomaticam en te converte d. os dad os nelas e os dados na coluna referenciada pelo domla io serao rruncados . Como voce sabe qu ais tabelas serac af~tadas an tes de alterar urn
'" -e
~ III
~
'"
....
Presslone 0 botoc Save Active no bo rra de ferromentas Application , noo 0 bctco Save no borra de ferromentos Standard. ~ Altere a closse de docu mento po ra General Text. 0 titu lo do tela e Didionary: Display Doto Element? Se for, voce est6 no modo de exibi~oo. Voce precise ester no modo de clterccoo. Pressione 0 batao Display <-> Change e entec tente novome nte.
o
o
Estou pressionando 0 botco Documentation no tela de elemente de dodes, mas nado cccntece.
dominic?
140
I APRENDA EM 21 DIAl ABAP/4
- - __ v
w-- . . . . = _ .
DIA 3, OD T A ADJCTlONAR , PARTE 1 Y
!
141
Paca uma list a W here-use d no domlnio. Para f~ zer i.sso, exiba a dom inio, pressio ne 0 ba tao Where- Used ~lSt na barr~ de ferramentas Application, selecione Other Objects ~ pressione Continue. Uma lists de drvore sera exibida. De urn clique duple na linha em que esta escrito Table. A lista de.nomes de ta~e~a e exibida. De um clique duple em qualquer linha para exiblr a
5. 0 qu e sao os c6digos de transacao d os quatro navegadores de clados? Qual e 0 mais comumente utilizado e qua l nao pode ser uti iiz ado para atualizar dados?
I ,
6. Q ual ea diferenca entre uma tabela tra nsparenre e um a tabela de pool ou uma tabela de cluster ?
rabela.
Exerd cio J
Adicione os campos mo strados na Ta bela 3.4 em S1..1<'I tabela 1 f al . Nenhum desses camp os ted. urn X na coluna Key porqu e eles nao faze m pa rte da chave pri maria. 0 propdsito desses campos e co nter urn segundo nome para 0 fabr ican te, a data e a hora qu e a linha foi criada e 0 ID de usuario do usudrio que criou a regi stro. Crie urn n ovo elemen to de dadcs p ara todo s os campos. Reutilize 0 dominic do campo namel para a camp o name2. Para 0 resto dos camp os, utilize os nomes de dominies existences do R/3 mostr ado abaixo. Do cum ente esses campos utilizando 0 botao Docum ent ation no elemen to de dad os. Depois que voce ativou suas alceracoe s, utiliz e urn navegad or de dados para atualiza r as linhas existences em sua tabela e col oque os dados nos novos campos. Enquanto voce esta arualizando as Iinhas, te ste sua ajuda F lo Ta b e la 3 .4 Novas compos e suas cc rccterlsticos pa ra a tab ela ztx lfa l
Nome do campo Nome de DE Nomede DM
o
o
I !
!
!
I I
Exerd cio 2
C rie uma tabela transparenre knal para conter dad os-mestr es de clienres, co mo mo strado na Tabela 3.5. Utilize urn na vegador de dados para adicionar da do s at abela. eri eurn novo programa e0302 que Ie os dados dessa tabela e os escr eve ern uma Iista.
Works hop
Os segu intes exerclcios proporcionarao. a voce pratica para c~iar objetcs no dicionaric de dados e urilizar esses objetos em prcgramas SImples com as insrrucoes tabl es, sel ect e write. As respo stas estao no apendice.
Q l Je stjo no ri o
1. Qual e 0 prop6siro do dominic ?
2 . 0 que
0
3. A quese refere
4. Para campos do tipo DEC, 0 ponte decima l earmazenado com ovalor do campo?
~ ,--,,' '
142
N ome
PK
No me
de DE
Nome
de OM
Tipo
Len
de ca mp o
Chente
mafldt Numero de c1iente
m andt
kunnr
kunnr
Nome de clente
name~
knamel
ci tyc
Ctdode
cityc
Regioo
regio
Pels
"r egi o
, and l
1andl
Criar e utilizar tabelas de texto. Descrever a diferenqa ent re uma estrutura e uma tabela e criar estrutu ras no Data Dictionary do Ri3.
dade.
Aninhar est ru tu ras dentro de ourras estrutur as ou t ab elas.
Umo chove estrongeiro e um compo em umo tobelo que estc coneetodo a outra HiMO tcbelo via um rela ciono mento de chcve estrang eiro. prop6sito do relocionomento de chc ve estrongei ra e vchdc r as dodos sendo inseridas em uma tabelo de verificccc c co ntra um conjunto vdlido de vclores em outre tobelo. A tcbelo que contem a chove estrongeira e chcmado tobelo de chove estrongeiro. A tobela que contern a cc ojvnto vclido de vclcres e chemo do tobete de verifico<;6c [ve]oa Figura 4.1) . 0 compo que e va lida do e em que a relodonamento de chove estrangeiro e criodo e chomodo chove estrangeiro.
nl1p:l/www.compU $.ccrn.br
-------------~~~~~~w~~~144
APREH DA EK 21 DIAl AB AP/ '
Figura 4 1
.. -....
YWWYW W .
145
Tabelode move
estronge.ro
Tobelo
de yermco<;Oo
rth lfo1
l MO OS land l
nome do compo
reloctonc mentc de chove eslrongeiro
Ii US
CA
cA
IT
ta~6es de inr egri dade sio mantidas no banco de dados. Portanto, urn programa em ABA P/4 incorretamente escrito pode violar a inregridade referen cial; ele pode inserir valores invalidos nas ta belas de banco de dados . P or ess a razao, pr ogram as em ABAP/4 qu e precisam atu alizar 0 banco de dados com dado s proven ientes d e uma out ra fon te qu e nao a in t erface com 0 usuari o n orm almente passaro esses dad os p or u ma interf ace com 0 usuario a fim de
valids-los.
US U S
DE DE
JP -'-
US
"-
Q uando voce odic:iono dodos a esto tcbelc, umc verificot;60 , feito para 'o'er se a c6 digo do pa is que voce estc
Para mo is lnfcrmccces sabre utilizoliCio do interfa ce com 0 usvcnc pora vcltdcr dodos, consulte os programas de ajude do R/3 library para BOC (Botch Data Communication). Para visuolizor esso documentcceo, o partir de qvclqc er tela escolbc 0 co minho de menu Help->RJ3 library. Voce vern 0 me nu principal do blbltctecc do R/3 . A partir del, de um clique nos seg uintes guias: Basis Components->ABAP/ 4 Develo pment Workbe nch-> Basis Programming lnterfcces->Tronsferring Data With Botch Input.
P or exempl o, sua tabela - 1f al contem c6d igos de pafses em urn campo chamado landl . Voce pede cri ar um a segunda tabela, por exemplo t OOS, e preenche -la com uma lista de codigos de parses validos . Encao, se vo ce cria um a chave estran geira como a mostra da na Figura 4.1, uma verificacf o automaticam en te sen. feiea contra a tab ela de verificacao para urn valor valido. C om essa chave esrrang eira no lugar, 0 usudrio nac po de in serir codigcs de parses invalidos na tabela - - "l f al , U rna chave esrrangeira ob tem seu nome do fat o de que ela semp re deve verificar urn campo na chave primaria de outra tab ela. .
Os no mes de dominios do campo de ehave estrangeira e 0 campo de rabela d e verificacao devem seros mesmos.
segundo requi sit o existe p ara garantir qu e os campos que ests c sendo comparados sejam compativeis quanto co tip o e comp rimen ro de dad o (veja a Figura 4.2) .
No Figura 4.2, os dais compos utilizom 0 mesmo e lement o de dodos . ossim como 0 mes mo domlnio.lembre-se de q ue noo e tmpre scindlvel qu e as dois utlllzem 0 mesmo elementc de dodos - somente as dornlnlcs de vem ser os mesmos.
Como esses campos compartilharn urn dominic em com um, aintegridade da comparacao entre os dcis campos e garan tida, porque seus tipos e comprimente s ~e dados sempre coincidirao.
......
- ...
- --Tobela de
verifico<;oo
,",,005
... .... .. -- --
146
147
Fig ur a 4 2
mlto 1
de tobelo de
verificoc;lio e
landl
land1
"
"
I, pe:3chcr n:
"" /
A seguir apresen tamos 0 procedimento de criacao para a tabela de verificacao - - tOOS. Se voce tive r problemas, cons ulte a se<;ao de diagn6sti co e solucao de problemas relative ao p rocedi men to de criacio de tabelas rransparentes para dominies preexistentes e elementos de dados no Di a 3.
S(mNu.M~ lnicle a ScreenC a m "How to Create Check Ta ble ' . tO S" agora. O
type: chc r
len : 3
2. Digice
ztxlcnd l
ztxlondl
3. Escolha
4. Pressione 0 bocao Create. A tela Di ction ary: Table/Structure: Change F ields e exibida.
_ dominic
5. D igite urn textc cu rto, escolha a classe de entrega A e colo que uma marca de verificacao em Tab. Maint. Allow ed. 6. Di gite os n om es de campo e de e1emento de dados na parte inferior de te la.
Agora estd na hora de voce criar um a chave esrrangei r a simples. Este exemplc p ermi tird que voce se familia rize com as telas envolvidas no processo; todos os . cam po s nessas relas serfo explicados em deralhes mais adian te neste capitulo. " Os pro cedimenrcs a seguir demons tram como criar a tab ela de verifieafac zt xt 005 e dep ois uma chave estrangeira em zt xlfal - l andl ut ilizan do ztxt 005 como a tabe la de verificaclo. D epois de visualizar esse procedimento, vo ce sera solicitado a erial' sua pr6pria tabela - - -tO OS e entao criar urn relacion am ento de chave esrran geira de - - - lfal -l and 1 para tabela de verificacao - - - t OOS. Antes de erial' uma chave est ran geira, voce deve prim eiro te r um a tabe1a de verificacao. Emb ora ja haja uma tabela de c6digo de pafses n o R/3, para pra ricar voce criara e ut ilizara a sua propria tab ela. A tabe la d e verificacao se cha mar a - - - tOOS e ira conter os campos e utilizar os elem entos de dad os mostrados na Tabela 4.1. (Urn x na coluna PK indica campos qu e fo rmam a chave primaria. ) Tabela 4. 1
7. Coloque uma mar ca de verificacao nos dois campos para indicar que eles formam a chave primaria. 8. Pressione 0 b c tao Save na barra de [errament as Standard. A tela Create Obj ect Ca talog Entry aparece. 9. Pressione 0 botao Local O bject. Vo ce e levado de volta tion ary: Tab le/ St ruc ture: Change Fields.
a tela Dic-
10. Pressione 0 botao T echnical Settin gs na barra de ferr amentas Applicatio n . A tela ABA P/4 Dictionary: Ma intain T echnical Settings e exibida. 11. No campo Data Class, digite APPLO (APPLO com urn zero, na o
a (zero)
0
13. Pressione
batao Save.
14. Pressione 0 batao Back. Voce e.levado de volt a pa ra atela Dictionary: Table/St ructure: C han ge Fi elds. 15 . Pressione 0 botao Activate n a barra de [erram en tas Application. A mensagem "was activated" apa rec e na berra de sta tus e 0 campo Status contem 0 valor Act. . Escolha 0 caminho de menu Utilities- c-Create Entries para inserir c s dados em sua tabela de verificacao recentemen te criada. Insira seis linh as com valores 1andl de us, CA, DE, rr, J P e AU.
- --TOOS
Nome d e cam po
No me de DE
mandt l andl
m t and
- -1 andl
I ,
~..--.d
w ...
148
APRENDA EM 21 DIAl ABAP/4
........... w
Fi g u ra 4 3
wv
V.W!''I ..;
149
A tela Create Foreign Keyeobe compos de tobela de verificaqdo e seus compos de chove
esfrangeiro ossociodos.
e para conter
4. Pressione 0 botao Change. A tela Dictionary: Table/ St ru cture: Chan ge Fields e exibida. 5. . Posicione 0 cursor no campo que esci para torn ar- se a chave estrangeira (l and2). 6. Pressione 0 botao Foreign Keys na b erra de fer ra m entas App licati on. A tela Create F oreign Key sera exib ida (veja a Figura 4.3). 7. Digite urna descricao da chave estrangeira no camp o Sho rt T ext , por exemplo, Country Code val idat i on.
Testa ndo
8. Digite a nome da tabela de verificacto ( - - - t0 05) no campo Check Table ou de urn cliqu e na seta para baixo e escolha cia Iista. 9. 0 pop -up Change Foreign Key aparece. Ele declara Check ta ble name was created or changed. Generate a proposal for fi e 1d ass i sn- ,
10 . Voce elevado de volta atela Create Foreign Key. Os names de ca~~o de tab ela de veri ficacao e os nom es de campo de chave estrangeira sao exibidos. (Os names de campo de tabela de verificacao sao - - t005mandte - - - t005 - l and!. O s nomes de camp o d e chave est ran geira sao .- - l fe l -mand t e - -lfal-landl. ) 11 . Pressione 0 botac Copy. Voce e levado de vo lta a tela Dictionary: Table/Structure: Change Field s e a mens agem "Fo reign key was transferred" aparece na barra de Status . O s campos Status contem os valores Rev; sed e Not save d. 12. Pressione 0 batao Activate na barra de fer ramentas Application . A mensagem "was activated" aparece na barra de status. as valores nos ct campos Status sao agora A . e Saved. V oce acaba de criar urn relacionamen tc de chave estrangeira entre as S. tab elas - H al e - tOO ---Hal-landl e o campo de chave estrangeira e - - - tO05 e a tabela de verificacao. A interface com a usu ario validara a valor dentro do campo _. -Hal-landl con tra os valor es na colun a - - - t 005-landl. ment? Pressione
0
Se vo ce encontra problema s, 0 seguinte procedimento e descrito em mars detal hes n a pr6xima seC;ao. P ara test ar sua ch ave esrrangeira: 1. Inicie na tela Dicti ona ry: Table/S tru cture (qualquer alreracdo ou modo de exibicso) .
borso Yes.
D ete[rn i o a ~60
Quando cri ou a chave est rang eira, voc e nfio teve de especificar os campos que devem pa rricipar no relacionamen ro de chave estran geira - 0 sistema as deterrn in ou au romaticamente. Esta se~ao explica como 0 sist ema determine esses n a mes de campo .
. ..'-.
150
DIA4;OOATADlaJONA Y P R , ARTE 2
151
Durante a cria~ao de uma chave estrangeira, voce colocou 0 cursor no campo de chave estrangeira e pressionou 0 botao de chave estrange ira e 0 sistema gero u uma p roposta de chave escrangeira consistindo em pares de campos. Em cada par, urn campo se o rigina da tabela de verificacao e 0 outro da tabela de chave estrangeira. 0 num ero de pares eigual ao numero de campos de chave primaria da tabela de verificacao. Todos os campos de chave prirnaria da tabela de verificacio devem ser incluidos no relacionamento de chave cstrangeira o sistema pesquisa nesses campos de chave primaria 0 primeiro que tern o mesmo dominio que 0 campo de chave estrangeira e 0 emparelha COm sell campo de chave estrangei ra. Se houver diversos campos na chave primaria cia tabela de verificacao, 0 sistema tentara localizar uma coincidencia de cada urn dos campos resrantes. Urn a urn, 0 sist ema tentani localizar urn campo na rabela de chave estrangeira que tern 0 mesmo do minic que a campo de tabela de verificacao. Se isso nso funcionar, ele tentard localiz ar urn campo que tenha 0 mesmo tipo e comprimenta de dados. Se ele encon trar ma is de uma coincidencia, selecionara urn e advertira vo ce de que a atrib uicac e ambigua. 0 processo e repetido ate que todos os campos de chave prim aria da tabe1a de verificacao sejam emparelhados a urn campo da tabela de chave estrangeira.
titulo de co luna e a lorguro nos listos de entrodas pcssfvefs vern do campo Header no elemento de dodos para 0 ca mpo de tobelo de verlftcccoo exibido.
Acompanhe 0 procedimento a seguir para testar 0 relacio namento de chave estrangeira que voce criou em - - -1 fal- 1andl . Se sua chave estrangeira nao funcionar, tente esse procedimenro urilizando ztxlfal, entao compare ztxl fal com sua tabela para dete rminar 0 problema.
2. 3. 4. 5.
No campo Command, digire /nse16. Pressione a tecla Enter. A Data Browser: Initial Scree n e exibida. Digite - - - 1fal no campo Table Name.
Pressione 0 botao Create Entries na barra de ferramen tas Application. A tela Table Insert e exibida.
plo, MY-V!.
7. Posicione
8. Digite
0
cursor no campo Country Code (landl)..Em bo ra uma seta para baixo apare~a no fim dele, nao a pressione ainda.
0
Rel aci o'na nd o as chaves estran geiras com a seta pa ra baixo e a ajlJdo F4
NOVO...
lERMO
Alem do ojudo Fl. voce tcmbem pode oferecer alga chomodo oiudo F4.pora a vsucrlc. A ojude F4 e ume listo de vclores volidcs que 0 usvcric pe de digitor em um compo. A flm de obter ojudo F4, a usuoria posiciono 0 cursor em urn ccmpo e presslon c Q teclc F4. A elu de F4 tc mbe m e conhecidc como possfveis entrodos de oiudo, porque consisfe em umo listc de entrodos permltidos no compo. Os dais termos s60 vtiluodos intercambiovelmente pelo SAP.
9. Pressione 0 borso Save na barra de [erramentas Standard. A mensagem "Entry XX does not exist (please check your ent ry)" aparece . Seu cursor esta posicionado no comeco do campo que contem 0 valor incorreto. Urna seta para baixo aparece no fim do campo. 10. De urn cliq ue na seta para baixo ou pressione a tecla F4. Urn pop-up contendo as colunas de chave primdria de tabela de verificacac - - -tOos aparece.
I
I I
Quando voce cria uma chave estrangeira, a ajuda F4 ofe rec ida para esse campo.
e automaticamenre
11. De urn clique duplo em us. 0 pop-up desaparece e 0 valor n o campo c6digo de pais muda para US.
12. Pressione 0 botjc Save na barra de [erramentas Standard. A mensagem "Database record successfully created" apar ece na barra de status.
$CRHHCAM
Em uma tela, se voc e coloca 0 cursor dentro de urn campo de chave estran geira , um a seta par a baix o aparecera no fim do campo de entrada. Essa e a ajud a F4 . Se voce der urn clique na seta pa ra baixo ou pressionar a teela F4, . uma Iista de p ossiveis en tradas vdlidas eexibida. Essa lista e0 conteudo da tabel a de ve rificacao. N essa lista, as colunas de chave primaria da tabela de verifica~ao sao exibidas, excluin do mandt.
relacionamento de chave estrangeira oferece urn mecanisme para validar os dados inseridos pelo usuario na tela . Se 0 campo fo r urn campo de chave estrangeira, 0 valor ecomparado contra a tabela de verificacao. Se 0 valor nao existe na tabela de verificacao, e exibida uma mensagem de err o padrao.
I
!
~~j
152
153
C h aves e strangeiras e p rogTIlLLmUL:l eWLlo t!e U Osc..!O m l W Os programas em late que leem arquivos sequenciais au outras
Iobelo de chcve
estrongeiro
ztxllal
Tobela d e
v e rifi ca ~60
origen~ de dados que nao a tela e atualizam 0 banco de dados diretamente devem validar os dados. U rn programa desse ripo deve ser codificado de uma destas rres manerras :
ztxt005
0 programa deve passer as dodos per uma interfac~ c~m ~ usuario chamando uma rra nsacao qu e contem as telas. 1550 efeitc mterramente em segundo plano. Os clados sao automaticamente "chaveados" par a os campos de tela a fim de fazer com que a verificacao de chave estrangeira seja executada. Essa tecnica e chamada EDe (Batch Da ta Communications) e foi mencionada anterio rmenre na se~ao "Desccbrinclo as chaves est rangeiras". BDC e a tecnica padrao utilizada para impo rta r dados no sistema Rj3 . Ele pode canter in srru coes se lect que executam a verificacao de chave estrangeira. Essa tecnica e menos confidvel, porque os programas devem ser atualizados se novas chaves estrangeiras forem adicionadas au se existirem alteracoes. Ele pe de passar os dados para m6dulos de funljao especiais que executam as duas verificaco es de chave estrangeira e atualizacoes de banco de dados. A SAP cria esses modules de funljao (chamado BAPIs ou Business APIs) e os forne ce com 0 sistema R/3 .
LOOrr us FL CA
ON
LOrEr
CA CA US US US
DE DE
ON
US A US GA
NS AK
Fl
chcve estrongel r a " composto cc mcc de verflcocco. Umvalor nesse compo a d ona a verthcocec
DE DE
02 01
GA
01 02
Umo chove estronge jro comp osta e umo cbcve estrongei ro composto d~':dois mAIo ~ ou mcis cam pos. Em o utros polovrcs, umo verificcccc e feito para comporar os dols compos no tcbelo de cbove estrangeiro com as dois compos no tobelo de verificoccc. A ccmblnocdo de vclcres deve existir no tobelo de verlflcccoo antes de eles poderem ser inseridos no tobelc de chove esfrcnqeiro . Entretcnto , somen te urn compo no tela ocionor6 a verlflcococ de chove estrongeira composto.
MOVO ~
Voce cria urna chave est rangeira composta quase exatamente da mesma maneira como voce cria uma chave estrangeira cont endo urn un ico campo. Voce comeca posicionando 0 cursor em urn campo , nesse caso zt xl f al- r eg; 0 e depoi s press ionando 0 botao Foreign Keys. C om o 0 cursor esta em reg; 0, e1e se torn a 0 campo de verificafiio da chave estrangeira composta. Embora a chave estrangeira seja composta de divers os campos, apenas urn desses campos acionard uma verificacao contra 0 banco de dados . Como re g; 0 e 0 campo de verificacao, urn valor inserido nele na tela aciona urna verificacao. Se 0 campo de verificacao nao est iver branco quando a usuario pressionar a tecla Enter. uma verificacf o sed executada contra a tabe1ade verificacso comparando todos os campos cia chave estrangeira. Se 0 campo de lverificar;ao estiver em branco, nenhuma verificacfo e feita mesmo se as outros campos contiuerem oaiores.
Como com a chove estrangeira simples, os names de dorofnlo do campo de verificac;ao e seu compo ossoclc dc no tcbelc de vertficocco devem cai ncidir. Entretcntc, quando a chcve estrongeiro e criado, as demais names de domin ios no chc ve estra ngeira composto nco tem de coincidirj a chove estrongeiro pode ser crlcdc se 00 menos seus tipos de dados e comprimentos coincldirem. Mois tarde, se 0 tipo de dodos au comprimento em um desses domlnlos for alterodo, os campos ndo mois coincldiruo e os resultados da verificococ de chove estrongeiro serao imprevisiveis. Por essa roz60 , emboro 0 R/3 nao imponho q ue todos os names de dominio de umo chove estrangeira compo sto coincidom, isso e basto nte desej6veL Em geral. quando a lterar 0 tipo ou a compnmento dos dodos de um campo em umo outro chave estrange ira composto que nao 0 compo de verifico~oo, voce deve confenr se a chove estrongeira e os campos de tobelc de verifica~oo estoo vfilizondo 0 mesmo dominic. Se naoestiverem, voce deve otuoliz6los para ter 0 mesmo tipo e comprimento de dodo. Umo falho nissoresuhor6 no operoc;co imprevislveldo chove estrongeiro.
I ,
,
f
t , ,
I I
URMO ~
Quando voce eric umo chove estrongeiro composto, 0 compo em que voce rea lmente define a chove estro ngeiro echcmodo compo de verifica<;ao. Some nte um volor nco nulc no compo de verificc cc o adona a veriflcccec em relccec 0 tobela de verificac;ao. Um valor em quolquer dos outros compos de ntro do chove estronge iro composto noo ocionar6 a volidoc;oo.
Por exemplo. 0 campo reg; a em zt xl fa l deve conter apenas 0 estado valida ou os c6digos de provincia. A cornbinaljao de regi a e 1andl juntos deve ser valida. Portanto. urna tabela de verificar;ao (ztxto05s) comendo cornbinaljoes vili das de regia e l andl e necessaria. Depois de eriar essa tabe1a de verificar;ao. uma chave estrangeira composta e necessaria em ztxl fal para validar a combinaljao de regia e 1andl em re1ar;ao a tabela de verificar;ao. Comumente, ztxt005s- 1andl tambem deve servalidado contra ztxtOOS - l andl (veja a Figura 4.4).
154
1:>5
Se voce criar urn relacionamentc de chave estrangeira para u ma tabela de verificacao con tendo mais de urn campo na cbave primaria, todos os campos de chave primaria da tabela de verificacio deverao ser inc luldos na chave estrangeira. Nero todos precisam ser verificados [veja a se~ao "Chaves estrangeiras genericas" a seguir) , m as todos devem ser incluidos. Como a maioria das tabelas de verificacao conrem 0 campo mandt, esse campo e parte da maioria das chaves estrangeiras (veja as Figuras 4.5 e 4.6). In c1uindo ma ndt na tabela d e verificacao, conjuntos de valo res validos e independentes po dem ser d efini dos para cada cliente de logon e eles podem d iferir entre clientes. Essa capacidade ebastante desejsvel para sepa rar as dados entre clientes e assegu rar que eles sejam completamente independen tes urn do
o utre . A ajuda F4 escd apen as disponfvel no campo de verificacsc de uma chave
no Figure4.5.
est rangei ra comp osta. Quando chamar a ajuda F 4, eodo s os campos de ch ave p rimaria da tabela de verificacsc serao exibidos . A coluna contendo 0 campo d e verificacso sera destacada na list a. As larguras e tftulos de co luna vern do campo Header nos elem entos de dados .
F igura 4 5
as valores de X significam:
1: Se 0 prograrna aplicativo exclui uma linha da tab eia de verificacao, tambem excluini as Iinhas correspondenre s da tabela de chave esrrangeira. Por exemplo, se 0 programa de aplic acao remover 0 valor us da tabela de verificacao, ele excluira todas as linhas da tabela de chave estrangeira .o nd e 1andl '" US. Em outras p alav ras , se houver urn valor na tabe la de chave estrangeira, havera sempre uma e apenas uma linha tendo esse valor na tab ela de verificacao.
Umo cho ve
~strongeirc
Tobelo de
verifico~oo
composto
0
",,1(105
envofvendo
compo
mandt .
I
I I I I
r r
I
I
cutros
I I I I I I I I
US Fl US GA U GA S CA NS CA ON
DE DE
01 01
US
GA
C: E possfvel excluir da tabela de verificacao sem exc1uir as linhas correspondenres na tabela de chave esrran geira. Em out ras palavras, po de haver valores na tabela de chave estrangeira sem valo res correspondent es na rabela de verificacao,
compos
Entenda a cardinalida de
NOVD ....
TEilID
A cordino/idode do relccloncmentc de cbove estrongeiro descreve , para coda valor no tcbelo de verifico~60, quonfos linbcs de dodos soa perm itidos no tabela de chcve estrongeiro. Ela e Inserldo no tela Create Foreign Key { veja 0 Figura 4.3}. A ca rdinolidode e descrita como X: Y, onde Xse refere a fcbela de verifico ~oo e Yse refere a tobelc de chcve estrongeira. X pode cpe ncs ter as vclores 1 ou C e Y pede ser 1, C, N au eN .
N H a sempre pelo menos uma linha na tabela de chave estrangeira para : cada linb a na tabela de verificacao ,
CN: Pede au nao haver Iinhas na tabela de chave esrrangeira para cada linha na tabela de verificacio.
44 . ....
156
APREH DA EM 21 DIASABAP/4
157
essa atualizacao tern permissao para acontecer quan do urn prograrna em ABAP/4 atu aliza uma tab ela. A (mica vez que a cardinalidade e utilizada e quando voce cria urn objeto agregado n o DDIC.
Urn o bjeto ogregado e um cbjetc ODIC co mposfo de mois de ume fabe la. Um exemplo de urn ob jeto egr egedo e umo visua Hzot;oo.
chave estrangeira, a ripe correto de chave estrangeira sen do tipo campos/can didatos -chave. A o criar uma chave esrrangeira, voce deve escc lher carnpcs/candidatoschave se 0 campo de chave est rangeira for urn dos campos de chave primaria da tabela au fo r urn candidato-chave. Caso contrario, escc lb a campos/candidat os nao chave.
Quando voc e cria uma chave estrangeira vo ce deve especificar a cardina lidade . Se nao espe cifica-la, voce sera incapaz de incluir a tahela em urn ohje to agregado.
Campos/candidaros-chave
Campos/candidates nac chave
as usu6rios podem configurar se u pr6prio idioma de logon pcdrec. Isso e feito no perfil de usu6rio escolhendo a cominho de me nu System-> User profile- > User defaults. A c ftercce o do seu pe rfil de usua rio s6 se tom o efetivo no seu pr6ximo logon.
Campas-chave
Escolha Key Fields/ C and idate s seo campo de chave est ran geira fo r urn dos campos de chave primar ia da tabela de ch ave estrangeira. Escolh a Non-Key " F ields / C andidates se nao fo r. Por exemplo, suponha que a tabela tl seja co m posta de campos fl a fl Oe qu e seus camp os de chave primaria sejam fl,; f2 e f3. Se voce fosse definir um a chave estrangeira no campo f3, Key F ields/C andidates seria 0 tipo correro, porque f3 e pane da chave primaria. Se v6ci fosse definir u ma chave estrang eira rio campo f S, Non-key F ields/Can didates seria correto, po rque f S nao eurn dos cam pos de chave primdria.
NOYO .....
rmlo "
Umo tobelc de fexto e urna tcbelc que contern descnce es 'n c lingua fa lodo' de vclo res em umo tobe lo de veohcccec. Essos descricees 56 0 ormoze nad os em v6rios ldlomcs. A chove prlrncric do tobelo de texto e c mesmo que 0 chove primcrlc do tobe lo de verlftcocec , com a edie;oo de umo colune spras (idiomo).
Candidalos-chave
NV O O'"
TERMO ""
Urn condidcto-dtove e urn co mpo em urno tobelo que , por si mesmo ou em con junt;oo com outro compo que n60 foz porte do cho ve prim6rio, pede ser utilizodo poro identificor de mon eiro unico urno linho no tobe lo. Em o uiros polovros, se houver umo mo neira de selecion or umc linhode"umo tobelo sem utilizer compos de chove prim6rio, existem condidotos-chove nesso tebela. as candidatos-chove s60 os compos que noo se encont rom dent ro do chove prim6rio que podem ser otilizod os unicomente pore identjficor umo linho de mo neiro unicoi bosicc me nte e les podem se rvir como umo chove prim6 rio alterna tive .
Por exemplo, a tabela ztxtOOS po ssui c6digo s de patses nela. Os nomes dos palses sao armazenados em uma tabela separada chamad a ztxtOOSt (m ost rada na Figura 4.7). po rque voce realmente precisa de muitos nomes para urn c6digo de pars . Como ela armazena descricoes espe cfficas do idioma de urn c6d igo generico, ztx t 005t e chamada de tab ela de texro . A chave primaria de ztx t00 5t co ntem os mesmos camp os que a chave primaria de ztxtOO S, com a adi ~ao de urna coluna spras (idio m a}. 0 cam po spr-as contem 0 c6digo de idioma e ativa essa tabela para conter uma descricao de divers os id iomas de logo n. A chave primaria de qualquer tabela de text o e compost a dos campos mandt e spras, seguidos pelo campo de validac;ao (ou campos); Urn QU mais campos de descri~ao seguem essa chave primaria. Urn relacionamento de chave estrangeira e definido em ztxt O OSt- l andl para a tabela de verifica c;ao ztxtOOS. 0 tipo de campo de chave estrangeira deve ser campos -chave de urna tabela de texto.
Por exemplo. ztx 1fa 1 tern urn unico campo de chave primaria qu e contem urn identifi cador unico para cada linh . Se voce pressup6e que a combinal$ao de erdat e ert i rn (data e ho ra de cria~ao) etambem (mica para cada linha, esses camp os de data e hora sao candidatos-chave. Se qualquer urn aparecer em uma
DlA ~:
landl
us
CA
DE
mandt, spros,
IT
JP AQ CC
l andl
CA C A
DE DE
D E D E D E D E D E D
sistema R/3 que a fobe lo de chove esfrongeira e umo fobe lo de felda. Quando voce escoihe esse tlpo, a primeiro descrtcco que segue a chcve primorio e exibida no ajuda F4, no idiama de logon do csuoric. Pcrtcnto, esse tipo de chcve tem duos propriedades esped ais:
US U S
IT IT
USA
Ita ly Italien Japan Japan Ant arcti ca Antarcti ca Coconut Islands Kobinseln
Quando as linhas cia ta bela de verif icalSao sao exibidas em respcsta a uma solicitalSao de ajuda F4. 0 primeiro campo de clescrilSao da tabela de textc apar ecera na mesma lista, como se fosse uma parte da tabela de verificacao. Somenre as lin has da rabe la de t exto tendo 0 mesmo c6digo de idioma que a idioma de lo gon atu al do usua rio aparecem na lista de ajuda F4.
JP JP AQ AQ C C C C
Por exemplo , a tab ela de texto ztxt005t contem urn relacionamento de chave estrangeira de ztx t 005t- l andl para a tabela de verificacao ztxt005 e a tipo e"key fields of a t ext table". Quando voce chama a ajuda F4 em ztxt005 -l andl, o us ua rio ve as colun as de chave primaria da tabela de verificacao ztxt005, mais o conteudo da primeira colu na que segue a chave primaria de ztxtOOSt. Scmence as linhas onde spras igual ac idioms de logon atual sao exibidas. resultado e que 0 usuaric ve as descricoes em seu idioma de logon para os codigos em
$Cl N,Ul,.... lnlcle ~ ScreenCom "Text Ta ble Demonstratio n: The Effect of the Logon LonEC
,. guage ogara.
ztxl f al.
sione a tecla Enter). 0 nome de tabela ztxlfal no campo Table Name. 3. Pressione 0 bcrao Create En tries na berr a de ferram en tas Application. ' 4. Posicione a cursor no campo Country Code {l andl }.
_,I
e 4.3.
_______J
.,~'
160
5. Pressione a te cla F4 a u de u rn clique na seta para ba ixo no fim do ~amp o. Urn pop-up aparece exib indo colunas das duas tabelas ztxt 005 e ztxt005t . Observe qu e a col una 1andl da tabela ztxt005 e exibida e as descricoes de lingua in glesa da tabela ztx tOO sao exibidas. St
I
,
161
6. A gora efe tue logon novarnen te (voce nac precisa efetuar 0 logoff primeiro ). Dessa vez , digite 0 par a Deutsch e (alemao) ern Language Field de tela de lo gon do R!3,
7. Repita as passos 1 a 5 em sua nova se<;ao de logon. 8. Note que dessa vel. as descricoes da tabela zt xtOOSt sao exibidas em alemao.
Uma chove estrongeiro generi co e umo chove estrongeira no qual um dos compos de cbove prim6rio de s ca mpos de tobelo de verificccoo e morcodo como generice . Qu ando urn cam po de chc ve prim6rio e morcodo como generico, ele nco tern urn corresponde nte no tobe lo de chove estrongeira e nco porticipono venficcceo.
P or exemplo, dentro do ap licarivo M at erial s Management, a tabela m ara e a tabela Material Ma st er. Ela com em a lista-mestr e de ma teriais utilizad os par a fabricacao e os atri buros de cada ma te rial. o programa de configuracfo p ara este livro crio u u ma tabela ztx ma ra sem elhante a mara. Os campos de zt xmar a sao mos tr ad os na Figura 4.8.
F igur g 4 8
Nome d e campo
PK
x x x
N ome de DE
Nome de DM
A tobeloztxmaro e
t ext1 5
;,
,
,
" "
'
Depois de ativar - - -t005t , digite os dados n ela utili zando 5E1 6. Utilize o s dados de exemplo mostrados na Tabela 4.3. Agora erie uma chave estrangeira em _. - t005t -1 andl. Siga 0 procedimento de cria<;ao de chave estrangei ra forn ecido an t eriormen te. Utili ze - t005 como a tabela de verificacao. Na t ela Create Foreign Key, especitique urn tipo de campo de chave estrangeira n os campo s Key de uma ta bela de rext o . Voce pode querer revisar a scr een cam "H ow to Creat e a Foreign Key " ant es de comecar. Depois de criar su a chav e est rangeira, siga 0 prc cedimen t o p ara t est ar 0 relacionarnento de chave estrangeira em - 1f al - 1andl. No pa sso 11, note que a descricao de ztxt005t tambem e exibida. Agora, efetue logon novamenr e, d essa vez esp ecificando urn idi oms de logon 0 (alem ao) e repita 0 teste. D essa vez, voce devers ver as descricoes alem as no passo 11.
1.-"
.'
;,J,.
t, ... ,
Ocampo ztxmara- s t of f con t em 0 numero de urn material de risco . Se 0 campo nao est ive r em branco, 0 mat erial exige tratamento especi al; 0 nu me ro d e stoff indica 0 tip o de tratamento exigido. O s n um eros de rraramento sao definidos na tabela ztx mgef, qu e est ailus trada n a Fi gu ra 4.9. No nosso exemplo, sup on ha que zt xmg ef con ten ha uma linh a com st off igual a 1. Essa lin h a indica
.. .
162 ,pm" EM
" DIA S AB AP/ '
'W'W'W''W''W
/
.........
...
~
...
DIA ~ :
163
urn procedimento de tr atamento que exige luvas. Atualizar urn material e colocar 0 mimero 1 no campo ztxmara-stoff para 0 . mate rial ind ica que 0 material exige tratamento esp ecial com luvas.
Figura 4 10
Umo ma rco de
verificor;oo no coixo
de selet;60 Generic
_1;,1",1
de chc ve eslrongeiro .
':M"; t. ~~~ ,
. .
~"
-.,"
'
,..
'f';:',;~;;'':::;:::~;;~B~~~~~;'~~ .
.,
i
Quando essa chave estrangeira e verificada, somente a combinaci o d e m andt e s toff deve existir na tabela de verificacao. 0 r eg; a e os cam pos 1and l sao ignorados.
HV OO.... Chaves es/-rcngeiras canstonfes sao chcves estrang eiros compostos em que um TERMO ~ des names de compo de tobelc de verthcocoo e substilufdo par um voter ccnstcnte. Essevolar constcnte e inserida no lela Creole Foreign Key (~ej a a Figura 4.11).
Por exemplo, imagine que voce p recise criaruma nova t ab ela de fabricante ztx lfalus como ztxHal contendo ap en as os fabri cante s dos EUA, mas, par razoes de compat ibi lidade, voce quer que des tenharn exa tamen te a mesma estrutura que ztxl fal. 0 c6digo de p ars nessa rabela semp re se ra.us. Vo ce po de criar uma chave estrangeira constante para restringir os valores na tabela ztx lfalus. Urn exemplo da definicao e mostrado na Fi gura 4.11.
'!' '!' '!' 11 !!f 'I' .. 'I' ... .. .. .. ... ... ... ... ... ... ...
164
APR!NDA! M21 OIlS A BA P / ~
Fi gu r a
4 11
"II!"
-- --- w w
'W
- -- -- - - - - - -
'165
o compo
Sempre que voce cria urn relacionament o de chave esrrangeira, 0 sistema olha no campo de rabela de valor. Se houver u rn nom e de tabela af, ele propoe esse nome como a tabela de verificacao. Alguns Ieirores terao difieuldade com esse conc eiro, entac YOU explica -lo co m det alhes na se~ao a seguir.
Entendendo
Fjg ura 4 12
Exemplo de
umo
A fim de entender 0 prop6sito do campo Value Table, voce deve estar familiarizado com 0 "q uadro geral'' do projeto e des envolvirneneo do banco de clades . Com ecarei descrevendo esse qu adrc geral . Antes de erial' qualquer tabe la no DDIC, vocenormalmente fara algum projer o de banco de dados . Ess e projeto descreve as tabelas que serao criadas, seus relacionamentos e os tipos de dados que cad a um a contera. Ele normalm ent e designarf certas tabel as para serem tabelas de verificacgo a fim de validar os dados dentro de outras ta belas. POl' exemplo, um a tabela de verificacao de c6dig o de pals pode ser necessaria para validar c6digo s de pafses para todas as tabelas onde os codigcs de pajses serao armazenados. Quando voce cria urn conjun to de tabelas dentro do R/3, voce normalmenre criara as tabelas de verificacao primeiro. A principal fina lidade de voce erial' uma tabela de verificacao e validar dad os. Voce pode erial' diverscs relacionamencos de chave estrangeira vinculando muitas outras tabelas com uma unica tabela de verificacao. 0 campo Value Table no dominio existe para simplificar a taref a de erial' esses relacionamentos. Antes de continual', suponha que 0 campo Value Ta ble dentr o do dominic tenha umnome completamente diferente . Limpe 0 termo " alue Table" de sua V mente e im agine que esse campo e chamado "Default C hec k T able". Para simplificar 0 exemplo, nossa tabela de verificacao tera urn umco campo de chave primaria, ilustrado na Figura 4.13. Para ilustrar esse conceito, descreverei 0 processo que voce iria erial' para essa tabela de verificacao e utilizar em urn relacionamento de chave estrangeira.
Fi g u r a 4 13 ztxtOOS
tcbelc de verifico~oo
URIIO"
ll.
Dentro d o domlnio esta 0 cc mpc lobe/a de volor. A tobelo ldentificodo den tro desse compo oferece a s segu intes fun<;6es para 0 do minic :
Ela e automaticamente proposta como a tabela de verificacfo quando cria uma chave est rangeira Ela oferece uma lista de valores para a ajuda F 4 (posslveis entradas), mas nac oferece validacao
Domlnio
167
166
Quando voce cria uma tabela de verificacio, voce deve primeirc criar um dominic. Voce sempre criaria urn novo dominic especificamente para uma tabela de verificacao . Voce entac criaria 0 elemenro de dados e depois a propria tabela. Dar, ativaria a tabela. Entao, voltaria ao dominic, no campo de chave primaria, e colocaria 0 nome da tabela de verifica~io que voce acabou de eriar no campo Value Table-mas lernbre-se de que 0 chamamos de campo Default
1. Comece na Dictionary: Initial Screen. 2. No campo Object Name, digite 0 nome da tabela ( * * *Hal ). 3. Escolha 0 batao de opc;ao Table. 4. Pressione 0 boco Change. A tela Dictionary: Table/S t ructu re: Change Fields e exibida. 5. Posicione 0 cursor no campo de ch ave estrangeira (' andl }. 6. Pressione 0 botao Foreign Keys ria barra de {erramentas Application. A tela Change Foreign Key e exibida. 7. Pressione 0 batao Delete (a lixeira) na parte infe rio r da janela . 8. Voce e levado de volta a tela Dictionary: Table/Stru cture: Change Fields. A mensagem Foreign key was deleted apar ece ri a barra de status. 9. Com 0 cursor ainda posicionado no campo de chave estrangeira (1 andl), pressione a batao Foreign Keys novamente. A tela Create Foreign Key e exibida. Ela Ie Foreign key does not exist. Generate proposal with value table as check table? Voce ve essa caixa de men sagem porque 0 sistema olhou no dominic e localizou urn nome no campo Value Table. Ele responde exibindo essa caixa de mensagem. 10. Pressione 0 batao Yes. A tela Create Foreign Key eexibi da e 0 campo Check Table contem a tabela de valor do domlnio. O s campos Check Table e-as campos Foreign Key sao pre enchidos. 11. Pressione 0 borao Copy. Voce e levado de volta a tela D ictio nary : Table/Structure: Change Fields. A mensagem Foreign key was trans ferred aparece na barra de status. as campos Status exibem 0 texto Rev; sed e Not saved . 12. Pressione 0 botao Activate. A mensagem "was saved apare ce na barra de status. as campos Status Ieem Act. e Saved. Com urn nome de tabela no campo Value Table no do min ic voce po de rapidamente e com confianca erial' chaves estrangeiras.
Check Table.
Agora, voce criaria Dutra tabela, no nosso exemplc e ztxl fal. Voce criaria ocampo 1andl e utilizaria o elemento de clades ztxl andl e entdo as dais campos
utilizariam 0 mesmo dominic. Agora voce criaria a chave estrangeira para validar 1andl. Voce colocaria o cursor no campo ztx l f al- , andl e pressionaria a batao Foreign Keys, Quando voce fizer isso, 0 sistema olhara no dominic no campo Value Table (lembre-se de que a chamamos de campo Default Check Table) . Se houver urn nome de tabela af, 0 sistema automaticamente ira propor esse nome como 0 nome da tabela de verificacao . No nosso ceso, 0 sistema localizaria ztxt005. Portanto, 0 sistema iria propor ztxt005 como a tabela de verificacfo - exatamente 0 que quererlamos . A pro posta de chave estrangeira seria mosrrada, e entao poderiamos salva-la. Nesse exemplo, 0 sistema automaticamente criou a chave estrangeira para nos, porgue colocamos 0 nome da tabela de verificacfio no campo Value Table. Dando tres cliques de mouse, criamos uma chave estrangeira! 1sso, em essancia, ea principal razjio para 0 campo Value Table. Ele existe para fazer a criacao de chaves estrangeiras mais Iacil. Para resum ir, 0 campo Value Table sistema:
e utilizado
A tabela de valor {lembre-se de imaginar a Default Check Table) automaticamente e proposta como a tabela de verificacao quando se cria uma chave estrangeira. A tabela de valo r ofe rece uma lista de valores para a ajuda F4, mas nenhuma validacao e feita nesta lista. Nessa se~ao,.voce adicionara uma tabela de valor para urn dominio e observarf seu efeito na cria~ao de uma chave estrengeira. -E dite urn domlnio _. -Landl agora e digire ** *tOOS no campo Value Table, ativando depois 0 dominio. Agora voce excluira a chave estrangeira no campo - * *Hal-landl e entao a criara novamente de modo que voce posse vel' 0 efeito do campo Value Table no processo de criacao de chave estrangeira. Para fazer isso, siga 0 procedimento abaixo.
"': I. It t.1Jt:I,X::X:XI" I . II
168
APRENDA EM21 DIAl AB A P,.
w w w
w ..
DlA~ : 0DATADICTIONA Y PARTE 2 R,
169
Hoi uma excecao para 0 segundo ponto acima. Se voce atualmente est iver exibindo um a tabela de valor, 0 asterisco DaD aparecera no campo cujo dominic se refere a tabe la de valor qu e vo ce esta visualizando.
O s campos m onetarios tern esses requisit e s: 0 ripe de dado no domlnio deve ser CURRo Ele deve es tar vinc ulado com urn campo do ti po CUKY contendo a chave moneraria, como USD (d6lares norte-am ericanos), CAD (dolares canaden ses}, ITL (lira italian a) e assim par diant e.
n~\O r
N ~ OVO
A chove mone t6rio e con hecido como comp o de refe r@:ncio Trata se de outro ccmpo no mes rno tobelo au em outro tabela. Esse co mpo d'eve ter-a fipo CUKY (chove mon et6rio) no do mfnlo. Ele indica a chove monet6rio pa ra a campo monet6 rio relere nctcdc.
Por exemplo, imagi ne que voce criou uma t abela contendo uma [ista de pagamentos feitos aos fabricantes. Voce precisaria de um campo de quantidade de p agamento (nome de campo wrbtr) e urn cam po- ch ave monetaria (normalmente w s) para indicar completarnente a qu an ridade e a chave m onetaria aer utiliz~das nesse pagamento. Para vincular as do is campos entre si, voce dari a urn clique duplo no nome d e campo monetario na tabe la e entao inseriria a tabela de chave m one raria e a nome de campo no s campos Refe rence T able e Reference Field (ve]a a Figura 4.14) .
l
..;'" .
Elg ll r a 4 14
~!! i~ ; !t! ~~;.. ?~t'.'im1(= _JLt-;'\"t~'.! N~j~ ~ -=-2~, ,, ;.- ;,)5 !i' -!~!:J
. , :1
8;' ~ ,~
-.~
H' ~ {) ~
-~ ~ '-:i~l.:H>~~~'-i~~\(~2~, C
O s campos mooet6rios
NOVO ~ TtRMO "'Imagine que voce qu eira ir 00 ba nco e pedir 1.000. 0 coixa provave lmenle perguntoria NMil a que? " Voce pode responder NMil delo res". Ou voce pode ser ate mois especffic e pedi r "'1.000 dolores norie-omericnnos". Quontios monet6rias o no R/3 sao ormozenad as em dots campos: um armozena a quentia nurnerico real (l.DOO) e outro ormczena a moneloria {USDJ. 0 compo nomerlco de quentio e chcmodo compo monercn c e a outre compo e cha mado compo-cbcve monetOrio .
o que
muitos pessoo s se referem como monet6rio realmente urn c6dig a mon et6rio (USD para a d6lor a merica no, CAD para 0 do lor cc node nse e ossim par diontel. A SAP utilize a pclovro "chove" como urn sin6nimo para "c6digo N, entoo ela chama a co mpo que conte rn a c6diga mon et6rio "chcve manet6rio", isso se cpltcc 6 rnoloric dos compos de c6digo no R/3; 0 c6digo de pais e chamodo chave de pa is, a c6digo de regia o e a chove de regioo e ass im por dionte.
I.J
., I ~~~~~~--------------f! lH
.os ca mp os de qu-oanoIlti.od.o eL...ou;dlf
O 0DAnOICT10NARY, PARTE 2 IH
Figura 4 16
17
milo r
N OYO....
exemplo, esse compo pede conter uma medid~ de peso, co~pnmento,. tempe ratura ou eletricidode. Pa ra se r significativo, umc unrdade de rnedidc co mo librcs, polega dos, grous Fahrenhe it a u q ullovolts devem ocomponh? -]o. Os compos de quantidod e tern estes req uisites :
rl
~I
~
li
perc
compo UNIT.
0 tipo de dado no do min ic dev e ser QUAN. Ele deve estar vinculado a urn campo do tip o UNIT.
t
.>
campo UNIT 0 campo de referencia para 0 campo Q AN. 0 camp~ UNIT U pode estar na mesma tabela ou em outra tabel~. 0 cam po U co ntern a unidade NIT de medida para a medida no campo de quantldad, . e , . Por exernp lo, na ta bela ztxmara, 0 campo ntgew cont.em 0 p eso ~qUldo de urn material e 0 campo g~wei contem as unidades, como libras au qUllo~ramas (veja a Figura 4.15) . 0 camp o ntgew te ,:, urn t ipo de dado d e QU~N e 0 tlpO de dado de gewei e U IT. Se voce der urn clique duple em nt~ e~, ver~ que a tabela N de refe rencia e ztxmara e a campo de referencia e gewei (veja a Fi gura 4.16).
~
As estruturas no Data Dictionary
TWO '"
NDVD ....
ogrupodos sob um nome comurn . Emuito semerhonte a urno tc belc. C o mo urno tobelo, era po de se r vtillzcdc dentro de urn progr a ma no instru; oo tab l es para definir urnc 6reo de trabolho.
Alem dos tobelcs, as esfruturos tcmbem podem serdefinidos no Data Dictionary. Como voce poderia espera r, umo estrutura co rrespo nde 0 umc serie de campos
As diferencas entr e urna estru tura e uma tabela sao como segue: Uma estrutura nao tern uma tabe1a de banco de dados associada. Uma estrutura nao tern uma chave prima-ria. Uma estrutura nao tern atributos tecnicos. As estruturas seguem as mesrnas convenc;6es de atribuicao de nome que as tabelas transparentes e voce nao pode ter um a tabela e uma estru tu ra com 0 mesmo nome . Voce criaria uma estru tura no DDIC se quisesse definir a mesma area de trabalho em diversos programas. Por exemplo, se voce quiser escrever regist ros para urn arquivo sequenti al utilizando pro grama em ABAP/4 e depois Ie-los para utilizer outre, os dois programas precisam conhecer a layout desses registros. Voce criaria uma estru tura no D DIC que define 0 layout do registro e entdo atribuiria na mes a essa estrutura na instrucao t abl es nos dois pro gramas. Isso criaria uma area de trabalho identica para os dois prograrnas. o proc ediment o para criar uma estrurura ~ quase a mesmo para criar uma tabela tr ansparenre. [Co nsulre as pro cedimentos para criar uma tabela trans parenre.) As unicas diferens:as sao as seguintes: Em vez do borfo de op~ao Table, escolha 0 botao de 0plSao Structures. Os campos D elivery C lass e Tab.Maint.Allowed nao aparecem. As estruturas nao tern uma chave p rimaria.
Nenhum atributo tecnico pode ser especificado, como classe de dados, caregoria de tamanho a u usa de buffer.
11-----~~~
DIA 4: 0 DAT AOlCTIO ARY, PAm2 H
17:
Entendendo Includes
UIDa estrutura pode canter outra estrut ura, Em outras palavras, voce pod e aninhar estruturas uma dentro da outra. Isso pode ser urilizado p ara reduzir a manutencao agrupand o campos juntos em uma estrut u ra e enrac inclu indo essa estrutura dentro de outra estrutura ou mesmo dentro de uma tabela. Por exemplc, urn endereco de uma pessoa e composto de urn conjunto de campos como rua, cidade, regiao, pais e ccdigc postal. Voce pede precisar mante r esse endereco em diversas tabelas. Dentro da tabela do fabricante voce pode querer manter 0 endereco do fabricant e, na mestr e de cliente a endereco do cliente, e na tabela de empregado ender ecc do empregado. Se voce criar uma estrutura para agrupar os campos que juntos formam 0 en dereco, voce pode entao incluir essa estrutura nas definicoes da tabela. Quando a tabela e ativada, as campos da estrutura sao adicionados e existem na tabela de banco de dades como se fossem definidos dentrc dela. Eles terao o mesmo no me que a nome na estrutu ra. Para incluir uma estrutu ra dentro de uma tab ela, (a u dentrc de outra estrutura), digite . INCLUDE na coluna de nome de campo e insira . a nome da estrurura na coluna de elemento de dados. Na Figura 4.17, a tabela zt xem (tabele de empregado) inclu i a estrutura pl ztxa ddr (veja ;1 Figura 4.18), que consisee em campos de endereco stras (rna), artDl (cidade); reg; 0 e l andl . A tabela ztxempl .portantc, contem estes campos: pl zt xemp l -stra's; zt xem - ortOl. ztxempl reqt 0 e zt xemp1-1andl.
Para . . Jh visualizar a i ncl udes expandida dentro cia definiicao cia propna ta beIa, . ~ esco a 0 caminho de menu Extras-> Substructures- > Expand All Substr. Todos as nomes de campo de uma est rutu ra inc1uida aparecerao embaixo de INCLU DE, como mostrado na Figura 4.19.
NOVO ...
TEi.UO
umc t~ e ~ p e se r mclu:do em umo codetc de includes. Em outros pclcvros, voce nc o po de :ndu:r vmo tc belo de ntro de outro.
.E.ig.1l..l:.a..-':
1a
A cricdo incluindo umo r b 1 codeic de .estrvturosprofundidode maximoestrvturo dentro deoutro e' c home d,0 codeio de indudesoA de oninhomento no od
e ve e sc me nte
.'.,,><1
ztxemp l.
j
,
j
I
.~ :j,'
Eigur g 4 17
!~ "
A tcbelo de z t xemp l ccntem um I N D pora CLU E fazer com que os campos de ztxaddr seiom
odicionodo s a ela.
1... 'r.
'iI' j
~
::::::J ~t.ti : ~- x ~ a ~1i.0 0 "" -:'0 ;,:t;g~:t>-:::.~.$; :=;"_:jj ;-;~ ,;;p- :0- :~: ;:1 ~ ;..l' :"; io t ;'-d-'Si",:UCiQ,iil;': t:'riCiliii .licllll ril' :"lrille.<e.:; ~~~+t=;,;r":i;'~,",1~#~ ( ~.i_. c
. ;,
-(.~~.,.
Flgut a 4 19
o formulcirio
. [ NeW-XXX do tabela z t xemp l inclui 0 in strv~6 o de modo que ztxoddr posso ser incluido duos vezes sem dup/ic:or os names de compo.
~ ~?>-<~':.J,
il.... ; n .-.: ~~' : UU >,d'.".' .1n~ l-~,t~ ~~u"rnl l " '~"l;:.t ... t~ -'-',* \ :"': : _~ -O. , ".:..'\""'::'o'"'::r.:-!i,.:.,,: ~ ,t o;, k
I I
174
FigurQ 4 21
'''I
51
if &hi ei"lt4E
if L._.
. _'3 ; ~
c- --; " I-~,.~~';' >;.', ."\-":'t::"''''''-=.>l./:- -:>t:~,'';r:-...l''_ '' o 4: 'Xn M 'rt . t~l ~ E'-- -~ -{ {.;~<~~~._;--;;:~~: ,::.: ~
Ilolo 7 ~-:,:;r
"1, 1,,1
Ex/ro->
Substructures- >
Expond AllSubs!f.
fez os compos des estrutvros oporecerem no lisle.
Alobelo z tx em pl2
uti/izo
0
mrmu/6rio
Resumo
A s chaves est rang eiras asseguram a integridade de dados execurando validacoes n a tela e oferecem ajuda F 4 para 0 usu i rio co rn Iisea de valores pe rmissfv eis. A tabela de valor oferece u.ma proposta para a tabe la de ve rificac go e oferece ajud a H .
,i
'!
e As tabelas de text o ofer~cem suporte de diverscs idiomas p ara descricoes no R/3 e especialment e p ara ajuda F4. Dentro de uma tabela, cada camp o mon eta rio deve ser vinculado com urn campo-chave monetario e cada campo de qu an ridade deve ser yinculado com urn camp o que ccntem as unidades de medida.
Ii
As estrvtvrcs e tc belcs no R/3 50 0 too semeihc ntes que, q ua ndo voce olha a definic;oo de coda Doto Dictionary, e dlfkll diferenci6las. Pora determine r quo l v oce estc olho ndo, olhe 0 direito do compo de nome . N voce v ere ume tobelc Transporent ou Structure.
As tabelas e as estrutura s sao muito semelhanres. A diferenca p rincip al e que uma tabela tern um a tabela su bjacente de banc o de dado s e uma esrrutura na o . Voce p ede utili zer est ru tu ras para de finir areas de trab alho ide nricas em divers os programas. Voce p ode incluir uma est rurura dentro de -outras est ru turas e tabelas.
-y
176
" " ' D' E ' 1 DIA l " "" M
r...
_ !
P&R
o o o
Urn programa em ABAP/4 ped e ignorar relacionamcntos de chave estrangeira e inserir Iinhas que violarn a integridade referendal?
Sim. Entretanto, na maiaria das vezes, as dados vern pa ra seu p r ogram a vi a um a in terface com 0 us udrio . A in te rface com 0 u suario valida as infcrmacoes antes de voce inseri-Ias no banco de da dos, po rtanto chaves estran geiras ja foram verificad as.
Nao. Apenas Key Fields Of A Tex t Table empr ega fu ncionalidade de sistema. a s outros nao [azem nada acontecer - eles servem prin cipalm enr e para documentacao.
As estruturas podem ter definicces de chave estrangeira? Sim . Isso normalrnen te e feito porque uma tabela que inclui uma estrutu ra pode herdar defini co es de chav e est rangeira deb. Se quiser, voce pode desativar essa heranca ao incluir a estrutu r a.
o
Workshop
as
as seguintes exercicios darso a voce pratic a na cri acao de chaves estrangeiras, campos esp eciais e estr uturas.
usufrio, seu p rogram a ern ABAP/ 4 deve ser escrit o cui dad osam ence de mo do que ele Dao tr ansgri da a integridade
Teste
1. P ara urn a chave estrangeira ser criada, 0 que 0 campo de chave estrangeira e a campo de tabela de verificacic devem ter ern eornum? 2. Qu al e a sintaxe para inclusao ci estrutura zs l dent ro cia tabela ztl? a 3. Q ual e a prap6sito de urna tabela de texto ? 4. Assuma que a tabela de verificacsc ze exisre e tern uma chave primaria consistindo em m andt , fl e f2 . Quais devern ser os campos de chave primaria de uma tabela de rexro para zc? 5. Se voce cria urn campo mcnetario, que tipo de campo ele deve
referen cial.
o
o
referenciar?
Exercfcio 1
e rie uma tabela de veri fica~ ao de co digc de pals charnade toOS. Ela sera . utilizada para validar todcs os codi gcs de pajses inse ridos em suas tabelas. As especificacoes aparecem na Tabe1a 4.5.
Tabela 4 .5
o
o
"cascara em ex-
-tOO S
Descri~ao
Nome de campo
Cliente
Nome de D E
m andt
Chove do pafs 1andl
mandt
-1 andl
178
179
Depois que voce ativou essa tabela, va ao domfni c - 1andl e digite - tOO no campo Value T able, entao ative-o. Utilize SE16 para adicionar s c6digos de parses asua tabela.
Exerdcio 2
e rie uma tabela de verificacao de c6digo de pais:chamada t 005s. Ela sera utilizada para validar todos as c6digos de parses ins eridos em sua s tabel as. As especificacoes aparecem na T abela 4.6.
Tabela 4 .6 Os campos e'sues ca raderistices pare a tabela tOOSs
Descriscio Nome de compo
N om e de camp o
Cliente
PK Nome
de DE
x
m andt
Nome
d e OM
Tipo
Len
Tabela de
verificD ljOO
mandt
Chove de-pels landl C6dig o de reg ioo
x
x
x
l andl
- - -tOOS
0
rect o
C6digo de cidod e
regi o ct t yc
- ci tyc
t OOSs
PK
Nome de DE
Ta bela de
v e r ifi ca ~a o
citye
CHAR
C liente
m andt
Cbcve de pais
,
x x
mandt
. 0 -Jendl
t005
Nao se esqueca de criar os relacion ament c s de chave estrangeira nos campos land1 e regie.
, andl
C6di go de regioo
Exercfci o 5
Depois que voce ativou a tabela, va ate 0 dominio ci tyc e coloque t005g no camp o Value Table, errdo ative . Utilize 5E1 6 para adicionar c6digos de cidade para a tab ela tOOSg e teste as chaves esrrangeiras tenrandc inserir c6digos de pais e de regiao invalidos. Entao erie a ehave estr angeira dentro da tabela - - knal no campo ct t yc e utilize 5E16 a fim de adieionar clientes para - - - knal. Teste 0 relacionamento de ehave esrrangeira rentando inserir c6digos de cidade invalidos . erie um a tabela de text o para - - tOOSg e arribua a ela 0 nome - - tOOShj as espe cificacoes sao mostradas na T abela 4.8.
Ta b e la 4 .8 05 compos e suos caracterfsticas pa ra ta be lo
Descri~ cio
0
regio
_. -regi o
Depo is que voce ativou essa tabela, va no dominic - - - regi 0 e digite - - t 005s no campo Value T able, entao ative-o. U tilize 516 para adicionar . c6digos de regijo para sua rab ela. Teste sua chave esrrangeira em 1and! rentando inserir urn codigc de pars invalido. ,.'
Exerdcio 3
Ad icione relacionamentos de chave esrrangeira aprop riados para 1andl e para campos regie em sua tabela - - -lfal. Util ize 5E16 para atualizar as linhas exist ences dentro de - - - 1fa 1 e insira ccdigcs de paises vslidos de regiso.
tDOSh
Exerdcio 4
erie uma tahela de verificacic para 0 campo ci ty c na tabela-me srre de cliente _. knal que voce criou na D ia 3. Nom eie essa tabelacomo tOO 59.Ela deve canter uma lista de c6digos validos de cidade. As especificacces para ela aparecem na Tabela 4.7.
N ome d e campo
PK
Nom e de DE
N om e d e OM
Tlpo
Len
Ta bela de
verifl co~ac
C1iente
man dt
Chcve de idiomo
m andt
spras
spras
Chcve de pols
tOO2
otOOS
l andl
C6digo de regioo
x
x
, andl
re qt o
.0.reg1 0
.00t005s
180
181
Exerdcio 7
Len
Tabela de
ve r i f i ca~a o
Adicione mais dois campos para a tabela knal. As especificacoes sao m c st radas na Tabela 4.10.
Tabela 4 .10 Compos odiciono is e sues coroderistic as para ta bela knal
PK
de campo
C6digo de cidode cf tyc
Descrtcco
Nome de D E
Nome
de DM
Tipo
cityc
bezei 20 text20
CHAR 20
-t005g
bezei
.Nome de DE
Nom e
de DiY".
Tipo
Len
Decimal
Tahela de
verifi(a~ao
cr editl
C hcve monet6rio
12
2 tcurc
waers
Exercfcio 6
erie uma est ru tura chamad a - - - t el . As especificacoes apare cem na Tabela 4.9. , Ta b e la 4 .9 Os campos e sues caraderisticas para estruturo - - -tel
Ocampo eredi t 1 cont era 0 limite de credit c do cliente. 0 campo waers contera a chave m onetdria pelo qual 0 limite de crediro ser valido. Nao esque~a de adicionar 0 relacionamento de chave estrangeira atab ela de verificacio tcure . e rie ajuda F I para 0 campo ereditl pre ssionand o 0 botao de documentacao no e1emento de dados. Depois de adicionar esses dais campos, de urn clique duplo em credit', no campo Reference Tab le digite _ knal e, no campo Reference Field, digite cred i t1. Entao ative sua tabela. Utilize 5E16 para atua lizar registros de cliente e adicione urn limite de credito para cada urn . Visualize a ajuda Fl que voce cnou.
N ome de DE
tel ft
Segundo nemero de telefone
te1fl
telf2 telfx telxl
telf2
Numero de fox
telfx
Ncmero de telex
te 1 xl
~I :J
Inclua essa estrutura no final de SUilS tabelas - - - knal e - - -1 fal. Utilize SE16 para atualizar alguns de seus registros existentes e adicion e mimeros de telefone a des .
www
w---~~~--
~ ---
-- ----- - -- - -
'I""'!!''!!'''!!f'W _ ..
~_
184 I
185
Imagine que voce agora co loco u as pdginas de volta na ordem. Procurando aleatoriarnente no livro recentemenre ordenado, talvez vo ce co mece a procurar a psgina que desc reve 0 SE16. Po r cnde voce cornelia a procurer? Voce nao sabe a numero de pagina, entac olha 0 tndice remissivo. Este contern as palavras m ais importantes classificadas em ordem alfabetica. Voce rapidamenre encontra SE16 no Indice e cbtem urn mimero de pagina. Lltilizando isso, voce pesquisa 0 livro para localizar essa pagina. Para criar um Iodice, 0 editor duplica informacoes importanres e entao as classifies, colocando-as no fim do livro, separado do corpo. Quando voce olba essas informaco es, esn olhando nas informacoes originais ? Nao, e claro . Voce esta olhando em uma c6pia das informacces originais; elas foram duplicadas. a livro ocupa urn pouco mais de espacc em sua estante por causa do Iodi ce, de aumenta urn pouco 0 prelfo do livro por causa do tempo e esforc c exigido para crid-lo, mas nioguern se queixa disso, porque economiza muitas horas quando voce quer localiaar alga. Uma tabela no ban co de dados emuito parecida com esse livre. Para cada linha e dado urn nurnero sequencial quando uma linha e adicionada a uma rabela, de manei ra mui to parecida com urn numero de pdgina. As colunas importantes sao copiad as em urn Ind ice e c1assificadas de maneira seme Ihante a urn Indice remissivo. Para localizar qualquer parte dos dados, a sistema pesquisa primeiro 0 Indice para encontrar 0 mimero de linha e enesc rapidamente localiza a linha. Cada tab ela do R/3 tern urn Indice primdrio construfdo na chave primaria da tabela. Esse Iodice e necessaria porque os dados na tabela sao arm azenados na ordem que [cram adicionados a tabela. Quando uma linha e adicionada,' as informacoes-chave sao classificadas e copiadas no Iodice, junto co m urn pon tei ro na linha o riginal, A Figura 5.1 mostra urn exemplo utilizando a tabela ztxlfal. Os dados do campo 1Hnr em ztxlfa1 sao capiados no indice, classificados alfabeticameme e arrnazenados junto com 0 numero da linba original. (0 campo mandt foi deixado de fora para simplificar 0 exemplo.)
examinar minuciosamente a tabela do inicio ao fim procur and o todas as linhas onde 1and1 ;: ' U . A tabela na Figura 5.1 e muito pequena, mas esse e urn S' processo que consumiria mu ito tempo em uma tab ela maior.
Figura 5 1
IndIce primoria
pe rc m Ho 1
Icbe'e mile I
I"/nr linho .1 .2 3 .3 1 7 .5 6 .6 2 .7 S
nOdo
.3
.6
2
3
.,
, .,
.2
.7
5
6 7
.,
.s
Ag ora, pense novamente no exemplo de livre . As vezes, urn livro tern m ais de urn Indice . P or exempl o, urn livre sobre ut ilizacces med icinais de ervas p od e ter 0 Indice normal, alem de urn Indice somente pa ra nom es comuns de planta, o urro apenas para nomes de boesnica e urn terceiro apenas para efeitos medicinais , Para crier esses indices, as informacoes pr ecisam ser c1assificadas e duplicadas em mais tres lugares no final do livre. En eso, ha quatco maneiras de localizar urn numero de pagina rapidamente: por meio do Iodice comurnente utilizado ou por -qualquer dos tres indices adici onais . .
MOYO
~ 0 fndice comumente utllizcdc e on61090 0 0 Indlce prim6rio de umo tobelo. Os rIt~O indices cd icloncis s60 cnclcqos 0 indices secund6rios. Para suporter uma clc vsvlc where em um campo de chove n60 prlmc ric, pode-se definir urn lndice secund6rio. Umo tobe la pede fer multiplos ind ices se cund6rios.
numero de linho infernomenle otribuido pelo bonco de dodos ; voce nunce 0 ve no ODIC. Ele e utili odo pe lo indice porc opon tor de z volta para a linno original, do qual as dodos vierom.
.,
"
I ,
'I
A Figura 5.2 ilustra urn indice secundario em ztxl fal-l and!. Urn indice aumenta 0 desempenho tremendamente. Em uma tabela comendo urn milhao de linhas, urn select em uma coluna comendo valores unicos que nao sao suportados por urn indice leria, em m edia, 500.000 registros para localizar a primeira correspondencia, com uma visao pessimista de urn rnilhao de compara~6es. Se voce adiciona u rn indice, 0 sistema pode utilizar urn algoritffio billario de pesquisa para localizar 0 registro, depois co mparan do uma medi a de apenas 10 registros J com urn cen:irio de piar CasO de 20 registros! 1sso e 50.000 vezes mais rapido. Por essa razao, deve assegurar que oscampos em urnacUusula w here sempre serao suportados po r urn fndice . Isso pode ser feito exibindo indices existentes, e entao organizando sua logica para utilizar esses campos ou criando urn indi ce secundario. .
I .,
II
I L
. .,5 , ..'"
E1.gurQ 5 2
seclJnd6rio permite que voce
Indice prim6rio
.ne
(,F
"
. t"j xl
If '
l"'I,
Tobelom lfo1
n." do
Urn Indice
Fig mQ 5 3
1=." W ,l i
, ay A H
S_ IWIl .,... ~
o in<!ice Z
ztxlfal e
londl .
co mpos la petos
campos
..-., "","
~ '
pesquise ropidomente
nnr
n.O do
n." do
limr lond1 .3 US .6 CA
lendl linho
., ,
.2
3 .3
linho
linna
secundorio no lobe/a .~ t-I '8t :".._ -,,~ ,~; :_'. ~:::.;.;.: -: . ~.,.. : <.
"1._
3.~ C.AIX : ~ H U n
.,
,
7
2
3
CA CA
.2 , .,
5 6 7 .7
US
DE DE
CA
DE DE
.5
.6
.7
2 5
.,
.5
U S
US US US
, ,
6
mandt
3 7
---:..;. ~
...,..
..
~ "'. -= .;;_ ~
. . _l
I
i
I'
" I
Para exibir os ind ices secun derios existentes em uma tabela de banco de dados, siga este pro cedimen ro:
procedimentc precedence somente mc strara indices secundsrios . 0 Indice na chave p rimfria (Indic e 0) DaO aparece nessa Iista .
smENW~ Inicie a ScreenCam "How fa Display All Indexes" a gora .
1. Exiba a tabela. 2. Pressione 0 borao Inde xes. " na barra de [erramentas Application. Se voce nso vir esse batao , sua janela pede estar mui to estreita.
. Alargue-a a u escolha
0
1. Exiba a tabela.
2. Escolha 0 caminho de menu Utilities->Database Utility. A tela ABA P/4 Dictionary: Utiliry for Database Tables e exibida. 3. Escolha 0 caminho de menu Extras-c-Databa se Object- s-D isp lay. U rna lisca de todos os campos na tabela e exibida e embaixo deja esd. uma Iista de eodos os indices com seus camp os, incluindc 0 Indice O.
3. Se existirem indices secundarios, sera exibida uma Iista dele;-em uma caixa de dialogo. Se D a O existi r nenhum, sed'exibida uma mensagem. 4. Para exibir urn deles, de urn clique duplo nele . 0 Jndice e exibido na tela ABAP/ 4 D iction ary: Ta ble: Display I ndex, como mosrrado na Figura 5.3.
o status do Indice eexibido no campo Status. A existencia do Indice no banco de dados e ind icada po r uma mensagem que aparece embaixo do campo Status. No campo DB Ind ex Name esd. 0 nome do Indice como e conhecido no banco de dad os. 0 nome de indice no banco de dados efo rmado peIo nome cia tabela, seguido po r su blinhados e depois pelo id do Indice. Na pane inferior cia janela, esrdo os campos que abrangem 0 Indice . A ordem de ripe do Indice ~ a mesma que a ordem d e campo.
Considero<;6es
NOYO ..... TtU.O "
00
Urn Indice pede co nsisfirern mois de um campo. Pa r exemplc, construindo urn lndice secund6rio em landl e re gi e ofivc select * f r om ztxlfal where landl = 'US' and reg ie = ' HA l o loccllzcr ropidarnente linhas cc rrespcndentes. Quando existem multiplos indices (urn prim6 rio e urn ou mais indice:; secund6rios), 0 RDBMS ufilizo urn otimizador para selecionar a melhor. Para escolher urn Indice, 0 ofimlzc dc r examine as names de campo na cl6usulo where e entcc procure urn indice que contenha as mesmos ~ames de cam po no ordem especlbcodo no d6usulo where. Partonta, ce rfifiq ue-se de que 0 sistema escolho 0 fndice que voce pretende, espedfique os campos no cl6usufa where no mesmo oroem que eles oporecem no fndice.
188
D~
indice s e MANDT
Se urna rab ela comeca com 0 campo mandt, seu s indices tambem devem com ecar com esse campo. Se um a tab ela comelja com mandt e urn Indice nao, 0 ot imiaado r pode nao ut ilizar 0 Ind ice. Lernbre -se, se voce pre cisar, do recu rso de tr atamento automdrico de clien re do Open SQ L. Q uando select *" from ztxlfal where landl ;: ' US' e executada, 0 SQL real enviado ao ban co de dad os e select *" fro :n ztxlfa l where 0 mandt = sy-mandt e 1andl ;: 'USI Sy-mandt contern 0 cliente atual de lo gon . Q uando voce seleciona Iinhas de uma tabela utilizando Open SQL, 0 siste ma au to maricame nte adiciona sy-mandt aclausula w here, que faz com que apenas as linhas que pert enc em ao cliente atual de logon sejam localizadas. Quando voce cria urn indice em uma tabela con tendo mandt, tambem deve incluir ma ndt no Indice. El e deve vir primei ro no Iodice, p orque sempre aparecera p rimei ro no SQ L gerado. No resta nre dessa discussao, par ta do pressuposto que mandt esra inc1uido em todos os indices.
Ao criar ou modificar Indi ces, rente nao utilizar urn camp o que ji esn em urn deles. Ha uma chance, quando urn programa pree xist ente for execurado, de que 0 otimizador va escolh er 0 novo Iodic e e urn programa preexisrente po de tornar-se mais lent o.
R/3.
NOVO ....
Tn.ll.O ~
Sevocecodilicc sel ect *" from ztx lfal where regia" ' MA ' , precisa haver urn indice iniciondeemmandt e regi 0 para cssegurarque 0 otimizodoroutilize. Se voce ccditicc sel ect *" from zt xl fa l where lan dl ;: IUS' and regia " ' MA', deve haver umIndice que conternm andt, 1and! e regia. 0 Indice ideal tcmbernas terio nesso mesmo ordem. Se ndc houver um Indice nessa ordem, mas hoover outro ccmecondc com m andt e 1andl, a otimizodor a utilizar6 para cc rrespcnder os primeircs doiscamposdo c16usulo where e entco execvtor umvorr eduro de intervo/o de fndice pdro localizer uma ccrrespondendo em regio. Uma vorreduro de intervolo de indicej ! umo busco seqcencol por uma porte de um fndlce.
1. Exiba a tabela.. Voce deve comecar na tela Di ction ary: Table/ St ru cture: Di splay Fields.
2. P ressione a batao Indexes. . . na barra de ferram entas Application (ou escolha 0 caminho de menu Gorc-e-Indexes. . .) 3. Se os indices secundsrios ja exisr irem, uma lisra deles sera exibida em uma caixa de dif logo identificada como Indexes for Table xxxxx. Para criar urn Indice, pr essione 0 ba tao Create. A caixa de dialogo Create Index se ra exlbida. 4. Se nenhurn Indice secundaric exisrir, voce nao veri uma Iista de indices. Em vez disso, vera a caixa de diaIogo Create Index imediatamente. 5. Insira u rn id de fndice no cam po Index rD. Os indices de cliente dev em comelja! com You Z, embora 0 sistema nao imponha isso. 6. Pressione 0 botao Continue. A tela ABAP/ 4 Dictionary: Ta ble: Maintain In dex e exibida . 7. No campo Short T ext, digite uma descri~ao do fndice.
NV O O.... TWlO ~
Qual 0 grau de efic6cia do fndice com F3? Depende do moneirocomoos dodos distribufdos no fabelo. Se a combina<;ao de F1 e F2 for muifo especi ico (ou f se/etiva) e resultar em apenos a lgumas linhos correspondentes, a inclice i6 sere muifo eficcz. Adicionor F3 00 indic nesse coso pode 1"100 ser vontajoso pe r causa do overhead e do fndice durante as atua l izo~6 e s de tabela. Se a combina ~oo de Fl e F2 resultar no sele<;oo de um grande nvmero de linhas da tobelo, a Indice 1"160 estoro muito seletivo e adicionar F3 provovelmente oumentora 0 desempenho e reduzir6 a consumo de recurso.
500
I AP RENO A EM 21
eus ABAP/4
191
8. Na coluna Fl d Name, digite os campos que 0 Indi ce deve abranger na ordem em qu e eles deve m ser classificados. 9. Se os valores nesses cam p os, quando reun idos , devern ser sempre un icos, facsa uma marca de verificacao na caixa de seleclo Unique Index. 10. P ressione 0 botao Save na barra de [erramentas Application . as valores nos campos Status sao ago ra Newe Saved e di retamente aba.ixo deles c mensagem Does not exi s t in t he database aparece. Tarnbern aparece a mensagem Index xxx to table xxxxx was sa ved na p arte in ferior da janela na barra de sta tu s. 11. Pression e 0 batao A ctivate na barra de ferramentas Application. 0 sistema gera a SQ L e envia pa ra 0 RD BMS, criando 0 Iodice no banco de dados . Se bem-sucedido, os eampos Status exib em Ac t 1ve e Saved . e, ebaixo dos campos de status , aparece a mens agem Exists in t he database. a campo DB Index Name conrerf 0 nome do Iodice no as banco de dados. Alem disso, e exib ida a mensagem Index xxxxx w success fu l ly activated. na barra destatus. 12. Pressione Back. A t ela Indexes for Tabl e xxxxx e exibida. 13. Pres sione Cancel para retorn ar a tela Dictionary: Table/S tructure: Display Fields.
Voce aprendeu a criar urn indice secundario. O s indices melhoram a eficiencia da insrrucao sel ect.
a eabela, entao vo ce nao pcders excluir n enhu m. Se cs indices secondaries ja existire m, uma lista deles sera exibida em uma caixa de diilogo chamada Indexe s for Table xxxxx.
3. De urn clique dupl o no indice que vo ce quer excluir. A tela ABAP/4 Dictionary: Table: Display Index e mostrada.
4. Pressione 0 batao Display < - > Change na barra de [erramentas App lication . A tela alterna pa ra mod o de alteracao e 0 titulo da tela e ABAP/4 Dictionary: Table: Maintain Index .
5. Esco lha 0 caminho de menu Ind ex- > Delete. A caixa de dialc gc D elete Index D efinicion aparece p edin do para coofinn ar a solicitacao de exclusao.
6. Pressio n e 0 batao Yes para excluir 0 in dice. Voce e Ievado de volta a tela Dict ionary: T able/Structure: D isplay Fiel ds . A mensagern Index
xxxxx deleted aparec e na barra de status. No pass o seis, pres sionar 0 botao Yes faz com que 0 Indice seja excluido do banco de dad os. Ao rer ornar a tela Dictionary: Table/ Structure: Display Field s, voce nao precisa salvar a tabela. Note tam bem que voce DaO pode desfazer a exclusso pre ssionando a batao Cancel na te la de exibicac de tabela.
Se voce fizer umo morco de verificoC;ao no coixo de seleccc Unique Index, c ccmblnoccc de compos no indice eseguromente fundomen tal; isso imposto pe lo RDBMS, Umc instrvC;a o de inse rC;ao o u modificoc;oo folhora se 0 cc mblnc cc c de vclc res nos compos de Indice jo estiver presente no tabe lo.
~o
Somente uma pessoo pode execut or um rostrea mento de SQl de cede vea, lembre-se 'de deso tivor 0 rastreomento quando terminor. 0 rastreome nto de SQl 1omo lentc 0 sistemo.
S(RHNUM~ lnlce 0 ScreenCom "How to Use SQl Troce to Determine the IndexUsed" ogora .
Para dererminar qual Iodice esta sen do utili zado por uma instrucio se lect: 1. erie urn pequeno programa em ABI\.P/ 4 que contenha apenas a ins trucao select. Antes de prosseguir, tesre-o pa ra certificar-se de que funciona.
Para excluir urn Indice secundario: 1. Exiba a rabela. Voce deve comecar na tela Dictionary: Table/Structu re: Display Fields 2. P ressione 0 borso I nd exes. .. na barra de [erramentas Application (au escolha 0 caminho de menu Go to->Inclexes . . .) . Se voce vir a .caixa de dialogo Create Index, ne nhum Indi ce secundario existira para
192
DIAs,oDATADlcnDHARY,PARTE ' I
193
2. Abra esse programa no modo de edicsc pan. que ele esreja promo e espe rando para ser execu tad o. 3. Abra uma nov a scssa o utilizando ate sessron.
0
4. Execut e a tra nsacio STOS (digit e I n stCS - zero-cinco, e ndo O -cinco - no campo C o m m and o u esco lha 0 ca m inho de m en u System -> Urilities->SQL Tra ce) . A tela T race SQ L D atabase Requests
16. Di gite 0 no me da tabela que voce esta rasrreando no campo Search For. (Essa e a tabela identificada na instrucao sel ect em seu programa em ABAJ.'/ 4.) , 17. Pr essione 0 bono Find. V ma lista de resultados de pesqui sa devers ser exibida com seu nom e de tabela dest acado.
e exibida.
5. Se a caixa T race SQL Starus Information exibe Tr ace SQl is switched off, va para 0 passo 7. 6. Nesse p ontO, a caixa Tra ce SQL Status Information con tem Trace SQ l switc hed on by, seguido pelc id de usua ric qu e ativou 0 rasrreamento e a data e a ho ra que fo iiniciado. Voce deve altern a-lc antes de poder prosseguir. Se 0 rastreamento foi iniciado dent ro da ultima hera, e pcssrvel que ainda este]a sendo utili zado . Ent re em con tat o com 0 usufrio indicado ou rente novam ente mais tarde. Se 0 rastre amentc foi inicia do hi hora s ou dias, 0 usuario pr ovavelm ente 0 deixou ativo por erro e ele, com s eguran~a, pede ser desativado. Para desligar 0 rastreamento, pressione 0 bono Trace Off. A mensa gem na caixa Trace SQL Statu s In fo rmation agora dev e ser Trace SQ is L switc hed off. 7. P ressio ne 0 botao Trace On. A caixa de didlogo Trace SQLDatabase Requests eexib ida. 0 campo DB -Trace for User deve center seu ID de usua rio. Se seu ID de usuario nao estive r nesse camp o, insi ra-o agora . ~_::.' 8. Pressione 0 botao OK. Vo ce e levado de volta a tela Trace SQ L Database Requ est s e as informacoes de sta tus exibem Trace SQL 'switc hed on by. indicando qu e voce ligou 0 rasrream ento. 9. Aherne de volta para a janela que contern sua sessso de editor (aqu ela com seu programa esp eran do para ser executado) . 10. Press ione F 8 para executar seu programa. (Apenas pressione F 8, nao fa~a mais nad a, nem mesmo p ressione 0 bo tio Back.) 11. Quando seu programa t iver side execut ado e a ampulheta nao estiver mais sendo exibida, alt em e de volta ajan ela de rastr eam en to. 12. Pressi one 0 botao T race Off. As inf ormacce s de status leem Trace SQL is sw itched off. 13. Pression e 0 ba tao List Tra ce. A caixa de diilogo T race SQL Database Requests e exibida. Os campos nessa tela jacon terao os valore s. 14. Pres sione 0 botao OK. Vo ce pode precisar espe rar urn pou eo, no maximo doi s minutos. A tela Trace SQ L: List D atabase Requ ests e exibida.
e levad o de volta a tela T ra ce SQ L: List Database Requ ests. Seu cursor e posieionado na primeira linha qu e co ntern seu nome de tabela. A direi ra dele, na coluna O peration, deve estar a palavra PRE PARE , OP EN ou REOP EN.
plan o de execucao. 0 Indice utilizado sera
19. P re ssione 0 bcrac Explain SQ L na barra de ferr amen tas Application. A tela Show Exec ution Plan for SQL Statement e exibi da. 20. Role para baixo ate exibi do em azul.
0
Voce aprendeu a executar urn rastr eamen to de SQL Isso ajudad. voce a determinar qual Indice esd. sendo urilizado.
Closse de dodos
TftO ~
N OVO'"
A cosse de dodos determino a tablespoce 0 que 0 fobelo e ctribuldo. (0 termo "tcbt espoce" se cplico 0 bancos de dodo s Oracle. Pora lnformix, substituo pelo espoce e um orquivo fisico no disco que e uttlucdc para termo "'DBS spa ce"'.) Um tabJ crmczencr tcbelcs . Coda tc belc eotribuida a um toblespoce. As tabela s com corocteristicos seme lho ntes nc rrnc lmente sao agrupoda s em urn tab lespace, ossim toblespcces sa o as unidad es a dministrotivos utilizada s pelo DBA pa ra gerencior 0 ban co de dodos. Pa r exernplo, a s tobelas que cresce m rcp idomente esto roo ogrupodas em urn toblespoce em urn disco com muilo espo<;olivre.
Ca da classe de dados tern urn tablespaee associado. Quando voce ativa uma tabela. ela e criada no tablespac e associado a essa c1asse de dados. Se voce alte ra a elasse de dados quando a tabela est a ativa, oada aco m ece; ela nao se move para outro tab lespace .
.w ..
194
w.w.w
,. 195
_1 1>:1 "
No telo A.B.AP/4
Alem de ssas categories, p ode haver classes de dados USER tambem. Estas sao criadas par seu DBA, que 0 dirigira na esc olha delas nas hora s apropriadas.
que vo ce esp ecifique 0 mimero maximo de regist ros que espera que essa tabela arm azene. Vo ce ira con figurar 0 tamanhc da exten sao ini cial e das pr 6ximas, assim como 0 nu m ero maximo de extens6es permitidas por essa tabela. VIDa eaensso e a quantidade de especc alocado para uma tab ela. A extens fio inicial ea quantidade de espa<;o alocado pa ra um a tabela quando e criada. Se uma tabela consome esse espa<;o, out ra exte ns ao sera alocada, fazendo com que 0 espa!jo de tab ela seja est endido . As cacegorias de tam anh o sao sempre de 0 a 4, mas a namero de re gist ros espera dos em carla categoria de tamanlro mudare de acor do com cede tabela baseada n o co mprim ento de uma linha. Esco lha uma categoria apr o pr iada baseada no numero m aximo de registros qu e voc e espera que a tab ela arm azen e.
~o
que a tab ela nao e atualizada com freqeencia e cresce lentamente. Ela sera colocada em urn tablespace com tab elas semelhanres. 0 mestre do fabricante e as tabelas-mes tres do cliente sao bans exem plo s de , dados -mestres. significa que a tabela se destina a ser atualizada com frequencia e crescer rapidamente. Pedidos feitos a fabricantes e pedidos recebidos de clientes sao bons exemplos de dados de transacoes. As eabelas que contem essas ordens terao uma classe de dados de APPLl.
Q uando escolher umc ca teg orio de tomonho, se jc ge neroso . No R!3 melhor supe restimar, que subest imor esse pcrernetrc . Se a cotegorio de tomonho e muito peq ueno e a tooele cresc e mois que a clccccec inicicl, 0 RDBMS oloco outra extenseo. Extens6es seccn dcrlc s redvaem 0 dese mpen ho e exigem uma reorqc nlzocec do lable spoce para sere m remcvidos. As reorgcnizocoes podem se r muito diflceis de banco de do dos g rond e, especiolmente e m urn que executo r e m exijo a lto disponibilidode. t muito mois focll reduzir uma ca tegorio de tom onho excessivome nte qeneroso do que ournentor umo subestimodo .
e muito
urn
APPL2 OU
dodos de personalizacso. Escolher APPL2 (clados de personalizacao), significa que 05 conteudos cia tabela sao determinados am es da implementacio e njio alteram com frequencia depcis disso . As tabelas de verificacao e suas tabe1as de texto associadas, como O ztxt005 e ztxt O St , sao bons exemplos de tabelas que devem ter uma
classede dados de APPL2.
a gora.
pressione a tecla En ter.) A te la Database Performance: T ables and Indexes e exibi da. 2. Pres sione 0 bctao D etailed ana lysis. Uma caixa de dialogo Memory Ma nagem ent: T ables and Indexes e exibida.
.*.
wwww ww _ ~-- -
~ ~
DIA 5:DD ATADICTIONARY PAR E3 , T
197
3. Digite
nome cia tabela no campo Tables e pressione VIDa tela M emory Management: Tables and Ind exes nome de tabela apa rece ria lista.
0
batao OK.
e exibida. 0
desempen ho de duas
4. De urn clique duplo no nom e de tabela. Uma caixa de dialogo Memory Management: T ables and Indexes eexibida. 5. Selecione 0 ba tao de opcao Extents.
6. Pressione botao OK. Uma tela Memory Management: Tables and Indexes e exibida, contendo a Iisca de exrensoes, seus nomes de tablespace, n umeros de extensao, mimero frsico de arquivc, tamanho de bloco, tamanho de extensao e mimero de blocos na extensao. Ha
0
Os programas que udlizam os dados no buffer sao execut ado s mais rapido porque eles nao precisam esperar as informacoes chegarem do banco de dados . Isso reduz os arrasos d e espera pelo ban co de dados e a rede que as conecta.
Os outros programas que preeisam acessar a banco de dados sao executados mais rapido porque hoi men os carga no ba nco de dados e menos trafegc na rede. Colocar uma tabel a no buffer pode fazer com que uma sel ect execut e 10 a 1OOvezes mais rapido ou mais . A princfpio, pode pareceruma boa id eia u tilizar buffer em cada tabela no sistema. Entretanto, as buffers sao armazenados inteiramente na RAM, assim 0 especc e limitado pela qu antidade de RAM disponfvel. De faro, a quantidade de dados e dio superior a de RA M que as tabelas devem ser co locadas no buffer prudentemenre para evitar overruns . Se acc nt ece urn overrun em urn buffer, ele pode fazer troca (swap) para 0 disco, que pode apagar qualquer desempenho ganho pela utilizacao de buffer. As tabelas contendo tipos de dados numericos ria ehave primaria nao podem estar no buffer. Os tipos de dedos numericcs -de DDIC sao CURR DEC, , FLTP, INTI, INT2, INT4, PREC e QUAN.
um a linha nessa lis ta para cada extens ao. Voce aprendeu a exam inar 0 numero de extensoes alocadas em uma tabela. I sso informara se a t abela p rec isara ser reorganizada au nao.
lliiJi za ~ii Q
de buffer em um a tg be lo
Como mencionadono Dia 1, as dados podem ser colocados no buffer na RAM no servidor de aplicat ivo. Isso e contro lado individualmenre e especificado nas configuracoes tecnicas para cada tabe la {veja a Figura 504). Sempre que uma instrucao Open SQ L e utilizada para ler urn regis tro, 0 buffer de dados e verificado p rimeiro para ver se os dados estao ai. Se nao est iverem, as dad os sao lidos do banco de dados. Se as atriburos cia t abela indicarem que os dad os devem ser cclocados no buffer, 0 regis tro e salvo n~ : RAM no servido r de aplicativo em buffers de dados. Mais tarde, se esse registro for lid o novam ente, ele sera lid o atraves do buffer, em vez do banco de dados. Urn diagrams desse processo e mostra do na Figura 5.5.
Elg ll r g 5
A trcnsoceo 5T02 exibe buffers e estctleflcc de usc. No tela Tune Summary, os buffers de dodos sao chcmodcs Generic K e Single ey Record. Urn clique duplo em coda umc desscs liohas exibir6 umo analise detclhcdo. A partir del, os cbietos no buffer podem ester exibidcs pressloncndo -se 0 botoc Buffered Objects no borro de ferromentes Application. consultor de Basis 0 responsavel par monitorar a s buff ers e evitar que a falta de buffer tome lema 0 sistema. Antes de utilizar bu ff er em u ma cabela, e uma boa ideia conversar com seu consultor de Basis.
5
Progromo em
CD
sendo exeectcdc em um procl!SSO de trcbclbc
do oplicotivo.
0 prccessc de trobolho verik o 0 buffer perc ver se es dodos eslo o ui. Se nco esuverem.
(2)
preenche
buffer.
Sincronizac;cio do b uffer
NOVO ~ Se voce fiver dais servidores de cplicctivo, 0 mesmo reqistro pode ser cclccod c TtR1!O ~ no bufferem code servidor. lsso n60 serlo um problema para ele, noo fosse 0 foto de que os dodos podem ser otuolizados. Se um registro colocodo no buffer for otuolizodo, as clterccoes devem ser comunicodas 00 outro servldor de cpllcctlvc. Isso e feito em um processo conhecido como sincron;zo~oo de buffer, que ocorre em intervo los de 1 a 4 minutes, dependendo do configuro~60 do seu sistema.
~ . Y W W W W W W W W
W . W W W . W . W
--
_:w:
__
__
1
199
198
mEHO' EM 21 DIAS"AP"
Por exemplo, como mo strado na Figu ra 5.6, supo nha que 0 usud rio 1 esteja conectado ao servidor de aplicat ivo 1 e 0 usuaric 2 esteja conectado ao servidor de aplicarivo 2. 0 usuario lIe 0 registro 1. 0 registro 1 e colocado no buffer do servidor de aplicativo 1. N a Figura 5.7, 0 ususrio 2 Ie 0 registro 1. 0 mesmo registro esta agora n os buffers dos dois servidores de aplicativo. . Na Figu ra 5.8,0 usudrio 1 atualiza 0 regiscro 1. A atu aliza cao e refletida n o banco de clades e no s buffers do servidor 1, mas 0 regist ro an tigo aind a esd no serv ido r 2. Uma entrada e feita no log de siruronizaoio n o servid or do banco de dados indicando que 0 registro 1 foi atualizado.
"F i g u r a 5 6
Na Figu ra 5.9,0 usuario 21e 0 registro 1. A versjio auriga do registro 1 e encontrada n o buffer, enrso 0 usuario 2 ve os dados ant igos. 0 usuario 2 nao ve a nova versao do registro 1 ate qu e uma sinc ronizacao de buffer ocorr a. . N a Fi~ra 5.10, a processo de sincronizacao de buffer detecta que 0 l~terval? de_ smcroni~a(jao expirou e com elSa a sinc ron izacao. Ele Ie 0 log de smcromzacao no servidor de banco de dados e determine que 0 regist ro 1 esta fora de sincr onizacao. Ele entao marca esse regist ro como invalido no buffer. Ele ainda ndo atua liza 0 registrc n o buffer do banco de dados.
fig u r g 5 8
I
!
j
1 1
fozendo com que ele seio colocodo no buH no seNldor de er oplicolivo J"
l egendo: AS: Servidcrde oplico tivo DB5 : 5ervidorde banco.de dodos SP: Processo de sincronimco c
Posso C: 0 usucria J oluoli o 0 regislro de z J, fozendo com que ele seio otuolizodo no banco de dodos e no buffer do seNidor do oplicotivo 1.
I
. ..
SYNC lOG
Fi g u r a 5 9
-'
SYNC lOG
REC 1
Possa D:
usuorio2
Ie 0 registro I e obtem
os dodos possodos.
I I
L!o====...J I
.E.igw:.a,,--,5o..L7~_
Posso B: 0 usuorio 2 lombem /e 0 registro J, fozendo com que e/e seio co/acado no buH no servidorde er oplicotivo 2.
l..==LJ
SYNC lOG
REC 1
200
!
Na Figura 5.11, 0 usuario 2 Ie 0 registrc 1 novamente. Dessa vez, 0 regis tro 1 foi marcado como invalido no buffer, entao ele e buscado do banco de dad os, atuali zando assim 0 buffer no servidor de aplicativo 2. Como most rado nas Figuras 5.6 a 5.11, sincronizacao de buffer utilize urn processo de sincroni zacao em cada servidor de aplicarivo e urn log de
I f ,
! I
201
Para checar, uti lize a transaclo RZ10 como a segu ir: Inicie a transacao RZ10 (digite /nrzlO no campo Command e pressione a recla Enter). A tela Edit Profiles e exib ida. Escolha 0 caminho de menu Gcto-> Profile Values-> O f a Server. A tela Active Application Servers e exibida. De urn clique duplo em urn servidor de aplicativo. Voce vera urna Iista de todos os valores de paramerro de perfil par a esse servidor. Digite %sc no campo Command e p ressione a tecla Enter. A caixa de dialogo Find e exibida. D igite rdisp/buf no campo Search For e pressione a tecla Enter. as parametres de buffer sao exibidos e destacados. De urn clique na pa lavra destacada rdi sp/buf r-e f t fme .
sincron izacao no servidor de banco de dadcs. Em urn intervale predefinido, cada processo de sincronizacao ver ifies 0 log para ver se quaisquer clados que esrejam colocados no buffer fo ram modificados. as dedos modificados sao marcados como invalidos no buffer. Da pr6xima vez que as dados forem lidos ,
eles serao atualizados a partir do banco de dados . o consultor de Basis configura a medida do intervale de sincronizacao e. de buffer utilizando 0 pa rametro rdi sp/bufreft i m
Ei g ma 5 10
do servidor de 2.
Fig mQ 5 11
Posso F: 0 usv6rio 2 tenlo reler 0 regi slro J rue s tile esrc morcodo como inv6Jido no entoo e atuolizodo do banco de dodos.
buHer no seNidor ci a
oplicofivo 2.
buHer. 0
registro
DBS
Fl F2
[ATI]
_.
O~ 5.00ATAOlcnONARY. PAR1E '
203
202
MOYO.....
registro 1, bloqueia-o e 0
le (veja
UiMO"
a Figura 5.13). . usudrio 1 altera Fl, escreve -o ao banco de dados (veja a Figura 5.14) e
informccees mais atua lizodos, par exem plo, select * fram zt xt lfa l by0 buffer seic ignora do e 05 dodos sejcrn lidos diretomente do banco de dodos. Voce deve utilizer issc se mpre que estlver Jendo para aNalizar, lsto e, lendo urn registro que ser6 otuchr odo e gravo do de volta no
destrava-o. Nesse ponto. 0 buffer no servidor de aplicativc 2 ainda tern a copia original do regisrro 1 com 0 conteudc original de Fl. Se 0 usuario 2 bloqueia 0 registro 1 eo le (do buffer), altera F2 (veja a Figura 5.15) e entao salva-o no banco de dados, as alreracoes feitas pelo usuario 1 serao perclidas [veja a Figura 5.16).
E.ig..urq 5 13
bc nco de dados.
Figura 5
15
Posse B: 0 usu6rio 1 bloqueio e Ie 0 registro urn, fozendo com que ele sejc co/ocodo no buffer no servidordo . op!icolivo J.
Usu6rio 2
AS2
Fl
A
F2
B
F1
DBS
w::u
F igura 5 16
F2
DBS
IA IB
F igu ra 5 14
Fl
F2
Posso E: a usu6rio 2 salvo 0 registro J no banco de dodos, grov ondo par cimo do o ltero~aa do us u6rio.
Posse C
otuorizo
usu6rio 1
registro de J, fozendo com que ele seio oluolizodono banco de dodos e no br.Jffer do servidordo oplicotivo J. 0 bloqueio e removido.
0
ler
Por exemplo, no passo D, se 0 usuario 2 utili zou bypass tnq buffer para registro, a versso mais atualizada do regist ro te ria sido Iida e as alteracoes
204
m EN DA EM 71 DIAS AWl'
205
o bypa ss do
buffe r para otualjzo~6es oferece melhor equilibria entre seguron<;o e velccldcde. Entrelonlo, se voce puder fer certezo de que
todes as atuolizo <;6es seroc [eitcs em urn cnlcc servidor de oplicctivc,
Esses rres bcroes de opc;:ao ativarn e desativam a utilizacao de buffer: Buffering Not Allowed
nCio prectscrc codihccr pore fczer bypass do buffer. Seu byposs toma lentc a proc esso de otuolizm;ao urn pouee, porque um ccessc de bonco de dodos e exigido . Se voce preciscr de quontidocle m6ximo de
. aplicarivo.
U tilize buffer na tabela e use bypassing buffer.
Escolha Buffering Allowed But Turned Off ou Buffering Turned On se os usuaries desses dados puderem tolerar uma latencia de buffer de 1 a 4 minutes. Njo se esquelj:l1 que esse larencia nao existira quando atualizar dados porque voce codificara bypassing buffer para cbter as ul~imas informa coes.
Tipos de
utiliza~iio de buffer Como mostrado na tela Technical Settings na Figura 5.4. rres ripos de utilizaci o de buffer sao possiveis:
Comp leta
Generics
De regis tro unico Embora voce utilize uma caixa de selecao para indicar 0 tipo de utiliza~ao de buffer) somente urn tipo pode ser selecio nado por vez. Se voce escolher m ais de urn, uma mensagem de erro sera exibida. Ha dois buffers de dados em cada servidor de aplicativc e a ripe de utiliza~3o de buffer escolbido det ermine qual buffer sera utilizado. Em urn servidcr de aplicarivc hi: 0 buffer de registro generico 0 buffer de regisrro Unico
Buffering Not Allowed em umo tobelo SAPslqniflcc que voce nee deve onvcr 0 cclcccccc desso tc belo no buffer. Se fleer isso, voce pode cou sa r umo operc ce c fcltvel dos oplicofivos do R/3 e tolvez perdo ou corrvp o de dodos.
Tecn icos de
A met ade inferio r da tela Techni~a1Se ttin gs {mosrrada anreriormente na Fig ura 5.4) conrem as controles para configuracoes de buffer. Ao criar urna tabela, voce tern controle complet e sabre essas configuracoes. Para alterar essas configuracoes em urna tab ela de SAP. voce precisa obrer urna reels de modificac;io da SAP . Voce pode configu rar a utilizalj:io de buffer para uma tabela quando voce a eria, au voce pode mo difid-Ia mais tarde. Alterar as configura!joes de buffer nas ta belas de SAP exige uma tec1a de modificac;ao, que voce pode obter da SAP.
uti liza~ii o
de buffer
o buffer de registrc generico echamado TABL (abrevia~ao para "tabela") . o buffer de registro enicc eTABl P ("pn significa "parcial-).
-=------206
lPHNOl EM 21 OIl S ABAPI4
DIAS, DDATA DICTIONARY, PARm
207
:1 .1 ,.
Ut il iza~ao
de buffer completa
Para ativar 0 tipo de utilizaci o de buffer completa, fac;a uma marca de verificac;oio na caixa de se1e~ao Full. Quando ~ feita uma tentativa de ler os dad os de uma tabela com utilizacio completa de buffer, 0 sistema exam ina 0 buffer TABL para ela. Se ele nao for encontrado af, todasaslinhas serao carregadas do banco de dad os em TABL [veja a. Figura 5.17). Isso acontece sempre que uma inserucao se lect e executada, independentemente de quanto s re gist rcs correspondam a cldusula wh ere. Mesma se nenhum regi str o co rresponder, todo s sao carr egados no buffer se a tabela Olinda DaD estiver al ou se ela estiver invalidada devido a sincronizacao de'buffer.
E gura
5 17
Se umo instrul700 seledonada e executod o, ma s mcitc s vezes nee enconfro dodos no tcbelc, a utiJizol700 complete de buffer aindo pade toma r 0 ocess o a tobelcs mots eliciente . Como 0 tobelo lntelrc estc no buffer, 0 sistema pede de terminor se os registros exlstem a ntes de ir 00 banco de dod os, a ssim ele evitc urn ocessc de ba nco de dod os porn e ncontra r as dodos .
i .,:
!
" :' I
Utiliza~ao
ge nerica de buffer
T P ABL
Todescs linhes de
ume lobelo com
TABl
I~
Select ' from I'D1 where...
C om a utilizacao generi ca, urn grupo de regisrros e carregado em TABL em vez cia tabela int eira . Para at ivar esse tipo de utili zacao de buff er, falia uma marca de verificacio na caixa de selec;ao Generic e colo qu e urn numero n no s No. of Key Fie lds de m odo que os n campos a esquerda da chave prirnaria agruparac regist ros . Qu ando urn registro e lido e n e 1, todos os registros con tendo 0 mesmo valo r no primeiro campo de chave primaria sao carr egados no buffer. Quando urn registro e lido e n e 2, t odos os registrcs contendo 0 mesm o valo r nos primeiros dois campos cia chave primaria sao carregad os no buff er. Isso e ilusrrado na Figura 5.18.
Figura 5 18 Ufilizo o generiea de buHer. n deve ser
menor que D num ero de campos no chove
prim6ria.
T ABl
C I 1 C 2 C 3
TABlP
TB I
Technical Settin g5:
.-
/'
-,
TB I
"
RECl
REC2 REC3 REOI
./
rec4 ..05 re , 6
Full Buffering
carregamenro de TABL nao ocorre com as instru coes sel ect s tn ql e: somente sel ectJendse 1ect faz isso. Se a tabe la estiver com utilizacao completa de buffer e um a instrucao sel ect single for execurada, n enhum registro sera carr egado ern TABL. Enrretanto, se a tabela ji estiver carregada em TA select BL, 5 i ng1e [er fi os regis tros de la. Durante a sincronizacio de buffer, a tabela inteira einvalidada se qualquer registro dentro dela se aiterar. D a pr6xima vez que dado s fo rem lidos, ;I. tabela inteira sed. recarregada. A utili zacao de buffer completa e apropriada para pequenas tabe las que raramente se alteram. As tabelas de verificacao e suas tabelas de texto, como ztxtOOS, ztxtOOSt, ztxt005s e ztxt005u. devem t er u tiliza~ao co mpleta de buffer. Elas sao configuradas com urn conjunto inicial de valores validos e d escrj~6es, e raramente sao mo dificadas dep ois .
f'--TBI F1
/
F2 1 2
TB 1 T echnica l SeMing5:
~i
A B C C C D D
I
1 2 3
1
Em outre exemplo, suponha que voce escolha a utilizacao generics para a tabeIaztxl fal e configure N o. of Key Fields com o 1. Como o primeiro campo e mandt. todos os regi str os para urn cliente sao carregados no buffer de uma vez.
---
__ ...
' W ' ~ _ ~
__
208
209
Se voce especthccr vtilizOliOO complete perc ume fobelo dependente do cbente {tendo rna ndt no primeiro coluna}, 0 sistem a autome ticcrnente a utili e gen ericomente com n igua l 0 1. Isto e, quando um z registro elida, cpenos as registros que tern 0 mesmo neme rc de diente sec ca rrega da s no buffer. Voce noo pod e ver issc refletido nos configurolioes tecnlcos: elos cc ntinuom a indice r utiliz aliQO complete. lsse simplesmenle ocontece "nos bosndcres" .
unicooti'lodo,
selec.ione regish'os de corregomenlounico de ume vez porc 0 bufferTABLP.
I I1I
~
",3
A utilizacj o generic a de buffe r eadequada para tab elas em qu e os regisrros sao nor malmente acessados em conj untos ou grupos. Ela eadequada se, quando urn regisrr o do grup o e acessado, grande parte des acessos normalmente seja par a registros do mesmo grupo. Po r exernplo, se urn usuario efetua logon em ingles, e muito prova,:el que sornente descricoes em ingles sejam lidas por esse usudrio e par outros usuaries no mesmo serv idor de aplicativo. As tabelas de tex to, 'c nde as descricoes sao arm azenadas, sempre te rn mand t e spr as (0 c6digo do idioma) como os primeiros dois campos . Portanto, a uriliza cdo generics de buffer com n iguaI a 2 eapropriada.
r-;
TBl F1
~
F2
1
A A
C
2
1
reel ree2
,3 reca
./
Coda grvpo de reg istro no buffer exiqe-overh eod od mlnlstrcuvc . Tente fer um nvm erc reletivamente grande de registras por grv po . Co m a utilizOliQO gen erico, se voce ccobc corregondo 0 moioric dos hnhcs de ume tcbelc e e los sao co rrego da s em muitos grupos pequeno s, urno tcbelo colocodo completa me nte no buffer ser6 mais efkie nte.
dados.
Par exem plo, se a tabela zt xl f al tiver urn tipo de utiliza qao de buffer de registros anicos, selec t s ingle * from ztxl f al where l ifnr '" 'VI ' faz com que 0 bu ffe r TABLP seja p esquisado pelo registro VI. Se ele e encontrado ai, essa c6pia e utilizada. Caso comrfrio, e carregada em TABLP a partir do ban co de
. '
D urante a sincronizagdo de bu ffer) se um a tabela' for colocada no buffer genericamente e urn registro estiver invalidado no buffer, todos os registr os no grop o tambe m serjio invalid ados. A pr6xima leitura de qualquer registro n esse grupo fara com que 0 grupe inreirc seja recarregado.
Mesmo se urn regiscro 1740 for loca lizado, ainda assim urna ent rada efeita no buffer de regisrro unico. A entrada indica que 0 registro ndo exisce no banco de dados . D a pr6xima vez que esse regist ro for solicitado, a bu ffer p ode sec utiliza do p ara resolv er a solicitacao e urn acesso a banco de dados nao sera necessa rio . Por exemp lo, suponha que 0 fabrican te Xl nac exista no banco de dados. Execut ar sel ect s i ngl e * from ztxl fal where lifnr : : ' Xl' facia com uma entrada fosse criada no buffer de registro unico para indicar que 0 registro Xl nao existe no banc o de dad os. Da pr6xima vez que 0 fabr icance Xl for solicitado, o sistema exam ina 0 buffer.e desccb re que nao exisre e nao pr ecisa ir ao banco A u~iliza~ao de buffer de registrc unico e apropriada par a tabelas muito grand es em qu e uma por cent agem pequena dos registros e lida com freqiiencia. Para a utiliza~ao de bu ffer de registro unico funcionar, os registros devem ser lidos utilizando .a instru~ao sel ect s i ngl e.
de dados.
w __ .. __
210 , .lPRl:ND.l EM
21 DIAS ABAPj4
DIAl, DlllTADlmDNARY,PARlIJ
211
Durante a leirura, se lect somente Ie TABl ; ela ignora TABlP. A inst ruci o select s ingle Ie os doi s buffers. Es se comporramento e resumido na Figur a 5.20. Lembre-se de que urn regist ro somen te pode estar em urn buffer de um a vez po eque um a tab ela ape nas pede t ee urn tipo de urilizac ao de buffer.
FlgurQ 5 2 0
I' ,
I
buHers.
Select Single
SOMENTE
lE
Select
CARREGA E lE
de buffer e indices
Perc limper 0 conteudc de TA l e TABlP, digite I Sta b no ca mpo B Com mand e pressione c teclo Enter. Voce ped e cttlbor esse metcdc depois que desativa r 0 utilizo~cio de buffer pora limpor os buffers cotes de testor a d iferenc;o de desemp enho de um prog rama. Note que issc pode dlmlnuir 0 desempe nho do sistema, em gerol olll d uos ho ros, ate que as buffers sejam novo mente preenchldcs.
Subsfituicco do buffer
Se lASlP esdver compleca e urn novo regisrro precisar sec car re gada, os antigos serao jogados fora para dar eepacc aos novos. Os mais antigos sao aqu eles que ha mais t empo estao esperado se r acessado s. Em l A os registros antigos nao sao desc art adcs qu ando os nffV sao Bl, os carregado s. Em vez disso, tabel as in teiras sao periodic amente descarregadas do bu ffe r. 0 com primen to de te mpo ent re descarreg ar e quais tab elas 'sao descarre gadas e det erminado par urn algori t mo de cache den tr c d o R/3. Esse algoritmo com plexo e baseado na quantid ade de espas:o utilizado por uma tabela no buffer versus 0 numero de acessos de leirora oele no pedodo anterior e t ambem Daquantidade de espa~o livr e disponlvel no buffer e na qualidade atu al de aces so do buffer.
Dec idindo se
numero de leituras de banc o de dados e a qu antidade de td .fego de rede do banco de dados para os servidores de aplicativo. As ses:6es a segu ir listarao cenarios com tabelas de utilizas:ao de buffer que DaO sao atualiza das, junto com utiliza~ao de buffer e inclexa~ao.
buffer
Os regis tros em urn bu ffe r te rn seu proprio Indice primario criado na RAM . Quando os registros sao necessaries , 0 Iodice eut ilizado para posiciona-lcs no buffer da m esma maneira que 0 Indice primario no banco de dados e utilizado para posicionar regisrros em uma rabela. Entrerant o, in dices secunddrios ndo sao criados no buffer, tampoucc indices secundarios de ban co de dados sao utilizados para acesso a dados colocados no buffer. Portanto, quando codificar uma instrucao s el ect. . . where em uma tabela colocada no buffe r, utilize campos de ch ave pri mari a na cldusula where comecandc com 0 primeiro campo de chave primaria e utilizando 0 maximo de seqnsacias de chave primaria que voce puder. Se 0 pr imei ro campo da chave primaria eseiver ausente na clausula where (nao ccntando mandt), uma varre dura complete da tabela no buffer sera execu tada . P o r "exemplo, se a rabe la zt xlfal foi colocada completam en te no l buffer, sel ect * from ztxlfal onde lifnr = ' V ' sera supo rt ada pelo Indice pr imdrio do buffer. Select * from ztxlfal where la ndl '" ' CA' causara uma varredura complera da tabela no buffer. Ser in cap az de utilizar in dices se cundarios resulta em um a p ecul iar situa~ao sem safda, se voce utilizar buffer de modo complete em tabelas grandes que tem indices secundarios. C olo car um a tabela no buffer dessa maneira fad com que selects no Indice primario acelere, mas possivelrnen re tcrnara selects leDta em in dices secu nda rios . U rna instru~ao selec t em uma tab ela grande (categoria de tamanho 1 ou maior) que e completamente sup ort ada por urn indice secundario no ban co de dados pode ser execu tada mais lent arnent e COntra 0 buffer po'rque urn ind ice secundario nao esta disponivel at. 0 quanto mais lento (se for mais len to) dependera da quantidade de dados na tab ela. Para compensar es'se problema, evite 0 buffer e utilize os indices secundarios, adicionando bypassing buffer para a instrU~ao select onde urn indice secu ndario deve ser utilizad o. Por exemplo. a tabela TSTC contem mais de 12.000 linhas, e da categoria de tamanho 1, e completame nte colo cada no buffer e t ern urn fndic e sec undirio em seu campo pgmna. As medidas mostram que se1ect * from tstc bypass i ng buffer where pgmna = I ZTXTEST I executou 18 vezes mais rapido em media que se1ect * f rom tstc where pgmn a " ZTXTESl I mesmo sea tabe/a. fOT comple-
...
~~
-~
~-
--
212
213
I'
i
tamente colocada no buffer. A primeira sel ect foi resolvida n o banco de dados utilizando urn indice secundario no campo pgmnaj a segu nda executou uma
varredura complera de tabela no buffer.
Se possfvel, utilize os campos do Indi ce prim erio em urna chusul a where nas tabe las colocadas no buffer. Se isso nao for possfvel e a tabela for grande (caregoria de tamanho 0), adicione bypas sing buff e r e utilize os campos suportados por urn Indice secundario no banco de clados.
~o
Sejo muito cuidodoso quondo utilizor bypass de buffer em tc belcs colcccdos no buffer que tcmbem 500 otcolucdcs. Se voce utilizo em ume instru~o o sel ect, deve utiliz6lo em todes cs instrv~6es select peru esse !obela e todes as tobelos relocicncdos dentrode uma vnlco trcnsccoo. Coso ccn trcdc, voce de feto estero misturondo dodos cclccodos no buffer e fore dele. Isso pode cousar lncoere ncics dos dodos em sev progromo e possivelmente no banco de dedas, se seu programo tombem firer o tu el i zo ~oes .
Resu m o
Urn Indice euma c6pia de colunas especfficas de um a tabela cIassificada em ordem crescente.
as in dices aceleram as insrru coes select. Urn a instrucao sel ect sempre deve ser suportada po r urn Indice.
a tabelas colocadas no
Vo ce pode criar in dices secu ndarios em uma tabela. C rie urn quando voce nao puder utilizar as campos de urn Indice exisren te em sua clausula where. Os campos em uma ch usula wh ere devem se r lisradc s em seu programa na mesma ordem que apa recem no Indice.
As tabelas colocadas no buffer podem fazer seus programas serem executadcs mu ito mais rapido. Entretanto, se urilizadas de forma negligeme, a colocacio no bu ffer pode rer 0 efeit o opos to. Os buffers esperam na RAM do servidor de aplicativ o, ponanto 0 espaljo no buffer e lim itado. Urna tabela que nao e acessada com freque ncia nao deve ser cclocada no buffer para conservar especc de bu ffer e evit ar estouro. A s tabelas que sao pequ enas (categoria de tamanho 0), acessadas com fr equen cia e raramente atualizadas devem ser completamenre'colocadas no buffer. A s tabelas que sao gran des (cate gor ia de ta manho 0) e acessadas com freq uencia ut ilizam sel ect sing le devem ser colocadas no buffer no m od o de registro unico. U rna tab ela onde os regist ros de urn grupo sao acessados juntos devem utilizar buffer de m aneira gene rica. Urna chave primaria parcial deve id entificar 0 grupo. As tabelas que saOatualizadas com frequencia nao devem se r colocadas no buffer se sua confi guraljao tiver multiplos servidores de aplicativo. Fazer isso aum enta 0 trifego de rede porque os dados devem ser recarregados nos buffers nos ou tros servidores de aplicativo toda vez que eles se alte rarern . Se a tabela foi co locada no buffer, utilize bypass ; ng buffer para obter os dados m ais re centes antes de perrnitir que sejam atualizados.
A transacao 5T05 pode ser u tilizad a para m ost rar qual Indice, se algum, foi utilizado por uma dada insrrucio sel ect.
...-...:-.I_.._...... .
DIH DD ATArncrIDl<ARY, P RTE 3 A
~ -y
~ IFa~a
no fndice.
Coloque as compos no c16us ula where no mesmo ord em em que eles aporecem
----J_
Nao codifiqce umo 5e' ect que nao sejc
suportada per um fndice.
215
Teste
1. Po sso especificar em algum lugar 0 Indice exaro se quera utilizar uma instrucao select? 2. Posso criar indices secundarics em tabelas de SAP au ccloc a-Ios no buffer ?
Nao escolho umc categ o rio de tomonho que focc umo tabe la exigir umo extenseo secund6rio.
3. Posse diz er que meu programa e executado mais rapido com tabelas
colocadas no buffer do que fora dele?
Exe rd cio 1
Q ual e a classe de dados para as tabelas MARA, LFAI e KNA I? Qual categoria de tamanho para MARA , LFA I e KNA1?
ea
P&R
o o o
N so posso exibir algumas telas mencionadas neste livro . Obtenho a m ensagem de erro You" are not authorized to use t ra nsacti on XXXX. C omo posso vcr essas telas?
Peca aurorizacao a seu administrador de segurania. Quando cxiba os buffers de dados utilizando ST02. vejo muitos outros buffers ai, ta mbem. Para que servem rodos eIes?
05 bu ffers de dados sao apenas dois dos mu itos buffers mantidos no servidor de aplicativo. Os narnetabs (objet os de tempo de execu ctc de ta bela) sao todos colocados no buffer, assim como tod os as pro gra m as, men us e (tam bern conhecido como status e UA au Gill), barras d e ferramentas, relas e calen dsrios. . Todos esses buffers sao re lacionados aqui.
Wo rksh op
o Workshop oferece duas maneiras de voce verificar 0 que aprendeu neste capitulo. A seljao Teste oferece perguntas para ajudar a solidificar seu entendimento do conrecdo ebordedo e a seljao Exerdcio permite que voce pratique a que aprende u. Voce pode encontrar as respostas as perguctas do quesriomrio e aos exercfcios no Apen dice B, "Respos tas as perguntas e aos exercfcios".
6
o Data Didionary, Parte 4
Objetivos do-capitulo
Depois de completer este capitulo, voce devers ser capaz de:
iD"
M O IH.
As cherccees de dodos dentro de umo tobelo poclem ser outomoticamente registrodos. Esse re gistro (log) outom6tico de o ltera~6es e chomodo hist6rico Qutom6tico de fobela. Pore otivar 0 J og, marq ue a ccixe de seleo log Dota Changes
no tela Technical Settings (veia a Figure 5.4) . Se clnd c n60 fiver feito issa, 0 consultor de Basis tombem deve especfflccr o (s) numera ls) do di ente pelo qua l 0 log e ossumido no por6metro de perfil de sistema rec/ eli ent .
Perc exibir 0 co nfiguroQio rec/cl t ent em seu slstemc, si90 0 prccedimento utilizodo pora exlblr rdi sp/bufreftime no se~co lntitulcdo
'nttp;II_.compVJ.CQm.br
-114.............- .- .. I
...... I
...... ..
]I
_~
218
D~""DATlDlrnoNARY, PAR1H
219
T llO'" U
reg istro e chomodo documenfo a /terado. Codo documento oltercdc ccnte m a da ta e a a he re do a lterCl; o, a userid do usucrio que fez a clterccco, 0 c6digo do transac;oo e 0 nome do progroma utilizodo poro fazer a olteroo, e 0 tipo de c lterecoc executodo. 0 tipo de olte rm ;60 sera I NS se 0 registro foi inserido, UPD se 0 reg istro foi ctcclhcdc ou
Pore coda jnse~o o, otua l izo~o o ou exd usOo de umo tcbelc ctivcdc pora
uma seljao Notes e depois a analise . Para cada tabe la, os campos dela sao exibidos prim eiro (veja a Figura 6.2) e os documen tcs alterados para ela se seguem (veja a Fi gura 6.3). P ara exibir um a comagem do mi mero de documentos alterados que exine para urn dad o int ervale de da ta ou intervale de tabela , pression e cs bo no No.of Docs. (Select) . Para exibira lists de tabelas pela qual 0 hist6rico autom dricc emantido, escolha 0 batao de op~o Tables With H istory Mana gement e pressione 0 bono List . Essa lista most ra todas as tabel as que tSm uma marca de seleljao na caixa de selecao Log Data Changes.
Coda
U tilizand o 0 c6digo de tran sacao SCU3 ou OY1S (veja a Figura 6.1), voce pode exibir as documen tos alrerados e cornpara-los com as valo res atu ais na rabela. Nso hi nenhuma difere n~a ent re esses dais codigos de transa?o; ambos execu tam 0 mesmo program a.
F igu ra 6 1
.!!ix! ..........,..
Para exibir 0 mime ro total de documentcs alte rados na tabela dbtebpr-t, pressione a bo n o Total N o. D ocu ments na barn de ferra mentas Application. P ara campa rar valc res de campo em documentos alteradcs com valores atuais de campo em uma tab ela, escolha 0 batao de 0pljio History <-> Curre nt e pressione 0 bo uo Compare. A tela Table H istory e exibida. Insira. 0 criteria de pesquisa para. os documentos alterados e pressione 0 bone Compare. A tela Table History - Comparison Wi th Current State eexibida. A chave primdria de cada registro apar ece a esqu er~ e as diferec cas aparece m adir eita (veja a Figura 6.4).
;.
Fi g u r a 6
I:
, "
!,
de tohelo
otivo do.
Os compos do Iobe/o HPRJ OO7 opo recem antesdos documentos o/terodos. mostrondo os names ae compo, 0 ind' rcodor de chove prim6rio, 0 tipo de dodo, a comprimento, 0 nome de coluno e 0
des cri~60.
i I
Ii
I
P ara exibir os documentos altera dos de dia atual , escolha 0 bo n o de op~ao Change Docs: Daily Analysis e press icne 0 batao List. Uma Iista e exibida contendo todas as alteracoes do dia atu al. Para pesquisar docum entc s alterados po r intervale de dat a eu no me de tabela, escolha C han ge D ocs: ba tao de apljao Selective e pr ession e o borao List . A tela An alysis of Table Log Database e exibida. Digire seu criterio de pes quisa e pressione 0 batao Execute. Uma lisea de docum ent os alrerados para 0 criteric especificado e exibida. Na parte sup erio r da lista esta urn resume das informacoes sabre a list a, depois
ww.ww.w .
220 , AP REM DAEM21
F igura 63
~~
_
DU DDATADICTlOIWY. PArTH
D AUPI4 'AS
221
Os documenfos ollerodes do 1o~lo HPR100loporecem depors do listo de compos. A chcve prim6rio de coda registro oporece
pri me;ro
m' c;6es sobre Change Document Objects, veja a R/3 Library (caminho de
men u Help->Rl3 Library, Basis Components, ABAP/4 D evelopment Workbench, Extended Applicatipns Function Library, Change D ocum en ts.}
~o
F igura 6 4
au se
restante da Iinha for meier que 500 bytes, voce n6c pede utilizar htstoricc cutcmotlcc de tobelc . Voce receber6 um erro quan do tenter ctlvcr a tobe lo e cherccces n60 senSo registrodos. A rozeo dessa s restrir;5es est6 no tabelo dbtabprt . 0 compo vkey ccotem a teclc do registro que foi olterodo e tem 86 bytes de comprimento. 0 campo vdata contem 0 reslonte do reg istro e tem 500 bytes de com primento .
A chave primdria aparece ern rurquesa c a metade esquerda cia tela. A metade direita esta dividida em valores aruais e valores de hist6rico. As linhas acinzentadas indicam que exist e um a diferenca. Para exibir 0 significado dos ccdigcs na coluna mais a esquerda, cclcque 0 cursor aI e pressione FI. Esse relarorio mostra que quatro registros existe m na tab ela EKPA mas 'nenhum hiscorico de regist ros existe para des.
A bu fferizacao aumenta 0 desempeahc do sistema [azendo 0 cache de dados Iocalment e no servidor de aplicativo. Quando feito adequada-
'.
w w W'
222 , AfUNDA
EM 21 DIAS ABAP/4
ww w w w
W W T'Ir T T
W'
W'
"1J
223
3. Para ver urn resume das alceracoes, pressione a ba tao D elta display na barra de ferramentas Application. A lista e atualizada para conter apenas as diferencas entre as duas vers6es.
5
recurso diminui as arualizacoesde tabela e portanto eutilizado apenas para tabelasque content dados vitais.Nas tabelas nao vitais, devem ser
utilizados objetos de docurnento alterado. .
revisodo e exibido.
voc~ ~ 0
versec
YERMO"
Podem existirduos versoes de uma tabela (au qua lquer objeto OD!C): a verscc revisoda e 0 versec alivo. Se voce altere umo tcbelc e pressiona a bctec Save sem pressloncrAcfivcte, criou uma verseo revisodo dotobelo que ccntem suas clterocces. A versdc otlvc ainda existe; a ultima verseo que foi ativada. Progromas em ABAP/4 utllfzc m openos versees otivas. A presence de vers6es revisodos nee as ofeto.
A versao revisada existe para permitir que voce prepare urna alteracao antes de e1a ser necessaria e eneac a ativa quando for necessaria. Tambem permite que voce altere muitos objetos e enesc as ativa todos simultaneamente. Quando voce os ativa, as vers6es atualmente ativas sao descartadas e suas versees revisadas toma-se ativas e as substituem. A versao revisada e exibida, se e1a existir, quando voce exibe uma tabela (0 campo Status conterf Rev;sed). A barra de ferram entas Application tera urn botao Active Version (veja a Figura 6.5) . Se voce 0 pressiona, a versao ativa sera exibida e a botao na barra de ferramentas mudara para a versio revisada, permitindo que voce pressione 0 botao novamente e retome para a exibicso anterior.
SmEHtlM~ lnicie a ScreenCam "How to Compare Revisedand Active Versions" agora.
Pa~a comparar as vers6es ativas e revisada.s:
Vers6es adicionais
Independenternente das vers6es revisadas e ativas, voce tamb em pode criar versoes temporaries de uma tabela. Para fazer isso, escolha 0 caminho de menu Table->Generate version. A mensagem Temporar verst on of act ; ve object y stored. aparece na. parte inferior da janela, Essa versso temporiria e mantida ate que a tabela seja transportada para a prcducao. Para visualizar a nova versao, escclha 0 caminho de menu Ueilities->Version Management . A versac com 0 na m ero mais alto e a primeira que voce criou.
Para descartar uma versao revisada sem ativa-la, voce deve primeiro gerar um a versac tempordria da versao ativa e entio restaura-Ia, como mostrado no seguinte procedimento.
SCifENOM~ lnicie a ScreenCam "How to Discord a Revised Version" a gora.
~I
224
' PREND' EM21 01" ,", PI'
WWWWWW_
-- O 6:0DATA D1mOMARY,PAiTE" IA
225
1. Da te", Dictionary: Table/Structure: Change Fields, escolha 0 caminho de menu Tebl e- c-Generaee Version. Uma caixa de dia.logo aparece
contendo a men sagem Version of act ive object stored.
Usond o
lERMO ,. dodos.
utjlitCirio de banco de d o d os
Dentro do ODIC extst umo ferromento de utilit6rio de bc ncc de dodos . e Utilizondo-o, voce ped e exa minor e modifieor tobelas no nivel de ba nco de
2. Pressione 0 botao Continue. Voce elevado de volta it. tela Di ctionary: Table/Structure: Change Fields e a mensagem Temporary versi on of activat e object stored e exibida na parte inferior cia janela. 3. Escolha 0 caminho de menu Utilities- > Version management. A tela V ersions Of O bject e exibida. H aven uma marca de sele ~io ao lado da palavra act . . 4. Remova ~ marca de se1e~o do lado cia palavra act .. 5. Coloqu e uma marca de sele~ao embaix o de Version (s) In The Version
Database: line beside the highest version number.
IOU .
S(mNW ~ lnlcle a
Para acessar
6. P ression e 0 batao Retrieve na barra de ferramentas Application. VIDa caixa de dialogo aparece coneendo a mensagem vers i on nnnnn is now new revi sed (nonactive) version . Proceed?
7. Pressione a ba tao Yes. Voce ~ levadc de volta a tela Version s O f Object e a mensagem R estored ver sion must be acti vatedl aparece na pane inferior de janela. H averf uma marca de selecac 010 lade cia palavra act .. A ver sao revisada ~ agora a mesma que a do botao Active.
8. Para verificar se a versao revisada coincide com a versac ariva, coloque
uma marca de selelji o ao lado d.a palavra mod .. As duas linhas act . e mod . agora esta.rio com uma marca de sele~ao. 9. Pressione a ba tao Comp are na barn de ferramentas Application . A tela C omparison For Tables e exibida. 10. Pressione 0 batao D elta D isplay na barn de ferramentas Application. A Iista deve ce nter uma linha que exibe 0 text o G enera1 attri butes : Unchang ed e ourra Iinha que exibe 0 textc Fi el ds : Uncha nged. Voce agora confirmou que as vers6es revisada e ativa coincidem. 11. Pressione 0 borac Back n.a barra de ferramentas Standard. Voce e levado de volta a. tela Versions of Object: 12. Pressione 0 batao Back na barn de [erramentas Stand ard. Voce e levado de volta atela Dictionary: Table/ Structu re: Change Fields. 13. Pressione 0 bou o Activate na barn de ferramentas Application. 0 campo Status con tem A e a mensagemxxxxx wa s acti vat ed aparece ct. na parte inferior da janela.
Todos'os objetosDD IC, como domini os e elemencos de dados, possuem versoes revisadas e ativas. Todas elas podem ser exibidas e comp aradas da mesma maneira. Os objetcs podem ucilizar versoes apenas ativas. Por exemplo, se voce modifies urn domini o e cria uma versso revisada, elementos de dados que a utilizarn continuam a utilizar a versao ativaate que voce ative 0 dominio.
Utilizondo 0 tela A8AP/4 Dictionary: Utility for Database Tobles, voce pOOe se comun;cor diretomerrtecom
o banco de cJodos
pe ra exihir au alteror
umolobe/a.
D aqui voce pode: Verificar a coerencia das definicoes de DDIC de R/ 3 em rela~o ao banco de dad os. Visualizar 0 log de ativa<;ao para ver as instru~6es de SQL reais enviadas ac banco de dados: Exibir e modificar a s parimetros de armazenamento do banco de dados .
I
I
i
I
.. -226
I
DIA6:0DATADICTlONARY,PARTE 4 I
227
Excluir urna tabela excIuindo-a temporariamente no banco de dados, ou esvazia-la excluindo-a e recriando-a no banco de dados.
iEUlO"
NOYO....
Umo tabela
Ve ri fi co (;6e s de coerencio
A definicao de uma tabela trans parente existe em dois lugares: no diciomrio de dados de R/3 e no banco de dados. Para verificar a coerencia entre os dcis , a partir de dent ro do utilitario de banco de dados escolha 0 caminho de menu Extras-> Da tabase Object->Check. A versac ativa da tabela ecomparada com a tabela de banco de dados. A tela Table xxxxx: Check Database Object ,era exibida, e uma mensagem na parte superior da lista indicant se 0 objero de banco de dados e coerente (veja a Figura 6.7) .
Figura 6 7
formul6rio campi/odo que e utilizodo em tempo de execucec , cho modo obieto de tempo de execur;60 . 0 cbietc de tempo de execUl;60 e criado qua ndo voce ct ivc a tobelc e tombem e conhecido como nornetob.
Umo veriDcoode
coer!ncio com 0
banco de dodos
confirmo que 0 dennio DOIC R/ 3 do tobelo ztxl f al e 0 definit;60 do
Quando urna verifica(f3.o de coerencia e executada, 0 nametab e com parade com 0 banco de dados . Voce pode exibir 0 nametab do utilitario de baccc de dados escolhendc o caminho de menu Extras-> Runtime object-> Displa y. A tela O bject xxxxx: Display Active Runtime Object eexibida (veja a Figura 6.8) . Na parte superior esta 0 selo de tempo do camerab seguido pelas informacoes de cabecalho. Ele con tem 0 tipo de tabela (T para transparence], a forma da tabda no banco de dados [n ovam en te, T para rransparente), 0 ndmero de campos na tabela, 0 comprimento em bytes do regisrro, 0 namero de campos chave, 0 comprimenta dos campos chave em bytes , as informacoes de bufferizaclc etc. (Para informacoes detalhadas sabre os campos de cabecalho e seus valores, exiha a estrutura X030L.) Embaixo do cabecalbc esd. uma lista dos campos, sua posilj3.o na tabela, 0 tipo de dado , 0 comprimento, a namerc de casas decimais, 0 deslocamento desde 0 infcio do registro, 0 comprimento exeem c cia tabela de refereacia, a tabela de verificaljao etc. Os atributos recnicos cia rabela sao completamente descritos pelo nametab.
FlliJurQ 6 8
comonamesde
compo. H de pos
dodose
As incoerencias podem surgir se: A defini(faoda tabela foi alteradano nfvel de banco de dados. Isso pode acontece r se alguem manualmente alterar a definicao de banco de dados ou se um programa em ABAP/4 alrerd-la utilizando ccdigc SQL native .
compri~ntos.
-~
228
I
229
Entretanto, quando voce,gera 0 obieto de temp o de execucjo para 0 programa, a defini~o da tabela nao esti incorporada a ele. Em vez disso, quando 0 objetc de tempo de execucic do p rograma e executado, ele faz uma ch ama da para a narnetab a fim de determinar a estrurura em tempo de execucio da tabela. Isso permi te que voce altere uma tabela (ou estrut ura) sem ter de gerar novam ent e todos as progranw: em AIJAP / 4 que a utilizam. Eles detenninam dinamicamente as caracterfsticas da tabela em tempo de execuc j o chamando a nametah. Embers voce DaO tenha de gerar novamente to dos as program as sempre que um a altera~ao far feita ern uma tabel a, certas alteracoes (como renomear ou excluir urn campo) exigirjo qu e voce fa~a altera~6es no c6d.igo do ABAP / 4. N esses casas, voce pre cisarf ene ontrar to dos as programas que a utili zam.
S(REOlCAM~ inicie a ScreenCam "How to Perform ~ Where-Used List on a Toble" cqcro.
Extras- >Runtime O bject->Check. 0 objeto de tempo de execucgo e camparado aos objetcs [onte de DDIC. A tela Object xxxxx: Check Active . Runtime Obje ct sera exibidaeuma mensagem na parte superior da Iisraindicard
se 0 objeto de banco de dados e co erenre. A s Figuras 6.9 e 6.10 mostram urn exemplo de uma incoe rencia no narnetab para a tabela zt xl fal. Se urn dominic for alcerado e a reativacf o cia tah ela falhar, uma incoerencia pode exisrir entre 0 nametab e 0 dominic. .
tipo de dado de
echar
10 no nametab e i nt 4 no domfuio.
Para localizar todos a s progr arnas que utiliz arn uma da da ta bela:
Os programasem ABAP/ 4 utilizam apenas 0 aametab. Portanto, des cae saberac sobre as incoerencias e assim njio sio afetad cs por elas no sistema Develo pment. T ran sportar as oh jetos de DDIC antes de corrigir as inccerencias p ode cau sar probl emas durante a imporraci o para Q/ A ou para a producac ou mesmo fazer com que pr ogr amas em AJiAP/ 4 nesses ambientes produzam resul tados incorretos. A raz ao disso reside no fato de que as alteracoes nao afetaram os pro gram as em ABAP/ 4 e, portan to, ainda nao for am testadas .
Fig u r a 6 9
de indica umomensogem de
r~gjstro,
comprim~nto
do
<hove. 0
olinhomenlo do tobelo s6 0 inroerentes.
linh..
Verifica ndo a coerenci o do nametab
o nam et ab obrem suas caract erfsticas dos elemen tos de dados e dominios que compoem a tabela. :E po ssrvel que a defini~o do n ametab esteja fora de sincronizacio com os elementos de dados e dominios. Por exemplo, quand o voce ariva uma altera~ao em urn dominic, as rabelas que 0 contem tambem devem ser reativadas para receber essas altera~oe s . Embora isso acont eca autom aricamente,'em certas situa~6es uma reativa~ao pe de falh ar po r causa de urna restri~ao do banco de dados au porque a tab ela conrem dados e deve ser cc nverti da. Essa situa!jao p ede ser detectada executando uma verificat;ao de co erencia no ob jeto de tempo de execucgo. Para veriflcar coerencia en tre a narnetab e as objetos D ata Dictionary, a partir de dentro do utilitario de banco de dados escolha 0 caminho de menu
230
"""1"0-
231
Este li 0 restonte do
log de affva~60
mostrodo na
Figufa 6.1J.
I I
I
!
Exibindo
0
log de otiva!foo
Para exibir asinformacoes em detalhe que descrevem qualquer mensagem no log, posicione 0 cursor na mensagem e pre ssione a reels F I.
A partir do utilieario de banco de dados, voce pode exibir 0 log de ativa/iao pressionando 0 boeio Object Log na barrade ferramentas Application. Esse lo g som ente e gerado se a ativa~ao fizer 0 c6digo SQL ser gerado. (Em alguns casas, uma a lteracao de tabela pode ser ativada sem afetar 0 banco de dados, por exemplo, uma alteracac para. 0 texto curto.) 0 log contem a sequencia de passos realizada e todas as instrucoes de SQL enviadas ao banco de dados durant e a ultima ativa/iao (veja as Figuras 6.11 e 6.12).
F ig ura 6 11
o Jog de oHvoo
exibe
0 seq ~n cio
de possos reolizodos .
durante 0 otivo ~ao e
o e6digo SQL que foj gerado. E log sse mostro que durante o olivoo, 0 tohe/o fai exc:lufdo temporariomente no bonco de dodos e
reer/odo .
TII
232 ,p",o, EM21
F jgura 6
Pcrdm~tros
......-.-~
.............. -w w'W
...........
~ ---.-..
OI'S Ai'P /4
233
'3
caixa de di:ilogo sen exibida para confi rmar sua solieita~o. A nbela e seu
pore
tobe/o
{oram
. ztx lfal
Excluirtempororiomente umo tcbelofez com que todos as dodos dentro de la sejcm permonen temente perd idos. E umo boo ideio fcaer umo c6 pia de bock.up do tobelo a ntes de exd uf-Io. Se voce copier 0 tcbelc monua lmente, le mbre -se de copier to nto 0 definil;oo do tobelo co mo a s dodos.
oherodos depois do
OMo, porq ue as
Se 0 ta belo fiver mais de umo extensoo, exd uir temporariomente e reeder umo tobe lo e a moneira mois rcprdce f6cil de reorganiz6-lo. Voc~ precisorO sa lvor a s dodos em outro tabela tempor oriamente antes de exdui-Io e depo is co pi6-lo de volta.
Resum o
As alteracoes para dados crfticos podem ser aut cmaticamente registradas em do cumencos alteradcs. Para dad os nao vitais, obje ros de documentc alreradc devem ser urilizados no Iugar. Uma versso revisada de uma tabela e criada quand o voce a modifica sem ativa-la. Somence a versac ativa de urn cbietc pede ser utilizada. Usando 0 urilitaric de banco de dados , voc~ pod e examina r a name tab e comparar sua coerencia com 6 D ata Dictionary e com 0 banco de
e maximo dasext ensoes permiridas. 0 nome de reblespacevern depois, seguido pew cc lunas FGe i r, que ccntem 0 ndmero de gropes de list a livre e 0 mimero de listalivre em urn grup o. (Essas duas colunas sao apenas utili zadas se 0 Oracle
estiver sen dc utiliza do no modo de pr ocessamento paralelc.) As co lunas Pf e Pu contem a po rcentagem de espa~o livre e a porcentagem de especc utilizado nos blocos dedados.Para maisinformacoes sabre qualqueruma dessas colunas, pos icione 0 cursor nela e pre ssione Fl. Em b ora os unicos p ardme tr os que podem ser alterados sej am N extExt, Hax E, Pf e Pu, voce deve preencher completamente a linha antes de pres sionar o botao Apply. Por exemplo, para alrerar 0 tamanho cia proxima extensdo para 64 e configurar 0 numeromaxim o de ext ensoes como 4, priin eiro selecione 0 bo tao de op~o USR. D epois di gite 64 na co luna NextExt, digit e 4 na coluna "axE, copie 0 restc dos valores da linha OBS e enrac pressione 0 batao Apply. Suas alteracoes sao imediatamente aplicadas ao banco de dados quando voce pressiona 0 borso Apply. Par a visualizar as resultados, pre ssion e 0 batao Back a fim de retomar atela ABAP/4 D ictionary : U tility for Database T ables e entao pression e 0 botao Sto rage Parameters na barra de ferram.ent<lS AppliBS cation. A linha que t~m D na coJuna Sr c conted. as valores atu aliu dos.
dados. 0 u tili tario de banco de clados tambem permire que voce visualize
log de ativa~ao para uma rabela, os pardmetros de armazenamento e drope e recrie uma tabela no banco de dados.
P&R
o o
Onde urn DBA in a alterar 0 pacam etro de armazen am en to de u ma tabela ativada de den tro do sistema de SAP R/3? V a para 0 utilitirio de banco de dados e p ressione Storage Pa rameters.
0
bo tao
234
Workshop
Workshop ofer ece dua s maneiras de voce verificar 0 que aprendeu neste capfrulo . A se~o T este oferece perguntas para ajudar a solidificar seu entendimenta do conte udo abordado e a se~ao Exercfcio permite que voce pratique 0 que aprendeu. Voce pode encontrar as respostas as perguntas do teste e ao exercfcios no Apsndice B, "Respostas as perguntas e aos exercfcios" .
Teste
1.
E possfvel
que a defini<;ao cia tabela e do s elemento s de dadcs e domfnios passaro estar fora de sincronizacac ?
Exerdcios 1
1. Qual e a maneira mais rapida de excluir as dado s de uma tabel a?
1.1a 7
Definindo dados no ABAP/ 4, Parte 1
Q bjetjvos docapftulo
Depois de completer este capitulo, voce devers sec capaz de Explic ar a area de rolagem do programa e seu conteudo. Entender as elementos de sintaxe do ABAP/ 4. Descrever
0
as constantes.
0
Utilizar a insrrucfo data para definir varidveis e strings de campo . Encender tipo s de dados do ABAP/ 4 e ser capaz de iden tificar caractere e os tipo s de dados numericos.
Entender a definicac do ABAP/4 de ripos de dados comuns de D DIC . Antes de prosseguir, volte 010 Dia 2 e dedique alguns minutes para reler a analise da sec;ao "En tendendc a sintaxe de codigo" agora.
http://www.ccrrpus.com.br
r I I I I I I I -IT I T I I I I I I
236
I APR ENO" . 21 OIAS ABAPI4
I III
I .- I ........ ..-
w w w
~I
D~]'oEFIHIHDOOAOOSHOABAP I4,PAR1I1
ro lagem
237
O s programas sao colocados no buffer no servidor de aplicativo em urn buffer de programa. Quando urn usuari o faz uma solicitacl o para executar urn program a, um a pesquisa efeita no buffer de pr ograma para ele. Se ele fo r localizado e se tiver sido modificado no banc o de dados, a c6pia colocada no buffer sera utiliz ada. Caso contrario, a u se a cop ia no banco de da dos for rnais nova, 0 programa e recarregado . U rna c6pia separada d o programa D efeit a na mem6ria pa ra cada usua rio aO que a execut a. Em vez disso, to dos as usuaries execut arn a mesma c6pia do pro grama. 0 fator de diferenciacso e uma alocacf o de memoria separada chamada area de rolagem. Uma area de ro lagem e alocada po r execucac de usuario p orprograrna. 0 sist em a utilizaa areade rol agem para armazenar to das as informacoes sobre a execucao atu al do p rogram a e todas as alocacoes de memoria. Todas as informacoes , como as variaveis e seus valo res, 0 po nteiro at ual do programa e a safda de Iista, sao manti das na area de ro lagem. P or exemplo, suponha que urn usudrio executa urn pr ograma e uma area de rol agem ealocada. Se, sem esperar ele term inar, 0 usuario mu da para ou tra sessao e inicia o m esmc programa novamente, ou t ra area de rolagem ealocada pa ra a segunda execucao desse programs. 0 usuario tern d uas areas de rolagen s, uma para cada execucao do programa. Se 0 usuario em vez disso tivesse executado urn programa diferente, ele aind a teria duas areas de rolageos, um a para cada programa.
Uma instrucao pode comecar em qualquer coluna e pode girar qualquer mimero de linhas. Para continuar uma instrucao em outre linha, quebre a instrucio entre quaisquer duas palavras. U rn caract ere de continuacac nao e necessario. P or exemplo, 0 c6dig o na Listagern 7.1 pede ser refo rmatado como moseredo na Listagem 7.2.
ENTRADA.... Listagem 7.2 Este c6d igo e 0 mesmo do Ustogern 7.1, ele apenos foi ,. forrnatodo de maneiro diferente
1 sef ect " from zt xl fa l 2 where 1i f nr > I OO~OOO IO SO' 3 order by lifnr. 4 wri t e : \ ztxlfal-l 1fnr, el, 5 ztx lfal-nam 6 ztxlfal -1andl. endsel ect.
NOYO....
N a Listagem 7.1, as p alavras-chave sao select, wr i te e endse lect. D ua s adic;5es aparecem na instruclo select : where e order by. Tudo 0 que norm alm ente e chamado de cltiusula em outras lingu agens e chama do de adifao no ABAP/4: ou seja, e qualquer palavra ou grope de pa lavra.s depois de palavrachave que modificam 0 comp ort ame nto da insrrucao.
Quand o 0 p rograma e iniciado, a aloca<;ao de mem6ria para cada objeto de dad os ocorre na area de rolagem do programa. Enquanto 0 pr ogram a esta sendo execut ado, voce pede ler 0 conteu dc de urn ob jet o de dados nao-modificevel ou colocar os dados em urn o bjeto de clados modif idvel e emso recupera-lo. Q uando 0 programa termina, 0 sistem.a libera a mem6ria para todos os objetos de dadc s e seus conteudos sao perdidos.
NOVO.... YERMO"-
Os
cbjetos de dados t~m ires nlveis de visibjJidode : local, global e extem~. A vlsibllidode de um cb jeto de dados indica em qua l loco I do progromo c objetc
de dodos IS ccess'vel.
Obietcs de dados localmente visfveis sao acessfveis apenas a partir de dent ro da sub -rotina em que d es sao definidos. Objetos globalmen te visiveis podem ser acessados de qual quer Iu gar dentro do progra ma . O bjetos ext~rna m ente visiveis sao acessiveis de fora do pr ograma por outro prograrna. A FIgura 7.1 exibe esses treS nfveis de visibilidade pict ori camen te. Na F igura 7.1, os objetos de dados locais na sub-ro tin a lA estao visiveis somente de den tro dessa sub -rotina. Qualquer ins truc;ao fora deja nao pode
238
239
acessa-los. De forma semelhsnte , as objeros de dados locais nas sub-retinas lB e 2A DaD estaoacesstveisem qualquer lugar, somente dentro dessassub-re tinas.
Qualquer instru~ao no p rograma 1, indiferente do local onde a .instru~ao aparece, p od e acessar as obje tos de dados globais no programa 1. De form a similar, qualquer instru liao n o programa 2 pe de acessar as objetos de dados
globais no progruna 2.
f lou r a 7 1
Ar eo de mem6ria extem o
Progroma 1
~J::i!i'.ts.1-"f:i!. Dedos globois
Progromo 2
dentroumo
svb-retina. Se
globalmen~
for wsNd.
r~ ; Dodos global
~~ Obiete!
~:M' .
Sub-retina 2A
O bjelos
Sub-retina lA
emmomltnte vislve/,
e ocesslvel de foto
do progrcmo par" .
DUtro
m~
Dodos laea is
~. Dodos locois
~iMl'~_, Ob jetos
!#ci#~
Ob ietos
progromo.
Sub-reline 1B
~. Dodos lcccrs
$~~
O bjetos
~o
Os obje ros de dados ext emos pod em ser acessados de qualquer instru~o no pro grama 1 ou 2. Na realidade. se eles podem ou nao ser acessados dependeri do tip o de area externa de me m6ria util izado e do relacionarne nto ent re os dois programas . O s deulhes disso sao descr itos nas se~6es sob re a rnem6ria
Q ua ndo um litem] esfiver en va lvido em uma ccmpcrccoc, de modo gerel voce sempre d~e utilizor lefrcs mclvscutcs entre ospas. As ccmpc rccces com litereis de string de ccrcctere sempre diferenciom letrcs rncicscvlcs e minuscules, enta~ e necess6rio certlficcr-se de utillacrc cckc correto para obter 0 resultcdc dese jado. Se 0 coixa noD cc incidir, no rmolme nfe 0 progromo oinde sera executodo, mas 'lac! obtera umo soldo incorrefo au nenhuma seido no final dos contos. Em 99,99% das vezes, os valores de seu lif ral de string de ccredere serOo e comporodos e esteroo em lefras maiuscules. Portanto, sempre digite . . a lor pare um literal de string de coredere em letros maiuscules, a menos q ue saibe que ele de'le aparecer de meneira confr6ne . Por exemplo,select s ingl e from ztxlfal wh ere lifnr c I v i l noo loca lizorO um registro. mas select s ingle f ran ztxlfal where 1ifnr ' Vl ' loceliza r6 urn registro , Voce notou as letrasmjnuscu las ~
... ,
240
D1AloDEllNINDOlWlOSNOABAl'/VAlTE 1
241
ocorrera 0 erro de sintaxe Stateme nt x is not def ined. Please check your spell i ng.. A Tabela 7.1 mostra as maneiras erradas e certas de codificar literals. Por exemplo , 256 ~ urn literal numerico, assim como 0 e-99, '10 .5' eurn literal numericc que contem urn ponto decimal; portanto, ele e incluido entre aspas simp les. Urn literal pe de ser utilizado como 0 valor padrao para uma
Erra da
99-
Explica sa o
-99
, ~ 12 ' ' 12. 3'
variwel ou pede ser utilizado para fornecer urn valor em uma instru~ao . Exemplos de literaisinvalidos sao: 99- (sinal de subt raci c adireita), "Confi rm (incluido entre aspas duplas} e 2.2 (contem urn decimal mas nao esta incluldo
entre aspas).
lZ.3
HP 'C t an'
'Hi
71
A ospo
'] e1'
Valores de ponto flutuonte devem ser ind uid os entre a spas . letras mlncsculcs se c perrnitidos para lltercis de ponto flutuonte. Le tros minusculos e m litera is hexcdeclmcls doo resultodos tnccrretcs. Um numere lmpor de drgitos hexadecimois d6 resulta dos lncorretcs . . Um ccroctere, sejo coloca do antes ou depois, ndo
Literais hexadecimais
Urn literalhexadecimal e especificado dentro de aspas simples como se fossem -F. um a string de caractere. Os valores permitidos sio 0-9 e A Dev e haver urn mesmo mimero de caracteres na String e todos as caracreres decem estar em
letras maiNsculas.
~o
Se v od! espedfi cor um literal hexadec ima l utilizando ccrccteres em letros mincscvlos, v eel! n60 reeeber6 qualquer a v lee ou men sagem de errc . Entretant o, quando seu progromo for executodo , a volar do literal estar6 e rrado.
Definindo yoricyeis
Duas instrucoes sao comumente utilizadas pa ra definir variiveis em urn pro. grama do ABAP/4 :
data parameters
Exemplos de Iiterais hexadecimais validos sao ' 00 ' , 'A2ES' e 'FlFOFF'. Os exemplos de literais hexadecimais invilidos sao' aleS ' [contem caracteres em letras mimisculas}, ' 0 ' (coutem urn numero de caract eres Impar}, - FP (ioc1uido entre aspas duplas ) e x' OO' (nio deve ter um x no infcio).
Utilizando a instru~a o data pa ra definir vari6veis U tilizando inStrUliio data, varidveis podem se r declaradas par a 0 programa. Variiveis definidas na instru~ao de clado s sao atribuidas a urn tipo de dado e tambe m podem ter padrces .
Sintaxe para a instruCjoo data A seguinte e a -sintaxe para definir um a variavel que utiliza a ins tru~ao data: ~ d.ta , 1[{l )] [type tJ [dec' ...." d) [,,1 ve x,,].
vc lc res hexcde cimc ts soo roromente utiliz odos noA BAP/ 4, porque eles soo normolmente depende nte de moquinc . 0 usa de urn valor hexodecimal que eria dependenclo de mcq vinc de ve ser e....ita do.
til
A Tab ela 7.1 desc reve maneiras erradas e cert as de codificar de literais hexadecimais e numericos.
Z
m
...
au
242
243
e 0. excero pa ra tipo
onde :
If 1
A adi!;3.o val ue somente aceita urn literal au ccnstante (veja ahaixo): voce nio pode uti lizar uma variavel para [ornecer um valor padrjio .
nome de urn campo que perte'oce a uma tabela ou estrurura no Da ta Diction ary. .
Quando utilizar a adi~ao 1i ke, a varia-vel que for definida obtem seu eornprimento e ripe de dado da variavel referenciada. Voce nao pede "especificf-los na mesma ins tru c;ao com 1ike . Quando u"tilizar a adiCjao 1; ke, a valor nso e obtido da variavel referenciada, Voce pede espe cificar a adic;io value para dar a variavel urn valor padrio. Se voce nao fizer isso , e atri buido urn valor inicial padrao de 0 [o u em braneo para urn tipo de dad o Characte r ).
de 0
I
ripe p).
xxx I
A List agem 7.3 mos tra exemplcs de variaveis definidas com a instrucac
data.
instru~ao data
A instrucio data pede apa recer em qualquer lugar em urn programa. A defmi'iao para uma variavel deve vir fisicamente ante s da~ inst rucoes que a acessam. Se voce colocar uma instrucic data dep ois do c6digo executavel, as insrrucoes acima dela DaO podem acessar as vari dveis que ela define. Para urn exemplo, veja a Lisragem 7.4.
data flel) ty pe c. data f2 like fl . data ~ax_nl u e ty pe t ve'lue 100. data cur_dat e t ype d val ue ' 19980211' .
ENTRADA'" Listagem 7.4 Exe mplo de umo vori6vel que e inco rretomente acessoda
1 report zt I0704.
2 data fl(2) vej ce ' H ' . i 3 write: fl, f l . 4 data f2(5 ) val ue ' t here' .
Os nomesde varisvel po dem ter de 1 a 30 caracreres de comp rimento. Eles podem ce nter quaisqu er caract eres, exceto ( ) + : e devem conter pelc men os urn caracte re alfabetic o. A SAP recomenda que no mes de variaveis semp re deve m co me car com urn caract ere e nio devem com er urn hrfen . U rn hrfen tern signi ficado espec ial (veja as strings de cam po abaixo). Em vez de urn brfen, voce deve urilizar urn
ANAUSE Iirltr... A vc rieve l F2 e definido no linho 4 e 0 jnstru~oo wrl t e no lmho 3 esto tentcndc ~ cce ssc-lc. Isso ge rero um erro de sintoxe. A instru~oo dat a no Hnhc quotro
devero ser movido ontes do linho 3.
sublinhado
U.
Noo utilize U SING nem CHANGING como nomes de vori6veis. Emboro eles sejcmsintcticcm ente corretos, podem ccuscr prob lemos se voce tenter posse -los pore sub-refines.
0 co mprimento pad rjo depende do tipo de dad o. (C omprim entospa drao sao Iistados na Ta bela 7.2.)
244 I APRENDA EN 21
DIAl IBAP/'
245
as vclcres de sy-datum e sy-u ze! t sao configurcdos no comecc do execucdo de progromo e n60 o ltero m ate que 0 prog rorno termine. Se
voce precisaracessora data e a he re mais cruel durante a iniciolizoc;:Cio de um progromo em execuo longo, utili e a instruc;:oo para obter a z . horo. Ela ctucllzc as vclcres de sy-detum e de sy- uzel t para refletir a data e 0 horo ctucis.
Descrifjoo
Interne
corocte re
Comprimento
int erno mclximo
65535 65535
Valores
validos
Q uo lquer
coree .
texto
rwmerlcc
0 00000000 000000
Valores abscluros de hera que tern precisgo de milissegundos nao sao utili zados no R/3 . Entretanto, valores de tempo relativos esnc disponiveis para precisac de rnilissegundos. Para obter estes , utilize a ins trucao get run time e os armazene utilizando 0 tipo de dado 1. Veja 0 capitulo sobre analise de tempo de execucao para mais detalhes.
dote horo
hexodecimal
8 (I;xo) 6 (I;xo )
]
65535
O oclqoer
A coluna Valor iaicial padrfo indica 0 valor dado avariavel por padrao se voce n ao especific ar urn valor ut ilizan d o a adi~ao va1ue.
numericos
Comprimenlo Comprimenlo Decimals Intemo miudmo miodmos padrao
4 (fixo)
Va loNs 'Icliidos
_231 a +2 31
i P
f
inteiro
decimal
empccctedc
0
16
0 0 0.0
8 8
"
15
09.
. 1E"'307 a lE308
ponte f1 ul1Jonle
. 8
Todas as varisveis na Tabela 7.3 esrjc com sin al. Nas variaveis de ponto flutuante, 0 expoente tambem esu com sinal. Utilize inteiros para variaveis que serjc envolvidas em ctlculos simples ou quando nenhum ponto decimal for exigido. Variaveis como contadores, indices, posicoes au deslocarnentos sao bans exemplos. Urna varifvel decimal armazena (l *2) - 1 dfgiros, onde l e o ccmprimento da varifvel em bytes. Valo res decimais sao armazenadc s em do is dfgitos por byte. excero 0 byte final, que Cantero urn unic o digito e urn sinal. 0 pr6prio POntO de cimal nac e armezenado; e urn atriburo da defini<;ao. Por exemplo, data f1 (4) type p defineuma varidvel fl que tern quatro bytes de comprimento e pode armazenar set e digitos (mais urn sina l), como mostrado na Figura 7.2. dat a f2 (3) type p decimals 2 define uma varisvel f2 que tern tees bytes de com prim ent o e pode armazenar cinco dfgitos (ma is urn sinal). A defini!fao data f 3 t ype p define urna variavel f3 capaz de armazenar 15 dfgitos, porgue 0 comprimento pad rao para a tipo p e8.
~I
II I_I I I"
w w ..
'W . . . . . w w
w _
_ .'W'
- -247
V d
II ,.
I
246
Elm"'tRl ~"'I
6~ ~~m
Ta b e la 7 .4 Ccntlnuccdo
Tipo de dodos
de DDIC
cuky curr Tecla de monetcnc Monet6r io Decimal Ponto flutuante Inteiro de 1 byte
lntelrc de 2 bytes
Descri~ao
byte finol
e vmo
p decima ls 2.
dec
flt p
i nU i nt 2 i nt4 lang num c prec quan uni t
Variaveis de ponte flutuantes sao sempre aproximadas. Elas podem ser utilizadas par a calculos que exigem valores muito gracdes au muitos espaccs decimai~. A precisac de ate 15 espacos decimais e possfvel, mas isso e dependente de hardware.
Texto nurnericc
Prectsec
Quontidode Unidodes
~o
Tenha cuidodo quando voce especlflccvclcres iniciois no instruc;oo de dodos utilizondo a cdlcec de volar. Esses vclores nee soo volidodos
para vlsvcluc r se eles seo au nc o ccmpctlve ls com a tipo de dodo.
Utilizando a odic;:ao de valor, voce pode otribuir vclcres Invclldos pora inteiros, vorioveis de tempo e de data, texto numerlcc, vori6veis decimois empocotodos ou vari6veis de ponto f1utvantes, octdentclmente ou intencionolmente. Os resultados dessa otribuit;oo sao dependente s de mc qulnc e sao indefinidos.
Descriljco
Definiljco de
dados do ABAP/4
c(L) c(3)
CII
o seguinte c6digo ea sintaxe para definir uma variavel que utiliza a instruc;ao
parameters.
parameters pl( (l)] [type t] [deci mals d] ...
Cliente Data
d
t
S '"
ou
parameters pl 1i ke vl ... [default 'xxx'] [obliga tory] [lower case] [as checkbox] [radiobutton group g].
Tempo
onde:
.. . . . .. . . ....
248
APRENDA EM 21 DlAS AUPI4
DIA 7:DEFlNINDO DAOOS HO ABAP/4 P 1 , ARTE r b2 radi obut t on group gl , 8 rb3 r adi obutton group g1. 9 10 wri te :/ 'You ent ere d:' . pI -" , pI , 11 / p2 -", p2, 12 / p3 - ", p3. 13 / chI-', cbi , 14 / cb2=" , cbz, 15 / r bIs ' , r bI , 16 / 17 / rb2" '. rb2. r b3z ' , rb3. 18 /
249
pl
e0 nome.de paramerro. 1'1 e 0 nome de uma variave l ou pardm etro previamente definidos au
(l)
eo nome de urn campo que per tence a uma tabe la a u estrutura no D ata Dictionary.
type decima ls
Mesmo que a instrut;50 data. Mesma que a instrvt;oo data . Mesma que a instru ~e o data . Mesma que a odic;.oo valu e no instruo data.
pl (2) t ype c. p2 like pI. mall_valu e type ; default 100. cur_date type d def eul t '19980211' obl ; gatory . cur_date 11ke sy-da tum def ault sy- dat um obli gatory.
11 ke
default obligatory lower case as chec kbox radiobu t ton group
Um progro,!,o de exemplo utilizanda para meters e dodo no listogem 1.6 e tela de entrcdc que ele gero c pcrece . H6 duos vori occ es do i n s1 rv~ea parameters: parameter e parameters . Operacionalmente, n50 h6 nenbcrnc dlferencc entre as duos; elcs sdo completamente intercombi6veis. Entretanto , se voce tento obter a juda Fl no instrv; 60 parameter, nenhum a ser6 encoofrcdc. Per esse rczec, recome ndo que voce utilize ope nas a instrut;aO paramet er s .
2.
Figura
7 3
z tx0106, os
primeiros porometros oparecem em umo tela de sele'ido. POrOmetros obrigat6rios sdo indicodos com pontos de interroga'ioo. Pa ro come'iOr 0 processamento, a usu6rio deve pressianor 0 batao Execute no borro de ferrom enfos Application.
Urn progra,made exemplo eapresentado na Listagem 7.6)e a telade entra da que ele gera aperece na Figura 7.3. Por favor, execute esse relatorio agora.
ENTRADAlrrrrr.... Listagem 7.6 Exemplo de urn proqrcmc que ocelto poru metros de ,. e ntrada utilizondo 0 lnstrucco par am ers et
1 report zt x0706. 2 parameters: pl(lS) type c, 3 p2 l i ke pI obligatory l ow case, er 4 p3 1; ke sy-datum defa ul t 5y-datum, 5 cbl as checkbox, 6 cb2 as checkbox, 7 r bl radi obutton gr oup gl defa ult 'X',
250 [ APRENDA EM 21
DIAS AIAP/4
251
ainstru~ao parameters:
Quando utilizar a adi~ao 1i ke, 0 parametro sendo definidc obtem seu comprimento e ripe de dado da varidvel referenciada. Voce Dao pode especifica-los na mesma instru~ao com 1ike .
de escolha verdadeiro/falso (true/false) . Voce pode utilizar mais de uma caixa de seleljio em uma tela. Se voce river rmilriplas caixas de selecac em urna tela, elas operarao completamente independentes uma da outra. Para exibir urn paramerro como uma caixa de sele!jio, utili ze a adiljao as checkbox. Voce nao pode especificar um tipo ou comprimento de dado; ele sera. configurado como 0 padrao ripe c e.comprimento 1. 0 parlmetro contera uma letra maitiscula Xse a caixa de sele~aa estiver marcada; e estara em branco se a caixa de selecac estiver limpa. Se a caixa de se1e~io inicialmente deve center uma me-rca de verifica!jio, utilize um valor padrio de letra X maiuscula. Execute o programa ztx506 para ver a caixa de seleljao. espaco e a capital X sao os deices valores validos. Nenhum out re valor evalido para uma caixa de selecao.
Quando utilizar a adi~ao 1 ike, 0 valor nso sera obtido da varidvel refereociada. Voce ped e especificar a adi!jao val ue para dar urn valor padrio ao parimetro. Se voce nao Fizer isso, sera. arribufdo urn valor inicial pad rgo de 0 (ou em branco para urn ripe de dado de caract ere).
Como data, a insrructo parameters pede aparecer em qualquer lugar em urn programa, mas a defini~ao deve vir fisieamente antes das instrucoes que a acessam. Os parametres apar ecem em uma tela de sele~ao na mesma ordem em que sao definidos no programa.
Ulilizando a
ad i~ao:
Todas as instrucoes parameters, independentemente de onde elas aparecem no prograrna, sao agrupadas pelo inrerprerador do ABAP/4 e exibidas na tela de sele!jao ao mesmo tempo. Mesmo se voce colocar uma instruci c parameter no me io do programa, esse partmetrc ainda sera exibido ria tela de sele~ao antes de 0 programa ser executado. Os parametros sio exibidos em urn formato SAP padno. Para modificar sua aparencia, por exemplo, moYa 0 campo de entrada para a esquerda ou moYa 0 r6rulo para a direita, utilize a ins tru!jao sel ect1onscreen, descrita no Dia 21.
Como as caixas de selecso, urn boeso de 0P!jao tam bern tern dois estados: se1ecionado e nao selecionado. Diferente das caixas de sele~io, as bc toes de o p~a o nunca operam sozinhos, eles operam somente em gru pos. Voce pede ter qualquer mimero de boeces de op~:ao em urn grupo, mas apen as urn ped e estar selecionado de cada vez . Eles sao utilizados quando voce precisa apresentar 010 usudrio uma lista de altemativas em que apenas uma 0pljio po de ser escolhida. Para exibir .um parametrc como urn bctac de 0p!jao l utili ze a adi~io ra diobutton group g. Voce nao pode especificar urn ripe de dad o ou comprimenta; ele sera padrao configurado como 0 padrac tip o c e comprimento 1. 9 e urn nome de gropo arbitraric de urn a quatro caractere s de comprimento. Voce pede ter mais de urn gropo em urn programa. parametro camera uma letra Xse a batao de op~o estiver selecionado; ele conrera uma lacuna se nao estiver selecionado. Para esta r selecionado inicialmente, 0 botio de op~ao deve conterum valor padrao da letra x.Nenhum outrO valor e valido par a urn botao de opljio. Exp erimen te isso iniciando 0 prognma ztx006.
Ulilizanda a
adi~ao :
lelras minusculas
Todos os valores digitados em urn parimetro sao traduzidos em letras maius cu1aspor padn.o. Para desa tivar essa tradu~o, utilize a adiljao l ower case. Essa adilj3.o apenas se aplica a campos de caractere.
Ulilizando a
adi~ao :
como caixa de
sele~a o
Uma em a de sele~ao tern somente dai s estados: marcado e limpo. Voc e os utiliza quando quiser apresentar ao usuano ligado/desligado (in/off) ou tip o
T I . . . ... W _JI"I
252
APRENOA EM 21 OIAS ABAP!4
Par~.alterar urn r6rolo de campo de entrada do para-metr o:
253
1. C omece na tela ABAP/4 Editor: Edit Program. 2. Escolha 0 caminho de menu Goto->Text Elements. A tela ABAP/4 Text Elements e exibida. N o Program Field esta seu no me atual de programa. 3. Selecione 0 borao de 0Pliao Selection Texts . 4. P ressioae 0 borao Change. A t ela ABAP / 4 Text Elem ents: Change PARAMETERS/SELECT-OPTIONS e exibida. Aqui, voce po de
inserir ma nualmente rotulos na coluna Text. 5 . Digite rotulos de campo na coluna Text.
Apesar de mudar no D D IC , a r6 tulo na tela nso e automaticam en te at ualizado. P ara altera-Io, vo ce deve ir para a t ela ABAP/4 Text Elem en t s: Cba nge PA RAMETERS/ SELEC T-O PTIONS e escolher 0 caminho de menu Utilities-> Copy DD Text ou Utilities-> Copy D D Texts .
A cdlcc c val ue no instru<;iio par ameter s, como com data, noo e volidodo pora compotibilidode com 0 tipo de.dodo. Atribuir a ume cclxc de seleceo a u um batao de opc;ao um outro valor pcdrcc que noo espccc ou X mclcsculc noo e vclldc. Emboro umo avolioc;ao superficial posso noo expor problemos, testes oprofundados revelorom comportomento imprevisivel nos progromosde teste.
6. Para urn parame rro definid o como um campo DDle, voce pede reeuperar rcrulos do elemenro de clades. Para recu perar urn rd rulc do
elemento de dados para urn dnico campo, posicione seu 0 cursor no campo e escolha 0 caminho de menu U tilitie s-> C opy DD Tex t. 0 r6tulo de campo de comprimentc medicprovenien t e d o elemento de dados aparece, 0 campo Text esta prot egido e 0 campo Type se altera para conter os caracteres D OIe. Na parte inferior da janela, a mensa gem Oiction ary texts transferred f or select io n xxx aparece.
Efeito de definic;:6es de parametro : t yp e versus 1i ke Sempre utilize a adifilo likepara definir um parametTo . Quando voce a utiliza,
o pargmerro ad quire os seguintes atri butos d e Data Dictionary: A ajuda Fl de dados.
7. Para remover a protecao de urn unic o campo, posi cione seu cursor no campo e escclha 0 caminho de menu Utilities- > No DD T ex t. 0 campo Text torna-se desprotegido e os caract eres ODIC desaparecem do ca~pa Type. Na parte inferi or da janela, aparece a m en sagem Text for xxx no long er transferred. from D ctionary .. i 8. Para recuperar r6tulas de cam po para rodos os parametres que sao definidos como campos de DDIC, escolha 0 caminho de menu Utilities->Copy DD Texts. O s r6tulos de campo para todos os campos de DDIC sao recuperados e prot egid os. Quaisquer valore s existentes na coluna T ext sao sobrescritos. Na parte inferior da janela, aparecea mensagemAl 1 selec ti on t ext s t ransferre d from Di cti onary .
9. Pressione 0 batao Save na barra de ferramen tas Applicat ion. N a parte inferior d a janela, aparece a m ensagem Text el ements f or progra m xxxxx in 1anguage E accept ed.
A ajud a F4 e adquirida se seu pargm et ro for como urn que tern uma t abel a de verificacac.
Urn r6tulo de cam po obtido do D at a D ictionary e garant id am ente co ere nte com 0 r6tule d e campo aprese ntado por outrcs p ro gramas para 0 mesmo campo (des de que des tambem os obtenham do DDIC) . 1sso elimina a confu sac d e t er dois campos que sao rotulad o s de m ane ira dif erente e referenciam os mesrnos clades.
As modificacoes no tip o ou comprimen tc de dad o no D D 1C autom ati camen t e sao refl etidas por seu programa.
10. P ressione
Na visualizacl o de todas essas vantagens, voce sempre deve utilizar a adi!jao 1 i ke para definir urn pad-met ro . Isso se aplica mesmo pa ra as caixas de selecac e os b c toes de opcso. Se necessdrio, voce deve criar urna estru ru ra no DDlC d e modo que voce p ossa ut ilizer 1i ke e) pelo menos, obter ajuda Fl. Note qu e a ajuda Fl esca disp onfvel ate para bot6es de 0Pljao e caixas de selecao.
0 batao Back na barra de ferramentas Ap plication duas vezes para re tomar para seu p ro grama.
Se voce quiser anular 0 rotulo de DDIC para alguns campos mas nac outro s, digite seus r6tulos na coluna T ext e endo escolha 0 caminho de menu U riliries -c-Supplement DD Tex ts . T od os os campos T ext em branco serao preenchidos a partir do Data Dictionary , deixando apenas os valo res que voce in seriu.
';""'f-
tt:~~,-
a W. -" . aW
254 I
.. WI
_ _.
.WW
_
, 255
OIA7: DEANINDODAOOSMOAWH,PARTE l
uma lists de valores vili dos para esse campo . Eneretan ro, 0 valor inserido em urn campo de en trada de pararnetro nao e validadc contra a tabela d e verificacao. A valida~o somente ocorre para telas de didlogo como as vistas na transacao se16. 0 usuario pade digirar qualquer valor no campo de ent rada e isso sera pass ado para 0 programa quando pressionar 0 batao Execu te.
Os valores digitados nos campos de ent rada de pardmetrc sao por padrac corrvertidos em letras maiiisculas. Para.inrerromp er a cooversao, utilize a adic;ao l owe r case. Voce pede alterar as r6tulos de campo de entrada de pardmerro por meio do caminho de menu Goto- >Text Elements.
Voc pede executor sumi pr6prios volidoC;6es de tela de setecec. Elos e deta lhados no Die 2 1, 'Telos de se l~co .
sOo
IFa~a L....:.-
- - " _
Resumo
Os programas sao colocados em urn buffer de programa no servidor de aplicativo. H :i so mente um a c6p ia, portanro uma area de rolagem enecess aria para cada execucao. A irea de rolagem contem os valores de varidveis do programs e 0 pontei ro arual do programa.
Utilize urn sublinhado pore to ma r seus nomes de vcrlevel mais mceis de ler.
Nco utilize hlfen em um nome de vari6vel; um hifen de limito os componentes de umo string de compo.
P&R
U rn programa do ABAP/ 4- e compasto de insrrucoes, cada uma das quais comeca com u ma palavra-chave e termina com urn pon to. As insrrucoes podem comegar em qualquer coluna e podem ocupar varias
o
o
Par que pre ciso codifi car em letras maiusculas entre aspas? Como saberei se precise codificar em letras minuscules? N. maioria das vezes, 0 sistem a automaticament e con vene os dados p ara letras m aia scul as an tes de ser arm azenado no banco de dados. Essa co nversao e ex ecu ta da pelo dominie. Voce pode determina r se a s dad os sao ccevertidos pe squ isando no dominio. Se 0 tipo de dado do camp o for CHAR e se a caixa de selec;a.o Lower C ase esriver marcada, ennc 0 campo ap enas contera m aiuscula s e m inuscul as mistu radas.
Posso defmir urn par.imetro que aceita mdltipios valores do usuano ? Sim , a in st ru ljaO de opcee s selecionada permite que a usuario digice multipl e s valores e criterio s complexos.
linhas.
. U m cbjetc de dados e um a posiljao de mem6ria que contem dados du rante 0 tempo de execufiao do program a. 0 5 obj eeos de dados njio-modificiveis sao literais e constantes. O s ob jeto s de dados modificaveis sao variaveis, strings de campo e tabelas intemas. as o bjetos de dadcs sao alocadcs na area de rolagem do programa e liberados quando programa termina.
exrema. A visibilidade d. urn objeto d. dados indica de onde 0 o bjeto de dados e acessfvel. .
as objeros de dad os tern tres nfveis de visibilidade: local , global e lugar a partir
Os Iiterais sse dados qu e sao muito codificados em seu pr ograma. As constantes podem ser utilizadas para substituir Iite rais, facilitand o assim a manu tencio do programa. Os tipos de dad es sao dividido s em duas cate gorias amplas: caractere e numerico. Os tipos de dad os de caract ere sao c, n, d, t e x; a s tipos de dados numerico s sao i . p e f.
o
W o rksh o p
As varidveis po dem ser definidas utili zandc as instrucoes dat a e paramet er s. A diferenlja e que , quan do 0 programa e ex~cutado, 0 sistema exibe urn camp o de entrada para cada para metro em um a tela de sc:leljao. 0 usuano pode digitar n ovos valores ou a.lterarvalo resMpa-
que apre ndeu ne ste capitulo. A se ljao T este oferece perguntas para ajudar a solidific ar seu enrendimento do co nt eudo abordado e a seljao Exe rci'cio pennite que voce pratique 0 que apr endeu . Voce pode c:n cont rar as resp ostas as perguntas do T este e aos Re exerdcios DO Apen dice B, G spostas as perguntas e aos exercIcios".
dr.i:o.
256
APREH OA EM21 D ABA PH IAl
Teste
o que hi de em-do com estes Iiterais, se eque algaesci errado? (Pede havermais
de urn erro em cadaurn e algunsnao tern erros.] Escreva as defini~6es corretas.
1. Literal de strin g de caractere: Don I t bi te , II
SEMANA
4. S. 6. 7. 8. 9.
Literal hexadecimal: x
Literal numerico: 9.9-
ooaOf'
I
Literal de ponto [lutuante: ' 1. 1308 Literal hexadecimal: H A Literal de String de caractere: Literal de String de caractere: r
I I I I I I
Reviscio
N a semana passada, voce completou as seguintes tarefas: aprendeu sabre 0 ambience R/3, incluindo Basis, clientes de logon, o ABAP/4 D evelopm ent Wo rkbench e a Data Dictionary escreveu programas simples de ABAP/4 e fam iliarizou-se com
0
I I . I I I
qu e hi de err ado corn est as definicoes de dados? (Pa d e haver mais de urn erro em cada urn e alguns nao t ern erros.] Escreva as definiljoes corretas.
1. data firstname(5) type'c. 2. data fl type character . 3. data fl (20) typ e c. 4. data 1a(5) type i. 5. data per -cent type p val ue 55.5. 6. dat a fl(2) type p decteeta 2 value ' 12 .3' .
ABAP/ 4 Editor
criou tabelas transparentes, elementos de dados e dominios criou cbaves estrangeiras para oferecer ajuda F4 para
0
usuario
documentou elemen tos de dados a fun de oferecer ajuda F l criou indices secun darios e bu ffers para acelerar a acesso de dados
Exerdcio 1
Escr eva urn programa utilizan do parame tr e s par a a Figura 7.4.
.'
--- w
'W'
w:
SEMANA
Viscio geral
Na Semana 2, voce aprende a criar ob jetos de clades variaveis e fixes utilizando os tipos de dados predefinidos e definidas pelo u suario. Voce aprende as regras cia sintaxe ABAP/ 4 e as inscucces par a contrclar 0 luxo do programa, as insrrucoes de atribuiliao e as regr as de conversso. Voce tambem define as tabelas internas, preencbe-as utilizando areas de trabalbo implicitas e explfcitas, executa 0 processarnentc de imerru pcac de controle e otimiza as ins rrucoes se 1ect, a fim de pre encher as tabelas intemas, direta e eficientemente. Finalmente, voce utiliza as opcoes de [ormatacic da insrrucao wri te, conhece os efeieos do tip o de dado sobre a salda, emprega as safdas de conversao e detecta sua pre senlia dent ro de dominies .
varidveis comuns do sistema e a ser capaz de exibir ou localizar qualquer variavel do sistema, prever e executar cc nverszes de dados utilizando as instrucoes de atribuicjo e a codificar expressoes matematicas. No Dia la, "Insrrucoes de controle com uns", voce aprende a codificar as insrrucces de controle com uns if, ca se, do e whi 1e; a controlar a sequencia do programa utilizando exi t , continue e check; e a codificaras especificacoes de comprimento e posili3.0 simples na instrucao wri t eo No Dia 11, "Tabelasiorernasr voce apr end e a de fini r uma tabela interne, com ou sem uma linha de cabecalh o, a preencher uma tabela inrema utilizando append ao lan ge de um a linha de ca-
;.
AP REND A E 21 DIASABA P M 14
becalho a u uma area de trab albo explfcita, e a d assificar as tabelas in rem as e utilizer 0 complemento as text . Duran te 0 Dia 12. "Tabelas internas avancadas .Parte 1", voce aprende a reccnhecer a op erador do cc rpo da tabela e utilizar esse operadar par a testar quanto a existencia de dados em um a tab ela int erna, e a comparar a igualdade do conteadc de duas tabe las internes.
0 Dia 13, "T abelas internas avancadas, Pane 2'" ensina a preencher uma tabela in terna a p art ir de uma tabela de banco de dados utilizando as consrruco es mais eficientes: e executa a processamen to de interrupcao de controle em tab elas intemas u tilizan do at e on change of . Durante 0 D ia 14, "A inStIllliao Write", voce aprende a entender 0 efeiro dos tipos de da dos na safda, a utilizar as opcoes de formatacao cia ins tru~o wri te, a urilizar as safdas de conversio e a derecear sua presen ce dentro de domini es.
Utilizer a instrucao t abl es par a definir as strin gs de campo e compreender a diferenca en tre as strin gs de campo def inid as utilizando-se data e as defmidas utilizando-se tabl es
Compreender a instrucao types e utilizar essa instrucio para definir seus pr6prios tipos de dados
hItpJI-.compus.com.br
I I I .I ~ I I I ~
262 I
APlENDA E' 21 DIAS ABAP"
'If
w . - -
.....--.-
- -
263
ABAP/ 4 tern uma coastame predefinida: SPACE. C orresponde a urna constante com urn valor igual aos espacos, Voce pcdera utiliza-la no Iugar do literal ' I .
Sintaxe da en 0 c6digo
jnstru~oo CONSTANTS
a seguir dem ons tra a sintaxe para a definic;ao de urn a cons tan te. E semelhant e a instruc;ao data ; entr etan to , a adiCjao value se faz ne cessaria. Em -I ro dos a s outros modos, as constantes concordam com as mesmas regras das ~ varisv eis definidas com 0 u sa da insr ru cio data. Veja a Lisragem 8.1 quanta a m exemp los das deficicoes de con stante.
! j
ou
const ant s c1 l1 ke cv value ' xxx ' ,
I
I
1
em um programa ABAP/4:
data t abl es
code:
cl
cv
o nome d e urn cam poque pertence a uma tab ela ou estrurura rio D ata Di ctionary.
{l}
Uma st ring de campo definida com 0 usa' da instrucio data corre sp onde a um objeto de dada modificavel, Ela pede ter visibiliclade local ou global.
de0
'xxx I
...
S
1 ft .
Sinlaxe para a definiccc de uma sIring de campo uliliza ndo a i n slru~Ci o DATA
III A seguir, veja a sintaxe para a defini~o de uma string de campo utilizando a Z instnl/Sao dat a.
data: begi n of /sl. jl [(l )] [t ype / 2[(1) ] [ty pe end of /sl .
el tJ
[decimals d] [value ' xxx '] . [deci mals d) [val ue ' xxx ' ] ,
ou
dat a begin of i sl . data fl [(l }] [type t] [deci mals d] [val ue ' xxx'] . data i 2 [ (0 ] [type t] ,[ deci mal s d] [value 'xxx '] . [i ncl ude structure stl . ] data end of t st ,
As constcntes podern ser definidos em urn poo l de tipos. Quando definidos, elc e podem sercompa rtilhodo s por dfverscs prog ra mos. Para mois tnicrmocoes , co nsulte a secs c "Pools de tipos" no fina l de ste ca pitulo.
ou
data is1 1; ke i s2.
onde:
j51
de campo.
264
265
nom e de uma string de 'campo previamente definida au nome de uma tabela ou estrutura no Data Dic tionary.
( I)
e0
ea
EmAOA"
"
Listagem 8.3 Umo string de campo pede conter umo o utro string de
compo
t eo tipo de dado.
de 0
' xxx I
1 report ztxG803. 2 data : begin of names , 3 namel li ke 4 nameZ like 5 end of name s. 6 dat a: begin of cust _i nfo , 7 number (10) type 8 nm li ke 9 end of cust_info.
10
n, names,
As strings de campo seguemas mesmas regras das variaveis definidas com o usa da instrucio dat a. Pa ra referi r-se a urn compo n ent e individu al, seu nome
deverd ter como prefixo 0 nome cia string de campo e urn trace (~ ). Por exemplo, para escrever 0 componente number cia string de campo cust_info, voce utilizaria a instru~o write cust in f o-number . A instrucio include nia faz parte cia instru ci o data : ela e uma instrucao independente . Portanto, ni a pe de ser encadeada em urna instrucao data . A instrucao precedence a ela deve ser concluida com urn ponte. Os exernplos de programas que definem e utilizam as strings de campo sao mosmdos nas Lisragens de 8.2 a 8.6.
11 cU5t in fo- nlUllber .. 15. _ 12 cust _1nfo- nm- name l . '" 'Ja ck'. 13 cust_1nfo- nm- name2 '" ' Gordon'.
14
15 ....tte: 16
17
lK.lJJSE ,.
ENTRADA'" Listagem 8.2 Um exernplo simples de umo string de compo definido ,. com a use do instruc;oe data
I report ztx 0802. 2 data: begin of t otals I, 3 : r egion(]) ;alu e 'unknown', 4 debits(lS) type p, 5 count type t , 6 end of totals_I, 7 t otals_2 l i ke tot als _I.
B
.... A linho 2 inicio a definio da string de compo names. Cc ntem dois compos que s60 definid,?s como compos do ta be lo zt xkna l no Dota Dictionary. Aeles nOosOofomec idos vclcres inido is. No linho 8, 0 componente cust_i nfc-nane edefinido como string de compo names. Qua ndo utiliza do nos linha s 12 e 13, nm e inc1uido no nome do componente. .
EIflRADA "
Listagem 8.4 Uma string de compo pode ser ,. um o tobela ou estruturo do DDIC
1 2 3 4 5 6 7
B
r eport ztx0804. data: my_l fal l 1ke % l f al, tx my_addr like ztxa ddr . ll\Y_l fal-n amel'" ' Andrea Mille r'. my_lfal - t elf l .. ' 1-243- 2746'. my_addr -landl '" 'CA' .
13 write : 14
,lj1.lJ.IS~ ,.
.... A linho 2 inicio a definio do string de compo to t al s 1. Elo cc ntem ires ca mpos, 0 primeiro des tres e inid olizado com a valo r ' unk nown'. No H ohc 7, a string de compo totals 2 definido exctornente como to t a l s 1. volar de total s l- r egi on n60 e propagodo perc total s 2-regi on. Nos linh;s de 9 a 11, os volores-;oo otribuidos oos co mpo ne ntes des string-; de compo e nos linhos 13 e 14, os vclcres de todos as compo nentes sao totolmente escritos.
No linho 2, lnY_1fa l e definido exctcmente como a tc belc do ODIC. ztxl fal. e my_addr e definida como 0 e strufuro do ODIC, ztxadd r .
------
- - - -
--
267
ENIRADA~
List a gem 8.S As tobelas e est ruturos do ODIC pad em tc mbem ser
1 report ztx OB05. 2 data begin of fsL 3 include structure ztxlfa1. 4 data : extra_f ield(3) t ype c . 5 end of fs L
6
EHTUOA,.
AMAuSE "
A llnhc 2 inido 0 definit;oo do string de campo fsl. A instruc; o termino com O ,. urn ponto, porque inc lude structure noo e porte do instrut;60 data; e umo instruo independente. No Ilnhc 3, a estrvturo do tc belc ztxl fal e incluldo em urno string de campo . Na linho 4, um outro compo e indul do no shjng de compo depcls des campos do tc belc zt xl f al. Qu a isquer ne meros de compos podem ser incluidos, como tombem mais estruturas podem ser inckndcs oqui au qualquer comb inot;60 dos dais.
1 report ztx 0807. 2 data : begi n of fs1, 3 c1 value ' A' , 4 c2 value '8' , 5 c3 value -c- , 6 end of hI. 7 8 write : / fs1-c1, fs1 -c2. fs1 -c3, 9 I fs!.
10
11 151 'XYZ'.
ENlRADA~
Lista gem 8 .6 Se voce utilizor 1i ke em vez de Include, voce obter6 urn resu ltodo d iferen te. as names d os ca mpos inclufdos sao prefixodos par urn nom e de co rnponente intermedi6rio .
1 r eport ztx 0806. 2 dat a: begin of fs 1. mylfal l tke ztxlfa1. 3 4 extra_field(3) type c. 5 end of tst ,
6
AKA
.. As linhos de 2
USE ,.
7 h1-mylfal-l1fnr 12. 8h1 -ext ra_fi eld ' xyz' . 9 10 wr i t e : / h1 -mylfa1- l ifnr . 11 fs1 -extra f ield .
Uma string de campo pede ser atributda a uma c u t ra, se ambas tiverem a mesrna estrutura, como pode ser visto na Lisragem 8.8.
ANAS " UE
Alinho 2 inicic o defink cc dc stringdecompo 1fa1_with_extra_fi e1d.Ainstrut;60 ,. terrnlro com um ponte, porque i ncl ude structure nCoe porte do instrur;oo data; e urnc inst~60 independente. No llnhc 3, a estrvhJro do fcbelc ztxlfa1 e inclufdo no string de campo. No linho 4, um outro campo e induldo no string de compo depois dos campos do tobelo ztxl f al. Occlsqcer numeros de campos podem serind cldos, como tombem rncis estruturaspodem ser incluidas oqui au quolquer ccmbtnccoc dos dois.
268
.APREND A EK ! 1 DIASABAP/'
269
EIITRADA'" Listagem 8.8 Urn exemplo de atribuit;60 envolvendo duos strings de ~ campo
1 report ztx0808. 2 data: begin of 1s1. 3 cl value ' A'. 4 c2 value 'B', S c3 value 'C'. 6 end of hI , 7 152 like fs l .
151
e 0 nome cia string de campo. Urna tabela ou estrutura com a mesmc nome deve existir no Data Dictiona ry.
de compo definida co m
a
9 152 z 151. 10 write: I tsz -cf, rsz-ea, 152-c3 .
2 3 4 5 6 7
ztxlfal.namel , ztxlfal-landl.
sliol ~
I
ABC
ANWSf 1IIrrr... " A linho 2 define a string de compo ztxl f al. Suo definkc c e exotomente iguol
tobelo do Data Dictioncrv com a mesmo nome . Nos ltnhos 4 e 5, volores sao dodos a dais de seus co mponentes, que siio totalmente es critos no linha 7.
liIl... As linhas de 2 a 6 definem a string de compo fs1. A linhc 7 define a string de ANAllS~'" compo f 52 exatomente como 1s1. No linho 9, fs1 e movida pora fs2, como
SI!
fosse umo unicc vcrtcvel do tipo char. No linho 10, as componentes de f52 sao totclmente escritos.
String de compo definido utilizando TABLES inte rog indo com SELECT
A instrucao tables faz mais do que apenas definir uma string de campo. Ela realiza duas a~6es:
Define uma String de campo. Farnece ao programa 0 acesso a uma tabela de banco de dado s com mesmo nome, se uma existi r.
0
~ ..
Umo string de campo contendo tipos de dado num erlccs requer ccns'derococ especial durante as atribuic;6es. Esses ccnslderocees se reo obo rdados no Die 9, no secec "Atribuic;6es
H
Utilizan do a instr uc;iio TAB LES para definir umo string de compo
A string de campo definida com 0 usc cia instrucac tabl es corresponde a urn objetc de dado modificavel. As strings de campo definidas com 0 usa cia instrucac t ab! es seguem as mesmas regras das strings de campo definidas com o usa cia instruc io data. Urn exemplo de urn programa que utilize urna String de campo tabl es aparece na Listagem 8.9.
o primeiro exemplo da instrucio sel ect ereproduzido na Listagem 8.10. Voce pede agora analisa-lo sob uma nova persp ect iva.
~NmDA~ Listagem 8.10 Seu segundo progra mo, revisitodo
1 repor t ztxOBlO . 2 tab les ztxlfal. 3 sel ect * from ztxlfal into z lfd or der by l ifnr . wr1"te I z lfa l -11fnr . 4
endsel ect ,
ANALISE .....
onde:
A linho 2 define a string de compo zt xl fal. Suo defini<;iio e exctc mente igu oJ a do tobelo do Dote Dictionary com 0 mesrno nome, H6 tc mbem umo tobelo do ban co dedodos com 0 mesmo nome, de modo que sejo pro porcionodo 0 0 progra mo a ocesso a tobelc. a que slqnificc que 0 mesma pode agora serutilizadoem vmo instrv<;50
....... w w
WW
271
sel ect. Sempre que a linha 3 e executoda, um registre e lido a partirdo tobelo do banco de dodos ztxlfal para a string de campo zt xl f al. Pora coda registro, 0 vclc r do compon ente ztx l fal -l i fnr e tota lmente escrito (Iinna 4).
onde:
tl
vl
Dictionary,
.
(l)
t eo tipo de dado .
de 0 mimero de casas decimais (utilizadas apenas com 0 tipo p).
As Lisragens 8.11 e 8.12 mostram exemplos de pr ogramas que definem e utilizarn. seus pr6prios tipos de dados .
~ usu6rio char2
/ve o de mem6rio
c:omportilhodo
1 report ztx0811. 2 typ es char2 (2) t ype c . S' 3 dat a: 1,'1 t ype char2 val ue ' A . 4 v2 t ype char2 value 'CD '.
s
6 write: 'Ill. 1,'2. :' .
um programa de chomado e em um
SiD! ~ A
,
AS CD
Eum compo
char de
Definindo tipos
Voce pede definir seus pr6prios tipo s de dados utilizando a instru~o t ypes e basea-los nos tipos de dados existentes.
EIfTUDA ~ Listagem 8.12 A utilizac; o de tipos poder6 tomor seu c6digo mois a
clc ro e mcis f6cil de ler
1 re port ztx0812. Z t ypes : doll ar s( 16) t ype p deci m als 2. 3 lira(l6} t ype p decimals O.
4
!!!
~
~..r '
au
type s tl like -r .
"'
5 data : I::iegin of ameri ca n_sums . petty_cas h t ype dollars. 6 7 pay_outs t ype dollars. l lJ'1lp_sums type dollars, a
end of ll'ller1can_sums.
begi n of i t ali an_sums,
10
272
273
11 12
13
"5 1
_ con t~m
16 american_sums- pay_outs .. ' 9500. 03 I urn decimal 17 italf an_ sum -l ump_sums .. 514l. s 18 19 write : / amer1can_sums -pay_outs . 20 / i t ali an sums - l ump sums .
ANALISE,.
lilt... h linhos de 2 a 8 deflnern um tipo de dodo de nominodo addr ess que ccntem cinco comp os. Nos linhas de 10 a 13, quotro strings de campo sdc definidos
A linho 2 define urn tipo de dodo denominaclo dol lars como urn campo ,.. decimal compa d odo de 16 bytes co m duos casas decima is. A linho 3 define um tipo de dodo semelhcnte denom inodo 1i ra co;" 0 coso decima l. Nos llnhos de 5 a 14, duos strings de compo sa o definidos co m 0 usa dos novos tipos de docl . Nos llnhcs o 16 e 17, urn volo r e otribuldo 0 urn compo nente de coda e, nos linhos 19 e 20, ell'S soc
com a uso do novo tipo. Sem 0 no.. . o tlpo, essos defini~oes teriom utilizado 24 linhos ad icionais de c6digo . Alem disso, a mcnutencoo fica mois f6cil: se umo clterocec nos deflnlcce s da s strings de compo de en derecc for necessaria, ope nos a definiIYoo do tipo preciscrc ser oltera do.
Grupos de tipo
HO~O llr.. TERl{O"
escr itos.
Considere urn tipo definido pelo usuario como uma variavel,masurn tipo que voce nao posse utilizer para armazenar clados. Elepodera apenasserutilizado para coo outrasveriaveis. As mesmasregrasse aplicam aos tipos, da mesmaforma
que se aplicam varidveis e strings de campo. N a mes de tipo , como nomes de vari fvel, tern de urn a 30 caracteres de comprimento, mas, diferentememe das vari dveis, seus names nao podem incluir a s caracte res - < >.
as
as
Uma in stru~ao t y pes pod e se r ormoze nodo em um grupo de fipo . Urn grupo de tipo (to mbe m con hecldo como um pool de tipo) corresponde a urn objeto do Data Did io na ry que existe rnerome nte para canter uma ou mots insfruIYoes types au constant s. Utilizondo a in stru~oo t ype-po ol s em seu programo, v eee aces sor6 tipos ou consta ntes a pa rtir de um gru pe de tipo e"uflllzcre as mesmos em seu progromo. Muitos program as pode m co mpa rtilhor um grup o de tipo, propordonondo a voce a hobilidade de crier definiIYoes ce ntralizod a s. A Fig ura 8.2 ilustra esse conceit o. A Listagem 8.14 ccnt em urn exemp lo de um grupo de tipo e a Ustage m 8. 15 opre senta um exemplc de um prog ramo utilizondo types e constants de tal grupo. Grupo de tipo ztxt.
Tipos estruturodos
H " ilIO
NOVO ...
Fig ura 8 2
e"
Urn tipo definido pe lo usu6rio pede ser boseodo no defini ~o o de umo string de campo. Ele e conhecido como um fipo estruturodo. A Usta gem 8.13 mostro z como vo ce pede reduzir 0 tc mcn hc de um prog romo vtili onde um tipo estruturodo.
um cont~inar pore as
enee cs progromos.
ENTRADA.... Listag~m. 8.13 A utilizac;oo de :ipas e.st~tu.rodas pode reduzir a ,. redonde ncrc e tamar 0 monutenc;oo mots faed
1 report ztx0813 .
Progromo 1
type-peols ztxt . data fl t ype _ ztxLdoll ar-s .
Progromo 2
typ e-pools zt xt . . dat a fl type.z.txt:...dol1ar s .
,
3
2 t ypes : begin of address. street (25) c1ty( 20) 5 region {7l . 6 count ry (l 5) , 7 posta 1_code(g) . 8 end of addres s .
274
275
EMT ArrItr.. Listoge m 8.14 Urn exemplo do lnstrvcdc type -pool contendo tipos e RAD l ,. constontes
1 typ e-pool i txl . Z types : ztxl_doll ars (16) ztxl_li r a(l6) J 4 constant s : ztxl_'Ilarn1"9_th reshol d ztxl_ama 1gamat i on_date 5
1. Comece no D ict ion ar y: Initial Screen (ca min ho do menu Tools- > ABAP / 4 W ork bench, D evelopment- > AEAP/ 4 Dictionary).
2. Digi te a nome de seu grupo de ripe no campo Object N ame. 3. Selecione 0 botso de op~ao Type Groups. 4. "Pressione 0 bcrao Create. A tela Typ e Group:c:o:t: C reate Text sed
ANAUSE '"
A linho 1 indica 0 com ecc do grupo d e tipo e the cfribui um nome. As linhos ,. de 2 c 5 defin em t ypes e constants que podem ser utilizodos em quolquer
exibida.
5. Di gite uma descricac de seu grup o de tipo no campo Short T~xt. 6. Pressione 0 bono Save. A tela Create Obj ect C atalog Entry sera exibida. 7. Pressione 0 borso Local Object. A tel. AEAP/ 4 Editor: Edit Type Group sera exibida. Na primeira linha, a instru~ao t yee- pee1 r , aparecers, onde te o nom e de seu grop o de tipo . Se 0 nome nao aparecer, voce devera digita-lo agora. 8. Nas linhas subseqilen tes, digit e as instI11~6es constants e types . Todos os names devem comecar com t_, onde t e o nome de seu pool de tipo. 9. Pressione.o bono Save na barn de [erramen t as do aplicativo.Na parte inferior da janela, a mensagem Typ e group saved sed. exibida. 10. Pressione 0 botao Back na barn de ferrsmentas do aplicativo para retorn ar a D ictionary: Initial Screen. Par a excluir urn grupo de tipo, siga os passos de 1 a 3 do pr ocedimento anterior e, em seguida, pr essione 0 boeao D elete na barra de ferrament as do ap,licativo.
progromo .
ENTiADllio.. J.Istagem 8.15 A utiliza~lio do grupo de tipo reduz 0 dcpltcccec de ,. c6digo para tomc r mois f6cil a mcnutencco
1 re port ztxOSlS. 2 type -pcc l s ztxl.
11 if l/lll!r i can_sums-pay_outs > l u I_warning_t hre shol d. 12 write: I ' W i ng' . amer1can_slIIlIS -pay_out s . arn 13 ' exceeds th res hol d' . ztxl_warning_threshold . 14 end1f.
iHAUSf '"
de tipo .
linho 2 ,ind a s do o zt no prog roma .. As ltnhos r AAlinhodefinemuiumo string depara grup_outstipoessexlvalorxl _dol l ars do comde 3a 7 utllhcndc a zt grupo 9 ctribul um valor pay e e compcrndo
co mpo
tipo
0
defi~i~6es
~~
Resumo
As strings de campo sao com o as estrururas definidas dentro de seu pro grama. Voce pode definir as strings utilizando data au tabl es. As strings de campo definidas utilizando tables tern visibilidade global e extema. vccepode defmir seus pr6prios tipos de dados, ate mesrno tipos estrururado s, utilizando a instrof:jao types. Os ripos definidos pelc usuario reduzem a redu ndancia e tornam mais facil a manut encao. Voce pede defmir urn gropo de tipo no D ata Di ctionary para fazer com que os tipos deflnidos pelc usuario e constantes sejam reurilizfveis.
Se 0 grupo de ripo ja river side inclufdo, tentativas subseqaeotes para incluf-lo serso ignoradas e nao causarao urn erro. O s nomes do gropo de ripe podern ter de urn a cinco caracteres de comprime nto e devem comecar com y ou z. Os tipos e constantes incluidos em urn programa com a usa cia inst ru cjo typ e- pools sempr e terio visibilidade glob al.
".. . w _ _ ...
'W'
'W'
..
__
"!'!""
276
IFa~a
277
Workshop
o
Wo rksho p oferece duas maneiras de voce verificar 0 que aprendeu neste capitu lo. A se~ao Teste oferece perguntas para ajuda r a solidificar seu entendimente do con teu do a.bordado e a se~ao Exer cfcic permire qu e voce pratiqu e 0 que aprendeu. Voce ped e enco nt rar as respostas as perguatas do teste e ao exerclcios no Apendice B, "Respostas as perguntas e aos exercfcios".
P&R
Teste
o o
Por que preciso criar strings de campo? Por que n ao posso apenas utilizar simples variaveis?
1. Qual e a consta nte predefinida qu e pe de ser ut ilizada em urn programa ABAP. Q ual e 0 seu equivalence urilizandc urn literal?
2. Q uais sao as tipos de instrucao t ype que podem ser utiliza dos equal eo ripe que pode ser definid o no Data Dictionary?
As Strings de campo propo rcionam a voce urn mo do de organizar suas variaveis em grup os. Quando voce river cente nas de varifveis em urn prcgrama, a organizacao dessas varuveis em strings de campo fad.com qu e a rela~ao entre as varieveis se to me ainda mais
clara. Utilizar strings de campo agrupar as camp os tambe m permitirf que voce execute uma .op eracao em urn grup o de variaveis como se elas fossern con siderada s u ma dnica variwel, Assim, por exemplo, se voce precisar mover 100 varifv eis, sed possrvel, em geral, cadificar uma Unica in s tru~ao a fim de executar o movim eoto de um a string de campo para uma ourra, em vez de codificar 100 instrucoes de atribui~ao para cada variavel. Mover uma dnica String de camp o sen tambem mais eficiente do que 100 insrrucoes move, com isso seu programa executara mais rapidamente . Voce vera nos capfrulo s que estao par vir que muitas instrucoes po dem utilizar uma string de campo com o urn operando. Se voce puder utilizar as strings de camp o, voce tera vantagens sabre as mesmas , send o assim elas econo mizarao tempo para depura ~ao, bern como urn c6digo muito exte nso.
Exerdcio 1
Qual ea ourra forma de se declarer a variavel abaixo urilizando uma declaracac -type"?
data : begin of usd_alllOunt. hot el type p decimals r ent car t ype p decimals pl ane type p decimals food type p decimals end of usd_aJIlOunt , begi n of &meX _pt. hot el type p dectee l s re nt car typ e p decteat s plane type p cectsets food type p decimals end of amex_pt. 2, 2, 2, 2.
para
2, 0, O.
0,
Exerd cio 2
Qual e 0 resultado desre pro grarna?
report zb0816 . dat a: begi n of f Id_stgl, var l value ' 1' , va-z valu e ' 3', var3 valu e ' 5' , var4 valu e '7', ve-s val ue '9'. var6 val ue ' 4' , var7 value' S', varS value '6', end of fld st gl. f ld_stg2 11ke fld _stgl. fld_stg2 fld _stgl. write: write :
o o
Por que devo utilizar meu pr6prio ripo estruturado em vez de uma estrutura do DDIC? Eu Da O posse criar strings de campo com ambos? .
Sim, voc e pode. A funci on alid ade das esrru ru ras do DDIC e bern mai s imporran te qu e a oferecida pel os - os estru rur ados, tip po rque podem forn ecer r6 tulos e ajuda P I a F4. En tr etan to, ty pes pede serutilizada para definircipos estru turados e aninhados que ccntenham rabelas int ern as. 0 que nao acontece com as estruturas do DDIC . Isso sera demonstrad o no Capfruic 12 na se~ao sobre as tabelas int ernes.
I I
f l d_st g2-var l, fld stgl -var2 , f ld stg2-varti . fld stgl- var3. fl d_stg l -va rS. fl ( st g2-var 7, fl(stg2~var4. f l (st gl- varS.
9
Atribui~oes,
conversoes e ccilculos
Qbjetivos do ca pitulo
Depo is de concluir esee capitulo, voc e.sera capaz de:
Utilizar variaveis comuns do sistema e ser capaz de exibir au localizer qualquer variavel de sistema
Utilizar a instrucao c1ear e comp reender seu efeitc sobre as varidveis
e Strings de campo
---- - 280
agora.
281
Figura 9 1
2. A parrirde qualquer tela, selecione 0 caminho de menu System-> User Profile-> U ser D efaults . A tela Ma i nta i n User: Oefaul ts sera exibida, 3. Na caixa de gropo Date Fonnat , selecione a bouo de opcac YYIT!MMIDD. 4. Na caixa de gropo Decimal Notation, selecio ne a bcrso de op~o Period. 5. Pressione a bono Save na ba rra de ferrameneas Application. Na pane infe rio r da janela, a m ensagem Va l ues for user xxxxx saved sera exibida, As alteracoes feitas em seu perfil de usuaric nao terao efeitc .at e voce eferuar seu pr6xim o logon.
6. Selecione a caminho de menu System-c-Log Off. A cain de dialogo Log Off sen exibida,
Esto e a estruturo syst . f lo contem as definil;6es de lodas 05 vori veis de 6 sistem 0 boICo o. Column Right;
Next role ume
deShott Text
sejo vislJOlizodo.
Para exibir uma lista de variaveis de sistema, exiba a estrutura do DDIC, syst. Voce pode exibi-la u tilizan do D ictio nary: Ini tial Screen (t ela inicial ) a u de dais cliqu es no no m e de qualqu er variavel de siste m a em seu pr ograma . A prim eira pagina de sys t e apr esentada na Figu ra 9.1. Na Figura 9.1, os names de campo apa recem na primeira col una e as descricees eseao a direita na co luna Short Text. Para visualizar a descricac inteira, ro le para a direita ciando urn clique no ba ta o Column Rig ht; Next . . . na pane inferio r da tela. Par a localizar urn campo pelo nome. pressione a b atao Find na barr a de ferramentas Standard. A tela Find Fi eld aparecera, solic itando 0 nome do campo que voce deseja localizar. alias de syst sy (pronuncia-se sai). Em seu ccdigc, voce podera utilizar as dais nom es. P ar exemplo, voce pode codificar sy-datum ou syst-da tum; sao exatamenre equivalentes. A maioria dos programadores utiliza sy. A Tabela 9.1 contem uma pequena Iista de vari aveis de sistema comurnente utilizadas. Variaveis adicionais serfo apre sentadas por todo a livro.
Data atuo l Horo ctuc l Id do usu6rio otuol Ultimo c6digo de retorno Cliente de logo n
N umerc da p6gino de soldo otuol
sy-l tnno
sy-vline sy-ul i ne sy- rept d sy-cprog sy t code sy-dbcnt
Linho vertical linh a horizonta l Nome do relot6rio otuol Nome do progrom o principal C6digo do transol;0o otuol Dentro de select, ccn tem a co nta dor de iterol;oo ctucl. Depots de
282
283
report zb0901. ta bles ztx lhl. parameters "landl vr-tte : I 'Current / ' Cur ren t / ' Current / 'Vendors
A linha 10 res rring e a s el e~ao de registros somence para as que tern urn codigc de pais igu al ao inserido na tela de selecao.
A linh a 11 faz com que as registr os sejam classificados em ordem ascen dent e po r 1i fn r (num ero do fabricante).
A linha 12 escre ve
~l ~nd l.
user: I . sy-uneme ,
having country code ' .
0 mimero de ite raliao atual a partir da variavel de sistema sy-d bcnt e urn nu mero de fabricante a partir de cada registro. 0
t.
select * fr om ztxlfal
where landl .. "land] or der by 1f tm-. w ite : I sy-dbc nt , ztx lfal-l 1fnr. r endselect. lli rite : / 5y- dbcnt, 'records found', if sr-subrc <> O . write: / ' N vendors exist f or count ry" , o
endif.
A linha 13 marca
A linha 14 escreve 0 ntimero total de iteracces do loop se l ect . Esse mimero eigual ao mim er o de re gistros que coincidiram co rn a clausula where utilizan do a variavel de sistema sy-dbcnt. Na linh a 15, 0 c6di go de retorno a partir de sel ect, existence na variavel de sistema sy-subr c, e testado . Se zero, os registros foram encontrades . Se njio zero, nenhum registro foi encontrado e uma mensagem e esc rira na lin ha 16.
~l andl.
o
siiDI ~
' . d . La ca Iza o d a yanayelse sistem a " Consi deran do urn c6digo de entrada como urn pararnerro de entrada, suponha
que voce prec ise escre ver urn programa qu e escreva a descri/iao do pais a part ir da tabela ztxt005t no id ioma de logon atual do usuario. Como voce deve se lembrar , ztxt005t e uma tabela de texto contendo descricees de c6digo de p ais em diversos idiomas. A chave primaria e mandt, spras (idioma) e la ndl. U ma SOIUiao de exemplo e m ostrada na Listagem 9.2, m as esta faltando uma pa rte cru cial de info rmacfo na linha 5: 0 valo r do idioma de logon atual. N a Listagem 9.2 esta faltando uma variavel n a posii ao indicada pelo po nto de inrerrogacao. Gerahnente, quando estive r tr abalhando com 0 ABAP/ 4, voce podera se deparar com 0 desafio de localizar variaveis contendo as inf orm aqdes nec essdrias.
9 V5 10 Y7 10 records found
ENTRADA ~
Lista ge m 9.2 Um program a 'd e exemplo com umo vari 6ve l sy faltando
INjllSE ~
A linha2 define uma st rin g de campo zt xl fal exaram en te igual atabela com 0 mesmo nome. A linha 3 define urn anic o parametro de entrada "Iendt. N as linhas de 4 a 6, a data arual, hora e id do usua ri o sao totalme nte , escritos a partir das varidveis de sistema sy- datu m sy- uae t t e sy- uname . A linha 7 escreve 0 c6di go do pais, que foi inserido no campo de entrada de pardmetro "1andl , na tel a de selec ao .
A linha 8 escreve uma linha em branco. A linha 9 seleciona regis t ro s da tabela ztxlfal e os coloca, u rn por vez, na strin g de campo zt xl f a l.
1 r eport zt x0902. 2 tab 1es ztxt0 05t. 3 par ameters landl l i ke ztxlfal -landl obligatory default 'US ' . 4 select s i ngle * f r om zt xt005t 5 where spr as ? Y ioma de l ogon atu e l id 6 and 1and1 "landl. 7 ; f sy-subrc = O. 8 write: 'Descri ption:', ztxt005t -l andx. 9 else. 10 write: 'No description exi st s for', "l andf. 11 endif.
..
.. - .....
~ ~
.... "!I" -
'"4!!!'" -
284
285
iNius~ ~
A linha 2 define uma String de campo ztxtOOSt exatamente igual a tabela com a mesmo nome. A linha 3 define urn unico pardmerro de entrada "l andl . As Iinhas de 4 a 6 se1ecionam um Unico registro a partir da tabela zt xt 005t par a a Strin g de campo ztxt005t urilizan do 0 idioma de logon atual de uma fonte ainda desconhecida e 0 c6digo do pais do paramer ro "landf . Nao ha endselect ji que se trata de uma ins trucio sel ect sing 1e. Ela retoma apenas urn unico regisrro: nenhum loop e criado. A linha 7 verifica o c6digo de retorno a partir de s elect e, se urn registro civer sido encontrado , escreverf a descricfo na linha 8. Se urn regisrro nio tiver sido enc ontrado, a linha 10 escreverd uma mensagem apropriada.
10. Pressione 0 boti o Find. Vma segunda tela Find aparecera mostrando as linhas que con tern 0 texto di git ado. As corr espondencias sao
realcadas.
11. Para selecionar uma correspondencia, de urn iinico clique em uma palavra realcada. voce retornara a tela Print Preview for XD:t'j a lista sera rolada para a linha par voce selecionada e a cursor sera posicionado n aquela Iinha.
idioms de logon atual esta disponfvel a partir de uma varisvel de sistema. Infelizmente, para ut ilizar 0 batao Find na barra de [erramentas Ap plic ation, voce precisardsabe r 0 nome do campo. Se voce nao sauber 0 nome do campo , entaO 0 bene Find naa tera grande utilizacio. Em vez disso, utilize a seguinte procedimento par a localizar as descrifoes da esrru tu ra SY5t.
Este proced imento emuito prntico, po is pede ser utilizodo pora local ize r as descricces de quo lq ue r estrvturo ou to belo.
~REEHCAM. 1Ilr.. Inide .ogora a ScreenC om "'How to Searc h the Descriptions of
14. Pressione a teela Enter. A tela Find sera n ovamente exibida.. 15. Press ione 0 bot i o Find . A busca e executada ccmecandc na linha atual. A segunda tela Find sera novamente exib ida e as correspondencias serio mos tradas . 16. D e urn unico clique em qualquer palavra realcada p ara exibi-la.
,. Table .
Structure o r
Pora referenda futuro, voce pcdero sa lvor a listc de Print Preview for
xxxx em um crqvivc de textc na sua unida de de disco ngido. Pora isso,
Para localizar as descricoes de um a estrutura a u ta bela: 1. Co mece na tela do D ictionary: Tab le/Structure: Display Fields. 2. SeIecione 0 carninho de menu Table- > P rint. A tela Prin t Table Manual sera exibida. Aq ui voce especifica quais deta lhes deseja ver. 3. Marque to dos os camp os e pressio ne 0 botac Continue. A tela Print: sera exibida. 4. Se 0 campo O utput Device estiver em branco, posicione 0 cursor no campo, pressione a seta para baixo e se1ecion e qualqu er dispo sitivo de saida. (Nao imp ona qual dispositivo sera selecionado; ele D aO sera ut ilizado .)
a pa rtir do tele Print Preview for lOOCX, selecicne 0 co minho de menu System-c-Llst-c-S -c-Lcccl File. Ne tela Seve Ust in File ... ,seledone cve o boroo de o~oo Unconverted e pressione 0 borec Continue. No tela Tronsfer list to e local File, digite 0 nom e d e um orquivo de textc, por exernplc, c: \temp\syst.txt e, em seguld o, presslone 0 botec OK. lsso crioro 0 crq uivc em sue unidade de disco rlgido. Voe! pode obrir e pesquisc-lc ufilizondo 0 WordPed em qualquer me me nto, sem fer de utilizer 0 procedimento "'C o mo localize r os descri c;6es de ume estrvturo ou tabelo'" mostrodo odmo .
Seguindo 0 procedimento anterior, voce pede p ercebe r que 0 idioma de logon atual estava armazenado em 5y1 angu. 0 programa complete apuece na Lisugem 9.3.
286
D~ 9,mIBUI\05,CONVElS05 EckrulDS
com. a
287
!!!
Z
S
1ft i di oma de l ogon atual
1 report 2tx0903. 2 tables ztx t005t. 3 par~te rs "la nd! 11ke ztxl fal -landl obligatory default 'US'. 4 sel ect single" froll ztxtOOSt
onde:
vt
continua
6 wh ere spra s .. sy-langu and land! .. "lendt ,
7 1f sy- subrc .. O.
. 'A'
8
9
else . "
write: '!'to desc ription e xists for', " l andl . endif .
10 11
S.\iOA ~
Se vl for uma varisvel do tipo c, sem quaisquer ad.i~6es, ela sera preenchida com espaccs em branco. Se 1/1 for de qu alquer outre tipo de dado, ela sen preenchid a com zeros. Se vr for uma string de campo, seus componentes serac configurados com espar;os em branco ou . zeros depe ndecdc do tipos de dado de cada urn.
Utilizando a adi~o wi th v2, a pr imeiro byte de 1'2 sera utilizado pan pr een cher 0 ccmprimento inteiro de vl , Se vI foruma strin g de campo, ela sera tratada como uma variwel do tipo c. Utilizando a adit;ao wit h 'A', ' 0 comprimento inte irc de vt sera." preenchidc com 0 uso do prim eiro byte do lit eral ' A' . U tilizando a adit;ao wi th NULL, comprimento inteiro de 1/1 sera preenchido c,om zeros hexadecimais. A Lisragem 9.4 mostra urn pro grama de exemplo que limp a as variaveis e st rings de campo.
JJ1.i.uS E'" A tinho 5 limite a inst rUl ao se l ect 0 retomor openos as registros de ztxt 005t ; ,. que tAm um c6digo de idio mo iguol 00 ldlc mc de logon atu a l. Pelo fota de mandt set outomotico mente od icio na do no cornecc de codo wh er e, a chc ve primario e ogora co mpletome nte espedficodo e um enicc e exclusive regi5tro e retom odo. Observ e que a Indice prim6rio suporto esse instrui700 selec t , portonto as compos do c16usulo where fora m espedficodos no mesmo o rdem em que oparecem no fndice prim6rio .
Instru<;6 es de atribui<;oo
lERMO,.
N OVO...
Umo ;ns tru~oo de otribu; o ctrlbul um vo lar perc umo vcrio vel ou string de ca mpo : Tres lnstrucoes de atribuit;oo sao co mumente utilizodos:
A listogem 9.4 utilizo umo novo odil;cO denominodo no- ga p no instrut;c o wr; teo N o-gap fez com que a proximo volar de sctdo sejo
escrito imedioto mente depois do otuol sem urn espccc interven'ente .
Utilizando a
N OVO... H ~ UD
c l ear
EII1UOA~
A instrui700 c l ear co nfig ura a volar de uma vori6vel au umo string de compo como zero . Se 0 tipo d e dodo for C, 0 volar, par sua vez, ser6 conf igurodo como
espccos e m bronco. Os espoccs ern bronco e zeros 500 conhecidos como va/ores inid ois podr6o . Frequ entemente, e co mentodo que cl ear otribui velcres inicia is podrcc a vori6veis. '
1 repo r-t zt xD 4. 9D 2 tab l es zt xlfal. 3 data : fl {2} type c 4 f2 type i 5 f3 type p 6 f4 type f 7 f5 (3} typ e n a f6 type d typet 9 f7 10 fa type x
value ' A . B' valu e 12345. value 12345 . value 'lEl', valu e '7 89' . valu e ' 19980101' , villue'1201'. val ue ' M' .
__
- - - - - _- _
- _
.- _
- . - - =c--"-=--.
288
289
17- ' 000000' fa -'OO' s l-fl-' s lfl-' 0 ztxlfal - lifnr= ' ztx lfal-l andl- '
llil5! ~
Todas as variaveis e componentes de strings de campo sao configurados com zeros e espar;os em branco pela instrucao clear na linha 29 .. Tambem se pe de dize r que codas as variaveis e compone~tes sao configurados com oelores iniciaispat/rao. As insrrucoes wri te que co megam na linha 30 descrevem totalmente as varisveis e os componentes que Ioram ~POSI dentro de aspas simples e sem espaccs in te rvenientes entre as aspas e os valcres ao seu redor. -
EMTRAD'" Listagem 9.5 Vo ri6veis preen chidos com cora de res difere ntes de A
sr-rz-:
123 , 456
zt xl fa l- 1i f nr- ' XXX ztxl f al - 1andl - ' CA fl-' f2-' 0 ' f3' 0 ' f4-' O. O OOOOOOOOOOOOOOE+OO ' f5 -'000 ' f6 - ' 00000000 '
1 r epor t ztx0905. 2 tab l es zt xl fa l. 3 data: fl(2) type c value 'AB ', 4 f2(2) type c, 5 f3 typ e i val ue 12345, 6 begin of sl, 7 H(3) type c val ue ' XY I , Z 8 f2 type 1 val ue 123456. g end of sl. 10 writ e: / 'fl '" no-gap, fl no-g ap, - " , " 11 I 'f2>< '" no-gap. f2 no~gap . "" , 12 / ' f3'"" no-gap, f3 no-gap , " " , 13 / 'sl~f1-' " no-gap, sl-fl no-gap, 14 / ' sl f 2" ' " no- gap, sl-f2 no-gap . 15 / 'ztxlfal-l1fnr=' " no- gap, zt xlfal - 1H nr no-gap, 16 I 'ztxlfal-land l-' " no- gap, zt xlfal~1a nd l no-gap.
""
290
, m N" 17 EM 21 DIAl U'PI4 /.
D~ UTl<lBu~6ES, CONVEISOES EtllrulDS
291
20 21 22 23 write :
24
25 26 27 28 29
f3 with 3. 51 with 'X'. ztxlfal wi t h O. / ' 11'" nc-cep , fl I .' fl ' " no- gap. f2 / ' f3. '" no-gap, f3 / 's l-fl. '" no-gap, / ' s l -12. 1 1 1 no-gap, / 'ztxlfal-lffnr." / 'ztx lfal~lll.ndl=' "
I
Ul
Sintaxe do i nstru~ii o m ove A segu ir, veja a sintaxe da iD:stnJt;ao move. Os operadores e operan dos devem
ser separados por espaccs. Atribui t;io multipla ocorre da direita para a esquerda.
move vI t o '112.
1ft
ou
vz "
ou
'Ill.
f3'" 12.345 ' sl-fl ' XYZ sl -f2. > 123,456 zt"l f a1- 11fn r- '
ztxl f al - linen-'
f Za lXX ' 13'50, 529,027
51-fla ' XXX'
ou
IIICIve rl[+N(L )] tov2[+N(L )] .
n 'xx'
ou
,2[+N(L)] , 1[+N(L)] .
51f2'1482184792 '
onde:
vI
v2
ANALISE
A linh a 20 preenche f3 com 0 primeiro byte do lit eral 3. Urn literal numerico com ate nove dfgitcs de eomprimento e armazenado como urn inteiro de quatro bytes (veja a sCliao seguinte "C enversac de clades"). f3 epreenehido com 0 primeiro byte desse inteiro de quatro bytes, atribuindo essencialmenee lixo a f3.
e a varifvel ou String de campo de recebimento. N e urn deslocamento a partir do inicio cia variavei au string de campo.
Le o namerc de bytes que devem ser movido s.
A linha 21 trata s I como uma varifvel do tipo c eo preenche com x. o componente fl e do tipo c, portanto recebe valores validcs. 0 componente f 2 e do tipo 1, ponanto recebe valores invdlidos. A Stringde campo zt xl fa l epreenchida com 0 primeiro byte do inteiro de quatre bytes de valor 0, preenehendo-o com lixo. 0 Iixo, neste case, e exibidc com indicadores de mimero (I ,.
Na Tabela 9.1, dois exemplos si o .mostrados cia maneira correra e cia maneira incorreta de codificar as instrucoes de atribui~o. A codificacsc incorreta resulta em urn erro de sintaxe.
Correta
fl - f2 . fl -f2 -f3.
Incorreta
n-ra ,
n- ra-ra.
292
293
Convers6es de dados
KOYO'"
lERMO~
Se duos voricveis tiverem tipo s de dodos au com primenfos diferentes , as dodos seruc ccnvertldos quando movidcs. Esse procedlm ento deno minoclo umo
Do tipo
Para
p
tipo
Regras de eeevereee
odoptor;oo Qutom6 tica. Se as comprimentos dos vcrlcvels de en vio e de recebimento ndo correspo nderem, umo odc ptocec cutcmcticc do comprimento sera executoda . Se ostipos de dodos noo cor responclerem, umo cdcp tccec outom6tica de fipo sem exec utoclo.
Se as tipos de dados dos camposde envio e de recebimentoforem as mesmos, mas as comprimentos nao, uma adaptaciode comprimentcseraexecutada, como
pade ser visto na Tabela 9.3.Nessa tabela,0 campo de envic e 0 campo "From".
Tipo
compo de envic deve canter openos umo dafo v6lido no forrncto YYYYMMDD. Se e sse noDfor 0 coso, um erro noD ocorre~6 ; em vez disso, um valor lnvcfldc sere otrrburdc 0 0 compo de recebimenfo. as re sultodo s do ufilizor;oo desse volor sao lndefinidc s.
c
x
o ca mpo de envic deve ter openos um hcrcric va lido no formoto HHMMSS. Se esse ne e for 0 coso, urn erro nco ocorre r6; por suo vez, urn vclo r lnvclldc sera otrtburdo 00 compo de receblmento . as resultodos do utilizor;oo desse volar sao indefinidc s.
a direito
n p
Truncodo a esque rdo Atribuido se 0 valor numerico se odeq uor 00 compo I to I Se 0 va lor nurnericc for grande demois para 0 compo de recebimento, um curto dump ocorrer6 .
Os tipos de dados restantes (t , i, d e t ) sao todos de urn comprimento fixo, de forma que os campos de envio e de recebimento terao sempre 0 mesmo comprimento se fore m do mesmo tipo de dado. As regras para adaptacoes de tipo sao fornecidas na Tabela 9.4. As regras de conversac para 0 tipc i sao iguais as regras para 0 tipo p. Entre elas escio inclufdas as convers6es com comportamento incomum. Os pontos que devem ser observados SaO: A compactacfo peculiar executada para as tipos de c a n. A capacidade de atribuir valores invalidos aos tip os d e t. 0 tratamento desigual de caracte res invslidcs durante a conversao dos tipos de c a x. A utili~o inesperada do byte de sinalreServado em convers6es de ppara c. 0 usa de * para indicar estouro em CODversoes de p para c. Urn campo c completamente em braneo e converti do par a urn campo p com urn valor zero .
.
Os valores v6lidos poro 0 ca mpo de envio sao 0-9 e lefros moiusculcs A 0 valor e olinhodo c esquerdo e pree nchido -F. direitc com zeros au trunco do a d ireito. lodos os ccrocteres ap6s 0 primeiro va lor lnvclldc no compo de envlo sdc ignorado s.
o valor ealinhodo (] dtreitc no co mpo de recebirnentc , co mo byte mois (] direilo reservcdo paro um sinal finol. a sina l
somenfe sere exibido se 0 nvrnerc for neqofivo: portanto, numeros positives seriio alinha dos c direito com urn onico espoco em branco final. Coso VOCE! tente mover um valor positivo que contenho a mesrnc quon tido de de digitos suportoda pelo comprimento do ca mpo de recebimento, 0 sistema utilizora 0 comprime nto inteiro do compo de recebimento para o rmozenar 0 valor sem reservor 0 byte mots a dlreitc poro 0 sinol. Depois de conside ror 0 que foi explicodo, se a valor " campo de envlc noo se adoptor 0 0 no compo de recebimento, 0 numero ser6 fruncodo a esq uerd c. Se 0 truncomento tiver oco rrido, 0 slstemo indicor6 lese substituindo a digito mois a esquerdo po r um asterisco (*l. Se o va lor se odaptor 00 com po de rece bimento, os zeros iniciais serOo suprimidos. Se 0 camp o de envio for iguol a zero, 0 compo de recebimento re cebera um unico zero.
294
295
Para
d
tipo
YYYYMMDD.
26 fe 27 fc 28 fe 29 fe 30 fe 31 fe 32 fp
/ / / / / / /
tc , t c, f c, t c, t c,
'o.. . er fl ow i ndi cat ed by lead ing *' . 'l eading zeros are suppressed' . 'z ero in zero out ' . f p, ' bla nks i n zero out ' .
HHM MSS.
numero de
p
t
A dote
silDi ~
de palavra-chave do ABAP/4 para a instru cao move. 0 procedimento para exibi-la segue na proxima se!Sao. A Listagem 9.6 contem urn progra m~ de demons rracao que executa \, co nvers6e s de dados de exempl o.
-A182C3.4 > 0000001234 non-numer ic char s are ignore d E ABCD date and t ime fi el ds are in va11d ABCOEO when you load them wit h j unk 1998/02/22 .., 729.443 d->p: days sinc e 0001/ 01/0 1 14:57:05 . ,,> 53,825 d->t: sees since midnight .4.484 > .4.4000000 ig nore all af ter in.. . a11d char s -1234 > 1,234- allow l eading sign 1234~ 1,234- al so allows trailing sign 123, 456, 789 > 12345 6789 ri ght most byte reserved for sig n 123,456,789- > 123456789 only negative nwnbers use it , but 1,2 34,567, 899 > 1234567899 + e nurns that need t t use it t oo 12. 345, 678,901 . 0 '*345678901 o erflow i ndi cat ed by l eadi ng * 12.345 u> 12345 lead i ng zeros are suppresse d o .. a> 0 zero in :s zero out > 0 blanks in zero out
SCRHNCAM,.
.... lnicle o~oro 0 ScreenCom "'How to Display the Conversion Rules in the ABAP/4 K ord Documentation"'. eyw
ABAP /4:
S.
,
l
N a caixa de gru po Type of Search} selecione 0 botao de opcsc From Stru ct. Start. 6. Pressione 0 bot ao C ont inue. A caixa de dialogo desaparecerd e a linha move sera realcada. 7. De urn clique duplo na linha real<;ada. A tela Dis play H yp ertext: se ra exib ida. infcio da tabela de 8. Pressione a te cla Page Down duas vezes. coeversao sera exibido .
296
Subcampos
1IIlIO ,.
NOVO ...
A porte de um compo referendodo pete esped fico<;oo de um deslcccmentc e/ou comprimento e denominodo subcompo .
Sintcxe de um subccmpo
'1 ["][( Lll ,2[-c ][(Lll.
I n.
I
mesmo que: fl+O(l) .. 'J'. , mesmo que: fl(l) f2 (1). -fl agora contem 'BOY lIl@Smo que : fl+4(3) .. fl (3 ). fl agora cont~ '60Y BOY '. -mesmo que: fl+O(3) f2+O (3). -fl agora contem 'BIG BOY ' .
onde:
eurn deslocamenro baseado em zero desde 0 inicio do campo. L e urn comprimento em bytes .
IHiu!~ s
0
camp o de envio ou de .
Na linha 6, urn des locamento de 0 e urn compriment o de 1 sao utilizados para especificar urn subcampo consistindo apenas no primeiro byte de fl. Atribuir a tetra IT I. portantc, pr eenchera somente o primeiro byte de fl. Na linha 8, 0 d eslocamento de 0 e ign o rado. 0 e 0 padrao , portanto subcampo sed 0 mesmo que 0 da linha 6.
0
for especificado,
0
subcampo iniciara no
subcampo se estendera ao
Na linha 10, 0 mesmo subcampo eutilizado, mas dessa vez a arribuicac e a partir de f 2. Somence 0 primeirc byte e trans~erido de fZ, porq~e o subcampo de recebimentc tern apenas urn U01 CO byt e de comprtmente. Na linha 12, urn deslocamento de 4 especifica que 0 subcampo em f1 comeca no quinto byte e continua ate 0 final de fl, to mando-c tr~s bytes mais comprido. 0 campo de envio efl , faaeodo com que os tr~s primeiros bytes de fl sejam duplicados nas pc sicoes de 4 a 6. Na linha 14, os tres primeiros bytes de f 2 substituem as tres primeiros bytes de fl.
Nenhum espa~o pode ser utilizad o dentro da especificacao do subcampo. 0 deslocamenr o, quan do presenre , sempre serap recedido por um sinal de mais (+).
f1
-meSllO que: mover ' BOY ' para fI. -Ilesmo que: ee ver ' BIG' para f2 . fl agora c ont~m 'TOY
298
299
Figlltg 9 2 Util zor move em umo i string de compo, se m tJtj/izor um nome de: componente, farO corn q ue: a stringse;o tratodo como umo vori6v do tipo c. el
~ '.-.:".. ~.
e2(2) .
e{ 3 } .
end of fs1.
,,
mo ve
f1 to fs l .
f1
ENTRJ.DA~ Li st a g e m 9.9 0 movimentc de urn compo numerico pare umo string de ,. campo de curuct ere e inv61 ido .
1 report ztx0909. Z data : fe(5 ) t ype e. 3 begin of s, 0\ f i t ype t , 5 endofs. 6 7 fe '1234'. "ce-c, nenhllnia converss c exee ut ada 8 s - fc. _"escreve ju nk g writ e s- f i.
10
EtmADA ~ Lista g em 9.8 A instru;ao move t-ete urn nome de string de co mpo sem
urn nome de componente como umc vcrtcvel do tipo c
1 repor t zt x09OB . 2 datil : flC.) value ' A CD ' . B 3 begin of 51. 4 el(l). 5 e2{Z). 6 ' 3(1) , 7 end of s L,
su
n.
"at r1bu1 urn val or v&1 1do -ce -c, nenhuma ccnversjc execute de "escreve junk "atr1bu1 urn valor val t dc nee.; eonverslio execut ada "escreve 1234
A linha2 define f1 como uma variavel de qua tro bytes do tipo c. As linhas de 3 a 7 definem 51 como uma string de campo com eres eomp.onentes: fl, f2 e f3. 0 comprimenrc total de 51 e calcu lado pela so ma do comprim ento de seus cornponenres: 1+2+1 =4. A linha 8 move a valor de f1 para 51, byte p ar byte) como se foss em ambos varidveis de ripos c. A linha 9 escreve 51 como uma varifvel de quatro caracteres. A linh a 10 escreve
0
Na minha maquin a, 0 codigo na Listagem 9.9 produz a seguin te saida . Seus result ados talvez possa.m variar nas p rim eiras du as linhas de saida devido as atribuicoes invalidas realizadas.
SliDI ~
lIIiU ~ SE
B 75770, 417
0...
1234
Nas linhas de 3 a 5,51 e defini do como urn unicc componente ct , do ripe c. comprimento 1.2.
51.
~ .. -.- .
w - w w
---
300
301
Na linha 7. st- et
e escrito e as resultados sao lixo. Na linha 8, para s t - et eat ribuida urna stri ng valida de caracrere 11234 N a linha 9, s1 ernovido p ara fl . N enhuma cocverssc e executada.
A linha 10 escreve f1 e, novame nte, as resultados sao lixo. Na liaha 11, para f1
i1itISE~
Na linha 12, f1
e atribuldo urn valor vilido de 1234. e at ribuidc a s1-c1. Pelc fato de a atribuicic ser pan
As linhas de 2 a 14 defin em duas strings de campo compostas inteiramente de campos do tipo caractere. Cada st ring de campo tem, no total. 14 bytes de comprimenro.
o componente e ca c para a String de camp o, a conver sao sen executada e a linha 13 escrevera urn valor vdlido.
Voe! nee deve mo ver urnc vcr tevel do tipo c porn umo string de ccrnpc
Na linha 15, 51 emovido para 52, tratando cada string de campo como se fosse de urn unico camp o do tipe c com 14 bytes de comprimento.
N as linhas 16 e 17, ambos sao escritos como campos de caractere.
ou de uma string de compo contendo urn tipo ncrner ico . as resultados dependem do m6quino e, porto nto , soo indefinidos.
Nas linhas 18 e 19, os compone ntes de cada string de campo sao totalmente escritcs. s l - d1 foi dividido entre s2-yl. ml e dl. Os primeiros dois bytes de s1-n1 foram para s2-n1. Os bytes remanescentes de 51 foram para 52-c1.
Movendo de uma string de campo para uma outra utiliza ndo tipos de dados de carodere
Voce poderi utilizar a instrucao move em duas strings de campo, se ambas contiveremsoment e componentes de tipos de dado s de caracrere (c, n, d, t e x). A Lisugem 9.10 ilustra este conceieo.
Movenda de uma string de campo para uma Dutra com tipos de dados num ericos
TaMO"
HO'O Ilr....
compo compostos
A maiorte-dos sistema s operocionc is reqv er c ende recc de m6quina dos compos nume ricos a fim de concordor com as regrcs esce e ftccs. Per exemplc, 0 enderecc de um inteiro de quotro bytes pede ser necessaria pare que sejo divisive! por dois. Gernlmente, esse regro impa sto como "urn inte iro de quotro bytes deve ser olinhodo em um limite de byte regular". Assim, a regrn com a qua l con cordo 0 enderecc de um co mpo e den o minodo o/inhomento.
"
TEtMO "
NOVO ....
A fim de ctender oos requisito s de olinha mento , um compilad~ r tipico inserir6 bytes de preenchimenfo a ntes de um campo que req ue r olmho mento. Por exemplc, se se u inteiro de quotro bytes comer;or no deslccc mentc 0003, desde 0 infcio de urn progromo, urn byte de preenchirnento sera necessa ria porn a linh6-lo em um limite de dots bytes. 0 cornpilodor eo locorO urn byte noo utilizcdo no deslocomento 0003, de modo que a inteiro cc mece no deslocomento 0004, fozendo com que sejc cdequcdcmente o linhod o. Os bytes de preenchimento sOo lnvisfveis 00 progromador, mas seus efeitos pcdem, as vezes, ser vista s.
Se vo ce criar um a string de campo com uma mescla de campos nurnericos e de caractere, bytes de pree nchimento, alguma s vezes , serao inseridos pelo sistema para 0 alinhamento de campos numericos. Se voce tentar utilizar uma instru~ao move em tal string de campo a fim de mover seu conreado para uma out ra, eases bytes de pree nchimento podem causar resultados inesperados. Portanto, voce podera somente utili zar move se uma das seguintes for verdadeir.a:
- -- _.
DIA 9, A1iJBUI~OES, CONYERSOES EcAlCULOS
302
I
SAiD ~ I
A 1110 I A 1,234
B
303
As duas Strings de campo consistem inteiramente em campo s de caractere (ripos C, n, d. t e x). Os tipos de dados, comprimentos e posi~ao de todos as componentes nas' duasstrings de campo ,sao exatamenrecorrespondences (as nomes dos componentes DaO p recisam ser correspondentes).
Se as campos de envio e de recebimento fore m inteiramente composto s
de campos de caractere,nenhum byte de preenchimento existiri. e 0 resultado cia utiliza ~io de move sera previsiveL Se existir uma mescla de caracteres e tipos numericos, as bytes de preenchimento pcdersc existire 0 resultado da utilizacio de move podera ser imprevisfvel. Urn exemplo e mo strado na Listagem 9.11 .
A instrut;60 move-corresponding pode set utillzcdc pora move r as strings de compo que ten hom umo mescla de tipos de dodos nume riccs
ENTUJlI~
3 4 5 6
Listage m 9.11 as bytes de preenchimento pod em ca use r resultad os inesperc dos 00 mover dodos entre strings de ca mpo
1 r eport ztx0911.
s t-et tern apenas urn byte de comprimento, port ant o c2 tera urn deslocamento desigual desde 0 inicio da string de camp o e necessitard de preenchimento na maioria des sistemas, fazendo com que s1 se tome mais comprido do que 52. Quando s1 for atribuido a s2, c3 nae sera alinhado e alguns dos s1- c2 temiinarao no comeco de s2-c3 . Entretanro, 53 corresponde exatamente com 51, dessa fonna 0 movimento na linha 14 ocorr erd perfeitamente. Esse exemplo mostra que voce nao pode ign orar os efeitos da existencia de campo s numericos dentro de uma estru tura. 0 fate de cada camp o de recebim ento ter 0 mesmo mimero de bytes que cada campo de envio nao e suficiente para garantir 0 alinhamento dos component es. As regras de alinhamento variam de acordo com 0 sistema operaciona], de modo que 0 ndmero de bytes de preenchimento e suas posi~5es irao variar. O s resultados de move em urn sistema operacional po dem ser diferences em outro. Portanto, para garantirque seus programas sejam portateis, nunca ccnfie em bytes de preenchimento e cao os considere du~te os movi mentos. Cada strin g de campo deve ser composts inteiramente de tipos de dados de caractere ou todos os componentes de cada strin g de campo devem ser exatamente correspondentes (exceto quanto ao nome) .
7 8
ei ,
9 e2(4), 10 es, 11 end of 52, 12 begin of 53, 13 u. 14 x2 ty pe i , 15 xJ, 16 end of 53. 1752 -51. 18 write : I sz-ct , sz-cz, sz -ca . 1953 -51. 20 write : I s 3~x1, s3- x2, 53-x3.
"53 ccrre speede exetaeente can 51: "- tipos de dados igua i 5 II~ nCln;ero de CillllP05 19ual ". ei1Jl105 na mesrna ord em (05 neees nlio pr ect 5il1l corresponde r )
Sintoxe do
esquerda.
instru ~Ci o
move-correspondi ng
III A seguir, veja a sintaxe cia instruqao m ove. O s op eradores e operandos devem Z ser separados por espacos. MUltipIa atrib uicao ocorrera cia direita para a
nove- cc r r es pcndt nc .v1 t o vz,
on de:
vl
v2
Em meu sistema, a cod igo na Listagem 9.11 produz a seguinte safda. Ern seu sistema, os resultados podem variar para os campos com atribuicoes
invalidas.
305
EHTRADAlirll.. ~is~~ger.n 9.12_ A lnsfrucdo move-:orresponding gera instrucces move ,. individucls e entdo executa converseo de dodos
1 report zt x0912. 2 data: begin of 51, 3 cl type p deci mal s 2 value '1234.56 '. 4 c2(3) value 'ABC'. 5 c3(4) val ue '1234' , 6 end of 51, 7 begin of 52, 8 " (8) ,
s ubtract au s ubtract -corres pondi ng mul t t pl y a u multi ply-corres pondi og divide au div ide-corre sponding
x2(3)
10 c3 t ype i. 11 end of 52. 12 w rite: / '51 : ' , 51-e1, si -ea , 51-c3. 13 wri te: / ' 52 bef ore move- cor r espondi ng:' . s 2~c l . 52-x2, 52-d . 14 move-corresponding 51 t o 52. cod1f 1cat;l o i gual as duas t nst r uczes a seguir
S
In
III A seguir, veja a sintaxe da instrucio compute. Os operada res e operandos devem Z ser separados por espacos. Mais de urn operador par instrucao e permitido.
compute v3 vl op v2 [op vn ].
au
15 * move st- et to 52-c1. "execut a ccnversao 16 *" m ove sl- c3 t o 52-d . "execut a ccnversxc 17 write : 1 's2 after lOOve- corresponding: ' . 52. cl ; 52-x2, 52-c3.
v3
= v2 op v2
v3
[op vn ,..l,
onde
IliDI.
,
s2 before scv e-c crrespondt nc: XYZ s 2 after move- cor r es pondin g: 1234. 56 XYZ
... A linho 14 gero duos instrulioes move; por questoc de dcrerc , elos se o ANALISE,. mostrodosdentro de co mentc rlc s nos linha s 15 e 16. Normolmente, voce neo pode ver asses Instrocces move; 0 sistema as gero e as executa outomoticomente "!'nos bcstldores". Uma instrulioo move sera gerodo para coda componente de string de compo de receblrnentc que tenho 0 mesmo nome de um componente no string de compo de envio . Nesse coso, c1 e c3 fem os mesmos names, por isso duos instruc;6es move se c gerad as. As convers6es de dodos sao executados , como seriam se voce mesmo five sse codtficcdc essas lnstrvcces. 0 cornevdo de c2 permcnecerc inolterodo depots de cond ufda a instruc;60 nove-cor-responding.
Adi;oo
Subtrocec
/
** DIV MOD
Multiplicac;eo Dlvtscc
Expcnencicccc
Se duos strings de compo forem exetamente correspa ndentes, noo utilize move-co r -respond! ng para mover os dodos de umo porn outra. A utilizoc;oo de move e mois ehclente.
Execufondo c6lculos
V oce pode executar calculos utilizan do as seguintes instrucoes:
comput e add au adc- cor re spondt ng
Alem disso, existem funcoes predefinidas. Para uma lista, obtenha ajuda utilizando Fl p ara a palavra-chave comput e. A precedencia do opera dor e cia for~a coma segue:
Funcces prede finidas sao avaliadas , em seguida a expone c ciacac, em seguida ", / , DIV e MOD, na ordem em que ap arecem na expressao, em seguida + e - na orde m em que apar ecem na expressao.
~~
...... ,...
-- - - ----. Il"'''''"'IDES,
,.",usO" "AlCULOS
307
v2
v1
onde:
52
sl
VIDa instrucao add e gerada para cada p ar de componen tes com 0 mesmo nome em 51 e 52. As conversoes de dados sao executadas da me sma maneira que oco rre com a instruc i o add. Subtract-corres pondi ng, m ultlply-ccrres pendin g e divide-corresponding operam de forma semelhente. Exemplos sao dadcs na Lisragem 9.13.
ENlRIDi~
1 report ztx 0913. 2 dat a: fl type i val ue 2, 3 f 2 typ e i value 3, 4 begfn of 51, S cl typ e 1 value 6 c2 ty pe f val ue 7 c3 ty pe 1 val ue 8 end of 51. 9 begf n of 52. 10 c1 ty pe i val ue 11 x2 .typ e f value 12 c3 t ype f valu e 13 end of 52. 14 add fl 15 subt r act fl 16 llIIltipl y f2 f2 17 div i de 18 add- corres pondi ng 51 19 subtract corr e5ponding sl 20 mult i ply . corre spond1ng s2 21 divi de-c orresponding s2
100, 200. 300, t o f2 . f rom f 2. by f lo by fl . t o 52. f rom sz, by 51. by s1. write wr t te write write write : write : w ite : r w 1t e: r
I I
/ / / / / /
f2 . -fl fica i nalterado rz . f2 . f2 . s2-c l , 52-x2, 5 2~ c3 . sz- ct , sz-sz, s2- c3. sz- ci , s2-x2 , s2-c3. sz- ei . s2-x2, sa-cs.
308
309
6
3 110
configurado co mo '01 ' . Jo1 que as datas sao sempre arm azenadas utilizando 0 formato inte mo YYYYMMDD, 0 valor de dia da data em d2 e. co nfi gurado como ' 01' . 0 resu lt ado e. que d2 contem u ma data igual ao prime iro dia do mes atu al.
Na Iinha la, 1 e sub tr aido de d2, considerando a data do ultim o dia no mes an te rio r.
200
330
100
1,0 00
ZOO
200
300
9, 000
100
ZOO
300
Cclculos de dolo
Uma variavel de data (tipo d) p ode serutilizada dentro de express6 es mat emdticas. Atribu ir a resultado de urn cdiculo de data a uma varidvel compacrada dara a diferenca em dias. Urn exemplo e dado na Listag em 9 .14.
Atribuic;ao dinamica
N OYO'" lUK ~ O
Urn sfmbo lo de compo e urn indicad or que voce pode dinarnicamen te atribuir a um cam po. Depois do ctribuicc o, voce pode utilizer a sjmbolc de compo em z quolquer luga r de seu programo em vez do nome real do campo. Utili e 0 instruc;:60 fi el d- symbol para definir urn sfmbolo de compo e utilize assi gn para otribuir urn compo a ele. 0 nome do simbo lo de campo deve ccm eccr e term inor co m a sinal de menor que e sinal de mo ior que . A Ustogem 9 .1 5 contem urn exemplo simples.
~NTlADA'" Listag em 9.14 Colculos de doto que util izam a vcr tcvel de data dentro
,. de um c61culo
I report ztx0914 . 2 t ype- pools ztd . 3 data : dl like 4 d2 li ke S nurn_days t ype 6 dl d2 " sy ~ d atum . I 8 subtract I f rom dl. 9 d2+6 ' 01' . 10 subtract I f rom ea. 11 12 nlml_days .. sy~datum 13 write / nurn_days .
sy-datUlll. dl, p.
e uma referenda
2 3 4 5 6 I
report ztx 0915. dat a fl(3) value 'ABC'. field -symbol s <t> , -<f::o pode agora s er usado no lugar de fI assi gn fI to <f ::o. write <t> . "escreve 0 ccntenco de fI -a t r i bui urn novo val or a fI <f::o ' X Z'. Y write / fl.
S.liDI~
IHius~ ~
IHilll~ ~
N a linh a 2, a ins rruc ao type -pool s faz com qu e a constante ztxl_am algamat ion_date seja inclufda no programs.
A linha 4 at rib ui a campo fl ao simbolo de campo <f >. <f> agora indica o arm az enam enro da variavel fl e pode ser urilizado, em vez de fl, em qualqu er lu gar do programa.
A linha 5 escreve <f>, fazenda com que
A linha 6 mo difies A linha 7 escreve
0 0
e atribufda a dl e d2.
Na linha 8, a data de ontem e. calculada subtraindo-s e 1 da data atu al. Na linha 9, urn subcampo em d2 no desl ocamento 6 co m urn comprimento de 2 (comprimento obeido a partir do camp o de envio) e
-- ....... _... .
310 , API ENDA EM
21 OIlS ABAPH
311
Voce pode ut ilizar stm bolcs de campo para criar programas muitc genericos. Suponha, par exemplo, que voce queira criar urn pr ograms que aceite urn nome de tabela como urn parimetro de entrada e exiba 0 conreedo. Voce DaO poderd codificar os nomes de campo na instrucao write, porque eles serao diferentes em cada tabela. Em vez disso, voce podera utilizar urn simbolo de campo na instrucao write para referir-se 010 campo de uma tabela .
IFasa
Utilize compos do mesmo tipo de dodo, quando possivel, po re evitor cc nversees. Utilize move-cor -respond! ng para mover os compos de uma string de campo para umo outre, quand o as compon entes tern 0 mesmo nome mas os tipos de dodos e com primentos nco coincidem . Utilize a instrulScO clear para otribuir volores iniciois podreo a uma vc ricvel ou string de campo.
_
Nao move vclores inv61idos para campos.
Resumo
As varidveis de sistema sao arm azenadas na est rut ura sys t. Voce pode pesqui sar as descricoes dos campos e seus elemen tos de dados a fim de localizer 0 campo desejado. Esse procedimenro pode ser utilizado para localizar arraves dos campos de qualquer tabela. As instrucoes de atribuicao sao cl ear, move e mov e-co rresponding. Cl ear atribui valores iniciais padr ao a uma varifvel ou st ring de campo. Voce tambem pode utiliza-la para preencher urn campo com qualquer caracrere ou com N Ulls. A instrucao move tambem pode ser escrita com o ". Mulriplas atribuicoes em urna unica linha sao permiridas, como vl " v2 " v3. As con versoes sao automaticamente executadas, quando necessario. U rn nome de string de campo sem urn nome de componente e tratado com o uma varidvel do ripe c. Para mover c s dados ent re strings de campo, que correspondem exatamen te em numero de componen tes, tipo de dado e comprimento de cada componente, utilize move. Para mover os dado s en tre str ings de campo com componentes que tern (peIo menos urn component e} o mesmo nome , mas com tipos de dados diferentes ou comprimentos, uti lize move-corres pondi ng. Para acessar os bytes individuais do valor de urn campo, utilize urn subcampo . Urn subcampo pode ser utilizado como urn campo de envio ou de recebimento ou ambos . Voce pe de executar calculos com utilizando compute, add, subtract, m ipl y,di vide,add -c orrespondi ng, subt ract- cor re spondi ng, m t i ult ul ply -c or re spondt og e divi de- cor r espondi ng.
P&R
o o o o
o
Posso utilizar a instrucsc clear para configurar Urn valor com espacos em branco ou zeros, ma s existe uma instrucao que pode configurar um a vari avel com 0 valor an terior) por mim especificado, utilizando a adi~o value na instrucao data ?
DaO
Te cn icamen te, sim, cuidara. En rr eran ro, a medida que voce co difies m ais pr ogramas, as vezes, voce podera inadver tid am ente atri buir uma string de campo de forma incorreta util izan do move. Se conhecer os byt es de preenchimentc e como eles afet am sua satda, talvez felizmente voce seja capaz de reconhecer a causa de seus pro blemas e nao precise recorrer a urna "modificac;ao" para fazer com que 0 programs opere adequadam ente.
312
313
o o
Parece estranho 0 faro de eu poder atribuir valor es invalido s as varidveis. 0 qu e acontecerd se eu utilizar urna dessas variaveis que tenha urn valor Invalid o? Q ualquer coisa p oderf acontecer. Eu nao escreveria urn programa que con fiasse intenciona lmente em val ores invalidos. Por exemplo, nao ren te uti lizar urn valor de data especial de x para indicar algo especial como uma data ausente. 0 comporramento de seu pro grama toma-se imprevisivel quando voce ultrapassa os limites admissiveis do idioma. As mensagens de sintaxe geralm ente nao indicam 0 que hoi de erra do com meu program a. E minha culpa ou 0 verificador de sintaxe, as vezes, deixa a desejar? Vamos apenas dizer... nfo e sua culpa. Minha mensagem favorite exxxx i s expected. Na verdade, significa "xxxx ndo e esperado". Encto, quando essa mensagem aparecer, insira a palavra nao e ela ficara corre ra.
ET A H RAD .... Listagem 9.16 Este c6digo ilustra a utillzoc do de algumas vcricveis b6sicas de sistema
o
o
Wo rkshop
report zt y0916. tables ztxlfal. par amet er s l andl like ztxlfal-1andl obli gatory def ault 'US'. select * from ztxt005t where 1and1 '" 1andl and spres > sy- langu . write: / ' Description:'. ztxt005t-landx. endse1ect. if sy-subrc <> O. wri t e: / ' No desc rlptions exi st for country' . l andl.
endt f
que aprendeu neste capitulo . A se~ao Teste oferece perguntas para ajudar a solidificar seu entendimente do cont eddo abordado e a se~ao Exercicio permite que voce pratique a que aprendeu. Voce pode encontrar as respostas as perguntas do teste e ao exercicios no Apendice B, "Respostas as perguntas e aos exercjcios".
Te ste
1. Qua l seria a outra for ma de mover urn valor de uma variavel para outra? 2. 0 que deve separar operandos e operadores para que 0 calculo ocorra?
Exerdci o 1
U tilizando 0 proced imento denominado "Como localizar as descricoes de uma estrutura au tabela" para localizar:
1. 0 nome do campo de bloco Payment na tabela lfa l. 2. 0 nom e do campo chave Gro up na tabela knal.
3. 0 nome do campo de sistema que contem a localizacao de uma string . 4. 0 nome do campo de sistema que conrem a ID da mensagem . 5. 0 nome do campo de grupo de material na tabela mara.
10
Instru~oes
de controle comuns
O b jetivos do capitu lo
Depois de concluir este capitu lo. voce sera capaz de: Codificar as insrrucoes de con tro le comuns; f, case, do e whi 1e Controlar a sequencia do programa utilizando exit, conti nue e check Codificar especificacoes simples de comprimento e posicao na instrucao wr; t e
Utiliza nd o a instruc;a o if
A instrucdo if no ABAP /4 te rn operadores relacionais para igualdade e desigualda de e op erado res relacionais especiais para cornparacoes de string e para mascaras de bit.
As comparoc;6es de bit nco s60 frequen ternente utilizodos no ABAP/4 e, po r isso, noD s60 a presentados oqui. Entretonto, s60 obordodas com deto lhes no dcc vrnentc cco de pclc vrc -chcve do ABAPI4, sob 0 titulo "O perodores relac ionois para ma scara s de bit".
316
317
Sintoxe do instru..ao i f
'" A seguir, veja a sin taxe da instrucac if.
Tabela 10 .1 Ccnnnvcccc
Compara fjao Formas a lternativas Verdadeiro quan do
S
m
[elsei f expo ]
[el se .
---
v2
---J
endif.
not vI between v2
and v3
onde:
exp
Na Tabela 10.1, vl e v2 pode m ser variaveis, Iiterai s ou strings de campo. N o caso de variave is a u lit erais, a conv ersao automatica sera executada, se 0 tipo de dado ou co mprime nto nf o corresponderem. A s Strings de campo sao tratadas como variaveis do ripe c. A co mparacao de da is valores que nao tern 0 me smo tipo de dado resultara em uma adaptacao de ripe automatica e in tern e de urn ou de ambos os valores. Urn tipo tera p rec edencia e ditard que tipo de conversao sera executada. A ordem de preceden cia e: Se urn campo for do tip o f. Se urn camp o for do tipo P.
0
0
O s parenteses p od em ser utilizados. Carla paren tes e deve ser separado por urn espa~o. Por exemplo, if ( f1 = f 2 ) or ( f l :: f3 ) esta corr eto e if (fl "' f2 ) 'or (fl "' f3) esta inco rreto. A s variaveis po dem ser comparadas com espa~os em bra n co au zeros utilizando a adi~ao i s in it ial. Por exemplo, if fl i s in itia l sera verdadeiro se fl for do ripe c e estiver em branco. Se fl for de qualq uer outro ripe de dado, a instrucac sera verd adeira se fl co nt iver zeros. Para uma negacao, not dev e preceder a expeessac 16gica. Par exemplo, if not fl i s in itial esta corr eto. if fl t s not in iti al est3. incorreto.
tipo t.
Se urn campo for do tipo d, 0 outro sera convertido para 0 tipo d. Os tipos c e n, entretanto, nao serfo convertidos. Eles sao diretamente co mp arados. Se urn campo for do tipo t , 0 ou tro sera convertido pa ra 0 tipo t. Os tipos c e n, en tretanto, nao serao convertidos. Eles sao diretam en te co mparados. Se urn campo for do tipo n, ambos sersc convertidos para 0 tipo P (nesse ponto, 0 outro campo po derd ser apenas do tipo C ou x). Nesse pont o, urn campo sera do tipc ceo ou tro sera do tipo x. x e convertido par a 0 tip o c.
As variaveis podem ser comparadas com valo res nulos utilizando a adiljao ; s nul l. Por exemplo, if fl is nul l. O s operadores 16gicos p ara operan dos de qualquer tipo sao list ados na T abela 10.1.
As conversoes seguem as mesmas regras daquelas que sao realizadas pela instrucao move. As co nve rs6es de tipo sao completamente detalhadas na documentacao de palav ra-c have do ABAP/ 4, sob 0 titulo "Relational Operators for All Data Types".
EQ
N >< E,
6T LT
vI for iguol a v2 vI nco for iguo l a v2 vl for moior qu e v2 vi for menor que v2
318
"API'
Tlpo de da do
p
319
SAiDI ~
INiuSE ~
, .,
N emeros de urn a nove d igito s de comp rimento N c mercs de 10 au ma is d igitos de com prim ento
Todos os outros
A s co nversees de tipo para [iterais segue m a mesma ord em de p reced encia e as me smas regra s de conversac sao apl icadas. A Listagem 10.1 m ostra urn prograrna de exemplo utilizando os operadores comuns de comparacio. Uma conversac inesperada tambem e demc nst rada.
N a linha 12, 51-x e comparado com 52- x. Ambos sao do tipo c, comprimento 1. Nenhuma conversjc e executada e os dois sao iguais. A linha 18 esemelhanre, mas utiliza 0 operador bet ween. 0 valor Xfica na faixa de Xa I e, sendo assim, 0 teste sera verdadeiro. A linha 24 compara as strings de campo 51 e s2 como se fos sem varidveis do ripe c. 0 valor de 51 e portanto X I e 0 valor de 52 e Xl. Y Eles DaO sao semelhantes. Na linha 30, a literal 0 e comparado com urn espacc- 0 zero e armaze nado intern amente como ripe i, 0 outro como tipo c. De acordo com a ordem de preceden cia, 0 tipo c e convertido para 0 ripe t. Converter urn espacc em branco pa ra urn inteiro resultara em urn valor zero e a comparacio provara ser inesperadamenre verdadeira .
x value 'X' , 4 Y valu e ' Y' . z val ue '2 '. 5 6 end of 51, 7 begin of 52, 8 x value 'X'. 9 z val ue 'l '. 10 end of 52. 11 12 1f sr -x 52x. 13 wri te: / 51- x. '. ' , 52-x . 14 else . 15 .... ri t e: / 51-x, '0'. 52-x . 16 endt f.
Exibind o convers6es
TEUO "
IOYO '"
utilize
0
Ao executor umo on6 fise de prog rorno, voce poderc determiner onde ocorrem as ccnversces dent rode urn programo . Para executor umo on61isede progroma, segu inte procedimento.
17
18 1f sf -x bet ween sz-x and s2- z. 19 write : / sl - X, 'i s between', sz-x, ' and' , sz-e . 20 else . 21 write: / s l - X, 'i s not bet ween' , sz-x, 'and' . sz-a . 22 end1f. 23 24 1f sl s2. compa rando st rings de campo , byte per byte 25 write: / 'sl s2' . 26 els e. 27 write : / ' s l<> s2 ' . 28 endi f. 29 30 i f 0 = ' ". "At en<;!o par a 0 que segue 31 write: / '0 32 else. 33 write: / '0 <> " 34 endif .
I. Comece no ABAP/ 4 Editor: Initi al Screen (Tela Inicial). 2. D igite 0 nome do programa a ser analisado no campo Pro gram. 3. Selecio ne 0 caminho de menu Ur iliries-c-Program An alysis. A tela Conversions: xxx:o: sera exibida. 4. Pressione 0 borao Conversions . A tela Conversions : x;cca: sera exibid a. T odas as convers6es sao resu midas nessa tela. A primeira coiuna conrem tipos de campo co mparados. 5. De urn clique dupl o em qualquer linha para visualiza-la dentro do programa.
A primeiro coluno no telo Conversions: lOOOOC nlio mostra qual conversec e executodo. Mostro simplesmente os tipos de dodos erwclvldcs no converse o.
321
Utilizando
fl Sf;
Voce utiliza el seif para evitar 0 aninhamento de its. 0 aninhamento de its pede dificultar sua pr6pria leitura e manutencao . (Veja a Listagem 10.2.)
ENTRADA.... Listagem 10.2 A utilizCl;ao de el setf e mais dc rc do que a utiJizac;ao ,. de its oninhodos
1 repo rt ztxl002. 2 parameters: fl def ault 'A', 3 f2 default 'B' , 4 f3 defau lt 'c.
I 6 if
fl f 2.
Sig nifl(o
V. ..dodelro
q ua nd o
vI CO v2
Co nl6m se rneree
7 els e1f
8 elseif 9 else . " end1f. I. 11 12 - es l1nhas 5-9 fazem 0 mesmo Que as li nhas 14 26 13 14 if fl f2 . 15 write : / fl . ' . ' f 2. 16 else . 17 if n f3 . write: / fl, ' .', B . 18 19 else. 20 if f2 .. f3 . 21 write: / f2 . ''' ' , f3 . else . 22 23 w t e : / 'all fi elds are diff e rent ' . ri 24 endif . 25 endt f. 26 endif.
fl f3 . f 2 .. f3 .
write: / n. ',, ' f2 . write: / n , '. ' rs. write: / f 2, I ", ' f3 . write : / 'all fields are different' .
'1 1 CN '1 2
v1 pod, cooter
coracteres que ntic 'st60 em '12
5im
Noo
'1 1 CA '12
'm
Sim
",,0
'11 NA '12
Nco
'11 CS '12
Contem stril'lg
",,0
'm
Sim
'11 NS '12
NOo
Cont6m podriio
NOo
Sim
NOo
Sim
o
siiDI ~
c6digo na Lisragem 10.2 produz esta saida: Es ses operadores podem ser utilizado s em qualquer expressao de co mpara~ao. Os operadores CS, N CP e NP ignoram os espaCiOs em branco finais e S,
INitISE ~
Se fl
nio disringuem maiusculas de minasculas. Embora voce p os sa utilizar variaveis, co ns tantes ou [iterais com ope radares relacionais para as strin gs de caractere, a Listagem 10.3 utilizara apenas literais para umaexemplificacao mais clara . Ale m disso, para mais clareza, as ins tru coes i f, aqui apresen tadas , ocuparn uma unica linha cads.
--~----
322
323
A linha 18 e falsa porque I ABCD' nao contem nenh um dos caracteres . 'XVI' . na e equivalente a not vI co v2.Portanro, as linhas 22 e 24 sao a negaljao Ic gica das linh as 16 e 18. Ret omando a Tabela 10.3, os operadores CP (conrem padrao) e NP (nenhum padrao) executam uma pesquisa de string que permire caracteres com cor respondencia de padrao. A expressao vl CP v2 sera verdadeira, quan do vl contiver uma String que corresponds com 0 padrao em ,,2. A expressao vl NP v2 sera verdadeira, quando ,,1 nao contiver urna string que corresponda com 0 padrao em ,,2. E equivalente 3: not vI cp vz. Os caracteres com correspondencia de padrao permitidos em v2 sao fornecidos na Tab ela lOA.
Tabela 10.4 Op. roder.s C NP P.
Z .. ope r ador: co
3 wri te / " ' AABS" c o " AB " ' . 4 if ' AABS' c o 'AS'. write 'True '. e lse. write ' Fa ls e ' . end 1f .
5 write / " 'ABCD" co "ABC"' . write ' Tru e'. else . write ' Fa lse ' . e nd1f. 6 i t 'ABCO ' co 'ASC' .
7
B .. ope r ado r: e n 9 write / " ' AA BS" en 10 if ' AABB' en ' AB' . 11 write / "'ABCD" en 12 it ' ABCD' en 'ABC' . 13 14 .. ope r ado r : 15 write / "' AXCZ" ca 16 if 'AXCZ' ca ' AB' 17 write I " 'ABCO' , ca 18 if ' ABCD' ce 'XYZ' . 19 20 .. ope r a do r : na 21 write / " ' AXCl " 22 if ' AXCZ' na 'ABC'. 23 write I " ' ABCO" na 24 if 'ABCD' 'XYI' .
"AB" ' . write 'True' . e lse . write ' Fals e' . e ndif. " ABC" '. wri t e ' Tr ue ' . else . write ' False '. e ndi f.
"
"A B''' .
wr i t e 'T rue' . else . wri t e 'F als e ' . end i f. "XYZ ' " . write 'True ' else . write ' Fa lse ' . end ; f .
Caradere
Utllizado pa ra
Pode co rrespo nder qua lq uer seq uencia de cc rocteres. Pode co rresponder um cntcc caractere . Pode interprete r 0 pr6ximo ccroctere, llterclmente .
"
" ABC' ''. write ' Tru e ' . else . write ' Fals e' . end if . " XY , , . Z' write 'True ' . else . wri t e ' Fal s e' . end; f.
"
# e 0 caracrere de escape. U rn unico caract ere seguinte sera interprerado de forma exata. Urn significado especial, se exisrir, sera perdido. Voce tambem podera utilizar ' -para fazer uma pesquisa com distincdo entre maiiisculas e minusc ulas ou para pro curar os caracter es ", + ou I. A Tabela 10.5 mostra exemplos de como voce poderf utilizar esses caracteres. 0 caractere de escape sera necessario quand o voce quiser executar uma pesquisa com disnncao entre maiiisculas e mimisculas utilizand o C5, N CP ou HP. Voce pod eci tambem 5, precisar do caractere de escape, se quiser executar uma pesquisa de padrao (CP ou NP) para uma string contendo ", + ou #.
Ve rd a deira q ua ndo vl pode conter "a" na primeira posic;ao e "c" na tercelrc. Os dots cc rocteres podem ester em letrc mcic sculc ou em letro minuscule . o O vclqver ca ractere pod e a pa recer no seg unda posic; o.
AHALISE ~
co e 0 operado r que contern exclusivamem e. A linha 4 porque 'AABB' contem apenas caracteres de ' AB'.
e verdadeira
vl CP ' A+C'
A linha 6 efalsa porque ' ABCD' contem urn D, que DaOesta em ' ABC' . As linhas 10 e 12 sao 0 oposto das linhas 4 e 6 porque cn e 0 mesmo que not ,,1 co v2. Portanro, os resultados sao invertidos. A linha 10 e falsa e linha 12 e verdadeira. ce e 0 operador que esd. comido e a linha 16 sera verdadeira se 'AXCZ ' contiver quaisquer caracteres de 'AB I t verdadeira po rque contem A.
A string -ab- ped e occ rrer e m qua lquer lugar dentro de "1. Os dois
ca raderes pode m este r em letra rnciu sculc o u em letro mlnusculo .
111. pode conter uma letra A motusculc seguida por vmo letrc b minuscule.
v1 pod e conter urn ,.
324
325
A utilizacao desses ope rad ores sempre configu ra a variavel de sistema sy-fd pos. Se 0 resultado cia comparacfo for verdadeiro, sy-fdpcs ira center 0 desloca menro com base em zero ciap rimeira correspondencia ou car actere sem correspondencia, C aso contrdrio, sy-fd pos ira canter 0 comprimento de vj. 0 . valor atribuido a sy- fdpos p or cada ope rado r sera descrito na Tabela 10.6. Depois de uma com paracao, sy- f dpos ira comer urn deslocamenro do primeiro caractere au 0 compriment o de v i. Nesta tabe la, " 1st char(vl)" significa"o deslocamento do primeiro caractere de (string ou pa drao) vl ". Entao, por exemp lo, onde esra " 1st char(v l) in v2", significa "0 deslocamento com base em zero do pri meiro caractere de vi, que esta rambem em v2n Length(v l) significa "a comp rime nto de vl". Observe que somente a primeira ca lun a contem as insrrucoes do ABAP/4.
Tab ela 10. 6 Valor atribuida a sy-fdpos par coda operodor
Compa rafjoo
write 'True'. else. write ' Fal se '. endif . write: 'sy-fdpos"' . sy-fdpos.
17
18 * operador: ea 19 write / "'AXCZ" ce " A '. B" 20 if 'AXCZ' ce ' A . B' write 'True'. else. write 'False' . endif . write: "sy-f dpcs", sy-tepcs . 21 22 23 write / "'ABCD" ca "XYZ"'. 24 if 'ABCD' ea ' X Z' . Y write 'True'. else. write 'False'. endif .
25 26 27
if TRUE sy-fdpos
length (v1) 1"chor (vi) in v2 lslchor (vi) in v2 length (v11 P'c hcr (v2) in vi length (v1) 1"chcr (v2) in vi
if FALSE sy-fdpos :
1"chor (vi) not in v2
vi CO v2 vi CN v2 vi CA vz vi NA v2 vi CS v2 vi NS
length (v1) length (v1) P'chcr (vi ) in v2 length (v1) T'chcr (vi) in v2 length (v1)
28 * operador: na 29 write / " 'AXCZ" na " A " BC' 30 if 'AXCI' na 'ABC' , write ' Tr ue ' . else . write : 'sy-fdpos' . Jl 32 Y 33 write / "'ABCD" ne " X Z' " 34 if 'ABCO' na 'XYI'. write ' Tr ue ' . else. write: "sy-fdpos>", 35
vz
vi CP v2
co eo en en ea
A Listagem I DA esemelhante a Listagem 10.3, mas algum as linhas for am adicionadas para exibir 0 valor de sy-fdpos depois de cada comparaclo.
'AB' True sy-rdpcs'ABC' Fal se sy-fdpos . 'AB' False sy-fdpos" 'ABC' True sy-fdpos= ' A True sy-fdpo s" B' ce ' XY False sy~fdpos= Z' na ' A BC' False sy-fdpo sz na ' X Z' True sy-fdpos= Y
3
4
0
4
0
4
ENTRADA~ Lista gem 10.4 Utilizando sy-fd pos para ver a deslocamento do primeiro
cc roctere correspondente au do coroctere sem correspondenclc
1 report ztxl004 . 2 * cperacor r co 3 write / "'MBB " co 4 if 'AABB' co 'AB'. 5 6 write / " 'ABCD" eo 7 if 'ABCO' eo 'ABC' . 8 9 10 * opera dor: en 11 write / "'MBB" en 12 if 'AABB' en 'AB '. 13 14 write / " 'ABCD" en
INillS~ ~
A linha 4, urna comparacac co, e verdadeira. Portanto, sy- fdpos contern 4, 0 comprimento do primeiro operanda-. A linh a 7, tambem uma comparacio co, e falsa por que vi contem valores que nac existem em v2. Sy-fdpos contem 3, 0 deslocament o com base em zero do pri meiro caractere em vi que nao esta em v2. Embora as linhas 12 e 15 sejam as opostas 16gicas das linh as 4 e 7, os valores de sy-fdpos nao serao alterados. A linha 20, uma comparacao ca, e verdadeira porque vl contem urn caractere de v2. Sy-fdpos contem 0: 0 deslocamento com base em zero do primeiro caractere em vi que tambem esta em v2. Na linha 24, vi nao conte m nen hum dos caracteres em sy-fdpos contern 4: 0 comprimento de vi .
"AB'"
write 'True '. else . write 'False '. endt t . write: ' sy- f dpos=' , sy-fdpos.
" A BC'"
write 'True' . else. write ' Fal se '. endif. write: "sy-fdpus", sy-fdpos.
"AB' ''.
vz, portanro
write ' Tr ue ' . else. write 'False' . endt f , write: "sy-fdpos>", sy-fdpcs .
"ABC'"
A linha 30 e a nega~ao 16gica de urn teste de ca. ' AXCZ' contern urn valor de 'ABC' e, portanto, urn teste de ca seria verd adeiro. Negar esse
326
327
resultado dard falso. Sy-fdpos e configura da para 0 deslocamento com base em zero do primeiro caractere em ' A xez qu e tambem est a em ' ABC '.
I
EMTRADA~ Lista gem 10.5 A j nstru~a o case exe cuta uma serie
1 report ztxlO05. 2 paramet ers fl type i default 2.
3 4 case fl. when 1. 5 when 2. 6 when 3. 7 when others . 8 endcas e . 9
de
compara ~6es
A linha 34 e, novamente, uma negacao 16gica de urn teste de ca. ABeD nao con tern urn valor de ' X e. po rtanto , urn teste de ca seria false. VZ' Negar esse resultado dara verd adeiro. Sy- f dpos e configura da par a 0 comprimento de ABeD ' .
I I I
is not 1. 2. or 3' .
10
fl "'l. elseif fl .. 2.
elseif fl ,,3.
15
16
else.
w rite/ 'fl" 1' . write / 'fl 2'. write / 'fl z 3'. writ e / 'fl i s not 1, 2. or 3' .
S
m
[ when ot hers.
endcase.
--- I
S io ~ AA
seruma variavel, literal, consrante ou string de campo.
fl = 2 fl .. 2
onde:
vl OU '12 podem
ANiuSE ~
--- representa qualquer mimerc de linhas de c6digo. Ate mes mo zero linhas sao permitidas.
N a linha 4, comeca a inscrucao case e fl ecomparado com 1, 2 e 3, ern seque nci a. A linha 6 faz a corr espo ndencia e executa a instrucao w -t te imer diatam ente depois dela. As insrrucoes when rema nes cen tes sao ignoradas. A proxima linha executada e a linha 12.
a s seguintes pontos se aplicam : Sornen te as instrucoes apes a prirneira corresponden cia wh en serso executadas. w hen others corre spondera se nenhurna when pre ced ente corr espo nder. hen Se when ot he rs nao estive r codificada e nenhuma w cor resp on der, o processamento continuard com a primeira instrucao apes endcase. As expr essoes nao sao permiti das. A s Str ings de campo sao tra tadas como sendo variaveis do tipo c. Case
10
e mu ito
e qu e em cada
t f /el s ei f, voce pode esp ecificar uma expressgo complexa. C om case, voce
pod e especi ficar somen te urn anico valor a ser comparado e os valores sao sempre comparados quanto a igualdade. Urn exemp lo sera. for necido na Lista gem 10.5. .
S
m
exit.
...
328
I APRE ND EM 21 DIAS ABA PI4 A
329
EHTRAOI~
Os seguintes po nt os se aplicam: Os loops do podern ser aninhados por urn numero ilimitad o de vezes. ext t imp ede a processamento de loop posterior e sai imediatamente do loop atua]. Nao tennina 0 programa quando dentro de urn loop do. 0 proces samento contin uaci na pr6xima instruclo execuctvel depois de enddo. Voce pode criar urn lo op infin it o p ela co dificacao de do sem qualquer adiljao. Nes sa situacao, utilize exit dentro do lo op para terminar a processamento de lo op . Modificar de loop.
0
o
Sliol ~
Hi
IHiuSE ~
.
Exit impede 0 processamento posterior, sendo ossim, exit no linho 3 impede que a linha 4 seja executado.
pr o cessam ento
~empre_lI~pede processamentos pos teriores. Dentro de estruturas de loop, tal instrucao rgno ra 0 proces samento de lo op introduzido pelas instrucoes com o , ~op, se l ec t , do e wh'i I e. Dentro de sub -retinas, ignora as su b-retin as introduzida s por FORM. Seus efeiros em outras situacoes. serao com plet ame nre explorados a medida que surgirem.
ex; t ~ode ser ut ilizada em varies situacoes. Essa ins trucao p ode ter
Dentro do lo op, sy- t ndex contera a numero de iteracao atual . Por exemplo, a primeira vez at raves do lo op , sy- in dex sera 1. A segunda vez, sy-i ndex sera 2 e assim por dianee. Depoi s de enddo, sy- i ndex ira co nte r 0 valor que tinha an tes de entrar co m 0 lo op. Com lo ops do aninhados , sy- i ndex ira conter 0 mimero de iteracio do lo op em que e util izad o (veja a Listagem 10.7) .
Utilizando a
instru~ao do
=' ,
Sintoxe do instruljOo do
!!
;:
~
~
lexft .I
enddo.
onde:
e um a variave j. literal a u const ante. s e uma string de cam po com as componen tes c1 e c2.
vI
11 ~ uma varidvel. O s componentes de s podem ser convertidos para o tipO de dado e comprim en t o de 11.
8 9 do 4 times. w i t e: / 'out er r loop, sv-tnoex =' , sy-tndex , 10 do 3 times. 11 write : / ' in ner loop, sy-in dex - ", sy -f ndex. 12 enddo. 13 endoc, 14 15 "neve f t nhe 16 write : / " . 17 do 10 times. 18 write sy - f ndex. 19 if sy- index = 3. 20 ex; t.
21 22
endi f. enddo.
330
331
6
7
endt f. enddo.
99 3 99
sy- i ndex =
sy-tndex = sy- t ndex =
, ,
1
1 1
~,
sy-index ;:
sy- t ndex ..
=
,
3 3 3
1
sy-i ndex ..
sv- tnoex =
sy-tncex ..
sy- tn dex
,
3
4 1
i nner loop, sy-tndex " i nner loop . sy-t ndex " i nner l oop. sy-tneex ..
1
z
-,
3 3
A s alteracoes [eitas 41.0 valor de sy-t ndex nao afetam 0 controle de loop. Por exem plo, se voce codificar do 10 times e durante a primeira passagem do loop voce configurar 0 valor de sy-f ndex como 11, ele mantera esse valor ate que a instrucao enddo seja execut ada. N esse ponte, 0 valor sera configu rado n ovam ente como 1 e, em seguida, incre mentadc como 2 e 0 loop co ntinuara 0 processa me nto como se voce nac 0 tivesse alterado em absol ute .
,
I
Se esse programa for executado , ele ira realizar urn loop infinite e a sessac sera sincronizada. 0 termino da tarefa SAPGUI ou at e mesmo a reinicializacao nao interrompera 0 programa, ji que ele e executado em urn processo de trabalbo no servidor do aplicativc e nac em seu PC. Se voce reinicializar e eferuar logon novamente, vera que (se estivesse no editor ao reinicializar} nao conseguira nem ao menos editar ta l pr ograma. Sua sessfc de logon ainda estard ativa no servidor do aplicativo e ainda tera. 0 bloqueio em seu c6digo [o nte. Depois de aproximadamente cinco au dez minutos, sua sessac de logon ira expirar e, enrao, voce conseguird editar seu c6digo-fonte novamente. Entretanto, 0 programa podera ainda estar sendo executado no processo de trabalho, o que diminui a velocidade do siste ma. Finalmente, seu program a consumira a capacidade maxima de CPU permitida em sua configurscac e 0 processo de trabalho reiniciara por si s6 . Para terminar urn loop sem fim, voce devers ter pelo me nos duas sess6es abertas e que tenham sido criadas atraves do caminho de menu Sysrem- c-C reate Session. Voce devers inicia-las antes de executar seu programa. Se voce estiver em urn loop infinite e nao tiver uma outra sess ao em execucao se ra tarde dema is. As sess6es criadas ao efetuar novamente urn logon nao funcionarao.
SCRHNCAM ~ lnicie ogora a ScreenCom " How to Termi nate an Endless loo p".
caminho de
2. Minimize sua nova sessao e a deixe no fundo ate precisar dela. Voce
pede agoIil testar os programas com impunidade.
3. Agora execute urn prog rama que contenha urn loop sem fim, como ztxlooa. Voce vera uma arnpulheta quando seu ponteiro estiver sobre a jan ela. Observe 0 num ero de sua sessao na barre de status na parte inferior da janela. 4. Mantenha pressionada a TeclaAlt e pressione Tab vi rias vezes ate que
o foco fique no leone R3 representando sua out ra sessao .
ENTRADA ~ Lista g e m 10.8 Urn loop sem tim poder6 ser frustrcnte
so vber interrompe-lo
I r eport thIOQ8. 2 do. 3 'Ilrite sy-teeex . 4 if sy-1ndeK .. O. 5 exit .
se
voce n60
5. Solte a tecla Alt. 6. Digic e / 0 no campo Command na barra de [erram entas Standard.
7. Pressione a Tecla Enter. A caixa de diilogo Overview Of Sessions aparecera. Ela contem uma lista de suas sessoe s, A esq uerda de cada uma esta 0 numero assoc iado de sessao.
-~
-~
-- - --- -
334
335
10
11 12 13
I, 2, 3, 4. 5, 6,
15 16
17 18 19 20
15 do 3 times veryt 119 fl from s-e t next s- ea 16 varyi ng f2 from s-ez next s-ea. 17 write: / fl, f 2. 18 add: fl TO tott , 19 f2 to t ot2. 20 enddo. 21 wri t e: / ' - ~ - -- - - - -- -- - ---- ---- ' , zz / toU , tctz.
"
21 22 23
if sy-index .. 6. s -c6 .. 99. else. fl=fl*l . endif . ass ign component sy-tndex of structure s t o <f:> . H< f> i ndfca agora write <f>. Hum componente de s enddo.
24 write / " . 25 do 6 times varyi ng f l f rom s- et next s-cz . 26 wrfte f1. 27 enddo.
AHillSE~
AHilll~ ~
fl recebe quolque r outro componente de s comeccndc com 5-c 1 e f2 recebe qvclq uer o utre compo nente ccmeccndo com s-cz.
Na linh a 14, os valores sao lidos dos componentes da string de campo s para fl-, urn por vez. A lin ha 18 modifica o valor de cada fl, multiplicando esse valor por 2. ultimo valor de f1 nao modificado. Em vez disso, ao componente de envio e atribuido 0 valor 99.
Vo ce pode modificar 0 valor de 11 ou 5 dentro do loop do . .. vary ; ng/ enddo. Q uando a insrrucao enddo e executada, 0 valor atual de 11 e retornado ao component do qual oeio, independentemente se foi modificado ou nso. Na Listagem 10.11, 0 relat orio ztxlO l 1 iiusrra essa funci onalidade.
fNTRADA~
L1stagem 10.11 0 valor otocl de fl e escrito novamente no componente de envio quando enddo e executada
A linha 20 atrib ui urn com po n en re de s ac sfmbolo de campo <f>. A primeira vez atraves do loop, 0 componente 1 (cl) e atribuldo a <f>. Na segunda vez, 0 componente 2 (c2) e atribuido e assim por diante. A linha 21 escreve 0 con teudo do componente que enviou seu valor para f l. Na listagem de saida, voce pode ver 0 conteudo de cada componente de 5 antes que enddo seja executada.
Quando a instrucao enddo e executada na linha 22, substitui 0 con teudo do componente de envio.
0
conteudo de fl
1 rep ort zt xlOl l. 2 data : fl ty pe f , 3 begin of s , 4 cl typ e t 5 cl typ e t 6 c3 typ e t 7 c4 typ e i 8 cS typ e i 9 c6 type; 10 end of s . 11 fi e l d- symbols <f>.
I, 2, 3. 4, 5, 6,
Novamente, variar atraves do loop (linhas de 25 a 27) exibira 0 novo .conteudo de S . Isso mostra que 0 valor de f1 den tro do loop sobres creve sempre 0 conteudo 'd o componente de envio. Uma instrucao ex; t dentro do loop ndo impedira qu e 0 conreudo modificado de f1 seja escrito de volt a para 0 campo de envio. A iinica maneira de deixar 0 loop sem 0 conted do de fl. sobrescrevend o 0 campo de envio, e executando uma instrucao stop ou um a in srru cac de mensagem de erro dentro do loop (ambas abrangidas em capitulos posreriores) .
336
337
instru<; 0 6
w 1e hi
Sintoxe do instruc;ao whi1e en A seguir, veja a sintaxe da insrru cao whi 1e.
S
m ~
whi 1e exp [ vary f1 f rom s-c1 next s- et [ vary i 2 fro m s2-cl next s2-cZ .. ]
extt ,
endwhl 1e.
onde:
exp
1 r eport ztx l 012. 2 data : 1, _ "caract eres tnt ct et s 3 r, "cerect er es f 1na1s 4 done. "f l ag de ccnctu r dc 5 par ame er s p(25} default' t Vendor Humber ' . 6 while done s ' , "a expressac e aval 1ada primei r o 7 vary 1 from p+O next p+l "em segui da . as atr ibu1~ 6es vary sao executadas 8 vary t f rom p+24 next p+23. 9 1 f l " andt .. 10 l a t := ' -' . 11 e lse . 12 done ' X' . 13 endif .
euma String de campo co m os componentes c1 e c2. fl e urna varidvel. Os componentes de s podem ser con vert idos para
o tipo de dado e comprimento de fl . . . . represent s qualquer numero de clausulas vary compleras.
14
endw e . hil
15 w rite: / p,
s ~ liol
AHiuSE ~
a s seguint es ponte s se aplicam: Os loops whi 1e podem ser aninh ados por um mimero infinite de vezes e tambem podem ser aninh ados dent ro de qualquer ourro tipo de loop. exi t impede 0 processamento de loop posterior e sai imediatamente do loop atual. 0 processamento continua na pr6xima instrucao execaravel depo is de endw 1e. hi D entro do loop, sy-t ndex ira center 0 ndmero de itera~ao atual. D epois de endwh i 1e, sy-i ndex ira center 0 valor que tinha antes de entra r com 0 loop. Com loops wh i 1e aninhados, sy- t ndex ira center 0 numero de iterar;ao do loop em que e utilizado. endwh i 1e sempre copia envro.
0
As linh as 2 e 3 definem duas variaveis com urn de ice caractere 1 e t. A linha 3 defin e urn flag para indicar quando processamento e conduido. A linha 5 define p como caractere 25 corn urn valor padrao. N a linha 6, a expressdo na instrucl o wh i 1e eavaliada ern primeiro lugar. Retoma verdadeiro, pela prirneira vez, atraves do loop. As atribuicoes nas linhas 7 e 8 sao ent jc executadas. A linha 7 .atribui 0 primeiro caractere de p para 1 e a linh a 8 atribui 0 ulti mo caractere para t . Se 1 e t estiverem ambos em bran co, a linh a 10 atr ibuira urn trace aos do is. Se nao estiverem, a linha 12 atribuira urn ' X' ao flag done. N a linha 14, endwhile copia os valcres de 1 e t de volta ao p.
Em urna inStrUCI3.0 wh i 1e contendo urna expresssc logica e uma adicao varyi ng, a expressao logica e avaliada primeiro. while e muito semelhante a do. Aqui, ela e utilizada para colocar urn num ero igual de traces em ambos os lados de uma string.
338 I
339
(Igu ra 1 0 1
A instro~Oo
13
endtf ,
cont inue
pula pore 0 finol do loop, ignorondo todas as jn~6es depois delo pore 0 possogem do loop cwa l.
"
IAiDA ~
enddo.
2
4
5 10
Sinta xe do instrUl;60 cont i nue en A seguir, veja a sintaxe ciainsrrucfo conti nue. Pod e ser utilizada dentro de um a
A ~ HiuSE
A linha 2 define urn pardmetro de entrada p com 20 caracteres de comprime nto e atribui a ele urn valo r padrao.
Z
-t
do, while, select ou l oop. (A instruciio l oop sera abrangida n o pr6ximo capirulo.)
[do/ whil e/ select/l oop]
conti nue .
[enddo/ endw h11eI endse1ect j end' oop)
primeiro
eatribuid o a n.
loop
: ou I.
A linha 9 pula diretamente para a linha 14, faz.endo com que seja repetid c utilizando 0 proximo caractere.
0
c ode:
._ ~ representa qualq uer num ero de linhas de c6digo.
Se a linha 8 nao for verdadeira, a linha 11 sera executada e sera verdadeira se 0 pr6ximo caract ere for 0 mesmo que 0 caracte re atu al. A enddo co pia os valores de c e n de volta para p e 0 loop vezes de urna s6 vez.
erep etido 19
Utilizando a
instru~a o
check
A Lisragem 10.13 esemelhante a uma instrucao goto. Ela executa urn salto para 0 final do loop arual. Est e programa remo ve caracteres duplicados, como dois-pontos e barns invertidas, de um a string de entrada.
A instrucac chec k e codificada dentro de urn loop. Ela pode atuar de fo rma mu ito semelhante a cont inue, passando 0 con trole imediat amen te ains rrucio de terminaqao do loop e desviando das in strucoes intermediaries. Diferente de cont i nue, ela aceita um a expre ssjio l6gica . Se a expressao for verdadeira , nao fara nada. Se for falsa, pularf para 0 final do loop. 0 efeito da instru cao cheek emostrado na F igura 10.2.
Fi g u r a 10 2
A instru o check e
umoin~60
continue
condition al. f lo soltor6 poro 0 final do loop se a expressoo l6gica lor Io/so.
enddo.
.~
... -;.""
o c6d igo na Figur a 10.2 produz a mesma safda daqu ela apr esenr ada na Figura 10.1:
340 I
341
SAioA~
A ut iljzo~60 de check ou continue dentro de um loop select pode ser multo inefkiente . Voce deverc , sempre que possfvel, modlflccr 0 c16usulo where a fim de selecionar menos registros, em vez disso.
S
III
A se guir, veja a sintaxe cia insrru cao check. Pode ser util izad a dentro de um a do, wh ile, sel ect au loop. (A ins rru cso loop sera abrangida no proximo cap ft ulo.}
[do/ w 1el se1ect/l oop] hi
check exp o
check
Na Tabela 10.7, as insrru coes exit, cont i nue e check serao cornparadas.
onde:
exp
Efel to
Sai do loop otuo l. Faz urn sclto incondicionol para a fino I do loop. Soltero para 0 fina l do loop se exp forfaJsa.
N a Listagem 10.14, check se comporta ra como uma instruc ao conti nue qu ando a expre ssao logics for falsa. Quando for verdad eira, na o fa nada . ra
~NIRAOAllo.. L1stagem 10.14 A listag e m 10.3 la i navamente cadili cad a a lim de ,.. utili zer instrucdo check em vez de contin ue
1 re port zt xl014. par am ers p(20) defa ult 'e ::\ \ \ xxx\ \ yyy' . et "ceract ere atua l 3 dat a: c, "pr6xi mo cer act ere n, 4
2 5 do 19 t i mes vary i ng c f rom p+O next p+l var yi ng n from p+l next p -z, check c ca ':\ ". 8 i f c = n. 9 write : I 'du plicate '. c. ' f ound '. 'at positi on'. sy-tnoex . I. endt f. 11 enddo . 12
6 7
Sintoxe pa ra especificocoes sim ples de comprimento e posic,;co no instruc,;co wri te en A seguir, veja a sint axe para espe cificacoes simples de comprimento e posicao . Z na mstrucao wr-r.t e-.
S
T
1
numerc de bytes aloc ado na Iisra para a
onde:
vi
ie urn
, lrrrr.r.. As li nhos de 8 a 10 no Lisiogem 10.13 foram substituidos pelo lin ho 8 no A A ,. Lisiogem 10.14. 0 progromo trobolho exotomente do mesmo maneira. N LISE
342
'BAPH
10 11 12
1J
343
/ 2(1) ' Hi' ' There' / 2(3) ' H ' i ' There ' ' Hi', 10(3) 'Ther e ' /2
/
/
/ (3)
/ (2)
14 15 16
f 2. f2 .
o
. SAiDI ~
IncorTeta
write / 10( 2) ' Hi ' . write / 10 (2) ' Hi'.
+ 1 + 2. + 3. . . . + 4
123 123-
123-
123
3
INlllSE ~
A linha 4 representa um a regua de modo que voce possa claram en te ver as colunas na lista de saida.
A linha 5 escreve Hi comecando na posic;:ao 1 e There comecacdo na posic;:ao 4~ A Iinha 6 escreve H com ecand o na pcsicao 1 e There comecando na i posicao 3.
para voce. Simplesmente pressione 0 bctec Correct no parte inferior do [onelc de mensogem quando ere cpcrecer.
A Listagern 10. 15 ilustr a 0 usc das especificacoes simples de cornprimenta e posic;:ao na in st rucao wr ; te oMost ra tambern algumas das armadilhas. A linha 3 representa um a regua de modo que po ssa ver a s mimeros de coluna na safda.
Ilrlt... Listagem 10.15 Ut ilizoc;oo des espec tftcoc oes simpl es de com prim ento . EHTRADA,. e pos ic;oo no instru c;oo wri te
1 re port ztxlOl5. 2 data : f1 type p val ue 123. 3 f 2 type p val ue - 123. 4 write : / ' . ... +.. .. 1 +.. .. 2.... +.. .. 3.... +. 4 . 5 /1 'Hi '. 4 'There '. 6 /1 ' Hi'. 3 ' Ther e '. 7 /1 ' Hi' . 2 There , 8 /1 'H . 1 i' ' Ther e ' . 9 /2 'Hi ' . "r her e" ,
A Iinha 7 escreve Hi comecando na pcsicsc 1 e There comecando na posic;:ao 2. There sobrescreve a ult im a posicio de H . i
A linha 8 escreve Hi comecando na posic;:ao 1 e Ther e cornecand o tambem na posicsc 1. There so brescreve H completamente e voce na o i p o de nem ao menos diz er se Hi foi escrito na lista. A linha 9 escreve H com ecan do na p osic;:i o 2 e There depois de la. Wri t e i deixara urn espaljo entre os valores se voce nao especificar uma pcsicsc de saida.
A lin ha 10 escreve H ccmecando na posicjo 2 para urn comprim ent o i . de 1. Isso escreve so m ente 0 prim eiro caractere: H
A linha 12 escreve Hi comecando na pcsicao 2 e There na posicsc 10 para urn co mp rim ent o de 3, fazen do com que The aparec;:a na lista.
344
345
A linh a 13 escreve as cam pos deci mais compactados f1 e fl , em sucess ao. A linba 14 tambem escreve f1 e f l. Dessa vez, fl e escrito comecando na posj~ o 4. O s espacos iniciais que comegam na posicjo 4 scbrescrevem 0 valor de fl, fazendo com qu e somente f l apa reca na safda. A linha 15 escreve fl e aloca apenas tres byte s na lisra de safda para 0 valor. f1 aparece na lista cornecando na posicao 1; ele preenche co mpletamente 0 campo de safda . A Iinha 16 escr eve f1 e alo ca apenas 2 bytes na lista de safda para 0 valor. valor de fl n ao pode ser exibido em tres bytes, entao urn asterisco (*) aparece na pr imeira coluna para ind icar 0 esto uro.
check exp sahara para 0 fin al do loop se exp for falsa. Quando exp for verdadeira, check nao fara nada. Na insr rucac wri te, a posi c;ao e 0 comprimento podem ser imediatament e esp ecificad os antes d o valor de saida . N enh um espaco intervenie nce deve aparece r en tre eacla especificacio.
IFa~a
----:.. .-_---Abro duos secees sempre que efetuor logon, de modo que voce posso termine r um loop infinite. Utilize . . aryi ng para ler uma serie de compos eqOidistantes a partir de uma string de campo.
Resu m o
As instrucoes de comparacac sao i f e case. case proporciona uma eapaeidade semelhan re a if/ elseif, mas campara da is valores somente quanto a igualdade . As convers6es oco rrem ao com parar tipos diferentes de clados. A ferram en ta de ana lise d o pro gr am a acertari as eonvers6es sempre qu e elas ocorre rem. Operad ore s especiais estao dispcnfveis para comparacces de String. Utilize CP e NP para corresponder as strings co m os pad roes. Sy- f dpos e configurado depois de cada com paracao.
Nao utilize check ou continue dentro de um loo p select para Hltrcr registros. Em vez disso, utilize a d6usula w here pora filtrc-los. Nao [eio op6s 0 final de uma voriovel ou string de compo corp a adir;Cio . . aryin g. E xcecces de proter;ooe comporto mento lmprevisfvel poclem cc orre r.
P&R
Por que as op eracees de bit n ao sao muito urilizadas n o A BAPi 41 0 que e utilizado em seu lu gar?
A s insrrucoes de loop sao do e whi1e. sy-index contem sempre 0 contador para a pa ssagem d o lo op atual. De pois de concluldc 0 loop, seu valo r ereinieializado para 0 que tinha quando do inicio do lo op . Embora vo ce possa alterar sv-t ndex, seu valor sed. reinicializado co m a proxima passagem do loop. Utilize vary i ng para atribu ir
0
o us o de um a op eracao de bi t cria uma dependsncia do sistema op eracion al. Isso re duz a portabilid ade, portanto. ela njio e
u tilizada a m en os que seja necessaria . Em vezdisso, uma variavel co m u rn un ico caracter e e utilizada para rerer urn uni co va lo r ativado/de sativado. C ornu men te . 0 "X" representa urn va lo r "ativ ad o" e espaco rep resen ts um va lor "desativado".
o
o
o
Por que X e a tecla de espaco sa o u til izados para representar os valores binaries ativado e desativado ? Acho que 1/0. T /F o u Y I N deveria ser utilizado, como e 0 comum na area de pro-
comando /
gramacao.
Ess a convencau e para compatibilidade co m as inter faces de u su ario baseadas em caractere. Escrito, valor X indica uma selecao p resen ce e 0 espacc indica nac presente.
fim.
Utilize as ins rrucoes exit, continu e e check para modifiear same nto de lo op. proces-
exit termina 0 proc essam em o de loop e continua a execucic na primeira in strucio ape s 0 loop. ca nt ~ nue salta im ediatame nte para
0
E reco rn endada
final do loop.
a abertura de mulriplas sessoes sempre que efetuo logon. Isso nao urn despe rd fcio de recursos? Se todos fizessern isso , a veloc idade do servid o r do aplicativo nac cairia ?
346
347
o re curso mais precioso ea CPU. :E verdade que um a cap acidade pequena de mem6ria adicional e requ erida no serv ido r do ap licativo para acomodar cada nova sessao. Enrretanro, nenhuma CPU sed utilizada p ela sessao livre, sen do assim, isso nao diminui ra a velocidade do serv idor. Se voce escrever urn program a ini ciando urn loop, ele cons um ir a uma en or m e capacidade de recursos, principalmente a CPU, e isso, sem dc vida algum a, degradarf 0 serv idor no memento em qu e esriver sendo executado. Se voce njio cons eguir inter romper a loo p , voce nac conseguira moder ar a desperdfcic de recursos. Sem verificacso, o prog rama executa rf possivelmente por cinco ou dez min u tos, ate qu e exceda sua capac idade de CPU e, dep ois disso, termi nara. Da pr6xi ma vez que voce 0 executar , ele podera n ovamente fazer 0 me sm o. Em resum o, abrir uma outra sesssc sera a melh or 0P!rao escolhida.
De que fonna as byt es de preenchimento afetam 0 usa de varyt ng? Tenho que pr estar aten!rio quanto a qualquer coisa qu e eu fa~a, qua n do do m ovim ento a partir de strings d e campo e para strings de campo?
A maneira mais faei! de garantir 0 sucesso de vary ; ng e ter certeza cia sequencia exata em que os campos se rep etem. Se a mesma sequencia de campos erepetida, 0 mesmo mimero de byres semp re os separara. Desde qu e voce siga essa regra, nao haven nenhuma necessidade de se preocupar com os byte s de preen chimento.
Teste
1. N a seguint e se!rao de c6d igo, alter e as instrucoes if para uma instTU!rao case .
write ' The number is fiv e. ' .
endt f.
if vI eq 10. wri te 'The n~ber t s t en.'. endt f . i f vI <> 5 and vI <> 10. write 'The number is not fhe or t en.'. endi f.
o o
Exercicio 1
Escreva urn programa que produza a safda da Figura.
1:1111I1"" "
,,'n1il('o,
".,
""
1 ' t "
,t
' 1 2'"
S 6 .L ' ;
j: 1 2 , . S ' ~ "
"
u U.
, I,,, S. , . ,.
U. ' ~'
. S.1
~ t, .
o o
Wo rksho p
Posso utilizar uma variavel para indicar posi!rao em uma instruci o writ e?
comprimento e/ou
Sim. A instruqao wri te sera apresent ada com detalhes no Capitulo 14 e as especificacoes d e varidveis serdo abrangidas em tal capitulo.
o Workshop oferece duas maneiras de voce verificar 0 que aprendeu neste capitulo. A se~ao Teste oferece perguntas para ajudar a solidificar seu entendimento do conteudo abordado e a se!raoExercfcio permite que voce pratique 0 que aprendeu. Voce pode en contrar as respo stas as perguntas do Test e e exer cicios no Apendice B, "Resp oscas as perguntas e aos exerctcios".
N ac codifique como strin gs. Em vel disso, calcule as numeros e as escreva co m urn uni co byt e por vez, ou uti lize a tabe la syst.
11
Tabelas internas
Objetivos do capItulo
Depois de conduir este capitulo, voc e sera capaz de:
Definir uma tabela interna com ou sem uma linha de cabecalho utilizando as instrucoes dat a e ; ncl ude structure.
Preencher uma tabela intem a uti lizand o append ao long o de uma linha de cabecalho ou uma area de trabalho explfcita. U tilizar loop at e l oop at . .. wher e para ler 0 con teddo de uma tabela inter na e utilizar sy-tabix para det er miner 0 Indice cialinha atu al. Lo calizar uma uni ca linh a em um a tabela interna ut ilizan do read t able e suas variacoes. C lassificar as tabelas intern as e utili zar a adicic as te xt.
350 I
DO lU/JruS IHTERJiAS
351
que voce adicione wi th header 1t ne dep ois da clausula occurs. Isso sera ilustrado nas linhas de 2 a 10 da Lisragem 11.1. A unica ocasho em qu e voc e criaria um a tab ela interna sern um a linha de cabeca lho seri a n o caso de uma tab ela interna aninhada. Urna tabel a in te ma aninhada nao pode ter urna linha de cabecalho.
~NnADA'" Listagem 11 .1 Ma neiros bosiccs de definir tab e la s inte rnes com e sem
,.. umo linha de cc becclbc
1 2 3 4 5 6 7 8 9 10
A linho de cab~o lho e umo string de compo com 0 rnesma estrutura de uma TERMO llnhc do ccrpc, ma s pede ope nas arma zenar umo linho (mica. E urn buffer utilizodo pora a rmozena r coda registro ontes que ele sejc cdicionodc ou coda registro ossim que ele e recuperodo do tobelc Inte rne.
NOYO .....
Neste livre, umo ccn vencec de ot ri bui~{i o de nome e utilizad a pora tobelos internes. Para prog rama s sirnples com apena s umo unica tobelo interne, 0 nome do to belo interno normalmente sera ; t (de internal table - tobela internal. Se existire m v6rias to belcs Inte rnes. 0 nome de ced e umo norma lmente comecc ro com it.
report ztxllOI. data: begin of 'i tl occurs 10, fl. f2 . f3, end of HI. data i t 2 like ztxl fal occurs 100.
ca be~a lho
A Figura 11.1 mo stra a defini cao de u ma tabela"in terna denorn inad a it.
Fi gura 11
mostrodo no porle svperi ;d" sto ngvru. O A Iinho de co~olho e 0 corpo tombem sec mostrudos.
A linha 2 comeca a definiljao de uma tabela intema denominada i tl. E uma tabela intema por causa da presenlja da clausula occurs. Tern tres co m ponentes: fl. f2 e fJ . Cada urn e do tip o c, comprimento 1. Essa tab ela intern a tern um a linha de cabecalho porque a defmiljao ccntem as palavras begi n of. A linha 8 define a tabela interne i t2 . T ern os mesrnos component es da est ru tura do DDIC , ztxlfal. N rc t ern urn cabecalho porque n ero begi n of nem wi th header 1t ne aparecem na definicao. A definicso de it 3 na linha 10 e quase a mesma da definiljao p ara ; t2 na linha 8. A unica dife renca ea ad ic;aowi th header 1i ne. Isso, eclare, [az com que i t3 tenha uma linha de cabecalho.
it
it
~I
353
ENllADAIlrrr.r.. Lista g e m 11 .2 Estes defln tcces criom tobelos intemos com e sem umo
,.. linho de cc becclhc
1 .report ztltll02. 2 dat a: b~9in of itl occurs 10,
As linhas de 14 a 16 mostram a maneira antiga de defmir uma tabela intema. It 5 eigual a it3 defmi da na linha 10. A adi~o 1; ke foi somente incluida na versao 3.0; programas anteriores utilizam as defmi!joes
como as apresentadas b.a po ueo . Includ e structure nac e utilizada agora. excetc para os casa s da seguinte defini~ao de i t6 . (Nesse momenta, voce pode querer reviser a inStnl~O i ncl ude structure
abordada pelc no D ia 5, '0 Data D icti onary, Parte 3' .)
"t en
UI1lI
l1nha de
cabe~a'ho
)
4 5
6 1
n,
f2 ,
f3 ,
end of
ru .
- n~ o t !lll uma l1nha de cab~ a lho 9 10 data it) like ztxlhl occur s 100 w ith header li ne'. -agora tell
1J
n~o
cab ~ al ho
beg1 n of itS occurs 100. 14 data structure ztxlfal. 15 i ncl ude .end of itS . 16 data 11 beg1n of 1t6 occurs 100. 18 data structure ztxlfal. 19 include 20 dat a: de1flag . rcetctel , 21 end of it6. 22 23 24 data : begin of i t 7 occurs 100, Z5 s l f ke ztxlfal, 26 end of it7 . 28 data HS l 1ke sy-tncex occurs 10 29 w ith header l ine.
ca be~alho
Esse seria 0 unico motivo pr atico em que voce utilizaria a instrucio includ e, agora (depois da versto 3). Ela permite que voce erie uma string de campo com todos as componen tes de uma estrutura do DD IC, mais alguns componentes adicionais. A defmi~o de i t6 contern as componentes de ztx lfal e dais campos adicionais que sao delfl ag e row otal. Essa tabela inte rna tern uma linha de cabecalho t uma vez que voce pode ver begi n of na defmii i o.
,.
"esse ~ 0 motivo per que v . deve uti l1zar "a i nstru ~ lo inc lude
As linhas 'de 24 a 26 mostram a maneira incorreta de utilizer 1i Ice. Os comp onentes dessa tabela interne comecam todos com i t7- s, por exemplo, it7 -s-lifnr e i t7 -s-landl. Embora viavel, provavelmente, niio e 0 pretendido e produz urn myel desnecessario nos nom es de componente. Ao definir uma tabela intema que tenha apenas urn componente, sera possfvel utilizar a declaracio na linha 28 ou a declaracto na linha 31.
" n~ o fat;a tssc des se maneira "os nomes de component e se r ae "preflxados cem it7 -s rno LIST " 27
3.
31 data: begin of 1t 9 occur s 10, 32 f1 li ke sy~ i nde x . 33 end of 1t9 .
354
OIA l),J,,,UlIHTERNAS
355
!:!!
Z
EHUADAlilrr.. Lista g em 11.3 Este progra ma adiciona tres linhas em umo tabe la
~
In
on de:
1'10
it
e 0 n ome de uma area de tra balho. e 0 n ome de uma tabela in tema pr eviamente definida.
1 report ztx l103. 2 data: begin of it occur-s 3, J fl(1), 4 '2(21, S end of it. 6 it-fl ,. 'A'.
7 it-f2
oS
'XX'.
8 append 1t to it .
10 it-fl 'B'.
11
1t~f2
'YY'.
Se voce nao especifiear uma area de trabalho, 0 sistema utilizara a linha de cabecalho como padrao. Na verd ade, a linha de cabecalho e a area
de t rabalb o padrao. -, . D epois de append, sy-tabi x e configurada com 0 ndme ro de linha relativo da linha recem-acre scen tada. P or exemplo, depois de acre scentar a primeira linha, sy-tabi x sera configurada como 1. D epois de acrescentar a segunda linh a, sy- t abi x sera configurada como 2 e assim por diante.
12 append it . "0 13 write ~ / 'sy-tabix -" , 14 it-fl 'e' . 15 append it. "a 16 write: / "sy- tebtx ~',
SAlOl ~
sy-tabix .. sy-tebtx
sy-tebtx
1 2
3
INlllSE~
A lin ha 2 defin e u ma tabela intema denominada ; t e um a linha de cabecalho denomin ada it. As duas possuem dais componentes: f1 e
f2.
Uma 6 rea de trobolho me ndenodo expllcttc mente no instru<;6e append e de trobo/ho exp/(cila . Qu alquerstring de com po com a mesma estrvtura de umo linha do tcbelc interne pode ser utilizodo co mo umo 6rea de trobo lho explkltc. Se umo 6rea de frcbclho n60 for mencio noda, a area de troba/ho odo. imp/kilo (0 linho de cobecclho) ser6 utiliz
ccnhecldc como umo a rea
As linhas 6 e 7 configuram 0 coneeudo dos campos de linha de cabecalho f1 e f2 (co mo pode ser vista na Figura 11.2). Aqui, it se
refere
A linha 8 copia 0 contee d o da linha de cabecalho den ominada it pan. coepo denominado it (como po de ser visto na Figura 11.3).
A instrucao append init ia l li ne to i t acrescenta uma lin ha contendo valo res in iciais (espacos em braneo e zeros) atabela interna. Equivale a execu tar as duas insrrucoe s a seguir em seq uen cia: e1ear it e append it. A Listagern 11.3 mos tra urn programa de exemplo que acrescenta tres lirihas em uma tabela interna.
Iinho de ccbecclhc
it[l]Bt. ~1
fl co rpo
f2
till ~
Ii ~ ~ BJ
I I I
I I . . . . . .W . . ~ ~ .. - - w
D~ l),TASEUllrmRHAl I
357
As linhas 10 e 11 atribuem 0 novo coarecdo aos componentes cia linha de cabecalho, sobrescrevendo 0 coneeado existente (com o pede ser visto na Figura 11.4) .
Fi gura 1 1 3
Fig lirA 11 . ,
append it.
ltnhc de ccbecclbc
append 1t to i t.
it[l]~ 11 f2 ...
it
corpo
it .
tirl ~
Si ~
~~
A linha 15 acresceata urna terceira linha a partir d.a linha de cabecalhc . ; t ao corpo it (veja a Figura 11.7) .
Figura 11 6 o valorcJo componente do linho d. a>bo<olho It-Il ~ sobrescriio. 0 yo/or de it- f Z permonece inolterodo.
1t-fl
=
A linha 12 acrescenta 0 no vo cc ntec dc cia linha de cabecalho ao corpo (veja a Figura 11.5) . Essa instrucic e-funcionalmenee equivalente a inStru~o na linha 8.Ja que uma area de trabalho nie recebeu urn nome , a area de trabalho padrac - a linha de cabecalho - sed utilizeda,
Figura 11 4
Estos instru~6es de
' E",
linho de ccbecclbc
it . ,]
fl
f2
'yy' .
linha de ccbecclhc
1t~~1 fl f2
CO"",
it
.. .
A linha 14 altera F igura 11.6).
0
. . ~~ ~~ ~ ~2!
append i t .
Figura 11 7
Aqui,
conteVdo do
""PO.
occurs nao limita 0 mlmero de linhas que po de ser adicionado atabel a intema. Por exemplc, se voce especificar occurs 10, sera pos sfvel ccl ocar m a is de 10 linhas na tabela interna. numero de linhas qu e voce pe de colocar em uma
D~ lUABlLlS INTERNAS I
359
de memoria
a mem6rio privodo do processo de trnbolho e este noo ser6 mois copoz de continuor seu progremo. Isso faz com que 0 processo de trobolho tome-se indispc nlvel pore uso por outros progremos ate que seu progremo termine completomente 0 processomento. Poro evitor esse problema, voce deve utilizor umo c6 pio.
describe tabl e ap resentada co m de ralbes no pr6ximo capitulo ou at raves cia exibicac de Field no depurador.) Quand o a primeira linha e adicicnada na tabela interna, a m emo ria e aloc ada da area d e rolagem do programa. A quanridade alocada e igual ao tamanho calcul ado da tab ela inr ema. Se esta quantidad e for excedida, uma quantidade igual sera alocada e 0 p rocesso sera repetido ate que o total exceda 8 KB . Q uando isso aco ntecer, as alccacces subseqaentes obter ao pfginas de 8 KB cia area de paginac;ao. Se voce especificar occurs 0, todas as alocacoes serio feitas na area de pagina~ao) faze nd o com que uma pagina de 8 K.B seja alocada de um a s6 vez. Se
0
sistem a ira
o sistema utiliza a clausula occurs apena.s como uma direrriz para determinar quanta memoria deve ser alccada, N a primeira vez qu e um a linha
adicionad a na tabela intema, mem 6ria su ficiente e alocada a fun d e armaze nar o numero de linhas especificado oa clausula occurs. Se vo ce utilizar recursos alem da capacidadedessa memoria, mais sera aloc ado, conforme necessdrio. Altemativamente, voce pode especificar occurs o. Se fizer isso, a sistema alo ca.cl paginas de mem6ria de 8KB d e uma s6 vez, Entretanro, Dio hi nenhuma vanragem em utilizar occurs 0 a na o ser pelo fate d e que eurn p ou co mais facil codificar occurs 0 do que estimar 0 tamanho da tabela intema. Para maximo des empenho e mfnimc desperdfcio d e me m6ria, escolha urn valo r occurs semelhante ao numero maximo medic d e linhas na tabela. Por exemplo, se na maioria das vezes a u bela interna for preenchida co m urn maximo d e 100 Iinhas, mas de vez em qu ando fo r p reen chi da com u rn maxim o
alrerar a valor de occur s p Wl zero quando a p rimeira. al0C3<j3.0 for realizada e tcdas as alocacces atingirao seus objetivos a partir d.a area de paginac;ao. Voce pede ver a alterac;i o de occurs utilizando a insrruc ac deser-tbe table depois da prim eira alccacac e exibinda 0 valor de sy- toccu. Essa insrruci o sera descries no Dia 9, ..Atribuicoes, convers6es e ct lculcs".
Utilize loop at para ler vdrias linhas da tabela interna. Utilize r ead tabl e para ler u ma enica linha.
Nee utilize occurs 0 se voce esperc armazenor menos que 8 KB em umo tobela intemo. Se nzer isso, 0 siS1ema alocar6 8 KB do 6reo de poginoljoo. A mem6ria ser6 desperdic;odo e a poginoljoo poder6 oumentor, resultondo em menor desempenho.
Lendo verics Iinhas utilizando a instru~cio l oop at Para ler algumas ou todas as linhas de uma tabela interua; voce pede u tilizar a in st ni c;ao loo p at . loo p at Ie 0 cc nt ea dc d.a tabela intema, colocando as linhas do conteudo) urna.p or vel., na area d e trabalba. Sintexe de
instru~lio
loop at
D epend end o da clausula occurs e do camacho da ta bela intema. 0 sistema alo cari. a mem6ria da area d e rolagem do p ro grama ou cia area de pagin a~aa do sist em a, a u das d uas. Os acess as de mem6ria na area de rolagem podem ser urn pouco mais rapidos que os acesso s n a area de pagina~ao . As aloca 'ijoe s na area d e pagina'ijao tedio sempre 0 ta manho de urna pagina (n orm almente 8 KB ou
.!!!
E
m
.
0
onde: it e 0 nome de uma tab ela in terna. wa e 0 nome de uma irea de trabalha.
sistema utiliza para exe cutar alocac;oes. N o p rimeiro. occurs e dif erent e de zero e 0 tamanho cia tabela intema (calculado a partir d o numero de bytes por linh a d e occurs 11-) e Menor que au i gual a 8 KB. (0 numero de byt es par Iinh a po de ser obtido ur ilizando a ins truc;ao
,
I
360
D~ lUABEllS INTERM AS
361
men sao !iterai s de inreiro, constantes ou varidvels que representam urn mimero de linha relative. Por exemplo, 1 significa a primeira linha na tabela, 2 significa a segunda e assim por diante.
exp
Ap6s endloop, sy-subrc sera zero se quaisquer .linh as tiverem sido lidas. Sera difer ente de zero se nenhuma linha tiver sid o lida a partir cia tabe la interne. A Listagem 11.4 e expandida a partir da Lista gem 11.3, executando urn loop e escr even do as linha s da eabela intema.
~ _ M representa qualquer nrimero de linhas de codigo. Essas linhas sao execuradasuma dnicavez para cada linha recuperada cia tabela interna.
.... Listagem 11.4 Este p rogramo od iciono 3 linhos no tobe la Interne i t do ENTliDA,- li nho de ccbe~olho e, em seguido, as escreve de volta novomente
1 report ztxll 04. Z data : begin of it occurs 3. J f1(l), f 2(2) , 5 end of it. 6 1t~ fl ' A' . 7 1t - f Z ,. 'XX ' . 8 append it t o it . "ecrescente a linha de eabee;alho IT ac coree IT 9 1t ~fl 'B'. 10 1t-f2 'VY '. 11 append i t. 0 mes mo que a li nha 8 12 i t -fl ' C' . 13 append it. "e t abela ln terna agora cont bJI t res H nnes . 14 sy-tabix sy- subre 99. 15 l oop at it. . 0 me5mo que: lo op at it into i t 16 write: / sy-tabix. it-fl . it-f2. 17 endlo op. 18 wr1t e : / 'done. sy-tebt x - ", sy-tabix . 19 / " sy-subrc -" , sy-subre.
As linhas sao lidas cia tab ela intema, uma por vez, e col ocadas em sequencia na area de trabalho. As linhas de ccdigo entre l oop at e endloop sao executadas para cada linha recuperada. 0 loop termin a automaticamente
quando a ultima linha e!ida e a instru!jio ap6s endl oop e entao execurada. Os seguintes pontes se aplicam : w deve ter a mesma esrrutura de uma linha do corpo. a wa pode set a linha de cabecalho a u qualquer string de campo com a mes ma est rutura de uma linha no corpa.
Se vc cs nio especificar u ma area de trabalbo, 0 siste ma utilizari a linha de cabecalhc como padrao. Por exempl o, l oop at i t into it Ie as linhas da tab ele intema it, colocando -as uma po r vez na linh a de cabecalho it . Vma instru~ao equivalence e loop at it. Se from nao for esp ecifi cada, da primeira linha.
0
Se to njo for cspecificada, 0 padrao sera ler ate ~ ultima linha. Os compo n enres de i t especificados na expressac 16gica nso devem se r precedidos pel o n om e da tabela intema. Por exernp lo, where fl ::: 'X' estol. co rre ta, mas wh ere i t -fl .. I Xr causara urn 'err c de sin taxe.
exp pode ser qualqu er expressjo logica. Entretanto,' 0 primeiro operando de cada cornparacjo deve ser urn cornpo nent e da tabela interna. Por exemplo, se it contivesse um comp onente f l) ea u o where f1 ::: ' X' estaria correta; where 'X' ::: fl est aria incorre ta e causaria urn erro de sintaxe.
99
IMius!~
A s linhas de 2 a 13.sao as mesmas das existences na Listage m 11.3. Etas adicionam erzs linhas na tabela interna, A linha 14 configura sy-tabi x c sy- subr c para urn valor arb ieraric . A linha 15 comeca urn loop que Ie a primeira linha da tab ela interna dcn ominada it, coloc ando -a na linha de cabclialho it. A linha 16 escr eve
0
A s adi~6es from, to e where poderso ser mis turadas, se assim for desejado. Dentro do loop, sy-tabi x con tern 0 numero de linba relativo do regis tro atu al. P ar exemplo, durante 0 proces samemo do p rimeiro registro na tab ela in terna, 0 valor de sy-tab i x sera 1. Du rante 0 pr ocessam ento do segundo , sy- tabix sera 2. Depois de terminado 0 loop, 0 valor de sytabix sera 0 0vamente configurado para seu valor origin al qu and o do infcio do loop. Se os loop s estiverem aninhados, 0 valor em sy- ta bix estacl relaciona do ao-Ioop
d>. linha de cabe~o. A linha 17 mar ca 0 fmal do loop. Re torna a linha 15.
amal.
. _- _...
362
I APRENDA E 21 DIAS ABAP/4 M
-~
..
--:-~~
363
A Iiaha 15 novamente executada. Dessa vez, a segunda linha ciatabela interna e coloca da na linha d e cabecalho, sob rescreven do 0 coneeddo
ant erior.
A linha 16 e executad a, novamente escrevenclo as valores cia linha de
cabecalho. Na linha 17, 0 loop sera repetido ate que codaslinhas sejarn recuperadas da tabela interna. Q uan do a Ultima linha tiver sido Iida, ela ira parar 0
loop.
,
I'
25 loop at f t f rOlll 2. "mesmo que: loop at it f rom 2 t o 3. 26 write: / sy-tebtx, i t - fl . It - f 2 . 27 endloop. 28 s kip. 29 30 l oop at it from 2 where fl 'C' . 31 write : I sy-tebtx , it-fl. it-f2 . 32 endl oop.
Na linha 18, sy- tabix foi restauracla para seu valor original antes da execucao do loop . Sy-subrc contem zero, indicando que as linhas . for am recuperadas da tabela interna pela instrucao loop at.
2 B YY 3 C YY
3 C YY
IMiuSE ~
As linhas de 2 a 13 adicionam tres linhas na tabela interna. As linhas de 15 a 171eem samente as linhas da tabel a interna onde f2 t ern urn valar semelhante a 'yy I Somenre as linha s 2 e 3 satisfazem os criterios. A linha 18 pula uma linha na safda, na verdade escrevendo um a linh a em branco. As linhas de 20 a 22 leem somente as linhas 1 e 2 cia tabela interne. As linhas de 25 a 27 leem somente as linhas 2 e 3 da tabela interna. A linha 30 faz a leitura comecaado a partir da linha 2, procurando po r todas as linhas com urn valor fl de ' C'. A linh a 3 e a tinica linha correspondente nessa faixa.
5
6 7 8 9 10 11 12 13
14
f2(2), end of it . it-fl. 'A' . it-f2 'XX'. append it . it-fl '8 ' . 1t f2 ' YY'. append it . 1t ~f1 ' C'. append it .
" c o nt ~
15 loop at i t where f2 ' VY ' . "f 2 esU ccrretc, it-f2 esta rfa t nccr ret c aqui 16 write : / sy-t ebtx, it-fl , it-f2. 17 endl oop. 18 skip. 19 20 loop at it to 2. "m esrno que: loop at it from 1 to 2. 21 write: / sy- t ebt x, it -fl . it-f2. 22 endl oop. 23 skip. 24
Se voce tiver certeza de que 0 ripe de dado e 0 camprimento do campo em exp correspondem exatamente com 0 campo da tabel a inrerna, nenhuma conversao sera executada. Isso fad. cam que seu loop seja executado mais rapidamente. Se a conversao for necessaria, ela sera executada em cada passagem de loop e isso pcderf diminuir a velocidade do processamento de forma consideravel. Utilize 1i ke ou constantes para evitar a con versso.
~o
'---
Embora where retorne um subcc njuntc do cco teudc de tobelc, ume vcrreduro total de tcbelo ser6 sempre executodc .
--1
-.
-.. -T "
364
APR EHDA EM21 D ABAP /. IAS
-.-..-.-.
UtiJizando exit, cont i nue, sto p e check
I -I
I 'I-I " I I .. I I I. __ I
I .I"" . ~..._ .
DIA lUABELlSIHTERH<5
365
A Tabela 11.1 ilust ra 05 efeiro s de exit, continu e e check qu an do ut ilizadas dentro de uma estrutura de loop at / endl oop.
Se ta nto comp ari ng com o tran sporting estiverem especificadas, compar i ng devers vir primeiro .
Tabe fa 11.1 lnstrucees que podem altero r a processa mento de loop pa ra tobelos
inter nes
Instru~ao
Os seguintes po nt os se aplicam :
Efeito
ext t
Termino
ser a linha de cabecalho au pode ser qualquer string de campo corn a mesma estrutura de uma linha no corpo.
continue
Voi imedia to mente pc rc 'c instru~50 endl oop, desviondo fodos as instrUl; 6es seguintes dentro do loop.A pr6ximo linha e refomodo do
tobelo intemo e a processomento continue a pa rtir do inld o do
Se voce nao espe cificar uma area de trabalho, a sistema utilizard a linha de cab ecalhc como padrac. P or exemplo, r ead table it into it l~ uma linha d..a ta bela intema it, colocando-a na linha de cabecalho ; t. Uma inserucio equivalente e read table ; t .
a di~oo
check exp
Se exp fo r verdcdelrc , 0 processomento ccntln ucrc como se essa instruc;Cio ndo flvesse side executodc . Se exp for folso, seu efeito ser6 o mesmo de cont inue.
Ulilizanda a
index
NOVO... m.MO r
Lenda uma unicc linha utilizanda a instru ~aa read tab l e Para localizar e ler uma unica linha de uma tabela interna, utilize rea d t abl e. Ela Ie uma unica linha que co rresponda co m os criterios especfficos e a coloca em uma area de trabalho. Sinlaxe da instruc;oo re ad t ab1e
A seguir, veja a sintaxe da instrucio r ead tabl e.
read t abl e it (i nt o wa] (i ndex 'f ] with key keyexp (binary sea r ch] ] pexp] (transpor ting texp]. [comparing cm
0 {ndice de linha de uma tabela intema corresponde 00 seu numero de linho relotivo. Per exemple, 0 primeiro linho no tcbelc tem 0 indice 1,0 segundo tem o Indlce 2 e ossim po r dio nte . No instruc;Oo re ad table, se index i esfiver especificcdc, o sistema ir6 rec uperar 0 t o linho do tob e lo interne e cclocc -lc no a rea de trobolho. Por
example, r ead t ab le i t i ndex 7 1& a setimc llnho do tcbelc lntemc e a coloco no Hnhc de ccbecclhc. _
Se a leitura for bem-sucedida (ou seja, se a linha i existir), sy-subrc sera configurada como zer o e sy- t abix sera configuradacomo i (vejaa Listagem 11.6).
EIl1lADA ~ ListCi gem 11.6 A odi<;ao ; ndex no instru<;ao read ta bl e locclizo uma .
. unice linhe por seu numero de linho relativo
1 r eport ztx1106.
on de:
it
'flO
e0
i verisvel que representa urn mime ro de linha relative . Pa r exempl o, 1 significa a p rimeira linha na t abela, 2 significa a segunda e assim p or dian te.
s
10 11 12 13 14 15 16 17 18
e cmpexp euma expressao de co mpa racao que represe nta u rn teste a ser
keyexp uma expressjio que representa urn valor a ser localiz ado.
rea d table i t index 2. write : / "sy- s ubr c -", sy- subrc, / ' sy-tabix - ", sy-ta bix. / it-fl. it-f2, u-rs. i t - f4 .
I
366
APiE' OA EM' 1 DIAl A BAPI4
19 read table it i nto w in dex 1. a
w__ w w w -
0lA 1UABEUS lh'1IIHAS
367
20 wr ite: I . 21 / 'sy-su bre -" , 22 I "sy- ta bt x - ", 23 / it-fl . it-f2 , 24 / w a-fl , w a-f2 .
21
. 26 re ad table i t i ndex 4. : '27 w t e: I . ri 28 I ' s1-subre - ", sy-suerc, 29 I ' sy- tlbix -", sy-tabi x. 30 / i t -fl . it-f2, u -rs, it-14, 31 / wa-fl . wa- f2 a- f 3. wa-t4.
Utilizanda a adi<;aa w t h key i Se w1 th key keyexp fo r esp ecificada, 0 sistema localizard uma linha que correspanda com a. express sc key e a colocari. na.1inha de cabecalho, A Tabela 11.2 descreve as express6es keye seus efeitos. Utilizando uma expr essao key. voce podera especificar uma rinica linha a se r recuperada. Se mais de um a linha corres po nde r co m a expressao, a prim eira localizada (a que tiver a menor Indice) sera re tom ada.
Expn:ssao ke y .
Efeito
c1
vi c2
v2 . .
0 2
locol izo 0 primeiro linhc no tobe la intemo em que 0 componente c1 tern 0 vola r vi e 0 componente c2 tern o vclc r v2 e ossim po r dionte. vi eo um literal, ccnstcnte ou vcrtovel.
20
8B
0 2 8B 1 AA
(tI) vi (12)
v2
2 1
. w.
0 2 8B 1 AA 2 1
10
w.
A linha 14 1. a segunda linha. Ja que nenhuma area de trabalho est. especificada, 0 conteudo e colocado na linha de cabecalho. Depois cia Ieit ura, sy- subrc sera configurada como zero. Is50 indica qu e a linh a existia e que sy-tebt x foi configurada com 0 mimero cia linha. A linha 19 Iea linha 1 na area de trabalho wa. a conteddc da linha de cabecalho permanece inalteradc depois da leitura. A linha 26 tent a ler a linba 4 na linba de cabecalho. Nao b. nenhuma linha 4, entjic sy-s ubr-c e configurada como 4. sy-tab1x como a e a linha de cabecalho e a area de trabalho w fiearn inalteradas. a
No verseo 4, as co nversees necessaries poro c s tr&s primeiros 8)(pressOes key no Tabelo 11 .2 sOo executodas no mesme ordem de precedenclc des utilizodcs poro os expressoes 1 6gica s. Em sistemos onterio res, os ccnversc es ercm executodos convertendo 0 valor a direita paro 0 tipo de dado e cornp rimento do componente a esquema.
A Tabela 11.3 descreve as valores de sy-subrc e sy- tabix depois de executada read table it with key
~. I I I I
368
"'PH
.. I I
..
"
"
'
_
O~ l UlSEUS INlIiNlS
HRENO' eM 21 01"
369
sy-s ubrc
sy-t abi x
Indice do
linha correspondente
o
4
umo solicitodoexiste
Leitcrc molsucedido e nenhymo
ncmerc de linhos
em1t + l
32 clear wZ. 33 w2~fl - '10' . w2-f3 .. ' M ' . w2~f2 .. w2-f4 .. 1. 34 T'l!ad table it with key - . '112 . 35 write : t, 36 I ' s1 - suhr e - ", sy-subre, 37 / ' sy ~t a b h: . ', sy-tebtx , 38 I it-fl. it-f2. it-f3, it-f4. 39 oW w1-fl .. ' 20 ' . w1-f2 .. 2. 41 read table it into w2 with key wI. 42 write: 43 / "sy-subrc - ", sy-subre , 44 / ' sy- t abfx -'. sy.tabix. 45 I it~fl. it-f2 , u-n. it-f4 .
t,
EHTRlDA~
Listagem 11.7 Utiliz ondo uma expressdo key, voce pede procure r por
urne linhc espeoftcc ndo um valo r em vez de urn Indice
a 3
3ee 3
1 report ztx l107. 2 data: be;;n of 1t occurs 3, 3 fl(2) type n, 4 f2 type t , 5 f3(2) typ e r , f4 type p, 6 1 end of it , 8 begin of wl, fl 1ik!! f t -f l , 9 10 f2 11ke u -rz . 11 end of wI, 12 '112 l1ke it , 13 f(8).
14
II
.,
sy-suarc .. sy - tabix ..
30 20
0
2 3 CC Z 88 0
3 2
51-suhre .. sy-tabh ..
10
loA
0 2
sy-subrc .. sy-tabix ..
10
loA
15 it-fl .. ' 10'. it-O ' M ' . 1t-f2" it-f4 - 1. append it . 16 it-fl ' 20' . i t-f 3 " ' B B'. it-f2" it-f4 " 2. apPl!nd it . 11it-fl .. ' 3D'. i t -f3 .. 'ec'. it -f2 - it-f4 - 3. append i t. lS 19 read table it with key fl '3 0 ' f 2 3. 20 write: / 'sy.subre - ", sy-subrc, 21 / ' sy-tabix - ", sy- t ebtx, 22 / it-fl, it-f2 , it -n. it- f4 .
II II II
AHlllSE ~
cabecalho.
. A linha 8 define uma area de trabalho wi semelhante aos dois primeiros campos d.a linha de cabecalho i t . A linha 9 define uma area de trabalho w2 igualao cornp rimen to inteirc da linha de cabecalho it. As linhas de 15 a 17 acrescentam tres linhas
23
24 f .. ' F2' . 25 read table it into w2 with. key (f ) .. 2. rite: t , 26 w 21 I ' sy- subre ..', sy- subre , 28 I ' sy- t abb - ", sy-tebtx, 29 I i t - fl , it-f2 , it-f3, it-f4. 30 I w2-fl . w2- f2. w2-fJ , w2-f4.
31
A linha 19 Ie uma linha com 0 valor' 30' em f1 e 3 em f 2. Sy-suorc 6 configurada como zero a fun de indicar que uma linh a correspondente foi localizada e sy-tabix econfigurada com 0 rnimero da linha. Ja que nenhuma area de trabalho esta especificada, 0 conteudo ecolocado n a Iinha de cabecalho. A liclIa 25 p rocura por uma linha com urn valor 2 na coluna f2. A linha Clocalizad.a e e coiocada na area de trabalho w2. 0 conteudo da linha de cabecalho pc:rmanece inalterado depo is da leitura.
JI' ~ 1J
APiEH DA EM11 D ABA P/! IAl
........
370
371
A linha 34 procura por uma linha com as valores especificados em todos as campos de w2. Com essa sintaxe, w2 deve corresponder com a estrutura inteira de it. 0 conteado cia linha corr esp ond ence e cc locadc na linha de cabecalho. Os campos com espacos em branco sao procurados na tabela: eles nao correspondem. com todos valores como acontece quando se faz pesquisa com 0 usc de Default Key (veja a p r6xim a secac).
Usta g e m 11.8 Este programa localize u ma linha com os mesmos espocos em volores dos compos Default Key no Iinha de ccbecclho. bronco em um compo Defau lt Key fczem co m que uma coluna seja
as
ig no ra d a . 1 report ztxllOS. 2 data : begi n of it occurs 3 fl(2 ) type n, type f. 4 (2 5 f3(2) type c . 6 f4 type p, 1 end of it .
A linha 41 procure por uma linha com as valores especificados em todos as campos de wI. C om essa sintaxe, wI po de sec menor que it. o com eodo da linha corr espondente ecolocado na linha de cabecalh o. Co mo dito anteriormente, a s valores em br aneo sao tratad os como valores a serem localizados e correspondem apenas com eles mesmos .
3.
c a ~o de cerect er e campo nltlll(!r1 co campo de carac t ere campo nLnt!ri co -
par t! de default nao (! part! de default parte de default nlo f: part e de default
Utilizando a
adi~ao
bi nary search
Sempre que utilizar a adiliao with key, voce tambem devers utiliz.ar a acli~o bi nary search, 0 que faz com que a linha $eja localizada com 0 uso de urn algoritmo binario de pesquisa, em vez de uma varredura de eabela linear. Isso resulta nos mesmos ganhos de dese mpenho dos alcancados com a pesquisa de um a tab ela de banco de dados arraves de urn Indice . De .an tem ao, a tabela deve se r classificada em ordem ascendente pelos componentes especificados na expressao key (veja a seguin re se~ao sobre a classifica~o) .
"8 9 i t - fl '10' . it-f3 - 'M' . it-f2 - it-f4 l. append it. B' 10 it- fl ' 20' . 1t -13 ' B tt-fz it-f4 2. append it . 11 i t - fl ' 30 '. i t~ f3 ' CC'. it-f2 - i t-f4 '" 3. append 1t. 12 13 sort it by fl f 3.
14 clear it. 15 i t(2) ' ". itf3 ' B B'. 16 N!ad tab le it bfnary search. 17 write: I ' 5y-subre -" , sy-su bre. I ' sy -ta_b ~_x -" , sy-ta bb. 18 19 I n.. ", it-fl. 'fZ" ' . it-f2. ' f3.. 1t -f3. 'f4-' . it-f4.
20
Nenhuma
adi~ao
NOVO.... Se nem urn 1ndex nem uma expresseo key esti....erern espedficados, a tobelo TERMO ~ se r6 . . orrida desde 0 inlcic quanta a uma linha que correspondo co m Def uh o Key ed stente no ljnho de ccbecclho. Defau lt Key e umo key imogin6rio co mpost o de todos a s co mpos de ccrc ctere no linha de ca bec;olho (tipos c, d, t , n e xl. Um va lo r em bronco e m uma coluna Default K faz com que todos 05 vclores noquelo cclunc sejcm ey correspo ndentes . Depois, as vclores d e sy - sub rc e sy -tebt x scoconfigurodos do mesmo moneiro co mo normolment e oeorre depois de uma read tabl e utilizondo umo expressoc key.
21 22 23 24 25 26
cl ear i t . it-fl - ' 30' . it-f3 - 'M' . read tab le it binary search. write : I ' sy- subrc - ' , sy-s ubrc, / '-sy-tahix - ", sy-tabix . I ' fl - ' , itfl. 'f2-' . u-ra. 'f3- '.
u-ra,
(Culd;do
Some nte espoc;os em bronco em um ca mpo Defou h Key ccrrespcnderiio com todos os valores.l sso significo que voce nCio pod e r6 e liminor os tipos d, t , n e x e abter umo correspondenco - isso fo r6 co m que as mesmos se jom con figurodos como zeros e n60 com o espoc;os em bronco . Voce deve fo~ar espOl;OS em bronco pora dentro desses compos a fim de que e les ca rrespondom . lsso ped e se rfeito utilizondo uma string de compo (veia 0 exemplo segu inte), utilizondo um subcam po au uti[iz ondo um sfmbolo de compo (consulte a sec;oo onterior quanto a simbolos de co mpo pa ra abter mois info rmol;Oes).
3
0 fl - M f4 "' 0
lIIillSf ~
As linhas de 2 a 7 defmern uma tab e1a interna com uma linha de cabec;illlo. F1 e f3 sio as opos de dado s de carac tere e assim form am o Default Key. As linhas de 9 a 11 acrescentam tres linhas
atabela intema.
-'_
...
~ ,
.~
,~
~ ..-y
- -Y-:Jr-'" .
e do
tipo n e,
Cmpe.xp
..
.
D~ IUABEill INTERNA5
372
373
Utilizando urn sub camp o, a linha 15 fOflia espaljQs em bran co para a campo fl, de modo que correspoadam com todos as valcres. outre
fI f2 . .
campo Default Key (f3) e configurado como ' B B'. ' A linha 16 executa uma pesquisa biniria quanta a uma linha que
contenha ' B 1 no componente ra 8 Depois da pesquisa, a safda mos trari que sy- subrc foi configurada
all f ields
no fi el ds
como zero. indicando que umalinha,ccrrespondente com as criterios, foi localizada. Sy-tabi x contem 2, au seja, 0 numero de linha relative
cia linha corr espo nden re. A linha de cabecalho foi preenchi da com conteddo da linha correspondence e foi escri ta, A linha 21 limp a a linha de cabecalho.
0
Listagem 11.9 A odit;co comp aring ir6 configuror como 2 sempre que: as ca mpos forem diferentes
1 report ztxl109. 2 data: begin of it occurs 3. 3 fl(2) type n, 4 f2 type t , 5 f 3(2) t ype c. 6 f4 type p, 7 end of it , . 8 wa 11ke it~
va lor de sy-subrc .
A linha 22 coloca urn '30 'e ' AA' nos campos D efault Key fl e f3 .
A linha 23 executa uma pesqu isa biriiria qu anta a f1 .. '30 ' e f 3 ' AA' . 0 valor de ret orno de sy-subrc e 4. Isso ind ica. que uma linha correspondente nao foi encont rada e sy- ta bi x contem 3 - 0 ndmero conteudo da linha de cabecalho p erm anece de linhas na tabela. inalterado, au seja da mesma forma como estava na linha 22.
Nesse exemplo, a tabela interna contem apenas algumas linhas, sendo assim bi nary search nao produ ziria uma melhora mensuravel no desempenho. Poi apenas inclujda p ara ilustrar 0 modo como deve ser utilizada.
9 10 it-fl ... ' 10' . i t -f3 'M ' . t t -f2 it- f4 1. append it . 11 it- f l ' 20' . itf3 ' BB' . i t f2 ft - f4 2 . append it. 12 ft -fl z ' 3D' . it-f3 '" 'CC' it -f2 1t -f 4 3 . append it . 13
14 read t abl e it i ndex 2 cOOlparing f 1. 15 write : I 'sy-subrc - ", sy-subrc , 16 / "sy-tebtx -". sy-tab1x ,
A i nstrv~ao read table pede openos ser utilizoda para 0 Ielturc de to belos Internes. Nee funciono com tabelos de bonco de dodos. Utilize
Utiliza ndo a
odi~ao
compa ri n9
/ it-fl. 1t -f2. it- f3, tt-f4. 18 19 r ead tab l e it i nto wa ind ex 1 compar ing f 2 f4 . 20 ... ite: I . r 21
22
17
comparing detecta as diferencas entre 0 ccnteudo da area de tra balho e de urna linha que foi loca.lizada antes de ser colocada na area de trabalho. Utilize-o jun tam en te com inde x au with key. Se, dep ois de localiz.ada uma linha, 0 con eee dc da Irea de trahalho for 0 mesmo da linha localizada, sy-s ubr c sera O . Se 0 conteudo for diferente, sy-subrc sed 2 e 0 contecdo sed sobrescrito pela linha localiz.ada. Se a linha nao for localizada, sy- subrc sera 2 e 0 conteudo permanecera inalterado. A Tahela 11.4 descre ve as valores para a expressao de compara~ao (cmpexp na sintaxe para read table).
23 / i t - fl, i t-f2. it-f3 . 1t.f4. 24 I wa- fl , wa-f2. wa-f3 . w a-f4. 25 26it wa. 27 reed tabl e it with key f3 ' M' cOlIIpar ing all f1eld s.
28 write:
I,
/ ' sy- subrt: .'. sy- subrt , / ' sy- ta bi x . ' , sy- ta bilt , I it-fl . it-f2 , it-f3 . it-f4 .
29 30
31
32
lI!!!r Y
..
1J!II'
I
314
I 'PREMD' EM21 DIAS ,UP/'
----Cmpexp
Descri ~ Ci o
!!'
!!!
--
D~IU"EUSlllmNA5
315
20
sy-subrt: ,.
f1 12 .. .
sy-hbix .. 2D. 2 BB 10 I M
2
1
sy-subrc ..
sy-tab1x .. 10 10
Depois de lccclbcd c umo linha , 0 valor d e fl no linho iccclhc dc e sobreposto 00 vclcr de fl no c rec de trobalho. Em segu ida, 0 valor de f2 e sobre posta 00 valor de f2 no 6reo de trnbo lho e ass im por d ionte. Some nte os componenfes identificodos op6s transporti ng serdo movldcs. Ta dos os c ufros co mpo nentes permcneceroc Inc iterodc s. Todos os compos sdo tro nspo rtodo s. Esse e 0 pcdrec e tern 0 mesmo efeito de ignore r a ocliC;do t ranspor t i ng. Nenhum compo it tronsportodo. Ne nhum des co mpos no creo de t rc bclhc e cltercdc.
M M
all f i el ds
no f ields
IHillSE ~
Essa adi~ao sera uril,se voce quiser apenas testa! a existencia de uma linha em um a tabela interna sem alterar 0 conteddc cia linh a de cabecalho , Por exemplo, ant es de acrescentar uma linha, voce pcdera querer determiner se a 1inha ja exis te na tabel a interna. A Listagem 11.10 fo meee urn exemplo.
MlADA Listagem 11 .1 0 A mo ne iro mo is ejlclente de lnserir linh c s em umo IItrr..
,. tcbelc interne clcssrhccdc ma ntendo a orde m de c1 ossificac;oa.
N. linha 19" Iinha 1 eIocalizada. Os valores de f2 e 14na Iinha 1 do corpo sao comparadoscom as ccmponentes cia linhade cabecalhocom o mesmo nome. A linha de cabecalho con tern a linha 2 (recuperada pela instrulSao 14) e, panamo, sao diferemes. Como resu ltado, sysubre econfigurada como
~p ort
ztxlllD. _. .
2 :
A linha 26 transfere
Na linha 27, .uma linha com f3 : 'AA I e procurada. A linha 1 e corres pondida, conforme po de ser vista pelos valores de sy- subr c e sy- tabix na safda. A linha 1 ja esta na linha de cabecalho, portanto to dos os campos sao correspondidos em valore sy-subrc econfigurada como O .
2 dat a: begin of it occurs 3, 3 n(2) type n, 4 f2 type t , 5 f3 (2) type c, 6 f4 type p, 7 end of it.
a
9 1t ~ fl .. '4 0' . it-f3 .. ' 00'. 1t - f 2 .. itef4 .. 4. append it. 10 i t -fl .. '2 0' . i t - f 3" ' B B'. i t - f 2 " it-f4" 2 . append it .
u
12 sort it by fl . 13 do 5 t te es. 14 i t -fl .. sy- i ndex ... 10. 15 itef3 'XX'. 16 it-f2 it- f4 = sy- tndex, 17 re ad ta ble i t 18 with key fl .. i t -fl 19 binary sea rch 20 t ransporting no field s. 21 t f sr -s ubrc <I> D . 22 . in s ert i t i ndex sy- t ebt x, 23 endif. 24 enddo. 25
Uliliza ndo a
transporti ng
nd i~c'io transporting afeca 0 modo como campos sao movid os da linha localizada para
a area de trabalho, Se for especificado, somente os valores do s co mpo nentes especificados serio movidos para a area de trabalbo . Se urna linh a Ili o for localizada, transporting nao fara nada. A Tabela 11.5 descreve as valores pan a expressac de cc mp araci c (t exp na sintaxe para read table) .
376 I
D~ IhTABElAS lNTERltAS
377
u -ra,
o c6digo
SAiDA ~
10 20
30
~
DOl Listagem
IXX lBB
3 XX
4004
5XX 5
SO
Se nenhum componente for especificado, a t abela interne sera classificada pelos campos Default Key (todos campos de tip o c, 0, P, d e t ) em o rdem ascendecee. A ordem de classificaljao para linhas com 0 mesmc valor nao eprevisivel. A s linhas que tern 0 mesmc valor em uma coluna classificada podem aparecer em qualquer ordem depois da classifica~ao. A Listagem 11.11 mostra exemplos da instrucao sort e tambem ilustra esee ponto .
As linhas 9 e 10 adicionam duas linhas em i t. (Elas estfo propositadamente fora de ordem para exemplificacao.} A linha 12 classifies i t por fl ascendente, de modo que a r ead table seguinte pos sa utilizar a ad.i~o bi nary search.
A linha 13 executa urn lo op eineovezes . Cada vez que ocorre urn loop) ela eria uma nova linha para it e a cc loca na linha de cabecalho (linhas
14, 15 . 16).
"
ENTUDA IIltr.. Li st a g e m 11 .11 Utilize 0 instrut;60 sort para reorganizer as lin has de ~ uma tobelo intemo
1 report ztxllll . 2 data : begi n of. it occurs 5. 3 i 11ke sy- t ndex, 4 t, 5 end it. 6 alpha.(5) value ' eBARB' . 7 S do 5 t 1mes vary i ng it-t from a.l pha+O next alp ha+l . 9 1t -1 "' sy- tncex. 10 append it . 11 enddo. 12 13 loop at it. 14 write: / f t - t , it-t o 15 endloop. 16 17 skip. lS "sort i t by t. 19 loop at i t . 20 write: / tt-f , it-t o 21 endloop.
As linh as 17 e 21 determinam se urn.. linha ja exis re com 0 mes mo valor de fl existente na linha de cabecalho. Se tal linha nao for localizsda, sy-subrc sera co nfigurada como diferent e de zero e syt abi x sera configurada como a Indi ce da linha com 0 pr6xim o valor mais alto au para 0 rnimero de linh as na tabela intern a m ais 1. A linha 22 insere a nova linha ant es da linha in dicada por sy- tebt x. Isso mantem a ordem atual de classificac ao.
0
of
Classificando
Para classificar a conteado de uma tabela interns, utiliz e a instrucao sor t. As linha s podem ser c1assifieadas par urna ou mais colunas em orde rn ascen dente ou descendente. A pr6pria sequ encia de classifica~o po de tam bern ser modificada.
Sinloxe do
2!
Z
m
instru~ao
sort
on de:
11 e /2 sao os compcnentes de i t.
"
. . . repres enta qualque r numerc de names de campo opcionalmente seguidos por asc ending) descend ing, e/ ou as text.
23 24 25 26 27 28 29
378
379
INillS! ~
A s linhas de 2"a 5 definem urna tabela. intern a com dais componentes: t e t . A clausulaoccurs e5 porque a tabelaintem a sera. preenchidacom
cinco linhas.
A linha 6 define alp ha com o uma variavel do tipo c, comprimento 5, e the d. urn valor padrao.
38 l oop at i t .
39
40 41 42 skip .
43
ira conter urn a letra de al pha e 0 valo r de sy-t ndex quando a linha for acrescentada.
A s linhas de 13 a 15 escrevem 0 conteddo da eabela interna. 0 mimero cia linha de sy-tebt x aparece a esquerda cia safda . As linhas cia tabela intema estao em sua ordem original, sendo assim os valores de sy- t ndex e sy-tabi x sao correspondentes. A linha 18 reorganiza as linhas, de mo do que os va.lores de t fiquem em ordem ascendente. Na linha 24, a eabela interna e classificada n ovamente utilizando a mesma instrucio. Observe que a ordem relativa das Iinhas que tern urn valor I BI eao ~ mantida. Sevoce quiser que as valores em uma coluna fiquem em uma ordem part icular, sera preciso especificar isso na instru~ao sort. A ordem cia linhas que contem valores idec uc os nac e conservada durante urna classifica~o.
N a linha -30, a tabela interna ~ classificaclapor t em ordem ascenden re e, em seguida, por i em o rdem ascen dent e.
N a linha 36, a tabela interna Cclassificada p or t em ordem descendence e, em seguida, par i em ordem ascend ente.
t.
,,
1 C
3 A
4 ,
S ,
,
3 A
, ,
A
C
.,, ,
S ,
1 C
, , ,
A
A linha 37 mostra uma sintaxe alternariva que ating e a mesmo efeiro da Iinhe 36. Nessa instrucio, colocando descending depois de it faz com 0 mesmo fique sendc 0 padrao. 0 com ponente t e, portanto , c1assificado em ordem descendente e no componente t . 0 padrf o e anul ado com a adi~o ascendi ng.
o A linha 43 classifica a tabela intern. pelos campos Default Key (tipos c, n, d, t e x). Nesse case, hi somenre urn campo em Defaul t Key, t ,
assim sendo a tabela intema classifica em ordem ascendente apen as par t.
.
, , ,
A
,, ,
1 C
Ordem de clcsslficcceo e a
IOYO Ill... rnMO ~
ad i~ci(j
as text
S ,
3 A
Dentro do sistema aperocio nol, cedo carodere que vod ve na tela e rep resentodo por um vclor numer ic . Duronfe umc clossificoc;oo, 0 valor ncmertcc c do ccrcctere de termino 0 ordem resultcnte . Pe r exernplc, quondo um progro ma AW/4 e exec utod o e m uma plctcl ormc ASCII, 0 letrc 0 tem um volor decima l ASCII de 111 e p de 112. Portonto, p vern depois de 0 no seq Oencia de d ossificoC;ao. Esso seqOAncia de cla ssificoC;co e denominodo sequencia de c1ossificoC;60 bin6rio.
380
Quando uma linguagem contem caracteres acenruados, hi urn valor nurnerico atribuldc para representar cada forma acenruada de urn caractere. Por exemplo, 0 e 0 (0 com urn trema) sao diferentes e, ponanto, caracteres indepe ndenres, cada urn com urn valor numerico individual. (Em ASCII, 0 valor de 5 e0 decimal 246.) Q uando voce classifies dados contendo caracteres acentuados, as formas acentuadas devem aparecer com as formas njio acentuadas. Por exemplo , 0 e ti devam estar juntos e, em seguida, p. Entretanto, as valores bicsrios dos caract eres acentuados e naa acentuados nio seguem uma sequencia numerics. Portanto, sed necessaria um a maneira de alterar a ordem de classifica!rio, de modo que as caracteres acenruados sejam corretamente
append i t.
11 write: I 'sy-l angu-' , sy-langu. 12 sor t 1t. "cla s s i f i ca per Default Key. t ! do ti po c, portant o class1fica por t. 13 l oop at a. 14 wr ite: I it-t o 15 endl ccp.
I'
17 18 19 20 21
classificados.
A adiliao as text modifica a ordem de classificacao, de modo que as caracteres acentuados sejam corre tamenre classificados. Com as te xt , a sequencia de classificacic binaria mo eurilizada, Em vel. disso, a ambiente de text o determina a sequencia de classificacac.
skip . set loc al e la nguage '0 '. "Equival ent e I ace n t ua ~ ! o em alemlo wri te : I ' sy- la ngu- ' , sy- bngu. sort it as text. "as te xt aqui se ap11ca a todos os componentes de t 1po c *mesmo que : sort i t by t as t ext . Z2 loop at it . Z3 wr a e: I i t-to Z4 endl oop.
0 ambiente de texfo e um eonjunto de cccccerrsnccs cssccicdcs C linguogem de logon do usu6rio. ~ determinado pelo e6digo de tdio rnc que voe! digita quando efetuo logon e eonsiste prindpalmente do eonjunto de eoraderes do idioma e do sequencia de lntercclccoo. Voce tcmbem pede olterar 0 amb iente de texto em tempo de execvo utilizondo a instru o set locale. Esse instru o configura 0 valor de sy -Lanqu , 0 conjunto de caraderes atva is e 0 sequencia de inte rcoloc;Oo para a linguoge m escecffccdc.
Pode ap enas ser utilizado com campos de tipo c. Pode ser especifieado dep ois de sort e antes de quaisque r no mes de componente. Ne sse case, se apliea a todos as componentes de tipo c utilizados pela classificafjao. P ede ser especificado dep ois de urn nome de componente individual . Nesse case, se aplica somente aquele componente. A Listagem 11.12 fomeee urn exemplo.
IHiJ.ISE~
As linhas de 6 a 9 adieion am quatro linhas na tabela intema. A da linha 8 coneem urn 0 (0 com tr ema). A linha 11 escreve a linguagern de logon atual. A linha 12 classifica it par Default Key na sequencia de classificacfo bicaria .de acordo com a linguagem de logon atual. A saida mostra que ij vern por ultima na sequencia de classificaci o. Set l ocal e na linha 18 altera 0 ambiente do programa; produz urn efeito semelhante a acentuacao em alemao. Sy-1 angu e configurada como D e a conjumo de caracteres do idioma aleruao, bern como as sequencias de inrercalacio sao urilizado s desse p on te em diant e no programa. A linha 20 utiliza sort com a adi~ao as t ext depcis do nome da tabela interna. Isso faz com que as text se aplique a todos as compon ent es do tipo C. Na saida, 0 e 0 aparecem junt os.
NTlADI~
1 report ztxlll2 .
2 data: begin of it occurs 4, 3 t (30). 4 end of it. S
,.
-.. -
382
~o
Depo is de cicssificcr as text, n60 utilize read table com a odilWoo bina ry se arch. As linhos ndc serec clcssftccdc s em ordem bin6rio, sendo csslm umo pesqulsc bin6ria ter6 resultodos lnco rretos. Pora utili or a pesquiso bin6rio com b ito, consuhe a docomentccec de z pclc vrc-chove do ABAP/4 sabre 0 instru<;oo conv ert ; "to sortabl e
IFa, a
L--.:-
Utilize a odio bi nary search no instru o read table. Elo c vmentcrc muito 0 desempenho do pesquiso. Utilize a adit;aa index no instrut;oo read tab le , sempre que passive!. Eo maneira mois ropldc de localizer uma enicc linha .
---J_
DlA l1:T ABEUS lNID HAS
I
383
Nee utilize occurs 0 para tobelos infernos ' com menos de B KB. lsso resulta em superclccccec de memoria e diminui 0
de sempenhc.
code.
tidas de classificacac sao A-Z, a-z e 0-9, mas n~o necessariamente nessa ordem.
Utilize a instrucao r ead table para [ocalizar urna unica Iinha na tabela inte rna. Utilizando a adi!;ao inde x, voce pa den. lo calizar uma unica linha peio numero de linha relative . Essa e a maneir a mais eficiente de . . localizar uma linha. Utilizando a adi !;ao wit h key, voce poderf localizar uma linha especifica ndoum valor a ser localizado. compari ng derermina se os valores na area de tra balho sac diferenees dos valores na linha localizada, transporti ng impede atribuicoes desnecessarias au
Depo is do dassificoc;ao, voce pede exd uir duplicoC;6es de umo tobelo interne vtilhcedc a insfruc;oo del ete adjacent dupl i cates , descrito no dccumentocdc de pclcvrc-chcve do ABAP/4 .
Resumo
Uma ta bela interna euma cole~o de linhas armazenadas na RAM no
servidor do aplicatlvo. Consiste em uma linha de cabecalho e urn corpo. A linha de cabecalho e cp cional. A linha de cabecalho e a :irea
de trabalho impHcita da tabela interna.
A existencia da clausula occurs cri a uma tabela interna, Ela e utilizada c om o uma diretriz pan 0 sistema alocar mem6ria. Ela nao limita 0 nume ro de linhas qu e v:~ce pede adici onar em uma tabela interna.
Utilize a instrucao l oop at para recuperar mdltiplas linhas de uma tabela interns. Cada linha ecolocada na linha de cabecalho ou em um a are a de trabalho explfcita, um a por vez. U tilize from, to e where para esp ecificar as linh as a serem reto madas. Dentro do loo p, sy-tebt x iri center 0 mim er o de linha relative com base em 1. Depois de endl cop, sy-subrc sed zero se q uaisqu er Jinhas riverem side processadas no
P&R
loop.
D entro de urn lo op , a andamento do processamento pod erf ser alterado por uma in Stru !;aO exit, cont i nue ou check. Exit termina 0 loop e continua com a instru!;ao ap6s endloop . Continue de svia as ins tru!;6es rema nesc entes do lo op e com e!;a imediatam ente a pr6x.ima ite ra!;ao. Check, dOl mesm a form a qu e continue, tambem co me!;a uma no va itera!;ao, mas fara. isso so men te quando sua expressao lo gica for fa lse.
Em al gu ns pr cgramas, vi u rn tipo definido pelo usudrio que tern um a clausula occurs. 0 tipo e en tdo utilizado para definir um tip o de tabela interna e subsequentemen te uma tabela intema, como a apresentada na Lista gem 11.13. Porque isso efcito dessa maneira? Nac se pode sempre definir a tabela inte rna com a instru ~ao data? Qual e 0 motivo da introdu ~o da instru~ao
types ?
OOI.lDI~
Lista g e m 1 1.1 3 Definindo umc tobelo Interne com urn tipo definido
pe lo usu6rio
1 report zt xl1l3 .
2 t ypes: begin of my_type, 3 fl . 4 f2 . 5 end of m y_type. 6 t _1t type. lIy_ty pe occurs ID. 7 data i t t ype t_ 1t.
--- -384
I
OIAll :TAI!8.ASJNTERHAS
385
Nac hi nenhuma vanta gem em utilizar os ti pos de tabela in terns da m ane ira m ostrada na Listagem 11.13. Os rip os serao a teis som ente se vcce os uri lizar p ara definir mais de urn obj eto de dados. Nessa li stagem, ap en as u rn objeto de dados e defi nido do ripo t_it. Seria mais simples, nesse caso, tirar as instrucdes type s e criar toda a definic ac utiliz ando data. Teoricamente, os tipos serdo uteis se voce precisar definir multiples cbjer cs de dados que sejam iguais. A List agern 11.14 most ra tres maneiras de definir multiplas tabelas intern as: utilizan do apenas data (clades), utilizando t ypes e utilizando uma estrutura doDDIC.
disponlve l para reutilizar;oo denf ro de multiplos prog romas . Em minho oplnlcc , utilizor uma estrofvrc sere bem melho r do que utilizer umo definir;oo types .
Existe apenas uma coisa que urn tipo pode fazer e uma estrurura nao: ele pe de canter a defini~o pa~ uma tabela int ema aninhada. Som ente n esse caso eu utilizaria urn tipo. Em rodos os outros cases , um a estrutura data begi n of ou l t ke a no DDIC seria ideal.
Workshop
!N1IlDI~
Listagem 11.14 Deflnir multip les tc belcs internes com t ypes simplificerO
o~ definir; es o
que apr en deu n esre capitulo . A s e~ao Teste oferece perguntas para ajud ar a solidificar seu entendimenta d o coctecdo abordado e a :Se~ao Exercfcio permire que vo ce pratique 0 que aprea deu. Voce p od e encontrar as respostas as perguntas do teste e ao exercfcios no Apecdice B, "Respostas as perguctas e aos exercfcios".
,
6 7
B
1 report ztxl113.
Teste
1. 0 qu e confi gura urn limite para a qu antidade maxima de mem6ria i est en dida que pede ser alocada por uma tabela - ntem a? 2. P or que nao utilizar occurs 0 se voce pretende arm azenar menos que 8 KB em uma tabela intema?
3 Defi ne 3 tabelas tntemes 1 d ~ nti ca s ut il iza ndo epenas DATA 4 dat a: begin of t t _l a occurs 10, 5 fl .
f2.
end of it_la , t t_lb li ke i t _la occurs 10 wtt h header li ne, i t _Ie l 1k.e i t _la occurs 10 wt tl! header l i ne.
I.
11 D ne mats 3 tabelas internas 1denti cu ut ll i zando TYPES efi 12 types : begin of t _ , 13 fl , 14 f2 , 15 end of t _, 16 t_it t ype t_ occurs 10. 17 data : it_21 type t_tt. 18 it_2b type t _it , 19 i t _2c t ype t_1t. estrutura do ODI C 10 with oI!eader 11ne, 10 with header I t ne, 10 wit h header Hne.
3. Voce pode utili zar a instrucao rea d tab' e para Ier as tabelas de ban co de dados ?
Exerdcio 1
Exiba e explique as convers6e s que oco rrem Listagem 11.15).
~o
,.
i l r
21 Define mafs 3 utilizando urna 22 data: 1t_3a 11ke ztx _it occurs 23 i t _3b like zt lUt occur s 24 ft _3c l i ke ztx_it occurs
ANALlS~ .... Dos dais primeiros metcdos, uma qcestec de cpinieo direr qual clc rc: oenhum parece termuitas va nta gens sobre a outre. Acreditc qve
metcdc, entretanto, seic 0 preferido. E o ma is clorc e pore ver 0 definil;e o voce podero simplesmente da r urn clique duplo no nome da estruturo do ODIC. Ao visua lizer a estrutura, 0 que voce estero venda e muito ma is significativo do que umo definir;eo do ABAP ; hover6 urn texto curto para codo eleme nto de dodos e um pora a pr6pria /4 estruiuro. Essestextos pode m temb em ser programa dos . Alem do mais, 0 estrvtura estorO
e0
0
ma is
terceirc
g 1t-fl .. ' 40 ' . it-f3 ' 00' . 1t- f2 .. it-f4 .. 4. append it . ID 1t -fl '20'. it-fJ ' SS' . it- f2 it- f4 2. append it . 11 12 sort it ?y fl. 13 do 5 times . 14 it-fl sy l ndex . 10. 15 itf3 '" 'XX '.
~ - 386'" ..... .....- ~....- ..... ".-............ -.-.- ~ -.., ~ -- . PRE HO... EM 21 DIAS ABA P!4
-- -
-- -
-- -
r
12
16
11 18 19
ft-t2
20 21 22
23
r ead table 11 ~th key fl ,; tt-fl binary searc h transporting no fi eld s. 11 sy-subrc <> O. insert it i ndex sy-tebtx . endif.
zs
endloop .
-,
Reconhecer 0 operador de corpo ,d~:: tabela e ~tiliza-lo para testar quanta a. existencia de dados em J i?a tabela interna e comparar 0
con teado de duas tabelas interna s para igualdade
Copiar 0 conreudo de uma tabe la interna para uma ou tra ut ilizando 0 operador de corpo de tabela e as"instrucces append lines e i nser t lines Visualizar e mcdificar as tabelas internas utilizan do edi t or- cal l ~tilizar as instrucoes i nsert e modi fy par a alterar 0 contecdo da tabela mtern. Excluir as linhas de urna tabela interna utilizando del et e, delete where, clear, clear i t [ J, refresh e f ree Preencher uma tabela interna utilizando append sorted bye call ect
"
hIlpJ I_.CDmpus.com.br
~'i '" ., .~ - ~
.....0
"
I
I '
..5t
388 I
389
conteudo da tabela
0
I
\
Se 0 te ste for verdadeiro, a tab ela interna estara vazia. Q uando false, ela
Para de terminer
0 numero de linhas em uma tabela interna, utilize a varidvel sy-tfi 11.Ela e configurada pela ias truclo descri be t abl e.
Z
m
S o n de:
ca ll ect
it
o carpa de uma tabela in terna erepresentado pela sintaxe it [ I , onde it e0 nome de qualqu er tab eia in terna. i t [ ] significa "0 corpo cia tabela in tem a
i t ". Nao podehaver nada entre os colchetes; eles devem ser escri tos exatamente da fo rm a como mos trado. Voca pode util izar essa sintaxe para executar operac;6es efici entes de tab ela qu e nao req ue rem 0 usa de uma linha de cabecalho. Essas operacoes serao descritas por todo este capftulo. Se uma rabela intema nao tiver uma lin ha de cabecalho, 0 pr6prio nome da tabela interna representara 0 corpo. Po r exemplo, se a tabela interna it njio tiver urna linha de cabecalho, voce podera utilizar tanto it [ ] como i t para rep resentar 0 corpo ; eles sio equivalences.
sy-t f f l l sy.tleng
Namero de linhe s Ccmprimentc de ume llnhc em bytes Velor ctuel de d6usule occurs
sy-tcccu
Os seguintes pontes se aplicam: Se a adic;io 1i nes i for especificada, 0 rnim er c de linhas sera colocado ern sy-t f t l l e f. Se a adiC;ao occurs j for especificada, sera colocado em sy-toccu e i.
0
........ ~ . . - . . -
11'
11'
11'
I
O~ lU ABE IHmH>S AY'"YlO 5,PAm1 I lAS A
..1."' __
391
Ho somente umo insffincio em que sy-toccu ire dife rir do clousulc occurs no definic; o de tobelc . Quando sy-tl eng * sy-tcccu > 8192 c e depots que umo linho for cdtclcncdc a fobelo intemo , sy-toccu sem zero. 1550 indica que a rnem6rio esfd sendo a!ocodo em blocos de 8 KB porn esse tob elo interne .
INltIS~ ~
A linha 7 campara 0 corpo cia tabela intema utilizando 0 operador de corpo de tabela com valores iniciais. A tabela int em a ainda nao con tern Iinhas, entia 0 teste e verdadeiro.
A linha 11 utiliza 0 operador d e cadeia (:) para acrescentar tees linhas identicas a it.
A linha 13 faz novamente urn test e do corp o. Dessa vez, 0 teste e prec edido por urn not logicc. A tabela intem a contem dadcs, entia esse test e everdadeiro. . Depois de cada instrucfo append, 0 valor de sy-tebt x sera configurado com 0 mimero de linhas na tabe la in tema. A linha 17 escreve seu valor.
A linha 18 utiliza a instrucao descri be para obrer 0 mimero de linhas e o coloca em sy-tfil1. Tarnbem obtem 0 comp rimento e a tamanhc cia linha da clausula occurs e as coloca em sy- t l eng e sy-toccn,
~NTRADA'" Lista ge m 12 . 1 A instrucdc describe table utilize os vcrlovels de sistema ,. pora quontfkor 0 ccnteudc de tabela
1 report ztx1201 . 2 data : begi n of it occurs 3, 3 fl val ue ' X' , 4 end of it, 5 n type 1.
6.
Se voce precise- openos sober se a tobe lo ccntern dodos, ndo quontos linhos elo possui, utilize 0 operador de corp o de tabe la. He e mots efldente do que 0 instrw;ao describe ta bl e.
10 11 append: tt , it , tt .
12
j tl [ ] .
' number of rows f rom sy- tebtx" , t abl e 1t li nes n. 'n~er of rows from sy-tfn 1: ' ' l engt h of a row from sy- tleng:' , 'oc curs val ue f rom sy-toccu:' ,
sy-te btx.
sy-tfil1 , 5y-t1eng, sy-tcccu .
Duos tobelos internos terec 0 mesmo estrutvro se 1) ambos tlverem 0 mesmo numerc de componentes e 2) 0 tipo de dodo e comprimento de codo componente fore m iguois 005 do compo nente correspondente do outro tobe la inteme . Somente os names de componente ndc precisom corresponder.
A inscrucao anterior copia 0 conteudo do corpo de it! e 0 coloca no corpo de ; t2. Qualquer conteudo existente em i t2 sera sobrescrito. 0 conreado das linhas de cabecalho, se uma das tabelas intemas river uma linha de cabecalho, permanecerf inalteradc. Essa e a maneira mais eficiente de copiar 0 conteudo de um a tabela intema para outra.
~IIIIIIIIIII - - - - l
APREND! EM 21 0lA5 ABAPI4
393
Sintoxe do
c.n
Z
m
instru~ao
insert 1i nes
onde :
Utilizondo
0 instru~cio
append 1i nes
U tilize a instru~o append 1ines quando quiser acrescentar linhas ao final da ta bel a alva .
l.inhas de cabecalho.
S
m
III
! ,
I
cede:
t t l e i t2 sao as
a ser copiado de t t l . Se a adiljao fr om nao for especificada, a c6pia cornecaraa parti r daprimeira linha de i tl .
nt
ea indice da ultima linha a ser cop iado de ttl. Se a adilJao to nao . for especificada, a c6pia continuara ate a ulti~a linha de ttl.
Se nem from nem to forem especificada s, a tabela inte ira sen acrescentada. . Depois que a instrucio append 1i nes for executada, sy- tebt x iracanter o mimero de linhas na tab ela.
ENTRADA'" Ustagem 12.2 Este pragrama copia as dodos de umo tabelo interne ~ para outra utilizondo os instruc;6es append lines e i nsert lines
1 r~port ztx1202. 2 datil : best n of i tl occurs 10,
S
6
fl.
Utilize r append l t nes sera de tres 0 quotro veees mois rOp ido do que utili or append poro odicio nor os linhos umo de codo vez. z
end of lU HZ 1i ke i tl occurs 10 with header 11ne, alph a(lO) val ue ' A"BCOEFGHIJ ' .
Utilizondo
0 instru~cio
insert 1i nes
U tilize a instrucio i nsert 1i nes quand o quiser inserir as linhas em um Ingar dif er en re d o final cia tab ela-alvo.
11 12 append lines of it! fTOll 2 to 5 t o it2 . 13 l oop at ttz , 14 write uz-n . 15 endloop. 16 17 i nsert j tn es of it! fJ"OOl 8 i nt o it2 t ndex 2.
'"
~~~~~~~~~~~~ I I I I
I
DlllUABlliS INlERNASAV (AIlAS.IARTn All
~ I !.
394
395
Compo rg ndo
Voce pode u tilizer 0 operador de co rpo de tabela para comparar duas tabelas intemas, co mo pode sec visto a seguin
i f itI[] i t 2[
comeadc de
1.
25
26
27
endloop.
28
29 skip.
Para utilizar essa estrurura, as tabelas intemas deverac ter a mesma estrutura, Se elas n io tiverem a mesma estru rura, voc e tera. que com pari-las manualmente, linh a po r linha . . Essa ins t ru~ao sera verdadeira quando iti e H 2 contiverem 0 mesmo mime ro de linhas e 0 conreado de cada linha for 0 mesmo.
A instruli o If - Equal t o e 0 moneiro mcls eficlente de comporar 0 o contendc de duos tobe los intemos.
Utiliza ndo a
instru~ao
edi tor- ca l l
8 C0 [
A instru~ao edt t or- call exibe 0 co c ceudo de urna tabela interna para 0 ususrio em urn editor se m elhanre 41.0 edit or de c6digo-fonte do ABAP/ 4. E uti! para depura.~o e como uma interface simples a fim de permitir 41.0 usuirio digitar e modificar os dados em forma de tabelas.
BH IJCO E
B A H A l A J CD A E
!!!
A BC D E F G H I J
AHiLlS~
As linhas de 8 a 10 preen ch em i tl co m 10 linhas con te nd o as primeiras . 10 letras do alfab eto. A linha 12 acrescen ta as linh as de 2 a 5 de i tl para i quatro linhas contendo as let ras de B a E.
A seguir, veja a sin taxe da ins tru~ao editor-call. editor-call for it [title el [display mode]
onde:
N a linh a 17, a adi~ao t o nao esti especifica da, entdo 0 final de i tl e assumido. Is so ins ere as linhas 8, 9 e 10 de i tl em 1t2 antes cia linha
2.
Na linha 24) se a Ietra em it2-fl for maior que au igual a E a linh a 1 , de itl sera ins erida an tes cia linh a atual de i t2 . (A adilj:io f r omnio esta especificada, entao 0 inicio de 1t 1 eassumido.) 1550 resul ta na inser~io de quatro linhas . Na saida, sio os valcres I A' . A linha 35 copia 0 conteudo de i tl para it2, sobrepondo com pletamente 0 conteddo exist ent e,
0 comprimeato maximo de uma linha e de 72 caract eres. te o te xto exibido na barra de tfrulos da janela do editor. A adi<jao di spl ay mode faz com que os clados sejam exibidos no editor em modo de exibicsc . 0 usuario sera. capaz de p esquisar e rolar, mas nao sera. capaz de alterar a cc nteud o. Depois de visua lizar ou mo dificar 0 conteudo da tabela inte rna atraves do editor, 0 usuario pressionara um destes botoes: Save, Back, Exit ou Cancel. Save grava as alteracoes feitas 41.0 con teddo da tabel a inrern a e retorna 41.0
XXIIIIIIIII I
396
APREH OA EM ' 1 D ABAP/' IAl
II
397
programa. Back, Exit e Cance l saem do editor e retomam ao programa. Se alreracoes tiverem sido feitas, sera solicitado 010 usudrio salvar au cancelar as
alceracoes.
Depois que a instrucac edi tor-call for executada, sy-subrc sen configurada com as valo res mostrados na T abela 12.2. Ta bela 12.2 Volores de sy-subrc depois do instruc;oo editor-cal l
sy-sub rc
Se nenhum dado tiver sido digitad o quando 0 editor foi exibido , 0 cedigo na Listagem 12.3 produzirf esta safda:
Data was not changed
Haee
Significado
Uma grovoo foi executcdc . 0 ccntecdo do tcbelo interne pode ou nOD fer side olterodo.
o
4
Address Phone
F~efo l"lll
conteudc do tobelo
Text
conteddc e entao escrito e uma men sagem-tambem se uma alten!;aO foi execurada.
e exibida no editor.
. A Listagem 12.3 mostra urn programa de exemplo que utiliza a instntc;ao edi tor -ca 11. Nesse exemplo, a tabela interna e preenchida corn cinco linhas e
As linhas de 2 a 4 definem urna tabela intema que tern urn dnic o componente t, comprimentc de caractere s 72.
A linha 5 define uma segunda tabela interna igual aprimeira. Ela sera utilizada para armazenar urna c6pia de referencia dos dado s em it. Ela nao tern uma linha de cabecalho. A linha de cabecalho foi ignorada ja que nao era necessaria nesse programa. As linhas de 7 a 11 acrescentam cinco linhas
Listagem 12.3 Utilize a instrw;co editor-call paro visualizor, editor e depurcr 0 ccnteedo de uma tcbelo inte rne .
1 report ztxI2.03.
da linha de cabecalho.
A linlla-13 copia 0 corpo de it para 0 corpo de sa ve_H. ] i que save_i t nao tern uma linha de cabecalho, 0 lade esquerd o da atribuicao pode ser escritc com ou sem colchetes. A linha 14 exibe
0
z
3
I 6
dat a: begin of it occurs 10, t(i!), end of it, save_it l1ke 1t occurs 10.
titulo
Freeform Entry.
A linha 15 verifica 0 valor de sy-subr-c para determinar se 0 usuirio executou urn a~o salver. Se ele nao executou, provavelrnente os dadcs nac foram alterados e uma mensagem sera escriea. A linha 17 compara 0 novo cocteedo de it com a c6pia de referencia em save_it . Se forem diferenres, uma mensagem sed escri ta. Se forem iguais, a linha 20 escrevers uma mensagem para qu e isso seja indi cado. A linha 22 escreve urna sublinha com 72 cara cte re s de comprimenrc.
'j I
1 .1
7 8 9 10 11
12
tt -t > 'Na~ :'. append it. it t 'Address : ' . append i t. 1t-t ' Phone : I . append it. 1t -t = ' Freeform Text append 1t. append It . clea r it-t w ith ' -'.
save_i t - H[] . "sese t hente a: save_it [ ] H [ ] . editor-ca ll for it t i tl e ' Freefonn Entry' . if sy- subrc 4. "0 usuartc n~o executou uma al;~o server write : I ' Data was not changed'. elseif save_it[ ] < > i t [ ] . -0 usuario executou IJlIIa alj:ao salvar \IIrHe: I ' D was changed'. ata else . \IIr1te : I 'Data \liAS not changMl '. endif. write: I sy- ul1ne(72).
.
I' I
Ii
13 14 15 16 17 18 19 20 21 22
As linhas de 23 a 25 es crevem
0 novo conteudo da tabela in terne, incluindo quaisquer modificacces feitas pelo usuario.
..-. . . . . . . . .&.&..&...-..-....
I I I I I I -I . . . . . . .
399
S
m
cede: wa eum a area de t rabalhc com a mesma estrutura de uma linha cia tabela int ema i t.
at i t where fl 19 1t - fl - 88. i nsert it. 20 21 endl oop. 22 23 skip . 24 l oop at it. 25 write / 1t- fl . 26 endl oop.
17 18 loop
4.
Se Il'O nao for especificado, 0 comeedc da linha de cabecalho sen inserido em i t . Se it nao civet uma linh a de cabe~allio,ll'a cle ver! set
993
,
5
1
especificado.
A ins tru~o i nser t p ede ser utilizada dectrc au fora de loop at it. Se urilizada fora, a adi~o index devera ser especificada . Se utilizada derrtro, i ndex sera op cional. Se a adi~io Da O for especificada, a linha atual sera assumida.
A Listag em 1 2.~ con rem urn prognma de exemplo que utiliza a instrucio i nsert.
"88,
3
885
illUSE ~
EH1IJDA~
Llstagem 12.4 Utilize a instruc;ao insert perc inserir uma (mica linha em uma tabela intema
,
5
A linha 12 insere a linh a de cabecalho de it com o uma nova linha no corpo de it antes da linha 3. A linha existence 3 tcrna-se a linha 4 depois da insercso. A linha 18 recupera essas linhas da tab ela in terna que tern um valor f1 maier que ou igual a 4. Antes de cada linha, a linha 20 inse re uma nova linha a partir da linha de cabecalhc de it. Antes da inser<;ao, a linha 19 alte rou 0 componente fl para que 0 m esmo contivesse 88.
Depois que coda instnH;60 1nsert for eecveec, 0 sistema indexa r6 navome nte todas as llnhcs cbcixc do inserida. lsso introduzir6overhead q uando voce Inse rir linhas pr6ximos 0 0 inicio de umo grande tebelc interne. Se voc e precisor inserir um bloco de linhos em umo grande tobelc Interne, prepare u ma outre to belo com as ltnhcs 0 serem
,
8
6 do 5 t i mes . It - fl sy-tnde x, 7
append it.
eneeo.
I.
11 it f1 -99. 12 i nsert it ; ndex 3. 13 14 l oop at 1t. 15 wrt te / it-fI.
-.
400
UREH DA EM 21 DIA SABA P/4
. -.~.
_ -
. ~. ~
inseridos e utilize insert lines porsuo Vel . As linhos no tobelo a lv senSe e nova mente indexodos apenos umo unico vez, depois que esse instruc;ao for execvtedo.
Os seguintes pontas se aplicam : Se from va for esp ecific ada, a linha sed, scbrescrita com
00 . 0
conteudo de
d. linha de cabecalho.
Se i ndex n fo r especificada, n identificari a n6 mero cia linha que foi
scbrescrita,
modify i t pede ser especificada dentro ou fora de 1cop at it. Se especificada fora, i ndex n devers ser especificado. Quando especifl .ada dentro, ind ex n sera,op cional. Se nao fa r especificada, a 1inha atual sed modificada. transport i n9 especifica quais compenentes devem ser sobrescritos. Sem ela, todos eles sersc sobrescritos . Com ela, sornente os compcnentes especificade s serac sobrescri tcs. 0 restante p ermanecerf inalterado. Especificar uma condicacwhere depois de transport l ng fara com que as componentes especificadas sejam sobrescrieos em todas as linhas que sarisfazem a clausula where. 0 lade esquerdo de ada parte de exp deve especificar urn componente de it . 0 mesmc componente pode ser espe cifi cado depois de transporting e em exp o VocE. nio podera utilizar modify it com where: Dentro de lo op at i t coo Com a adi~ao in dex A Listagem 12.5 m ostra urn pr ograma de exemplo que m odifica teadc de uma rabela interna.
afetari imediaumente a tabela interna mas, em vez disso, elase tomara efetiva
oa pr6xima passagem do loop. Ao inseri r urna linha tkpois da linha atual, a tabel a sed novamen te indexada em endloop, sy-tebf x sera incr emen tada e a pr6xima passagem do loop pr ocessara a linha indicada po r sy- t abix. Por exemplo, suponha que voce esra. na terceira passagem do loop e ins ere urn regiscro antes da linha 4. Quando endl oop ~ executada, a nova linha se toma a Iinha 4, a l.inha 4 anti ga se toma a linh a 5 e assim por dian te. Sy-te bfx e incrementada em 1 ponto e a pr6xima passagem do loop processa 0 regisrro rece ntemente inserido. Set den tr o de urn lo op , voce inserir uma linha antes cia linha atual, a tabela sed novamente reinde xada em endlo op. D essa vee, entr etanto, sy-tebtx e incrementada par 1 mais a ntimerc de linbas.inseridas antes cia linha atu aL Da pr6 xima vez que ocorrer 0 loop, a linha depois da linha atual sera processada. Suponha, por exemplo , que voce insira na terceira pas sagem do loop uma linha an tes ds linha 3. Em endl oop, a nova linh a se torna a linha 3, a linha 3 se torna a linha .. e assim p ar diante . A linh a que voce acaba de processar agora ted um Indice de 4. sy- t abi x eincremea t ada per 2,0 que cia S. A linha 4 fo i reindexada para 5, sen do assim sera processada na pr6xima passagem do loop.
EHTRAOA~
tn
1 report ztx120 S.
Z data: begi n of it occurs 5, fl 1i ke sy-tndex, 3 f2 , 4 end of it. 5
...
~ m
onde:
it e0 nome de um a tabelaintem a com au sem uma linh a de cabecalho.
c1 e c2 sao compenente s de i t.
exp uma expressaa logica envelveodo componentes de it.
alpha (5) val ue ' -'BeD . E' 7 8 do 5 time s varyi ng it-f2 f rom al ptla+O next alpha+l. it-fl .. sy-index. 9 append 1t. 10 enddo. 11
15
.........................................L..lL..lL..O.......................a...L.&.
402
I .I-
~I
I I
I 11 11 ...........
.. .. ..
. -.
403
16 l oop at 1t.
17
write: I n - n, it-f2.
endl oop.
18
19
As linhas de 20 a 23 executam urn loop por todas as linhas de it, colocandc cada linha, uma de cada vez, na linha de cabecalho . A linha 21 mu ltiplica po r 2 0 conteudo do cemponente da linha de cabecalho flo A linha 22 copia 0 conteudc da linha de cabecalhc de volta para a linha atual no corpo de it, sobrescrevend o-o. A linha 30 mo difica 0 coneea do do cornp onente da linha de cabecalho I. . f2, at ribuindo a ele urn.valo r de 'X A linha 31 modifica todas as linhas n o corpo onde fl njo eigual a 10. Somente 0 valo r de f2 e copiado da linha de cabecalbc e scbrescreve as valores de f2 no corpo. fl permanece inalterado no corpo e na linha de cabecalbo.
2'
25 ski p. 26 l oop at i t . 27 write: I it-fl . H-fl.
28 endloop .
Excluindo
Para excluir 0 conteddc de uma tab ela in tem a, voce pcderd ut ilizar as seguintes insrrugoes:
free
refre sh
clear
delete
2 B
3 C
5 2 5 , 2 A , B
6 C
10 Z 10 E
Sintoxe do
f ree it.
instru~ao
free
2 X
, X
6 X 10 Z
onde:
tt
10 ,
Os seguintes pont os se aplicam : Todas as linhas sao exclutdas e toda a mem6ria urilizada pelo corpo. da tabela interne e liberada. A linha de cabecalho, se exisrir, permanecerd inalterada.
~ . I.-I
I I"'I I I -I I -I I I I I -.
'PIEND' 1M 21 DIAS"",.
. -.
.
Sintoxe do
r ef resh
404
40S
Emboro c memoria para as tc belcs internes seja cctcrncflccmente libe rcdo durante fino l jzo~oo de seu progromo, se voce mesmo a llbercr
fato de
prograrno oinde noo tero sido finolizodo . Todos as recursos permcneee eee o locodos e 0 progro mo nOo termincrO ate a usu6rio pressionor be a bettie Bock. lsso, finalme nte, terminc se u progro mo e H rc tcd c 0 ccn tevdc do tcbelc infe rno. Voce poder6 ltbe rcr a s tobelos Internes
refresh
grama. contecdo do tobelc interne ser6 liberodo ante s de 0 usuc ric ver a listc e nco depois d isso .
00
Utilize free quando terminar de urilizar urn. tabela interna. A Listagem 12.6 mos tra como utilizar a instro~ao f ree.
it
ENruOA~
05 seguintes pontos se aplicam: T odas as linhas sao excluidas. T oda a m em o ria utilizada pelc corp o cia tab ela interna permanece alocada. A linha de cabecalho, se exiscir, permaaecer f inal terada, U tili ze refresh quando quiser excluir to das as linhas, mas quiser pr eencher a eabela intema novamente. Por exemplo, se esti ver produzindo urn relat6rio de vendaspor departamento, voce podera preencher a tabela in tem a com todas as vendas de urn departamento, processar os dados e, em segu ida, escreve-los. E nrao, depois de r efre sh, voce poderf preench er a tab ela interna co m os dados do proximo depart amento, escreve-lcs e assim po r dian te. Se voce quiser pr eencher uma tabela imediatamente depois de [impa-la, refresh sera mais eficiente do que free ja que impede alocacoes des neces sarias de mem6ria. A Listagem 12.7 mos tra co mo utilizar a insrrucao re f resh .
I report ztxl206. 2 data: begin of it occurs 3. 3 11 11ke sy- t ndex, end of i t. 5 s do 3 ttees , it -f1 .. sy- t ndex, 7 Append ft . 8 enddo. 9 1D 11 l oop at it. 12 wri t e it-flo 13 endloop .
I' 15 fr ee 1t . 16 1f H[ ] is initial. 17 write: / ' no rows exist in it after free '. 18 end1f .
ENllAOA~
Listagem 12.7 Util ize a instrur;o o refresh perc excluir tod cs as linhc s de um a tobe lc interne
1 r@ port ztx 1207. 2 dat a: begin of it occurs 3. 3 11 11k@sy-t ndex, 4 end of it. S 11k!! sy-i nd@ x.
s
7 do 3 t tees . t sy-t neex. 8 do 3 times. 9 i t -fl i * sy- tndex. lD append it. 11 enddo. 12
ANALISE ~ A linho 15 exclui tod as as linhas do tob elo lntem c e hbere 0 mem 6rio ossociodo .
II"
-_ ...
D~ IU A8El.\S INTEiHASAVIJl(ADAl, PAmI I
406
407
14
15
16
17
Sintaxe da interna
i n stru ~ao
III A seguir, veja a sintaxe da instru~ao clear quando ut ilizada co m u ma tabela intema.
18
19 20 free it .
S
m
cl ear i t : cl ear t t[ ]
on de:
it
e 0 no me de um a tabela intern a.
ANilJS!~ .
A linh.a 7 ccmeca urn loop que e executado ues vezes. Ela con tern urn
loop interne aninhado.
Se i t tiver uma linh a de cabecalho, c1ear i t [ ] excluiratodas as linhas. c1ear it limpara a Iiaha de cabecalhc. Se it nao river um a linha de cabecalho, as duas fortnas excluirac todas as linh as e deixario a m em6ria alocada.
o efeito de cl ear em uma tabela ia terna esta. resumido na Tab ela 12.3. 0
efeito de cl ear varia,dependendo se a tabelainterna tern uma linha de cabecalho
ou nao. Tabela 12.3 Efeito de clea r em umo to belo intemo
e mulciplicado
IInha de
cab~l h o
A linha 17 exclui todas as linhas cia tabela inrema, mas DaD Iibera a memoria. Refresh sera utilizada aqui em vez de f ree ja que 0 loop
ext~rno se repete e imediatamente preenche de novo a tabela interna.
A linha20 excluitodas aslinhas e libera a memoria para a tabela intema antes que a lista seja exibida. Isso faz com qu e 0 programa se tome mais eficienee.
programa na Listagem 12.8 ilustra a usa cia instru ci o clear com uma tabela interua. Listagem 12.8 A lnstrucdc clear pode ser utilizada pa re limpar a linha de cobecolho au excluir 0 conteudc de umo tobe lo intemo
1 report ztxl208.
,.
Ina
"
";.J
408
409
,,
4
I I
sy~s~bn:.
IHlJ.ISE ~
Se from i for especificada , as linhas serao excluidas comecandc com a i-esima linha. Se to j for especificada, as linhas serac exclufdas ate a j-esirna liah a,
inclusive ela,
A linha 10 escreve espacos em branco, mostrando que a linha de cabecalho de i t esd . limpa.
As linhas de 13 a 15 produz em a safda, a fun de mostrar que a tabela inrerna ainda contem duas linh as. A linha 17limpa a corpo de i t, excluindo efetiva.mente todas as linhas e deixando a memoria alocada. 0 conteado da linha de cabecalho
assumida.
A expressao exp deve tel' urn componente de i t DO lade esquerdo de cada comparacao. POI'exernplo, se i t river as componentes f1 ef2, exp
pcdera ser where fl 'A' and f 2
c
I
B' .
pennanece inalterado.
A s linhas de 18 a 20 nao produzem uma saida porque a tabela interna
A Ilstagern 12.9 mcstra urn programa de exemplo que exclui as dados de uma tabela interne ut ilizando a inst ru (jao delete.
esd. vazia.
A linha 21 ma st ra 0 c6 digo de ret o rn o depois do loop. Isso novamente confirma que n enhuma linha existe na tabela int ern a.
1 repor t ztx1209. 2 data: begin of it occurs 12, fl . 3 end of it , 4 alp ha(12) val ue ' ABCDEFG K . HIJ L' 5
6 7 do 12 t imes varying it-fl f rom alpha.+O next alp ha+L append i t. 8 enddc , 9 lD 11 loop at it . 12 write : I sy-tabix , u -n. 13 endl oop.
(bi [f"",
'J
[to j ]
14 15 del et e it tn dex 5.
"'I~'- I
:.
ITT
.~ .T-TT~I
~ I . . . . . .
T . ~ ... . . .
'!I!
'!I! '!I! ~ ~ ~ ~ ~
'!If - ....
410
"m DA EM 21 DI A5 ABAP/,
16 skip . 17 loop at it. 18 write : I sy-t abix . it -fl .
19
411
enetccp.
20
21 delete i t frtm 6 to B. 22 s ki p. 23 loop at it .
Z4 25
writl!! : I sy-tabix . it-flo endloop .
1 A 2 B 3 C
D 5 F
2'
27 delete i t where fl between ' B' and ' 0 ' .
6 G 7 H 8 I 9 J
ID
11 L
32
33 loop at it where fl between 'E' and 'J '. 34 delete it. 35 endloop .
,
7
8
I
I A 2 B 3 C D
5 F 6 J
,
L
36
37 sk1p. 38 loop at it . 39 write: / sy-tabix. i t - fl . 40 e.ndloop . 41 42 read table i t wi t h key fl ' K' bi nary sea rch. 43 "rite: t, I ' sy-su hre- ', sy- subrc , ' sy- h hh.- '. sy-tabfx. / " . 44 1f sy-s ubrc 0; 45 delete i t i ndex sy- tabi.x. 46 endtt . 47 48 s ki p. 49 loop at it. 50 write : I sy- ta bix . it-fl.
,,
5 L
A 2 F 3 J
-.
1 A 2 3 L
,
0
sy-subre
1 A 2 L
sy-tab 1x
51 endloop. 52 53 tr-ee it .
INlllS! ~
As linhas de 11 a 13 escrevem
A linha.15 exclui a quiara liah a, removendo 'E' cia tabela. A sexta linh a
se to m a a quinta,"a serima se lorna a sexta e assim por diante.
5 E
, F
7 G
8 H s I
excluidas.
10 J
~ --
. ... .... I
D~ lUABEUS IIffiRNAS A YAll(ADAS, PAmI
I
413
A Iinha 33 recupe ra as linhas que tern urn valor fl entre I EI e I J " inclusive. As linha s 2 e 3 atend em as crit erio s. A ins trucio del et e na linha 34 DaD tern quaisquer adiljoes, assim sendo exc lui a linha arual em cads passagem do loop. Is50 faz com que a segunda e terceira linhas
sejam exclufdas.
A linha -tz localiza a linha com urn valor f1 de 'K Emb ora i t contenh a apenas tres linha s, bi nary search foi incluida para um a me lhor exem plifica~o. A linha 2 e correspondente, entaD sy-subre e configurada a zero e sy-tebt x econfigurada a 2.
I
A linha 45
S
m
onde:
t teo nome de uma tabel a interna.
Semelhante is insercc es, as exclusoes dent ro de loop at it Ilia afetarao imediatamence a tabela inte rna mas, em vez disso, se rcmarao efetivas na p r6 xima passagem do loop. Ao excluir uma linh a depois da lin ha atual, a tabe la sera novam ente indexada em endl cop, sy-t abix sera incrementada e a pr6xima pass agem do loop pro cessard a linha indicada por sy-tabix. Por exemplo, suponha qu e vo ce est i na te rceira passagem d~ loop e exclui a linha 4. Quando endl oop fo r executada, a linha sera exclufda, a linha 5 se tornara a lin ha 4 e assim par diante. sy- t abix sen increm en tad a em 1 e a pr6xima passagem do loop processara 0 pr6xim o registro. .:Se, demro de urn loo p, vo ce excluir uma linhaa nU s da linha atual, a tabela sed no vamente reindexada em endloop. D essa vez, entretan to, sy- t abix e increm ent ada em 1 ponte, menos a ml mero de linhas exclufdas antes da linha atual. D a pr6x.ima vez que ocorrer a loop, a linha depois da linha atual sera pro cessada. Sup onha, par exemp lo, que voceexclua na terceira passagem do loop a linha 3. Em endloop, a linha 4 se tcm a a linha 3 e assim por diant e. sy- tebt x ~ incre mentada em 0 p ontes , resultando em 3. A linha 4 foi rein dexada para 3, sen do assim sed pr ocessada na pr6xima passageII!' do loop.
w ~ uma area de trabalho com a mesma estrutu ra de uma Iinha. cia tabela a
interna. c
e urn componente de f t .
Os seguintes pontos se aplicam: Se "fa to nao fo r espec ificado, a linha. a ser acrescentada sera obtida a partir da linh a de cabecalho.
Se wa to fo r especificado, a Iinha a ser acre scentada sera obtida a partir da area de tra balho wa So me nte urn componente c pede ser especificado. , A instru~o append sorted by obtem uma linha da area de trabalho e a insere na tabela interna no local em que pertence na o rdem de clessificacao. Ela tern duas propriedades in comuns : 0 mi m ero de linbas qu e pede ser acrescentado e limit ado pelo valor na ckusula occurs. Por exemplo, se a clausula occurs for 10, urn maximo de 10 linhas poderao ser acrescen u das a tabela interna. Essa ~ a unica situac;ao ern que occurs lim it a 0 Dumero de linhas que pode ser adi ciooado em um a tabela intern a. Someote c1assifica em ordem decrescente.
-414
415
A Listagem 12.10 mostra urn prognma de exemplo que em. uma lista dos tres melhores representantes de veada.
mRlllA~
3
3. Se essa tabela interna for preenchida ucilizando append sorted by, o mimero mhimo de linhas nessa tahela intema sera Iimitado a tres.
Listagem 12.10 Utilizando append sorted by para localizer as tres melhores representcnt es de vendo
b~ 1n
2 data :
5 6
7 8 9 10 11 12 13
it-sal es
linho de ecbecclhc
sales nome
i t-name
' Jack' .
ocnsantodo.
it-sales 50.
linh 1 o
i t -name
' Jfll'.
\
"
50 vem depois de 100 quando a orde m de c1assifica~ao e decresceate, entio a Iiaha 13 insere a nova linha depo is cia exiseenee (veja a Figura 12.2).
F igura 12 2 A segundolinha e
19 20 21 22 23 24 25
i t-name
' Gina' ,
do primei o linno. r
Iinho 1
2
26
27 it-sales 100. 28 i t - naJnl!! -' Jeff ' . 29 append 1t sorted by sa les .
150 vem antes de 100, entao a linha 15 inse re a nova linha ant es da primeira linh.a. A tabela int ema agora contem a mimerc maximo de linhas : treS linhas (veja a Figura 12.3).
append it sorted bysoles linha de ccbecelhe
tt
150
corpo
Jcne
linho 1
150 50
Jone Jim
2
3
100 - Jode
ma.--_416
"RENDA EM21 DIAS . " P/4
_ --_-..- -----............ Fi gu r a
12 4
_ -- -
- -
D~ ILTABruSIII1UIlASAV"~Al, PARTE 1
417
75 vern depois de 100, en tao a linha 21 insere a nova linha depois da segunda Iinha, fazendo assim com que a nova linha se torne a terceira linha. A t erceira linha deveria se tamar a qUafta, mas it somente pa de armazenar tres linhas, enesc a quart. sera descartad..a (veja a Figura 12.4). 200 vern antes de 150, entio a linha 25 a insere antes da primeira linha. o restante das lin.has edisposto abaixo e a Ultima linha e descartada (veja a Figura 12.5).
append it sorted by sales
Nao misturar append sorted by com quaisquer outras ins truc;6es que adicionam dados em uma ubela interna (como insert ou append) . Se voce preencher ; t com append sorted by, esta deved sa a Unica. io.stru~o a .ser utilizada, Misturar essas instruC;6es resultard em comportamento imp revisfvel.
append sorted by sera mcls ehctente quand o voce estiver ccrescentondo uma linhc per ....ez em umo tabe lo intemo. S voce j6 fiver os e dodos em uma tabela de banco de dodos e simplesmente quiser localizer as 10 vclcres superiores sere mais efiden te inserir as linhos utilizondo uma operao de array e, em segu ida, a d ossificot;oa. (Para abter jnformoes sobre as cperccoes de arrey, ca nsulte a Dio 13, "Icbelcs intemos ev encodes, Porte 2 .)
dapoi5 do segundo. ent60 ala, inserida 16. Atobe/a inferno pode onnazenor um m6Kimode 1r& linhos. ent60 0 quam linno Ii desccrtodo.
it
I I
75
linn de cebec;olho o
George
,
\
nOoocrescentado
\ porql.Je~63 I e it ja contem
Jinho 1 150
Jane
2 100
3 50
Jaa
Jjm
I 3 linhas
--<F la" rn 1 2
..,
Dena vez, 0
nOva
Sintoxe da instru~aQ coll ect en A seguir, veja a sintaxe da instnlc;ao co11 ect.
linna t 200
~ m
Gino
onde:
i t ~ uma tabel .. intema.
2 150
3 100
Jane
Joclt
1..5 t: :!iri J
100 ve:m depois de 150, mas ja existe 100la. A linha29. portaato, tenta icserir a nova Iiaha depois do valor existente de 100. 1550 a tornaria a linha 4, ent.ao a linha nio einseridaabsoiutamenre (veja a Figura 12.6).
Fl g u r n 12 6
il~
co<po
...
,
\
Ii ho 1 200 n
2 150 3 100
,
-<-
I t'IIio ocrescenlodo
,I
sp-5 - 5
418 I APR'NDA ' M11
DIAS ABAP/4
iI
419
sistema eneso pesqu isari 0 corpo da tabela interna quanto a uma linha com a mesma chave daquela na area de trabalho. Se nao localizer uma, a linha sed acrescentada ao final da rebel a. Se localizar uma, os campos numericcs (tipos i, p e f) na area de trabalho serao adicionados nos campos corre spondentes da linha localizada. A Lisragem 12.11 ilustra esse conceito.
Li sta g em 12.11 col le ct combina as linhas assim que s60 odicionedos em umo tobela intemo
1 report ztx1211. 2 data: begin of it occurs 10, 3 date type d, 4 tot_sahs t ype p decil11als 2, n!ll! (lO) , 5 nlf.lt_sahs type 1 val ue I , 6 end of i t . 7 8 9 f t -date . ' 19980101'. io 1t~tot_sales 100. ' Jack'. 11 f t -neee 12 collect it. 13 14 i t - dat e '19980101'. 15 it-tot sales 200. 16 1t.na~ J 1m' . 17 coll ect i t . 18 . ' ' 19980101'. 19 f t -dete 20 1t~tot_sales 300. 'Jack '. 21 it-name 22 ccl'lect it.
23
so
'Jack'.
" loop at i t .
. 45 46
1t ~tot_s a l e s ,
par te da chave padrlo -nao ! parte da cheve pa dr~ o pilrt@ da ehave pad r~ o -nao ! parte dl chave padra o
As I.ioha.s de 2 a.7 definem urna ta bela interna com quatro componenres. Dois sao do ripe caractere (dat e e name) e dois sao do tipo numeri co (t ot_sal es e riurn_s ales ). A chave padrao ~J portanto, comp ost a dos comp onec tes date e name.
As Iinhas de 9 a 11 atribuem valores aos componenees de linha de cabecalhc dat e, tot_sal es e name. nurn_sal es ainda tern urn valo r padrio
de I, arrib utdc na Iinha 6.
A linha 12 pesquisa 0 corpo de it q u anta a urna linha que tenha a s mesmos valores em date e name (campos de chave padrio) daqueles na linha de cabec;alho. A tabela interns esta vazia, entia nao ha correspondsncia de linhas. A linha de cabecalho e, portaotO, acrescentada a
"bela intern. (veja a Figu ra 12.7) .
f ig " r " J 2 7 $@oChov.podr6o tl60 for/ocolizodono corpo. 0 /inno sero oc:rescentodo. A chave podmo ecompostc d@ Iodos os compos
nOo-numericos, @nt6o n@ss!& diogroma, elo
collect it.
~n ho de eebe celhe
24 it-date 25 i t-tot _sal @ s 26 tt -neee 27 collect it. 28 29 1 t ~da t e 30 1t ~ to t_sal es 31 it- name 32 collect i t. 33 34 ft ~date 35 1t - t ot _sahs 36 it-name 37 coll ect i t. 38 39 i t - dat e 40 it-tat_ules
linha, mas as valores nos campos date e name nao sao correspoodentes,
entio a lioha de cabecalhc eacres centa da arabela interna (veja a Figura 12.8).
'19980102' . .7110.
'.
._~==----=-=-===-==-420 [ APRENDA EM 21
F igurn 12 8
- - i'
I i
:
~=-.---~------
- - - ~ ~- - I
DIAS ARAP/.
421
collect it.
ocrescentcc/o.
I) ;
F igura
12
11
coiled it.
200'
A linha 22 pesquisa a tabela intem a quanta a uma linha qu e tenha ' 19980101 ' no campo date e ' J ack ' no campo name. A linha 1 e a correspondente, eneso os campos nume ricos sao junt amente adicionados. 0 campo tot_sal es d.a linhade cabecalho contem 200. Esse 'valor eadicionado no campo t ot_sales na linha 1, dando urn total de 300. 0 valor no campo num_sa l es na linha de cab ecalhc e tambem adicionadc no campo num_sales na linha 1. ciando um valor de 2. A linha 1 e atualizada com esses valores. 0 conreudo da linha de ca-
Dessc vet, a chove pac/reoCOfTesponde com a segundo linho do tobe/o. Os campos numencos no area de trobolho s60 oc/idonadosnos .
compos'
corresponc/entes do segundo lin no.
linno de cabeljOlho
Flgu rn 12 1 2
coiled it.
coiled it.
linho de cobei71lho
Dessc vez, 0 chcve pac/r6o corresponde com 0 primeiro Iinho c/ lobe/a. Os compos o numeri os no 6reo de c trobo/ho s60 odicionodos nos
A cnave podroo n60 CCHTesponde com nenhumo "nho cle S5CI ent60 urno novo linna e ocrescentado.
li ha de c:abel;olho n
vez.
~ S ~:.J
l!SIl
+
l?!.?J"~ ' 2
~ ~~ ~ ~~mm
A linha 42 tambem faz com que uma nova linha seja acresce.otada a tabela internal jii que os valores em date e nameDaO correspondem com nenhuma linha de it (veja a Figura 12.13).
F lg urn 12
,~
compos
correspondenles do
~rimejro
\J9,9JtljJ }oo'
Iinh a.
~ ; 2!lO~ ~ '&t
.y
A linha 27 procura par uma linha com uma data 119980101 1 e urn nome ' Jack 1 A Iinha 1 e a correspond ente, entao 0 conteudc dos campos numericos (tot_sales e num _sales) nalinha d e cabecalho sao adicionados
collect it.
eellect it.
Novomente, a chcve podroo corresponc/ e com a primeirolinho do lobe/a. Os compos numericC5 no area de troba/ho sec
odicionodos nos
ccescencee.
+
ccrpc
,.
=i
compos
correspondentes do
~@t<@
, 8 00 ~
primeiro Jinho.
e@
~ ~
'200"
~ ~
~~'i~~Ff .'
,__4~
~\~;::~ 't~{
~ 'i<i!t~
~>~,'~
~ ,i,~.1~
E c c ... c .. . _
422 I
APif HDAEM 21 DIAl ABA1/4
"i'
" "
D~ IHABEUS IHIDHAS AVAII(ADAS, PARTE 1 I
- ....
423
U tilize append sorted by para criar Usus dos 10 melhores em vez de acrescentar linha par linha e, em seguida, classificar. Utilize coll ect pan samar contagens e totais dentro de uma tabela intema amedida queestiver sendo preenchida. Essa inStnleraOtambem pode ser utilizada para garantir a exclusividade de todas as entradas.
Se voce utilizer col lect pa re od icionc r linhos a urnc to bela interna , e tod e s as linhos deveriio set odidonodos com a usa de CD11ect. Voce
I I
j
noo deve combiner coll ect com append au com quolquer outre
instrvC;60 que od icion o dodos em umc tabelo intem o. Os resultados sere c lmprevisfvels. A cnlcc instrur;oo que voce pede utilizer para
moclificor a cc ntec dc de urno tobelo lntemc preenc:hida otraves de
collect
e modify
IFa~a
Resumo
0 operador de corpo de eabela proporciona UIIU maneira eficienre de eesnr quanto a. existencia de dados, comparar duas tab elas intemas pan igualdade au duplicar urna tabela int erna.
- =- - ---- -'Utilize a instn.u;60 free 00 finol de seu prog romo porn todas as tob elas intemos. Essa instru~o ir6 llbemr explidtomente 0 mem6ria q ue noo sere mois vtilizado no mo menta em que 0 usuerio estiver visualizondo a sardo. Utilize 0 operador de corpo de tabelo perc tester 0 existence de dodos. Utilize a irutru c;c o oppend sorted by qua ndo crior listos dos 10 melbcres, a menos que a listo je existo e precise apenos se r d os5mcqdo .
Nao acrescente ou insiro a s linhas, umo par vez, se elcs podem ser processodos como urn grvpo com 0 usc de insert 11nes of ou append 11nes of.
A instrU<;ao descri be t abl e coloca 0 namerc de linhas da tabela inte rna em sy-tfi 11, a largura de uma linha em byt es em sy-tl eng e o tamanho cia clausula occurs em sy- t occu.
Para cop iar uma pane de uma tabela interna de uma pan. outra, utilize append 1i nes of au i nsert 1i nes of .
editor-cal l exibe 0 conteudc de uma tabela int erna em urn editor. Permite ao usuariomodificar as dados e etambemuma uti! ferramenta
de depura~ o.
in sert adiciona uma linha em qualquer posierao de uma tabela intema. A pasi~o pode ser especifieacia urilizan do urn Indice ou pode operar na linha arual dentro de urn loop. m odify modifica a conreado de uma au mais linhas. A linh a pede ser especificada util..izando urn Iodice ou pode operar na linha atual dentro de urn loop. Utilizando a chusula where, voce poderf modifica.r 0 ccneeado de muitas linhas . defet e remove uma ou mais linhas. Quaado utilizada dentro de urn loop sem adic;oes, exclui a linh a atual. Voce tambem pode especificar urn deice Iodice, uma faixa de rndices. au uma clausula w here. c1 ear it limpa a linha de cabe~alho de it. Se nao exisUr uma linha de cabec;alho, todas as linhas serio exclUldas. clear it[ ] sempre exclui todas as linhas de it. A mem6ria da tabela interna permanece aloca&. r ef res h sempr e exclui todas as linb.as e dew a mem6ria alocacla. E eXatamente equivalente a c1 ear 1t [ ] . sera ut ilizada se a tabela interna tiver que ser novam ente preenchida com dados. f ree i t exclui fodas as linhas de 1t e libera a me m6ria. Deve ser colocada no programa imediatamente ap6s 0 termino do processamento da tabeIa interna.
P&R
Nest e capitulo, aprendi vdrias maneiras de realizar tarefas semelhantes. No ABAP/4, parece que sempre existem muita s maneiras de fazer a m esma coisa, Estou apenas apre nd endo. C onsigo me lembrar somente cia. existcncia de muitas maneiras de se executar alga. Por que mio se mostra apenas a melbor maneira e simplesm ente se esquece 0 resto? Aprecio sua pre ccu pacdo. Quando possfvel, eu omi to metcdos re petidos, raramente utilizados, ineficientes e arcaicos. Mas hi du as raz6es muito boas para incluir as varia;oes que descrevi aqui : 1) eficiencia e 2) compreensao do c6digo existen te. Devido aquantidadede dados que reside em urn sistema R/3 J a eficicncia ea principal preocupa!rao em programas AB AP/ 4. Voce deve se esfon;a r em utilizar a fo r ma mais eficiente de cadainstru~ao em urna d eterm in ada situ a!rao. 1S50 pode resultar em melhoras drasticas de desempenho, nao some nte para seus programasJ mas tambem para a sistema in teir o. E comum ter que regravar o codigo depois que 0 mesmo alcan~ar a produ ~o, ji. que tera
424
urn grande impa cro no desempenho do sistema. Quanta ao segundo ponte, as programadores freqa eceeccec ee gastam mais tempo Iendo a c6dig o existence do que criando urn novo ccdigo, assim send o vocE: precisa comp reender as vOlriac;oes sum dessas instrU~5es. Elas sao muito utilizadas no c6digo de SAP. Se voce nie compreender 0 c6digo de SAP , voce ni e sera capaz de com-
que aprende u neste capitulo. A se~o Teste:oferece pergunt as para ajudar a solidificar seu entendimente do con teudo abordado e a se~o Exercfcic permite que voce pratique a qu e aprendeu. Voce pede encontrar as respostas as perguntas do questionirio
13
Tabelas internas avan~adas , Parte 2
Q bjetivos do capitulo
Depais de coucluir este capitu lo, voce sera capaz de: P reencher uma t ahela intern a a partir de uma tabela de banco de dados utilizando as estru turas mais eficientes Executar 0 processamentc de inte rruPIia.o de controle ern tabelas intemas utilizando at e on change of
Teste
1. Se eu modificar a valar de sy- t eb'lx deotra de urn loop. isso ira alterar a linha atual? Par exemplc, as inStrulSoes insert. modify e del ete operariam na linha da hea de trabalho ou na linha indicada po r sy-tab1 x? 2. Quando devo utilizar 0 valor de sy- t occu? Por que pr eciso saber a valor cia c1iusula occurs em tempo de execu~o ?
Exerdcio
Leia a coateadc de ztxlfal em uma tabela interna (utilize select i nt o t able). Em seguida, modifique a coluna 1andl, de modo que a terceira linh a cont enha US' (utiliz e modify transport ing where). AIem disso, modifique as regices, alcerandoMA para TX (utilize m fy transporti ng Where). odi
Preen che ndo uma tabela interna a parti r de uma tabela de banco de dodos
Freqiientemente no ABAP /4 . os dados que voce coloca em um~ tabela intema pr oveem de uma au mais tabelas de banco de dad os. Esta secao apresenta as melhores maneiras de se fazer isso, As rnaneiras de preenchimen to uma tabela intema a partir de urn banco de clados se dividem em duas categorias:
! I
'l
. ._ ......
. ._ ..... ~_ --..___ __ _ ~
--
426
A PREN OA EM 21 OI A ABAP/4 S
427
Selecicnar uma tini ca linha pan u rna area de trabalho e, em segui da,
acrescentar (append)
,
I
como oper:a!fio de array. Nenhuma area de trabalho sera utilizada, nem mesmo
sera necessaria.
NYO..... Uma opertJ!;oo de arroy correspo nde a qualquer instruc;60 que executa ume O TrulO " c cerccsc em multiploslinhas de ume tcbelc interne, em vezde ume unice linhc de coda VeL h ccerccses de arroy sao sempre mois eficentes que as operc~6es de umo unica llnhc.
sel ect i nt o t abl e e a mcneiru mois eficlente de se preencher vmc tobe !o infemo a portir do banco de dodos .
re port ztx 1301. ta bl es ztx l fa 1. 3 dab i t l1 ke ztxl fa l occurs 23 ""ith header- li ne . 4 -nllo cod1fica urra enesetect S se l ect'" f ran zt xl fa l i nt o tab le i t . 6 l oop at it. ""ri t e: / 1t-lifnr , it-nallll!!l. 1 endloop . a I 10 select fJ'Olll zt xlfal into tabl e it 11 whl!!re 1i fnr between ' \12 ' and 'V5' . 12 s kip. 13 loop at i t . 14 ""Mte: /1t ~1i fnr. it- name1. 15 endloo p. 16 free It .
~
III
/2 .
from dbtab 1nto [camp eor re spcndent es dl!!] t abI e t t . os
on de:
dbtab ~ a nome de uma tabela de banco de dados. f1 e fZ sao campo~ dentro de dbt ab.
va
V1l
V12
1040
it
V,
V3
V4
O ut ras adilj6es, como where e order by, podem vir depois de ft . endsel ect nac e utiliaada com t nt c t able . select in t o t abl enioinici:z. urn loop, conseqiien'temente, endsel ect nso e necessaria.
VS
V1 V2 V3
V4
A inStruljaO select into tabl e coloca to das as linbas selecionadas diretamente no coepo de ft. Em prim eiro lugar, a coareado da tabela intema
existence edescanado. A Listagem 13.1 contem urn program a de exemplo que
VS
428
A linh. 5 recuperA todas AS Iiahas a partir da tabela de banco de dado, zt xlfal e as coloca diretamente no carpa cia tabela interna it.A linha
de: cabecalh o nao
Figu r a
13 1
A linh; 10 e semelhante alinha 5, anao ser pelo fate de que elaapenas recupera a s mimercs dos fabricantes entre V2 e V5. a conreado
existence de i t
A tebelade banco de dodosztx1302 contem Ires compos: f1,/2. f 3. f1 tem urn linico byte, f2 fem dois bytes e f3 /em urn byte.
Noo utilize endse lec t com se l ect into tab l e. Um errc de sintaxe
cccrrerc.
Se es~es dadosprecisarem ser classificados, utilize ainstruc;ao sort. Nao utilize order byem sel ect , mesmo se esses campos forem suporcados por urn Iodice.
Em urn sistema independence media, test es de medicao revelaram que a
inStruc;a.o sort e urn pouco rom rapida, M~m o se estivessem em urn mesmo myel, sort seria ainda 0 raetcdc preferido ji que essa in structo faz urn offload dos ciclcs a partir do servidor de banco de dados pua 0 servido r de aplicativo.
Figura 13 2
~.
Nco utilize order by com select into table. Em vez disso, utilize
selecionod04 em m e,", do tobelo de banco de dodos ztx1302. f /es se aiustarn exatcmente em coda Iinho de
{6 que a estruluro de i
tt.
, iii
d. i t
12
1 3
12
f3
. .-
Fig ura
13
Cada Iinha de dbt ab e movida, byte par byte, pArA urn. novalinha de it, que e exatameate igual a atribuir uma St ring de campo para OUtra. H oi som ente
uma diferenca entre esse procedimemo e uma atribui~.io de st ring de campo : dbtab pede ser mais curta (em bytes) que i t, mas cao pede ser mais longa que it. Se for mais longa, urn dump curto (erro SAPSQL_S ELECT_TAB _TOO_SMALL) ocorrera. Os tipos de dados e comp riment os de cada campo de envio em dbta b devem corresponder com 0 campo de recebimento em t t . Quaisquer campos remanescentes em it sao preenchidos com valores iniciais (espacos em branco ou zeros). As figuras de 13.1 a 13.4 ilustram esse ponto.
Nesse exemplo, somente os dois primeiros compos sea seJecianodos do tebela de banco de dodosztx1302 pa re um totel de tr~s bytes. Eles 56 0 co/ceodos byte porbyte nos primeiros iris bytesde ceda linha de tt .
corpo de i t
fl
f2
f3
'"
_L.._ _ _
430
FIgura ]3 4
_~_
___
__
__
-.J<_ ..
...-..
~....-..
.-.
431
Novomente. cs dais primeiros campos sao sefecionodos do Icbelo de banco de dodos ztx1302 mes,. eessc vez, em
uma ordem diferente
ENTUDA'" Lista g e m 13.2 a que acontecer6 sa as estruturos de tcbelc diferirem ,. quando da vtilizol,;oO do instruc;oo sel ect -tnto
1 2 3 4 5 report ztx1302. tables ztxlfal. data i ncl ude structure datil.:
doqvelo em que
oporecem no 1a~1o
6 I
quando colocodos byt. por by1e em coda linhode t t. ft -!I recebe 0 prlmeiro byte de/2
ett-JZrecebeo
A T abela 13.1 resume as regras para autilizacjo de selectcom into tabl e. O s campos selecionados devem ajustar-se na ube1a intema. Esta tabela descreve ~ restrir;oes com as quais voce ir.i se dep arar.
8 select ... from ztxlfal fnto tab1l!: it where hndl .. ' DE' . 9 l oop at it. 10 write : I it-lifnr, it-landI, it-regfo, ft-1 nvoice_ilJl't. 11 endloop. 12 13 skip. . 14 select lifnr land; regi0 frtllll zu:1fal into table it wheN! landl .. 'D E'. 15 loop at ft . 16 "rite: I ft-mandt , tt-I tfnr, it-landI, ft -rtg1o. 17 endloop. 18 free ft .
Tabela 13.1 R egros para a utiliza ;60 de select com i nto t able
Instruljao
DE_ .. 7 9
OE 14
o o
o
Quais campos
Restrlsoes
A tcb elc intem o deve conter
pelo menos o mesma
DE
03
sao selecionados?
Sel ect *
Tcdos csccmpcs no tobela de
banco de dodos
Vll DE V12 DE VB D E
07 . 14 03
quontidade de campos que 0 tobela de ba nco de dodos e eles devem ser seme lhontes 005 compos do tobelo de banco de dodos.
INluSE ~
A linha 3 defin e i t como se tivesse todos os campos de zt xlfa l da estrutura do DDIC, mais urn campo adicional. A Iinha 8 seleciona rodos os-campos de ztxlfal. Eles preenchem 0 ccmecc de cads linha em i t. Invoi ce_am ! configurada como zero . t A linha 14 selecions Ii fn r land I e regt 0para a primeira. parte de cada 1inha de it. En rretanro, it comega com eandt, nao lifnr, porque ztxl fa l cia. estrurura DDIC corneca com mandt. A safda mostra que os primeiros treSbytes de 1ifnr terminarn em 1t-mandt, que t t - 1i fnr e movido pan a esquerda em tres bytes e tambem conrem 1and l e que regia estl vazio.
Sel ect / 1
A tobela Interne deve cc rneccr com urn compo semelhante a /1 cu ter ope nos tim compo e ele deve ser semelhon te 0/1.
.'
,.
..
.'
432
Ustagem 13.3 Seu proqrcmc produzir6 urn dump curto se voce tentor co loco r mois campos em umo tabe lo interne dos que j6 existern nessc
lobelo
1 report ztxl303. 2 tables ztxlfal. 3 dat a: begin of it occurs 23, 4 l1tnr l ike zt xlfal l 1f nr . landl 11ke ztx l fa l - la ndl . 5
e comprimento, voce poderf utilizar a adic;io correspo ndi ng f iel ds. Essa. a.di~i.o tem 0 mesmo efeitc da instru cao move correspondi ng em um a string de campo: ela move a s campos cia tabela de banco de dadcs para as campos com o mesmo nome 'n o corpo da tabe!a intern a.
"esse I Wll cainpo com 10 cerecteres "esse ~ UII campo COllI 3 cerecteres
6 end of it . 7 8 111. prtixilla ltnha causa. tJlI dtlnp curtc A tahe14 interna 9 select f ro. ztxl fal in t o table it .
estreita dema1s.
O s seguintes pontos se aplicam: A ordem des cam pos de envio e de recebimento ni o tern impcrdncia, a qu e pod e ser vista na Os campos de envio que nso t~m urn campo de recebimento correspendente sao descartadcs.
Os camp os de recebimenro que DaO tern um camp o de envio ccrrespendent e permanecem inalterados . A Listagem 13.4 mostra as utiliza~6es eficientes e ineficientes dessa
adi~i.o.
fNTUOA.... Listagem 13:4 Utilizendo e edifice corresponding fi elds para ,. preencher tcbelcs internos e pcrtlr de ban co de dodos
1 report ztx1304 . 2 tables ztx lfal. 3 data: begi n of itt occur s 23. lifnr l1ke zt xlfaJ-lifnr . 4 lifnr_l!xt like ztx lfal - l 1fnr. 5 landl like ztxlfal-landl. 6 end of t t l , 7 begi n of 1t2 occurs 23. 8 like zu lfa1-11f nr. l1 f nr 9 la ndl ltke zUlfaJ- Iandl . 1D end of tt2 . 11 12 13 + Esta ~ a uti1iz a~lo ett cte nte : 14 sel ect l1fnr landl from ztx lfd into corresponding fiel ds of t able 1t 1 15 16 where l i f nr between 'VlO' and ' V 2' l 17 loop at i t1 . 18 write : / ftl-lifnr, itt-Jandt. 19 endl oop. 20 21 + Esta ~ il t nettctente r Z2 select + f rom zulfat 23 i nto corresponding f i el ds of t able i t2
IKiuSE ~
e 13 bytes.
Alin~a 9 selecion a t odo s as campo s dez t xl fa l em i t. 0 comp rimento total de todos esses campos tern mais de 13 bytes. Coase quen temente, urn dump curto o corrers.
Utilizanda a adi~cia corres pondi ng fi el ds Se os co mpo n ent es da tahela interna nio estiverem na mesma ordem dos componentes do banco de dados au se eles Daa tiverem a mesmo tipo de dado
43S
A Listagem 13.5 mostra alguns exeroplos da. utilizacjo de select para adicionar Iinhas, uma por vez, em um a tabela inter na.
ENTRADA'" Lista g em 13. 5 Utilizando sel ect com a lnstrucdo append para preencher
30 ... Em vez disso, escreva : 31 se lec t lifnr la ndl f rom zt xlfal i nto tabl e HZ 3Z where l i fnr between ' YlO ' and 'V12 ' . 33 s kip . 34 l oop at ttz , 35 write: / it2-1ifm::, 1t2- 1andl. 36 endl oop. 37 free : ftl , 1t2 .
tobelas internes
1 report ztx1305. 2 t ables ztxlfal. 3 dat a it like ztxlfal occ!lrs 2 wit h header line . 4 5 "'Fa"a desta f orma 6 set ect > fr om ztxlfal i nt o it "observe que ' t abl e ' ~ OIlIiti do, dessa forma a w here l andl ' DE'. "lt nhe vet para a l tnhe de caber;alh o de it 7 append it . 8 endsel ect. 9
11 loop at it. 12 write: I it-l1fnr , i t -landI , ft -regio . 13 endloop.
cc
. OE
DE
~
'0
'5
vl 2
VlO
Vll V12
CC
DE DE
14 refr-esh it.
16 "Ou desta f orma 17 select'" from ztxlfal 18 w e 1andl .. 'DE' her 19 append ztx l f al t o it . 20 endsele ct.
. VI0 Vll V l2
CC DE
DE
"nl!;o hot ' in to ' , dessa forma a li nha vai para a "i rea de t rabalho da tabela padrao "e, em seguid a, e ecrescented e a it
ANALISE ~
A linha 14 faz a leitura dos campos lifnr e l and! a p artir da tabela zt xl fal para os campos 1i f nr e 1andl da t abela in tema t t i . A tabela interna tern 0 campo 1i f nr_ext entre 1ifn r el and!, dessa forma vces nao pcdera utilizar into tabl e. Se i t! exigir que os campos fiquem nessa ordem, a utiliza~a.o de cor r esponding f ie lds sera apropriada aqui.
..
21 22 skip. 23 loop at i t . 24 write : I i t - l ifnr , tt- Iendi , it-regi0. 25 endl oop. 26. refresh 1t. 27 28 "Hio des ta f orma 29 sel ect > f rom ztxl fal "a l tnhe vai para a aree de t r abalh o da tabela padrlo 30 where l andl ' DE ' . 31 it = ztxlfal. "em segufda, e atr1bufda a l tn ne de caber;alho 32 append ft . 33 endsel ect ,
34
. 35 skip . 36 loop at it . 37 write : I it-lifnr, it-la ndI , it'-r egie. 38 endloep-. 39 fr-ee it.
o c6digo
436
437
SAioA ~
Vll
Yl2 V8
Vll
D D7 E DE 14 D D3 E
DE D7 DE DE D3
2D
21 1I'Hao desta fonna: 22 sel ect " from ztlclfal 23 where 1andl 'DE 24 move- corresponding ztx lfal t o it . 25 append it . 26 endselect. 27 28 ski p. . 29 l oop at it . 30 write : !. t t -I'l fnr, It .ro w d. it1and l". _i
I
Yl2 V8
Vll
"
Yl2 V8
D D7 E DE D D3 E
"
ANAliSE~
de cabecalho a i t .
Nalinha 17, Ilia existe a clfusula into, sendo assim cadalinha val para a area de trabalho da tabela padrao ztxlfal. A linha 19 acrescenta aarea de m balho zt xlta l atabela interne (a linhade cabecalho nilo eutilizada).
D D E
D DE D DE
Yl1
Yl2
move ztx l fal paraalinhade cabecalho de i t antes de acrescentar. Esse 0 metoda men os eficiente.
V8
D DE D D E o DE
into corresponding fi el ds pede tambem serutilizado para colccar dados em uma area de trabalho em vez de no corpo cia tabela intema. 0 efeito e se me lhante ao ds inst'rur;3.0 eove-co rrespcnd tnc e emais eficiente. A Listagem
13.6 mastra como.
ANAUSE~
N a linha 11,a adiliio table e omitida antes de i t , sendo assim, a linha vai par~"o cabecalho. 1i fnrvai para it. lifn r e land 1 vai pan t t- 1and l. A linha. 7 acrescenta alinha de cabecalhc a. i t .
ET A Listage.m 13.6 Como 0 adi<;co correspond ing fields 'pera a instru.;;ao NRAD .... ~ sel ect produz 0 mesmo efeito do instru.;;ao move-corresponding
1 report ztx1306. 2 ta bl es ztxlf al. 3 data: beq1.n of it occurs 2,
A linha 22 move as linhas para a area de nabalho ztxl fal. A linha 24 utiliza urna in5trutjao adicional - move-corresponding - a fun de cransferir a area de trabalho para a 1inha de cabe..Iho it. A linha 25, em seguida, acrescenta alinhade cabecalbo ao corpo de i t . Isso d.a 0 mesmo resuleadc da primeira instruljao select, mas envolve u~a instrllljao adicional e, portanto, e menos eficiente.
4 5 6
l i f nr
row_1d
landl
lik e zblfallandl.
7 end of ft. 8 9 Fa~a desta forma: 10 select l1fnr landl f rom zb:lfal 11 into correspondi ng fi el ds of it 12
13 14 15
om do 1ti
Escrita 00(0)
Corpo Corpo
16 loop lit H. 17 write : / tt-l tfnr-, tt-rov 1d. it-landl. 18 endloop . 19 refresh ft .
corresponding f ields of it
438
439
as
A Figura.13.6 representa a rel a~ o entre as chaves primdrias das eabelas de Hal a lfc3. Tom elas ccmecam com lifnr, e lfal 0 utiliza como a chave primiria iateira. lfb i utiliza a mimero do fabricante e 0 c6digo d.a emp ress, 1fcl utiliza 0 mimerc do fabricante, 0 c6digo da empresa e 0 ano fiscal. 1fc3 utiliza esses mesmos campos, alem de urn indicador de GIL especial. A tabela 1fc I contem os resultados das tnIls',oes do GIL (livro-razgo) . Cada Iinha armazena 0 valor de um ano fiscal dos resultados <Us rransacoesde um fabric.a.nte dentro de uma empresa. A chave primaria consiste em 1i f nr, bu1cr s e gjahr, no ana fiscal. . o conjunto de campos denominados umNNs, umNNh e umHNu erepecido 16 veees dentro de uma linha 1fcl. Cada urn dos primeiros 12 conjunto s concern os Iancamentos de debito, Iancamentos de credito e vendas de um pertodo de Iancamento (normalmente urn mes) do ano fiscal. Os ultirnos quaere conjuntos correspondem em periodos de fechamento adicionais utilizados para. conter ajustes de contabilidade do final do ano .
F igura 13 6
Re/ofiOo ~ tre os
cnoves primarios.
A rabela lfcl contem resultados de trans.<;oes do GIL especial. G/Ls especiais ut ilizam uma ccnta alternativa de reconciliacac no Iivro-razac. Cads linha de 1fc3 armazena urn resume dos G/ Ls especiais de urn ano fiscal inteiro em tres campos: sald v, 50 111 e habn1. Esses campos contern 0 balanlSo obtido e encaminhado e 0 total de la.nljamentos de debito e credito durante 0 ano fiscal. A ch.ve primm . e mesm. de 1tel, alcm de um indic.dor de GIL especi.l : shbkz. 0 valor nesse campo indica qual conta de reconcilialiio alternativa e utilizada. A maioria das tabelas de clados-mestres utiliza urn mo delo semelhante para suas estru turas de chave primi ria. Neste livro, vers6es sirnplificadas dessas tabelas sao utilizadas: zt xl fal, zt xl fbI) ztxl fel e zt xl fc3. Elas foram criacla.s e foram preenchidas pela rotina de conguraC;ao.
Depois de preencher uma tabela intema com clados, em geral, voce precisari escrcver os dados. Freql1entemente, essa saCda ira conter as informal$oes de resumo (como tows) DO infcio au termino do relat6rio. Alem disso. poderio existirresumos intermediarios (como subtotais) dentr o do corpo do relat6rio. Por exemplo, suponha que voce precise escrever os resultados do GIL cia ztxlfcl para cada fabricante, com subtotais por ano fiscal e urn total geral ao termino do relat6rio.
"'!--~
440
441
Para isso, voce pede ler as dados em urna tabela int erna e. em seguida, dectro de l oop at, utili ze as seguint es ins tru~6es :
at fir st nio precisa vir antes de at last. A ordem dessas instrueroes pede ser tr ocada.
at new / endat
Essas ins tru~6es podem aparecer multiples vezes dentro do mesmo loop. Por exemplo, voce pode ter duas instroljo es at first e tres instrucoes at la st deatro de urn loop e etas podem aparecer em qualquer orde~. Esses instrucces nio devem ser aninhadas um a dent ro cia outra (ou seja, at 1ast njic deve ser colocada dentro de at f i rst e endat ). N so existem adic;6es pan essas instrucoes. Na primeira vez que ocorre r 0 loop, as Iicbas de e6digo entre at f i r-s t e endat serso executadas. Na ultima vez que ocorrer a loop. as linhas de e6digo entre at 1ast e endat serio executadas. Se existirem mulriplas ocorrencias de at first, todas e1as serso executadas. at l ast se comp orts de uma forma semelhante. Utiliz e at fi rst para: Executar
0
at end of / endat
sum
on change of I endon
lERMO "
NOYO lilt...
co ntrola quando sera exeanodo 0 c6d igo que reside entre e les. Esse tipo de con tro le de ncml nc-se uma interrvpo de confrole. Seu prop6sito e execute- 0 c6digo
0
entre eles, sempre que uma condil;oo espedfico nos dodos , detedodo, durante
process omento do loop.
Sinlexe des
III
i nslru~oes
at f i rst e at 1ast
...
m
Execuiu
Escrever os totals ao eermlnc de urn relat6rio Escrever rc dapes A Listagem 13.7 mostra um programa de exemplo que utiliza essas estrutu ras. ETRlDI" Llsta ge m 13.7 Utilizanda at fi rst para escrevercabe<;alhas e at l ast H
,. para sublinhar a ultima linha
at f i rst . endat
at last .
endat. . endloop.
onde:
it
1 2 J 4 S
report zt x1307. tables zt xlfc3. data it l1ke ztxlfc3 occurs 2S with header line . s elect" from ztxlfc3 into ta bl e it where stlbkz 'Z' . loop at it. 6 at f i rs t. 7 wr1te: I ' V endor' .
instrUl,joes s6 podem ser utilizadas dentro de l oop at ; elas nao podem ser utizadas dentr c de sel eet.
8 . 9 10 11 12 13
c/F' .
encat,
wri t e :
t t - It f nr,
------442
A P.REHDA EM 21 DIA AW l' l DIA 1>. TABElASIJITERHASAVAH\ADA5,PArTE2
443
" 15
16 17 18
19
OOWlA~ Listagem 13.8 Co nteudo dos compos do tebelo intemo e ntre at e endat
1 report ztx1308. 2 t ables zu lfc3. 3 data it l i ke ztxlfc3 occurs 1 w th header line . i 4 sele ct 11 up to 1 rows from ztxlfc3 into table it . S l oop at it. 6 wr ite: I 'Before " at f irst ": ', 7 I t t- Htnr , tt-bukrs , tt- gj ahr , it-shbkz. it-saldv, 8 tt- sclll , 9 at ff r st . 10 write : I ' Inside "at first ":', I i t - l itn!" , 1t - bukrs. 1t - gj ahr . it-shbkz. 1t-saldv, 11 i t - sol n. 12 it- litnr ' XXXX ' . 13 endat . 14 write: I ' Between " at fi rst" and " at la st ": ' , IS I i t-H f nr , f t-bukrs. It-gjahr, it-shbkz, t t -saldv, 16 1t-sol11. 17 at las t . 18 write : I ' Inside "at last " :' , 19 I i t -l1fnr . it- bukrs, 1t -9jahr, it- shbkz. 1t - saldv , 21l i t - solll. 11 i t-l1fnr ' XXXX' . 11 endat . 23 write: / ' Afte r "at last" :', 14 I it~l'tfnr , 1t-bukrs, i t . gja hr . it- shbkz. it -saldv, 15 it-soll l. 16
27 endl oop. 28 fre e ft .
at las t .
write : / 12 17
11
20
21
'
----,
'
. .
22
Cpny Year
1000 1995 1000 1996 lOCO 199B 4000 1997
Ba l
elF
1000
1040 1070 1090 VI VI VI
V.
IHiu5E ~
V6 V6
1.00 0. 00
1.000.00
D .DO
As linhas de 6 a 11 sao apenas executadas na prirneira ocorrencia do loop. Esse exemplo escreve cabecalhos seguidos por um sublinhado
(linha 11).
As linhas de 13 a 16 escrevem executadas para cada linha.
0
o c6 digo na Listagem
UiDl ~
A5 linhas de 17 a 22 sao executadas apenas n.aUltimaocorrencia do loop. Esse exernplo escreve urn sublinhado ao final de cada uma das colunas.
.......-..........
Bef ore ' at f irst ': 1000 1990 A 1000 Insi de ' at fi rs t':
soe.oo
0.00
Utilizando
Between ' at first' and 'at last' : 1,000.00 1000 1990 A lDOD Ins1df! ' at last' :
Entre at first e endat ou ent re at l ast e endat , a s valores de compo nentes da linha da irea de rrabalho nie con terso quaisquer dado s. O s campos-cbave padrjo serac preenchidos ccm " (ast eriscos) e os campos numericos serso configurados como zeros. A instruljao endat restaura 0 conteudo para os valores iniciais que 0 rnesrno tinha antes de entrar em at. As alteracoes na area de trabalho denrro de at e endat serio perdi das. A Lisragem 13.8 demonstra que os componentes dos campos-chave padria serso preenchidos com asteriscos e que a s campos nao-chave serso preenchidos com zeros, dentro de urna instruljao at ou endat .
._..__..... .....
500.00
0.00
0.00 1, 000.00
500.00
IHillS~ ~
A lin.ha 4 seleciona urn registro de ztxl1c3 para it. Denno do loop que ccmeca na linha. 5, a comeede da linha e escrito primeiro. E1e e en tao escrieo novamente dentro de um.a at fi:st e endat . A salda mostra que os campos-c have padno cc ntem astenscos e as demais ccntem zeros.
-~--
--...--.
--
444
445
A linha 13 atribui urn novo valor para t t - l i f nr. Depois de endat na linha 14, a salda mostra que to dos a s valores foram re~uurados para a area de trabaIho. As alte raCjoe.s n a linha de cabecalho feitas deatro de at / endat sers o perdidas. A
Essas instrulioes Ilia devem ser aninbadas uma denrro cia outra (ou seja, at end of IUO deve ser eolocada dentro de at new / endat ).
linha. 18 mostra que at l ast exibe 0 mesmo compo rt am ento . A linha. 27 sai do loo p na prim eira passagem para man ter a. salda
simples.
Ulilizondo at new
Cada vez que 0 valor de c for alteradc, as linhas de c6digo entre at new e endat serio executadas. Esse blo co sera tambem executado durante a primeira pas sagem de lo op au se quaisquer cam pos i esq uerda de c forem alrerad cs. Entre at e endet , as campos num ericos i dire ita de c serio configurados como zero. Os campos Dio numericos serso preenchidos com asteriscos (*). Se houver mUltiplas ocorrencias de at new codas elas serac executadas. at end of se , compo rta d~ uma forma semelha.nte.
Sinlaxe dos inslru~6es at new e at end of .A seguir, veja a sintaxe das instnl~6es at new e at end of .
sort by c.
Urn nfve/de contro /e co rresponde 0 0 cornponente identificodo em umc in~c5o de interrupt;c5o de eontro1 ele regulo 0 interrup;c5o de controle..Po r exemp lo, ei no seg uinte frog mento de c6digo , f2 e urn nivel de eeeecle porq ue opo rece no i n~60
at new.
loop at it . at new f2.
"( deve extsct r alg l,lll cOd1go aqui ) endat. endl oop.
loop at f t .
at n@w c.
endat ,
at end of c.
endat.
endloop.
onde:
tt
Os seguintes pontos se aplicam: Essas instrUCjoes podem apen a.s: ser utiliz.adas dentro de loo p at j elas nao podem ser utilizadas den tro de sel ect. at new nao precisa vir antes de at end of. Essas ins t ruCjoes po dem aparecer em qualquer ordem.
Dizemos que uma ineerrupcao de controle sera acionada se 0 nfvel d e controle fcealterado. Isso significa que quando a conteudo do nlvel de controle for alterado, 0 c6digo entre at e endat sera executadc . Uma ineerrupcte de contrc le tambem sed. acionada se qualque r urn dos campos antes do nfvel de contrele na estrutura for alterado . Portanro, voce deve definir a estrutura cia tabela interna para cornelia! com as campos que formam seus nlveis de controle. VatS tam bem deve clas sificar por todo s os campos antericres a c, incluindo c. Entre at e endet, as campos nurnericcs dir eita do nfvel de cont rol e serio zero e os camp os nao numericcs serso preenehidos com asterisco s. As figuras 13.7 e 13.8 ilustram a utiliza~iio de at new. Este programa fome ee urn exemplo pritico da.s figuras 13.7 e 13.8. Ele ilustra a ponto em que uma inter11lp~ao de con trole sera acio nada, sempre que a mvel de controle for alterado au qualquer campo antes d o nfvel de contra Ie
for alterado.
447
,7;< ~lg"rA
J3 I
va/orde II e alteredo. AJ~m elsso i . eta mostro que 12 contem um osterisc:o dentro do inle l11Jpo
de contrele (entre at e endat).
eentecde de it
11
f2
~m ~~ ~~ ~~
Scrdc 1
2
; '~'
3
_ -:..
..
Figura J 3
a
conteVd de it o
22 write : /itn. a-fl. 23 endat . 24 endlecp , 25 skip. 26 sort it by fl f2. "i t agora s e perece com a Figura 13.8 27 loop at it. 28 at new fl. 29 write: /it-fl. 30 endat . 31 at new f2 . write: /4 it -f2. 32 33 endat . 34 endl oop. 35 f ree i t .
fl
12
eslruturo de it.
@B ~
~~ 0; ~ ~. ~~ :W
2 3
1 A
--
2 B
3 A I B
3 A
18 I 8
E N1lADllli. Lisla gem 13. 9 0 c6digo nos figures 13.7 e 13.8 e reproduzido em um exemplo pr6tico
A B
8
1 re port ztx1309. 2 dat a: begin of it occurs 4, 3 fl. 4 f2, 5 end of t t, 6 7 i t.. ' lA' . append i t . "Preenc he i t com dados 8 it .. '3A' . appendit. 9 ft s '18 '. append it. 10 it.. '2B' . append it. 11 12 sort it by fl. "t t agora se earece eee a Figura 13.7 13 loop at i t . 14 at new fl . write: / it- fl, 15 16 endat . 17 endl oop. 18 skip.
A linha 12 c1assifica it por f1. Na liaha 14, at new e acionada na primeira ocorrencia do loop e sempre que f1 e alte rado. A linha 19 classifies it per f2. N a liaha 20, at new e acionada na primeira ocorrencia do loop, ou sempre que 0 valor de f1 ou f2 seja a1t~rado. 1550 acontece porque um nfvel de coa tro le sera acionado sempre que f2 for alte rado ou qualquer campo antes de f2 tambem tenha sido alteradc. A linha 26 classifica it por fl e f2. Na linha 28, at newe acionada sem pre que 0 valor de fl e alterado e na linha 31, at newe acionada sempre que fl ou f2 ealrerado.
u-rz .
..
.~
..
~~
,'.
"1'.
;;".:
448
449
Utilizende at end of
As linhas de c6digo e~[re at
end
A Iinha 12 classifies i t por f l. of e endat sersc executadas: Na linh a 14, at newe acicna da sempre que f1
ealterado.
Na linha 1B, at end of sed acionadase 0 nfvel de controle for alterado, quando a pr6xima linha for Iida ou se essa for a ultima linha.
Usta g e m 13.10 Como at new e at end of sao ocionados pelos clteroc;oesde compo e o ltera~6es de nfvel de ce ntrale
report ztx1310. I data: begin of it occurs 4, 3 fl. 4 fl. 5 end of i t. 6
I
\..C ldado U
Utilizando a
efeitos
~l!rCo imprevisiveis.
in stru ~ci o sum Utilize a insuu!rao sum para calcular os totaisdas linhasde um nivelde controle.
Sintexe de
instru~ao sum
7 8 g 10 11 12
i t ' lA' . append t t . "Preen che it com dado! it .. 'JA' . append ft . it .. 'lB' . append 1t . it '28' . append it.
,....
endat.
15 16
17 18 19 20 21
wri t e:
it-flo
Sum calcula urn total do valor arualdo ntvel de conerole que a contem. Isso ficm mais clare se YOCe considerar que essa instrul$io faz a seguinte:
of: ' . it-f lo
w te : f ' end ri
Localiza codas as linhas que tem os mesmos valores dentro do campo de nfvel de conrrole e toda s as campos aesquerda dele.
Soma cada coluna au merica adireita do nIvei de contrcle. Coloca os totals nos campos correspondences d.a area de crabalho. A Listagem 13.11 ilustra essa iostru~o.
5J.iDi ~
start of: 1
I 1 end of : 1
st ar t of ; 2
I
I!nd
3
of: 2 of: 3
st art of: 3
end
fl. 12 type t ,
13- typl!: 1. end of it.
7
8 1t fl" 'A' . it-f2 " 1. i t f3 " 10 . apPl!:nd i t . 9 it-fl" ' s'. 1t -f2 " 3 . i t f3 30. append i t .
450
451
Listogem J3.1 J. Na
primeiro ocorrencia do
loop, a infelTU(Jf;oo de controle e odonodo e o instrvo sum e execvtodo. Todos os linhas que h!m 0 mesmo valor do ntvel de centro/e sao locolizados e cs compos numericos Q direito do n(vel de controlesao somodos
no
30 10
20
area de trcbolho.
conteudos do linho
sort i t by flo loop at it. at neW' f L
Fi gura 13 10
3
4
70 30
40
IHlJ.ISE~
A linha 13 classifica i t por fl em o rd em cre scente. 0 cc nterido depois da classificacao aparecera da forma como mostrado na Figu ra 13.9.
Esta figure mom 0 que cccrre no segundo vee que a intelTUpo d~ centrale e odonodo e o ins1nlo sum e ex.ewtodo.
de ccbecclhc
ANTES de sum DEPOIS de SUIl
sum .
wri te
endat
endl oop,
valor
IA I .
a
f1 12 13 centecdes de 1t
at newnao e acionada.
icterrupcso de controle
U ma outra in strucio que voce pode utilizar para executar 0 pro cessamento de a on change of , Tal instru; ao se comp ort a de uma maneira seme lha nte a at . new.
Z
m
[e lse,
---)
endcn.
o nde:
452
453
. J6 que os compos e udllc res globeis nco existem fo ra de urn loop, voce nco pode utilizer on change of fore de urn loo p.
Sempre que on change of fa r executada, a conteudo de seus ca~pos sera' comparadc com 0 conte udc do s campos auxiliares globais. Se fo~em diferentes, on change of ser a acio nada e as campos auxiliares serio atualizados com .05 novas wares. Se forem as mesmos, 0 c6 digo denrrc de on change of nio sera. executado. Esse conceito
Figura 13 11
Esse ea primeira a~ncia de um loop com a utilizoo de
Se nenhuma alteracio fo r detect ada e el se for especificada, as instru~6es depois de el se serso execu tadas.
on change of difere de at newnos seguinces aspectos: Eta pode ser utilizada em qualquer estrutura de lo op, nao apenas em loop at. Par exemplo, p ode ser utili zada dentro de se l ect e endsel ect, do e enddoa u while e endwhile, be rn como dent ro de even to s get .
on change of.
Uma unica on change of pe de ser acionada po r uma alt eraCjao den tro de urn au mais camp os identificados depois de of e separa dos par or . Esses campo s podem ser camp os elementares ou strings de campo . Se voce estiver dentro de urn lo op, esses campos nao precisarao pertencer ao loop.
Quando utilizada de ntro de urn loop, uma a1tera~ao em urn campo a. esquerda do nivel de co ntrole nao acionara um a interrupcfo de cont ro le. Quando utilizad a de ntro de urn lo op, as campos a direita ainda irao conte r seus valores originais; eles nao sao alte rados pa ra zeros au
FlgurR 13 '2 Quando on change oj eacionado. 0 compo auxiliar e atvolizado.
No primeiro possogem pelo loop, itf2 diferedes conte(idos de comp05. o ux.iliores, en!l3o on change of 6 aclonado.
11
!2
asteriscos,
Voce pede ucilizar el se entre on change of e endon. Voce pode ueilizd-la com l oop at it where. . .. Voce pede utillzar sumcom on change of. 1550 soma tcdos os campos numericos, exceeo o (s) identi ficad o(s) depois de of. Q uaisquer valores aleerados dentro de on change of permanec erf o
~0
SiH I
~~ ~~
as 'conlll(idos de itf2 soo copiodos perc 0 compo ouxilior, e os inJirulls dentro s60 exec utodos .
Compo ouxilior
alterados depo is de endon. 0 ccnteudo da linha de cabecalho nao sera restaurado ja que pertence a at e endat.
.. '
o que he
auxilior
lt
correspoodido e on
11
!2
change of nco ~
acionode..
Q uando urn loop comeCja a execu cao, 0 sistema cria urn campo auxiliar global para cada camp o ident ificado em uma instru cfo on change of con tida pelo loop. Na criat;ao, esses camp os rece bem valores ini ciais padrao (espacos em branco au zeros). Ele s Sao esvaziados quan do do termino do loop.
~~ ~0 WI! " ~~
.\ , ~ 1
e es conteudos dos compos au xtho res sao os mesmcs, ent60 on cha nge of . nco e ocionodo.
.J
v
li;';~~
r:
454
Esse e 0 lerceiro
On change of e odonodo.
possogem de loop.
EN1iADI~
Usta gem 13.12 Utilizcndo on change of de duos mcneiros diferentes: dentro de loo p at e dentro de sel ect
7
8 9
14.
end of it . 1t -f2 .. ' A' . it-f3 1t-f2 .. 'A'. it-f3 1tf2 .. 'A'. it.f3 tt-f2 .. 'A' . it-f3 .. 11. .. 22. .. 33. .. 44. itf4 i t -f4 it-f4 it-f4 .. .. .. ..
ca mpo ouxilior,e
OJ
f lu u ra 13 16
Esta
ea quorlo e
On change of nee
ociona do.
I
I
23 loop at tt. 24 at first. 25 mte: I 'looping without a reset '. 26 'endet , 27 on change of i tfZ. 28 wr1te: I i t .fl, 1t.f2, i t f3 , it-f4. 29 30
else.
write :
No l1/timo pOssogem pelo loop, itf2 c:::omeUdos de camposauxi iares l ~S;~~ 160 os mesmcs, enIOo on challge of
O!
3'
35 .reconf1g\,lra
n60
e odonodo.
Utilizando on change of
A Lis tagem 13.12 ilus t ra a utilizaC;i o " e on change of. d
36 clear 1tf2. 37 on change of it-f2. 38 endon. 39 loop at it. 40 at first. 41 write: I 'Looping after reset ". 42 endat . 43 on change of it-f2. 44 write: lit-fl, it-f2, it-f3, itf4.
4S endcn ,
456
""'\AD'" PARTE 2
e
457
48 f ree it. 50 sel ect" fnn zb:l f l1 where land! .. 'US'. Si an change of zt xlfal1andl. 52 write: I ' l andl"' . zt xl f al - la ndl.
53 endon.
4'
A tabela intern a nio e utilizada depois da linha 31, en ta.a aqui it esvaziada. Isso exclui todas as linhas e libera a mem 6ri.a.
A linha 33 selecicna todas as linhas de zt xl fal na ordem de 1andl.
54 eees et eet , 55 write : I ' End of sel ect ' , 56 57 "executa r I IM!!sma tn stru ~&o sel ect novamente sen 58 select .. fran , t x1fa l wheN! landt .. 'US' , 59 on chang! of ztxlfal - landl. 60 write : I 'landl-'. ztx lfa l - l and!. 61 endcn, 62 endsel ect. 63 ... ite: I ' En of sel ect.". r d
Embora essa ins tru!jio sel ect retorne 23linha.s, como pode ser vista pela ultima linha de safda, somente cinco valores exclusive s de 1andl existirio e serso escritos.
lima re cQn f i 9' urar;~O
f unciona be'll
e criado com valores iniciais {espacos em braccc ou zeros). Se a primeiro valor em urn loop for am espa!i0 em bran co au zero. on change of aia sera acionada. A Lisragem 13.13 ilustra esse problema e oferece urna solulj-a.o.
Utilizando
2 3 4
it:
End of loop
l andl - U S. End of sele ct
landt- US
7 1t-f 1 - 3. apPl!!!nd it. 8 1t-fl - 1. append t.t.. 9 1t f1 2. append it. 10 11 l oop at it . 12 ert t e: I 'aanew row aa ' , 12 i t ~fl . 13 on change of i t - fl . 14 write : I 'fl changl!!d: " lZ it-fl. 15 endcn.
16 end'lccp .
"loop 11
End of select
AlillSE ~
As linhas de 10 a 13 pre enchem a tabela interna com dado s. i t - f2 co ntem a valor I A I em codas as quatro linhas.
17 18 skip . 19 l oop at it . ZO wt-t te : I 'a- new rown ' 12 i t - fl. Z1 on changl!! of it-flo . 22 write : I 'fl changed: lZ u - rr.
I
"l oop 12
I.
Z3 24
zs
26
27
Z8
endl oop.
Zg f ree it.
458
459
SAiDA ~
0
3 3 I I
2
0 0
3 3 I I
....new row....
f1 changed ;
Para ser precise, a largura de uma linha da eabela interna em bytes deve ser maier que au igual ao ndmero total de bytes de todas as colun as selecionadas a partir d.a tabela de banc o de dados para a tabela ineema, Se a Iinha da tabela interna for mais larga, as cclunas selecion adas d:a tabela de banco de dado s serso preenchidas com os byte s mais a esquerda de cadalinhada tabela intema, Os bytes remanescentes serso s configurados com os valores iniciai padrao.
U tilize a adiljao i nt o corresponding f iel ds se as camp os da tabela interne estiverem em uma ordem diferente ou estiverem separ ados urn do outre par campos nao selecionados da tabela de banc o de dados.
....new row""
f1 changed:
"new row fl changed:
2 Z
AHluSE ~
As linhas de 6 a 9 preencbem a tabela interna com qu atro linhas. 0 valor de i t -fl na primeira linha e zero.
Na linha 13, a primeira passagem de loop nao aciona on change of , porque 0 camp o auxiliar global contem zero . -As linhas 23 e 24 [o ram adicionadas ao loop #2 para derectar 0 erro . Ob serve que at fi rst n ao pede sec utilizada para detectar esse
Utilize at e endat para acionar 0 processamen to "baseado em um a aIteraljio na coluna de urna tabela inrern a ou qualquer coluna a sua esquerda. Utilize sum dentro de at e endat au on change of para caIcular totais e subtotais. Utilize on change of dentro de loops para acionar 0 proc essemento baseado em uma altera<;ao em uma das colunas selecio nadas .
Nco utilizesel ect e append. Sempre que posslve l, utillze sel ect into
table.
Nee utilize order by co m se lect into t abl e. Em vee dnse, utilize
a 3.0 F, somente
fonto, se voce mesmo as reconngurar, sera posslvel utilizor on change of em quolquer tipo de loop. Utilize esse c6d igo "para executor a reconfiguro<;;:60: c1ear fl . on change of fl. endon. deor move os volores iniciois para fl. onchong eofcompara fl com 0 compo cuxlllor global. Se forem diferentes, a on change of vozio scbrescreverc it com vclc res iniciois. Utlllre-c para preenche r as ccmposcuxlllores cam quolque r valor de f l.
P&R
A primeira parte deste capitulo parece colocar muita enfase na eficiencia, Estou apenas aprendendo e con sid ero todos esses metodos confusos. Issc realmente faz muita di ferenca, ou voce esci se prcocupando com minucias! A experiencia ensinou-me que os alu nos que aprendem corretamente pela primeira vez ganham muito. Em geral, os pro gramas em ABA P/4 processam uma enorm e quan ticlade de dadcs, portanto, par infelicidade, urn a c6digo facit " frequen remente results em "overhead over head overhead". Se voce aprender apenas os merodos facei s no in fcio, eles se tornarjio hsbiros e serac diftceis de se descartar. Urn c6di go p obre afeta o desempenho de seus program as e do sistema.
Resumo
Uma oper acao de array e a mane ira mais eficienre de preencher uma tabela intema a partir de uma tabela de banco de dados. Ela Ie as linhas da tabela de banco de clados diretamenre para 0 corp o ciatabela interna sem utiliz ar quaisquer areas de trabalho. E implementada atraves da adiljao i nt o tabl e na instru ljao select. A tabela intern e deve ser suficientemente grande para acomodar as colunas po r .voce selecionadas a partir cia tabela de banco de dados .
460
Workshop
que aprendeu neste capitu lo. A se!rao Teste ofer eee perguntas para.ajudar a. sclidificar seu entendimen te do conteu do abordado e a. sc)3.0 Exercicio permite que voce pratique 0 qu e aprendeu. Voce pede enconerar as respostas perguntas do Testee aos exercicios no ApecdiceB, "R espcstas is perguntas e aos exercfcics".
Teste
1. Quais sao as mores dos campos as instrucdes at e endet!
Exerdcio 1
C op ie 0 programa ztxlllOpara e1301. Alte re-c de modo que se uma lioha for lccali zada e 0 comeedc de quaisquer camp os na linha localizada diferir do que existe na linha de cab ecalhc, a linha localizada seja sobrescriu com 0 conceudo arual da linha de cabecalho . A saida deve se pareeer com a seguinte:
10 . 20
~
D 14 ia
A instru~ao wr; te
D epois de concluir est~ capitulo. voce sera capaz de:
Enrender
0
1 XX 2XX
1 2
3
4 5
40 50
4XX 5 XX
Exercicio 2 o pr ogra ma a seguir preduz urn dump CUrto. Descreva c pr ob lema. copie (,
pro gram s para e1302 e so lucione esse problema.
M!port zt y1302 tab le s: zb. l h l. dilta: begtn of it occurs la, lHnr li ke zt xl f al -l1 fnr . la ndl li ke zt xlfal .1andl . end of it. sel ect * frca ztxlfal in t o tab le it. lo op at it . write: / tt -If rnr-, t t -I endt . endl oop.
ri Utilizer as ops:oes de formata!jio, da ins trU~io w te U tilizar as safdas de conversio e deeecrar sua presen!ji dentro de dominies
Comprimentos padrijo
MOYO .... TEUO r
eutilizodo pe rc instruicO wr1te a fimde alocor espccc no listo de soldo pore um compo.
O s compos definidos dentro de urn prog roma por meio do in stru~co data te m urn comprimento de sc tdc padrOo, como pode ser visto no Tabe lo 14 . 1.
hl1p:II_ .compus.com.br
- - - -- --
463
Tabela 14.1
Dado
formata e
co mprime nto de
Fig u r a 1 4 1
Fonnato
Sinai
length onufom
1 p f
Adireito Adireita
Nenhum
/>YPi<.
Finol
11
2~ d le n ou (2'fldlenl+ 1 22 fldlen
Final
Adireito
A esquerda A esque rdo A esq uerdo
Zero s inidois
lniclcl Nenhum
c
d
t
fldlen
8
Determinado pelc
pcdrec do usu6rio
HH,MM,SS
Aesq uerdo
6 2'fldlen
Ta bel a 14.2 Comprim ento de scrdo podrao pa ra os campos deci mals ccmpoctodcs
Defini~60
a s campos do Data Dictionary tern tipos de dados do ODIC, como DEC , CHA . CURR e assim. por diante. Todas eles sao baseados em tipos de dadcs do R ABAJ'/4 e herdam 0 formate e 0 comprimento padrao do tipo de dado do ABAJ'/4 . Para determinar 0 tipo de dado do ABAJ'/4 e, por conseguin te, 0 formate de safda padrao, consulte a documentacao de palavra-chave do AJ!JAP/4 quanta a instrulja o tables . Para isso, colaque seu cursor em uma instruc;io tabl es decrro de seu c6digo e pressi on e a eecla Fl. Alem disso, as campos do DDIC tern seu comprimemc de safda e mimero de decimais definidos no dominic. Esses campos anulam 0 padrfo e sao mostrados na Figura 14.1. comprimento de safda e as casas decimals si o herdados por todos os campos criados a partir de :LIm dominic. P or exemplo, na Figura 14.1. 0 comprimento do campo e15, indicando que 15 digitos podem serarmazenados em qualquer campo utilizando esse dominic. 0 comp rimento de saida e 20. entia a safda permite espacc suficiente para urn ponto decimal, urn sinal e treS separado res de milhar.
de dados
T TEXTD(4) t ype p. AB f 2(4 ) type p declm. ls 2. f 3(5) t ype p. f4{S) type p decimals 3.
Eo rrnatOl; c o pad ni o
a formato padrjo derivado do tip c de dado da variavel. A Tabela 14.1 descreve co mo a saida sera. fonnatada para cad a tipo de dado do ABAP / 4. A saida de cam pos numericos (ripos p, f e f) ealinha da adireita com zero s inici ais suprimidos e para 0 restante e alinhada a esquerda. Formata~ao adicional especffica ao tipo tambern se aplica,
Form oto ~a o de dota pcdreo Os vaIores de data irao gerar uma safda de acordo com a configura~o de Date Format em U ser D efaults , contan to que e comprimento de saida seja 10 a u maior. 0 comprimentc de sa!da pad rio cS, entao voce devers aume nti -lo para pelc menos 10 ante s que a s separa de res possam servistos. A defmilii o de uma variavel utilizando 1i ke (por exemplo, 11 ke sy-dat um) fari co m que a ccmp rimenta de sai'da seja retirad o do dominio.
Compos cornpododos
comprimento de saida padrjo de urn campo do tipo p du as vezes 0 comp rim ento de campo definido. Se casas decimais forem definidas, 0 cornprimento de safda padrio sera aum entado em 1, equivalend a entac a 2 * comprimemc do campo + 1. A T abela 14.2 mostra os comprime ntos de saida padrio de exemplo para os cam pos do tipo p.
_ _464
APR ENOA EM21 DIAl ABAP"
- _..
I 3
_~
....
OIA IH .11ilJyi0WRITE
465
nurnericc pcdrco
5 6 7
8 9 10 II 12
~c 'd d-
Vod de ve efewcr sign off e efetuor ncvc mente sign on no sistema Rf3,
0
13
" IS
A Tabela14.3 mostra 0 efeito da ccofiguracac Decimal N otat ionna saida
report ztx1401. t ype t val ue 11ke sy- uzet t t2 value dl t ype d val ue val ue like sydatum d2 value f1 type f 11 type 1 value 12 type i va I ue value typ ei 13 val ue i4 type i nl(5} t ype n value pl(S} type p val ue c1(S) type c val ue d(2) type x val ue 'AOBO' .
U . 26 / /(8) tl ,- '- 26 / (12) t l , 26 / t2 , 26 / dl, 26 /(10) dl, 26 / d2, 26 / n , 26 / 11, 26 / 12, 26 / 13, 26 / (10) 13, 26 /(10) 14. 26
' 123456789' .
' ABC' .
rite : 16 w
17
numerica.
Tabela 14.3 A configuror;;60 De cimal Notation no podroo do usu6rio meta a s
Ic rmcto s de seide num erlcc
Conflgura~ao
18 19
20 21
Virgula Ponto
de safda padrio pan variaveis de ponto fluruante [tipo f) e atraves de nat.rra o cientifi ca. Ele pode ser modificado utilizando uma mascara de edic;ao au safda de ccnversso.
Formata ~a o de estouro (overflow) Ao lidar com ntimeros qu e sao grandes demais p ara a camp o de safda,
o formate
I
I
I
22
. 23
2.
25 26
27
28
i ,
29 30 31 32
33 34
sistema
coloca u rn asterisco na prime ira celuna de safda a fim de indicar estouro, Enrretanro, antes que isso ocorra, 0 sistema tenta gerar urn. said. de todos as dfgiros, se possfvel, Os separad ores de milh ar irao so men te gera r urna saida se existir espacc suficiente n o campo de safda. Se Dao exi sr ir espacc suficiente, eles sersc removidos, urn de cada vez, come cand c cia esque rda do campo e seguindo para a direira. Se a ndmero for positivo e se ajustar a safda com a utilizaliao do cam po de sinal, 0 sistema 0 utilizaIi.
26 26 26 Il lS) pl . 26 / et , 26 / xi, 26
/ pi, / (12) pi ,
nl ,
'type ' ty pe ' type ' t ype ' t ype 'type 'type 'type 'type ' t ype ' t ype 'type ' t ype ' t ype 'type ' t ype ' t ype ' t ype ' t ype
t: t: d: d: d: f: 1: i: 1: i: 1: n: p: p: p: c: x:
1ncreesee output 1ength to 12' , defaul t output le ngth 8 (from domain) ' . defau1t out put l ength 8 '. in creased output 1engt h t o 10'. def ault output l ength 10 (from domai n) ' . default out put l ength 22', def ault out put length. 11'. same output 1ensth, more d1gi ts ' S!Jll! output l ength, even IIICIre dig i ts ', smal le r ootput l engt h, negative nLlllber ' , smaller output l engt h. pcsf tt ve nllllber ' , default output l ength fie l d len gt h' , default output l ength . 2 leng th 10', output l ength i ncreased to 12'. out put len gth inc re ased to IS'. out put l engt h f ie l d l enqth (l eft ju st) '. default output l ength 2 l ength"" 4' .
466
467
A li.nha 26 aumenta novamente 0 mimero em urn dfgito, fazendo com que a segundo separador seja remcvido. A 1i.n.ha 27 escreve 0 mesmo namero, dessavez diminuiodo 0 ccmprimente de safda em 1 e 0 indicador de estouro e vista no primeiro caractere do campo de saida.
A linha 28 escreve 0 mesmo nUmero utilizando a mesmo com primente, mas dessa vex 0 mimero e positive. 0 sistema altera corretamente 0 ndmerc e utiliza a campo de sinal para impedir estouro.
12,345,678123456,789 1123456789*23456789-
f: 1: 1: 1: 1: 1: n: p: p: p: c: type x:
default output length 22 default olltput length " 11 _ same output l engt h, more dig its sill:e output l engt h. even ecre dig its slMl ler outpu~ length, negati ve number smaller output. length, positive nllliler default output l engt h " field 1I!ngth default output length 2 length 10 output length increased to iz output length tncreesed to 15 output 1ength .. field length (left jus t) default output length Z length 4
A linha 29 escreve urn campo numerico mostraod o que 0 mesmo alinhado adireita e preenchido a esquerda com zeros iniciais.
A linha 30 escreve urn campo decimal compactado mostrando
e
0
lHALISE~
Alinha 16 escreve uma variavel do tipo t utilizando seu comprimento padcio de 6. Nrc hi espacc para as separadcres, de modo que eles113.0 sao escricos,
comprimentc de saidapadrio e a remo~o dos separadores. As linhas 31 e 32 aumentam 0 comprimento de safda para 12 e para 15, mostrando os separadcres e 0 alinhamento i direiea.
A linha 33 mostra urn campo de caractere alinhado
A "inha 17 escreve a mesma varidvel utilizando urn comprimearo de l saida de 8, que foi especificado na instruljaowriteoEsse comprimento de saida anula 0 comprimento de saida padrio e fomece esp~o suficience na saidapara incluir os separadores. A linha 18 mostra que se 0 campo de saida for maior que 8 caracteres, a campo de hera ira gel":lI' uma safdaalinhada a esquerda decerc desse campo por padrso. A linha 19 escreve urn campo defmido como sy-uzett. Dentro do dominio para sy- uzeit, 0 campo Output Length econfigurado como 8.Portant o, 0 comprimento de saidapara a.campo t 2 etambem 8) que famece espaco suficienre para escrever eambem cs sepa.radores. A linha 20 escreve urn campo do tipa d que tern urn ccmprimento de safdapadrio de B. Nr c hi espaljo suficieme pan as separadores, entao ocampo Ilio contem separadores. Entretanro, a ordem ano/mes/dia ainda e dererminada pelo padrdo do usudrio. A linha 21 escreve a mesmo campo de data, dessa vez aumentando compriment o de salda para 10 a fim de permitir os separadores. A linha 22 escreve a campo d2. 0 comprimento de d2 dominio para sy-dat um.
';:
0
a esquerda no
8di~6es
para a
instru~cio
write
Est. ,e~o detalha algumas das especificacoes especfficas de said. que po dem
ser utilizadas com a instIU~ao writeo
!!!
:J>
m
Sintaxe da
instru~oo
w te ri
-e
><
...
e obeidc do
onde:
'11
under '12 : no-gap using edit mask _ : usi ng no edit lMsk m/'d/yy ' ' '/",,/yy mf'd/yyyy' " /m/yyyy """yy , '_y , yymd' (6) no-zero (7) no-sign (8) decimals n (9) , round n (10) currency c J unit u (11) left-justified: centered : ri ght-Just i f ie d
A linha23 escreve urn campo de ponto flutuante mostrando a nOtaljaO cientifia e um sinal inici&!. A linha 24 escreveurn inteiro utilizando 0 comprimento padrio de 1I. A linha 25 escreve urn inteiro maior utilizando 0 mesmo cornprimento. 0 primeiro separador de milhar erernovido para pe.nnitir que o digito extra seja escrito.
pea especifica~ao de posi\Sao. Ident ifica a coluna de saleta na qual campo de salda cleve comeljar.
468
APRE NDAEM 21 DI Al AWl'
-.-
- .-
- - - -
.,.--
- -.-
_. _
...
D~ lH IN5Tl<U(i.o WRITE
469
1
0
e a especificaclc
ENTUDA..... U.st a g e m 14.2 Umo sen e de instruc;oe s write pora ilustrar 0 efeito do escecth cc cec de colune de sctdc
.I
u.
me uma mascara de edi~o. c e uma chave monetdria (da tsbela tcurc). uma unidade de medida (cia eabela t006).
n e urn literal numericc a u variavel.
/ 1 ' X'.
'll'
7 fl . 'Z .
Os seguintespontos se aplicam:
Se p au I for uma varifvel, a palavra at sera requeri da.
U rna barn. (I) ccmeca um a nova linha antes de se escrever
0
valor da
12345678901234567
XY 1 1. 234 Z A
variavel.
Se nenhuma adic;ao for especificada e du as inst ruC;6es wri t e forem executadas (como write: vt , V2 ' ) 10 valor de vz apare cerf DOl mesma linha de v I
separado dele por urn especc- Se 0 valor de vZnie se ajust ar ao restante da linh a" arual, ele apare cera na pr6xima Iinhs. Se a comprimento de saida de v2
IMluSE ~
for maier que a cornprimento cia Iinba,a saida sera truncada adireite. Se 0 valor gerar uma safda alinhada a direita (como acontece com as variweis do tipo p) antes de ser truncado adireira, ele sera deslocado para a esquerda, ccntanto que existam espafJos em branco iniciais para impedir que ele seja truncado. Os separadores serac rambsrc removidos, se necessaria, a fim de impedir a truncamento.
Uma novo linho de soldo sempre cc mecc re no infci c de um novo eventc. a s eventos serec obrongidos no Cap itulo 17,
As linh as 3 e 4 escrevem uma regua, de mod o que voce possa ver as colunas de safda. A 1inha 6-iscreve urn x' comegando na coluna 1.
I
A linha 7 escreve I VZ ' comecandc urn esp~o dep ois de ' XI.
I
A linha 8 escreve ' VZ comecando na coluna 2. Isso sobrescreve espa~a e 0 ' Y' que havia side escrito.
A linba 9 escreve I ABCI cornecando na colun a 3. Isso sc brescreve os dois I Z's, mais urn espar;o.
A linha 10 escreve f1 comecando na coluna 4. 0 comprimento de safda padr.io de fl e 8j a forma to padrs o e alinhado a direita com 0 ultimo caractere reservadc para 0 sinal. as tres espa~os em branco iniciais sob rescrevem a safda existen te comecan dc na coluna 4.
Compreen de nd o
e specificoljiio de posiljiio
A linha 11 escreve fl novamente, dessa vez comegando na coluna 7. A Iinha 12 escreve 'Z' urn especc d epois de fl. N a salda, parecem existir dais espacos. 0 primeiro espacc depcis de 4 e a campo de sinal para fl . Entia , urn espaco ~ escrito e, depois, ' Z' na coluna.16.
Referindc-se asintaxe apresectada acima.c especificaa coluna de saida. 0 valor de said a pede sobrescrever to da a u parte de uma instrUfJao wri te anterior. 0 programa na Listagem 14.2 ilustra a efeito de uma s~rie de instrulioes wri t eoA Tabe la 14.4 mostra a efeita cumulativo de cada write, em sequen cia, para
...........................
470
APlEHDA EM 21 DIAS ABAP/'
~--_...-- _~- . - - ..
D~ lU IHSTIlIJIiDWlltTE
471
Instruljoes
Sa ida cumulativa
S.liDI~
--+---1--.. 12345678901234567
----+---1--+-x
X YZ
XYZZ XYABC XYA XYA XYA 1, 234 1 1,234 1 1, 134 Z
12345678901234567
write
' YZ'.
wri t e 2 'YZ'.
A linha 6 escreve os primeiros dois caracteres de XYZ I. A linha 7 escreve I XYZ I utilizandc quatre caractere s de salda. A formata~o padcio e utilizada, entio a valor e alinh ado a esquerda e preenchido l direi ta com espaeos em branco. A linha 8 e~creve 'ABC' urn espacc depois do valor anterior. 0 valor anterior foi pre enchido adire~ta com urn espalio em bran co. U m ou tre espac;o em branco eadicianada e. em seguida, I A eescrito. BC' A linha 9 escreve fl em urn campo que tern quatro caracteres de comprimento comegand o na coluna 5. 0 sistema rem ove as separadores para fazer com que a valor se ajusce em quarro caractere s, A liaha 10 escreve fl em urn campo que tern eire caracteres de comprimento ccm ecaad c na coluna 5. VaIjav eis sio utilizadas, entjic a palavta at e exigida. A formata~o padrto se aplica, entao 0 valor e alinhado ~ dire ita com zero s iniciais suprimidos e. ji que exisre espalio suficiente, separadores tambem sac escritos.
valor de salda.
As especificacoes de posiC;a.o e comprimento sao sempre opcionais. A pcsicao e 0 comprimeoto podem sec especificados utilizaadc-se tanto urn
Iiterais, mas secl exigida se urn dos dais for uma varidvel.
Se u ma barn (f) preceder UIIl2 especificact c de co mprimento au po sir;io, Ilia poderi .existir urn espaco entre eles. A Listagem 14.3 forn eee exemplos.
co mpnmento e POSIC;CO
I r epor t ztx1403. 2 data : n (4) t ype p value 1234, p type 1 value 5, 3 1 type 1 val ue B. 4
5
6 write : 1 '
1 +__ 1 ,
1 ' 1Z34567B901234567'. 1 (2) 'XYZ' . 1(4) 'Xl Z' . 'ABC'. 15{4) 11. at I p(l) f 1.
/' ..+
1__ +_ ' ,
wr",
n-au), n.
D ,HlMmU\ADW I. RlTE I
473
1030
CA E
Ch1 ckenFeed ltd . a71B Wshbone t ene i Moth erboards Inc . 64 B itBus Blvd.
12345678901234567
AS BC
1040
US
E
;{[f;
~:,~
",
C ABCD
A ~ NlllSE
ANlUSE~
A linha 9 escr eve a camp o s t ras comecando na m esm a coluna de name l . Portanto, e escri eo comecando na col una 25.
Utiliza ndo
Utilizando
adi"ao under
A utili za.~ao de no-g ap ira. sup rimir a espacc intermediirio, colocado automaticamen te depois de urn campo, se 0 campo se guint e nao river nenhuma especificacac de coluna. A Lisragem 14.6 ilustra 0 usa de no-gap .
Utilizar under fad. com que 0 primeiro caract ere do campo seja posicionado na mesma coluna do primeiro caractere de urn campo anterio rm ente escrieo. Voce nio podera utilizar under com urna especificaclo explrcita de p osi~3.o . A Listagem 14.5 mostra exemplos.
ENlRAOA~
1 report ztx1405.
2 hbll!:s: zt xlfal. 3 4 select * up to 5 rows from ztll,lfal order by 1f fnr. S write : 11 ztxlfal-11fnr, IS ztll,lfal~1andl,
.!
,' ,'
,
7
8
9
10
11
endsetect .
Parts Unl imlted 111 Q ueen St. Industri al Pumps I nc . 1520 Avenue Rd . Chemi cal N ation Ltd. 123 R1 ver A ve.
.,
ANlUIE ~
A linh a -4 escreve fl duas vezes na mesma linha. J a que nao existe uma especificacac de posit;ao para 0 segundo fl, urn unicc espaco intermediirio sera.escrieo antes dele. A linha 5 tambem escreve f l duas vezes. A ut ilizacao de no-gap depois do prim eiro fara com que as da is valores aparecam na saida sem urn
10lD
1020
C A E
espaco-intermediario.
o.
_-__ - ~ -1
475
"" f:""
.
f?~""
. A linh a 6 escreve fl co m aspas SlIIlp Ies nos dcis ladas. 0 5 espacos OIS
interme diari e s apacecern scm
0
usa de no-qap.
A linha 7 escre ve f1 entre aspa s simples. As especificacce s de posicio fazem com que as aspas aparcCiOlm scm esp_liDS inrermedidrios.
'.
Se houver mais sub linha.dos do que os caracteres existentes do campo de origem, 0 efeito de LL sed alinhar a esquerda 0 valor 01 saicla; RR alinhari a direita a valor (veja Lista gem 14.7 para obte r urn exemplo). U ma mas cara de edic;ao comecando com urn v, quando aplicada a urn campo numerico (tip os 1, p e f) , fan com qu e a campo de sinal seja exibido no corneliO. Se aplicada a urn campo de caractere, urn V ser f a pr 6pria satda,
I
!
Mover
2 data: n(4) nlul! IABCO '. 3 f2 t ype i val ue 11234'. 4 5 writ e: I ' 5. ' . fl, _=_:_' , 5 I ' 5, I, (6) 11 using edit mask 1 I ' 7. ", fl using edit maslc ILL_:_' . 7 8 I ' B. I , f1 usin g edit mas k 'RR_:_' . " f2 usi ng edit mas k 'lLV_ _ ", / I 9. 9 10 I ' 10. ' . f2 using ed1t mlsk 'RRV_ _ ", _ 11 I '11. " f2 using edit maslc ' RRV , _ ' . 1Z I 'IZ . ", f2 using edit Nsk 'LlV_, _', _I I 113. " fl using edit mas lc IV . 13
o c6digo na Listagem
IAfDA ~
s.
ABeD
6. 7.
8.
A:BC :D A:BC
B:CD
9. 10. 11.
12.
13.
123,4
VASe
..
A linha 8 obtem os tres ultimos caracteres de f1 e os apJica amascara de edi,.o. Exis tern seis sublinhados na mascara de editiao na linha 9, mais que os quaero ca;acteres de flo 0 valor de fl gera uma sai'da alinhada a esqu erda com urn sinal iniciaL
1
476
"PR EMD" EM 21
nus AUr/ 4
simi icicial.
As linhas 11 e 12 mostram. 0 efeitc da combina~o dos caracteres inseridos com alinhamento. as caracteres inseridos Ilia sao movidos
em rela~o
010
aquele dominio e sed automaticamente aplicada quando a valor for escrito. A Figura 14.2 mostra que a dominio zt x1 i fnr utiliza a retina de co eversac ALPHA.
Figura 14 2
I I
campo de safda.
A linha 13 mosrra 0 efeiro da utilizacfo de urn V com urn campo de caractere. 0 pr6prio V ea safda,
mascara de edj~o o que ccmecc com seguido pa r um to de quatro corederes cho ma um m6dulo de func;co que formato a sc fdc. Urn 10 ossim de quofro ccrccteres e canhecidocomo umc se ide de cc oversec au refino de conversec. (O s m6d ulos de func;oo
serec obordodos em um cap itulo segu inte, mas, par e nquonto, imag ine um m6d ulo de
func;oo como urno subrotina dentro de um outro progromo.) 0 nome do m6dulo de fu ~ o sere CONV ERSION EXIT XXXX O UTPUT, cnde XXXX e a 1 de quotro ccrcceres 0 depois de . ~. Por exemplo, writ e ' 000 01000 ' using' edit m k ' ''~ALPHA ' chcmc 0 as m6dulo de fun o C ONVER N_EXIT_ALPH _O TPUT. A instruc;oo write possa , em SIO A U
primeiro luga r, 0 vo lor pore 0 m6d ulo de func;oo, que 0 a ltere confo rme desejado e, em seguida, retorno 0 valo r e hercde e, entec, tol valor e escntc . Esse scldc em porticular (ALPHA) exc rnlnc 0 valor a fim de determiner se 0 mesmo consiste lnteircrnente em numeres. Se esse for 0 coso, zeros iniciais serec retiredos e 0 nu mere ser6 al inhodo a esqverdc. Os vclcres que contem noo-numericos nco sOo o lterodos par A LPHA. A SAP fomece o proximoda me nte 60 soldos de ccnversec pore v6rios terefe s de formotoo. Depois do CopfhJlo 19, sobre as m6du los de fun o, voce sober6 0 suficiente perc ser capez de crior suos pre pr icsscldcs de ccrwersec .
Portaneo , secipre que ztxlfal- lifnr for escrit o, a valor passara, em primeiro lu gar, pelo m6dulo de funo;ao CONVERS ION_EXI T_ ALPHA_O TPUT, 0 qual U
As safdas de conversao sao particularmente ateis para tarefas complexas de fcrmancac que sao necessari es em mals de um programa.. Para ilustrar, a saida de conversjo CUN convene automaticamente 0 c6digo que representa IT uma unidade de medida em uma descricao significativa no idioma de logon atual. Por exemplo, dentro de R/3, 0 c6digo para uma caixa de materiais ~ KI. (KI ~ um a ah reviarura de Kiste, pal avra alema para "caixa"".) Earretanrc, CUNIT converte KI no mn em e nicc ing les CR. Portan t o, quando co nect ado ern ingles, write : 'I' . ' K ' using edi t mask '==CUNIT' . escreveraI crt.Para umususrio I coneceadc em alemao, a safda seria 1 K U rilizar tal safda de conversao I. permicinique um ccnjunto padrso de c6digos armazenado no banco de clados sejaauromaticamente convertido para que sejasignificativo no idioma de logon arual sempre que gerar uma saida para urn relat6rio.
remove os zeros iniciais dos wares numericos . Uma sa1da de eocversac dentro de urn dominio pode ser desativada especificando-se us i ng no edt t mas k na instI1l<;ao write. A Liscagem 14.8 ilustra 0 uso das safdas de conversao.
EHll.lIlA~ Ust agem 14.8 Uti lizanda scldos de converse o
1 report ItxH 08. 2 ta bles : ztltlfal , ztxmara. 3 data : fl(lO) value '0000001000' .
4
5 write: / fl,
6
7
8 ski p g set ect " f ran zt xlfa l \lfhere lifnr '00000010000 ' 10 or l ifnr 'Vl' 11 order by 1i fnr . 12 w rite: / zt xlfal-l1 f nr , "0 domi ni0 contl!m conver so Saia de ALPHA 13 / ztx lh.l - 1ifnr using no edi t m ask. 14 endse1ect.
IS
478
479
Hi skip.
17 select single from ztxmara wher-e matnr ' M I03', 18 write:: I ztxmara-matnr ,
19 (10) ztxrr.a ra- brgew.
20 ztxmara-gl!:we i . o dCJllfnio cont&n converso Saia cle CU IT N 21 set locale la nguage ' D'. 22 wrHe: / ztXlldra-matnr, 23 (10) ztXllara-brg ew, 24 Ztxlllara-gewe1 . o domfni o cont~ convers o Saia ee CUNIT
1. N a tela Development Workbench, selecione 0 caminho de menu Overview-> Repository Infosys. A tela Repository Information System do AJ3AP/4 sen exibida. 2. De urn cliqueno sinal de mais (+) ao lado de Programming. A more sen expandida. 3. De urn clique no sinal de mais (+) ao lado de Fun ction Library. A
m ore ser::i. expandida,
lDOD
1000
0000001000
VI VI
4. De urn clique duplo na linha Functi on Modul es. A tela Re.p~sitory Information System: Func tion Module do AJ3AP/ 4 sed exibida. S. No campo Function Module, digit e CONVERSION_EXIT_ _ OUTPUT (0 campo ede rolagem; voce pe de digitar urna quantidade maior de caracteres do que de pede exibir). 6. Pressione 0 botac Execute na barn de ferrame neas Application. A
tela Function Modules sed exibida, Tow as saIdas de conversao que podem ser utilizadas na instrU~io wri te serio listadas aqui.
H 1D3
H103
50.000 CR
50.000 KI
1lI1USE ~
. A Iinha 6 escreve 0 mesmo valor, mas aplicaa safda de coaversac ALPHA. Antes de ser escrito, fl e passado para 0 m6dulo de fun~io CONVER-
SION_EXI.T_ALPHA_O TPUT, 0 qual detects que 0 valor e inteiramente U numerico, remavend o os zeros Iniciais e alinhan do -o aesquerda.
A linha9 recupera dois registros de ztx l fa la nd e escreve 0 campo 1i f nr duas vezes para cada, 0 dominio de zt xl fal- l i f nr contem a safda de conversio ALPHA, enuc a linha 12 escreve 1i f nr utilizando tal safda de conversac, A linha 13 escreve 1ifnr, mas desativa a saida de coovers jo. Isso faz com que 0 valor real na tabela seja escrito . A linha 17 seleciona um tinico registro de zt xmara.
Formato
Ilffldd/yyyy / dd/Ilffl/ YYYY rrm/dd/yy dd/Ilffl/YY nmddyy ddnmyy yynrndd
Efeito
Escreve 0 data vtilizando 0 formata especficcdc no pe rfil do usucrio. Esse e 0 podreo, sendo ossim esses formotas rea lmente n60 Iozern
ncdo.
Escreve a data odotondo um ona com dais coroderes u1ilizondo 0 formoto espec ificodo no perfil do usv6rio. Os dais fczem 0 mesmo
g,.,j
cotsc.
Escreve 0 data odotondo um ono com dais corocteres u1ilizondo a formoto Especificodo no perfil do usvorio, sem seporodores. Os dais fozern 0 mesmo coisc. Escreve a da ta no formata yym mdd se m sepc rod ores.
eequivalenre
A linha 24 escreve 0 mesmo valor gewe i, mas dessa vez CU exibe 0 NIT mnemonico alemao.
480
DIA lH INSTRU(ADNRITE
481
As sofdos de conversec IOATE e SDAlE prod uzem fe rmata s de data diferentes. Alem disso, 0 m6dulo de fum;oo R GET DATE DAY AME H N retorno 0 nome do die do semana relative a ~mo -data -; idiomo especificos. C omo alternative, D ATE_C OMPUTE_DAYretorn o urn ncmerc
que representa
0
die do semono.
4
5 6
7 8 9 10 m . (2) y(4) II 12 end of fJ. 13 begfn of f4, m(2). 14 d(2) 15 y( 4) , 16 17 end of f4. 18 19 write : I fl. 0 perfil do usulri o confi gura 0 formata 20 I f l rtmjdd/yyyy, 0 perfil do usulr10 conf igu ra 0 f ormat a
21
!HilIS~ ~
linha 2 define fl como sy-datum. 0 comprimen to de safda no domfnic para sy-dat um e 10) entac separadores serao exibidcs quando o valor de fl for escrito .
As linhas 19, 20 e 21 fazem todas a mesma coisa: escrevem fl utilizando o fo rmate espec ificadc no perfil do usufrio. As linhas 22 e 23 fazem ambas a mesma coisa: escrevem fl utilizando a fo rm ate especificado no perfil do usufrio, mas utiliz am um ano com dois dfgitos. As linhas 24 e 25 fazem ambas a mesma coisa: escrevem fl utilizando o formate especificado no perfil do usudrioadotando um anocom dais djgitos, mas sem separadores. A linha 27 formataa data utilizando a safdade conversso IDATE. A saida de IDATE tern 0 formato yyyymmmdd. A linha 28 formata a datautilizando a safda de conversao SDATE. A safda de SDATE tem 0 formato yyyy/mm m/ dd. As linha.s de 30 a 33 mostram como criar seu proprio formate de safda, Se voce mesmo tivesse de fazerisso,seriamelhor coloca.r esse c6digo em uma saida de conversdo e)entjo, atribuir urn nome asafda de conversao na instru~ao write. Voce nao apenas simplificaria seu codigo , como tam bem de ficarla disponfvel para voce e para codas as outros programadores para uma aplicacto imediaca em qualquer programa.
22
I I
fl rrm/dd/yy,
df g1t os - perfil do usui r i o fm ! exfb fdo adot ando um ano cce 2 t, 23 / fl dd/",/yy . dfgi t os "perfil do usuar -t c fmt, anc corn 2 dlg i t os, s en 24 / fl omld" . separadores "perfi l do usuar t c fmt, ana com 2 dl gitos. sem 25 / f1 dcmnyy. separador es 26 / fl yynmdd . "f ormat o yyrrrndd, sern separ edcres 27 / fl using edi t mllsk I-!DA TE', 28 / ( 1) f1 using edit mas k I u SoA , TE 29 30 f2 - 11. 31 II'IOvecorrespond;ng f2 t o: t a. f4 . 32 wri te : / (10) f3 ust ng edit mask ' - '.J_ ', - f onnat o dd/nrn/yyyy 33 / (10) f4 usin g edit lIlask '-.J-.J ". - f oma t o nn/d d/yyyy
.,.
Utilizondo os
odi~6es no-zero e no- s i gn A adiiao no-zero suprime os zeros iniciais quando utilizada com variaveis do tipo c ou do tipo n. No case de urn valor zero, a salda sera t otalmente gerada com espaios em branco. Aadi<;ao 00 - 5; qn,quando utilizada com varidveisdo tipa t, pau f , suprime a saida do caractere de sinal. Em outras palavras, numero s negatives nao terac urn sinal e apare~erio como se fossem positives.
~.
~\, ~
ENTRADA~
1 r eport ztx 1410. 2 data: cl( lO) type c 3 nl(10) type n 4 n2(10) type n fl type 1 5 6 i2 type 1
7 write : I er , 20 "type c", 8 / cl nc-eere, 20 ' t ype c us Ing 9 / nl . 20 ' t ype n", 10 / nl no-zero, 20 "t ype n usi ng 11 / nz, 20 ' t ype n: eere 12 I n2 no-zero , 20 ' type n: zerc 13 / 11. 20 'type 1' . 14 / 12 no-sign. 20 l type 1 using
rc -zerc - ,
variavel de origem ni o seri alterad o, somente a saleh aparecerf diferente. Se voce aumenur 0 mimer o de decimals, zeros seno acrescea ta dos ao final do valor. Valo res negatives de n mo veri o 0 decimal para a direita, multiplicando efetivamen te a mimero por Farores de 10 e, enno, fazen do 0 arr edondamea to ant es da exibicso. A adi~io r ound n faz com que a safda seja multiplicada por fatores de 10 e, entaO, arredondada antes cia exibicao. Esse procedimenrc tern 0 mesme efeito de multiplicar por l O"'*n. Valores n positives movem 0 decimal para a esquerda e as valores n egatives 0 movem pan a. direita. Isso sera. util, p ar exemplo , quando voce quiser gerar uma said a dos valcres pU2. 0 milhar mais pr6ximo. A diferen~a en tre de cimals e round e que decimals alters 0 numerc de digitos depois do p ooto de cimal p ara n c) enu a ) executa 0 arredon damento. round move a ponto decimal para a esquerda ou para a direita pa r n, manten do o ofunero de di gitos depo is do decimal e, entao, execu ta. 0 arr edondamento . para 0 rnime ro de digitos de cimais exibidos. A Listagem 14.11 ilu st ra 0 us a de deci m s e round: al
000123 123
0000000123 123
000000000o 123123
arredonda mentc e
decima l s
round
T res instrucdes sao ut ilizadas para especificar 0 mimero de casas decimais na safda:
decima l s
currency
unit
...
Utilizanda a s ad i~6es deci rna15 e round A adic;ao deci mal s n pede ser ueilizads para aum entar ou diminuir 0 ndmero de casas decimais exibidas na lisa de safda. Se voce diminuir 0 ntimerc de casas decimais, 0 valor seri arredondado ant es de ser escritc na lists, a valor cia
3 Z
1 0
-1
484
l PR EN DAEM 21 DIA5 AB AP /4
CIA lH IHSTltU\iOWRITE
485
3 2
1
1.575.456
15. 754.560
0 -1
-2 3 dl!cillal s 1 3 decteets 3
ztxlf c3 ~ armazenada no campo ztxt001-waers. Voce pode descobrir isso clando urn. clique duplo em qualquer urn desses campos. Por exemplo, se der um clique duplo em zt xlfc3-sal dv, veri a tela Display Field ZTXLFC3SALDV.mostrada na Figura 14.3. A ubela de referencia e a campo de referenciaindicamque ztxt001-waers con tfm a chavemoneciri.a..
F igu ra 14
No linha S, 0 od ic;codecimal s a nOo eorre dondoda para clmc porque a pa rte frocion6ria do ncrnerc e menor que .5.
Indep end entem ente do Iocol de onde a espedfico~co declmcls e proven iente, elo ounce indicaro um ponto decimal rea l no nUmero. 0 numerc se re semp re crmczencdc como um valor inteire. A instru o deci mal s e uma espeoucccec de fonncto aplicoda 00 nemerc an tes que a mesmo seic utilizedo em qua lq uer lugar, par exemplc, no instruc;c o wri t e au em um cclcclc. "
Os tipos do ODIC. CURR e QUAM, sOo boseodos no ti po de dodo p do ABAP/ 4 (decima l com poe:tedo).
A tabela ztxtOOl contem os atributcs de todos 0$ c6digos cia empresa; sua chave primaria e bukrs. Se voce recirar 0 valorde ztxl fc3- bukrs e pesquisar aers ira center a cha:ve monetaria. a Unica 1inha em zt xt001 que corresponder, w A Listagem 14.12 ilustra esse conceito.
Util izando as adi~6es curre ncy e unit As adic;oes currency e unt t correspondem a uma maneira alternative de indicar a posicsc do ponte decimal para urn campo do tipo p. Elas nao podem ser "imal s. utilizadas com a adiliao dec Utilizando a adi~ao cur r ency Q uando escreve uma quan tia mon erdria, voce tambem deve u tilizar a adiC;2o currency. N ormalmenre, tais quantias sao recuperadas de u rn campo do tipo CURR em uma ..bela de banco de dados. Utilize currency em vez de decimals a fim de especificar a mimero de casas decimais para os campos de quantia monetiria. Diferent emente de decimal s, em que voce especifica a numero de casas decimais, com currency voce especiica urn c6digo monetfrio, como usn (dclares nort e-americanos}, ITL (lira italiana] au JPY (iene japcnes). 0 sistemaentia pesquisa esse c6digo monetario na tabela TCURX a fim de determinar a mimerode casas decimaisque deve ser utilizadopara exibir 0 valor. Se 0 ccdigc mcnetario nao for localizado em TCURX, um padcio de duas casas decimals sed utili:z.ado. Normalmente, 0 c6digo mccenric tambem e armazenado na mesma tebela de banco de dados ou em uma outra tabela relacionada. Por exemplo, a chave monetaria pan. as campos do ripe CURR (sal dv, 50111 e habn l ) na tabela
D6la~s
eee- tcancs
11 currency' IlL'.
ITL'
Lira 1t aliana
.i
9 ski p. 10 select f rom zblfc3 whl!re gja hr '1 997' 11 and u ldv 100 12 order by bukrs . 13 on changI! of ztxlfc3 ~bukrs 14 sel ect single * f rom ztxtOOl where bukrs ztxlfc3 -bukr s. 15 endon. 16 writ e: / ztxlfc3-saldv currency zt xt OOlwaers, zt xt OOl-wal!r5 . 17 endselect ,
a
486 I IPREH OI EM71 nus lBAP/4
SAiDA~
123,456
1
usa
ITL
487
1. 234.56
123 . 456
! I
100,000 ITl
25,050 III
100,000
100, 000 J py 300,000 J PY
. 250. 50 CAD
200. 00 CAD
AMluSE ~
decimalsque nao tenham zero. AMmdisso, nunca aumentara 0 numero exibido de casasdecimais. Par exemplc, se 0 valor for 12. 30 e decan for I, a safda sera 12 .3. Se 0 valor for 12.34 e decan for 1, a safda sera. 12.34. andec acrescenrara zeros depois que decan river sido aplicado. 0 namerc exibido de drgitcs decimais deve ser multiple de endec. Se necessdrio, andec preenchers 0 valor a direita com zeros, Se andec for zero, nenhum zero sera. acrescen tad o. Por exemplo, se 0 valor for 12.34 depois que decan river sido aplicado e 0 valor de andec for 3, deverao existir 0, 3,.6 ou 9 (au qualquer outre numero multiple de 3) digitos decirn.ais. 0 valor de saida, .partanto, sen preenchido com zeros para se tamar 12.340. Se 0 valor depois de decan for 12.3456, a safda secl 12.345600. Se 0 valor depois de decan for 12.30 e andec for 2, a safda sera. 12.30. A Tabela 14.6 contem mais exemplos dos efeieos de decan e andec no formato de safda,
. A linha 5 escreve 0 valo r de flo A linha 6 escreve 0 mesmo valor,masprimeiro pesquisa ' usn na tabela TCURX a fim de dererminar 0 mimero de casas decimals. 0 valor USC'
I I
Tabela 14.6 Como as campos decan e andec do tobela t 006 ofetam a fc rmctoc oo de scfdc de urn campo
Entrada
decan
1 1 1 1 1 2 2 2 2
andec
Resultado
30. 1 30.10 30.100 30.123400 30 3D 30.1 30.11 30.11 30.1100
casas decimals).
Quando a linha 7 e executa da, a tab ela TCURXindica que III caa tern
o
2 3 3 3
A linha 10 seleciona as registros cia tabela zt xlfc3 em ordem de c6digo d. empre,. (bukr s) . A linha 13 eacionada sempre que 0 c6digo da emp.resa e alterado. A linha 14 pesquisa 0 c6digo da empresa na tabela ztxtOOl a fim de [ocalizar 0 valor monetdric daquela empresa. A chave monetaria esta disponfvel no campo ztxtOO l-waers. A linha 16 escreve 0 balance obtido utilizando 0 mimero de casas decirn ais indicado pela chave monetaria no campo ztxtOOl-waers.
o o
o
2
4
Utilizanda a ad i~ao un it
A adi~ao un i t e utilizada para especificar a numero de decimais exibido para urn campo de quantidade. As unidades, como cm (centfmetros) ou l b (libras), dererminam 0 mimero de casas decimais a ser exibido. 0 c6d.igo, como 1% 1 (por cento] ou lKM 1 (quilcmetros) e especificado depois que unit e automaticamente pesquisada na tabela t006. Em seguida, as campos decan e andec determinam quantas casas decimais serjo exibidas. Os dais eoni sm urn valor numerico. decan especifica 0 mimero de valores decimais estimados em zero que devem ser truncados. Ele remove os zeros fmais e nunca truncard as casas
N orrnalmente, a. adiliaO uni t eutilizada com as campos do tipo Q AN que U sao armazenados no banco de clados. Cada campo deve ter urn campo de referenda do tipo UNIT; A unidade de medida para 0 valor no carD;pa QUANestara armazenada Iii. A Figura 14.4 mostra que 0 campo de referencia de ztxmarabrgewe ztxmara-gewei.
488
D~ lH INSlRU\lO
.,m
489
ztxmara-brgew,
ven5umo tela indicondo a tobelo d e referfndo e 0 compo.
33 34 3S 36
37
38 39
91 tOO6-andec.
endse'lect ,
es-ts
99.000 .1 ~ 1I111 111ters eecan 3 eneec 3 99 .00 , - percent eecan 2 andec 0 decen 0 andec 3 99 - 1nch!!5 99.1234 99. 1234 99.1200 99.1 2 99.1 99.1 brg ew I s- is MI00 HI0l M102 M 103 102. 560 10.100
as-Is
%
as- is
%
as-is
%
w/un1ts
102. 560 10. 100 I
SO
nt gI!W
,
9
6 7
100.000
I n,
a
0
0
'as-i s' ,
1. 000
50. 000
10 II 12 /. 13 / f2, 'as-1s' , 14 ' I tz unit '% , '% ', IS '15-15 ' / fl. 16 / 13 unit ' %' , ''1;' , 17 / fI, ' es-t s ' , 18 f4 unit '% '. 19 20 skip . 21 wr1te: /1 2 ' br gew as-is ', 22 31 ' -nth units' , 23 48 ' ntgewas-is ', 24 67 'with units ' 2S 79 'unit s' . 26 85 ' decan', . 27 91 'andec . 28 ul tn e , . 29 select frtlCll ztxma l"'l . 30 sel ect s i ngle t r Oll t 006 whe r e llIS ehi 31 write : /(5) ztxmara-mat nr 32 ztxma ra -bi'Ql!w.
/ fl unit 'Hl', 'ml - m l il iters eecen 3 andec 3'. l1 / 11 uni t '% . '% percent ' eecen 2 andec 0' , / n 'unit - i nches decan 0 endec ) ' :
..
o o
AHlllS! ~
A llnha 10 farmata f l utilizando a unidade %(por cento), que tern decan 2 e andec O. decan 2 essabelece que as zeros finais depais do segundo deci mal devem ser remo vidos. andec 0 indica que naa hi mais nenhuma medificalji o e, entia, a saida sen de duas casas decimais.
A linha 11 uriliza a unidade [polegadas}. decan 0 indica que todes as zeros de cim ais devem ser truncados. andec 3 indica. que 0 ncm erc de decimais deve ser p reenchidc com zeros para tres casas decimais.
ztxmara-gew I!1.
N; linhas de 13 a 18 [o rmatam de
Na linh a 14, decan 2indica que as zer os finais depois do segund o dlg iro decimal devem ser rru ncsdos . Nrc existe nenhum, entia nada sera
490
D~ lUINSTRU(iO N lTE R
49\
t runca do. andec 0 indica que me haven ma.is nenhum preenchirnento, pcrtanto, a saida sed jcrmatada utilizandc qu arrc dtgirc s decimals. Na linha 16, decan 2 fu. 0 truncamento dos zerosfinais.
AB
. + 1. + . 2 +.3. .. . +. . 4
1234567890123456789012345678901234567890 AS
A linha. 29 seleciona todos as registr os cia tabela ztxmara. Paraada, a linha 30 seleciona 0 registro de tOO6 que contem a unidade em zt xm -gewei. Observe que issa nie ! normalmente feito. E ara apenas fcito aqui para mostrar as valoresde decan e andec.
Nas linh as de 32 a 35. as valores gewei e nt gew sio escritcs de dUOlS
As linhas 3, 4. 9 e 10 escrevem UIIU. regua, de mod o que p ossa ver os mim eros cia colun a D.2. saida.
A linha 5 escreve f1 utiliz.anda a formata~o e a comprim ento padrao. A fOI1I1a.Uljio padrio para uma varisvel do tipo c espe cifica um alinhamento
a esquerda,
maneiras. Primeiro, sio escrieos como sio e, entao, sse reescritos utiliz and o-se a adi~io un1 t a fun de mostrar 0 antes e 0 depois.
ali-
linha.
Mudgndo
glinhamento
Com a ut.iliza~o de l eft -justifi ed, centered e right-justi fie d, voce! pede mudar a valor de saida denero d o espa ljo distribuIdo p ara 0 campo de suda.A Listagem 14.14 ilus tra esse conceito.
ENTRADA'" Listagem 14.14 Utilizando as cdil; 6es de alinhamento para a instruc;co
A linha 7 centraliza 0 valor deat rc do com prim ento de saida pad.rio de 6. A linha 8 alinha a direin 0 valor dentro do comprimento de safd..a. padrac de 6.
As linhas 11, 12 e 13 especificam urn comprimento de saida de 40. 0 valor e entao alinhado a esquerda, cenrralizadc e alinhado a direita dentro daquele co mp rimento.
,.. w rite
Resu ro o
1 rep ort ztx1 414. 3 write : / 4 /
5 6 7
8 9 10
/ / /
Se voce nio estabele cer qualquer especificacac de formato ou de comprimento na instru~ao wr1 te l 0 formato e 0 comprimento padrao do campo seraoutilizadas. Es ses padroes sao originados a partirdos tipos
formato e a cc mprimenro
11
12"
13
/ f1 r1ght .j usti f 1ed. / ' .. .. +.. . 1. . . +. . 2 +. . .. 3. + .. .. 4', / ' 1234567890123456789012345678901234567890 ' , /(40) f1 left -just i f i ed. / (40) 11 centered. /(40) fl r19htju s t i f i~ .
padrac. Alem disso, as especificacces de formate, como ntim ero de casas decimais e comprime nto de saIda eambem podem ser especificades no domfnic; estes anul am os vaIore s herdad os.
Os cam pos de dat a e hera serac exibi dos com separadores, se exiscir espacc suficiente para eles no campo de sa.!da. Se nao existir, os separadores serio completamente removidos . Em um campo numerico, os separadcres de milhar sio removi dos, urn par vez, comecandc cia esquerda do campo em direljaO a direita a fim de exibir mais djgit os. A te mesmo 0 campo de sinal sen utilizado se 0 mesmo estiver em branco.
A. A.
Para a maioria cbs especificaljoes de form a.t o de data, 0 pad.rio do usuano defmiri. peto menos em parte, como os campos de data
.:8
492
OIA lU IHSTllU\lOWRtTE
493
deversc ser formatados. De tcdas as especificacces de formato de data, somenre yyrrmdd anulari ccmpletamente 0 padrao do usudrio.
U rna mascara de edi'iao pede ser utilizada para inserir caracteres na safda, Eta tambem pode solicitar uma saida de cocverssc que ici
P&R
formatar a valor, utilizaodo 0 c6digo do ABAP/4 . Uma safda de converssc ~ como urn conteiner reutilizavel que concern urn c6digo para formatar urn campo. .
Utilize no-zeropara suprimir zeros iaiciais nos campos do ripe n e tipo
c.
Observei que existem tambem modules de fun~o com os nomes CONVERSION_EXIT_XXXJO(_INPUT . Para que servem?
Utilize no-sign para remover 0 campo de sinal final "da exibi~ o. Utilize decimals para especificar devem ser exibidas.
0
o m6dul o de fun~io INPUT E chamado sempre que urn valor E inserido em urn campo, desde que 0 domfnio daquele campo especifique uma sarda de conversto. A safda de cocversso INPUT conven e a ent rada do ususrio para um novo formate antes que 0 programa a receba. Eurilizada pan reduzir a quantidade de c6digo repetitive necessaric para farm atar novament e urn valor de entrada, de modo que a prognma que 0 utiliza nao tenha que fazer
isso.
Utilize round para. indicar a posifiao do ponto decimal no valor. Utilize currency para especificar 0 numero de casas d.ecimais para os campos de quantia moneciria. currency pesquisa 0 c6digo monetaric na ubela tc urx a fun de determinar 0 numerc de decimals. Se 0 c6digo nao for Iocalizadc, urn. padrao de duas casas decimais sera utilizado. Utilize un i t para [ormatar as campos de quantidade. A uaidade e pesquisadana rabela t006.decan determina 0 ndmerc de zeros decimais a ser remcvido e andec determina 0 namerc de zeros a ser adicionado. I?fgitos decimals diferentes de zero nunca serao removidos. Utilize left -just ified, centered e right-justified para alinhar valor dentro do comprimento do campo de salda,
0
o o
Como criar um a salth de conv ersio? Se nao souber como criar um m 6dulo de Un c;ao, voce precisara pr imeiro ler 0 capitulo relacionado com esse assunt o. Se voce souber como criar urn m6dulo de fun fiao, erie urn com a nome CONVERSION_EXIT_XXXXX_OUTPUT cede XXXXx ccrrespocde a urn Dome-com cinco caracteres por voce definido. Deve haver urn parlmetro de iraporracac denominado IN e um pargmetro de PUT exponac;aodenominado OUTPUT. 0 valor original passado da instnlfiaO write erecebido arraves do parnneer o INPUT. Voce pc dera formaef-lc novamente e ao final do m6dulo de funC;ao, atribuir 0 novo valor 200 paramerrc O UTPUT. Uma boa maneira de comecar e copiando urn existente.
I Fa~a
---=------Permitc que cs usudrics es pec fi quern sevs pr6prios fonnotos de ~oto. Utilize as scldcs de ccrwersec para executor torefos de formotec;oo repefitivcs, especiolmente se forem com plexes.
quon tios em d6la r. Por suo vez, utilize a odic;oo currency, Nao ccdrhq ue demais duos casas declmcts para % ou parc quo lquer outro unidade de medidc . Por suo vez, utilize a odiC;ao unit.
que aprendeu neste capjtulo. A seljaoTeste oferece perguntas pan ajudar a solidificar seu entendimento do coneeedo abcrdadc e a se~o Exercicio permite que voce pratique 0 que aprendeu. Voce pode encontrar as respostas as perguntas do teste e aos exercfcios no Apendice B, "Respcstas as pergun tas e aos exercrcios".
Teste
1. 0 que voce precisa fazer pan garantir que as altera~6es no padrio do usuirio entrem em vigor? 2. 0 que acontecera quando um.a ma-scara de edifiio que come~a com urn Vfor aplicada. a urn campo numerico ou a. urn campo de caractere?
3. Com quais tipos de varisveis a adiljao no -stan pode ser utilizada para fazer com que urn mimero negative .aparelja como se fosse positivo?
Exercfcio 1
Esereva urn programa que produza a seguinte said.:
., . + 1 +. 2 :+. 3 + .. 4 First December
SE ANA 2 M
January
First
R evisao
Na semana passada, voce realizou as seguintes tarefas:
criou os objeros de dados vuiiveis e fixos utilizando os tipos de dados predefinidos, bem como os definidos pelo usuirio aprendeu as regras de sintaxe do AB~/4 e as instruljoes para ccntrolar 0 and.a.mento do programa descobriu as instrucoes de atribuiljao e as regras de conversac
definic as tabelas intemas e as preencheu utilizando areas de trabalho implfciras e explrcitas
otimizou ainstru(jao sel ect a fun de preencher de form a direta e eficiente urna tabele interna executou internas
0
urilizou as 0pljoesde formatilrsao da instruljao w te e observou ri as efeito s de tipo de dado sa bre a saida empregou assaldasde ccnversac e detectou sua preseclia denrro do dominic
r . rr r
r> r
r:
r"'
r>
r>
r"'
r>
,...,...
SEMANA
Visio geral
N a Semana 3, voce produzira relatorios que utilizam simbolos grificos e leones, anexa cabec;alhos e rodapes alistas e envia saida para a spool de -page pri nt . D epois disso , voce se iccpressac utilizando a instruc;ao new familiarizacl com as eventos i ni t i al i zat ton, start-of-sel ecti on, endof -sel ect ion, top-of-page e end-of-page. Voce tambem codificars subrotinas externas e internas e m.6dulos de funtjae e passara pargmerros digitados e nae digita dos p ara eles par valor, par valor e resultado e por referencia. Par fim, voce definid excecoes dentro do m6dulo de funt;:ao, co nfigu ra ni a v;Jor de retorno de sy-subrc e criara telas de selecac utilizan do a. instru~ae select- npt tons.
No Dia 15, "Tecnicas de formatatjao, Pa rte 1", voce utilizard as opcoes de fo rmatafiao grifica da instrutjao sr-t t e (as symbol, as icon, as line), impressjlo lista de saida e manipu la a sai'da no spooL
Durante 0 Dia 16, "Tecnicas de formatacio, Part e 2", voce utilizard as instrugoes comuns de formatac;ao new- I i ne, newpage, ski p, back, pas; t i on e set bl ank 1; nes; e enviara safda para e spool que ueiliza new-page pri nt.
Dentro do Dia 17, "Modularizacao: event os e sub-retinas", voce utilizari as eventos init ial izati on, start - af-s el eetion e erd-cf-s electtcn, definira sub-retinas int ernas e extemas; e definiri verifveis locais , globais e estdticas e areas de trabalho
de tabela.
Durante a Dia 18, "Modularizacao: passando pardmetros para sub-retinas", voce passara pardmetrcs digitados e n jc digitados para sub -retinas; passard parametres de tres man eiras: por referaacia, par valor e par valor e resultado; e pass ard strings de campo e tabeles internas uma sub-rotina.
para
498
Durante Dis 19, "Mcdularizaclo: modules de fun~ao, Parte 1", voce entendera e util izara a instrucac i ncl ude, criard gropos de fun~o e m6dulos de funr;ao e definira parametres de impcrtacao, de exporta~o e aiterdveis.
No Dia 20, "Mo dularizacao: modules de func;ao, Pane 2", voce entenderd as compone ntes e as estrurura de urn gropo de fun~ao e definir:i dadcs globais e sub-retinas dentro de urn grupo de func;io. No Dia 21, "Telas de selecic ", voce ccdificaei telas de selec;ao que interagem cern 0 usudrio, utilizara elementos de formatacso para criar
telas be m-projetadas e eficientes de selec;ao e utilizara telas de se1ec;:io
Di 15
Tec as de format a~ao, Parte 1 nic
O bjetjvos do capitulo
Depois de completar este capitulo,voce sera capaz de:
Utilizar as opcoes graficas de fonna taljao da instrucio write (como simbolos, leones e linhas).
Imprimir uma Iiseade saida e manip ular a saida no spoo1.
Iistade safda.
Tabela 15.1. .
Efeito
as symbol as icon as 11 ne
E xibe urn simbolo em pretc-e-brcncc Exibe um ko ne"decor Exibe urnccrcctere de desenho de linho
hllpJ l www.corTlPus.com.bl.
........
500
~
_~
-FFFFFee ~
-~~
enmnnn
nn
,...-,
77
' ' ' S 10t axe p a ra as a d'u;oes g ra f leaS pa ra a , t rU~ao wrJl t e lOS
write n1 (a)
(b)
illS
/4 sYD'_ fi1led_squaT"l!
iI.S
10
lZ skip.
iymbol.
11
'KNCl'
~
~
IS IS
icon. line .
(e)
write : / ztxlfal - l1 f nr ,
ztxl f al-namel , sytl.Jlhon e as symbol, ztxlfal- t elfl.
onde:
16 17 18 19
endset ect .
o ccdigo D' Listagem 15.1 produ z a sald. mcs trada D' Figura 15.!.
Utiliza od o a
adi~ao
s{mbolo
as symbol
blcclcr simples
m.o ,.
lOyD ....
Urn
e urno figure
de
As linhas 4 11 escrevem urn. lista de Domes de rabela dificil de codificar na forma de marcadores. As linhas 14 a 19 escrevem codigcs, nomes e c ame ros telefcnes de fabricantes precedidos pelo simbolo de telefone.
quoclrcdo, urn d rculo, urno po sta ou urn documento. A moiorio dos sfmbolos ocupa um unico ccrcctere no liste de so ido, emboro a lguns poss om ocupor do is espcccs, por exemplo,o slmbclc de urne moo opontondo pora a esquerdo (sym_1eft_hand). Umo instrui;oo de exernplc serio w rite sYDI_l ef t_hand as syrrtlol .
A fim de escrever um sfmbolo, voce deve incluir uma das duas instrucoes seguintes na parte su perior de seu program a:
inc:lud. <syrd,lol:> .
Utjlizaodo a
IOVO .... lEUO "
ad i~aQ
as i con
ou
i ncl ude <list> .
Um fcon e_tsemelhon 0 um sfmbclc , excetc pelo fato de que e umo nguru te multicolorida qU!I pode epereeer no listo de scjdc. A maioria dos leones ocupo dois espocos no Iistc de scldc, emborc alguns ocupem mois. Um exemplo de umc instrvo write que escreve urn leone serio write 1con_l ed_red as 1con.
Tcdos as s!mbolos sao imprimfveis. Isso significa que se voce enviar sua
safda p ara a impresscra, eles aparecerio no papel exatamen te com o voce os ve online .
Para escrever u m leone, voce deve incluir uma das duas insrrucoes seguintes na parte superior de seu programa:
include <icon>,
0 nome entre slncis de maior e menor e urn progroma ind ude. Esse progromo
ccntem um
ou
t nclll de <l1st>.
conjunto de instruc;oes que defineos names dos simbolos que voce pode utilizer. 0 include <symbol > conMm s6 os dennic;6es de srmbole. 0 include <1 i st> co ntem sfmbolos, leones, ccrccteres de desenho de linhc e definit;Oes de cor. A llstcqern 15.1 contem um progromo de exemplo que utilize simbolos .
N em todos os leones sio imprimfveis. 0 procediment o para determinar quais podem ser impress os segue mais adiante oeste capitulo. A Listagem 15.2 escreve alguns Icones de exemplo.
2 3 4
5 6 7
B
re por t ztx1501 . include <syrrtlol>. t ables ztxlfll. wri te : I sy:nJllus_box as symbol , ' V endor Ma ster Tables', /4 sym fi ll ed circl e as symbol , ' LFAl' , / 4 sym)111e(cin::le as symbol, ' LFBl' , / 4 syrn f i ll ed ci r cle as symbol , ' LFCl ' , / sym~l us_b~x as symbol , 'Customer Ma st er Tabl es ',
5
6 write : / 'checkmark '. 7 / ' r ed x" ,
15 ico n_checked es icon , 15 ico n_tncOJlPl ete as icon,
502
APRENDA E !1 DIASABAP/4 M
8
I I
' o'll!!!n 1@w '. 15 icon_overview as .1con, ' t i lDe peMod'. 15 ic onJll!Mod as teen.
1f not ztxmarastoff 15 initia l. select sing le * from ztxmgef where stoff " ztxmarastoff . if ztxmgef-lagkl .. 7 . 1co .. ico"_!ll!neratl!. end;f. endi f . wrfte : lieD as teen , ztxmara-matnr. zt xmaraellt art , ztxlIIara.matkl. Itxmara -brg!'W.
ztxmaraentg!W.
ztXll\ilri!l9~i .
As fuLhas 6 a 9 escrevem um exemplo de quatro leones diferentes. A linha 4 define um a varifvel identificada como i co para canter urn leone a ser escrito, Qualquer nome de Icon e pode aparecer depois de like.
30
eneseteet .
SiiDI ~
Figura 1 S 1
Iccne
sfmbolos.
A lioha 23 escreve a valor de 1co utilizando as ; con para fazer com que 0 valor seja inrerpreradc com o urn leone. Campos adicionais de zt xmara tambem sao escrito s.
Utjlizando a
NOYO '" TElMO r
adi~6a
as 1 j ne
Um coradere de desenho de linho e um ccrcctere que pod e ser utilizodo para desenhor bnbcs em umo listo. Voce pede utiliz6-lo pa ra crier linhas horizonta is au vertic cis, umo ccixc, uma grade ou umo estnJturo do tipo ervore.
>
Em geral, para criar uma linha horizontal, voce utilizaria sy-ul i ne. Simplesm ente escreva-o e especifique 0 comprirn ento nec essaria. Po r exemplo, para escrever uma linha ho rizontal que corne lia em posiliao 5 para urn comprimenta de 10, voce codificaria write 5(lO} sy-ul i ne. Pa ra eriar uma linha vertical, utilize sy- vl i ne: par exemplo, wri te: sy-vl i ne , X sy-vli ne escreveria uma linha vert ical em qualquer lado de urn X. Se houver uma interse~ao
I I ,
_ _ aa
504
!
mm
_ rr
j
desenho deliaha,
505
de linhas na salda, 0 sistema. inseriri 0 caractere apropriado de conedo. Per exemplo, onde a borda de uma lioha horizontal e vertical se encontrarn, urn canto de caixasera desenhado . Para proporcionarcontrole absolute de: desenho de linha ha caracte res 1t ne-draw adicionais disponfveis .
15.3.
A linha 2 inclui as defini~6es para to dos as s!mb olos e caracteres de: desenho de: linha de modo que possam ser utilizados oest e programa. A linha 4- define duas variaveis qu e podern arm azen ar caracteres de
A linha 7le todas as linhas de zt xlfal. A linha 8 Ie zt xlfbi para ver se ha qualquer registro-filho para a
registro ztxlfal atua].
Figura 15 3 EsIe Ii urnexemplo de safda de listo
7 select 'It fl"Olll ztxlfal. select singl e " fl"OOl zulfbl w here l H nr ztxl f al l1fn r. 8 if sy-subrc " O. 9
10
contendo corocteres
de desenho de linha.
11
12
13
14
15 16
17
18
19
20
21
22 23 24
25 26
27
28 29
30
31
32
33
34
35 36
37
38 39 AD
41
42
43
w rtte: I sr - vl f ne , s)'Ill_ope"_fold er as s~o1. else. write: I sy-vltne , sY"Lfolder as symbol. endif. writ e: ztxlftl -l1 fnr. 30 sy- vl tee . select" from ztAlfbl where 11t nr ztxltal11tnr . select single li fnr f1"Olll ztxlfbl i nt o (ztxlfbl -lf fnr) where 11 fnr ztxl fbl -lt fnr and bukrs > ztxlfbl-bukrs . i f sy-subrc O. Hnd line_1eft _nri ddle_corner. l1neZ l1ne_vertiea l_l1 ne. else; li ne! l tne..bottclIUeft_corner. cle ar l tnez, endif. write : / sy-vBn e. 4 li nd as lt ae, zt xl1bl-bukrs, 30 sy- vj tn e, select * from zt xl fc3 wher e 11fn1' '" ztxl f bl l1 f nr and bukrs ztx1fbl-b uk1's . write: I sy-vttne, 4 l1ne2 as l i ne, 8 li neJ eft_lli ddl e_comer as line, ztx l fc3-gj ehr, ztxl fc3-shbkz. 30 sy~vl fne. endsetect , if sy-s ubre O. write 8(Z) line_b ott cm) eft_corner as li ne. end1f. endselect. w rite: /(30) sy-ult ne. endseleet ,
Se existirem registros-filhcs, a linha 10 escrev era uma linha vertical e urn slmbolo de pasta aberta. Se nc nhum fa r lo calizadc, serio escriras urna linha vertical e pasta fechada. A linha 14 escre ve 0 ntimerc de fab ricant e na mesma linhae entaa uma linha vertical. na posi~ao 30.
ultimo registro-
Se h ouver mais regisoos-filhos, a linha 19 configu ra a variavel 1; nel para armazenar urn caractere de desenho de linha de canto esquerdo de meio, e l i ne2 para armazenar uma linh.a vertical. Sy-v1tne poderia ter side utilizade aqui em vez de 11ne_vert1ca1_1t ne.
--------4-----------------.f
506
I 'PRE NO' EM 21 nus "'P"
507
I.
!l
A linh a 26 escreve a varisvel I ine l utilizando a adiljio as 1i ne de modo que 0 valor seja interpreta do como urn caracrere de desenho de linha.
~I:
As linhas 30 a 37 escrevem as filhos do registrc ztx lfbl atu al utilizando caracteres de desenh o de linha aprop riaclos. A linha. 42 escreve urn subliohado com urn comprimento de 30 caracteres.
6 setecr v from zb1fc3 i nt o table It. 7 sort it by lifnr bukn gjahr shbkz.
8 l oop at it .
g
1f tt - se'lev
<
1000.
10 11 12 13 14
15
1.6
11 18 19 20 21 22 23
2~
3. De um clique no boeso Pattern au escclba 0 caminho de menu Edit-> Insert Statement. 0 sistema exibe a tela In sert State ment.. 4. Selecione 0 botao de opCJio Write.
7. Coloque
25 26 27 28 29
_.30
8. Pressione a reels F4. 0 sistema exibe urna lista dos itens disponfveis.
lev.
10. De urn cliqueno borao Copy.Voceeaeac volta a tela ABAP/ 4 Editor: Edit Program XXXXX, e uma instru~o wri t e einserida qu e escreve
o item .
~o
31 32 33 34 35 36 37 38 39
40
1coJ 1co"_gre en_li ght . el set f 1t~sa ld v betwffi' 1000 and 3000-. fcoJ .. 1conyellow_l1ght. else. 1coJ i co!,!_red_l1ght. end1f . at new 11 fn r. ff sy-tab1X ~ 1. write: / 5(82) sy-ul1ne . 19 lfne_bottOlll_m1ddle _corner as li ne. 21 l1ne_bottlJll_middle_corner as li ne. s lt:1p endt f , write: /S{lS ) sy-ul t ne, / S-sY vl1ne . sYIK_docurr.ent s IS symbol . ft. ltfnr. 19 s1-vt.ine. / 5(82) sy-uli ne. 19 line cross as Jtne , 21 l1ne=top_middh_corner as line . endat . write: / i co_l as icon. 5 sy-vt t ne, ft bukrs. sy-vltne. it-gjahr. U m ef tJ l iddl e_comer as line no-gap. U 1t - shbkz no-gap, l1 neJ1 ght _1I1ddle_coTn as li ne. er t t -saldv,
SliDA ~
o c6digo
IU.
_
H
'~ .
508
509
k especifica 0 mlmero de linhas reservado para urn rodap e na pa.rte inferior de ca.da pagina.
de desenho de /inno.
A melena dos lmpressc rcs noo pode imprimir me is de 132 ccrecteres par Iinho. Se voce sabe que se us uS!Jcrios poe/em querer imprimir a Ij~~ de sardo, noo tente excede r esse limito o.
report:
line-si ze
11 ne-cou nt
A adifiio , i ne- s1ze con trola a largu ra da lista de saida; 1i ne-c cunt ca ntro la 0 mimero de linhas por pagina.
o numero da pdgina e impressa no canto superior direiro da lisra. 0 mimerc padriio de Iinhas por p agina ~ 60.000 - 0 maximo permitido. Voc! pode utilizar 1i ne-count para anular esse ndmero. Por exemplo, peraesp eciflcar 55 liahas por pdgina, digite re por t line- count 55. Especificar 1i ne-count 0 . significa utilizar 0 maximo (60.000). usu dric pode esp eciflcar 0 ntime ro de linhas por pfgina que apropriado p ara a imp ressora qu ando imprimir 0 relat6rio.
adi~6es
i nstru ~60
A sintaxe das adifioes l i ne-s ize e li ne-count para a instrucic r eport segue :
r eport ltne-st ze 1 l1ne-count j(t) .
e como
Para fozer isse, utilizec instnJ o new-page (obordada mais cdlcnte). Esta tcmbem pede ser utilizada para configurcra numerc de llnhcs per pcgina a ntes de quolquer scldc ser gerodo.
onde:
t ,J e k sao con stan tes num ericas. Variaveis nio sio permitidas.
i especifica a largura cia lista de saida (em caracteres).
j
"
1t ne-count mo ncrmalmente ueilizadc com rela t6rio s que sio visualizados online. Por exemplo, suponha que a R/3 incrementasse a numera~a.o de pagina cada vez que voce pressionasse a tecla Page Do'NIl. Se 0 ususrio gerar urn relatorio, rolar para a. pagina 3 e entao redimensionar a jaaela, ele ainda estari na pdgina 3? Obviamente, 2. capacidade de redimension ar a janela torna dificil fazer regras sabre Dumeros de pigina online. vocep oderia tentar deixar
._ .;. ~:.
~7,-:" }'
~ ~, .
~.::~~'-'
~p'rR~D-A. EM 21 DIASABAP/4
wnanho de paginaiguala altura de janela quando 0 relat6rio for execuradc. Mas se 0 usudric redimensionar a janela depois que a relatorio foi gerado , as quebras de pdgina eao mais correspoaderao com a altura da janela, 0 usu drio
0
511
INluSE ~
veri lacunas na salda e no inicio de paginas no meic da janela, Pan evitar esses
problemas em relat6rios online, utilize a valor pad rsc para 1tn e- count. A Listagem 15.5 mostra urn programa de exemplo que ilus tra 0 usc de li ne-count el ine-size.
N a linha 1, li ne-size configura 0 mlmero de cclucas de safda co mo 132. Isso configura urn mimero fixe de colunas de safda in dependentemente da largura da. janela de saida.. 0 usudrio pode urilizar a barn de rolagem na parte inferior cia. janela pan ver a sarda fora de
visao a direita,
Na linha 1, 1i ne-cou nt configura 0 numerc de linhas par pigina como 55. Iss o caus a urn p rob lema.quan do 0 ususrio role para baixo, que nie ocorr eria se 0 valor padrfc pan 11 ne- count tivesse sido utilizado. Outre prob lema pod eocorrer quando 0 usudrio imprime a Iista, Se a imp ressora eac imprimir exatame nte 55 liohas por pagina, 15 queb ras de pdgina sairao iaccrretas. N cvamente, uti.l.iundo 0 padrac 1inecount , esse problema pode ser evirado, porque 0 usuario especifica. 0 mimero de linhas por pigim quan do selecionar uma impressora.
1 report ltx150S line- si ze 132 li ne-count 55. 2 tables ztx lfc3. 3 select 1I'"0Il ztxlfc3 order by l t t nr bukrs gjahr shbkz. 4 on change of ztxlfc3-1ifnr. 5 write I ztxlfc3-1ifnr.
6 .
eoecn.
7 8
9
Imprimindo
saida de lisla
10 11
Inicie a ScreenCam "How to Print list Output - agora, P ara imprimir a. saf&t da Listagem' 15.5, prime iro execute a relat6rio e entio siga este procedimento:
12
13
14
15 endsetect ,
ztxl fc3-habnl.
sllDI ~
FIgura 15
1. Da.lista de safda, de urn cliqu e no batao Print ria barrade ferra mencas Application. Se nao estiver disponfvel, escolha 0 caminho de menu System->JJst->Print. A tela Print Scre en List sera exibida. 2. No campo Output Device, digite a dOl sua impress ora. Voc! pode obter uma lisa de codas as impressoras defini das para seu sistema colocando seu cursor nesse campo e enta~ pression an do F4.
5 Este l! 0 efe/todo
odi)60
3. Coloque urn rnarca de sele~ao na caixa de selecao Print Immed. 4. De urn clique no batao Print na barre de ferrament as Application .
Voc! volta para. a lista, e a mensagem Spool r equest (number nnnnn) created " aparece na parte inferior cia jace la.
l me-count,
Seu consultor de Basistcmbem pode definir uma maquino de fox como urn dest ino de impressoo. Para envierurnrelot6rio porfox, esped flqce Choose 0 FaxMachine 10 em vez de um Printer 10 no compo Output
Device.
As configura coes padrao de impr essora sao espec ificadas no seu perfil de ileusudrio. U tilize 0 caminho de meou Prof > UserDefaults para altere-las. Essas configuracc es sersc utilizadas sempre que voce imp rimi r urn relat6rio.
512
D~ 1 5,OOICAl DE FOWnl.io.PAJrrE 1
513
Pore envier urn rel0t6rio para multiples impressoros 00 mesmo tempo, pecc para a seu consuher de Basis instclcr um poo l de impressorcs
Se voce Ilio co locou a mara de seleCjao D elete After Print na tela Print Screen List, a saida permanecerd no spool. Isso permite a voce reimprimir mais tar de. Isso ~ l1w se sua impressora ~ m.wta personalizada,
Quando voce cia urn clique no batao Print, sua saidaeenviada primeiro pan.. a
spool
Cabecalhos de paginapadrso
Evento top-of -page
spo ol do R/3 e entio p:ara a sistema operacional. Se voce cac cclocou um a marca de se:1e~o em Prin t Imrned, a saida de lista e armazenada no spool do R/3 - elanaa e enviadapara a spoo l do sistema cperacional. E aI fica ate voce a. excluir au imprimircom a opc;ao de exclusao ativada (acaixade selecac Delete After Print na tela Print Screen List), ou iite que envelheca a suficiente pan
1. A part ir de qualque r tela, escolha 0 caminho de menu System- > Services-> Print Requests. A tela Spoo l: Request Screen e exibida. 2. D igite as crite rios para localiz ar sua safda. Sell Id de csuaric (Inser ido
SCRE!HClM,. ogo"' .
I . lnicie a partir da tela AJ3AP/4 Editor: Edit Pro gram.
2. Se voce mer qua.lquer alterac;ao, salve seu relat6rio . Como mencic nado DO Ultimo quadro de Cuidado, voc e tkve fazer isso para as passes seguintes funeionarem. 3. Execute a relatorio. Vo ce entio ve a sa!da de lista. 4. Escolha a caminho de menu System- > List-> List Header. Os campo s de en trada aparecem na parte supe rior do relat6rio - om para a
3. Pre ssion e Enter; A tela Spool: Requests e exibida. Ela contem uma Iisu das ent radas que correspondem com 0 spool. 4. Para exibir a saida para uma entrada, cclcque urn marca de s ele~io ao lado deb. e entaD de urn clique no batao Display. 5. Para exibir a. safda para miiltiplas entradas, coloque urna mara de selec;io ao lado de Multiple Entries ou utilize 0 caminho de menu
515
I
;1
1 anguage E apuece. Isso signifies que voce veri as novos cabecalhos cia pr6xima vez que execurar esse programa.
7. De urn clique no botio Back duas vezes. Voce volta a tela ABAP/ 4 Editor: Edit Program. 8. Execute 0 relat6 rio acvamenee. Voce vera seus novas csbecalbcs na parte superior da said a, Voce po de estar se perguntando: afinal, onde esses cabecalhcs sao armazenados ? E mesma se nao estiver, voce descob~iri isso de qualquer jeito a segurr.
lEUO
NOVO....
como elementos de texto. Um e lemento de teste e quolquer string de ccrectere qu e exibido no soldo de ltstc . Tclvea c pc recc no parte superior como um ccbecelbc, no meio (como umo string de corcetere que n60 vern do banco de dodos), ov no porte inferior Como um redcpe. A SAPgostc de proporcionor copocidodes de multiplos ldic mcs em seve programos, de modo que quo lquer co isc que possc precisar ser tradlJlido (por exemplc, ccbecelhcs de relot6rio) sl!!lio crmceeocdc seporodo men te do c6dige>-fonte como elementos de texto. Esses elementos podem ser traduzidos sem o ltercr 0 c6d igofonte . Neste s~60, estamos trotondo especiftcerrerrte dos elemen tos de texto de relctoric e ccbeccthcs de cclu nc , mos tombem he outros que serna trotcdos mc ls odlcnte.
I
!
4. Pressione 0 bon e Save para salvar suas alter:u;6es. 5. Pressione 0 botio Back. A tela AJJAP/ 4 Edito r: Edit Program 6 exibida. 6. Execute seu program a. Seu tftulo e os cabecalhos novos aparecem na parte superior do seu relat6rio. Os elementos de texro tambem podem ser acessados a partir cia ABAP / 4 Editor: Initial Screen escolhendo 0 bcuo T ext Eleme nts, e en tia dacdc um clique no bou"o Change. Voc! pede achar util revisera se~ao nos componentes de um programs de ABAP/4 neste ponto (veja a Figura 2.1 no Die 2, "Seu primeiro programs em AJJAP/4") .
FigurA 15 6
il
t,
j!
1
I I
i,
L
idles eo Headers
podr60.
Uma vez que as cabecalhos padrio SaO armazenados como elementos de tex to, voce pede vs-los e mo difier- los a.cessando as elementos de texto do pro grama. Estes eStaOccnti dcs na tela ABAP/4: Text Elements: Change Title and Heading, mostr ada na Figura 15.6. Utilize 0 seguinte procedim ento para ver, alterar au criar cahecalhos padra o.
scmNCAM....
lnrcle 0 Scree nCam "How to Create Stonda rd Report Headers Via Tex! Elements" ,. a go ra.
0
caminhc de menu Goto->Text Elements. A tela ABAP/ 4 Text Elements 6 exibida. 2. Escolha 0 bou o de op,ao Titles and Hea.d~rs. 3. De urn 'clique no ba tao Change. A tela Al3AF/4 Text Elem ents: Change Title And H eading 6 exibida. 0 campo Title conrem 0 texto do titulo que voce digit ou na tela ABAP/4: Program xxxxx A n ributes. Se a campo List Header estiver em branco, 0 campo Ti tle e exibido na p u te superior cia lisra. a campo List Header permite anular 0 campo Title e especificar um cabecalho diferente do titulo do relat6rio . Insira urn cabecalhc de !ista ai e, na pane inferior da tela nos campos Co lumn Header, insira as cabe~alhos de coluna. De urn clique nos botoes na parte inferio r direita da tela para rolar para a esquerda e para a direita. ate urn maximo de 255 caracteres.
Para reviser, na tela AJJAP/4 Text Elements: Change Title An d Heading, se 0 campo List Header nio esciver em branco , ele esd, sendo uti.1izado como o cabecalho. Se estiver em bracco, 0 campo Title eutilizado como cabecalho.
517
funciandria que foz a troduc;ca normalmente utilize a tronsa<;co SE63. Esta oferece urn conjunto de programos que permlteque tcdcs os testes no sistema seicm trcdvzidos. Por exemplo, as descnce es dos elementos de dodos, Indices, 1extosde seler;oa em progrcmos e os sim par dionfe podem ser trcduzidos cqui. Comec;ondo no tela ABAP/4 Development Workbench, 0 ccminho de menu e Utilities-> Translotlcn-c-Shcrt/Lcnq Texts.
0 qual voce quer tr aduzir seus elementos de rexto. a idioma escolhido anteriormente pre cise ter sido ins talad o em sell sistema peIo seu consultor de Basis. Deutsch (alemao) ~ instalado em cada sistema, porque e a linguag em Mestre para to dos os sistemas R/3. Portanto, escolha D (Delf.tsch).
nhado. 4. N os campo s que con tem urn caractere de sublinhado, digite a textc da sua tr aduljao para. 0 alemso. Se voce nao souber a idioms, simples mente substirua to dos as.Ietras C par K e utilize diversas frases que terminem com Strudel ou que contenham a nome Wolfgang.
ABAP/4 Text Elements: Change Title and Heading. 6. Agora efetue logon novamente, mas dessa vez digite 0 no campo Language na tela de logon.
7. Execute seu programa. as tftulos traduzidos aparecerao. Se exibir os arriburos de programa, voce vera 0 titulo traduzido na tela ABAP/4: Program attribute xxxxx. Todas as tra ducoes sao armazenadas em urn pool de propostas, do qual voce p ode recupe rar traduqoes an teriores de uma palavra ou frase . Se voce inserir uma tradu<.iao que difere das armazenadas no pool, 0 sistema automaticarnente lhe oferecera as tradufioes anteriores. Voce entaa deve salvar a nova au selecionar uma anterior.
I , i, i ,.
1 report ztx1506. Z tables ztxlfal. 3 parameters: p)andl like ztxlfal-lanal default ' U 1 S 4 sy-tvarO sy-uname . 5 write: sy-datum to sy-tvarl. 6 sy-uzeit to sy-t varZ. 7 sy-tvar3 pJandl. a select * from ztxlfal where 1andl p_landl. 9 write: I ztxlfa.ll1fnr. ztxlfal-namel.
10 endselect ,
519
"
ztxJ506.
Na Figura 15.7, &0 . . . . .. .. indica o nde 0 valo r de sy-tvarO apare.cera. Os pontos aumentam 0 comprimento cia safda da variavel de 2 para 12. &1 indica onde 0 valor-de sy-tvarl aparecera, &2 indica onde 0 valor de sy-tvar2 aparecera e & 0 valor de sy-tvar-S . 3. Os pontos .aument am os comprimentos de safda para 10, 8 e 3, respecrivamente.
i l
,
I
Criando cabe~a l h os de pagina manuais Cabecalhcs de pfgina padrgo sse faceis de criar, mas tambem tem algumas limita~oes. Eles sao limitados a um a linh a para 0 cabecalhc de pfgina e a quatro linhas para os cabecalh os de coluna. Urn m aximo de 10 variaveis pode ser utilizado, ada com urn comprimeoto minima de dois caracteres. 0 cabecalho 6 sempre alinhado a esque rda e as co res sio padrao e eac po dem ser alteradss. Tteulos manuais, entretanto, nao tern essas limita~5es.
Pa.ra ~.titulos manuais,voce precise
Desativar cabecalhcs de pagina padrio.
I
i
Utilizar 0 -eveaeo top-af-page para criar ueulc s personalizados. Para desa:tivar as atulos padrio de pdgiaa, voce adic ion a no standa rd page headi ng ao fim cia instnl~ao de relat6rio.
NOVO ltrr...
Country C ode: US
M her baarns Inc. ot Si li con Sandwich ltd. ConSlIlle Inc. Moni tors and More ltd . Quanti t y First Ltd . O verPriced Goods Inc.
Fl uf f)' Bunni es Lt d. Moo l 1ke a Cow Inc. .
I
I
t
lUIO
Um evento no ABAP/4 ~ como uma sub-retina em o utros linguogens. Trctc-se de umc seo independente do c6d igo; elo executa umo torefa e entO retorno o para 0 ponto de chcrnedc. Entretonto, 0 0 ccnt rcrlc dos svb-rctincs, voce nco codifico a chomodo pora um eveotc. Em vez disso, 0 sistema adono 0 evento po re vocA quondo umo condi;ao espedfi co surge.
o evento t op-of - peqe e acion ado quan do a primeira ins truliao write 6
executada. Antes de quaisquer valcres serem escriros na Iista, a sistema ramifica pan 0 c6d.igo qu e se segue a to p-af-page e executa. Entao ele retorn a para a
instro~o wri t e e escreve os valo res. A Listagem. 15.7 e a Fi gura 15.8 ilustram
V4 VS
V7
I
i !
esse processo.
A instru~ao writ e C Ol linha 5 move 0 valor de sy-dat ue para sy-t vert . Urn a instru~ao comurn de auibuic;ao (u tilizan do = ) teria movido 0
valor sem form aci-Io. Utilizar write faz com que 0 campo seja fo rmatado co m separadores de acordo com 0 perfil do usuaric. A linha 6 fermata a data/hera atual e mov e pan sy- tvar2. A linb a 7 atribui
0
, top-of.page.
7
8
wnte :
u11ne .
"j. c.....
r7ti:
,.0.
.A -
---:.~
520
521
SAiD.l~
ANiusE ~
!
! i
Os relat6rios em late normalmente sao impresses e assim terj o urn tamanho de pagina definido que nfo se altera depois que 0 relat6rio ~ criado, dessa forma. ecrac des po dem ter rodapes de pagina. Para. eriar os rodapes de pdgina voce precisa:
1i ne-count na
instru~o
rep ort.
A linha 3 atribui 0 valor T1 t 1e ' para fl. A instru~:io write na linha 4 aciona 0 evento top- cf-peae na linha 6.
As linhas 7 e 8 enti a SiD executadas, fazendo com que My Tit l e seja escrito na primeira linha da lists, seguido por urn sub linha do (escrito pela ins trulii o 1I1i ne n.a Iinha 8) . 0 processamento entia reto rna para a instrur;io w t te na linha 4 e H ~ escrito para a linha 3 da lista de safda. r i D epcis que linha -4 foi executada, moscrada.
Figura 15 8 0
Do evemo end-of-page. Para reservar espa~o paraseu rodape, voce pode codific ar 1i ne-c cunt n (m) na instru~ao rep ort. onde n ea mimerc de linhas par pagina e me 0 namerc de linhas reservadas para 0 rodape, Voce nio vai querer codificar muito n. porque o usufric deve ser capaz de especificar 0 numero de linhas po r pagina quando imprimir 0 relat6rio. Portanto simplesmence ignore-o e digit e report zxx l ine- count (m) . . D urante 0 processamento de relatorio, sy-pagna coneem 0 mimero arual de pfgina e sy-l i nna contem 0 admerc atual da linha qu e esta sendo escrita. Codifique end-of-page na part e inferior do seu program a, como mostrado na Lista gem 12.8. As instrucdes qu e se 5eguem a end-of- page sio executadas ant es de cada nova pagina ser iniciada. Uma nova pagm a e abena quando uma instru~:io write e executada e se a saIda nao se ajustar na pagina atual Par exemplo, voce pe de ter codificado report zxx line-count (3) deixando Ires linhas_ para 0 rodape e 0 u sudric pode ter especifieado 60 linhas por pagin a, A Orea de rodape pcrtanto fiea dentro das linhas 58 a 60. Se voce acabou de escreve r a S;t! linha, a p r6xima instruliio w i te para uma nova linha r acionaci 0 evecec end-of- page) seguido par uma quebra de p agina, a eveneo top-of-p age e entjic escrevers a saida da pr6xima pagina.
Tec:nicamente os eventc s podem opo recer em quolquer ordem ou pOsic;oodentro do sec progroma . Porenquo nto, codifiqu~osconforme mostrcdo. Um capitulo scbseqcente explicorO mois sabre como ccdlncar eventcs .
Note que 0 valor de f1 escrito na pane supe rior cia psgioa e 0 valor no memento em que a primei ra inStfUljaO writ e foi dada, nio 0 valor n o come~o
do program..
3
4
enddo. 5 6 t op-af-p age. write : / ' CON FIOOOIAL' , 7 / ' Thi s page begins w t h number' . sy-1ndex. i 8 9 uli ne.
10
523
11 end-ef- paae.
12
write:
13 14
15
I I I
e execu-
5Y-II1 tne, 'The nl.ll1ber of kicks at the t op of the next page will be ",
tada, e as linhas 7 a 9 escrevem 0 ttrulc da pagina na parte superior da proxima pagina. Entao ela retoma 0 controle para a linha 3 e a instrul$ao wr; te escrevea quarta linha na pagina 2 .
Nenhum rodape de pigina eescritc na par te inferior da ultima pagina.
A primeira. pane da safda para a Listagem 15.8 apar ece como segue:
Utiliza ndo a
instru~cio
reserve
agrup ada informacoes re-
SliDA ~
CONFIOEKTIAl
This page begi ns with nunber
~- - -- - - - - - - - - - - - - - - _ . - . _ - -- -_
P1 ease k1ck me Pl ease [(1 ck me Pl ease k1 ck me P1 ease ki ck me Ple ase kick me P1 ease k1 ck me Ple ase kick me Pl ease k1ck me Pleas e kfek me P1 ease k1 ck me P1ease k1 ck me P1ease k1ck me P u se k1 ck m 1 e P1ease k1ck me
1 times
Iacionadas que se distribuempor vdrias linhas.Par exemplo, vocepede escrever o mimero e 0 nome de fabricante em uma linha., seguidos pelo endereco na
proxima linba, e as ndmeros de telefone na linha seguinte. F aria sentido manter
2 3 4 5 6
8 9 10 11
essas linhas juntas como urn grupo na saida,e impedir qu e elas sejam.divididas em duas paginas. U tilize a instrucfo reserve para manterum gropo de linhas juntas na lista de saida.
t imes
---_..-----_
--_
14 ' t imes
--- --.------------_
_-.----15
The nlll'b of kicks at the top of the next page w1 11 be er Copyri ght ~998 by t he ALA (Abus e Lovers Of hnerica) CONFJO ENTIAl This page begi ns with number 15 Please Ple ase Pl ease Please kick me k.ick me ki ck me kick me
S
m
CII
onde :
15 times
16 t imes 17 times 18 tfmes
Quando a. instrucfo reserve e executada, 0 sistema verifica se ha n linhas disponfveis na pfgina atual. Se houver menos qu e n linhas sobrando na pdgina atual, uma quebra de pagina e gerada. Isso aciona 0 eventc end-of-page (se
existir), seguido pelo evenec top -of-page (se existi r) .. A instruCja6 wr; te
INllIIE~
A linha 1 suprime a u sa de cabecalhcs de pdginapadrso porque n6s s6 queremos que os cabecalhos manuais de pdgina sejam mostrados. Elatambem configura 0 mimero de linhas na area de rodape como 3. o mimerc de linhas por pagina 6 configurado como 20 para que possamos rester 0 rodape de pagina para exibicsc online. Normalmente urn relaeorio online nao especifica 0 mimero de linhas por pagina. Na prirneirapassagem peloloop, alinha2 acicna 0 evento top-of-pace na linha 6, fazendo com que as linhas 7 a 9 escrevam duas linhas de cabecalhoseguidas por urnsublinhado. 0 contrcle retcrna paraalinha 3 e a instruc;:ao wr; te escreve a quarta linha na lista de saIda. Depois de fazer 0 loop 14 vezes, a 15L instruc;:aa write aciona a instruc;:ao end-cf-paqe na linha 11. As linhas 12 a 15 sao executadas,
seguinte comeca na pme superior cia nova pigina. Se pelo menos n linhas estiverem disponfveis qu an do a instruCjao reserve for executada, a c6digo 113.0 faz na da. A Listagem 15.9 mostra urnprograma de exemplc que util iza a instru~a.o
r eserve.
"i :
~%.~~-
524
525
Resumo
Voce pode criar said: gdfica simples na lisa utilizando as a.di~6es as symbol, as i con e as line na instnlc;:ao write. Quando utilizar estas
12 top-at-page. 13 wri te I Vendor Report '. 14 ul 1ne. 15 16 end-af-page. 17 uf tne, 18 write: I 'Report'. sy-rep1d. ' Created by '. sy-uname .
I
adic;:oes. voce deve utiliza.r a instruc;ao include pa.r.a trazer defini~oes de sfmbolo,{conee caractere de desenho de 1inha. para seu programa, Utilize aadiliao 1i ne-s1 ze na instrucio report para configurar a largura da lista de saIda.. Utilize a adi~o 1i ne-count para configurar a mimero de linhaspor pfginana lisra de safda, Voce tambem pode utilizl.-Iapara especificar 0 niimero de linhas reservadas para a rodape, Voce mo pede utilizar variaveis na iostnl~o report, entdo utilize a instruc;ao new-page para essas adic;:6es se quiser configurar esses atributos em tempo de execucgo.
o
siiDI ~
Vendor R eport
1000 Par t s Unlimited
111 Queen St .
416-255-1212
O' "
Para. mar cabecalhos de pfgina,vocepode utilizar tanto urncabecalho de pa.gina padrac como a instrUc;ao top-af-page. .
Ate 10 variiveis podem ser utilizadas em cabecalhos de pigina padrgo. Os valores atribufdos is variweis sy-tvarO a sy- t var 9 substituem &0 por &9 na lista. Utilize pontos para estender 0 cc mprime nto cia safcia
ON CA
1020
Para suprimir a safdado cabecalhc padrao de pagina, utilize a adi,iio no standard page headi ng na msrruc;:ao report. Se voce inc1uir 0 evento top-af-page em seu programa, ele sen acionado quando 0 primeira instruc;aa wri t e for executada, As instrulioes seguintes sio executadas, e enta~ a controle retorna para a mstrU/iao w teo ri Utilize
0 eventc end-of- page para criar rodapes. Voce tambem deve utilizar 1i ne-ceuet na instrU~o report ou new-page para especificar 0 admero de linhas e reservar espac;:o na pagina para 0 rodape.
Created by KEHGREENWOOO
AB"
393-565-2340
1040 Motherboards Inc .
MA US
64 BitBus Blvd.
617535-0198
lista.
P&R
'lit... A linho 5 determine SI!: he espcco .po re mots fres li~hos no ~9ina otu~1. Se AMAUSf hewer, 0 c6digo noo feznadoe a linho 6 escreve as Informo i70es defobnconte nas proximos linhos. Se nao hoover, 0 c6digo ad ona 0 eventc end-of-pace O inhas 15 o 17) e entoc envic umo quebro de pagino. Ele, entcc, odona 0 eventc topof-page (Iinhos 11 c 13). Depots, 0 instruc;oo write no linho 6 e executcido e os linhos 560 escritos no parte superior do novo pogino.
o o
Qual e 0 metode preferido para erial' titulo, de clientes utilizar vmaveis sy-tvar au 0 evento toP.-of-plge?
Como a evento top-of-page
gramadores prefere utilizar esse metoda. Desde que voce utilize simbolos de texto para seus Iirerais de texto , ambos podem ser mduzidos enti.o Ilia hi qualquer vantagem para variaveis sy-tvar.
526
Workshop
Workshop cferece duas maneiras de voce verificar 0 que aprendeu neste capitul o. A sCliao Tes te ofere ce pergunt.s pan ajudar a solidificar sell emendi-
menta do coareudc abordado e a seljao Exerdcio permire que voce pratique 0 que apren deu. Voce pe de enccntrar as respostas as perguntas do Teste e aos exerdcios no Apendice B, "Respastas is perguntas e aos exerclcios".
Teste
1. Quais sao as treS adi<;oes gr.Hicas que sao utilizadas com a instru clo write? Qual instruc;:ao nm bem deve secieclufda a fim de escrever as adic;6es graficas? Dc um exemplo de uma instruc;:ao include. 2. Qu ais sao as duas adic;:6es que sao ueilizadas com a instruc;ao report pan ccc trclar 0 tama.nho da pigina de saida? A variivel urilizadapara as duas adif:loes pede ser vanavel?
16
T ecnicas de formatasao,Parte 2
Objetjvo s do capitu lo
AItlUS ~ Depois de conduirestecapitulo, voce sere copaz de E
Exercfcio 1
Escreva urn programa qu e exiba as seguintes simbolos: quadrado, losango , cfrcu lo, ~culos, lapis, telefon e, nota e pasta.
ski p
back
positi on set blank Tines
http;/I_ .campl,Is.com.br
-- 528
APlEHDA EM 21 DIAl ABAP/4
D~ 16,OOICAS DE fORMATA(Ao. P ARTE 2
529
Utiliza nd o a
i n stru~a o new-J j ne
1020
Utilize a instru<;ao new-l i ne para [azer com que a safda cia proxima inStru~o write cornea: em uma no va linha. Diferentemente de sktp au wr ite l. instru~6es consecutivas new..1ine nao fazem com que urna linha em branc o apareca na Iista de saida.
1000 1994 A 1000 1995 A 1000 1996 A Chenical Nati on Ltd . 1000 1995 A 1000 1996 A
O.DO
0 .00
1030 1040
Sintaxe pa ra a
'!!!
instru~a o
new- J i ne
...
m
S
A adic;ao no-sc rol l i n9 blo queia a proxima linha naquele lugar. A rolagem horiz?oi2.l DaO tem nenhum efeitc nas linhas que Ioram bloqueadas des sa manetra, A Listagem 16.1 ilustra 0 usa cia instrucao new-Iine.
Lis'C1gem 16.1 A instruo new-line
report :tx1601 Hn e- s1ze 255.
D.DO
AIliuSE'" AS linhos 7 e 8 cpresentom defclhes de fcbricontes e seo mais largos que a tela.
, . Rclcr pare c direitc permite a voce ver a porte direitc des linhas, mas 0 nome e 0 numero de fobriccnte peerrcnecem dentro do visualizco . Is.so acontece porcue a instrulo writ e no llnhc 5 e precedido perc instrut;co new1 ine no-scrol l i ng no linho 4.
Utilizondo a
instru~Qo new-page
Utilize a instnujio new-page para C aus ar a sU'da cia seguinte instrU'iiO write para comec;ar em uma nova. pigina. Instruc;o es new-page consecutivas nao geram em paginas de branco.
EH11101~
1
2 tables: ztxlfal . ztxlfc3 . 3 select 'It fran ztxlf4l. 4 nev-l tne na-scroll ing. writ! : ztxlfal..l1fnr, ztxlfal -namel. -t h1s l i ne won't scroll right 5 6 select'" f rom zt xl fc3 where lifnr ztx1fal-l1fnr. 7 write : / 14 ztxlfc3-bukrs. ztxlfe3-gjahr . zt xlfc3.s hbkz, 8 40 ztxlfc3.saldv, ztx lfc3-so 1n . ztxlfc3.h abnl .
Aciva.r e.desativar tirulos e cabecslbcs. Variac a contagem de linha au tamanhc de linha de uma pf gina para a
seguiate.
Ativar e desarivar a impressio.
9
10
endsel ect ,
t ndstl ect.
Parts UnHllibd
1000 1990 A 1000 1991 A 1000 1992 A 1000 1993 A 1000 1994 A 1000 1995 A 1000 1995 Z 1000 1996 A
1000 1996 Z 1000 1998 Z 3000 1998 A Indust ri al PI.IftPS Inc. 1,000 .00 0.00 1.000.00 0.00 0 .00 1,000 .00 0 .00 1,000.00 5.000.00 4.00 0 .00 0.00
500.00
5 .000 .00 11.000.00 10 ,000 .00 1. 000 . 00 1. 150.00 9,000 .0 0 ' 50.00 0.00 0. 00 0 .00 10,000 .00
...
m
III
Sintcxe para a
inslru~Cio
new-p age
[pri nt on :
ande:
[line- s iz e k] pr i nt
off]
1010
531
no-t itle desativa 0 titulo padrsc nas p:iginas seguintes. (0 titulo e a primeira linha dos cabecalbcs padrac de p:igina.) with:"title ativa-a. nc-he adt n9' desativa os cabecalhos-padrjo de ccluna para. as p:iginas seguintes. wi t h-headi ng os ativa.. 1ine-count configura 0 mimerc de Iiahas por pdgina e 0 mimero de linhas reservadc na parte inferior de cada p:igina para urn rodape. Qu alquer urn desses valores, ou as dais, podem ser especificados. Issa foi abardado antericrmente oeste capitulo.
1t ne-stz e configura. 0 nd mero de colunas de saida para as paginas seguintes. O.padrao ea largura atual de janela,
pri nt-on faz com que a saida da.s instrU'Soes write seguintes sejam. enviadas para 0 spool, em vez da lists. Os usuaries mo veem essasafda a menos que olhem no spool. (Visualiza'Sao e impressfo cia sarda de spool que foi abordadamaiscedo oeste capf rnlo.} print-otf fax 0 eontriri o.
Instrucces new-page consecutivas nao geram piginas em braneo. new- paqe nao aciona 0 evento end-ct-pace. Portanro, urn rodape nao sera impresso na parte inferior da pagina atual se voce emitir a instru ~ao new-page.
til
Se V'Cld quiser fazer uma quebrc de p6ginc e adonar 0 evemc end-ofpage, c:odifique linhas sy-lind reseoes. sy-I i net ceotem 0 numero atuol
de linhos per p6gino. A scldc do pr6:.cime write cporecero no porte superiorde uma novo p6ginc e 0 eventoend-cf-peqe sere odonodo de cntemec, fozendo com que urn rodope de p6gino sejo c:riodo.
Sintaxe para a
instru~ao
new-page print on
new- page print on [no dialog] [new section] (1nned1atelr (destination [copies [la yout [1ht name [sap cover page [cover text (departlll!nt [receiver [keep i n spool [dataset expi ration [11ne-ccunt
[l1ne- siz e
nJ.IllCo ltmu]
onde: Quaisquer names em itllico no c6digo de pro cedimenro podem ser urn literal ou uma variavel.
O s seguintes pontes se aplicam: Utilize no di alog para suprimira exibi~io da tela Print Parameters que soliciea ao usudrio parametres de impressao. O s padroes do usuario Sao utilizados em vez disso. Se 0 usuario nao civer preenchido urn ID
APREMD A EM 21 DIASABAPI4
533
de impressora.em seus padrc es, a tela Print Parameters sed mosrrada mesmo qu ando voce esp ecifi car no di alog . Utilize new se cti on para reiniciar a numeracio de pf gin a, co meqando novamente em 1. Utiliz.e hrm ediate ly ' x' para fazer com que a liSta seja Impressa imediatam ente. 0 padrio e 1mned1ately , ', que armazena a Iisra no
chave de ABAP/4.
spool.
. Utilize dest1 nati on para especificar um ID de impressora. Utilize copies para especificar a mimero de copias a imprimir. U tilize 1ayout para especificar um layout de im presson . 0 layout de impressora determineas caracterfsricas de impressora como a mimerc de linh as per pagina e 0 mimer o de co lunas p or linha. Vace pe de ver . as layouts de impresson definidos para s~ instalacao, imprimindo urn arquivo e olhan do no ca mpo Format na t ela Prin t List Output. Utilize 1i st name para especificar urn nome para a lista enquanto no sp ooL Voce pede utilizar isso para procuri.-Io mais tarde DO spool. (Digite esse valor no terceir c cam po ao lado de Spool Request Name
Qua ndo envlc a scfdc diretomente para 0 spool lJfilizando new-page pri nt on, voce tombem pede utilizer duos instrues odicionois. A instrvt;oo set margins permite que voce controle a s morgens durante .a impresseo. A instru o print-control possibilito 0 envio de c6digos de controle de impressdc diretomen pora a impressora. Utilizando te print -cont rol, voce pode controlor qvclsquer caroderisticas do impressora, como CPI (carodere par polegoda), l PI [linhos por polegada) ou fonte. Essos instn.u;5es n50 tem nenhum efeito em listos impressos via a batao Print ou via a apo de menu List Printj elcs s6 ofetom Ilstcs impressosvia new-page pr1nt on. Eles nao inte~m no moneira como a listo Ii exibido no tela. Veja 0 dacumenta o de pclc vrc-chcve de ABAP/4 pa ra mois detclhes .
U tilize sap cover page para. controlar a impressao de uma pagina de capa com a salda, Uro valor em braa cc suprim e a pigina de capa, enquaoto I x' faz com que uma delas seja impressa e '0 1 indica que as co nfigur.u;6 es de impresso ra devem determinar se um a pa-gina de capa sera ou nao impressa. Utilize cover text para especificar a titulo a ser imp res so na pagina
de capa.
U tilize department para especificar uro ID de depanamento a ser impressa na pagin. de capa.. Utilize recet ver para especificar 0 nome da pessoa que deve receber o relat 6rio. E~e ~ im pressa na pdgina de capa. U tiliz e keep i n spool IX' para fazer com que a solicital;3.0 de spool perm aneca n o pr6 prio spool depcis que 0 relat6rio fo i impresso. IS50 p ermite ao ususri o reimprimir a lista sem executa r novamente a rela.t 6rio. U tilize data set expi ra t i on para especifica.r quantos dias a sclicitscac de spo ol deve pe rm anecer no spool. Quando a solicita~o expirar, ela
i.o uhct from zulfd . 11 wr ite: I ztx1f1.l 11fnr. 12 Mdse1ect . 13 14 newllage pr int off . 15 wri te: I sy- dbcnt , 'li nes sent t o printer'.
A linha 3 solicit a ao usuario urn ID de impresscra. 0 campo estwospooldest tern urn relacionamento de chave estrangeira com a eabela que contem os IDs de impressora, endc uma seta p ara baixo e exi bida no campo de en trada. 1550 permire ao usuano exibir uma lista dos IDs de impressora disponiveis.
534
535
A linha 5 redireciona a safda para as ins truco es w te subseqUentes. no ri dialog suprime a. exibiljao cia tela P rint Param eters. Em vez disso 0 5 parimetros sao torn ados do perfil de usuario e des parimetros espeeificados nas linhas 6 a 8. tnmedt at ef y ' X' faz com que a safda seja
Sem quaisque r a.di'io es, s ki p geea umalinha em branco. Slci pn gera n linhas em branco . Se n for men or que 1, n enhuma linh a em branco sera geuda. ski p no fim da pdgina atual causari uma quebra de p~ ski p gerari .l.i.nhas em branco depois de qualquer instruliio wr i te, na parte sup erior da prim eira
impressa imediatamente. A linha 8 passa 0 ill de impressora inserido pelo ususric na tela de sele~o. A safda das linhas 10 a 12 eenviada diretamente para a impressora. Ela
naa
A linha 14 remove a indire/iao EF, e a sa1d~ das instrucoes writ e subseqiient es aparece M Iista.
pagina e na parte superior de qualquer pfgina comecada pela instru~ao newpage. Ela nio gerardlinh.as em branco no cornelia de qualquer au tra nova pagina, nem no fim da Ultimapagina da lisra, Por exemplo, se houver espaliopara mais duaslinhas naparteinferior d.a pagicaarual, ski P 5 gerariduas linhas em branco o.a parte inferior da pdgina atual, mas nenhuma na pane superior da pr6xima pfgina, Isso acontece porque a n<;JV3. pfgina nid era a primeira e nao foi gerada por uma instruliao new-page.
Se voe! quiser um rcdcpe no ultime p6g ino de seu relot6rio, codifique ski p sy- 11 net como a ultimo instruljoo em se u progrcma. Esso instn.n;lio escrevere rcdcpes. Se voce qclser ccloncr umo novo p6gino e fer um rodope no parte inferior do p6g ino cruel, co difique skip sy-I i net em vel de new page.
ski P to 11ne n faz com que a posicac atu al de saida seja configurada no ccmeco de 1in.ha n d.a paginaatual A safda da seguinre instruc;rao wri te comecara nessa posic;rao. Por exemplo , skip to 1i ne 3 faz com que a saida da instrUc;rio write seguinte comece na coluna 1 dalin ha 3. Uma instnlc;rao skip to lin e que coatenha um mimero de Iinha maior qu.c 0 mimero areal de liohas pa r pagina
sera ignorada.
Utilizando
insfrw.Co ski p
Gere linhas em branco. Movaa posis:io arual de said. para eima ou para baixo dent ro da pagina atual de saida.
III
report ztx1603 . tabl es ztxl fal . datil n t ype 1. setect " frDlll ztxlfal order by land1. on change of ztxlfal- landl. 6 if sydbcnt > 1. 7 n sy-l 1nno ~ l. S skip t o f tne n, 9 write 35 ' ' ' l ast V endor W This C ith ountry Code ."' . 10 end1f. write / z t x l fa l ~1a n d l. 11 12 enden. 13 wri t e: / 4 ztxlfal-l1fnr. ztxl fal-namel. 14 endselett.
536
SiD ~ AA
CA
1000 Parts unl tntted 1010 I ndust ri al P\II1PS Inc . Chemi cal Hatio n ltd. 1020 1030 ChickenFeed ltd. 1050 Th Bit Bu e cket 1060 Hene La L d. ry ne t 1070 Fl i p M1 Switch I nc. . ... Last Vendor W Thts ith -Count ry Code C V C 9 Code N ow, Specs Lat er- l td. no Duncan 's Mouse Inc Last V endor With This -.country Code ....." DE Vfi Anna Banana Ltd. Vll Wie ner Schnitzl!l I nc. V12 Sauer kraut A G Last vender- W th Thi s i -Count ry C ode ..US va Smile When Y Say ~ha t ltd . ou Motherboards Inc . 1040 l OBO Si ltcon Sandwi ch ltd. 1090 C onsume Ltd . 2000 JlIon1t ors and Mor e Lt d. Vl Quality First Ltd. V2 cverprtced Goods Inc . V 3 Fl uffy Bunnies Ltd. V4 /11.00 11lce a Cow Inc. V5 Wol fman Sport Accesso r ie s Inc. V 7 The Breakfas t Clu b In c.
A primeira saida de linha depcis de uma instru~ao rese rve fei emirids.
UI
Sintaxe para a
back. onde:
i nstru~a o
back
T-- - - - - - - - - - --
back: emirida de dentro do evemo t op-of-page retorna aprimeiralinha escrita dentrc de t cp-cf-p ece.
Explicando ainda mais, sevoce especificou no standard page headi ng na instruc;:i o report , ela retoma para a primeira li.nha. dapdgina. Se voce tiver urn tltulo-padrio de pfgina, a po,ic;io de safda e configurada como a linha da primeira l.inh.a que segue 0 csbecalhc-padrac. Urn programa de exemplo e mostrado na Listagem 16.4.
ANILlS!~
linha 5 eacionadaroda vez que 0 valor de 1and! for mudado. Na linha6, sy...dbcnt e 0 cantader de passagemde loop atual. Quando
A
o primeiro registro escl. sendo processado, d e t ern urn valor de uma unidade,e entia 0 c6digodentro de i f IUO eexeeuradc pa ra 0 primeiro registro, mas para cada registro sucessivo.
Pa ra registros sucessivos, m linha 7 5y1 i nno contem 0 mimerc da linh a de lista are al. Istc e, ele e 0 mimero de linha. que a pr6xima instrUljio write escreverd. Uma unid ade e subuafda dele e isso e
atribuido a n. A linha 8 move a posic;:ao de safdapara 0 comeco de linha n, que e a Iinha previamenre escrita, A llnha 9 escreve nessa linha, colocando flagno Ultimo fabricanee de cada grupo.
instru~ijo
12 top-of-page. l3 write : I 'This was lily t itle' . 14 ul tne. 15 back. 16 write 6 '15 17 skip.
SAiDA ~
Utilizando a
back
Utilize backpara rerornar a posic;:ao areal de safda para: A primeira Iinba da pagina atual (a primeira linba depois de t op-ofpage foi processada).
I 2 3 4
10 20
30 40
IHillIE ~
A primeira execucgc da linha 4 aciona a linha 12 (0 even to top- ofpage). A linha 13 escreve um titulo e a linb a 14 a sublinha. A linha 15 configura a posi~io atual de safdapara a primeira linha na lista de safda, A linha 16 sobrescreve 'was I com li s I.
A linha 17 move a posi~io de saida areal para. baixo de uma linha. A segunda linha da lista de safda esd. agora na linha de saida areal.
enddo.
10 11 skip .
12 do 4 ttees .
13
14
do 4
ttees ,
15 16 17
18
0 centrale retorna a1inha 4. Ela emite urn novo caracrere de linha e a primeiro valordesse loop ~ a safda para a terceira linha de safda, Os valores restantes sao a saieianas l.i.nhas suc essivas. A linha 6retorna a pcsicao de saIdaatualpara que ela fosse a primeira " escrever depois do processamento t op-af - page (linh a de [ist a de 1 saida 2). 0 loop na linhas 7 a 10 sobrescreve a lista de saIda comecandc na linha 3. Esse dados sio escritos a direita dos dados existentes, comecando na coluna 10.
lHilIsE ~
A linha 3 comeca um loop do. A linha 4 comeca urn loop minhado do.A linha 5 sempre configura a posil;iia de saida arual igual aiteratjio atual de loop. Entia, em primeiro lugar, a posi~ao arual de saida e configurada como 1. Depois, e configurada como 2 e assim pa r dante. Isso faz com que a linha 6 escreva a leera A quatro vezes, nas colunas 1 a 4. A linha 8 move a posi~o de saIda para baixo em urna linha. Isso resulta na safda sendo escrita nas linhas suc essivas, comecando na linha seguinte nos cabecalhos-padrac . A linha 11 d. saida em uma linha em branco. As linhas 12 a 18 si o as mesmas que as linhas 3 a 9. excet o que, em vez de new-I i ne, ski p eutilizada na linha 17. Isso tern o efeitc deinserir linhas em branca entre as linhas sucessivas de safda.
Z
III
Sintaxe para a
position r1.
instru~ao positi on
...
m
onde:
vI ~ uma varifvel numerics au lite ral.
EH1RADI~
,
7 8
Utilizer e instrw;co positi on seguido imediotomente per umo write at (obordodo no capitulo anterior).
eeeee.
new- li ne.
540
541
Utilizo ndo
Nc rmalmente, se seu programa emit e uma instro~ao w i te qu e resul ts na safda r de um a linha em branco, essa linha sera suprimida.. P or exemplo, quand o escrever uma variivel que eontenh a espaccs em branco, voce nao veri uma linha em branco nil. lista. U tilize a ins tru liao set blan k:: li nes para alterar esse
,
\
comp crtamento.
Z ~
CIl
I
I
SaO
A linha '2 define tres varidveis. Todas tern 1 como comprimento de caractere e um valor inicial padrio de espacos em braneo.
Por padr ac, linhas em braneo que resultariam da tentativa de escr ever espacos em bran eo sao suprimi das. Port anto, a linha 4 nao fn com que quaisquer linhas em braneo sejam escritas.
suprimidas.
As linhas em branco geradas por write I sem uma variavel nao sao suprimidas. Por exem plo, wri t e [, sempre genra. uma linhll em brancc.W rite / ., ' .56 gerarauma linh aem branco se set blan k 1i nes on river sido executada de antemdo.
I
!
A instru~io ski p sempre escreve linhas em brancc e dessa forma., a linha 6 gen uma 1inha em branco. A linha 8 permite que a. in stru ~ao write escreva linhas inteiramente em brane o na lista. A linha 10 escreve treS linhas em branco. A linha ffconfigura li.nhas em braneo novamente. A linha 14 gera uma linh. em branco. A linha 16 nao gera linhas em bran co.
fJ .
Resum o
Utilize new..line para cornecar uma nov a linha au blo quear urna linha especjfica no Iugar. Ela pede prevenir ro lagem horizontal de qualquer
linhaindividual.
Utilize newpage para gene uma quebra de pagina, acme au desarivar d tu los e cabecalho s, alterar a contagem de linha ou tamanho de linha entre paginas ou enviar saida para 0 spool.
set blank l i nes on. s wr i t e : I ' Text 3' . 10 write : I fl . I f 2. I f3. 11 w r-tte : I 'Text 4 ' . 12 13 set b1.llnk. l i nes off .
14 skip.
I I I
f3 .
Utilize ski p para gerar linhas em bnnco nil. safda.. skip t o 1ine configura a posil$io de saida para uma linha espe cffica. Utilize back:: para retomar pan a parte supe rior d e urna pagina au para o corneco de urn gropo de linhas. Utilize pos i ti on para especificar a proxima ccluna de saida. Utilize set bla nk lines para permitir que linhas em branco sejam criadas escrevendc varhveis q~e contenham esp aco s em branc c.
o e6digo na Listagem
542
IL...-:...Fa~a
- - - - ' _
Nao codflque excessiyomente um
Nao erie relot6rios mois lorgos que 132 coroderes no coso de 0 usu6 rio querer
imprimi-Io . A moloria dos impressoro s 000 pode imprimir p6g inas mcls largos que 1"32 ccrccteres.
report zty1607. data n type t , do 4 times. do 4 times . positi on sy-tncex. write 'A' . enddo. add 1 to n. s kip to line n.
enddo .
t op-of-page.
n sy-11nno.
P&R
Realmente, nao cntendo a difereuca entre skip e new-I ine . Elas mio UCID com que a pr6xima wri t e va para uma n ova linha?
sllol ~
o
Workshop
prop6sito de ski p ~ gene uma Iinha. em branco na. saida. new l1 ne faz com que apr6xima linhade safdasejaescrita parauma .. nova linha e Da O gcra linhas em branco.
Teste
1. Qual instruc;ao voce pode utilizar para sobrescrever a mesma linha?
2 . Quando voce devers preferir uriiizar ski p sy-l i net em vez de new-
Exercido 1
Explique a fluencia de ccntrole no seguinte programll. e como d e funciona.
I ;
i ,
17
Cochecer as tipos de unidades de- modularizacio disponiveis no
AJ3M/4
Entender as eventos de ABAP/ 4
Utilizar eventos initi a11 zation, start-of-selec ti one end-or - set ec ticn
" Definir sub-retinas enemas e internes ..
hltp;l!_
.cDmput ,COm,br
Even tos
/t
Sub-retinas
M6dulos de fun,ao Esre capfrulo explica eventos e sub-retinas. 0 proximo capftulo trata de
0 evectc initialization. Se de ccdigo seguirem essa primeira, eodas elss pertencerac infti ali zatten.
rom linhas
400
evemc
0
m6dulos de Unljaa. Utilize asunidades de modularizacao para eliminar 0 c6digo redpndante dentrc de seu prognma e para toma-lo mais facil de ler. Per exemplo, suponha que voce eenba uma sene de instrucdes que formatam urn endereco e precise farmatar enderecos em mas lugares diferentes em seu programa. Em vez de duplicar 0 c6digo dentrc de seu p rcgrama, euma boa ideia cclccar esse c6digo em uma unidade de modularizacao e chamd-lo sempre que voce precisar farmatar urn endereco. .
r
A linha -4 marca 0 fim do c6digo que pertence a in it ial iza t i on e ccmecc do eventc start-of-selection. A linha 6 pertence ao evento star-t-cf-sel ect icn.
A linha 8 marca 0 limite inferior do c6digo qu e penence ao evento start-of-selection e 0 limite superior do event o end- ct-se t ect tcn . A 1.inha 9 perte.nce ao evento end-of-selection.
limite inferior do c6digo que pertence a end-of- select i on esti marcado pelc fun do program.
Eventos
Ao contririo da prim eira impressao, as programas de Al3AP/4 sao baseados em eventos. Urn born entendimento sabre eles e a chave para. um bom eatendimento de ABAP/4.
. Quando voce executa esse programa, esses even tos sao acionados por urn prognma de driver. as seguintes pmgrafos explicam 05-detalhes desse conceitc.
IIDVO.... TIijO"
TWtO II"""
Um eveote ~ um tog que identifica umo seo de c6d igo. A seo de e6digo
ossociodo com um eventc comee;o com urn nome de eventc e tenn ino quando
1 a prOximo nome encontrcdo. No listegem - 7.1, as nomes de evento s60 1n1tialira t ten, start -of-s election e end-of-sel ection . names de eventc sao pclevrcs reservc dos. Voce nco pe de crie r novas eventos - somente pede utilizor a s edstentes.
as
Urn progroma de driver um progromo que contro lo outro progromo {driven, que que r dizl!!r controlodo}. ASAP, fcmece programos de driver co m a sistema de R/3. VocA fomece a progromo contr%do. Quando voc! inicia Sl!!U software, urn progrcmo de driver sempre tere sido inidado onteriormente e entcc otivarO as eventos em seu prograrno: Para reltercr, urn progromo de drivl!!r inicio rC primeiro e enmo contro lar6 quando se u progromo obtiver a co ntrole. Esse sempre foi 0 coso de todos as progromos que voce escreveu ote ogara; openos n50 esteve ciente disso ofe agora. Cerflflque-se de ler este porngrofo ccidcdcscrnente. Repetindo, quan do voc~ Inlclc seu software, um progromo de driver terO iniciodo primeira e contro lor6 seu progroma, chomondo eventcs dentro dele.
Seu p~rc mo Progrcmode driver -,:":;:. (PSe~d0c6djgol
~~ ...,
FigurA 17 1
lc:6cl.go otuaQ
report ztxl70 1.
1.
2.
~~4~;J~~;~~~1~r-fi~~-~C
~i.:.:~ ~h# r~.t"i
'~ -'ita rt:~o{ . se1~~i'{~n'~
write
' 2' .
3.
4.
\ :=.~~ ::
5.
i:,;~~:.~:e~~e,~~~,~':.:~~~': ;...
o
Sliol ~
1
Z
3
c6digo associado com urn evento acionado por uma instI1l<jio em urn programa de driver. Os eventos sao acionades pele programa de driver em urna sequencia predefmida e previslvel. A Figura 17.1 ilustra es~e ponto. . AFigun 17.1 tempseudoc6digo dentro do programade driver. 0 e6digo mostradC? DO programa i direita e 0 ~6digo real. Quando 0 programa ztxl701
O~ 17dIODIJWl1.lyio,eVEHlOSE SlJ8.R011JUS
549
.~ execueadc, 0 driver a esquerda ten iciciado primeiro. 0 prognma entia segue esta sequencia de passes :
1. fl 2. fl 3. f l .
1 Z 99
Aciona 0 eveaec i ni t ia li zat i on, fszeado com que 0 c6digo que pertence a i ni ti al i zation seja executado. Se voce nio river cod.i.fi~do urn evento in i t ia l i z ation em seu programs, 0 programa de dnver pulari esse passe .
Mostra a tela de sele~io para seu programa. (Uma tela de selcr;ao con eem as camp os de ent rada pua suas icscucoes de parimetro.) Se seu programs D aDtiver uma tela de sele'iao, ele pulara esse passe.
Aciona 0 event o s ter-t-o f -sel ect t cn, fa.zendo corn que 0 c6digo que p errence a esse event~ seja executado. Se voce aao tiver codificado urn evento sta rt-of- selecti on em seu program a, ele pulara esse passo.
I I
I i
0 c6digo associado com 1niti al 1zat ian eexecuudo (linhas 12 e 13). o valor de f1 e escrito e 1 e adicionado a ' ele. 0 con trcle entao
reromara para
progra ma de driver.
Aciona 0 evento end-of- sel ecti on em seu programa, executando todc . 0 c6digo que pe rt ence a ele. Se vo ce nao tiver codificado urn end-ofsel ect ten, d e pularf esse passo .
0 prcgrama de driver procurara uma tela de seler;ao. Como nao existe nenhuma para esse programa,ele ira procurar urn evento sta rt -of - selection. Ele a Iocalizari na linha 7 e entao ira ramificar para ztx1702 comecando na linha 8. As linhas 8 e 9 serac executadas e a contrcle enta~ retcrnara para 0 driver. .
usudrio.
0 programa de driver eneso procurar.i um evenec end-af - sel ect i on. Localizando-c na Iinha 4, ele transferiri 0 controle zo1702 comegandc na linha 5. Somenre a linha 5 pertencerd ao eveae c end- af-sele ct i on,
entaa ela sen. executada e 0 controle entia iIi reto rn ar para
0 driver entio exibiIi a lisa para. 0 usuaric.
diferente, mas a seCJ.iiencia de execu~ao naa sed alterada. A sequencia de execu~ao ~ sempre i nit ial izati an, start-of-sel ectton, end-of- sa l ect i on. Hi
0
A ardem de execucac dos eventos edererminadapelc programa de driver. nao por seu progranu.. Po rtanto, voce pede codificar os evenros em qualquer ordem. e a ordem de execucgo ainda sed a mesma, A ordem de eventos em seu pro grama ni o importa; des sempre serio acionados na mesm~ seqiiencia pela programs, de driver. A Listagem 17.2 ilustra esse ponto.
driver.
. Esse ezemplo ilustra que voce! pode colocar os evento s em uma ordem
ENTiADI,. driver
.... Listagem 17.2 "Eventos ccion odos no ordem ditodo pelo programa de
outros eventos tambem; alguns ocorrem depc is de in itialization e outros ocorrem entre start-of -selecti on e end-of-sel ect i on. Os programado res nc rmalmente pa sicionam eventos na ord em em que eles sao acionados para deixarem seus programas mais faceis de entender. Hi onze event os d.iferentes no ABAP/4-, caregorizados na Tabela 17.1 de acordo como eles sao acionados. . Tabera 17.1 Eventos de ABAP/4
Co1egoria
Driver
Event os
10
11 initialization. Ii! write : I '1. fl' . fl . 13 add 1 to fl .
Usu6rio
initiali zati on at selection-screen start -af -select ion get end-af-s election at line- selection at pfn at user-conmand top-af -page end-of-pag.e
.Ir
I
Esse acionamentc duplo nao causa normalmente nenhum problema com seu
de usuario sio acionados pelc .:usu ario atraves da interface com ele. Os evenros de programs sao as acionadcs de dentro de seu programa. Este capitulo detalhs a usa de i ni ti al i zat ton, start-cf -se1ect i on e end-af-selection. Note que alguns desses eveneos ocorrem entre stert-ct-selecttcn e end-a f-s election. No capitul o anterior, "Tecnicas de formatacao, Parte 2/' voce aprendeu sabre os eveetos top -at-page e bottom-af-page. As informafioes nesre capitulo tambem se aplicam a eles, mas esses sao aciceados par inStnlfiOeS dentro de seu prognma, e nao do driver.
Considerccoes espeCiois
00
Se urn programatem uma tela de selefiao e voce emite uma inStrufiao write em um eventc acionado antes de start-of-sel ectton, voce nao
vera a saida dele. Por exemplc, se river uma instrU~o parameters em seu programs, uma tela de selefiao sen criada para. seu programa permitir que a usudrio digite 0 valor de parl.metro. Set nesse programa, voce emitir urn wri t e em [ oi ti al i r et t on, nao veri a saida da instrulfao wri t eo Um' novo evento sempre come)il em uma nova linha na saida. Por exemplc, se voce emi te uma instruljaO write em start-af-selection, urn write em end- ot- se l ect i an come~ em uma nova linha.. Voce pode utilizar skip ta line se for necesssrio continuar escrevendo na mesma linha.
Padronizando start-of-Sf] f ct ; on
Se a primeira instrur;ao execurwel em seu programa nao for precedida par um nome de evento, em tempo de execur;ao 0 sistema. aut cm aticamente insere sta rt-af-selection antes cia primeiralinha de c6digo executavel, Pott ant o, se voce nao civer quaisquer eveatcs codificados, au se nao river colocadc c6digo na parte superior do programa sem atribuir name s a: urn evemc, sta rt -of - se lection e inserida. A Lisragem 17.3 oferece urn exemplo disso, em urn programs que contern tanto uma tela de selefi30 como evecros. Ele tam-bern '. contern urn. eveaeobaseadc em programs - top-of-page.
E NTlADAt.. U~ta~e~ 17.3 "sh .rt -af - sel ect ion outomaticoment~ inserido antes de pnrnerro linho de c6dlgO
I I
6 ini t iali zati on. pl 'I nit'. S 9 end-of-se l ect1on. 10 write: J(14} sy-uline. 11 I ' End of program'.
7
Somente se estiver fazendo algo incomum em top-of-page, como abrir arquivos ou inicializar clados, voce precisari ter cuidado com 0 efeito de acio narne nto duple. Se top -of-pag e for acionada duas vezes. voce somente vera a saida de instrur;oes writ e dentro dela na segunda vez que ela for acionada.. A safda criada pelas instru~6es wri-te durante a primeira va que ela e acionada e descartacla .
.J
"
I
I
553
,
5
8
0
fl - 'A'.
End of progr am
7 1fn- 'A'.
ANlusE ~
pro grama ztx1703, urn p rogr.una de driver inicia primeiro. Desde qu e haja c6digo no ccmecc do programa que m o pertenca a quaisquer evenros, uraa start -of-select ion auto maticamente e inserida na linha 3.
ene-et-selecttcn .
write: endtf .
9 10
fl.
Flg urg
1Z 2
0 programa de driver aciona a eventc initialization. A linha 7 exe cuta e attibui 0 valor' Ini t' para pl. 0 cone-ole reroma ao prognm a de driver.
ztx1703.
Desde que haja uma tela d e se1elii o pa ra esse programs, uma dela s agora e mostrada, Ela aparec e na Figura 17.2. 0 valor atribuido a pl
n.a linha 7 apare ce n o camp o d e entrada,
1i.nha 4.
A linh. 4 ~ executada. Como esta ea primeira instruljio wri te execu tada depois de start-of-se lectian, ela aciona a event o top-of- page.
siiDI ~
nesti ng: bef ore the statement ' EN D -O F ~S ElECTION' 1 the structu re introduced by ' IF' mus t be concl uded by ' ENDI F'. ..... Os nomes de evento tem prioridodemclsa ltaque outrnsinsfT'u(;6es de AWN.
o A linha 10 escreve uma linha horizontal de 14 bytes. A linha 11 escreve End of pro gr am. 0 controle retoma para a programa
de driver.
E A Listagem 17.4 Nco cclo que um eve ntc dent ro de umo condit;ao ou de Nlli.D.....
,. um loop 1 report ztx1704.
2 data fl . 3
isso nio cause u rn erro de sintaxe, rrata-se de urn estilc de programa~ao pobre.
DlA 1 MODU~O: EVEHTDS ESUB-ROllNA 7: S APRlNDA lM 21 DIAS ABAP/4 554 ~=..::::...o:"'::'::=-"-------- -----------.jl------ ---- ----==== ==~ 555
exit
check
stop
Nco utilize stop nos seguintes eventos: i niti ali zation, em selec t io n-screen output, top-of-page , and end-at- page. Tecnicemente, stop pode fundonor com top-of-page e end- at - page, se voce evltcr utilizer a instruo write dentro de end-of - sel ect i on, depois disso. No coso de top-of-page urn w i te, ped e cousar urn r dump curto; no coso de end-of-peae, voC!! pede perder a scldc. E mois segura evlto-lc 00 fodc dentro desses eventos.
Nesse me mento, p or favor revise a fun!jao da insrrucio check (apresentada no Ca pitulo l Ol "lns trucoes de controle comuns"). O s paragrafos a segui r descrevem 0 efeit o de check. e ex; t quando elas sjo codificadas foradeurn loop. 0 efeito de stop e0 mesmo,independentemente de ela ter sido codificada ou nao denrro de urn loop.
relat6rio mostrado na Listagem 17.5 permire a voce experimenter as efeitos dessas instrucdes dentro de varies even eos. Co pie-a e remova a s comendrios de uma. vez para experimenter as poasfveis variacoes.
even tos.
* 5 *
4
Em tod os as eventos:
checkimediatamente deixa 0 evento arual e 0 processameotc continua com 0 pr6ximo evento ( 0 1,1 aliao, como exibir a tela de selecac ou lista de safda).
6 * 7
stop imediatam ente deixa 0 evento atual e vai dir etamente para 0 evento end-at-s election. Executar stop dentro de end-at-s election deixa 0 evento . N so causa urn loop infinito.
8 *em ste rt-cf-selecttcn e eventcs sUb seqllentes : 9 * - exit termina 0 relatOrio e IIlOstra a lfsta de salda 10 * excec;!o : top:'of-page: exit detx e 0 evento 11 * check. detxa 0 evente e 0 processamento continu a com 0 prOximo . 12 * stop vet diretamente para 0 evento end-ct- setectt cn
13
14
"execut a
lIIl:
Em even tcs que ocorrem antes de start-ot-sel ection , exi t e check tern 0 mesmo compcrtamento. Eles deixam 0 evento imediatamente e 0 processamento continua com 0 proximo evento (au 01.<;3.0 , como exibicio da tela de selecac). Em start-ot-sel ect i on e evencos que ocorrem depois dele: exi t te rmina a relat6rio e mostra a lista de saIda. Existe uma unica exce<;aoj dentro de tcp-of -paqe, exit ccmpcrta-se como check. check deixa 0 evento e 0 processamento continua com a pr6x.imo eventc (au alJao l como exibi<;ao da lista de saIda). check, exit e st op nso configuram a valor de sy-sub rc, Se quiser configura-la, voce pode atribuir urn valor numerico a ela antes de partir.
15 parameters: eXit_sos r-adtubut'tcn group gl, "exit em st art-of-sel ect ion eXit_eos radiobutton group gl . "exit em end-cf- select fon 16
17 18
chck_sos radiobutton group gl. "check em sta rt-of- sel ect i on chck_eos radlabutton group 91, "cheek em end-cf- setec t t on stop_sos radiobutton group gl, "stop em st art-es-se 1ect i on st op_eos radiobutton group gl, "stop em end-of-sel ecti on none radiobutton group 91. "sem stop, exit ou check
"nlio taz 1550 26 * 27 Z8 29 at selecti on-screen output. "M evento 30 " exit . "h4 evento 31 * check 1 '". 2. "nio taz 1sso 32 * stop. message s789{zk) wi th 'at set ectton-sereen output ' . 33
34
557
A linha15 defineurn gropo de boeees de op~o. A escolha de um dele, fm com que a instru~o mencionada no comentdric seja executada como indicado. Por ezemplo, escolher exit_50S faz com que a instru~ao exit seja executada no evento start-at-s ele ct i on.
check 1 '"' 2 e muito codificado entao sempre reto ma urn resultado negativo.
Voce pode querer incrementar a contagem de linha para tornar a saida mais Iegfvel. isso e configurado para que 0 evento bottom-at- page seja acionado.
46
47 s tart-ot sele ct fon. 48 w t e: / 'Top of SOS' . ri
Retornondo do liste
"hi
49
50
51 52 53
54 55
56 57 58 end-of- sel ect i on. 59 ~1te: / ' Top of EO . S' 60 11 nit_t!05 'X' . 61 exit . 62 el seif chck ees ' X'. 63 check 1 : 2. 64 el setf stoP _eDs .o 'X' . 65 sto p. 66 endif . 67 wr1t e: / ' Bottom of EOS ' . 68 write : / '1' , 69 / '2 ', 70 / ' 3' .
71
exit_50S " ' X' . exit . elseif chck_50S.o ' X' ~ check 1 2. elsei f StOP_50S " ' X'. stop . endif. write: / ' Bot t om of 50S'. if
rehtOrio
relatOrl0
-h&reletet tc
7Z top-of-pag e. 73 write : / 'Title' . 74'" exit . 75'"' check ' X' ' 1' . 76'" st op.
77
instru~ ao
writ e
-ha event e
" tom. para a 1n.strul;.lio w rite -!lot o end-of- sele ct ion - ni o escreve depois dina
II!
ultne .
-M relat6ri o -hI event o e retorna para a i nst r,ul;! o write "goto end-of -selection - naQ escreve depois dis so
Vejamcs row de perto os evenros no contexte de urn relat6rio que tern uma tela de sele ~ao. (Lembre-se de que a instruc;:ao parameters gera uma eels de ,e1e>10.) Quando 0 usuirio executa 0 relatorio, 0 driver aciona i nit; al i zati on e entio mcstra a tela de sele~o. Depois de pressionar 0 botio Execute. 0 driver acionaos evenecs restantes, 0 programa termina e 0 uscsrio ve a lista. 0 usudric pressiona 0 botao Back para retomar. 0 driver entio reiaicia 0 processamearc comecando na parte superior da lista de evento . Ele ad ona 0 evenro initial izati on e entio todos cs eventos subseqaectes seguem novamente em sua seqiiencia normal. 0 resultado e que 0 usudrio ve a tela de sele~iio depois de pressionar 0 bone Back. Ha uma diferenca no processamento, porem, quando ocorre urna reiaicializacio. A tela de se1e~ao tern sua pr6pria c6pia de todas as variaveis que sio exibidas nela. N a primeira vez que 0 re1at6rio executa e 0 programa de driver recupera 0 controle depois que 0 evento i ni t i al i zat i on terminou, ele copia as valcres das varidveis do programa. para as varidveis corre spoodentes Il2 tela de sele~io e as exibe. 0 usuaric pede modificar os campos de entrada. Quando o usuaric pressiona 0 botio Execute. 0 driver armazena as valores cia tela de se le~io em duas areas de dados: uma penencente i tela de s ele~ao e entio em suas variiveis do programa.. Entretanto, essa aljao dual somente ocorre na primeira vez que voce. executa 0 programa. Quando 0 ususrio pressiona.Back na lista, ini ti al ; zation eacionado novamente. Quando a controle rercrna para 0 driver, ele nao copia suas varia veis de programa para a area de dados cia tela. Em vez disso,ele exibe os valores exisrentes da area de dados da tela; ele aincia contem os valores que o usuario digitou. 0 resultado e que 0 usui rio ve. os valores que insenu por ultimo. independentemente do que fai alterado em seu pr ograma. Entia, depois que 0 usuino pressiona 0 botao Execute, os valores na tela sio copiados para a area de clados da teta e entaO para seu program a. sobrescrevendo quaisquer diferen~as. Por exemplo, se voce configura valores durante a 1nHi al i zati on, esses valores serao vistas na tela de se1eCjao quando iniciar a
S58
---====== ~~
559
p rograma. Quand o voce pre ssiona 0 be tte Back na tela de sele~aol initial; zat ion executarf, mas as valores configurad os dea tro dele nao sen e mosrrados. 0 usuaric em vez dissoverd as valcres que ele digirou.
Sub-rotinas
MOYO .... TWKI ~
Uma
que pode ser choma do de cvtrc ponto em sev progroma . Derrtrc dele voce pede defioir vcrlcv execvtcr instrve.s, compute r resultados e escrever soido. Pore eis, definir umo scb-rcnnc, utilize a insfruc;oo fOnD para indicor 0 lofti o de umo sub-retina e utili e endfo rm pore indica r 0 se u fim. 0 nome de umo sub-rotina nco pode exceder 30 z corederes. .
Pan chamar um a sub-retina, utilize a instnu;ao per f onn. ~ Listagem 17.6 oferec e urn programa de exemp lo qu e define e chama uma sub-retina.
en
Z
1ft
Sintaxe para a
instru~aa
form
f orn s [tables tl t2 . . . ]
[using ul 'falue (u2) .. . J [changing c1 'falue (c2) ].
endfonll.
code:
5
AHiuSE ~
Os seguintes pontos se aplicam: Tod.as as adic;oes sao opcionais. e Quando etas sao codificadas , as adi~oes devem aparecer na ordem mostrada aqui. Se codificadas, tab l es devers vir prim eir o, e depois dela
using e cha nging .
A linha 5 executa.
. A
.s
560
Cada a~~o somen te pede ser especificada urna vez. Per exemplo, a adi~ao tab les somente pede aparecer uma vez. En ereranto, tabelas mriltiplas podem aparecer depois dela,
As definicoes de sub- rorina nao podem ser aninh;cias. (Vae!:oio pode definir uma sub-retina dentrc de ourra.)
S
m
CIl
A linha 2 comeca urn loop que executa treS vezes. Sy-index e o comador de loop e e incremenudo em um a cada passagem do loop. Na primeira vez que 4linlu 3 eexecutada, sy- index tern Portanto, a primeira sub-retina (s 1) e executa-cia.
0
valor de 1.
Na segunda vez que a linha 3 executada, sy- t ndex tern 0 valor de 2. Portanro, a segunda sub-retina (52) e executada, Na te rceira vez que a linha 3 e executada, sy- Index tern Pcrtanto, a terceira sub-rotina (s3) executad a.
0
on de:
s. 51. 52. 53, sao nomes de sub-re tina. n eurna variavel numerica.
a) e b) sao mutuamente exclusives.
tables, using e changi ng podem aparecer com a} au b}.
valor de 3.
A adi~ao value( } nao pode ser utilizada com perform. Utilizando a sintaxe b) voce pode especificar que uma sub-re tina de uma lista de sub-retinas seja executada. A n-es ima sub-retina na Iista de names seguindo of eexecutada. Par exempl o, se n for 2, a segunda sub-rotina na Iist a, ela sera execunda. A Listagem 17.7 ilustra esse sintaxe.
562
EHTRADA~
as efeitos de exit,
3
4 clear sy -subrc . 5 perfoT'll s1. write : / ' sy-subr c 6 perfonll 52. write : I'sy-subrc - ", 7 perform 53. write : / 'sy-subrc -'. 8 perform 54. write : I ' sy ~s ubrc -" ,
o
7
.t.
St opped. sy-subrc -
AlliUS! ~
A linha 22 ~ai da sub-retina, 0 controle retorna para Iiaha 6. A linha 6 transfere a contrcle para linba 26.
A linha 28 trans'[ere
0
19
20
exit.
enddo.
21 lZ
23 24
25 26 form 52.
27 do 4 times .
28
29 30
ID.MO,.
MOYO'"
31
3Z 33 34
Umo vari6vel g/ob~1 e cqueic que e definidc foro de umo sub-rotlnc vti1izondo a instruc;oo tabl es ou data . Elc pode ser ocessodo de quolquer ponto no . progromo, se je dentro de um eventc ou dentro de uma sub- retina. ~ boo prcticc de prog romoc;Oo colccor definic;6es de vori6veis globo is no porte superior do progromo, em olgum lugar an tes da primeiro llnho de c6d igo executevel. Umo vcri vel 'ocal e definidc dentro de ume sub-rotinc vtilizondo 0 in~ruc;60 6 lecal, data au statics . Dizemos que elc e locol ~ sub- rotina . As vori6veis definidos ufi~zondo local sOO ccessfvets de foro do sub-retina: os vari6veis definidos utilizondo data ou statics n60 eec. Assim, se a sub-retina cha ma out ro sub-retina, vc rievels deflnldcs utilizonda 1oca 1 s60 vislveis de dentra do sub-retina chomada vari6veis definidos utilizondo data ov statics n60 sdc.
35
36 fonn 53. 37 do 4 times.
TWO"
sy-subrc .. 7. stop. write I sy-index .
enddo .
NOYO til...
38 39
40 41
42
endfonn.
alocada toda vez que a sub-retina echamada. Essa memoria eliberada quando
Para variaveis
locais definidas
utilizando
local
ou
da ta,
a memoria C
43 44 forti 54 .
asub-retina termina, e entia os valores dentro dele sao perdido s. Para stati cs,
a mem6ria ~ rerida, Esses caracteristicas serio descritas pr ofun damente neste capitulo .
45
46
56S
21 22
23 24
write: I ' 52-A' , zt xlfa l-l 1fnr. sel ect si ngl e'" f rom ztxlfal whe re li fn r . 'V . 2' writ!!: I' 52- B', ztx lfal-l ifnr .
endform .
V2 .
Sl~~~V9
S2-A V9
52-B V2 *S2- --V2
Para ser precise , ume vcr icvel somente cc nhecldo dentro de um programa depois do po nto em que e definido. Per example, se voce definisse ume vc ricve l no Jinho 10, yoct! eer ie capa z de ocessc -lc da Jinho 11 em d ionte, mas noo an tes da linho 10 . No coso de umo definic;oo loccl, voce pode cc esscr a versec gro bal do va riovel em quaJquer ponfo ant es do definio local.
IHlllSE~
A Iinha 2 define uma area de tra balha global identi ficada ztxl fal .
A linha 4 seleciona urn unicc regist ro de tabela zt xl fal eo caloca na area de trabalho global zt xl f al.
A linha 5 escrevea valor V9 a partir daareade rrabalho global ztxlfal.
A linha 13 define uma string local de campo ztxlfal. (E boa prarica de pro gramacao colo car essa defini<.rao na p art e superior da sub-retina. Para as p rop6sitos desse exemplo, ela ecolocedadepois de w te para ri demonstrar completame nt e 0 efeito de 1ccal .) Uma nova posi<.r ao de
mem6ria ealocada tendo 0 nome ztx l fa l . As referen cias para ztxl fal depois desse ponto na sub-re tina e em eodas as ourras chamadas faria referencia a essa defini'iao local de ztxl fal, nao a global. A global estd agora ina cessfveL A linha 14 selecion a urn anicc regist ro e coloca-o na area de trabalho localztxl fal.
5 6 7 8 9
10
write : /
wr1te : /
zt xlfal-li fn r.
ztxlfal-l1fnr.
pertann sl.
perform s2.
wri te :
ztxlfalli fnr .
13 14 15
16
local ztxlfal. select si ngle f rom zblfal where 1Hnr. ' V I'. write: I ' 51-8' . ztxlfall1fnr.
perform 52. .
17
18
write:
I .
endf onn.
19 20 f orm 52.
566
A linha 17 escreve 0 valor colocado na local ztxlfa l por 52. A linha 18 retorna 0 controle pan a Iinha 6. A memo ria local eliberada
EKTiADAr
Listagem 17.10
data e stat i cs
e 0 valor V e descartado. 2
A linha 7 escreve
0 valor de l t fnr. Ela e agora V9 que teve quando sl fei chamado. ' 0
mesmo valor
write: I 'before 5
10 11 101"1I 51.
A linha 8 transfere
Antes de executar a linha 21, urna defini~o local de ztxl f al cia foi . criada.. Portanto, a glob al ztxl fal -l i fnr e escrita,
A linha 22 selecion a urn r egisrro na area de trahalho glob al ztxl f al.
51:' , fl . rz. 6 do 3 times. 1 pl!rfol'1ll 51. 8 enddo. 9 wM t l!: I ' af t l!r 51:', n , f2
12 13
14 15 16 11
data fl type i val ue 1. stati cs f2 typl! 1 v~lue 1. write: I ' insi de 51: 1 , fl, f2. perfona 52. fl -. f2 12 '" 2. ertdfona.
18
19 f ol"ll 52. 20 wnte: ' 52', fl,
ra.
21
endfonn.
Definindo dodos
As varidveis definidas pela instrU~o data na parte superior do progr ama sao globais. As definiljoes de data denrro de uma sub-rotina sao locai.s para a sub-re tina, A mem6ria e aloca da para essas variaveis quan do a sub-retina e
chamada e e Iiberada quaodo ela retorna. Com variaveis definidas utilizaodo 1ccal , os valores nessas variaveis dat a serso perdidos quando a sub-retina
6 .1 1 1 8
9 1 2 4 9
'2-
'52-2
8 8 8
9 9
9
retornar, Utilize a instruliao statics p ara C M variaveis locais qu e Ili o sejam libertadas quando a sub-retina termina, A sintaxe para sta t i cs ea mesma que a sintaxe para. a instrucio data. A rnem6ria para. urna varisve l estdtica ealocada na primeira vez que a sub-retina e chama da e e r erida quand o a sub-retina rermina . Entretanro, uma varia-vel esti tica e visivel somente d e dentre da propria sub-retina, e nio de dentro de sub-retinas iniciadas par ela. Da pr6xima vez que a sub-retina far chamada, a rnern6ria para essa variavel torna-se visivel nov amente. 0 valor dentro dela sera 0 mesmo de quan do voce river retom ado dessa sub rorlna da ultima vez. A memo ria de um a vwvel estinea p ertence i subrotina qu e a alocou; essa variivel nio e visivel a panir de outr-.s sub-ratinas. Se voce alocar uma variavel estitica do rnesmo nome em mu ltiplas sub-rotinas,'essas serio variaveis separadas com sua propria mem6 ria e seus pr6prias w la res. A Lista gem 17.10 ilus tra variaveis dd inid-.s utilizando dat a e s tatic s.
urn valor de 1. A linha 13 aloca nova memoria para a vanavel escl.tica f2 e atribui a ela urn valor de 1. o A linba 15 mnsfere
0
o A linha 16 ntultiplica f2 por 2 e atribui 0 valor para fl e f2. linha 6. A ~~m 6r iade fl eliberada, A linha 17 ret orna 0 controle para a e
pr6xima vez que a sub-rotina. for chamada .
569
voce deve memorizer sew nomes, assim como guardar as palavrascbave em instru~5es.
A linh a 12 aloca nova m em oria para fl e atribui urn valor de l. A linha 13 faz com que a memoria antericrmente alocada para f2 tcme-se novamen te vistvel com essa sub- rotina. 0 valor em fZ ~ Z,
como era quando a sub -retina terminou da ultima vez.
o
1010 ~ 1!I.iO ,.
Posso ver 0 programa de driver? E possivel escolher 0 driver? Posse criar u rn driver? Quais sao as diferengas en tre as programas de driver disponiveis?
Resumo
0 ABAF/4: tern tres ripos de unidades de modularizacio: evectcs, sub-re tinas e m6d ulos de fun~ao.
Existem eventos em todos os programas, Se nenhum for codificado, o evento padr jo sta rt-of- s el ect ion sed automaricamenre iaserido. . in itial izati on e frequenremence utilizado para atribuir vaIores a parfmetrcs que aparecem em urna tela de sele~aa. end-of-selection e usado pua limpeza do programa, resumes ou rorinas de rerminacao ano rmal. O s event os sao acionadcs pelo programa de driver. 0 driver semp re inicia antes de seu programa e controls quando os evenros sao execundos. Voce Dio pode colocar urna condicac em volta de urn nome de evento . Toda s as eventos sao acionados no vamente quando a usuirio retcma da lista. En tr etanto, as variaveis de tela de sele~o .cia sao pre enchidas de novo a partir da irea de dados do programa.
Util ize.ext t, check e stop para deixar urn evento.
P&R
o o o o
progum a de dr ive r chamado banco tk dado, 16gico. Voce pode esco lher 0 programa de driv er preea chen dc n os campos de banc o de dados l6gicos na tela de atributos de programa. Se' voce nao espec ificar u m, urn padri.o e au romaticamente atribufdo. A acica vez que voce icl. querer escclher a driver sera quando quis er Ier as dados a partir do ban co de dad os e Iorcecs-los para seu programa auromaticamente. Os bancos de dados 16gicos padrjo nao leem a partir de b anco de dados - eles apenas acionam as eventcs. Independentemente do driver que voce escolher, os eveneos sempre serao acionados na me sma crdem relativa. Mesmo Sf voce criar seu pr6prio programa de ban co de dados 16gico , nao poderf alrerar a sequencia relativa de eventos, nem seus names. nem poded criar novas. Pan ver um p rograma de driver , inicie de dentrc do edieor de codigo-fonte, Escolha 0 caminho de men u Utilities-Help On. Selecione a bod e de op~o Logical Database e digite um id de banco de dado s 16gico (KDF, par exemplo). Vo ce entao veri a estrutura da banco de dado s 16gico. Escolha a caminbo de menu Gor o-Daesbase Program para ver a pro gnma de driver . Lembre-se, 0 codigc mestrado denero do driver n este capitulo era urn pseu doccdigo, entia voce nao vera as instrucoes de como acionar a inicializacic at. Os banc os de dados J6gicos sao urn tema complexo e exigem mu itos capitulos para serem descritos completamente.
Se coloco uma instru~o write em urn evento que vern an t es .d e start-of-selec:tion) eIa func:iona somente quando nao h oi um a tela de sele~o. Se houver uma tela de sele~o, mo vejo a saida. Par que? R/3 uti liza alga denominado contexto de tela pan aceitar entrada e exibir suda para voce. Voce pode pensaI em contexto de tela como uma tela. Cada contexto de tela eprocessado em duas fases: a fase de dialogo e a fase de lista. A fase de dialogo semp re ocorr' primeiro. seguida pela lista. A fase de dialogo e utiJizada para exihir campos de entrada para a usumo, como aqueles gera-
teO
o o
Se voce vir uma un ica palavra segu ida p ar u rn pedodo, isso e normalmenteum even to . AI6n disso, a s even tes nae tern quaisquer ou tras caractersticas identificaveis que seus n ames. Eles sio simplesmente palavr.as rese rva das e p ara re con hecer u rn
570
dos po r uma instrU~ao de pargmetros. A fase de lista e utilizada para exibir a safda da instrU~ao wri t e para 0 usuario. As duas fases
utiliz am 0 mesmo contexte de tela, portanto uma sobrescreve a out ra. A fase de dialcgo, ent retanto, interrompe a entrada de usuirio e eerao perml te a si mesma ser mostrada antes de a lista ser mostrada. En tao, se voce emite uma instru~a.o wri te no evento init ialization e se a tela de sele~o e most rada, a tel a de sele~ao sobrescreve a safda da write e essa sa!<b. e p erdida. Voce en tia deve escclber Execute na tela de s ele~o e, se as instrucoe s write entia forem emitidas , a lista sob resc reve a tela de selc!jao e voce veri a saida. Entretantc, se naa river uma tela de selc!jao. as gravar;oes que ocorrem em in itial i zati on ainda poderac ser vistas.
Wo rkshop
que aprendeu nesee capitulo. A se~ao Teste cfer ece perguntas para ajudar a solidificar seu entendimente do co nteado aboedado e a sec;:ao Exercfc io permite que voc e pratique 0 qu e aprecdeu. Voce pede en contrar as respostas as pe rguntas do Teste e aos exercfcios no Apendice B, "Respostas is peegunus e aos exercfcios".
Oi 18
Modulariza~ao: passando
Teste
1. A varia~o write to cia instru~ao write acicna top-of-page?
2. Que eventcs voce nao utilizaria.em stop ? 3. Em que po nt.o uma variavel econhecida denero de urn programa?
Exercicio 1
erie u rn rela.t6rio que aceita urn parimeteo de entrada chamado p-landl. Defioa-c como ztxl fal~1andl. Preencha esse campo com a valor padrio U em S tempo de execu~o, utilizando 0 even to Init ia l i zat io n. Seu programa principaldeve tee uma Unica instru~ao para. chamar uma sub-retina que selecioca regisrros de zt xl fal , onde a campo 1andl igualao pardmetro p_l andl. D entro de sel ect, chame outra sub-retina para escrever a registro . Utilize 0 evento tcp-of-pape para criar 0 titulo do eelat6rio . Escreva 0 valor do campo p_landl no titulo.
como parametres, que podem see locais au referencias para variaveis globais. A mem6ria de parametres locais e alocada quando a sub-retina e chamad a e
Iiberadaquando finalizada.
Se vc cs definirvariaveis na instrU~ao form, a instrucio perform deve passar urn valor para cada urna dessas varisveis.
htlp:J/wwN.CIJlTIP'Jt,com.br
572
tRiO
NOVO ....
Os nomes de pcremetrc que oporecem no instrv~co form seo chcmodcs por6metrcs formais . Esse termc e IOcil de lembror, porque "former possu i 0 rod~ol "form". Par exempla, no instrulo fom 51 using pI changing p2 p3, as parametres pl, p2 e p3 sao chomodos pcremetrcs fonnois .
r
r
A linha 14 define tres variiveis: fl, f2 e f3. Ela atribui 0 valor de fl a fl, 0 valor de f2 a f2 e 0 valor de f3 a f 3.
A linha 16 escreve as valares das vuiiveis defmi das na linha 14 na instrulSao form; fl, f2 e f3.
NOYO ...
TWO
Os nomes de pordmetros que oporecem no instruo perfonn soo chcm cdos porOmefros recrs. Par exemplo, no instruc;co perform 51 using fl changing f 2 f3, as parametres fl, f2 e f3 soo chomodos pcrametros reels.
A linha 17 retorna a controle para a lin.ha 7. Revise a sintaxe das IDstIlllSoes form e perform antes de continu ar. Consuite a sC!jaa "Definindo e chamanda sub-retinas Ineemas", no Capitulo 19.
e ilustrada na Lis-
tagem 18.1.
IFa~a
6 perfom: 51 using fl 12 ra , 52 using fl 12 13 . 8 9 tOrrt 51 using pI p2 p3. 10 vrtte : I fl. f2. 13. 11 / pl. pl. p3. 12 endform. 13 14 torn 52 usi ng fl 12 f3 . 15 skip. 16 write: / f l . f2 . rs. 17 endform.
3 4 5 7
reolmen te precise de uma nova c6p io do tcbelo intemo. Posse pa r6metros par referencia sempre que pc ssfvel.
Os porern_~s formats podem ser digitcdos au nOo. Urn porbmetro O'9itcdo e um por6metroformal que tem urn tipo de dodo seguindo seu nome no instrvo fonn.
AN.iUSE~
A linha 9 define treS varifveis: pI, p2 e p3. Ela atribui 0 valor de fl pan pI, 0 valor de f2 para p2 e o valor de f3 para p3.
A linha 10 escreve as valores das variiveis pl, p2 e p3 e as varisveis globais fl . f2 e f3.
I I
S
m
CI'
cede:
51
A linha 12 retorna
ul, u2, c1 e cz sao parametros formais. t~. tantoum tipo de dado de ABAP/4, como um tipo de dadodefinido pelc usutrio.
574
575
Somente urn tipo de dado pede ser especificado na instnu;ao form. Urn
co mprim ento Ilia pede ser especificadc..
IHiUlE~
As
Se voce define urn pargmerrc forma.! urilizsndo urn tipo de dado de comprimento fixo (esses sio tipos d, t, i e f). 0 comprimento do parametro real deve corresponder ao tipo de dado do parimeuo
formal Esse enormalmente 0 case,
linhas 2 a. 5 definem qua.trO va.riivei s tendo varios tip os de dados. F3 edo tipo c e ccmprimeatc iguala. 8, com um comprimento de safda igual a 10 (definido no domfnio de syst-datum). Fa e do ripe c e comprimento 6 com urn comprimento de saida. de 8 (definido no domlnio para. sy-uzef t }.
A linha 10 rransfere 0 conerole pan. a linha 12. Na 1inh.a. 12, pI aceita somente parsmet rc s reais do tipo c. fl edo tip o c e comprimento igual a. 3, entia urn comprimentc de 3 unidades e atribuido a pl. Se f1 nae fosse do tipo c, urn errc de sintaxe t eria ocorrido. p2 eum tipo de dado de comprimentc fixo ; 0 tipo i esempre de comprimento iguaI a 4; f2 tambem e, eerao as parimetros corr espondem-se complewnente. p3 e p4 tambem sao tipos de dados de comprimento Iixc, come sao seus parimetros reais.
.. Passar ~~a variavel com 0 ~po de dado au comprimento errado para urn pa::metro digitado causa urn erro de sinnxe. A Listagem 18.2 mostra como utilizar padmetros digit ados.
0 comprimento de safda DaO e passado do parimetro real para. 0 form al 0 comprimento de safda. dos pardmerros formais e confi gurado como 0 padrao para. cads tipo de dado. Issc faz com que a safda de data. e a hera nao tenha separadores.
Os pardmetros digita.dos tem treS vantagens: Sao mais eficientes. Enecessaria mencs CPU a de alocar memoria para. urn parimetro digindo, que pan. um nio digitado.
fun
'.
Ajudam a. prevenir erros de codifica.l;jao. Ji que voce MOpod e passar urn parlmetro de tipo incompatfvel, 0 verificador de sintaxe indicari. o eITO para voce se ten tar passar urn parametr o incompatfvel. Ajudam a. prevenir erros de tempo de execul;jao. Par exemplo, se seu programa aceitar uma variavel nao digitada e executar nele um a operal;jaO aritmecica, e posslvel passar dados de caractere pa.ra essa subretina, Se isso acontecer em tempe de execu~ao, um dump curto a.contecera.
wr1te:
18
19
I I I I ...
ZO
endform.
cia mcsma maneira que qua.lq outrO uer parimetro. Entrecantol se voce quiser a.cessaros cemponentes cia. strin g de cunpo dentro cb. sub-retina, voce deve fazer a estrUtut'2. cia string de camp o conhecida para. a sub~rotina, por meio de urna. desw duas a.di~6es ainStruliao .f orm:
like x
164836
structure x A qui, x pode ser uma string de campo au um a estrutura de DDle ou tabela. Porexemplo, form sl using h I structure zt xlfa l defin e fs1 co m o
576
577
19
2D
21
Passar por valor Passarpor valor e resultadc A sintaxe na instruc;ao form determine como as varidveis slo passadas. A sint axe em perf orm mo faz isso. 0 seu significado sen explicado na proxima Seli3.a. A primeira coisa ne cessaria e aprender a. codificar each metoda. A Tabela 18.1 mostra a relacionamento entre sintaxe e meeodcs de passagem.
Ta bela 18.1 As cdlcoes de instruc;60 form e 0 metodo resultcnte de possogem de panlmetro
Meto da
usi ng vI chang ing
24 wri te: I pI , p2. p3. p4. p5, p6. 2S endfc re. 26 27 t om s3 using value{pl}
28 cha nging endfol'1ll . p2 val ue(p3 ).
Z9
30
Passe por
refe~ncic
vt
Posse por refer!ncio Posse por valor Posse por valor e resultado
IMlUSE ~
A lichs 9 passa quatrc parametres para a.sub-retina s1. A sintaxe na linha 17 det ermina como des sao passados. f1 e f3 sio passadcs por referenda; f 2 e passado por valor; f4 e passado per valor e resultado. .
A linha 9 passa seis parimetros para. a sub-retina 52. fl, f 4 e f 6 sio passados por referencia; f 2 e f3 sio passados por valor. f 5 e passado par valor e resulrado.
Embora a sintaxe em form e perform possa diferir, por causa da clareza de programa elas devem sec as mesmas. A Listagem 18.3 ilustra como codificar essas adi<;6es.
ENTRAOI~
3 4
A linha 12 passa tr es parametres para a sub -retina 52. f 3 epassado par valor, f3 epassado par reierec cie e ';5 6 passado par valor e resultado. Embora a instt1.1iaOperf orm apenas especifique using, a instru ci o form pe de diferir. Ela especifica tanto usi ng como changing. A sintaxe na instt1.1c;ao form assume precedencia e determina a met oda pelo qual a s parirnetros sao passados.
value 'B' .
val ue value value value ' C' . ' 0' , ' E'. ' F' .
Lembre-se do seguint e: perfonn e form devem cant er 0 mesmo niimero de parametres. A sintaxe nas instrucoes perform e form podem diferir. A sint axe na instru~io f orm determina apenas 0 meto da pelc qual urn paramerro epassado. A adic;ao ve1ue ( )nio pede ser utilizada na instru c;io perfo rm. using deve vir antes de changing. A adi~a ust ngs6 pede ocorrer uma vez em uma instruc;ao. A mesma regra se aplica a changing.
5
6
7 8
9
perform 51 using f1 f2
thanging 13 f4.
10
578
579
Utilizando
OS
Vantag ens
Muito eficiente
Posse um po nteiro po re a
posit;oo de mem6ria o riginal
ANluSE ~ . A linha 2 aloca mem6ria para a variavel flo Por esse exemplo, vamos
partir do pressuposto que a posiliaOde.mem6ri a e 1000. A linha -1- trans fere ? contro le para a linha 7. A linha. 7. faz com que fl seja passada par refergncia. Portanto, ,,1 e urn ponreirc para posiliao de mem6ria. 1000.
A
do sub-retina. A memoria
variey!!!" possodo
Porvalore resultodo
Similar 0 po ssor por vclcr, mas o conteUdo do nova membria 6 cop iodo de volta para a mem6rio original antes d e retornor.
Permite oltero<;6es e
linha. 8 modifica a posicfc de memoria 1000, fazendo com que a mem6ria para f1 se altere para X.
passado. Todas as referencias para 0 parimetro sao referencias para posi~ao original cia memoria, Altera~6es na varidvel dentro cia sub-rotina anializam a. posi'iaa original da memoria im ediatam ente, A F igura 18.1 e a Listagem 18.4 ilustram como isso funciona.
Figura
18 1
Como um pon5ml!trO
~t ~~bUiC;OO 11m 51
wr1t e
perfonn 51 us i ng f1 I f1 sc ldc : X
..- ..- . , .
~
-.-Jr:.~t:f .
. -.. . . fortll. ~1 .u.5 ing_ PI., pJ e:'t~~..eo.r~~'pposio de.m.e"!~~.l 000 ,: pl - ' X '. - :~ iss2~~~o-ae mem6ri o 1000 pora 'X' . endform . . - .--_.
A 1inha. 5 escreve 0 valor X . Com sub-rotinas ineemas, In pouca diferenca ent re passar parametr e s por referencis, e acessar varU.veis globais de dentro cia sub-rotina. Ambos permitem que voce altere 0 valor de uma variavel global direeamec re. Nas sub-retinas externas e m6dulos de fun,ao (veja 0 CapItulo 19, "Modulariza,ao: m6dulos de fun~o. parte 1"), a passagem por referencia. e mais ut i!. Mesmo assim, passar pargmerros para uma sub-retina - seja ela interna ou externa~ urn born estilo de prcgramacio, que tcrna a. manutencdo mais facil e melho ra o readaptabilidade de seu progrema. As duas adi'ioes us; n9 f l e chang; n9 fl passam fl por referenda - elas sao identicas na fun,ao. A =io paraque asduas exisram e que- utilizadas adequadamente_ podem documentar quando a. sub-retina. mudara. urn. pardmetro ou nac. Ao codificar changi ng com parimetros, a sub-ratina se alt er a, Voce deve mer a codifica.c;::io us; n9com parimetros que Dio sejam aleersd os pela sub-rotina. A Listagem 18.5 ilusua esse ponto. .
EllflADI~
Lista gem
18.5
wri te : I fl. 5
f2 .
580
11 12 13
pl pZ - 'X' . endforlll.
. A linha. 4 transfere
A linha 7 faz com que fl seja passsdc por valor. Portanto.jn se refere a uma nova posilj2.o de mem6ria que ~ independente de fl. 0 valor de:
fl automaticamente
A ~ NiliSE
fl e f2 sao passados por referencia para. sl. Portanto, pl e p2sao ponteiros para fl e f2. As altera~6es para pl e p2 sao imediatamecte refletidas em fl e fl. Esse exemplc 56 ilust ra qu e epcssfvel alterar qualquer parimetro passado
einalterado.
valor X .
por refer!nci.a. Voce deve codificarseus pardmetros de modo que usi ng e c~angi n9 documentemapropriadamente sua ucilizaliio desses paclmetros.
A linha 10 retorna a controle para a linha 5. A linha 5 escreve a valor A. U tiliz.e a passagem por valor, quando voce precisar de uma c6pia local de uma varavel que possa ser alrerada sem afetar a original. A passagem por referencia ~ eficienee que a passagem por valor. Utilize 0 metoda por referencis, a mencs que voce precise de -um a c6pia local independente cia variivel
rom
posio de
ormazenomeTJto
writ e
Independente do
original.
EIlTlADA~
A passagem par valor e resultado e muito similar apassagem par valor. Como no caso da passagem por valor, uma nova area de memoria e alocada e ela armazena uma c6pia independente da variavel. Eliberada quando a sub-retina termini. e isso accctece tambem quando a diferen~a ocorre. Quando a instruliaa endfonn e executada, ela copia 0 valor da area de mem6ria local de volta para a area original de mem6ria. As altera;oes do parimetro dentro d.a sub-retina sao refletidas na original, mas nio at! a sub-rotina reternar. . Isso pede pareceruma diferenca pequena, mas eorna-se maier. Voce pade modificar, case a c6pia aconteca ou nao. A c6pia sempre ocorre, a menes que.voce deixe a sub-rotioa, utili.z.a.ndo uma de duas instrUlioes: stop message ennn A instrUl;ao stop finaliza a sub-retina e vai direeemeate para 0 evento end-cf -sel ect 1on. Se pl foi passado por valor e resultado, as alteralioespan pI serio descartadas antes de end-of-sel ecti onser acionado. Num sentido; stop compona-se como urn mini-rollback para parametro s de valor e resultado. Quando eiltilizada dentro de urna sub-rotina, a instnJ'iao stop enormalmente precedida par urn teste de urna condiliio ~orma1 dentro do programa. Se a
5 writ!!
perlol"lll 51 IIsi ng fl . I fl .
write / pI.
endfonn.
lD
~~i~
~i~;
582
sa3
ccndicac manna! su rge, stop. e executads. Esta descarca as alterac;oes para variaveis de valor e de resulradc e adona end-of-sel ect ton, onde as procedimentes de limp eza sa.o errdo executados. Utilize a passagem por valor e resultado para pargmetros que voce quer alterar, pois pode haver uma possibilidade de que voce queira descartar as alterac;oes se uma condicl o aoorm al surgir em sua sub-retina.
St opped. 11 :' B
A linha 2 aloes mem6riapan a variavel f l. A Iinha 4 transfere 0 controle para a linha. 9. A linha 10faz com que f1 sejapassadopor valore resultado. Pcrtan to, pI se refere a uma nova posiljao de mem6ria que ~ independente de fl. o valor de fl eautomaticamente copiado na mem 6ria para pt. A linha 11 modificaa mem6ria para pI. fl einalterado.
A linha 12 copia 0 valor de pI de volta em fl , Libera pl e transfere controle para a linha 5. A Iinhe 5 passa 0 controle para. a linha 14. A linha 14 faz com que f1 seja passado por valor e resu ltado. Uma no va area de memoria ~ alocadapara pI e 0 valor de 11 ~ copiado nela.
A linha 15 alters
0 0
e resultado.
Fig u r a 1 8 3
Como urn par6metro possadof'Ol' valor ~ resultado olocc urno nova posio de
ormozenoml!!nto
valor de pI para B.
0
A linha 16 emite a instru)ao stop . Ela Iibera a mem6ria para pI e valor alte"cado ~ perdido. 0 centrale ~ transferido para a linha 7.
valor de vol'"
novam~e.
Talvez sejauma boa ideia revisar tabelas internas agora,especialmente a sintaxe de tt[ ] . Voce pede utilizar urn des dais metodos para passar uma tabela interna para uma sub-retina: .
7 end-ct -selecttcn.
8 wri t e: / 'Stopped . 11 "", fl.
s
10 form sl changing value(pl).
11
pl 'B'.
Sea tabela interna riverumalinha de cabecalho, a merodo 1passa as dais para a linha de cabecalhc eo corpo para a sub-retina. 0 metoda 2 passa 56 0 corpo para a sub-retina. Se a tabels intema me tiver urna linha de cabegalho, voce pode tambem utiliza r as dois merodos, Entretanto, 0 rceecdc 1 se comporears urn pouea diferenee - ele automaticamente criara uma linha de cabecalhc para a tabe la
inrerna dentro da sub -retina. Nesse pccto, voce pede estar se perguntando, "Per que eu iria querer passar uma tabela interna sem uma linha de cabecalho?" Na mai oria das vezes, voce nao vai querer fazer isso. Entreranro, se river urn case especial que exija uma tabela intema sem uma linha de cabecalho, pre cisari passa-la sem uma
16 17
stop . el'ldform.
584
585
- uma tabela interna aninhada DiD pede ter uma l.i.nlu de cabecalho. Tabelas
intemas aninhadas sao util.izadas rom freqiientementc Il2. vers ac 4, entia essa tecnica sera necessaria com mais freqiiencia em sistemas mais novos. A Tabela 18.3 resume a efeiec de cada Urn destes meeodos em tabelas
tabela in terna serjo desconhe cidos dentro da sub-retina. Acessar qualquer componente dentro cia. sub-retina entia resultari em um erro de sintaxe. A sintaxe de que voce pr ecisa depende do metodo que utiliza para. passar a tabela interna. A Tabela 18.5 mostra a siceaxe apro priaciapara. cada. metoda.
Tabela 18. 5 A sintaxe para desaeve r a tobelo inte rno pera a sub- retina
Metoda
Com linho de
Sintaxe
Metodo
ccbecclhc
Com Iinhc de
cc becclhc
Posse 56
ccepc
Posse
corpo
tables it li ke x
(i t [ ]1
A TabeIa 18.4 mos rra a sintaxe pua cada metoda de passagem em uma tabela intema para uma sub-rotin a,
Tabela 18.4 A sintoxe de codo metoda de possogem em umo tcbela lntemo para
umo sub-refine
using it [
111ke
ccbecelhc
Um cerp o Interne de tabelo
(it [ )J
Metodo
Com linhode ccbecclhc Corpo openes
Sintaxe
form sl form '1 form ,1 fo rm ,1 form ,1
Como passodo
Se a tabela iaterna tiver uma linha de cabecallic, 0 primeiro metodc na T abela 18.3 passa tanto 0 cabecalhc como 0 corpo pan a sub-retina. 0 resto dos mercdos passa somen t e a corp o. Se a ubela intema nio civer uma linha de cabe~a1ho, 0 prim eiro metoda naTabela 18.3passa 0 corpo e cria uma linha de cabe~a.lho cleotra cia sub-rotina. o resta passa somente a carpa.
A adi~a.o structure esperaurn nome de strin g de campo depoisdela. Aqui, coclifique 0 nome de qualquer string de campo, estrutura DDIC, rabela ou 0 nome de uma tabela inter na que tern uma linh a de cabecalho. A adi!rao1; ke espera urn corpo de tabela depois dela.Aqui, codifique uma refersncia para 0 corpo de um a eabeb inte rna. Se a tabela int ema que vocf deseja atribuir names aqui nio tiveruma linha de cabecalho , tanto it au it[ ] ira se referir ao corp o de it. Se it river uma linha de cabecalho, scmente a . sintaxe it [ ] podera ser utilizada para referenciar 0 corpo de it. Se voce passa soment e 0 ccrpo, nc rmalm ent e preeisar.i de uma area de trabalho dentto da sub-rotina para edicionar e recuperar registros da tabela interns, P ara defmir isso, voce pede utilizar local, data au stat ; cs, Se uma area de trabalho global ja estiver disponivel, voce pode utiliza-la, embora seja menos deseji.vel. porqu e acessar variaveis globais de dentro de urn. sub-rotina toma a miUluten~o de programa mais dificil. Se voce escolher utilizar a instru.!rio data para defmir sua u ea de trabalho, a adiC;ao l ike line 01 ttabbodyestari disponiveL Etadefine umastring de campo utilizando somente 0 corpo .de uma tahela intem a. A strin g de campo resultante ~ exatunente como urna linha do corpo cia. tabela interna i. t abbody . Par exemplo, data fs l ike lin e of it[ J define uma string de campo chamada 1s. Ela tem a mesma estrotura que uma Unica linha de ; t . .
586
A linha 13 faz com que a eabela interns seja passada junto com sua linha. de cabecalho.Ela epassadapor refe rencia, encao pt eurn ponceirc pan a original, structure enecessaria para tornar a esrrurura da tabela
interua conhecida para a sub-retina. Sem ela, qu alque r acesso a urn
componente da tabela interne causaria urn erro de sintaxe. As linhas 15a 19mcstram asescalhas disponfveispara fazer a estrutura it conhecida deaero da sub-retina. A linba 20 Ie a linha 3 de pt e a eoloca na linha de eabec;alho. Sern a adiliaO structure na Iinlu 13. essa linha teria causado urn errc de
ENTUDA~
l report ztdBOS . 2 Aqu1, IT E IIIIla tabela. tnterna que tern uma l 1nha de cabet;alh o 3 Este programa IlOstr a CQIl'lQ passar a l1nha de cabecathc e a ccrpo. 4 tables ztxl fal. 5 data it l tke ztxlfal occurs 5 with header Jtne.
sineaxe.
A linha21 altera c valor de 1i fnr nalinha de cabecalho. Cemo a ubela int erna foi passada com a linha de cabecalhc por referencia, isso modifica. 0 ccnteudc da linha original de cabecalho.
A linha 22 scbrescreve a linha 3 da linha de eabec;alho. Como a tabela
s
7 select * up to 5 rows from ztxlfal fnto table it order by l ifnr . . 8 pl!!rfonn 51 tables it. 9 loop at i t . 10 write I 1t1ffnr. 11 end1oop.
lZ
ineema fai passadapor refersacia, isso modifica 0 conteu do cia tabela interna original. A linha 23 -retOrna 0 concole para a linha 8. As linhas 9 a 11escrevem 0 cccteedc databela interna. A saidamostra que 0 conteddo se aleerou.
13 forti 51 tables pt structure zulfal. ut l1iz e a st ring de campo ztxl la l 14 "ecut , vod pode ut iltzar: 15 'l!!strutura fs l uma str1ng de campo 16 "estrutura dd1cst -una estrutura ou tabela. ddic 17 "est r utu r e it -qualquer tabela 1nte rna com l1nha de cabe~al ho -like 1t . 18 -OK se ttab nlo t1ver l1nha dl! cabl!~alho '11k. 1l[ ] . -qualqul!r ta bel a 1ntl!rna . 19 20 read table pt 1ndex 3. 21 Jlt-lifnr 'XXX' . lIOd1fy pt t ndex 3. '2 23 endfonn.
Se urna tabela interns nao riverumalinha de cabecalho e voce quiser passer a carpa. criando uma linha de cabecalbc na sub-retina, pede tambem utilizar i sintaxe mostrada na prirneira linha da Tabela 18.3. Issa passa 0 corpo por referencia e cria um.a linha de caber;alha localmente na sub-rotina. Alteralioes feitas no corpo da ube:la iocerna dentro d2. subrotina sao imediacamente refletidas na original. A Ilstagem 18.9 iluscn essa sintaxe.
EN1lADA~
Lisfagem 18.9 Como passar uma tabela interna sem umo linha de
cabe~alho para uma sub-rotina e automaticomente cria r uma linha de
eobe<;olho
1 re port ztx1809. 2 .. Aqui, uma tabela i nt erna que nao t ell Imi 1i nha de ca belil l ho 3 l pasuda com l1nha de cab~alho 4 tables ztx1fal. 5 data: f t like ztxlfal occurs 5. -nlio tell uma l1nha de cabe'W alho
XXX
1030 1040
INluse ~
' ; A linha 4 define urna uea de trabalho global ,txl fal. Essa uea de trabalho eurna Stringde campo tendo a mesma estrutura que a tabela de ODIC ztxlfal .
' ..
588
o.
"prectse utf1i zar a Area de trablllho per-que
589
eli
n lo tee lIna linha de cabelial ho wr1te I ztx 1fal ~ l ifnr . 10 endloop. 11 12 13 form sl t abl es llt st ructure ztxlfal . 00 vocf pode utillzar:
l' IS 16
17
A linha 18 sobrescreve a linha 3 da linba de cabecalho local, Como. tabela intema foi passada por referencia, isso modifica 0 conteddo da eabela .intema original .
A linha 19 retorna
11ke it 11ke U[ read tab le pt 1ndell. 3. pt-li f nr 'XXX' . modify pt index 3. endfonn.
18 19
As linhas 9 a 11 escrevern 0 conterido dol tabela Interne, Como i t nao t em uma linha de cabecalho , a string de campo ztxlfal e utili zada como uma area de erabalho explfcita, A saida mostra que 0 conteedc se alterou. Se uma eabela int ema Dio tiver uma linha de cabecalho e voce quiser passar 0 corpo sem automaticamente criar uma linha de cabecalho na sub -rotina, p ede utiliz ar a sintaxe mostrada nas linhas dais a cinco da Tabela 18.4. Utilizando essa sintaxe, voce pede passer 0 ccrp c por referencia, por valor ou por valor e resultado . Se voce passar 1t por referenda, as alteracoes feius no corpo da tabela int eraa dentro da sub-retina imediatamente serio refletidas na original. Se voce passar it por valor, uma c6pia local de it sera criada - as alte~oes serac descartadas no final da sub-retina quando a mem6ria local de it for liberada. Se YOCe passar 1 t par valor e resultado, as alteralioes serso copiadas: de volta para a originalquando endf onn for executada, Uma instru~o stop dentro da sub-retina descartars todas as aItera'i0es para it e tra.nsferiri 0 conerole diretamen te para end-of-sal ecti on. A Listagem 18.10 ilustra esses merodo s.
1010
XXX
1030 1040
A linh. 4 define uma irea de trabalho global ztx'lfa l. Essa irea euma suing de campo que tern 2. mesma estrutura que a tabela de DDIC
ztxlfal.
A linha 5 define tabela interna it sem uma linha de cabecalho. A ~ 7 preenche a tabela interna com 5 linhas de tabela ztxl f al.
A linha 8 tnnsf:re
0
A linha 13 faz com que o corpo da tabela interna seja passado e automaticamente cria uma link de cabecalho para ele. 0 corpo e passado par referzncia, 'entio pt se toma um ponteiro para 0 corpo original e para a linha de cabecalhc local. structure . utilizada para tomar a estrutura da tabela interna conhecida para OJ. sub-retina. Sem ela, qualquer acesso pua urn componente cia tabela interoa causaria urn erro de sintue. As linhas 14 e 15 mostram as outras escolhas disponIveis para fazer a estrutura 1t conhecida dentro da sub rotina. A linh. 161hlinh. 3 de pt e a co10ca n. linh. de cabe..,lh o 1 0c:U. Sem a adi'iao structure na linha 13, essa linha tena causado urn erro de sintaxe. A linha 17'!tera 0 v.!or de 1i fnr na linha de cabe,alho. Com o . tabela intema ori~al nao tern urn;a, linha. de cabe'ialho, isso nao rnodifica nada fora da sub-rotin a.
EIITI.\OA~
Listagem 18.10 Como posser umo teb elo interne sem ume linhc de ccbecolhc para uma sub-retine .
.1 report ztx 1810. 2 .. Aqui. uma tabela Int erne que nl o tee III'Ia 11-nha de cab~alho 3 .. ! passada Sell! criar lJl'Ia lfnha de ca bt! ~al ho automaticamente t ables ztxlfa1 S data : 1t li lee ztxlfal occurs 5. "nlo t em ilna l1 nha de cabe~alho 6 7 select " up to 5 rows from ztxl fa1 into t able it order by l1fnr . 8 perlonll: 51 usin g i t , 9 s2 usi ng it. s3 using it, . 10 11 "ntei tout tab les it . 12 13 end-of-se le ction. 14 w rite : I 'In End-Of-Select ion'. 15 perfonn write1to ut tables i t. 16 17 fOnl s l usi ng val ue(pt ) like i t. pusa por valor 18 " voti! tarn be. pode ut 111zar: como it[ J. 19 data W like line of pt. l
590
591
you can also use: data wa like ztxlfal. data 'Il'a 11ke li ne of pt[ ] .
l ocal ztxlfal.
SI!
0
Will.
2' 25
76
27
com qu e uma e6pia separada cia eabela interna seja criada, enta o pt se refere a uma c6pia local cia tabela interns, 1i Ice enecessaria para dcfinir pt como uma tabela in tern a. Scm 1i ke, pt seria u ma varidvel simples e um errc de sintaxe ocorreria. A Iinha 18 mo stra a cutra escolha dispc afvel para definir pt como uma tab ela interna. A linha 19 defin e uma area de trabalh o local wa que tern a rnesma estrutura que uma linha de pt. As linhas 20 a 24 mostram as ou tras escolhas disponiveis para de finir urna arca de trabalho local par a pt .
28 2.
30 form s2 using pt li ke i t. passa por 31 data Wi like. line of pt . 32 read table pt in to Ill! in dex 2. 33 wa-lifnr "tyr o
A linha 25 Ie a linh a 1 de pt e a coloca em wa. A linba 26 altera 0 valor de 1i fnr 03 area de trabalho wa. A linha 27 sobrescreve a linha 1 de ee. Como a tabela intema foi pass ada por valor, isso modifica 0 cc n eeud c cia c6pia local. A original
pe rmanece inalterada. A linha 28 retorna a cc ntr ole para a linha 8. A mem6ria para pt liberada e a alterac;io eperdida. A linha cj traasfere a controle para a linha 30.
34 m di fy pt from Wi i ndex 2. 3S endfona. 36 37 form s3 changing value(pt}" like it. passa por valcr e res ultado
38
39 40 41
.
siiDI ~
42
43
stop .
endform.
46 47
45 form wr1tel t out tab tee 1t structure ztxl fal. leop at i t . wrfte / 1t - l 1f nr . 48 endloop . 49 endfam.
A linha 30 faz com que 0 corpo da tab e1a int em a seje passado por referencia e naa cria uma linha de cebecalbc p ara ele. pt agora se refere aoriginal 1i ke enecessario para definir pt como uma tabela intema. Sem 1ike, pt seria uma variavel simples e urn erro de sintaxe ocorreria.
A linha 31 define uma area de trabalba local w qu e te rn a mesma a estrutura que uma linha em pt .
1000 yyy
1020
1030
1040
A linha 35 reto:na.
AlAUSE ~
de DDIC ztxHal. A linha 5 de fine a tabela intern a i t sem uma linha de cabecalho.
A linha 7 reside na tabela interm com 5 linhas de tabela zt xlfal.
A linha 37 faz com que 0 corpo da rabela intema seja pass ado per valor e resultado, mo criando uma linha de cabecalbc para ele. pt agora se refer e a urna c6p ia cia original. 1i ke e necessaria para definir pt como uma tabela intema. Sem 11ke, pt seria uma variavel simples e urn err o
de sintaXe ocorre na .
A linha 38 defin e urna area de trabalh o loal wa que tem a mesma estrutura que uma 1inha em pt.
592
593;
A linh.a 39 1 Iinha 3 de pt e a ccloca em wa. A linha 40 altera 0 valor de lifnr na irea de trabalho wa. A linha 41 sobrescreve a linha 3 de wa. C omo a ta bela interna foi passadapor valor e resultado, isso modifies 0 coneeedo da c6pialoC2.1.
Urn erro de sintaxe em qualqu er lugar no programa extem c causara urn erro de tempo de execuc;ao, se ele estiver dent rc au fora da sub-retina extema. .
A linha 42 desvia da instru~ao endfonn - ela tr ansfere 0 controle diretamente para a linha 13. Isso faz com que a copia local seja
descartad a, Se a in s tru~o stop naa executar, endfonn fari com que a c6pia local sobrescr eva a original e a altera~o seja mantida,
A linha 15 rraasfere
0
As duas permitem parimetros formais digitados. As duas p ermitem que as parametres sejam passados par valor, par
valor e resultadc e par referencia, As duas permitem defmic;6es de variaveis locais.
A Figura 18.5 ilustra as difere ncas en tre sub-retinas exte mas e internas .
Fig ur a
18 :'jj
A linha 45 faz com que a tab ela intern e seja passada por referzncia e uma linha de cabecalhc seja auto maticamen te criada.
As linhas 46 a 48 escrevem 0 conreudc da tsbela interna, A anica altera~o esti: na linha 2 e foi executada em 52.
mesmc area
reportttx1811 .
tcbles zlxllo1 dota 11 .
CJ
- I -... CJ+--ld;fe..nte
demem6ria
repartzix1812.
tabl., zlxllo1. dote 11 .
c:::J
lEUO "
FigurA 18 4
insnyo perfom que a che rne . A Figura 18.4 ilustro ume sub-rotina enema.
~ po rt
=r
~
?
endf onn.
Quando urn perf orm ch ama um a sub-rotina enema 0 pragrama en ema que con tem a sub-retina e carregado.
Uma vwveI global que tern' 0 mesma nome nos dais programa.s e ~ defin ida utiliza.nda a instru~o tab les nos dais pragramas e co mu m aos dais pragramas. U ma alterac;ao para essa variavel em um prcgrama afeta 0 ou tre, Na Fi gura 18.5, a uea de memoria chamada ztxl fal e compartilhada entre as dais programas. Qualquer alteralja.a nessa uea de tnbalho evista imediatameme pdas dois program..s. As listagens 18.11 e 18.12 ilustram uma cbam ada a um a subrotina
externa.
Se 0 parametr o formal for digitado, urn parametro real oao corresp90~ dente causm urn erro de tempo de executjao em vez de urn erro de sint axe.
..
e
5 ztx lfat-1 1fnr" '1000'.
594
Resu m o
Os parlmetros podem ser passadcs de tre s maneiras: por valor, par valor e resultado, e par referencia. A sintaxe na instrucfc f onn deter-
!NlRADI~
1 r eport ztx 1812 . 2 tabl es ztx lfal. 3 data fl(3). 4 5 fonn 516 fl .. 'ZU' , 7 ztxlfal- l1fn r '9999', 8 endform.
mina qual meeodo e utilizado. 0 coepo deuma tabela interna pode ser passadovia usi ng au chang; ng.
corpo (e a linha de cabecalho, se pre sence} pade ser passado via tables . Se a tabela intema nao tiver uma linha de cabecalho, tables cria uma dentro da sub-retina.
Para acessar os ccmpcnectes de um a stri ng de camp o ou sub-retina conhecida dentro da sub-retina, a estrutura deve ser declarada na instru~io form. A s sub -rotiD.as extemas sao muito semelhantes is inremas. Com as sub-retinas externas, as variaveis definidas utilizand o dat a sao conhecidas somente dentro do programa que as define. As varidveis tendo 0 mesmo nome definidas utilizando ta b1es sao comuns aos dais programas.
SAlol ~
fl AM l 1f nr .. 9999
INllIS~ ~
N os dais programas, a linha 3 define urna variavel de trabalho global fl. Du as areas independentes de memoria sao definidas, urna para cada programa..
Em zt . ISll, a linh a 5 atribui urn valor de 1000 a zt.1fal-' ifnr.
Em ztx1811. a linha 6 pa ssa 0 controle para a linha 5 em ztxlB12. Em ztx1812, a linha 6 atribui ZZZ em zt x1811 MO e afetada.
P&R
Por que precise conhecer todes as vana'ioes de passagem de uma tabela intema com e sem linha de csbecalho! T odos os casas nao sao ahrangidos por apenas algumas dessas varia~o es ? Se voce eseivesse meramente eriando pr ogram as em ABAP/4, nao precisaria conheeer todas essas variac;6es . Voce poderia eodificar a maioria de seus programas com ap enas algumas variacdes simples. Entretanto, a m aior parte do tempo de urn programador em ABAP/4 norm alrnente n ao e gasta na criac;ao do c6digo em ABAP-e gasta na leitura . A pass agem de tabelas intern as para sub -rotinas e urn assunto complicad o e 80% de seu tempo serao gastos len do 0 codigo qu e faz essas coisas complicadas, enquanto menos de 20% de seu t emp o serao gastos .crian do seu pr6prio ccdigo. Esse triste desequ iHbrio determine que voce deve aprender as varia~6es utilizadas pela SAP, para qu e possa gastar menos tempo arranc an do cabelcs enquanto t en ta entender 0 c6digo de SAP. 15 50 deixara voce com mais t empo para escrever se~ p r6p ri o codi gc e com mais cabelo.
afeta as dais
Em ztx1B12, a linh a 8 retorna 0 controle para a linha 6 em ztx1811. Em ztxIBll, as linhas 7 e 8 escrevem as valores de fl e ztxl fal- 1ifnr. f1 permaneceu inalterada, enquan to 1i fnr foi alterada.
Utilize a instrulioo local dentro de svb-rctincs extemcs perc evitcr comportilhomento de areas de trobolho de tobelos .
596
Workshop
que aprendeu oeste capi tulo. A se~ao Teste oferece perguntas para ajudar a solidificar seu entendimenta do conteudc abordado e a se<;ao Exercicio permite que voce pratique 0 que apren deu. Voce ped e encontrar as respostas is perguntas do Teste e ao s exercicios no Apsndice B, "Resposras as perguntas e aos exercrcics".
Teste
1. Quais sao as parametres que aparec em na instruc;ao form chamada?
2. 0 que causa a passagem de uma varidvel de tip o de dado au compri-
menta errado para urn parsmetro digitado? 3. Quando voce passa urn pargmetro por referencia, nova mem6 ria e alocada para a valor? 4. Q ue efeito as adi coes using fl e c" hang ing fl tern na maneira como
as p arametre s sac pass ado s?
Ii 19
Modularizalao: modulos de funlao,.Parte 1
Depois de conduir eseecapfrulo, voce sera. capaz de: Entender e utilizar a instru~ao i ncl ude
Criar grupos de fun~.o e m6dulos de fun~.o
D efln lr parame tres de importacao, expo rta/iao e altera/iao
Exercfcio 1
Execute
0
ramet ers e execute-a novamen te. Descreva a sequencia de eventos que ocorre em cada case .
ENlliDA~ Lista ge.m 18.13 Expllque a seqllenclo de eventos que ocorre neste
prcqrcmc
report ztxl813 no standard page headfng . ztx18 13 data: flag, ctr type 1.
parameters pl.
i nf t ia11 zat ion. flag '1'. write : I 'in !nitialization'.
stert-cf-se 1ect 1on. flag .. '5'. write : I 'i n Start-Of-Selection'. I 'pt >', pt.
tcp-ot-peae . add 1 to ct r. op write: I 'T of page, fla g . ', f l ag. 'ctr .' , ctr.
milO ,..
NOVO ...
ul t ne.
;'
.: .
~?~V;.~.
h"p://www.compus.com.br
598
599
5
6
ztxI903 .
8 top-of - page. 9 write : I ' Company Codes for Vendor ' . p_l 1f nr . 10 ul tn e.
Urn programs do ripe i nio pede cen ter insrruc ces parciais nem ia completas.
A inStru~o 1ncl ude copia 0 conteadc do programa include no p rogram a de inclusao. 0 ccdigc do program a include copiado como esti e substitui a instruc;ao in cl ude no tempo da gera~ao de programs. A Figura 19.1 ilustra a ins t~c;ao 1ncluee.
. F Igura 19 1
R eport lA.
Programo ZS
Progrbma
ze
f or Vendor 1000
No moment o cia ge",ao de zt xl 901, a linha 5 copia 0 ccdigc do program. ztxl902 pas. zt xl 901. 0 codig c inserido substitui a linha 5.
c6digo-fonte.
Re port lA write 'Hr. Write 'There '.
Ainda dur ante a gera~ao de programa de ztx1901, a linha 6 copia 0 c6digo do program> ztx l903 par. ztx l9 01. 0 c6di go inserido substitui a linha 6. Quando 0 programa executa. zoc1901 comp onase como urn nnicc prograrna. como se as linhas de c6digo dos programas incluidos tivessem sido digiudas direeamecte em ztx 1901.
Na Figura 19.1, za eo programa de Inclusao. Os prcgramas include sao zb e r c. No mem en to em que za egerado, 0 ccdigo-fonte para zb e zc einserido em za, f:a.z.endo a programa ser mastrada na part e inferior d.a figura. As lisragens 19.1 .19.3 ilustram prognm as include.
A SAP utiliza includes para reduzir a redundincia de c6digo e dividir prognmas muito gnndes em unidades men ores.
101
Enquonto visuolilO um progroma de inclusOo, voce pede observer a ccntecdc de um progromo inclufdo, simplesmente dondo um clique duplo em seu name . Per exernplo, enquonto edito ztx1901 no tela ABAP/4 Editor: Edit Program, de um clique duplo no no me ztx1902 au em ztx 1903. 0 pragro ma incluldo ser6 exibida imediota mente.
modules de func;iio. Se a funcionalidade que voce exige j' oiio e abordada por
esses rn6dulos de funiio fornecidos pela SAP , voce tambem pod e coo seus
Se vocA quiser ver a c6cligo resultonte com fad e s a s inc ludes in-line SINCLO No te lo de selecoc para O, expondidos, execute a programa R RSINCLOO, no campo Program, digite a nome de um progromo que inclui outros progromos. Coloque urn X nos compos Program Source Code e Expand Include lines e pressione Execute. Umo listo do c6digo-fo nte resultonfe sem exibido na proximotela .
NY O O.... Code grupa de ,fvnl;oo e ca nhecido pe r urn ;~entificodor ~e quotro corode~s lWiO" chomodo 10 de - ropo de fun~60 . Se voce cno seu pr6pno grupo de fun<; oo, g deve escclher um ID de grupo de fvn~oo qu e ccmecc com Y ou Z. 0 ID deve ser exotcmente de q uotro corocteres de comprimento e ndo pode confer lccunes nem cc rccteres espec lcls.
Um module de fu n~o o e a ultimo des quctro vnldc des principe is de rncdulcriza~oe do ABAP/4 . Ele e multo semelhante a uma sub-refina extema sab esses
~o
Ambos existem dentro de urn programa extern o. Ambos ativam os pardmetr os a serem passados e r etornados. Os parametres podem ser passados par valor, par valor e resultado, au por referencia. As diferencas importantes entre m6dulos de fun/iao e sub-retinas externas sao as seguintes: Os m6 dulos de fum;ao tern uma tela especial utilizada para definir parametres - os parametres nao sao definidas via ins tru~6e s de AJ3AP/4. .
Nos ve rsc es onferiores a 3. 0F, 0 sistema de R/3 permite que voce es pec ftqoe um ID de grupe de fum;ao menor que qoctrc carocteres, au utilizer espccos denfro de le. Enfretonfo, 'loci n50 deve fozer lase, porque as ferrcmemcs que monipulam m6d ulos de funlioo se ccrnpcrtcrec irregulormenfe co m esse gru po de func; o. o '
Vamos partir do pressuposto que nenhum gropo nem m6dulo de fun~:ia ainda existam. Voce ccmeqa crisndo um m6dulo de fun~ao. Quando cria.urn m6dulo, sistema primeiro peclir.i a voce um ill de gropo de fun~ao . Esse ill informs ao sist ema onde armazenar 0 modulo de fun~ao. Quando voce fomecer olD, e se ainda ele.nao existir, 0 sistema criardi Urn programa principal Urn include superior Um inc lude
As areas de trabalho tab l es nao sao compartilhadas entre 0 modulo de fun~ao e 0 programa de chamada. Para chamar urn m6dulo de fun~ao, e utilizada um a sin taxe diferente da empregada para chamar urna sub -retina. Para sair de urn m6dulo de fun CJao, eueilizada a instrucio raise ern vez de check, exi t au stop. Urn nome de module de funCJao tern um comprimento minim a pra rico de tres caract eres e urn comprimento maximo de 30 caract eres. Os m6dulos de fun~ao de cliente devem com eliar com Y_ ou Z_. 0 no me de cada m6dulo de fun/iao eunico den tro 40 sistema de R/3 int eiro.
ux:x
e
602
Figuro 19 3
Esse 4 0
re/oclonomento
A fundion Ubrcry
Injfjol~ .
hier6rquico dos
Proqmmg Principa!
componMmsde urn
grupo de luno.
MQclulQ$ de funco
lfg ldU01
functionz tx1901.
write: I tir. endfunction.
lfg ldU02
fun ction :r. ~
tx1902.
endfunction .
TEllO r
NOYO'"
ljg tdtop - eccnhecdc como 0 fop indude. Dentro dele voel!pode cclcc cr defin i1jOes globaisde dodos. Estossao definic;6es
KOYO .....
ltUO
0 segundo progromo inc:lude - lfgtduxx - econheddc como UXX.A voce noo e permitido mod ifieor 0 uxx. 0 sistema ovtomaticomente colcccro umo instruc;co i ncl ude no UXX porn coda m6dulo de func;oo que voce crier nesse grupo de fvnljoo. Para 0 primeiro m6dulo de fvn~oo, a instruc;6o 1nelude lfgiduOl ser6 inserido no uxx. Quondo ....oce crior um seg undo m6du lo de fun~co nesse grupo, 0 sistema od idonor6 umc segundo instru<;Cio: i ncl ude lfgidu02. Todo vez que voc~ cdlcioncr urn novo m6dulo de funr;o o 0 0 grup o, a sistema cdlclcncrc urn novo instruil;co 1ncl ude pora o UXX. 0 nnmero do i ncl ude ser6 01 para 0 prirneiro rn6dulo de fun<;Oo criodo dentro do grupe, 02 durante 0 segundo, 03 para 0 tercelro e cssim per dionte .
r.
Por exemplo, para acessar 0 programa principal do grupo de func;ao, escolha 0 botao de opc;aoMain Program e entio pressione 0 bat i o Display. 0 program' principal de grupo de fun'iao ztxa emostrado llll Figura 19.4.
F igura 19 4
de futHj:O ztXQ. c
Dentro de cada include mencianado no UXX esta a codigo-Icare para urn m6dulo de fun"o.
Acessando a bibliotecQ de
TWO ,.
NOVO ...
fu n~ao
Os grupos de runr;oo slio onnozenodos em urn grupo de tobelos dentro do banco de dodos chcmado biblioteco de funr;oo . Acessondo a biblioteco, voce Jcmbem pede ocessor os ferramentos pelos qua is voce mon ipulo m6d ulos de func;o o e grupos . Para ocessor 0 btbllctecc de funr;co do Development Workbench, pressione 0 bateo Function li brary no berra de ferramentos Applicotion. 0 c6digo de tronsor;oo
e
A Figura 19.5 mostra 0 UXX p.n
0
5E37.
Cada um des compon enres de urn grope de func;ao pede ser acessado a partir da Function Library Initial Screen mostrada na Figura 19.3.
604
605
urn m6dulo de func;ao antes de trabalhar nele, alterar 0 c6digo e entao executar uma verifiCa~o de sintaxe nesse m6dulo tinico antes de reati vs-lo. Dessa maneira, os demais m6 dulos de fu nc;ao ainda podem ser cham ad os, mesmo se voce estiver trabalhando em urn deles.
fun~60
Na Figura 19.5, voce p ade ver esse grupo de fun~o zt xa que contem dois modules de fun~ao: z_t x_1901 e z_tx_1902. a primeiro esta ativo, 0 segun do nao (seu nome e comentado).
fu defini<;5es de dadas denerc de modules de fun,aa sao semelhantes l.quelas de sub-retinas. Dentro de urn mod ulo de fun):ia J utilize a instrllc;ao dat a para definir variweis locais que sio reiniciilizadas toda vez que 0 mod ulo de fun~io e chamado. Utilize a instrucfo stat i cs par a defmi r varUveis Iccais que saO alocadas na primeira vez que 0 m6dulo de fun~o e chamado. a valor de uma variavel esutica e lembra do ent re chamadas. Defina parfmecros dentra da interface de m6dulo de fun) i o para criar deini~oes locais de varifveis que sao pass adas no m6dulo de func;i o e retcrnadas dele (vejaa pr6ximase,aa). Vace nao pade utilizar a instI11c;ao 1oca1 dentro de urn m6dulo de func;:ao. Em vez disso, parimetros de int erface glab alizados servem para 0 mesma prap6sita. Veja a seguin te seliaa sa bre definic;ao de dados globais para aprender sabre parimetros de interface globais e lccais.
fun~a o
fu n ~a o
Urn m 6dulo de fun~o deve ser ati'lJado antes de ser iriiciado. H:i um. batao Activate na tela Fun ction Library Initial Screen. Pres sionando-o se ariva 0 modulo de fun, aa . Q uando 0 modul o de fun~ao river sido criado pela primeira vez., a instru~o i nc1ude para de dentro do UXX sera comentada. Acivar 0 m6dulo de fun~ao faz com que 0 sistema remova a comennric da instruci c i ncl ude. a m6 dulo de fu.n~ao estara entao disponfvel para ser chama do de outre program a. Se voc~ alterar 0 c6digo demro do m6dulo de fun c?o, ele Ilia p recisara ser ativado ?ovamen te. Por ou tre lado , reativar naa causard qualquer dane.
Se quiser, voce pede desativar urn m6dula de fun,aa. De ABA:F{4 Function Library: In itial Screen, escalha 0 caminho de menu F un ction Medul e- > D eactivate. A escolha desse caminho de menu insere urn come ntdrio na instru~ao i nclu de para esse m odu le de fun):io dentro do UXX. Todos os m6dulos de fun~ao que pert encem a urn de ice grupo existem dentrc do programa prin cipal : sapl! gid. Por causa disso, urn erro de sintaxe em qualquer urn desses m6du los de fun~ao fara com que 0 resto se tome inoperante; a execu)ao de qualquer urn deles resultani em urn erro de sintaxe. As fun)o es Ac tivate e Deactivate permitem que vace trabalhe em qualquer mo du lo de fun~ao unic o de urn grupa sem afet2.f 0 resto. Voce pade desativar
Pore passor pcrerretres pore urn m6dulo de funo, voce deve definir umo TElMO interface de m6dulode fun~o . Esse interface e c desc~oo dos porometros que sao pcssados e recebidos do m6dulo de func; o. Ela e tcmbem simplesmente ccnhecidc o como interface . No restante deste cap/tvlo, n6s vamos nos referir a interface do m6dulo . de fun~ao simp!esmente como interface.
Para defmir parjmetros, voce deve ir para uma de duas telas de defi.ni~o de parlmetro: Import/Exp ort Parameter Interface Table Paramet ers/ Except ion s Interfa ce A tela Impa rt/Exp ort Param eter Interface . mostrada na Figura 19.6. Nes sa tela voce pede definir 0 seguinte: Os parimetros de importacac O s parfmetros de exportacic as parimetros de altera/Sao
606
607
A tela Imporl/Expott
Porometer Interfoce.
1Bl!O ~
NlO... O
passodos no m6dulo de fv ~oo do progra mo de chamodo . Esses vclcre s originom foro do m6d ulo de func;oo e se o importodos pare cleo
58
NOYO ... lFlMO JII"" retomados do m6dulo de fun o. Esses vclcres se originom de dentro do m6clulo de funr; oo e sao exportodos pore fora dele.
mMO " que seSo pcssod os no m6d ulo de func;oo, olterodos pelo c6d igo dentro do m6dulo de furn;oo ee ntec retom odos. Esses volores se originom de foro do m6dulo de func;eo, que a s recebe e a s passe de volta.
1i10 ...
Pcnimetros de tabe/a sOc tc belcs internes que sOo passcdos pore 0 m6d ulo de fun~co, a lterados dentro de le e retomodos. As tobe/os infernos devem see definidos no progromo qu e cha ma . Umo exc~oo e um nome para urn errc q.ue ocorre dentro de um m6dulo de fu no . As exce~6es soo descritos em detolhe no pr6xima re~oo .
Passando pardmetros
as metodcs pan passar psrjmetros para modules de funliao sao maito semelhante s aquel es para passu parfmetros para sub-retin as enemas . Par padract--. Os pargmetros de expcrtacfo e impona~ao sao passados po r valor.
A tela Table
As tabelas inremas sao p~sadas par refereacia. Voce pode fazer com que a importacjo, exportac jio e parametre s de alteraiiio sejam passades po r referenda, colocando um a m arca de verifica~io na caixa d e selecac Reference na tela Impo rt/Export Parameters (veja a Figura 19.6).
Voce digiu 0 nome do parimetro na primeira coluna e os aeriburos do parimet ro nas colunas restantes. Digit e urn parimetro por linha.
;. -"', ;",t'
~~,.
'F
.~1r -r'
Oil19, MDDUUlUZA(AO,M6DUlOS DE fUN~ D, PAm1 "_"".,r,.--'1'"~"I:,Id' ij.t:H:::D~ E ~~:.D::r:AS::A:'~,,'",-----------------------~--l_--------------------=:::.:::::=~:::::==:::'::3:=='-' 609 ~:,; " A.:cM 11 : :; : AP 4 ~.:;
se a pargmetrc passadc
e do
parimmo de m6dulo de fun <;,o nao digitado, 0 parimetro de m6dulo de fun~o toma-se tipo c com comprimento 12. Parametres digitados para m6dulos de fun!jio seguem as mesmas regras que parimetros digitados para sub -retinas. Hi duas maneiras de especificar parametres digiudos na tela Impo rt/Export Parameters: Especificar um tipo de dado de ABAP/4 na coluca Reference Type Especificar 0 nome de uma estrutura de DDIC au componente deuma .estrutura de DDIC na coluna Reference Field
especificar uma propcsta, 0 sistema automaticarnente colocard urna marca de verificac;i o na coluea Optional. .T odos os parlmetros que voce define na interface eambem aparecem na pan e superior do c6digo-fonte dentro de comentirios especiais. Cada linha especial de comentirio comeca com os caraceer es "", Toda vez que voce altera a in terface a sistema automaticamente atu aliza esses comentarios especiais para. refletir suas alteracoes.
~ CUI dado
Nco a ltere nem exduo .esses co mentOrios; eles sOo gerod os palo sistemo. Se voce os alteror, 0 m6d ulo de funo pode nco funcicno r.
Na Figura 19.8, voce pode ver que pt, p2 e p3 sao pass adcs por valor.
Figura '9
8
Voce nao pod e ut ilizar as dois meeodos ao mesmo tempo para um Unico parimetr o . Voce deve utilizar ou urn ou outre. A o utiIizar 0 prime iro me todo, simplesmente especifiqueum tipo de dado de ABAP/4 n a cc luna Referen ce Typ e na tela Import/Export Parameter,"Po r exemplo, na Figura 19.8, pl e p2 sao paramet res digirados que tern urn tipo de da do definid c 0 0 ABAP/4 como i (iaceiro} , P3 tambem e digitadc, ten do um tipo de dado p, 0 tipo i e um tipo de dado de co mprimectc fixo e p ortanto tern urn comprimento de 4. a tipo p eurn tipc de dado de comprimento varhvel e assume 0 comprimento e 0 mimero de casas decimals do pardmetro que e . passado para ele. Ueilizacdo 0 - segundo metodo, sim plesmente di gite 0 n ome de uma estrutu ra de Data Dictionary na cc lun a Reference Field. Os parametres sao defmidos como se voce tivesse ut ilizado a adiC;ao 1i ke na instruC;a~ fom em uma sub-retina enema. a s paramerro s tamb em podem ser opcianais e a eles podem ser fomecidos valores-padrao. Para fazer uma importaC;ao de parimetro opcional, coloque urn marca de verifica~a na coluna Optional (veja a Figura. 19.7). Se m er uma imp ort ac;ao de parimetro c pciccal, voce nao ted de atribuir names a de na instruc;ao cal l funct i on quando cham ar 0 module de func;ao. as parametres de exportacio serio sempre opcionais. Por isso, eu quero dizer que voce nao e obrigado .a codificar nenhuro pargmetrc de expona~o na instrucao call function. Por exemplo. se 0 modulo de fun~o z_xyz retoma ues parimetros de exporta~io, el , e2 e e3 e voce quer s6 e2, en tia 56 codifiqu e e2 na instruC;io .cal l function. Simplesmente omita 0 resto . Para atribuir urn valor padrao para urn parimetro de imPOrta~ao, digite . um valor na caluna Proposal, cenifique-se de colo c.r as valores de caract ere entre ispas simples. a s names de variavel sy tambem sio permitidos. Se voce
~
.,
...
",-
_t1.. z tllf1oo.
ut",.h... ,
......,...~
c6digo-fonle.
or, .........,u1
1_.1I1C-
.IIlUm1J....!rrE
"niLT
Ch o rna odo
Para chamar urn m6dulo de func;ao, voce codifies a instru~io call function . a lux o de contrcle esta dentro cia Listagem 19.4.
... Ustagem 1 9.4 Este pregrcma executa uma chomodo simples pare urn m6dulo de fun<;c o
OOilDA ,.
2
1 report
zt xl904.
3 write: I ' B ore Call' . ef 4 call funct i on ' Z_TX_1901' . 5 wri t e : I ' After Call' .
610
611
Utilize a ins tru Cjio call f uncti on para transferir controle para urn m6dulo de unCjao e especific ar puimetr os. A Figura 19.9 ilustra como as pao. rimetros sao passados e recebido s do m6dulo de
funcsa
After Call
IlI.luSl ~
A Iinha 4 transfere controle para. 0 ccmecc de modulo de funlSi a 2_ tx _1901 . Nesse exemplo, 0 m6dulo de funljia exine dentrc do grupc de run"o ztxe, sap! atxe e0 program. principal desse grupo de fun" o e age como container para z_t x_1901. 0 ccdigc dentro do m6dulo de fun"o executa. A Ultimalinha do m6dulo de fun~o reto rna 0 conerole pan a instnl~o call function. 0 processam ento continua com a pr6xima instru/iao depcis call function. .
par6metrDs
sOc
para valores exportodos pa re 0 mOdulo de func;60' 0 atribuiQio e do dlreito pore o esquerda. para valores import dos pora 0 m6d ulo o de fun o, a otribuio Ado esquerdo poro o direi'o.
o esq uerda de _
names de par6metro
vari6veis
0 direita
Siotaxe para a iostrUl;QO call f unct j On en Esta e a sintaxe para a in stru~o cal l functi on:
,...
Z :a::-
><
m
[tables
p3 r3 ] p4 it .. . ]
onde:
de fun,ao.
.'
vI a v3 sao as variaveis au nomes de strin g de campo definido~ dentro do programa que chama. .
euma tabela interna definida dentro do programa que chama. n e qualquer inteiro literal; n nio pede ser urna variwel. xl eurn nome de excecso levann dc dentro do m6dulo de funtSao.
tt
Na instru~o call functi O"J exportatS0es e importacoes existem do ponto de vista do pro grama. O s valores que sjc exportados par call funct i on sao import.dos pelc modulo de fun"o. Os valcres expomdos do m6dulo de funfiao sao impo rta dos pela instrut;i o call function. A esquerda do operad or de atribui t;ao (-)J esta.uma lista dos nomes de paramet ros defmid os na int erface do m6 dulo de funt;io . A dir eita, esti o as variiveis definidas den tro do programa de chamada. A atribui~ao depois de: export; ng ocorre d~direita para a esquer da.. A atribuiCjio depois de im port; ng ocorre da esquerda para a direita. A atribuit;io depois de changing e tables sjo bidirecionais. Antes da chamada, a atribui~ao 6 da direita para a esquerda. No retorno, 0 valor de retorno e aeribuldo cia esquerda para a direita. Vamos utilizer a Figura 19.9 como urn exemplo. Quando voce chama 0 m6dulo de funtSao Z _XXX, a valor de varidvel v1 eatribuldc ao parametr o p1 e 0 valor de varii vel v2 e atribuid o a p2. 0 ccntrcle entao 6 rransferidc para 0 m6dulo de run , ao. N o retorno, 0 valor de p3 e atribufdo a v3.
Os seguinte s' pontos se aplicam: T odas as aditSoes sao opcionais. call f unct i on e uma instru tSao especrfica. Nao coloque pontos ou virgulas depois de parimetro s ou Domes de excetSao.
Neste ltvrc, 0 ferme "pa rflmetres de importoo" por si mesmc (se m referendo , se far do ponto de vista do progroma a u m6d ulo de func;6o) refere-s e 0 por6metros impo rtodos no m6du lo de funo. termo "parametros de exportol1co se m uma referenda refere~se a parometros exportodos do m6d ulo de fun o.
0 nom e do m6du lo de funtSao deve ser codificado em tetras maru.sculas. Se for codificado em minusculas J a fuot;aonao sera localizada e urn dump curt o acont eceri.
612
A Listagem 19.5 cham. z_tx_di' e pass. parametres. A Figura 19.7 mosera a tela ImportlExport Param eters pan. esse modulo de fun~ao e a. Listage m 19.6 mostra 0 codigo-fonee para ele. .
t ,
report ztxl905. parameters: apt type 1 defa ult 2. . op2 type 1 default 3. . data rslt ~y;J1! p dec1llllls 2.
call function 'Z_n_DIV'
exporting
pI p2
importing
- opl op2 r sl t ,
A linh. 6 transfere controlepara 0 m6dulo de fun"o Z_TX_D I Y. valor cia vaxUvel opl ~ arribuldc ao parimetro de importacgc pl e 0 valor de op2 ~ arribuldo ao pardmetro de impcreacac p2. Na tela Export/Import ' Parameters, urn Reference Type eespecificado para. esses pargmetros, o que as terns parfmetros digitados. Como esses parametr es sao digitados, eles nao obtem seus atributos tecnicos de pI e p2. Em vez . disso.os tipos de clados de opl e op2 devem corresponder aos tipos de dados de pl e p2. opi e op2 sao definidos como inteiros, po n ant o os tipos de dados correspondem. P3 ~ tipo Pieurn parimetro parcialmence digitado. Ele obtem seu comprimento e ruimer c de de cimais de rs lt. Os vaJores de opl op2 sio transferidos para 0 m6dulo de fonlj.ao e 0 controle e transferido pan a linha 1 daListagem 19.6.
p3
0 modulo de funl;jao " reeom e a con trole para a lic.ha 6 da listagem 19.5.0 valor de p3 eatribufdc il. varidvel rsll .
rslt .
13 write : / opl.
A liaha 13 escreve
l Local i nterlace:
4 5 6 7 ."'fr
Pressione 0 botoo Pattern no tela AW/4 Editor. Edit Progrcm para inserir automaticomente 0 instruo _cal1 f unct io n em seu c6digo. Voce sera perguntcdo sobre 0 nome de m6dulo de func;6o e ovtomaticci"niente ele coclificora 0 lodo esqverdo de todos as atribuies de porometrode inte~ce pore voc6.
10 ,3 ,1 / ,2 .
11 endfunction.
o c6digo na Lisragem 19.6 echamado da linha 6 da Listagem 19.5. o c6digo na Listagem 19.5 produz esta saida:
2 /
3
0.67
Na Lisragem 19.5, as linh as 2 e 3 defiriem duas varifveis, op1 e op2. C om o essas varidveis sao definidas. utilizandc a instru~ao par amet ers, o ususrio ~ solicitado a digiur valores para. elas quando 0 programa e executado. " . A linha' -4- define uma varidvel nomeada rs lt ripo p com duas casas decimais. .
Developm ent Workbench, pre ssion. 0 bode Function Library na barra de fem..menus Application. A Fun ction Library Initial Screen emostrada (veja a Figura 19.3) . 2. Digite 0 nome de seu modulo de funl;jao no campo Fu ncti on Module. nome deve comeear com Y_ ou Z_. 3. Pres~ione 0 batao Create. A tela. Function Mo dule Cre a.te: Administration e mostrada (vej Figura 19.10).
1.
D. tel. de ABAP/4
~.
614
615
4. Digir e 0 nome de urn gropo de fun~o no campo Function Group. . n ome de grup o de fun~ao deve ter de quatrc caracreres de comprime n ta e deve comecar com You Z. 5. .D igite urn 5 no campo Application. Esse campo e utilizado para indicar qual a :irea de func;ao que utiliza a modulo de fuoc;ao. Nessa funcionalidade nao e utilizada por nenhuroa area fuocional, trata-se simplesmenre de urn exemplo, eneao qualquer escolha servird, (5 .
I I
chamar seu m6dulo de fun~ao e tentar exibi-lo. Cne um progr ama como 0 mostrado na Lisragem19.5. Dentro de seu programa, certifique-se de c?difica.: o nome do m6dulo de fun~ao em letras maiusculas. Caso contrano, voce obtera urn dump curto, porque 0 sistema nio sera capaz de loealizar 0 m6dulo de
fun, ao. .
Utilize 0 Object Browser perc lister as mo dules de fonr;60 que \ICC! locol Pdv. ObjBd s e pressione 0 botec Display.
Agora stria urn boa hora para criar u:". pro~a de AJ3AP/4 a fim de
Re_umo 5
I
I
I
\
Ve cE pade utilizar a instru~ao include .pa~a dividir seu c6digo em partes menores gerenciaveis. Os programas include :~m u:n pro gram a do ripe t , Seu codigc ecopiado para 0 programa de mclusao no ponto cia. instrucao i nclude e a substitui completament e.
Os modules de funliao sao unidades de modularizaliao com nomes especificos que podem ser charnadosa partir de qualquer pr~~ama em todo 0 sistema de R/3. Eles armazenam 0 c6digo que eutilizado par
mais de urn programa . Urn gropo de funlSao euma colecao de prograrnas e tern uma est~tura predefinida. Todos os n0I11:es de progr.ama dentrc do g~po contem 0 ID do gropo do funljao de quatro caracte res.
14. Por fim, para ativar seu m6dulo de fun~ao: pressione 0 bono Activate na barra de ferrarnentas Application d.a. Fun ction Library Init ial Screen.
616
617
A interfa ce de urn m6dulo de funfjao contem as definicoes para . parametres de impcrtacao, expcreacso e alceracao, assim como a documentacao para excecoes configuradas dentro do module de
fun~ao.
Parametres digitados e njio digitados pcdem ser especificados e passados por refersncia, p er valor au por valor e resultado.
I Fa~a
Utili e possoge m pa r refe ~ ncjo pore z pardmetros de importOl;fic . Emois efidente . Ten ho cuidado quando uti Jiz6~ lo co m param etre s de exportocdo. Os volores de pordmetros po r referend a seo cltercdce imediotomente no cham ada. Se voce alteror parametres de
exportccec antes de emitir 0
ainda muitas em utilizaclc no sistema de R/3. Tamb em e mais facil ent ender modulo de fumiao se voce soub er como as sub-retinas extemas funcionam. Em vez de sub-retinas externas, utilize medulos de funt;io. include deve ser utilizado para simplificar a estrutura do Sell programa e agrupar componen tes sem elhant es. Eles nac devem ser utilizados como conteineres para c6digo reutilizsvel que ~ inc1uido em rmiltiplos pragrama s. P ar exempl o, voce pode colocar todas as declsracoes de seus dados em urn i ncl ude, seus evento s em outre, suas sub-retin as em urn terceiro e suas chamadas para modules de fun~ao em urn quarto.
Nao a ltere as coment6rios gerodos pelc sistema no.porte superior do c6digo.fonte do m6dulo de func;oo.
o
o
Wo rkshJ./.p oj.L
Como decide em qual gropo de fun~ao colocar urn novo m6dulo de fun~aa? Quando dev o criar um nov o e quando
reutilizar urn existente?
Coloque m6dulos de funt;io que tem fun cionalid ade semeIhan te no mesmo grupo de fun4j:ao. Par exemp lo, vo ce pede colocar todos os m 6d ulos de funli3.0 que calcularn depre ciacac em urn grupo de fun<;ao, todos os qu e executam fu n4j:oes de calendaric em outro gro p o de fun4j:ao e aquel es qu e ofere cern interfaces de comunicacao externas em urn terceirc.
instruc;oo
configurcdo, voce retc rncre , mas as vclc res j6 tere c side olterad os no progrc mo de chama da .
Oocumerite todos os excecees no interface de m6dulo de func;oo e documente todos os pon5metros no componente Documentotion do m6dulo de funJioo. Solve seus dodos de teste, de 'modo que voce posse testor novomente seu m6dulo de fvnc;oo depois de modificoc;6es que utilizom os mesmos dodos.
Nao utilize stop, ext t ou check dentro de um m6dulo de func;oo. (check e ext t nee re presentom problema se estiverem dentro de um de loop no interior do m6dulo de func;oo.)
...,----_-'--
o Wor kshop
oferec e duas maneiras de voce verificar 0 que apr endeu oeste capitulo. A se<;ao Teste oferece perguntas para ajudar a solidificar seu enrendimento do con eea do abordado e a se4j:ao Exercfcio permit e que vo!=c prat iqu e 0 que sprendeu. Voce pede encontrar as respostas as perguntas do teste e aos exerclcios no Apendice B, "Respostas as pe rguntas e aas exercfcios".
Teste
P&R
Co mo decido se utilizo urn include, uma sub-r~tina interna uma sub-rotina extema OU u~ modulo de fun~o para implementar meu c6digo? Se. ~ c6digo nao fa.r u:ilizado par n enhum outre programa, ,utIlIze u ma su b-rotma mterna. Se 0 c6digo pode ser util para outros program as, utilize urn m6dula de funliao . Voce nao deve criar ~ub.rotinas externas . Elas s6 foram abardadas no capitulo antenor para que voce soubesse como ut,iliza-Ias, porque ha
1. Verdadeir o au Falso : Urn pargmetrc de imporracao qu e tern uma proposta e semp re opcional. 2. Ve.rdadeira au ~a1so: Tados as parametre s de exportaca c sao opcionars.
Exercfcio 1
U tilize a fun<;ao T est dentro da Function Library para testar 0 m6dulo de fun,ao PO PUP_WITH_TABLE_OISPLAY. D epois de te star esse m6dulo de fun~ao, examine 0 progr~a. a seguir e fa<;a urn progn6stico do seu comportamento.
618
""N D' EM 21 DilS 'Bl P/~
...........
end of it. result (lO}. perform: f111 tabl e tabl es H, call-fin ta bles i t changing result . writl!!! : I 'Result- . res ult .
form fill tabl e t abl e s it 11ke i t.
move- 'Sel ect' to it-data. append it . move ' O ne' t o it-data . append it. move 'Opt10 n' to i t - data . append it .
.. 30
.. resul t .. i t .
func;ao.
As defiaicees de dad es den tro da interface sao conhecidas apenas a partir do m6dulo de funliaO. Se a interface for definida como in terface global, as definicoes de paxametro sao tam bem conh ecidas dentro de todas as sub -retinas que 0 m6dulo de fun~o chama . Esse ripe de clados globais nao epersistente ent re chemadas de m6d ulo de funli ao .
nllp ://~.compus.CDm.br
~~~
~~~
.a_
,.
. .....
621
620
analogos as definil$oes de dadcs globais na parte superior de urn programa em ABAP/4. Os parimetros definid os dentro de uma interface global sao acesslveis a partir de codas assub-retinas chamadas do modulo de fun~ao . Elessao anilagos
is varifveis definidas dentro de uma sub-re tina que uriliza a instru~ao lo cals. Os pa.clmetros defmidos dentro de uma interf ce local sao inacessiveis a a partir de sub-retinas chamadas do m6dulo de funCiaa. Eles sao analogos as varisveis definidas dentro de uma sub-re tina que utiliza a instruc;:ao data . Por padrao, as interfaces sao locais. Para tornar global um a inte rface, a partir da tela Function Mo dule Ch ange: Import/Export Parameters, escolha 0 caminho de menu Edit-Globalize Parameters . Para toma-la local ncvamente , escclha 0 caminho de menu
Os dados globais definidos dentrc da parte superior de i nc1 ude sao acessfveis a partir de todos as modules de fun~ao dentro do grupo. Eles sao
cal l functfon 'z TX 2002' expcrtt ng p_i n . parvU n exceptions oth er s 1. endform.
18
20 21 l2 23 24 25
- -
Edit-Locilize Parameters.
~o
Se um pcreme trc com 0 mesmo nome existe em dois m6d ulos de func;oo dentro de um grupo e as d uos interfaces sao globois, as definic;6es de dodos desses pa rametres devem ser identicos.
e0
1 function z_t x_2002. 2 _3 *Local i nt er face : IMPORTl N ". G_ 5 V ALUE(P_I N) 6 7 gl IUn. 8 endf unct fon.
__
.~
Dados globais definidos dentrc da parte superio r de in cl ude sao alocados quando urn programs faz sua primeira chamada pan qualquer m6dulo de fun~ao de urn grupo . Ele permanece alocado, contant o que 0 programa de chamada permane~a ativo. Cada chamada subseqa ente para um m6dul o de fun~ao dentro do mesmo grupo ve os valores prevics demrc da area global de dados. Os valores na area global de dados pers istem ate 0 programa de chamada
t errmnar.
mRADA.... Listagem 20.3 Este e 0 codlqo-fc nte do segundo m6d ulo de func;oo
..---_.
- - - - ~
-----
1 report zh2001. 2 par ameters pann_1n(l0) defaul t 'XYZ' oblig ato ry. 3 data fl( 10) val ue ' HUT'
5 per fom: cal l _flIlIl , 6 call _fml3. 7 write: I' tl . ', fl.
-.
~. .. .. .. .. .. .. ~ .. "!II' .. .. .. ..
.. __
.-.~
. - . -- - - - - - - - - D~ 2UOOUWJZA>\UODUlOS DE FUN>\D, P Am I
I
--/
623
!Hl1ADA~
Listagem 20.4 Este e 0 incl ude supe rior para 0 grupo de fun~ao zt xb - ztxb que cc ntern as m6d ulos de fun~ao mostrodos nos listagens 20 .2 e 20 .3
SAiDA ~
AHAliSE ~
Na Listagem 20.1, a linha 5 transfere contrale pan alinha 10, e a linha 11 chama 0 modulo de fun~ao z_t x_2002, que existe no grup o de fun~ao ztxb . 0 valor de pann_in ~ pass ado para p_in . 0 contra le e
transferido para a linha 1 da Listagem20.2. Na Lisragem20.2, a linha 7 move a valor de p_in para a varifvel global
gl. 91 e defmida na p arte superior de i ncl ude na linha 2 na Lisragem 20. 14. 1S50 a coma visfvel para todos as modules de fun\=ao, e 0 valor epers istente entre chamadas para mod ules de fun~io desse grupo. 0 contro le retoma para a linha 11 da Listagem 20.1. Na Listage rn 20. 1, a linh a 16 transfere 0 controle para a linha 5, depois para a linha 6 e enta o para a linha 19. A linha 20 chama os m6dulos de fun~ao de z_tx _2003, qu e tambem existem no gropo de fun~ao ztxb. o controle etransferido para a linha 1 cia Listagem 20.3.
Passa ndo uma tob ela interno via export; ng/i m t t ng por
e changi ng
Se voce utiliza a parte da interface export ing / impor t i ng ou changi ng, voce s6
pede passu 0 corpo de urna tabela intema, Entretanto, essas partes da interface permitem qu e voce escolha se pass a 0 corpo interne de tab ela par valor (0 padrao) au por referencia. Quando u tilizar esse metodo, voce deve especificar table na coluna Reference Type. As figuras 20.1 e 20.2 e as lisragens 20.5 e 20.6 ilustram as rnaneiras de passagem tab elas intemas p~a urn m6dulo de fun~aC?
Na-Listagem 20.3,a Iinha 7 move o valor cia variwel globalgl para o_out. 91 ainda contem 0 valor colocado nela pelc m6dulo de fun~o anterior. o controle rerorna para 0 programa de chamada e 0 valor eescrito.
tmADA Ustag~m 20.5 Esse prog ramo passe tob elcs internos pore urn m6dulo ..... de fun~oo
,
9
1 report ztx2 005. 2 tabl es ztxlfal. 3 data: it_a li ke ztxlfal occurs 3. -nao t em uma 'ltnhe de 4 it_b like ztxlfal occurs 3. - nao tem uma linha dt 5 select fI up to 3 r ows froo ztxlfal in to t able ft _a.
c a be~ J.lho
cabt~al ho
10
11 12
importing
1t2
tab le s
t':,"0- _
624
AAa~.A . a . . .
A.
_ -.....,-
,-
..,'t:' ........
625
it_a
it_a[ ]
i.
18
19 write: I 'AFTER CAll ', 20 / ' IT_A:' .
21 loop at ft_a into ztxlfal. 22 write I ztx lfa l-l1fnr. 23 endlo op. 24 ultne. 25 write / ' IT_B:' . 26 loop at it_b into ztxlfal. 27 write I zt xl fal -l 1fnr.
28 endl oop.
13 data wa like lfd. 14 write I ' In :' . 15 loop at itl in to wa. 16 wri te I ve-t ifnr. 17 endl ccp, 18 loop at it3 into wa . 19 wa-l1f nr sy - t ebtx . modify it3 fl"Olll wa. 20 21 endloop. 22 uj tne . 23 write: I ' IT4: '. 24 loop at 1t4. 25 write I it4-11f nr . endl oop. 26 27 ult ne. 28 1t2[ 1 ,t1[ 1. 29 endfunctio n.
Fi g u r A 20
~~::tjt'_'S*'.III'lo"-~~~
A telaTobIe
- L_ _
g;-;
;- x ;,_
"..- . ~ .-....
,, ~
~~~i
"
-s
~ ;0~ '
~ ;- :
~' .
i;"
::r~~;~",",,~""
,n
~.
m
; "! ......"'~ ....,~."'.
EMTRIDI.... List agem 20.6 Esse. 0 codlqo-ionte para chomodo 0 partir do Ustogem 20.5
modulo de func;oo
1 2
It"
_.
. _ . _.
. _
3 ....Local t nterface : 4 IMPORTING YAL {ITl ) TYPE TABLE UE 5 6 EXPORTING 7 YAlUE(lT2) TYPE TABLE 8 TABLES
.. ..
<.
"
l-
... . . . ....
""'""'
. --.
D~
0
- .-
626
SAioA ~
Na Listagem 20.5, as linhas 21 a 23 mostram qu e 0 conteudo de ita foi alterado pelo m6dulo de fun,ao. As linhas 26 a 28 mostram que it_ b pelo modulo de fun,ao. contecdc de i t_a foi copiado par a
1010
1020
AFTER CALL
IT_A: 1
2 3
IT_B: 1000
1010 1020
ANALISE ~
cabecalho.
A linha 5 coloca tres linhas em it_a. A linha 8 passa 0 ca rpo de ; t _a para i tl por valor, para i t3 po r valor e resulrado, e para 1t 4 per referencia com linha de cabecalho (it4 adquirira um a linha de cabecalho dentro do module de fun,ao).
s(REEMCAM~ lnlcie c ScreenCom " How to Create Subro vtines with in a Function G roup" agora .
u tiliza cso com it1 e i t3 porque estas njio tern linhas de cabecalho.
As linhas 15 a 17 escrevem
t rab alho wa .
As linhas 18 a 21 modificam 0 conteudo de i t 3. Essa ta be1afoi passada por valor e resulta do, entao 0 conteudo do original sera alterado quando a instru cao endfuncti for executada.
on
As linbas 24 a 26 escrevem 0 conteudo de it4. Note que a linha 25 acessa urn componente de it. Isso s6 epo ssivel porque a coluna Ref. Structure na tela Param eters/ Excep tio ns contem 0 nome da estrutu ra D D IC 1fal. IS50define a estrutura de it dentro do m6dulo de fUnlfaO . Se acoluna Ref. Structure esnvesse em branco, urn erro de sintaxe teria ocorrido na linha 25. A linha 28 copia
0
4. Digire uma insrrucao perf orm no c6digo-fonte do modulo de fun~ao. Por exernplo, perform subl. 5. De urn clique dup lo no nome da sub-retina. Nesse exemplo, voce daria urn clique duplo em subl. A caixa de dialc go Create Object aparece, perguntando se voce quer criar a su b-retina. 6. Pressione a botao Yes . A caixa de dialogo C reat e Subroutine aparece. o nome de sub-rotina aparece no campo de Subroutine. 0 nome do include l!gtdfOl aparece na caixa Inclu de Choice, e 0 b otso de 0Pljao a esquerda dele automaticam enre ~ selecionado. .
7. Pressione 0 bono Co ntinue (a maroa de verificacao em ver de) . Uma caixa de dialogo Warning aparece, in dicando qu e 0 pro grama principal sera modificado e uma instruiSao i ncl ude l! gi df Ol sera inserida nele. 8. Pressione 0 botao Continue (a marca de verifica(jao em verde) . Vo~e ve a caixa de dialogo Exit Editor indicando qu e seu codigo-fonte alterou e perguntando se voce quer salver as aheracoes.
A linha 29 copia 0 conteudo de it3 de volta para i t _a no programs de cham ada e 0 controle retorna para a chamada.
.".a..-. . . . . .
629
9. P ressione 0 batao Yes . A tela Function Module Editor e mcstrada. Voce agora esta.editando 0 FOl . Codifique a sub-retina aqui. 10. Quando tenninar a co dificacsc de sua sub-re tina, pressione Save e depois Back. Voce vol ta para 0 c6digo-fonte do m6dulo de fun )ao
code comegou.
Para ver 0 include que acabou de criar, rerome para a tela Function Library
mensagem Function module has been r el eased tambe m aparecera n a part e inferior da jan ela. Entretanro, se quise r alterar a interface, voc e s6 precisara pressio n ar a bo rac Display C hange e ter a. permissac para alcera-lc de qualquer maneira que quiser, Lembre -se, ent retanto, que voce nao deve fazer alteracoes que po dem fazer com que programas existences termin em an ormalmente ou resulte m em resu ltados diferen tes.
Initial. Escolha 0 batao de 0p/iao Main Program e pressione a batao Change. Voce vera a tela Fu nction Module: Edit . N a parte inferior. aparecera a instru/iao i ncl ude ljgidfOl. Essa instru/iao foi inserida pelo passo 7 do procediment o aeima. Se voce dec u rn clique duplo nessa linha, veri sua sub -re tina,
Se voce a ddento lmente liberor um m6dulo de fun.;ao e quiser cancelar a libe rot;60, v6 pam 0 tela Fundi o n Module Display: Administration, pressio ne 0 bottio Display Change e escclho 0 cominho de menu Functio n Modu le -Relea se-Can cel R eleose. Depcis de escolher esse cominho de men u, pressio ne e tede Enter para comp leter 0 processo de cance!omento.
JEiMO
A fum;60 releas e od iciono um nlvel de profec;60 a interface de um m6dulo de fun.;co protegen do-o de modifico~oo. Se tiverc ompletado o teste de seu m6du lo de fvn.;oo, voce pede querer libera-/o pora indicor que e seg ura pora o utros desenvclve dores utili or em seu c6digo. Fozendo tssc, bosicomente voce est6 prometendo noo oJtera r z os parametres edstentes do interface de nenhu.mo moneira que posso causer problemas pora q uelquer progromo q ue che me seu m6dulo de fvn o. vccs est6 prometend o estobilidede de interfoce.
i.:.
Po r exemp lo, depois de liberar urn modulo de fuD~aO, voce nao adicioDaria urn parameero obrigarorio, DaO alteraria as propostas e nem rem overia urn pargmetro. Caso conrrario , quaisq uer chama da.s existente s para seu m6dulo de fum;ao poderiam falhar ou funcio nar de maneira diferente. Depois de liberar, voce ainda po de alterar a interface, mas precisa dar urn passo extra para faze lo. Para libera r urn rn6dulo de fU1?'~ao, utilize 0 seguinte procedimento.
scmNCAM~ lnicle a Sc~eenCom "How to Releose a Functio n Module- ogoro .
0 nome do m6 dulo de fun~ao que voce quer te stae n o campo Fun ction Module.
3. Pressione 0 borso Change. A tela Function Module Change: Administration ~ mostrada. No canto inferior direita cia tela, na part e ot el inferior da caixa Ge neral Da ta, voce veri N R eased. 4. Escolha 0 caminho de men u Function M odul eRelease-Release. A mensa gem Released aparece na parte inferior da jan ela na barra de ot status. Na extremidade inferior direita da janela, N Released muda elease On e ~ seguida pela data atual. para Customer R Se voce tentar alterar a interface depo is que 0 m6 duJo de fun ljao foi liberado, as campos de entrada. na tela de interface est ario acinzentados. A
..............
630
APiEM DA EM21 DIA5 ABAP"
_~~--
-- -
631
aparece embaixo dele. P ara parametres tabl es, as conreedos "depois" ap arecem acima dos cccteudos "antes" (original). Na Figu ra 20.4, a tabela inte rna i t cootinha duas linhas depois do pro tessamento e trSs linhas antes . Para ver as conteudcs ant es ou depois cia tabe la intema,
Perc sclvor seus dodos de teste e/ ou resultados, pressione po'botOo Save no tela Test Environment o u no te la Result. Para recuperor sues
lnfcrmccces salvos, pressione 0 bctec Test Data Directory em quolquer
tela . As seqaenc lcs de teste tcmbem podem se r ccos trurdc s utilizondo o bctoc Test Sequence. .
A tela Test
I. D. tela AJ3AP/ 4 Development Workbench, escclha 0 caminh o de menu Overview -> Repository Infosys. Voce ve a tela ABAP/4
Repository Inf orm ation System mostrada na Figura 20.5.
Figura 20 5
Figura 20 4
Module: Result
mostro os yo/ore s a ntes e depo is pam
os pa l'6metros
in;ciolmente.
changinge
tables.
2. Expanda a linha Programming dand c urn clique no sinal de .di,ao (+ ) a esquerda dela. U rna subirvore e mo strada embaixo dela.
632
633
A tela ABN'/4
Reposjtoly
Info rmation System:
l,
I
Eigura 20 7
Digite m ultiples criterics de selecac aqui. Esses valor es sao conh ecidos com o os valor es inclufdos, au simp lesmente "includes". (Esse e urn usa difer ente do. term o quando nos referimos a programas include.)
A tela AA4P/4
Repasitofy
3. Expanda a linha Function Libra ry clicando no sin al de adi~ao (+ ) a esquerda dela. U rna subarvore emostrada em baix o dela. Sua tela ago ra deve se parecer com a Figura 20.6.
4.
De urn clique duplo na linha Function Modules. A tela ABAP/ 4 Repository Information System: Function Module emosrrada. Pr es. sione o ba tao All Selections na barra de [erramen ras App lication para
7. P re ssion e a batao Options para espec ificar operadores de sele<;ao como igual, difer ente, maior que, menor que e assim par diante. Voce vera a te la Main tain Selection Optio ns, como mo strado na Figura 20.9. P ara ser capaz de espe cificar P att ern or Exclude Pattern , seu valor deve canter urn caracte re coinci dence com 0 padrao: tanto + como ". Pressione 0 ba ta o Copy para retomar pa ra a tela Multiple Selection.
8. Na tela Mult iple Selection, pr essione 0 botao Comple x Selection. A tel a M ult iple Selection e mostrada n ovam en te, mas dessa vez ha uma barra de ro lagem n o lado direito e as campos Ranges aparecem (veja a Figura 20.10) . Para especificar valores que deverac ser exclufdos cia pesquisa, rol e para baixo e as digire dentro da caixa in titulada ...But N ot (veja a Figura 20.11) . Esses valo res sao conhecid os como valores excluldos ou , simpl esmente, excludes.
A& A AA AA
A~A
AA A
A~
..-.............................
A ceee ...&11Not.
."
Fig u r g 20 9
A ~Jo Maintoin Selection Options.
9. Pressione 0 batao Copy para capiar seus criterios de selctjao de volta para a tela de sele>io. Voce volt t el. ABAP/4 Repository In form stion System e, se voce inseriu mdlripl cs criterios de sele~ao. a seta no
fim da linha estari verde para mostrar que mais de um criterio -de
sde,'o existe (vej Figura 20.12 ).
Figura
2 0 12
Figura '0
10
Atela Multiple Selection com umo barre de roJogem no Iodo direffo e camposRanges.
de seJe o existe.
10. Para comecar a pesquisa, pressione 0 bono Execut e. Os resultados de pesquisa sao dererminados como se pesquisas separadas tivessem sido [eitas para todos as criterics de inclusao, e tambem para todcs
... A.
~ ~
AA
.~.A
A A ...
&
~
III!-
636
637
as resultad os OR. Emao, se a exclusac for especificada, eles serfo aplicados em uma entrada depois da outra. Por exemplo, no campo Short Desc ription. sup6e-se que voce tenha especificado as inclusoes "Date" e "date" e"Update" e"update",Todasas descricoes que contem "D ate" serso lccalizadas, e entac todas as descricces que contenham "date" serac OR junto do prim eiro conjun to de resultad o: Logo. todas as descricces que contenham "Update" sersc removidas e enuc codas aquelas conten do "update" serfo removidas. 0 result ado conrera st rings "Date" au "date" scm "U pdate" e "update". Voce vera as resultados na tela Function Modules (veja a Figu ra 20.13). 0 num ero de m6dulo s de un,;:o localizado e indicado na barra de titulo a esqu erda dele entre parenteses. 11. Para exibir urn m6d uIo de func;ao, de urn clique duplo nele. A tela Function Module Display: Documentation emostrada (veja a Figura 20.14). Essa tela mcstra a voce todos os parametres de interface e sua documentaclo. Para ver mais sobre documentaqao, de urn clique duplo em urn nome de paramerro (veja a Figura20.15). Para retomar a dccumentacao deinterface,pressione 0 bo n o Back.Para retornar a lista de modulo de funliao, pressione 0 botao Back novament e. 12. Para testar urn rn6dulo de funliao, coloque seu cursor nele e pressione o batao Test/Execute. Voce vera a Test Environment Screen para esse m6duIo de fun,;:n.
Figura 20 13 A ~fa Fundion Modules.
A tela Function
Module Display:
Documentation.
Nem tcdcs cs porametros tern doccmentocoo odicionol. Se 0 pcremetrc em que voc! deu um clique duplo 000 fiver mois doccmentao, nodo ocontecer6 quondo voca der um clique duplo nele.
Figu ra 20 1 ,
A docvm emo~Qo
od id onol para urn
pa nimetro.
'.
638
APREN" EM 21
eus ABAP /~
Se, quando voce olhc r no barre de titulo no tela Function Modules, 0 ncrnerc de m6dulos de fvnc;oo encontrodo for exotomente 500, enta~ prcvcvelmente tera ccesscdo 0 tomanho m6ximode listc. Retome pam a tela de seler;ao e procure no compo Maximum No. of Hits. Se ele for fombem de 500, voce estero acesso ndo 0 m6ximo. Voce pode ester tenfondo oumentar 0 numerc maximo de ccessc, mas ;550 roromente
sem produtivo , porque
639
~~~~~!!1~~~;);!;~~!;!!!;!@ ~~
Adm inistration
listc inteiro
de 500 m6dulos de funr; 0. Refine seus criterics de pesq uiso pa ra 6 reduzir a nCrmero de ocesso.
Explorando
un~Cio
OS
D epois de criar seu primeiro m6dulo de fun~ o, utilize 0 seguinte procedimento e gastc alguns minutos para explorar a s componente s do gropo de func;ao. Voce deve se familiarizar com a estrutura que acabou de criar. 5. Escolha 0 borso de op~ao Documentation e eneac pressione a ba tao Change. A tela Function Module Change: D ocumentation e mosrrada. Aqui voce pode inserir uma descricac curta para cada parfmetro e excec;ao na interface. Pre ssione 0 batao Back para retornar. 6. Escolha a botao de op~ao Source Code e entia pressione 0 botao Change. A tela Function Module : Edit emosrrada. Pressione 0 botao Back para retom ar. 7. Escolha 0 batao de op~ao Globa l Data e entac pressione 0 batao Change. A t ela Functi on Module: Edit e mosrrada. D essa vez, entretanto, voce estara editando i nclude superior. Ob serve 0 nome do i ncl ude superior na berra de tfrulc. Ele se adapts aconvencfo de nomeacao 1fgid top, on defgide 0 nome de seu grup o de func;ao. Aqui voce pode definir varisveis globais e areas de trabalbo tables que sao comuns a todos as m6duJos de fun~ao dentro do gropo de funr;ao. Se seus modules de fun~ao utilizam a instrucdo m essage. voce tambem pode definir a classe pednc de men sagem [na instrucao f unctf onpool). Pressione 0 batao Back para rerornar. 8. Escolha 0 bors o de opcso Main Program e pressione 0 botso Change. A tela Function Module: Edit e mostra da. Dessa vez, voce estara editando 0 program. principal (veja a Figura 20.17). Observe que a nome dentro da barra de nrulo comec a com sap1 seguido par seu ID de grupo de fun~o. As duas ins truc;6es i nclude incorp~ram 0 incl udesuperior e 0 UXX no progr.ama princi pal. Dar ~m clique.duplo no nome i nclude superior permitid que voce a edire, Pression e 0
SClHNWI ~ lnlciea 5creenCom M loring the Components ofYour Function Gro up ogoro. Exp
1. Comece na Function Library Initial Screen. Se jaeac estiver af digire o nome de seu m6dulo de fun~ao no campo Function Module. 2. Escolha 0 botao de op ~ao Administration e entao pressione a batao Change. A tela Function Module Change: Administration e exibida (veja a Figura 20.16). N a parte superior da tela, no C:iUIlpO Function Group, voce pede ver 0 ID do grupo de funr;ao a que esse m6dulo de fun~ao pertence. N a extremidade inferior direita no campo P rogram, voce pode ver 0 nome do programa principal para 0 grupo de fun r;ao. No campo Include esta 0 nome do incl ude que conrem 0 codigcfonte para a m6dulo de fun~ao. 0 ultimo campo mosrra 0 status do m6dulo de fun~ao: Active au Inactive. Pressione 0 botao Back para retornar para a tela Function Library Initial. 3. Escolha 0 bono de op ~ao Import/Export Parameter Interface e entac pressione a ba tao Change. A tela Import/Export Paramete rs e mostrada . Pression e a bone Back para retorn ar a tela Function Library Initi al. 4. Escalha a batao de op~ao Table Parameters/Exceptions Interface e entaD pressione 0 batao Chang e. A tela Function Modu le Chan ge: Parameters/ Exceptions emcstrada. Aqui voce pode inserir au alterar parametres internes de tabela e na mes de exce~ao. Pre ssione 0 bono Back para retomar.
.......L..A......._
..&...JL
a~
640
641
bcuo Back para retomar ao programaprincipal. Dar um clique duplo em UXX exibiri 0 ccdigo-fcme de programa include - ele contem as instrucoes que incluem as m6d ulos de funCiaO no grupo. Seus no mes sao indicados dentro de comenedrics no fim de cada instrucio
i ncl ude. Voce nio tern permi ssao para modificar 0 UXX. Dar urn clique duplo em quaisquer das instrucoes i ncl ude exibira 0 codigcfoote para urn module de fun~o dentro do grupo. Pressione 0 botio Back para reto rnar. .
Flgurq 20 1 7
Ess~ 4 a progromo principal pore 0 m6dvlo de fun" z_ tx_dfv.
~_' . H. :~-:-o;.~~~_ .~_ ;,1',. '~~:~
Fig u r a 20 1 B
Um erro de sinloxe
detedocJ em tempode ellKUo dentrode
um m6dulo de fum;60.
ttl!
,pc
11 BriE
"'iflil
;..~~~~-'_
' ''''
V
"J 11 .); .. if .
~- :;- 4 x "
II
!i-~d ~~..~,",
..
;~
~.
:w-... '.~_";;"
Denerc dessa caixa de diilogo SAP R/3 estio as informacoes sufi~ien~es para descobrir a posi 'iao exata e a causa do erro. N a Figura 20.18, 0 pnmclro campo concern 0 no me de programa 1ztxau02. Esse e 0 programa incl~de que contem 0 erro. 0 segundo campo diz a voce que 0 errc oco rreu na linha 10. N a parte inferior cia caixa de dialogo esta 0 erro real. N esse case, 0 erro Ie . expected after P2-. .
Para corrigir
5mENCAM~
... lnicie a ScreenCom -How to Fix on Error in 0 Function Module- oga ra.
da caixa de diilogo, nesse case Iztxau 02. 3. Pressione 0 ba tao Ch ange. Is50 mostrara 0 c6digo-font e de modulo de fuoc;ao que conte m 0 erro. t ion,,Vodee 4. Pressione 0 bone Check na berra de ferramentas APplicad
deve ver a mesmo erro qu e foi most rado na parte inferior a caixa e
Pora copter, renomear au excluir urn m6dulo de fu n~oo, utilize as bot6es Copy, Re name, a u Delete no Fundion li brary: lnltlcl Screen.
5. Corrija 0 erro . Fr equen temenre, voce pe de simples~e.n~e presslOnar a borac C or rect e a sistema aut omaticamente corrigtra 0 err o para voce.
Confi gu ran do
ped e fazer isso n.a tela Functi on Module Edit pressionando 0 bata o Check na barn de ferramentas Application. Ate agora, voce 56 criou urn modulo de funlji o, entac voce sabe por onde procurar se ele nia funcionar.
Entr etanr o, depo is de criar muit os m6dulos de fun~o. voce pe de termi nar na situaljio em que esta, chamando urn au mais m6dulos de func;ao dentr o de urn grupo, com 0 sistema dizendc a voce que hi.urn erro desintaxe em algum
Normalmen re depois de retornar de urn m6dulo de fuoiSaO, 0 S Istema. automaticamente configura a valor de sy-s ubrc como zero. Utilize uma das duas seguintes instrucoes para configurar sy-subrc para urn valor nao zero:
rai se raising
m age ess
Utilizando a instru(;fi o r aj se
_. mstrucac rat se para sair do m6dulo de fun,ao e configure 0 valor de .... U t ili ze a .
sy-s ubrc no retorno.
lugar. A mensagem de eITO que talvez vocevejaapareceem uma caixade didlogo SAP R/ 3 como a mcstrada na Figura 20.18.
A.
642
CIl
.- .
..
. ..
_ ... . . . . . .-........~
. .. ... . . . . . . . . . . . . . - . .
D~ 2'1. MODUWlL\(.i D,M6~ DE FUNIAD. 'AilE 2
643
S
Z
m
Sintaxe para a
raise xname .
instru~ao
r a'i se
9
10
11
12
13 14 15
exceptions er ror_a - 1 error_b 4 eTTOr_c - 4 othe rs 99. write: I ' sy-subrt - ", sy-su brc, I I vout - ", vout.
T
Os seguintes po nte s se aplicam :
xname ped e ser qu alquer nome que voce tenha composto, Ela DaD [em
de ser pr eviam ente de finida em qualquer lug ar. Ela pede ter ate 30 caracter es de co mp rimen to . Todos as caracteres sao permitidos, ex-
1 function z_tx_2.0oa . 2 - -- -- --- ----- . ----- ------- ----- .--- -- -- -- -- -- -- -,-3 " " lo cal i nt er f ace : 4 IM TIN POR G
5
.a
VAlUE(EXNAME)
EXPORTI N G
VAl UE (POUT)
7
8 9
10 ."
EXCEPTION S
ERRO _A R ERROR_B
9 c6d igo no m6dulo de fun~c o mostrodo no listogem 20.8 e meremente po ra fins de exemplo; normolmente tc rnbern haveria um c6digo que Haesse olgum process omento real of tcrnbem.
F igura 20 19
11 ERROR_C 12 ERRO X ft 13 -- -.- - - - - . - - - - --------- ------ - --- - ---- - - -- ----- - --. ------. 14 pout 'XXX'. 15 cas e exname. 16 w hen ' A' . r ai se error_a . 17 w hen 'B'. ra ise error_b. lB w .' C'. r aise error_c. hen 19 when 'X'. ra ise error_x .
20 enecese. 21 endfunction.
raise .
coli function I Z XXX: l ~ Z_XlOI.. fundion exceptions raise error_b. error_A ~ 1 = 2+- este valor e ~ . error_B other ... 3 otribuldo a endfundron.
o c6d.igo nas lisrageas 20.7 e 20.8 produzirf esta salda, se voce especificar
urn valor de A para pann_in:
sy-s ubrc vout INIT 1
sy-svbrc
EHTUDA lrItrr.. U st ag em 20.7 Como config ura r 0 vclc r de sy- subr-c ". de urn m6 d ulo de fum;co .
1 2. 3 4 5 6 7 a rep ort ztx 2.007. parameten panrL1n defa ult 'A'. data vout(4) value ' I N . IT' call funct ion 'Z_TX_ZOOB ' exporting exname pann in importing pout. vout
partir do interi or
Na Listagem 20.7, a linha -4 pega 0 valor de parm_i n e 0 passa para 0 rn6dulo de fun~ao z_t x_2007. 0 controle e transferido pua a linha 1 da Lisragem 20.8. Na Listagem 20.8. a linh a 14 atribui urn valo r para 0 paramerro pout . Esse parimetro e passado por valor. entao a altera~ao e apenas para a defini~'o local de pout. 0 original ainda n' o loi modificado. N a Listagem 20.8, a linha 15 examine 0 valor passadc via a parametro exname. 0 valor e B, entao a linha 17 - raise e rror_b - eexecutada. controle transferido para a linha 9 da List agem 20.7. Como a
"''''','''' .....'" ~~
it..,
. . -644
APiEHDA EM 21 DIAS ABAP'1
---
- -
- -
instruc io ra i se foi exe cutada, 0 valor de pout nio foi copiado de volta para 0 pro grams de chamada, assim 0 valor de vout nio sera alterado.
Na Lisragem 20.7, 0 sistema varre as linhas 10a 13 :lte ele localizaruma correspondencia para. a excer;ao identificada pela instrucio ra i se
recem-executada. Nesse case, ele esti procurando error b. A linha 11
Se a excec;ao identificada depois de r-atsing for tratada pela instroc;ao call functio n, uma men sagem nac e emitida para 0 usu drio. Em vez disso, 0 conrrole retoma para a insrrucio cal' function e a exceliao e tratada da mesma maneira que a instruc?0 rai se .
corresponde ao erro.
Sinlaxe para a
Ul
Na linha 11, 0 valor no lade direito do operador de igual e atribuldc a sy-subrc, 0 controle entia e transferido para a linha 20. ,
inslrv~ao
message .. raising
nnn
xname
Se voce nee ccdlflccr ot hers e uma excecec for configurada dentro do m6dulo de fun<;oo que noo foi nomeodo no odi<;oo except i ons, 0 progromo ser6 obortodo e cccntecere um dump curto que tern 0 errc de tempo de execu<;oo RAISE_EXCEPTION. . Se urn parimetro de exponac?o fai passadc p ar valor, depois de urn rai se seu valor permanece inalterado no programa de chamada, mesmo se urn valor river sido atribuldo dentrc do m6dulo de func;io antes de a instrucao rai se ter sido executada. Se 0 p arfmerrc foi passadc por referencia, ele sera alteradc no cha mador (ele tern 0 flag Referenc e ativado na tela Export/Import Paramet ers}. Esse efeiro emost rado na List agem 20.7. 0 valor de pout eaherado no m6dulo de fun~ae e, se uma ins trucac rai se for executada, 0 valor alt era do me e copiado de volta para 0 programa de chamada.
o seguintes pontes se aplicam: xnome e urn nome de excecac como descrito para a in struliao ra 1se.
Se a classe de mensagem nao estiver especificada aqui, ela d eve ser especificada na inStnl'ii0 functi on-poo l no i ncl ude su perio r pan 0 grupo de func;io via a aeli~io message-id. As seguintes varidveis sy sao confi guradas:" sy-msqf d, sy- m y, sgt sy-msqno e sy-msgvl par sy~msgv4. Estas podem ser examinadas dentrc do programa de chamada (depois do retorno). Quando a instrugao m essage . . rai sing e executada, 0 luxo do con t role depende do tipo da mensagem e de a condicac ter sido ou ni o tratada pelo chamador (0 que eespecificado na lista de excecoes do programa de chamada ). Se a condicao for tratada pelo chamador, 0 controle retomani para 0 chamador. Os valores das vsriaveis sy-Ilsg sao co nfi gura dos. a s valeres de exportac;6es pass ados por ~alor nao serio ret omad os.
check, exit e stop tern 0 rnesrno efeito que m6dulos de fun~Oo em sub-retinos extemos. Entretanto, eles nao devem ser utilizodos dentro de m6dulos de fun<;Oo. Em vezdisso, 0 instru<;oo rai se serio utilizodo porque ela ativa 0 chamodor para configurar0 volar de sy-su brc no retomo.
Se a candi<;ao naa far t ratad a pelo chamador, e para tipos de m ensagem e, w e a, 0 m6dulo de fun<;ao sofre saida e 0 programa d e ch am ad a e terminado imediatamente. A mensagem e exibida e a !ista de saida aparece em branco. Quando 0 usuario pressiona a t eela Enter, a futa em branco eremovida e 0 usumo eret omado i tela da qu al 0 programa
foi chamado.
Se a condi~ao nao foi tratada pelo chamado!, nem para 0 t ipo de mensagem i , a mensagem sera exibida para 0 usuario em uma eaixa de
Se a exceliaOnomeada depois de r a i si ng nao for tratada pela instruc;ao call f unct i on e others nae ecodificada, umamensagem eemitida para o usuari o.
647
dialogo . Quando a usu dric pressiona a tecla E nter, 0 controle ret om a para 0 m6dulo de fun~ao na instrufj3.0 seguindo a instrufjaq message. o m6dulo de fuD~O con tin ua processando e, na inStru~o endf unct fcn, 0 cont role reto m a para 0 programa de chamada. Os valores ells variaveis sy-m SaOconfigurados e os valores de expc rt acoes pass ados sg por valor sao reto rn ad os.
2'
25
pout
vcut
1 2
3
exceptt ens
l!!!rror_e error_w ., error_i er ror_s error_a er ror_x = oth ers endfonn.
26
27 28
29
3D
S7 a condicao Ilio for tratada pelo chamador, e para ripe de mensagem s, a mensagem sed armazenada em uma are a de sistema. 0 controle
continua dentrc do m6dulo de fun~o na instrU~o seguin te ainstrucac message. 0 modulo de func;ao continua processando e, na instrucio endfunct tcn;o centrale retoma para 0 programa de chamada. valores das variiveis sy-msg sao configurados e os valores de exportacoes passados por valor sao retomados. Quando a lista e exibida, a mensagem aparece na barra de Status na parte inferior da lista,
31
32 33
4 5 6
7.
as
34 35 36
37
Sea condicaonjiofoi tratada pelo chamador, e para 0 ripo de mensagem x, 0 m6dul o de fun~o sofrera safda e 0 programa de chamada e
terminado imediatamente. Urn dump CUrto o usudrio.
38 39 40 41 42
call funct ion ' Z _TX_2010' expert! ng msgtype z p_et ype impo ng rti .. vcut , pout endfol"ll.
20 .9
f unct10n z_tx_2010:- - - - . ~ - -~-~~. --- ---_. -------- -- -------- - - ._-. -- ~- - -- ---- - --""-lo cal interface:
18 . _ ---..,: --,-,---::_ _,..,19 form call_and_hand1l!!!_except 10n. . 20 call function ' Z _TX_20IO' 21 export ing 22 msgtype - p_l!!!t ype.
IMPORTING VALUE(MSGTYPE) EXPORTING VALUE(POUT) EXCEPTIOtiS ERROR_E ERROR_W 11 ERR OR_I 12 ERROR_S 13 .. ERROR_A 14 .ERROR_X 15 --- -- ---- -- -- -- ------.- ---- ----------- --. -- --- -- - -.--- - -----16 pout .. ' XXX' . 17 case msgt ype. 18 whl! ! n 'E '. message e991(zz) with ' Error E' rai sing er ror_e . 19 when 'W ' . message e992(zz) w ith ' Error W' raisi ng error_w. 20 when '1 '. message e993(zz) wit h ' Erro r I' rats i ng l!!!rror_i . 21 when'S'. m essage e994(zz) w t h 'Error S' r ai sing error_s o i 22 when ' A'. message e995(zz) with ' Error A' rais i ng l!!!rror_a . 23 when 'X'. m essage e996(zz) w ith 'Error X' raising l!!!rrOT_x. 24 eeeeese , 25 l! ! ndf unct 1on.
A A A
648
AmHOA EM21 OIA' ABAP"
649
Utilizando as vslo res de parfrnetro padrao, 0 c6digo nas listagens 20.9 e 20.10 pro duz esta saida:
SAiDA ~
sy- subrc
you! INlT
4. Pressione 0 botio Change. A tela Function Module Change: Table Parameters /Exceptions ~ exibida. 5. Na metade inferior cia tela, na seljio Exceptions , digiee os names das excecoes que aparecem no codi go-fonre do m6dulo de fu oljao. 6. Pressione
0
sy m gt y E s sy-msgid ZZ
sy-msgno 991
bota c Save e
a te la
inicial
Function Library.
sy-msgvl Er r or E
AMius! ~
Na Liscagem 20.9, qu ando se utiliza as valores padrac para a lllilia 6 as pardmetros sao verdadeiros, en no 0 con rrc le e transferidc para a sub-retina call_and_handl e_exception. A linha 20 transfer e co ntrole para a linha 1 da Listagem 20.10. Na Lista gem 20.10, a linha 16 atribui urn valor para 0 pardmetrc local pout . Esse valor e definido como passado por valor, enr j c 0 valor de vout no chamador ainda nao foi alter ado. A linha 18 cia inst rucao case e verdadeira e a inst rucac m sage .. . es ra i 5 i n9 e execu tada. Is50 aciona a excefjao error_e.
functjon
Em vez de digital a insrrucio call f unct ion em
Sell c6 digo -fo nte, 0 sistema aut omat icam en te pode gera -la para voce . Quando voce faz dessa maneira, os nome s de exce~ao qu e voce docum ent ou na interface serso automaticamente inseridos em seu c6digo tambem.
IIlrrr...
lnkle
ScreenC om "How to Insert a call fund ion Statement into Your ABAP/4
SCREENCAU"
Progrom" cqcrc .
A excefjao er r or_e
mensagem ndo eexibida pan. 0 usuario. 0 controle retorna para a linha sq 25 cia List agem 20.9. 0 valor de vout nao ~ alteradc; as variweis sy- m sao atrib ufdas a vaIores. Na Listagem 20.9, a linha 26 atribui 1 para sy- subrc. A linha 33 ret o rna
0
e tratada
Para ver os efei tos de sua documentacio de excetjao l erie UJ;11 pro gram a de ABAP/4. E m vez de codificar da pr6pria in strucao cal l fu nct i on, util iz e o seguinte procedimeoto para genr automaticamente a instrucao call fu nct f on :
T ente executar 0 programa em ztx2009. Especifican dc urn valor p handl e , de N vo ce vera as men sagens de erro produzidas.
SCRHHOMltrr.. lnicie a ;creenCam "How to Docu ment Exceptions in the Function Module
~ Interface agora .
selecione-o. 5. Digite 0 nome de seu m6dulo de funr;ao no campo de entrada adireita de Call Function. 6. Pressione 0 batao Continue (a marca de verificaljio verde). Voce vol ta a tela Edit Program. U rna in strucio call f uncti on aparecera no c6digo-fonte na Iinha acima da primeira que voce posicionou seu cursor. A ins t ruf:iao comecar a na mesma coluna em que seu cursor est ava. Os pardmerros e excecces qu e vo ce id entificou na int erface aparecerao. Se um para metro estive r ma rcado como op cional na interface, ele sera com entad o e 0 valor padrac ap arecera adireita dele .
7. Preencha os valores a dire ita do s sinais de igu al. Sinea-se livre para alterar 0 codigo a u remover quaisquer linhas qu e se seguem aadi~ao importi n9 se voce Dia precisar desses valores de ret o rn o.
650
651
Umo d6usulo importi ngvazio ccusc um errc de sintoxe . Se nOohewer nenhu m nome de pordmetro seguindo a po lovro importing, ou se tod os e lesfor em ccmen tcdcs.vcce deve remover a po lovrn importi ng. mesmo tcmbern verdode iro para 0 exporto~oo .
Work.:>Jh o p.Ls w~
o Workshop
Resumo
As varidveis globais podem ser definidas em dois niveis. Q uando definidas no i ncl ude sup erior, elas sao globais para tod os os module s de fun'iao dentro do gropo e Iembram de seus valores entre chamadas a m6dulos de fun'iao dentro do grupo, contanto que 0 programa de chamada continue a executar. Globalizando a inte rface, os parametres sao visfvels dent ro de sub-re tinas chamadas a partir do modulo de fun,an. As sub-r et inas definidas dent rc deum gropo de funi?o sao codificadas DO include Fo I. O s m6dulas de fun'iio podem ser Iiberados pan. denotar que a interface 6 eseavel e nenhuma altera'iio significativa sed feita para ela, P Ort"" O, ela ~ Iiberada pan dispooibilidade geral e ~ "segura" para ser, utilizada em c6di go de prodc cao. 0 ambience de teste oferece uma maneira convenie nre de executar modules de fuo'iiOsem escrever qualquer ccdigc de ABAP/4 . M6dulos de fun'iao existen tes podem ser localizados com a ajuda de Repository Information System.
oferece duas maneiras de voce verifica.r 0 que aprendeu oeste capitulo. A se!jio Teste ofereee perguntas para. ajudar a salidifica.rseu entendimemo do contecdo aborda.do e a sec;io Exercicio permite que voce pratique 0 que aprendeu. Voce pode enca ntrar as respo stas is perguntaS do Teste e aos exercfcios no Apendice B "Respostas as pergun tas e aos exercfcios". ,
Teste
1. Se urn pargmetro de mesmo nom e exisee em dois m6dulos de funC;io dentro de um grop o e as duas interfa ces sio globais, as definicoes de dados de dois desses pargmetro s devem ser identica s? 2. Sevoce acidencalmenre liberar urn modulo de fun'iao e quiser cancelar a Iiberacac, qual caminho de menu voce pede utili z.ar? 3. Se voce D codifica others e uma excectc e configurada dentro do aO m6dulo de fun'iao que nao foi nomeada na adi~ia except i ons, 0 que acontece? 4. CheCK, exi t e stop tern 0 mesmo efeito com m6d ulos de func;ao que tern nas sub-retinas externas. Eles devem ser utilizados denrr o de m6dulos de fun,aol
Exercicio 1
Copie 0 m6dulo de fun'iao z_tx_div eo modifique para configurar a exce'iao zero_di vi de, se 0 valor de p2 for zero. (para copier um m6dulo de fun!jao, utilize 0 botac Copy na Function Library: Initial Screen.)
P&R
o o
Par que voce passaria urn panim etro de im portacdo par referencia? Se voce especificar que a s parimetros de irnp ortagao e de exportacao devem ser passados par referenc ia, eles nio serio os mesmos ? Por que exist e 2 capacidade de fazer isso? Vma passagem por refe rencia e mais eficiente que um a passagem por valor. Voce deve util iza-la para eficienc ia. Entretanto, as palavra s Im port e- Export oferecem documentacio im portance reference ao papel que cada parjim etro desempenha dentro do modu lo de fun~ao. Voce nao deve alte rar parametres Imp ort. des sempre devem ser passados sem alt era!ii o pela m6dulo de fun~io. Tarnpou co voce deve aceitar valores no m 6dul o de fun!iaoviaparfm erros Export . O valo r de urn Expor t sempre deve se origin ar den tro do m 6dul o de fun'iao.
21
Telas de selelGO
Objetivos do capitulo
Depois de completar este capitul o, voce deve ser capaz de
usudrio.
Entender como as chaves esrrangeiras podem ajuda r a validar entr ada de u suario.
Entencler como as matchcodes (c6di gos de combinacao) sao ut ilizados em programas ABAP/4. Utilizar elementos de formataclo para criar telas de selel,fao bern prcjetadas e eficientes.
Utilizer te las de selec;ao par a manter a inr egridade de dadcs .
Irttp;/I_
.compus,com.br
Jl:- .
654
II
APR END' EM 11 DIA S ' U P/4 Os blocos de processomento s50 definldos pe las po lovros-chove de evento e sdc assim executodos no tnvccccec de certos eventos relevontes .
655
Utilizando
Por padrao, 0 evenro sta r t -of - sel ecti on e anexado a todos as eventos no ABA P/ 4. Em seus pro gramas, voce pede definir urn bloea de processamen to e anexar esse bloco a uma palavra-chave de evento. Par a 0 c6digo genericameate facit de ler, euma boa pratica definir blocos sequenciais de processamento na ordem em que d es mais provavelmente serdo acionados durante execucic cia tela de selecao. Eo fundamen tal tambem ut ilizar as eventos mais imp orrantes para programacdc cia tela d selecao. Esses eventos 7 sao:
0 evento at selection-screen
0 evento at user-corrmand
0
evectc at se lect ion-screen processado dep ois cia entrada do usuario na tela de seleljao ativa. Isso pede ocorrer quan do a usu i rio pressiona uma teela de fuoljao ou da urn clique em urn bono, bern como no caso de mui tos outros elementos que podem interagir com a usudrio. Alem da verificacao de validaljoes de dadcs, mensagens de aviso, alteraca o do sta tus GUI e ate rnesmo janelas pop-up podem ser abertas utilizandc 0 evento at sel ection -screen. Voce vera mais dest es exemplos mais adiante neste capitulo. quando estudar ~ telas de seleljao de [ormatacio e os eventOS envolvidos co m elementos de {ormatacao de tela. Par enquanto, entretanto, vamos examinar urn botao em uma tela de selecao e descobrir como as eventos at sele ct i on- s cr een e at user- conmand sao utilizados no proximo exem p lo .
Utilizando
0
Utilizando
eyento ; n; t; al ; zat ; on
eventc init i al ization:
!a
Z
m
Os botoes, assim co mo muitas outras opcees de tela de seleljao baseadas em evento, podem ser muitc uteis na manutencio da interacac com usuario e na validaljaOde entrada do usuario. Na pr6xima se~o, voce ira explorar a utilizacao de bo toes para chamar 0 eveneo at user-cceand e estu dar urn exemplo de com o os b otoes podem ser utilizados para processar a entrada de usuario.
pushbut-
Nesse exemplo, quando ~ execuudc 0 programa pa..ra 0 qual uma tela de sele~ao estol definida, esse bloea de processamento i n; ti a 1fzat ; on executado,
configunndo 0 campo de parametro p_year como igual a urn valor dependendo da data de sistema no momenta de execuci o. E esse blocc no qual voce
~ m
Essa instrucao, quando utilizada junto com 0 comando at sel ect i onscreen, e uma excelenre maneira de interagir corn 0 usuario quand o este digita dados. A sintaxe esemelhante i de urn sel ect i on- screen corrment, exceto pelc fatO de qu e os dad os sao passados quando 0 usuario pre ssiona 0 bono. A aljao de pre ssionar 0 batao aciona sccrfi el ds -ucomn n o evento at sel ect ton-screen e os cam pos de entrada sao importados. Esses dada s entao p odem ser validados e uma mensagem pode ser exibida para 0 usudrio dependendo do prop6sito do bo tao. Ess e e urn exemplo de como voce pode utilizar do is borees para determiner quallinguagem informari os dad os selecionados. III o seguinte c6digo mostra a sintaxe para dois botoes que sao utiliudos Z para escolher urna linguagem:
se1ec t 1onscreen pushbutton lO(20} text-D03 user-ccxrmand eng1. sel ect ion- scr een pushbutton SO(20} text-004 us er- carmand germ.
at se lection -s cree n.
at us er- COllll'.and. cas e sy- ucOlllll. when ' engl'.
/.
-~
-J
~"
~ .~
......... --.- ..
"mo. EM,I DIAS AB." .
lange nglis h ' Y'.
when 'genii' .
-----.
657
656
Nesse exemplo, voce pede verificar qual dos dois boroes foi pressicnado pelo usuario utilizando urna instru cio case (veja a Figu ra 21.1). Quando 0 usu drio aciona 0 evento at user- ccrmand, 0 campo sY-UCO armazen a 0 no me IllTl unico de quatr o byt es do item que 0 usuario selecionou. D essa manei rs, voce pede codificardiversas validaljoes de dados au comandos de entrada do usuario com base na combinac ic de dad os inseridos enos irens, nesse caso os botoes, selecion ados pelo usuario.
Fig urA 21 1
1 ,
Umo jmpreu60
dos
botOes.
Algumas tabelas 'de veoficacac podem ter mul tiples campos de chave primfria. N esses casa s, as atribuicoes devem ser feitas para cada campo quando se iniciam relacionam entos de chave estrangeira. r res op~6es sao:
serio urn fator ao se validarem valores aceitaveis para entradas no campo de chave estrangeira. Certos campos sao marca dos como genericos nesse caso e assim ignora dos peIa siste ma na valida~ao.
Utilizer urna ch~'Ue estrangeira constants. A fim de a entrada de campo ser vdlida, 0 valor deve co rresponder ao cia constance na tabela de
verificacio.
Agora que vod op rendeu um pouco sabre vcldccec de dodos utilizondo ev entcs noAW/4 , e he re de excm'nc rclqcm cs tecnlccs de vclidccec de dados que s60 no moioria montida s e definidos pelo sistema. Voce primeiro vera chcves estrangeiros. Umo chave estronge iro significo um ou mois compos que representom a cbove prim6rio de urna segundo to belo.
Criar uma atribuirao cam a campo. Essa e a mais complete das tres po escolhas . Cada camp o de chave prim:iria na tabela de verificacao corresponde a urn campo na tabela de chave estrangeira e todos os campos-chave sao endc utilizado s para determiner entradas validas na tabela de chave estrangeira.
...
~ ~ -~
!I
658
659
Basicamente, 0 modo como uma chave estrangeira Unciona se parcee com uma instru~ao select em cpc sicac a ube la de verificacac d o campo com a chave esrrangeira, Mais especificamente, quand o urn campo de ve rifi ca.~o de chave esrrangeira e preenchido, a insuur;ao select que foi gerada pelo sistema
0
campo de entrada contem urn valor especffico no campo chave cia tabela de cia insrruca o se l ect , o campo constante e verificado em conrraposicao ao campo de ch ave primdria que contem 0 valor fixe.
verifica~ao citada . Na consulu
(Dj;..
pr6tico de prog ramoc;do utilbcr ccoveocees de otribuic;oo de nome que sdo descritivos e om ig6veis para a usu6rio. Alem disso, a SAP adotou 0 pcdrec de nunco cc mecc r 0 nome de um objetc de desenvolvimento com as letrcs Z a u Y. Se voc! cr ier todos seus objetos com nomes q ue comecem com umc desscs duo s letros, 'lac! se certificor6de neo ter nenhum prob lema co m co nflitos de nome quan do otuo lizor seu sistema SAP.
E boo
Uma COISO de q ue vod deve se lembror 0 0 cnor relodcncmentcs de chcve estm nge irc e a cordinolidade . A card ino lidode de umo chc ve estrcnge iro, junto com seu tipo, ereferida como os otributos sern6nticos do chove estrcnqelrc. Coda cordinalidode de umo chove estrongeira dessos entradas e op d onal. Entretonto, a cordinolidade ndo deve ser supervisionodo, porque a entrada e boo prefico e tomo -se necess6rio qua ndo voce quisercriar certos tipos de og regodos como visvcllzccoes de c judc , por exernplo.
mo "
NOVO ....
Cordinolidode umo descrtcec do relodonamento entre um a u mois elementos de dodos para um a u mo is elementos de dodos . Se ume chove estra ngeira vinculo duos tobelos que foram definidos, a registro do to belo de chove estrongeira se c refere 0 urn registro do tobe le de verifi ac;do. Esse refel1mcio e construfdo se atribuindo compos de umo tabe loa umo tobe lo de chove estrangeira, aos co mpos de chove pomaria do outro tobe lo e 0 tobelo de verifica rydo.
Veja comcele funciona: primeiro urn objeto match code e definid o com as tabelas secundarias e prim frias pertinenres e campo s significativos designados. Ess e objeto enno identifica tcdos os pcssfveis caminhos para .os registros de dadcs exigidos . Em seguida, os ID s de matchcode sao criad os mapeando urn caminho definido pelo obje rc matchcode. Os unicos'campos de dados que sao admissfveis nesse ill sao baseados int eirament e no objeto matchcode. Pelo menos urn ill deve ser declarad o para cada objeto matchcode. Os ohjetos matchcode sao armaze nados como urn pool de ube1as, que auto~ maticamente e gerado para cada ID de matchcod e que voce declara.
NOYO ....
mMO r
o relacionamento s6 exine se os campos de chave estrangeira forem do rnesmo tip o de dado e comprimento que as campos de chave p rim m a correspondentes. Urna v erifica~ao - au tabela - pai e referenciada pela pr6pria chave est rangeira. Esta e normalmente urna u bela de valoT) mas tam bem pode cons istir em urn subconjuDta do conteudo de uma tabela de valor. Uma tabela de valor governa as valores validos que sao atribu i'dos ao dominio do elemento de dados . Em alguns casos, uma chave estrangeira constante pod e ad aptar~se melhor as suas necessidades. Esse e 0 caso quando toda s as ent radas validas no
Um pool de dodos e uma tabe lo l6g ico de pool que e utilizodo pelo SAP pore ormazenor intemo mente dodos de co ntrole . Esse dodos , que noo sao pemnentes extemomente, sdo mopeodos como um nume ro de tobelos de banco de dodos para umo tobe lo do SAP.
Fisicamente. N essa configura~aoJ os dados sao armazenados em urna tabela separada no sistema SAP. Os tipos de atualiza~ao A, P eS sio rnantidos em tabelas ffsicas. Logicamente. Essa op~ao configura dados de matchcode temp oraria~ mente durante 0 acesso ao matchcode. Esse acesso ~ gerenciado por
660
'PREHO' EM21 OIAS "AP"
..
~.
. .. . . . . . - - - - - D~ 2J,1HASDE SELE\lO
661
1550
5. 0 pr6ximo passo no processo de cria~ao eativar 0 obje to matchcode. status do objeto New e Saved (veja a Figura 21.6).
de atualizacao I e K.
Fi g u r A 2 1
6. 0 status esta agora configurado como Active e Saved. Logo, voce precisara criar urn ill de marchcode au seu ob jeto estara inc omp lete (veja a Figura21.7). Parafazer isso, dS: urn clique no batao Matchcode IDs.
Figura 21 3
"""",~<~;''';'i' .JI_,:=: .'J:- -'''''' L.ol;
;r.."
Na tarefa seguinre, voce aprendera a seguir 12 passos faceis para criar e manter objetos marchcode. Inicie pela tela Data Dictionary mostrada na Figura 21.2 e complete as seguintes passes:
1. Escolha urn nome p ara sen novo objeto, de urn clique no bono de 0Plii o Mat chcode e pression e 0 bon e Create.
2. Digite 0 texto descri tivo , quando for inserir sua tabela primdria na tela Attributes mostrada na Figura 21.3, e pressione 0 batao Save. A
Figura
21
CatalogEntry.
~~
A PREMDA EM I I DI AS Am"
~.II
I
D1A IU,USD ESEll\lD I
Figu r a 21 7 Os afribulos de matdJcodedepois do alivoo.
662
663
F lgurq 21 6
7. 0 sistema. pedid para voce criar urn ID novo se um nao existir (veja
a Figura 21.8). Para fazer isso , de urn clique
Figu rA 21 8
Os otributos de matchcodeanles do
Qtivoo.
DO
bo tao Yes.
Obi""
8. Na tela Create Match code ID mostra da na Figura 21.9,especifique urn mimero de ill de ma tchcode, entradas validas que variam desde
todo 0 alfabeto a qualquer numero. Voce tambem p ede dar urn clique na seta para baixo para visualizar urn intervalo de entradas vaIidas.
Figura 21 9
A co ixa de dia/ogo
9. Vamos visualiza r algumas possfveis entradas (veja a Figura 21.10) . Como voce pede ver, essa janela de Iista mostra urn mi mero de IDs de matchcocle e uma descricsc curta de cada urn . Escolh a urn e de urn clique na seta verde .
A -a
664
.A"'~ I...I~
665
Motchcode.
Selection Conditions.
10. Siga. as passes que aprendem os para manter as campos de sele~o para "esse ID de m archcode, cerrifique-se de inserir um tipo Update e de urn clique em Save (veja a Figura 21.11). Discutirei ainda sabre tipos U pdate mais adiante nesta selSao. N esse ponte, voce pede inserir rnais crirerios de selecao pr essionando 0 bono Selectio n C riteria.
F igurp 2 1 J 1
12. Agora rude qu e voce tern de faze r eativar seu ill de matchcode e seu novo objeto esta pronto para utilizar (veja a Figura 21.13).
Figur A 21 13
A monufeno de
oIribvtos motdl~e.
Gere e utilize 0
matchcode.
11. Na tela M aintain Selecti o n Conditions, voce pede inserir e manter campos e criterics de seleljao para seus IDs de matchcode. Eis urn
e maior
que 0 valor de 8888 (veja a Figura 21.12). Quando terminar, de urn clique em Save e na seta verde para voltar.
A subtelo Index noo precise ser man tido, porque essas c:eraderfsticos sao meromente para fins de documenta~oo no versec atua l do sistema SAP. Simplesmente debe esse lacuna e ignore 0 a viso subseqOente que cpcrece no log de otivao do seu ob jeto.
666
D~ 2UElAS DE sElf\.iD
667
N esses 12 passos Hceis , voce criou urn matchcode qu e ago ra pede utilizar para m an ter a integridade dos dados, Vace aprendeu como as cbaves prim arias ajudam a verificar possiveis valores de tabelas vinculadas e 0 conceito de urn pool de campos de dados. Lembre-se, a m aneira com o a s dad os de m aechco de sao organiz ados varia de acordo com que tipo de arualizacao foi selecionado
durante a crialJao inicial. Eis uma descricio de cada urn desses cinco ripos:
a telas de selecoc pre-projetodos. Esses crttenos de selecec podem ser modificodos para melber se odoptorem as sues necessidades. as relot6rios que ndc tlv erem as telos predefinidos devem ser rncnfidoa pelo programador do relat6rio. E ssas interfaces do usucrlc personali zodos podem ossumir qualquerforma e combinerquoisq uere lementos que voce, 0 programodor, quiser.
!:!!
Z
A seguir esta a sintaxe para utilizar matchc od es para valid acso de entrada de parameero de tela de selecso:
tables : saptab atc parameter: example l t ke saptab-f1eld m hcode object exam. select single f ield f rom saptab w here f i eld example.
S
In
Sintaxe para sel ecti on- screen bloc k com frame en A seguir esta a sintaxe para urn sel ect i on-s cre en bl ock com frame: Z selection-screen begin of block bl ockO with f rame title text-DOO .
Esse exemplo utilize 0 exame de ob jeto m atchcode, que ja foi definido com urn ID de matchcode, para valid ar a entrada de da do s no exem plo de campo de pardmetro. Esse exame de cbjerc armazena os dados de relacio namento necessaries para manter a integridade da entrada de usu ario.
S
In
T
INilll!~
screen: Alem do instruc;co blo ck, os telos de seleccc podem ser personolizodas utilizondo elementos de formotcl;co como os seguintesinstrvcces sel ect i onsel ection-scr een com:nent leliao. sel ect i on- screen uline C olo ca urn cornentario na tela
de se -
se l ec tion- screen posi ti on - U ma ferram enta muitc util qu e especifica urn come ntario para a pr 6ximo parametro de campo na t ela. E util par:a se lect i on- opt ion s assim como para parameters . se1ecti on-sc reen begi n-of - l i ne e se l ecti on-screen end-e f- t i ne Todos os cam pos de entrada definido s entre essas du as instruce es sao colocados urn do lado do ou tre na mesma linha. selecti on- screen s ki p 0 n-c- Essa instrucio cria umalinha em branco para as n linhas na t ela de selecao .
final do capitulo.
A mai cria dos elem ent os inclufd os na se~ao anterior edo ripe cosrnet ico; na pr6xima se~ao, vo ce vera algun s elemen tos de tela de selecsc que sao mais especfficos para p roce ssament o de entrada de dad os.
~ ~_A & .I _A _ _A .~
668
-- -- Figura
21
14
A tela inidol
Domains.
mWO ,.
NOVO
Um domlnio descreve a s propriedodes dos compos de umo tobe lo. He define lntervolc de vclo res velidos de dodos pore urn compo e caraderisticos de compo especfficos.
IItrr...
0
Os dominios det ermtncm otributos como tipo de compo, comprimento e posslveis relocionomentos de chcve estrange ira. A modifico ~oo de um dominio outomoticomente o lterar6 as otributos detodos os elementos de dodos o nexodos a esse dominio. Isso e devido 00 fato de que as elementos de dodos em urn domfnio herdom tcdcs os propriedodes do dominio 0 que eles se referem.
Figura 21 15
A tela Domains
Display.
P ara visualizar ou executar a<;oes em um dominio, inicie na t ela de Data D icti onary (veja a Figura 21.14). Verifiq ue 0 botso de op<;ao correspondence a Domains e escolha 0 bouo para as a<;oes que voce quer iniciar . Nesse exemplo, voce escclheu 0 modo de exibi<;3.o (veja a Figura 21.15). Como pode ver, as caract erfsticas de dom inio sao exibidas na tela. C om a instrur; ao par amet er , voce pede induir palavras-chave que podem restringir a entrada com certas opcoes. Essas tre s palavras-chave sao as seguintes: lower case - C om isso inclufdc na instrucio de selecao, 0 valor em letras min usculas inserido no c~po de entrada nao e automaticamente convertidc para letras maiasculas, ao contrario do que aeontece para to dos campos de entrada no ABAP /4 em tempo de execucao. Mantem urn valor padrao inicial para parametro.
Os elemen tos de teste devem ser montidos pa ra elementos de tela como Para meters a fim de oferecer a o usu6rio umo boo explicac;o o do que 0 compo de entrada Selection Screen recresentc no contexte do programo. Esses elementos de textc s60 independentes de idioma e s60 exlbidos no idioma de logo n do vsvc ric.
~.- .:.I
670
..
]I - -
671
Par a manter elemen tos de texto em suas telas de selecao, escolha 0 caminh o de menu Gorc-e-Text Elements do ABAP/4 Editor. Voce pede manter todcs as tres tip os de eexrc pan seu programa a partir desse ponto. Agora, verem os urn exemplo de edicsc de simbolos de texto (veja a Figura 21.16). A Figura 21.17 mostra a tela que permite a voce editar a s sfrnbolos de texto que voce criou em seu programa. Se voce quiser adicionar m ais, digite urn ntimero e seu textc e de urn clique n o batao Save. Tambem observe 0 re curso Where U sed, que realmente muito uti!.
Figura 2 1 1 7
Mantendo sfmboJos
de fexto.
1:"'~[jf."tii*; lM'Or.JI."""""'",~iWJI.~.?"<t",,~:7'.. ,
Hie life
A seguir esta a sintaxe para urn pa.r.imetr o que aparec e co mo urn checkbox:
parameters : te st parm as checkbox default ' X':
A tela inicial
Text
Symbols.
Nesse exemplo, 0 valor inicial e configurado como verific ado, ou configura do co m o X para 0 processamento logico do programa. As caixas de sele!Sao, ao contrario dos boeoes de 0pl$ao, njo sao mutuamente exclusivas e,
portanro, 0 usuaric pede ter tantas caixas de verificacfo quanu s forem geradas na tela de se1el$3.o.
Como voce aprendeu, a instrucio paramete r
se solicita urn deice valor de entrada . Se a entrada. requerida e melhcr representada em urn intervale de valores, a instruqao sele ct- opt i ons e.um campo
mais eficiente para se utilizar.
1Ib0 ,.
10YO ..
A instru ~o select-options gem umo tobelo inferno de setecec que ccnte m o entrcdc pore os entrcdos de compo otribvidas.
672
cria dais campos de ent rada qu e contem tanto urn campo FR()II com o um campo TO. em oposi~io a somente uma Unica entra da de campo.
A sintaxe para se l ect -o pt i OOS !!! A sintaxe para essa instrucio e aseguin te:
~
select-opt i ons ex sel l! for tabl e-fie ld default ' V UELOW ' to 'VALUEHI ' . Al
Ul
~ m
- - - - -- - - - - -- Esse exemplo gera urn gropo de trss parametres co mo bo roes de op csc. Como voce pade ver, esses botoes de 0P~30 sao agrup ados em u rn blo co na tela. Essa e uma boa prarica de programacao, porque ajuda 0 usu irio a. per cebe r que tod os per tencem 010 mesmo gropo de sc licincac de entrada. Esses pardmetros sao melhor utili zados para seleci onar urn unico valor de urna configu ralj3.o de varias opcces e devem center p elo menos do is bo toe s par
ANALISE compos para dados de entrada . Isso pode ser restringido para um 56 campo, utiliza ndo a cl6usula no-i ntervals no sintaxe select -options . Par exemplo, se seu
progromo nao requer um compo TO perc entrada no linho de instruc;oo sel ec t - cpt t ons,
mas voce oindo quer utilizer a instruc;60 select-optio ns, ind uirio lese no dcvsulc
... A inslruc;oo select -optfo ns exlbe umo linho que normo lmente tem dots
no- i nt er val s. Esso cldusulc, ossim como a no-e xtens i on, ser6 mois oindo explorodo
no exemploque cpcrece no fmc l destc set;6 Por enquonto, entretcnto, nos voltcremos 0. pore umo dlscussdc sobre 0 formata do tobelo de seleccc interne sele ct -opt ; ons. Essa tabela intema e mantida com a seguinte form ate de campo, se 0 usuario clicar na seta para a direita do campo TO da sel ect -opt t ons. Clicando nessa seta. voce abre uma tela de entrada Multiple Selections que preenche a eebela intema de selecao. Essa tab ela enuc arm azena os atributo s-chave dos dados de entrada, incluindo 0 valor SIGN, OPTI ON, lOWe 0 valor HIGH. Esses recurs os da instrucao sel ect - opt i ons podem ter as seguintes ccndicoes:
grupo. 56 um desses tres botoes de exemplo pode.ser selecionado em tempo de execuljio devi do a sua inclusac em urn gru p o. A integndade des dados e mantida, porque essa e uma boa maneira de solicitar entrada muruamen te exclusiva ao usudrio. Isso sed demonstrado mais ainda na se~o a seguir, em que hi urn exemplo de um a tela simples de selec;.ao que utiliza muitos elem entos de tela de selec;ao qJJ~ voce apren deu.
SIGN - Pode significar IN U E que e a padrao, au EXC LUSIVE, que CL SIV , p ode ser mar cada na jane la Complex Selections.
OPTIO N- P ede armazenar valores 6T (entre), CP (contem padrac), EQ (igual para) e GE (maior que au igual a). lOW HIGH Arrnazena a entrada de valor no cam po FROM. Armazena a entrada de valor n o campo TO .
Esse multiple select- opt ionpocle ser excluldc ufilizcndo-se 0 d6usulo no-ext enst cn como dedorado onteriormente neste ccpuvlc.
BotPes de tela de
sele~ao
Alem do campo parameters e select-opti ons, a ins trucio de tela de sele~3.o radi obutton e uma excel enee maneira de manter a integridade dos dad os durante 0 processamento da en trada do usuario em tempo de execuclo. A fim de criar Parameters como bot oes de 0p c;30, voce deve declare -los urilizando a cliusula r-ed tcb ut tcn gro up.
L..IL...I
- - 0\l2HELlSDE Sllf\AD
674
675
not ( ( p_Jdat e3 - ' l E 01' ) or (p_Jd at e3 i s init ial JIlessagl!! 1017 with ' We are now usi ng Ex~le 3'. endt f , i f ( P ex4 - ' X' ) and 1' ( ( s jdate4 - 'lE0 ) or ( s Jdate4 is initial m age E017 with ' Sel ect io n- Opt i on wi th no in t erval has no valu e' . ess ets et f ( p ex4 ' X' ) and not ( ( sj dat e4 - 'lEO?' ) or ( s_Jdat e4 15 i nitial IM!!ssage J017 with 'We are now usin g Ex~ le 4'. endi f . . 1f p_ex5 - X'. per f onn getJlrice _data . else . message 1017 w ith 'No Pri cing D ata sel ect ed ' . endi f. if p ex6 - ' X' . perfortll get _cost_d ata. else . message 1017 with '/'(0 Costing Dat a selected ' : endif . 1f p ex7 - ' X'. perfonn getJevenue_data . else . mes sage 1017 with ' N Revenue Data selected' . o end1f. form get _cost_data.
mUSE ,.
... Com o os botoes de opo soc mutua me nte exclusives, e uma bo o Idelc mente-los toclos no mesmo bloco de processomento no tela de selec cc. Note, no Figure 21 .18 , com o coda g rupo de ele mentos de compo foi isolodo pore canter 56 as compos que s60 relevontes 0 esse blocc de decislio . .
).
).
Como voce pede ver na Figura 21.19, e rnais dificil seguir os campos de dados exigidos quando eles n j .c esno agrupados em blocos de tela de selecso. Os pardmetros que sao definid os com a clausula 1i ke aparecerao com urna seta para baixo , na qual voce pede dar urn cliqu e para ver uma janela com uma Iista des valores validos (veja a Figura 21.20). Ago ra, podemos dar um clique em cosso batao de selecao. (Veja a Figura 21.21). Ele pr eencher s 0 camp o daque le parametro com 0 valor que voce river selecionado. Isso pod e ser mui to uti! para ajudar a ususrio a se [amiliarizar mais com as exigeccias de sele~ao que voce impes. Ao criar urn sel ect-option sem utilizar a c1iusula no- ext ension, voce disp6e da capacidade de inserir mdlriplas sele~6es au urn intervalo delas. Para
~.~~.~
676
APRE N OAEM21 O AUP/4 IAS
O .2UWSD SBfI,io
F i g ura 21 20
~
677
Fi g u ra
21 21
Escolho um volor
v6/ioo.
F igura 21 19
b/ocos.
f lgllra 2 1
22
ww
678
ww
679
Nesse ponte, voce pede inseri r todos as seus criterios de sele~ao e dar urn clique no bon e Copy (veja a Figura 21.23). Como pode vel', a seta mu dou de cor e agora everde (veja a Figura 21.24). Is50 reflete 0 fate de que voce selecionou mrilriplas selecoes par a esse campo e essas entradas preenc herao uma tabela de se1e~ao em tempo de execucgo. Se urili zar as clsus ulas nc- extens t ons e no-trrterva1s na instrucao se l ectoptions, voce obtera urncampo de entrada que[uncionade maneira semelhante . a urn cam po de pardmetro, co mplete com uma teela de seta pa ra baixo para ver entrada, validas (veja a Figura 21.25). "
23
Figura 21 2 5
de seleo.
inl'e fYOios.
Voce tambe m p ede u tilizar um a mensagem de texto do tipo erro . Esse ripe de mensagem acrescentara a programa e emitira uma meosagem de texto na barra de status. Isso eutilizado principalmenre para validar dados na entrada inicial (veja a Fi gura 21.28) .
aa
680
APREHDA EM 21 DIAl ABAPH FigurQ 21 26
D~ 2UEUS DE SElf(.lD
681
select -option
comvalor podr6o.
Esse exemplo mo stra muitos element os de telas de SeICIi2.0 combinada s em urn forma te simp les e eficiente . Examin e ocodigc que criou essa tela de
IFasa
---:...-_---lembre-se de utiliwr os elem entos de te la de se'~ao pore a s torefos mois odequodos pore elc s. Projete sues te las de selecec o justondo seus requisitos de entrcdo de dodos de
uma maneiro que sejo
Nco se esqvecc de ind uir bem-eloborodos retinas de volidoc;60 de dodos que vtiJizem as co pocidodes de evento do ABM' 4. /
f6cil de ser
Como mencio nado nesse ultimo exemplo, e boa pratica utilizar instrU~5es de mensagem como avisos de valida~o de entrada em tempo de execut;ao.
Figura 21 27
M ensogem pop-u p
Utilizando a
instru~cSo
message
Fig ura
21 28
As mensagens sao rnantidas e armazenadas na tabela noo e podem seracessadas a partir do ABAP Workbench. Urn prograniador efetivo emitemens agens que sao descritivas e ajudam a usudrio a entender a natureza do fluxo do programa. .E posswel atribuir a cada instrucao de mensagem tipos de mensagem que tern diversos efeitos no resultad o do programa.
S-
e exibida
A - Abend, a tranSa'iaO atual e interrompida e uma mensagem exibida ate que 0 usuario confirme-a. E - Error,
0
1- Information, 0 usuario deve pre ssionar Enter para continuer no mesmo P OntO no programa.
Voce deve especificar uma instru 'iao de informe message-id no comecc de seu programa.
. ~.
682
D~ , I, 1WS DE s<lE\-iD
683
21
30
!:!!
~
Esse ID de dais caracteres e urn mimero de mensagem de rres dfgitos, junto com 0 idioma, determinam as classes de mens agens. A SAP tom ou a inclusso de instrucoes de mensa gem em seu prog rama rnais facil utilizando camanda de instru~ao insert no ABAP/4 Edit or. A Figura 21.29 ea tela facilmente acessivel que aparece quando se da urn clique dup lo no nrlmero de ID de uma mensagem no p.,:,AP/4 Editor. Vamos ccm ecar pelo O bject Browser e escolher Other Objects na parte inferior da lista (veja a Figura 21.30) . Voce pod. pular para a tela Maintain
Individual Messages clando urn clique duplo no numero de ill cia niensagem
no AJiAP /4 Editor. Em seguida , insira uma classe de mensagem e de urn clique no Jcone para a a~o que voce quer executar. Nesse exemplo, de urn clique no modo Create (veja a Figura 21.31).
F igurA 2 1 3 1 A tela Mointcin M essage Doss.
;...........~:.-~~"'"""_M~~~ ~I:0~ ~ ...... _
. Agoravoceve atelaMaintain MessageClass; eaqui que voce pode inserir os atributos da classe de mensagem que esta editando (veja a Figura 21.32). De urn clique no botao de Messages para manter as mensagensindividuais. Agoravoce esd no modo de edi~a o, 0 que corresponde a urn item na lists de elementos de texto de mensagem. Depois que fizer as alteracoes necessaries, de urn clique no.batao Save e sua mensagem estara pronta para ser utilizada.
Flguro 21
I I
I
I
29
I I
I ,
I
I
~~
I I I I I J,.-:I-. I I I I - I I I .I I
"FIEND. Ell 21 DIU ABA PI4
Figura 21 3 2
. .. .. ... .. ..........
~
D~
684
,"'".15
Of SRI\AD
685
A tela Moinloin
Individual
Messages.
As mensagens podem ser utilizadas para comunicar 0 st atus do programa e a validade dos dados inseri dos, bern como para inreragir com o usudric de uma maneira que permira processar os dados mais eficientemente. Os elementos de texto devem ser mantidos para elemento s de tela de seler;ao, de tal modo que 0 usuario tenha urn born entendimento do uso dos varies objetos de campo para criterios de seler;ao. Com
0
especfficas.
P&R
o
IFasa
o que acontece se u rn campo de chave primdria eadic ionadc a uma tabela de verifica~o depois que uma chave estrangeira foi
ddinida?
Campos adicionais que sao adicionados achave prima ria de uma tabela de verificacso de chave estrangeira sao marcados como genericos e, ponanto, ignorados pelo siste ma ao validar dados icseridos no campo de cbave esrrangeira.
--'----------'Lembre-se de utili zer mensog ens de uma mcneiro que ajude a u$u6rio a Iraerir as
o
o
dodos de modo mois eficiente. FOl;O born usa dos classes existentes de mens ogem de sistema a ntes de crier as
suos pr6prias.
rel0t6rio.
o
Resumo
0 ABA P/ -4 e uma linguagem de programacfo baseada em eventos e voce pede tirar p rovei to desse fato utilizando as eventos at se1ecti on-screen e i n; t i al i zati on, assim como 0 evento at user-conmand, para vaLidarentrada do usuaeio utiliz.ando urn namero de tecnicas.
As chaves estrangeiras podem set utiliz.adas para verificar a integridade de dados de entrada urilizando os campos de chave primaria de uma tabela de verificaclo.
Workshop
o
Workshop oferece duas maneiras de voce verific ar 0 que aprendeu oeste capitulo. A se~ao Teste oferece pergunus para ajudar a so lidificar seu entendimento do ccnteddc abo rdado e a se~ao Exercfcio permite que voc e pratique 0 que aprendeu. Voce pede encontrar as respostas as perguntas do Teste e aos exerclcios no Apendice B, "Respostas is perguntas e aos exercfcios".
Os matchcodes u tilizam dados de pccl logicc para validar entrada de usuaric baseados em criterios especificados de sele~ao quando utilizados em conjuncac com pardmetros de tela de selecac e opcoes de
sele~ao.
Teste
1. Como os dais tipos de matchcode trabalham juntos com
armazenamento de dados de matchcode?
rela~ao ao
-,
SEMANA
Exerdcio 1
Crie urn relatcric de tela de selecso que lisre eodos as compooentes de urna ccnta de materiais em diversos idiomas. Construe campospara selecces de urn intervale de combinacoes de materiais e plantas. Lembre-se de utilizar as
elementos que aprendemos oeste capitulo que melh ar se adequarem as tarefas.
Revisao
Na semana pass ada, voce realizou as seguintes tarefas: produziu relatorios que utilizam sfmbolos grafi cos e leones
familiarizou-se com as evenros in iti al izat i on, start -at-sel ecti on, end-cf-sel ect ton, t op-of - page e end- at- page codificou sub-retinas extemas e internas e m6dulos de fun~ao. e passou parimetros digitados e nao digitados para d es por valor. valor e resultado e por referencia estabeleceu excecoes dentro de urn modulo de fun~ao para configurar 0 valor de retorno de sy-subr-c
criou telas de sele~ao utilizando a instrucic select-opt ions
A
Conven~oes de alribui~iio de nome
Convencoes de atribuic;ao de nome de programas
Ha dais tipos de programa:
Relat6rios
Programas de diaIogo
Carla tipo de programa tern suas pr6prias convencces de atribuic j o de nome. A Tabela A. I con tern as caracteres qu e nae sao permitidos em nome s
l
r ,
de program',
Tabel a A.l Corocteres inv6lidos para names de progromo
Cara ctere
Descri~60
Ponto Vlrgulo
Lacuna
()
Sublinhodo
%
Sino! de po rcentagem Coroderes com trema e "'s duple clemco"
Aeo s u os
..
htIpJt-.mmpus.tom.br
~ I I" .I I .I I . 690
'PRE'" E. 21 DIAS ABAP/4
--
i
Convencoes para otribuicco de nomes a programas de di61ogo .
N a mes de pragrarna de dialogo de c1iente segu e a convencfo
SAPMYxxx au
SAPM2=, oD de:
O s p rimeircs quatro caracteres devem ser
e 10.
SAPM.
Forma longo
FI MM SO PP
Fonna
curta
mesm o quiser criar urn ob jero de desenvolvimentc, deve cris-lc no interualo de nom e de cliente. As convencces para intervalos d e Domes de clientes sao mostradas na Tabela A.3.
Tabela A.3 Intervclos de nomes de cllen te s pora todos o s o bjetos de desenvolvimento do R/3
i
i
1
2 3 4
npo de objeto
Max.
ABAP Query /4
Q uery Functional Area Fundion Gro up Appen d Structures Appe nd Structure Append Structure Fields Application l ag s
Comp rim.
ConYen~ao
Notas
d e atribui'ioo de nome
I I I I
I
i,
TR
OM PS P M WM
5 6
7
2 4 3
8
9
10
10
10
Y* Z
HR
M
YYZZ
Y or Z Y o r Z Y' Z
ony
11
13 14 21
Object
Control ling 12
Sub-Object
Area Menus Avthorizotion s Avthorization Authorization Closs Authorization G roup Authorization O bject CATT Flows
10
4 12 4 30 10
PI 1M LO IN
22
23
CA
.I
692
~I-I
693
Notas
Tip o de ob (eto
Comprim.
M6x.
Field Exit Func Module User Exit Func Module
Nota s
10
4
Codepoges
Data Elements
Dot e Element Data Elemenf Supplement
Y or Z 9'
y. Z
Se 0 diente crlou o elemente de
30 30 30
8
7
10
4
"dodos
SAP Supplement
Data Models Doto Model
E nfity
Develo pment Closses
9'
Se 0 SAP criou 0
ele mente de dodos
10 10
4
y. zy. t:
y. Z Y ZtRP_*
RHJNFOTYP _9'
DialogModull!s
Dccurre ntction Modules
30
IDOCs Segment Type Basis IDOC Type Enhancement Type IDOC Type Includes (DDlq Customizing Includes
8 8 8
10
General,Text (TX)
Test Run Description
Includes (Programo)
Structure
O nline Text Domains
28 20 20 20 20 26 20 12 28 10 8 8
4 4 4 4
y. Z
y. zy' Z' y. Z y. t :
8 8
4
Y z
ZffffUnn
ffH
= func group
y. z y. z:
y. Z
lock Object
logical Data bases
10
3
9' EY. E Z Y o Zo
y.
z:
logisticsInfoSy stem Event Unit Maint. & Transport Obje cts Motehcodes Matchcode 10 Motchcode Objed Messoges
y. Z
y. Z
2 2 10 1
4
y. Z y. z: y. z
Fund ion
Codes
y' Z'
Functi on Code
0-9
y.
Menu Exit
Function Ubrary
+'
y.
z:
Functio n Group
z:
XZ'
Y_ Z_
2 3
y.
z:
30
-. ..
694
-- - - - - - - - Notas
695
Max.
Dialog Module Pools Screen Modul Pools e Info Type Module Pools Subroutine Modul Pools e Update PgmModule Pools Number Range Objects
Parameter Ids
Printer Ma cro s
Conven~ao
Tipo d e obieto
de atribuiCjoo de nome
SAPDY' SAPDZ' SAPMY' SAPMZ' MP9' SAPFY' SAPFZ' SAPUY' SAPUZ'
System Barcode Standard Task Stondard Roll Structure (DDIQ SYSlOG Message fO
Max.
8 8 8
Comprim.
ConvenCjQo
Notos
8 8 8 8 8
v z:
9' 9'
10 2 10
y. z
y" Z
Emestruturcs appe nd: YY- U
10 3 2 20
8
y. z y. zy. z
3 10
y. z
T9'
apenos
y. z
Pora tobelcs de pool no pool ATAB paro tipos de informco de cllente
4 14 14 14
8
y. z: y. zX CUS& Y' Z' 1a carodere noo ~9 111 carod ere noo 0-9 1a ccrcctere noo 0-9 111 coroctere noo 0-9 1a corodere ndc 0-9
PoolNome
Report Variant Tronsportable, G labal Transportable, Local Not Tronsportable Report Writer Report Report G roup Library Standard Layout SAPScri pl Layout Set Farm Standard TextlD Standard Text Nome Style Screens
4 3
7
12 16 4 32
8
y. zy. z y. t: y. Z
9'
Tobie Pool Nome Table Cluster Name Titlebcrs Tronsad ion Codes Type Group User Profiles
Views View Cluster View Name
10
10 3 4
5
y. t: y. z y. z y. z
c ny
I ,
I
:I I'
I ,I I
II I'
12
_ nee permitido
>0
Spaol Layout Type Fonl Group Device Type Page Former
16
8 8 8
y. z Y z
Y Z
z-
HelpView View Maintenance Data View Content Table Content Worlcflow O bjed Type
10 10 10
y. z
H_Y H_Z reservodo no TRESC reservoda no TRESC
10
Y' Z'
~ .- .- I- Y
-. -. -.-. - - - . -. -. -
. . . . . . - --- - - - - - - - - .
.~-
696
Vo ce descobrirf que existe m poucos ob jetos SAP dentro dos intervalos de nome de diente e que, portanto, violam as conven cc es de atribui~ao de no me des critas aqui . Esses objetos foram criados ant es de as convenco es precedentes serem adotadas. Uma lista dessas exceco es pede ser encont rada na tabela TOKZ.
B
Respostas cis perguntas dos , testes e exerclclos
Die 1. " Q embiente de desenvolvimento"
Re spQsta s do teste
1.
SM04 (utilize 0 caminho de menu: Syrttm ->StatNS)
servidor
6. O p en SQL e0 dialet o ANSI SQL da SAP. Eurn subcon junto e um a vari.<;ao do ANSI SQL. 7. 0 Open SQL tern eres vantagens:
hrtpJ I_
.campvs.c;om.br
-.A.A .
698
- -- - - - - -
- --
699
rolagem con tern as valores das variweis para esse programa e 0 ponteiro atual do pr ograma. 10. Urn context e de usudrio e aloeado toda vez que urn usuario eferua lo gon, e desalocado quand o esre eferua 0 logoff. Ele comem as informacces sobre 0 usuario, co mo autorizacoes, con figura coes de perfil e endereco de TCP/JP. 11. 0 roll-out ocorre no fim de urn passo do dislcgo . Ele libera 0 pr ocesso de trabalho para prepara-lo para Dutra sclicieacso, de mo do que 0 pr ograms nao utilize a CPU enquanto espera pela entrada de usuario.
diferenca na safda para esse programa, especificandc ou Ilia as aspas. Entretantc, para evirar conversoes e uma boa prari ca de programacfo e toma 0 programa mais eficienre.
1 report zt z020l. 2 tables ztxlfbl. 3 select * from zt xlfb1 where bukrs >- '3000' 4 order by bukrs lifnr descending. 5wr i t e : / zt xl f bl- bukrs , ztxlfb1 -1ifnr. 6 endset ect , 7 If sy-sub rc <> O. B wri t e / ' no recor ds f ound' . 9 endtf ,
r i
I
2. M ova 0 teste para sy-s ubrc depo is de endsel ect, como mos trado aqui:
1 re port ztz02 02. 2 ta bles ztxlfal. 3 se le ct * from. ztx l fal where lifnr l tke ' IA' . 4 write / ztxlfall1fnr. 5 endse 1ect , 6 if sy-subrc <> O. 7 wr1 t e / no records found' . 8 endif.
3.
programa
Ha urn ponte ausente no firn da instrucio tables, e a rnimero do fabrican te deve ser preenchido aesque rda com zeros porque de eurn campo de .caractere no banco de dados. (Esse componamento e inteiramente explicado no capitulo sabre con vers oes.)
1 report ztz 0203. 2 table s zt xl fa l. 3 sel ect * f rom ztxlfal where ll f nr 4 wt-tte / ztx l fa l - 11f nr . 5 endsel ect.
>
2. A area de trabalho de tab ela padrac ea area de mem6 ria alocada por uma insrrucac tabl es . Essaarea de mem6ria ternome smo nome e a mesma estrutura que a tabela ide nti ficada na instruci o ta bl es. A instru cj c sel ect utiliza-a par padrao se nao h ouver a clausula into.
'0000001050 '.
3. N a area de tra balb o de tabela padrao. 4. P ara a mesma Iinha que a saida da instru~ao write anterior.
4. A ultima linha da said. sera no r ecords found, mesmo se as registros forem loc alizados . 0 problema esti na linha 6. 0 test e deve ser para igualdade, n'o desigualdade .
1 2 3 4 5 6 7 8 report ztz0204. tables zt xlfal. select - fl"Olllltx lfal where l ifnr wrf te / ztxlfal -l1fnr . endse\ ect . i f sy-dbcnt - O . wri te / 'no records found' . endif.
5. sy-subrc 6. sy-dbcnr
7. A linha 4 sera executada 30 vezes, uma vez para cada linha recuperada. 8. N enhuma vez. A linha 4 nao ser.i executada se a tab ela estiver vazia,
programa~ao
>
' 0000001050' .
..f: . .-
.......................Aua.....--.JII.-A-~ 700
' PiE' O' EM2101' S " "" 5 endse lect. 6 1f sy-subrc <> O.
. - -
- - . -
701
7
8
end if.
Respostos do teste
1. 0 do minic d.a a urn camp o suas caracterlsticas recnic as, como tipo de dado e comprimento.
6. Veja 0 program. original , .atab ela zt xl f c3 ndo ~ utilizada: a d efini~o para eta pod e ser removida da linha 2. 0 into ztxl fal na linha 4 naa e necessaria , uma vez qu e zt xlfal e. a ,an a de trab alho padrao. As linhas 5 e 6 podem ser encadeadas juntas. A segunda exp ress sc que utiliza sy-dbcnt na linha 8 e redu ndante e po de ser re movida. A linha 12 nao precisa de uma area de trabalho explfcit a, enrao pode ser removida. Consequentemente, as linhas 13 e 14 devem ser alterada s para escrever ztxl fb l, e a linha 3 DaO e mais necessaria. As linhas 13 e 14 podem ser encadeadas junta s. 0 pro grama simplificado segue:
1 report ztz0206. 2 ta bl es: ztx lfa l . ztx lfb l.
3
4 S!1ect * f rom ztx lh l . 5 write : I ztx lfal- l1f nr, 6 ztx lfa l-namtl . 7 eedse 1ect 8 i f sy-subrc <0 O. 9 wr;te I ' no records found in ztx l fa l ' . 10 endif . 11 uj t ne. 12 sele ct * from ztx lfbl. 13 w rite: I ztxl fbl- l1fnr . 14 ztx lfbl- bukrs . IS . eneselect 16 11 sy-subrc <0 O. 17 write / ' no records found' . 18 end; f.
Nso, a posi~ao do ponto decimal e pane da descricao do campo. Ele esta co ntido no domlnio, nao arm azenadc com 0 valor.
S. SE 16, SE17, SM30 e SM3l. SE16 i mais comumente utilizado, e SE17 nao pode ser utilizado pa ra arualizar dados. 6. Uma tabel a transparente tern urn relacionamen to urn para urn com uma tabela no banc o de da dos. Tab elas de pool e de cluster tern relaciona mentos muitos para urn com tabelas de banco de dados.
Resposto do exerddo 1
Para essa solucao, veja a tabe la ztz l f al do sistema R/3.
7. 0 erro de sintaxe e causado pela endsel ect na linh a 5. Ele deve ser removido. Vo ce tam bem pode corrigi r 0 erro de sintaxe removendo a palavra s i n91e cia in struqao se 1ect na linha 3. Enrr etant o, essa e uma solul;ao menos eficiente, uma vez que apenas uma linha sera lida. 0 operador de comparaclo na linha 3 tam bem esta incorreto. Ele deve ser .
report zt zOZ07. tables ztx lfal. select sing le * fro m ztxlfal w here lHnr '0000001000'. wri t e I zt xlfal- lifn r . if sy-s uerc <0 O. write I 'no records found ' . endi f.
Re sposto do exerdcio 2
Para ver a solucao para a tabel a .. knal , veja a tabela zt zknal do siste ma R/3 . A solu r;ao para 0 reLat6rio e a seguin te:
1 2
3
4 5
6 7 8 9
10
report zt z0302. tables ztz knal. select ... from ztz knal. write: / ztaknet- kunnr , zt Zknal-namel , ztzknal-cityc , zt zknal-regi o, ztzknal-1andl. endsel ect . 1f sy- subrc <0 O. wrl te / ' No rows found' . endif .
~LA~.I_. _.I
I I I - I
.&.PEND B RES ICE : POSTAS As PERGUNT.lS oos TESTES EEXERdclOS -;- ---------------"'==::::..::=:.:.:::===~=~, 703 ,
I~
Re sposto do exercfcio 7
Para a soluca o desse exerclcio, visualize a tabela zt zknal onlin e do sistema R/3 .
Respostos do teste
1. Eles devem utilizar 0 mesmo dominic. 2. D entre de tabela ztl, digite . IN CLUD no campo de nome de campo e E zsl no campo de nome de elemento de dados, no ponto cia rabela code
a est rut ura deve ser incluida. 3. Urna tabelade text o ofere ce descricoes para c6digos contidcs em uma tabela de verificacsc em multiplas linguagens. 4. m andt, spras, fl e f2. 5. Cada camp o de tip o CURR deve fazer referencia a urn campo de chave monetaria (tipo CUKY).
Resposto do exercfcio 1
Para a sc lucic desse exerctcio, visualize a tabela ztzt005 online do sistem a R/3.
Resposto do exerclcic.Z;
Para a sclucso desse exercfcio, visualize a tabela online ztzt005s do sistema R/3.
Nao se esqueca de comparar a cardin alidade e 0 cipo de campo de chave estrangeira do relacionamentc de chave estra ngeira com aqueles especificados online.
Resposto do exerdcio 3
Para a solucso desse exercfcio, visualize a tabela online zt zlfa l do sistem a R/3 . N so se esquelja de comparar a cardin alidade e 0 tipo de campo de chave esrrangeira dos relacionamentos de chave est rangeira com aqueles especificados onlin e.
Resposto do exerdcio 4
Para a solucao desse exerctcio, visualize a tabela online zt zknal do siste ma R/3. Nao se esqu eca de comparar a cardinalidade e 0 tipo de campo de chave estrang eira de cada relacionamen to com aqueles online.
Resposto do exerdcio 5
Par a a solucao desse exerclcio , visu alize as tab elas online ztzt005h e zt zt005g do sistema R/3. Nee se esqueca de comparar a cardinalidade e 0 ripe de campo de chave estrangeira de suas chaves est rangeiras com aqu eles on line.
Resposto do exerdcio 6
Para a soluc;ao desse exerctcio , visualize a estrutura .. t el e as tabelas online zt zl f al e ztz knal do siste ma R/3 .
- ~ - - - .-"
705
1_. B'
....~_::i:irW-'-.:
- ".: :;':
- ~'-"
~~....
.Id '"
Ax
-H::I.t'JnO
Re sposta do exercicio 1
1. N o utilitdric de banco de dados, de urn clique no bono Delete Database T able. 1550 "derruba" a tabela, que com 0 con teudc sera exclufda. Voce pede recriar a tabela pressionando 0 bono Create Database Table. A tabela sen recriada utilizandc a versso ativa da tabela. Voce pede utilizar 0 utilitario de banco de dados. Seja cautelcsc quand o fizer isso em uma tabela na SAP.
entre aspas simples e ela exige duas aspas cons ecut ivas dent ro dele. , 2. A def mi~ao corret~ e 1+2 .2E03 ' . 0 caracrere de expoent e e E DaO F. e os decimais DaOsao permi tidos em urn expoente.
.......II!!!!!!!Iool
L&
-.....,L~
-.-.-.-- .~
.,. _
707
706
2. Os tipos de insrruco es que podem ser u tilizados sac dados e tipo de estrutura. O s definidos pelo usudrio sao definid os no Data Dictionary para facilitar a manu tencao e aju d ar a reduzir redundan cia.
Re sposta do exercicio 1
t ypes : dollar (16) p01nt(16) t ype p deci mal s 2, type p decimals O. "pontes de carUo de
c r~ d i
to
1. A defini,:;io correta e dat a st_f1(S)type c. Urn hife o Dio deve aparecer na definiljio de urn nome de varidvel. a caractere sublinhado deve ser utilizado no lugar dele.
2. A defini ~o correta
edata
eC.
3. A definiliio correta e data f l (20) t ype c. N ac deve haver urn espalio ent re 0 nom e de campo e iL espe cificacjo de comprimento.
4. as nomes de variav el nio devem iniciar com um numerico, e urn comprimentc nso epermicido com 0 tipo 1.A definic;ao co rreta ~ data al t ype t
dat a: begi n of usd amount. hotel type dollar, rent car type dollar , plane t ype doll ar , food t ype dol la r . end of usd_amount . begt n of arnex pt , hotel - type p decimals 2, rent _car type point . plane type point. food type poi nt, end of arnex_pt.
Re sposta do exerdcio 2
O put: ut
1 3 4 5 9 8 7 6
cent type p decimals 1 val ue ' 55. 51 Urn hifen na c deve se r utili zado em urn nome de varidvel. U rn decimal eespecificad c no valor, mas a adic;ao decimal s esd. faltand a. 0 valor con tern urn decim al, mas nia esd. colocado entre aspas .
per
Resposta do exercicio 1
re port ztz0707. par amet er s: p dat e li ke sy- dat um def ault sy-derem, p-fie ldl ty pe c. chckboxl as checkbox. chckbox2 as checkbox. radbutl radt obut t on group 91 dl!faul t ' X', radbut2 radt obut t on group g1.
1. Vo ce pode utiliz ar eq au =. Par exemplo, move vara to verb. eo m esmo que varb = ver a. au varb eq Y d. ar
2. Os operadores e operan dos devem ser separados por espacos para que as variaveis possam ser compu tad as.
Respostg do exerdcio 1
1.
2.
sperz
konzs
3. fdpos
..... ....
-
-.-.-. -. -
-~~
4.
msgid
5 . matkl As duas coisas erradas no programa sio a declaracac de ubela de ztxt 005t e as aspas simples an tes cia variavel, 1and!. Declare a. tabela ztxt005t e remova as asp as simples antes cia variav el 1andl .
2. Se voce fizer isso, 0 sistema alocara 8 KB da area de paginacao. A mem6ria sera desperdicada e a paginao;:ao pod erf aumentar , resultando em baixo desempenho. 3. A insrrucao read ta bl e pede ser utilizada apenas para ler tabelas int em as. Ela nao funciona com tabelas de banco de clados. Utilize select single em vez dela.
2. Os operado res de strin g sao C [ccntem padrao] e NP (nao contem P padrao). 3. As [ r e S instrucees de contrale de p rcgrama SiD exit, continue e
check:
Resposto do exerdcio 1
N os sistemas anteriores, as convers6es cram executadas convertendo a partir do valor i direita do tipo de dado e 0 comp rimento do compone nte i esquerda.
A instrur;io ex; t eutilizada para prevenir que mais p rocessament OS ocorram nas instruljoes loop, select, do e while e nas subretinas introduzidas par fonn.
A instrucic conti nue e utiliaada para pular tawas instruljoes na passagem areal de loop e ir pan a final do loop . Ela pede ser utilizado com as instruo;oesloop, se lect , do e wh il e.
A instruci c check ecomo a instrucao conti nue mas pode cent er uma expressao 16gica.
Resposto do exerdcio 1
report zt zl ool . dat a: 11(2) typ e c. do 20 ttees , write I sy-tndex. do 10 t imes . 11 sr-tndex, writ e 11. enddo.
endee.
C ZTXIOOI 000060
Ll SY -INDEX.
Nas linhas 9 e 10, havia uma conversao de c para n (de caractere para numerico] e entao uma conversao de p para I (de pardmetr o para inteiro). Na linha 16, havia uma conversao de p para I (de pararnetrc para int eiro}.
.'1
..~ Jl _ I
.3 ~.
I _ .. I
. . . 11 .. I
~.
. ~. ~. -.
..
-.
-.
.~.~
710
711
oyon~odas.
Parte 1"
1. Sua alteralja o para sy- tab ix seria ignorada e as instruc;6es operariam nalinha na area de trabalba . sy-tebt x ecomo sy-t ndex- modificando qualquer urn naa iria afetar as operacoes de loop. Alem disso, 0 valor de sy-tabt x ereinicializado no endloop, e a pr6xima passagem do loop prossegue como se 0 valor nunca tivesse sido alterado. 2. A tinicacoisa que sy- toccu pede dizer a voce que outras variaveisDaO podem e se sua tabela interna esta inteiramente na area de paginafjao. Se for zero. ela esrara inteiramente na area de paginaclo . Isso oaa tern nenhuma utiliz:lc;ao em urn sistema de producao, mas voce pede acha-lc uti! durant e 0 desenvolvimento para confirmar sua expecta, tiva de como a memoria e alocada para uma tabela inrerna. Se, par exemplo, voce espera que a tabela interne este ja na area de rolagem, mas sy-toccu contem zero (indicando que esd, na area de paginacao), voce pode precisar dar ma.is uma o1hada em sua clsuscla occurs para determinar se ela esti. correta.
Resposta do exerdcio 1
r eport ztz 1201. t abl es ztx l fa l. data it 11ke ztxlfal occurs 23 with header li ne. s ele ct f rom zt xlfal i nto t abl e it. n~o codif1que urn endselect l oop at it. write : I sy-t ebtx, ft - l andl , i t - regi a. endloop.
ul t ne .
sort 1t by f1. do 5 t imes. 1t -fl a sy-tneex 10. 1t-f3 a ' XX' . 1t -f2 a It -f4 .. sy-tnde x. read table 1t wit h key fl .. it-fl binary s earc h compa ri ng f 2 f3 14 transporti ng no fields . if sy- sucrc 2. modify it i ndex sy-tabix. e1seif sy-subrc <> O. in s ert it index sy-tab1x .
endt f ,
enddo.
loo p at it . write : I it -fl , 1t -f2, 1t -13 , it-14. endloop.
Re sposto do exerdcio 2
Eis uma maneira eficiente de corrigir 0 problema:
report ztz1302 . tables : ztx lfa1. data: begin of it occurs 10 , lifnr 'lf ke ztxlfal -1ifnr, landl Hke zt xlfal-landl. end of i t . sele ct l 1fnr l andl from zt xlfal into table i t. loop at it. write: I i t-Hfnr-,
it- la ndl .. ' US '. modify tt in dex 3 t ra nsporti ng land1. 'it - regi o ' TX' . IIIOdify it transporti ng regio where regia " 'MA ' . l oop at i t . write: I sy-t abl x. t t -t andt , tt -reate. endl oop. free 1t.
ayan~odos,
Parte 2"
tt- tendl.
endloop .
1. Campos nu mericos (tipos 1 p e f ) saopreencbidos com zeros. 0 resto dos campos a direita do nivel de controle sao preenchidos com asteriscos.
713
Re sposto do exerdcio 1
1 report ztzl 40l. 2 write: / . . . . + 1. + 2 + 3. . + 4'.
3
4
5
6
/ 16
/30
Resposta do exerdcio 1
A linha 3 comeca em urn loop do. Na primeira passagem par ele, a
instru~o write na linha 6 aciona 0 evento top-of-page. 0 valor de
2. As duas adic;6es ut ilizadas com a instruc;ao re port sao tamanh o de linha e contagem de linha. As varifveis utillzadas para as adic;6es devem ser numericas, po rqu e ccntrolam 0 tamanho da pagina.
Re sposta do exercfcio 1
report zt:1501. i ncl ude <symbol> . write : / 4 sym f i ll ed square as symbol . ' square' , / 4 s)'lll) i ll e(dla mond as symbol , ' di amond' , /4 S f1ll ed ci rc l e as symbol , "ct rct e ", )'lll / 4 syr'I-gl assei as symbol, ' gla sses' , / 4 S - penci1 as symbol , 'p enci 1' , yrI / 4 S)'1llyhone as syrnol , 'phone', / 4 S)'II note as syrrbol, ' not e'. / 4 S)'lIl)older as symbol . ' fol der' .
sy-1 inno sempre contem a num ero da.linha atual da lista. Nesse ponte, ele e configurado como a linha que se segue aos titulos padrao da pagina. A linha 13arribui esse valo r avarifvel. 0 ccntrole retom.a para a linha 6 e Aeescrito. Em cada sucessiva passagem p elo loop, a hnha 8 incrementa a valor de e a linha 9 co nfigu ra a linha de saida atual. Isso resulta nas linh as escritas sucessivamente na safda,comecando na linha segu in do as titulos padrao.
A linha 4 comera em urn loop aninhado do. A ca.da pass agem par ele, a linha 5 configura a posi~ao de salda atual como igual a iteracao do loop atual . A posicac atual de salda e co nfigurada como 1 na primeira
714
715
vez.Na segunda vez e configurada como 2 e assim por diante. Isso faz com que a linha 6 escreva a letra A quaere vezes , nas colunas 1-4.
Dia 18, "Modulariza c;oo: passa ndo pornrnetros para sub-roti na s"
Respostas do teste
1. Os names de pardmetro que aparecem na instrucic fonn sao ch.amados parJm etrosftmnaiJ. Esse termo eficil de lembrar porque formalpossui 0 radical form . Por exemp lo, na instrucao form s l using pt changing p2 p3, a s parametres p l, p2 e p3 sao chamados param etre s formais. 2. Pas sar uma varia vel do tip o de dado errado ou comprimento para urn pargmetro digitado causa urn erro de sintaxe.
3. Para ser preciso, urna variavel somente e conhecida dentro de urn prog:ama depois do POntO em que e definida. Por exemplo, se vo ce
definisse uma variavel na linha 10. seria capaz de acesss-la na linhas 11 e mais tarde, mas nae nas linhas 1-9. No case de urna definiciof ocal , voce po.d: acessar a vers ia global da variavel em qualquer ponte antes da definicgolocal,
3. Nova mern6ria Ilio ealocada para a valor. U rn pont eiro para a posic;ao original da memor ia epassado, em vez disso. T odas as referencias para o parimetro sao referecciasa posic;:ao original cia memoria. As atterac;:6es na varia-vel dentro cia sub-retina atualizam a posic;:ao original da m em6ria imediatamente. 4. As duas adic;:6es usi ng f1 e changing fl passaro fl par referencia
elas
c-,
Resposta do exerdcio 1
. REPORT ZTZ1701 NO STANOARD PAGE HEAD I NG .
TA BLES ZTXLFAI . RAMETERS P _LANOl LI KE ZTXLf Al- LAN l. O PA INITIALIZATION. P_lANDl 'US'. START-OF-SELECTION. PERfO CREATE RM _REPORT. FORM CREATE REPORT. SELECT * FROM ZTXLfAl WHERE WDI P lAMD!. PERFORM WRITE REC . ED H SELECT. EH FORM. D f ORM WRITE_REt. WRITE: I ZTXLFAl-LIFHR. ZTXLFAI-NWI. ZTXLFAl -lAMOl. ENDFORH.
Resposto d o e xercicio 1
A seguinte saida
e gerada:
=
A se'ia-o de inicializacfc Ilio e executada porque nenhurn criterio de seleliao esta pr esence no programa. 0 evenrc Sta rt-Of-Sel ect i on eexecutadc. Quando 0 programa obtem a primeira instrucao wri te, 0 controle no programa e passado com a evento Top-of-p age . Quando 0 evento Top- of -p age esd. complete, 0 controle e passadc de volta para 0 event o Start-Of-Select ion.
TOP-Of- PA E. G FORMAT COLOR COL HEADING . WRITE: I 'Vendors wit h Country Code ' . P lAND I.
Dia 19, "Mod ula rizac;oo: mod ules de funcco, Parte 1"
Respostas do teste
1. Verdadeiro. Vo ce nunca precisa especificar u rn valor para urn pa ra-metro de imporracao que tern uma proposta. 2. Verdadeiro. Voce nunca precisa codi ficar param et ro s que sao exporcade s do m6dulo de fun~ao.
U NE. ll
::A' .....
716
-I
. - .- -..~
- . -. -
. . . - - - - - -~
717
Rasp.osta do exercfcio 1
programa executa, a tabela interna e pre enchida e 0 modulo de com 0 coareudo cia tabela intema apar ecerd. D ep ende ndo cia entrada escolhida pelc usuario , eta entao imprimira utilizando a insrrucic writ e. Q uando
un~ao
2. Sim, as caracterfsticas de urn dominic vinculado com elementos de dados tambem sersc alteradas, porque as elementos de dados em urn dominic herdam todas as propried ades de urn dominio que sao referenciadas.
3. A regra primaria para eseabelecer urn relacionamento de chave estrangeira e definir e vincular urn relacionamento entre multiplas
tabelas.
Resposta do exercfcio 1
report ztz2101. tables : m , tOOlw . ara Selection parameters for BCls select ion -screen begin of li ne. se lection-screen CCllTITlent (33) text-beer . parameters : bom like mara-matnr. spras l 1ke tOO2-spras . selectten-screen end of line. selection-screen skip 1. Setect-epttens : matnr for mara-matnr, werks for tOOIw-werks.
Resposta do exercfcio 1
I" function z_tz_dh . 2 .-- ------ - - --.-- - --- - - - - - -. ------ -- .-- --------- - 3 local interface: 4 lKf10RTIHG 5 VAlUE(Pl) TYPE 1 D EFAULT 1 V AlUE(P2) TYPE I 6 7 EXPO RTING V AlUE (P3) TYPE P 8 9 EX CEPTIONS 10 ZERO_DIVIDE 11 .... - - - - - - - - - - - --- - - -- --- - - - - - --- --- - - - - - - - - - - - - - --- - - --12 if p2 D. 13 rais e zero _dlYide . 14 endlt. 15 p3 pI / p2. 16 endfunction.
.- . w.. .
--- - - - - . ---- - ~ - - -
indice
A_ _
ABAP/4 lisn gem de sintaxe basica, 230 primeira listagem de
pmgram~
acrescentando campos a
tabelas, 126
49
segundo prcgrama listagem, 72 listagcm revisirada, 263 lisu gem simplificada, 76 ABAP/ 4 Dictio nary: Maintain Technical Setti ngs Screen, 189 ABAP/4 Editor conerole Help (barra de
[erramentas
50 ABAP/ 4 Key Wor d Doc, ccm and o (men u U til ities). 520 ABAP/ 4 T ext Elements: Change Ti tle and Heading. tela, 503 abordagem bottom-up dominios, criando,
110- 111
u tiliza~es,
Active, versoes de tabelas comparan do com Raised,2 17 comparando com tabelas de: banco de dados,
2 19-220 descri ct o, 2 16
elementos de dadcs,
criando, 11 3~ 11 6 tabelas, criando, 107 eabelas transparenres, criando, 117-122 abordagem top-d own, tabelas adicionando campo a, 122-113 crian do, 107 Accou nting, menu, comando Accounts Payable, 13 acessand o biblioteca de fun~o. 586 Ierramenta urilitaria de banco de dados,
218-2[9
ajuda Fl, 64
cont rcles de barra de ferramenw Application, 57-58 contrcles de b21T2 de ferramenw . Standard, 52-56 fun~6es, 61-63
now de versac, 96
adapt2!roc:s automaticas e iostru'iao move. 285-287 ad2 pta~oes de comprimento e tipos de dado. instru'.?o move, 285 ada pta~6es de tipo e tipos de dados, instru~o move, 286-287 adi~ao arre don dada, instru~o write, 470-471 a di~ao bina ria de pesquisa, instru~o read table, 359 adi,?o de campos correspondentes, 421-422 adi~ao decimal, instru'.?o wri te, 470-471 adi~ao e correspondences, instrucoes, sintax e, 299 adi~o monetiria, instru~ o wri te, 471-473 adi~ao. subtr.l,?o, multipllcaeio, divisao e ccrrespondentes, instru~6es, listagem, 299 adi~Oes graflcas, tipos, 697
hllpJt-.cumpus.com.br
720
INDICE
A pplicatio n, berra d e ferramentas, 16 batao Foreign Keys,.liS bo de O bject Log. 230
at selection-screen, even to, &55 at user-com mand, evenro, 655-65& ativando
721
alter.tndo
bl occs (elementos de
se le~io de tela), dcscric;,io, 667 botoes de 0 P~oJ efeieos em caix2s de grope, 51 buffer em registro unicc,
m6dulos de funlSio,
&04-605 .objeros, descri~o, 107 atribuip,o di.n.amica, simbolos de campo, 309-310 atribuip,o. ins tru;6es
portabilidade de ecdigc,
36 prcjeeandc e desenvolvendc, campos Valu. Tobie, 165 suporudos pelc R/3, 21 barra de sta tus , 17 barns de ferra m entas Ap plication (ABAP /4) , 57-59 Application, 16 bode de Log de c bjetc, 230 bot i o Foreign Keys,
elemen tos de dados e, 102 inserindc linh as em u belas, 130 links de hiperrexto, adicionando.1 36-138 tela ABAF/4 Ed itor. Edit Program, 64 tesrandc , 136 a juda, po ssiveis entradas, 150 ajuda, sistema de ABAP/4 Edito r ajucUF l , 64 eodigcs-fonte, ajuda ao editar, 65-66 Initial Screen, 65 Rl3 Library, 65-66 tut orial,64 ajuda Fl campos, adicionando, 135- 136 elementos de dados e, 102 inserindo Iinhas em eabelas, 130 links de hiperte xrc, 136-13 8 testa ndc, 136 ajuda F4, chaves estran geiras e, 150..1 51 ireas fun cionais, 10 diilogos de manuten';i o. 134 dominios, 111 alinb3m ent os, 30J
analise de programa. realizando, 319 aninhandc estrutu ras, 172 ani nhando loop s do, 713 ano s fiscai s, pertodos de publica;ao, 439 aplicarivo, areas, c6digos para , 690 ap licativo.dadosde defmi~o, 97 tipos , 701 apl icativos , conjuoto padrio, 7 ap pen d lines , inst.ru'iao, 392 app end sorted by, instrUc;ao, 413-417 A ppen d Structu res, tipo de obj eto, 691 append. ins tru cio, e tabelas
principal , 10 APPLO, classe de dados , descri~o , 194 ar ea de tela de m enu principal . 17 Command Field, 19-20 In terface Menu , 17-19 ar ea de ~balho de tabela padrio,descrlc;ao,698 area funcional , conhecimento, 9 Area Menus. tipo de objeto,
& 91 areas de pagina;ao. sy-toccu e, 710 areas de trabalho expl fcitas, 77,354 areas de trabalhc imp licitas, 354 areas de trabalhc, exp llcitas versus im plfcitas, 354 areas fu ncionais (m6 dulos ) Ionres de inf or m2'ioes em, 10 visio geral, 8 areas trahalho de tabela, 76-78, 354, 564-566. 698 arredon da m en to, especific ando, instru 'i:\o wri te, 482-490 at end of, instru'iio, 440-441, 448-449 at firs t, insttuc;:ao, 440-444 at last, i ns tru ~o, 440-444 at new, ins truc;io. 444-447
clear
corn adic;ao, 289-290 sintaxe, 287 codificando.291 descri~. 286 move, 291-303 adaptac;o es automancas.292 regras de cc nversjo, exibindo, 295 strings de campo, 297-303 subcampos, 296-297 move-corresponding, sintaxe, 303 arua lizando tabelas com buffer. 201-204 AVI select, in s tru~a o, proc essamen to, 74
148
bcu c T echnical
Setting s, 193 criando botbes em, 656 Standard (ABAP/4 Di ctionary),67 Standard (ABAP /4 Editor) cont roles, 52-53 recu rso Find and Replace' 54-57 , Standard, 16 Co mmand Field, 19 Fin d button, 280 barns de menu, 16 barras de tfrulo, 16 Basis, area.do menu principal, 10.20-22 Batch Data Com mun ications (BDC) , chaves estrangeiras e, 152 bibl ioteca de fu n~o , d es cri ~o. 602
int ern as
adic;:io de ocorre ncias, 357-359 sin taxe, 354 APP Ll, classe de dados, desc ricio, 194 APPL2, classe de dados, descri cac , 194 Appl ication Logs, ti po de obj eto ,691 applicatio n, barn de ferrame ntas (ABAP/ 4 Editor ). 57-59
B
Back, controle (barn de [erramentas Standard). ABAP/4 Editor, 53 back, ins tru ;io sinraxe, 537 utiliuc;oes,713 Back, tech. pression.ando, 75 banccs de dados
208-209 buffer em tabelas, u ti lizando, 196-213 atual izandc Infc rrm cees, 201-204 buffer em sincron izacsc, 197-201 bypass de buffer, 204 eecsrics, 211-212 deslocamencc de buffer, 210 resumo.212-213 resumo das ccnfiguracees tecniC2.!,221-222 tecnicas .204-205 tipcs de uso de buffer cheios, 206-207 genericcs, 207-208 registrc unico, 208-209 resurno, 209-210 buffer, slncronizacio descricsc, 197 intervale, configurando, 200 buffer. urilizaljao completa, 20&-207 buff er, uriliZ2~o generics , 207-208 bu ffers Cut and Paste (ABAP/4 Editor), 59-60
buffers de programs, descri;ao, 236 bypass de buffer para tabelas, 204 bytes de preenchimeato, 301,303
..... I
I _I I
- .~.-
~ .~ .- .-
- . -. -. - ~ I I
...
INOlO'
I
~
1
722
723
C
cabecalbos e rodapes de
psg ina
centr.dizando,516
format ando c imprimindo cabecalhos manuais de pagina, criando,
519-52 0
reseandc, 136 alterandc 0 comprimento de, 10<, 127-128 campos de quaneidade, requis ites, 170 campos mcneurios,
168-169
ca.m.pos-chave
descricac, 156
padri o, instrU;io read tab le, 370 tabelas de textc, 157-160 Cancel, ccntrole (barra. d~
ScreenCams, instalando , 44 utilitirio C opylt, J24- 125 centralizando cabe;al.bos de pagina, 516 chamandc m6dul os de
candidatos-chave. 156-157
vaU~ de dados,
I
I
I:
chaves estrangeiras,
detennina~o
cabecalhc s padrio de
pagina ,
arm azenandc , 514
inStfUliOe add e s
cabecalhos padrao de
corr espond ences, sin taxe, 306-307 calculos , reallzandc adicione e adicicne instru ~6es
controlan do a ex ib i~o de, 71 convencees par:l. auibu i~o de nome, 105 criando dom in ie 103 s, elementos de dados, 102
instru~i o select. em adi~o de eabela, 430 pcntos decima is, 701
pagina,tradualadc,
515-517
cabecalhcs padrio de
pagina., utiliundo varifveis em, 517-519 csb ecelhos padri o de pagim, visualizando e
modificando,
514-515 rcdapes de pagina, criand o, 520-523 cebecalhos e rodapes, formatando e imprimindo cabecalhos manuaisde pigina,criando, 519-520 eabecalhos padrio de pagim
~azenando,5 14
refereaci a, defini~o, 169 rabelas, adicionando a abordagem top-down, 122-124 acrescent ando , 126 inserin do , 126 tabelas, excluindc de, 127 Value Table chaves estrangeiras e, 164-165 como proposta Check Table , 166-167 prcposito, 165-166 sem chaves esrran geiras, 168 cam pos de referenda.,
movendo de um.astring de campo para outre, 300-3 01 caracteres eceueuado s, classifiando, Iistagem, 380- 381 caracteres cu.ringa, tela Search/Replace, 55 caracteres especials, t ela
Change Document Objects, eipo de objeto, 692 Change Vendor. In itial, te la, 12 change. documentos, 21 8-220 change, m od o, defini~o, 5 J cbaves estrangeiras achpada, d efini~o, 163
genericas, defmi~o,
1 61
chaves pri.marias . indi ces, 184 Check. Table, proposta, campo Value Table como, 166-167 Check, controle (barn de [erramentas
ajuda F4 .. 150-15 1
campo Value T able. 164- 165 como prcpcsta Check Table , 166 167 pr opcsitc, 165-166
siataxe, 340-341
Search/Repla ce, 55 caracteres hexadecimais, 706 caracteres inv aIidos em no mes de programa, 689
ueilizacces, 708
Check.Table, coluna (tela Dictionary:
criando, 513-5 J5 m.duundo, 515-517 utili zando variaveis em, 517-519 visualizan do e modi ficando, 514-515
sineaxe, 610-611 camadas (tien), dd uu(io, 23 cam pos ajuch Fl .2.dicionando, 135- 136 links de hipenexto , adicionando, .
l3 6-m links de hiperte:l.:to, solucionando
cardiaalidade
chaves escaogeiras, 15-4,
658
descri~,
defiD.i~o. 169 cam pos d e sist ema. data areal e tem po . 244 cam pos empacota dos, comp ri me n tos de saida.
463
658
de camp os, 149-150 genericas, d efini~ao, 161-163 programas em lote e. 152 testando, 149 tipos de campo, 156-160 carnpos-chave, 156, 157-160
p roblemas, 138
CD-ROM
"'bela, 428 clear. instru~ao com adi~o, 289-290 sintaxe, 287, 0407
~'
:0;
i!a
A A A A
724
I
725
bufferizando tabelas,
196-213 campo Size C ategory. 195
d efini~o.
27
crdem de precedencia
companndo com
instrUl;oes exit e
check, 341
instru~o
RJ3 arquieetura de sistema servidor de aplicativc, 24-25 servidcr de apresenta~o, 24 servidor de banco de dados.25 servidcres, configunndo, 25-26 clieare/servidor single-tier, dcscricrao,.23 Cl iente/Servid or, 222 3 clientes, sistemas de inrtaIac;:ao R./3 c~ 36 Clipboards, AJ3AP/4 Editor, 59-60 Codepages. tipo de objeco, 692 codificando express6cs matem:i.ticas,
306
ins~ao write,
c6digo areas de eplicaeivo, 690 colocando comentirios em, 85 exemplcs, cortando e colando do sistema de ajuda, 65 pcreabilidad e de, 36 c6digos de tranSayao, definicrao, 19 ccdigos-fonte
pesquisando e robstiruindo em, 56 collect, instru~o combinando linbas confonne elas sao adicionadas a tabclas intem as,lisugem, 418-419 sintax e, 04 17-0422 commdos menu A ccountin g, Accounts Payable, 12 menu Gore, Text Elements from th e AJ3AP/4 Edit or, 670 mcnu Program C npy, 77 Save As, n menu System Create N ew Session, 76 Status , 20, 95 menu Tools Adminism tion, 22 D evelopment Workben ch, 12 menu U tilities ABAP /4Key Word Do c, 534 Help on, 65 comentarios c6di go, substituindo em, 85 codigo- fome, parimetros e, 609 Command Field, 16, 19-20
como adi~o de leon e. instru ~o write, 5015 03 como adi~o de linha, instru~o write. 5 03~506 como adi~o de simbolo, instrU!;ao write, 500-501 como adi~o de tcxto, instrocrao sort, 3793 82 comparaliOcs instrUc;ioif, conversces de dado s de lieerais durante, 317-319 crdem de precedecciapan eipcs de dados, 317 comparac;Ocs e suas formas altemativas, 316-317 comparando adic;:ao, instru-ra o read table, 373. 375 componcntes, grupos de fun,.o, 638-640 comprimento fixes, ripos de dado, descri~o, 244 comprimentos de saida campos de DDIC, 462 campos empacotados, 462-463 desaic;ao, 461 compute. instnl~O operadores pan, 305 sintaxe, 305 Concatenate, co ntrole (barn de [erramentas Applica tion) , ABAP/ 4 Editor, 58-59 confi guracoes tecnicas exibindo, 193-213 . bufferiz.ando resumo de tabelas, 212-213
ceaarios com rabelas de usn de buffer, 211-212 classes de dadcs, 193-195 deslocamentc de buffe r, 210 ntimerc de exteas ces, 195-196 tlenicas de usc de buffer, 20+206 tipos de usc de buffer, 205-209 resume, 221-222 confi gurando matchcodes lo gicam en te, 659-660 confi gur.mdo padrOes do usuario, 280 consistincia, v erifi~6es. utilizando a fcnamcnta u tilittria de banco de dados, 226-230 em nametab, 228-230 papel de nsmeeab, 227-22 8 constantes. 261262 CONSTANfS, instruc;:ao, sintaxe, 262 consu ltorcs, conhecimento fun cional da :irea e, 10 ccatag em de Iinha, adicrao e lisugem de umanho de 1inha, 510 instrul;io rcpon, 508-513 rodapes,criandc, 520-523 sintaxe, 5085 09 utili.ando,509-511 contextos do usuUio alocando, 698
loop at e, 364
Iistagem, 338-339
sintaxe, 338-339
utiliza!;Oes, 708 controlando a sequen cia do programa comparando com as instrUC;Ocs exit, continue e check. 304-1 instru~o check, 339-3041 insauc;ao continue, 337-339 instroc;io exit. 327-328 controle Help (barn. de ferramentas Standard), ABAP/4 Editor, S3 controle, instruc;oes case, sintaxe, 326-32 7 do sintaxe, 328-330 . terminan dc loops infinitos, 330-332 varying addition, 332-334 vuying/enddo additi on, 334-335 elseif,320 if. 315-326 ccnversj c de dados de literal durante comp aracees, 317-319
conversees, exibindc,
319 opcndores de string de caractere, 321 ~3 2 6 operado res logiccs para c peraados, 316-317
contrcle, iaterrupci o, prccessamento in stru~o on change of, 451-458 loops e, 452-0454 utiliz.a.ndo, 454-458 instru!;io sum, 4049-0451 insuuC;6e:s at first e at last, 44Q....4 instruc;oes at new e at end, 444-449 controle, ineerrupcces, descri~o, 440 con trole, nIveis de, descri \;io. 445 conversees de dado s insuucrio if exibindo. 319 Iiterais duran te co mpancr6es, 317-319 instrucrao move adaptaes autom:i.ticas, 293-294 regras de convers j c , exibindo, 295 copiando dados em tabelas intcrnas , 391-395 m6dulos de fun ~io, 640 tabe las, 124-125 Copy To Buffer, con trc le (barn de ferramentas A pplication), ABAP/4 Editor,S8 Copy, co man do (menu Jlrogram), 77
A A
I
I "PIEND'" EM 21 DllS AUP/4
I I " I .. I
I .-a
aa -. -.-.--.-.-
IHDICE
726
727
Copylt, utilitirio, CD-ROM, 124-125 carpa (tabela internal, 350 Create Foreign Key tela, , 148,163 Create: New Session, comando (menu System). 76 criando
botoes na barn de ferramen tas Appli cation, 656 campos, dominios, 103 chaves eseangeiras, 146,
ubeI",,106-107
Data Browser: Table:: Selection. tela, 70 Data Dictionary (RIj Data D icti onary)
Dictionary; Maintain
Domain). 109 defini~6es de dadcs dentro de m6duJos de fun~o, 605 definindo constant es, 261-262 puametros pan. interfaces, 605 strings de camp o instru~o de dados, 263-266 instro~o tables, 268-269 instru~o tables, int en gin do co m select, 269-270 insuu;ao tables, visibilidadc, 270 utilizando como vu1aveis do ripe -__
=npos
comprimeneos de ,arch, 462
desativandom6dulos de:
fun~o. 604
diaIogo, passos
defini~o.28
Table/Structure:
Change Fields, 117 curses de treinamen to, sites
ccntrolandc a
exibi~o, 71 defuli90es,exibUldo,70
d. Web, 10 C ut and P aste, bu ffers (ABAF/4 Edi tor), 59-60 C ut, controle (barra de
descricac, 67 estrururas, 68
objetos ativando, 107 impcrdncia de, 96 posi~o de. 67 tabelas , 68, 70 rabelas e'estrutu ras, incluindo na Listagem de string de.campo,265 ripos de dados , mapeando pan ti pos de dado ABAP/4 ,246-247 utiliz.aes,67 Data Elements, ti po de objetc, 692 Data Mo dels, tipo de cb jeto, 692 Data Type . cam po (tela Di cti on ary: Maintain Domain),108.109 data, cilculos, reallzando, 308-309 data, campo sistema sy-datum, 244
H9 domfnios abordsgem bottom-up , 110.111 tela Dictionary: M:ain~ Domain, 108 ieutiliz.ando, 104-105 elementos de dados aboedagcm bcrtcm-up, 113-116 solucionando probl emas, 115-116
WTSJ4S
0
da dos de tabelas, copiando, 124-125
defiaiado, 566-568
exi iadc b
modificando e, 127-128 ucilizando seu pr6prio prognma. 135 globais, cipos, 619 linhas inserindc em
tela Di ctionary: Change Data Element, 112 grupo s de ripe, 274-275 indices , 187-189 indices secundsrics, diretrizes para, 189-190 m6dulos de func;ao, 601,
tabelas
navegadores de dados , utiliz.ando, 128-131 solucionando problemas, 129-130 validandc com a interface do ususrio, 145 dados e estattstica, lis tag em,
de
data, formatando, instroc;ao write, 479--481 DB Utility: Transparent Tables: Database Para m et ers , tela, 231-232 deci din do quando urilizar navegadores de dados,
134-135
char, 267-268 sub-retinas definindo e listagem de chamada, 558 em grupos de funCiaO, 627-628 tipos com a instr:u~ao . type, 270-272 varii veis, 714 inStru~o de dado s, u""""",do,241-243 ins trU~o parameters, utilizan do, < 247-254 tipos de dado s, 243-247 deixaadc eventc s, 55-4-557 sub-retinas, 561-563 delete, instn1~o, slntaxe, 408-409
204 -205 tipos de us o buffer, 205-209 desenbo de Iinha, care cte res defini~ao, 503 exibindo, 506-507
desenvclvedcres,
conhecimento funcional de area e, 9 deslocamento de buffer,
descri~o, 210 Development Classes, tipo de objeto, 692 Development Workbench
area de menu principal, 10 compon entes , 44 cbjeecs de desenvolvimento, exibindc , 66 Dialog Modu les, tipo de objeto, 692
Application), ABAP/4 Editor, 58 distin ~ o entre maiusculas e m inesculas. Iirerais de string de cara ctere, 239
do , instnJ ~ o sintsxe, 328-329 rerminando loop s sem fim, 330-332
728
APRENDA EM 21 DIAS lBAPI4
INelCE
729
varying, adi'iao, 332-334 varyinglenddo, adi<;io, 334-335 do, loops, 713 documentando excecses na interface do m6dulo de funl'jio,648 Documentation Mo dules, tipo de objeto, 692 Domains Display, tela, 669 Domains, ripe de objeto, . 692 domfnios
p649
relaeorios com telas de selcljio,557-558 rornando padrio para inicio cia selecfo, 551-553 Dup licate Line, contrcle (berra de ferramentas Application), ABAP/4 Editor, 59
515-517
E
edit or- call, instru!jao, sintaxe, 395397 elementos de dados alt~ra~oes para caraceerfstico de modificando vinculou com, 717 cardinalidade, descdcac,
altera~es n~
earaceerjsticas, 717
campos
alteraado
0
640-641
escopo da pesquisa, configurando, 55 escrevendo Icones na HSb, Iistagem, 501-502 especificg!jao de comprimentc, instru!j<io write, 470-471 especiflcando posi~o e comprimento com a instru~o write, 341344 estouro, instru~o sum,
658
contecdc de, 701 convencoes p:ua atribui!jao de nome,
105
criando
abordagem
bottom-up, 110-111 tela Dictionary: Maintain Domain,
105
criando abordagem
bottom-up,I13~116
108
descri~ao, 102, 668 obrecdo a documentacso
do SAP,l11-112
prop6sito, 701 reativando, 705
solucionando problemas, 115-116 tela Dic tionary:. ChangeDau Element, 112 descricao, 102
450
estruturas aninhando, 172 criando, 171-172
reurilizandc versus
criando, 104-105 driver, programas descricac, 547
eventos acionando 0 tOpO de pagina, 550551 deixando, 554-557 ordem de execu!jao, 548
documeneacio ao salver, 113 dominios, 102 elementos de tela, elementos de texto e, 669 elementos de textc cabe~alhos padrio de pagina, utilizando para eriac, 514
DOle exibindo, 70 versss eabelas, 70 includ e chain, defmi;ao, 173 inc1uindo mnltiplas vezes em tabelas, 174-175 pesquisandc variaveis de sistema, 283-286 syst,82 versus tabd as, 171
estru turas, testando e modificando conteudc interne de tabela, 388 estru turadcs, tipos, utilizando, 272-273 evento de inicialiZ2~o, sintaxe, 654 eventos des cri~o, 519 efeitos da safda, verifica~o e parada dentro cia listag em, 555-556 efeitos na instru!jw writ e, 550 envolvendo condi.liio ou loops denrrc de I istagem, 552-553 Iistagem do Basis, 546 programas de driver e, 547 acionando em ordem ditada pela listagem do programa de driver, 548 acionando tapa de pagin>,550-551 deixando.554557 ordem de execc cac de eveneos, 548 relat6ri os com eelas de sele;ao, 557-558 tor nando padrio par.l infcio da se1e~o, 551-553
exce~6es
indices secundsrios,
de fun~o, 648-649 visac geral, 607 excluindo campos em tabe1as, 127 comendo interno de uma tabela, 403-412
190-191 linhas em tabelas intemas, 408-412 m6dulos de fun~o, 640 tabe1as,125,232-233,705 exemplos de tabela relacionemeneos de chave primaria, 439 visio geral, 438-439 exibindo caracteres de stmbolos, leones e desenho de Iinha,506-507 confi.gura~oes de teda de fuo!jao, 19 configuraes tecnicas pan tabelas, 193 buffer, usa de, 196-204 buffer em resumo de tabelas, 212-213 campo Size Category, 195 cendrios com tabelas de usos de buffer, 211-212 classes de dados, 193-195 deslocamenro de buffer, 210 namerc de extensoes, 195-196 tecnicas de uso de buff", 204-206 tipos de usa de buffer, 205-209 converse es de dados, in stru~o if, 319 dados, utilizando os seu s pr6prios programas, 135 documenta,?o de palavra-cbave, 534
indices, 187 Indices secondaries, 186 nameeab da ferrsmenta utilicl.ria de banco de dad05,227 o log de ativa~o II. partir de dentro do utili tario de banco de dados, 230-231 objetos de desenv olvimenco, 66 parametres de arma zenamento dentrc do uciIit:irio de banco de dados, 231-232 regras de ccaversac na documenracsc de palavra-chave do ABAP/4 ,29 5 tabelas ou esrruturas (DOlC), 70 variaveis de sistem a, 281 Exi t, contrcl e (barra de ferramentas Standar d). ABAF/ 4 Editor, 53 exit, instru!j<io comparando com ins tru~() es continue e check, 341 instr'U!jao loop at e, 364 sin taxe, 327328 u tiliz.a~oes , 708 exportacac, parametres, descricao, 607 exportando/importando parte da interface. 623-627 exp ressoes chave, utiJizando, 367-369 expressoes matem .iticas codificando, 306
A
730
I I I I .II -
- ~-
-i.DlG , 731
-~
tipo d. 308
extensOes
E
FO I, include, deflnindc sub-retin as em gropos
de fun~o com , 627-628 F4, ajucb, chaves estrangeiras e, 15C-151,154 fax, envi an do rebt6 rios par, 511
Ierrsmenta de rastrelc de SQL, determlnandc qual Indice e uti1izado, 191-193 Ierram eata utili tUia de ban co d e da dos acessando, 225 excluindo e recriaadc tabelss, 232-233 fun es, 225-226 log de ativali1 exibindo, o, 230-231 parfmetros de
armazenamento,
ueilizando, 225-226 verificacces de cca siseenc is, 226-227 em aameeab, 228-230 papel do nameeab, 227-228 Fiel d Label and H eader, cam pos (tela D icti onary: Change Data Elemen t), 113
Di ctionary: TobI, /SttUctur" Change Fiolds),11 7 Find Next, contro le (barn de Ierramen tas Standard), ABAP/4 Editor, 53 Find, bou o (barn de ferram entas Standard ) ABAP/ 4 Edit or, 53 campo s de variiveis de sistema, loca1iz.ado, 280 1, listage m, 715 form, instru~ o definicdo variiv eis em, 571 nome s de parimetra , 715 sinuxe, 559 utilizal'o de 558 fo rma gerada de programas, 47 fOnIl2b~O de Iista, instru ~6es , 527-541 marg ens configuradas, 5~3 new-line, 528-529 new-page, 529-530 new-page print. exibindo do cumenta~io de palavra-cbave pan. 53-4 new-page print on , 530-534 position, siceaxe, 538 set blanklines, sincaxe, 540 skip, sintexe, 534 forma ta~ o grifica e in stro ~ o write, 499-507 como a di~o de leone, 501-503 como adirri o de linha, 503-506
pos ition, 538-539 print-control, 533 set blank lines, 5~5" 1 set margins, 533
d!'cumentos alterados,
218-219
utilizando,221
excluindo, 6-)
Function Module Change: Administration Scre en,
desenho de linha
disponiv eis, 506-507
sineaxe pu:l adi~oes, 500
formatando
668-670
instnl~o
519-520
cabecalhcs padra o de
pl gitu, armazenandc , 514 cabecalhos padrio de pagina; criando, 513-515 ,,",.~os padrio de p:5.gina. traduzindo, 515-517 cabecalhos padrio de p:5.gina. utiliundo variiveis em, 517-519 cabecalhcs padrsc de plgin a, visualizando e mo dificando, 514-515 rodapes de plgitu, crian do, 520-523 instru~io reserve. 523-524 ins uuCioesde formata~o de lis", 527 back, 536-538 new-line, 528-529 new-pa ge, 529-530 new-page prin t. 530-53. new-page print on, 531
selection-screen
639 Function Mo dule Create: Administration, tela, 613 Function Mo dule Displays Documentation, tela, 636 Function Modu le Edit, tela, 609 Function Mo dules , tela, 636
{con es
defini~o, 501-503 exibindo , 506-507 IDs de gropo de fun~o, descri~io, 601 if, instru~ao, 315326 conversces de dados
G
Goto, comandos do menu, Text Elem ents from the ABAj)/4 Editor, 670 gropos de fun~o componentes,638-64O definindo em sub-retinas,
parimeno de cain de sel e ~o, 670-671 parimetro de cain de sele ~o de sele~o de tela, 671 programs de exemp lo,
627-628
exibindd,319 literais durance compararr oes, 317-319 operadores de string de caractere , 321-326 cperadcres Iogicospan operandos, 316-317 ordem de preferencia para tipos de dados, 317 sintaxe, 316-317 utilizando na listagem de programa, 318
673-681
visl o geral, 666-667 free, instru~ o, sintaxe,
403
from, adi ~o, i nstru~o loop at, 362-363
fun~Ocs,
693
H
handles, defini~o, 47 Help on , comando {m enu Utilities), 65 Help system, oer ajuda, sistema de hist6ria de tabela automatica descrirrio, 217
Functio n Ce des, ti po de objeto, 692 Functi on Library, tipo de objeto, 692693 Func tion Library. Initial,
plgina
cabecalhos padrao de
pagina,
~azenan d o, 5 1 4
I X . I -.....- I I
. . ... ..
IHDleI I
I
Iodice, adi~o, instru~o read table, 365
in dices criando.l87-189 defuU<;io,183 insert lines. instru~o. 392-393 interfaces glob ais, ddinindo parametres, 620 in terfaces Iocais, definindc parimetros, 620 in tervalos de no m e de clien te convenliO pan es atribuiljio de nom e. 691-696 descricao, 47 janelas, abrindo, 76
733
camp os numericos, movend o pan strings de campo de caracte re, 299 char defmido pelc usuirio de tipo de dado, 271
classificando caracteres
acen cuados, como adi~o de rexec , 380-381 CO , cs, CA e NA, exercirand o, 322 cc n staa tes, defmi es de, 262 contagem de linha e eamanhc de 1inha, 510 ccnversee s de dados, 294-295 dadas e estatistica,567 dadcs globais persistentes, 620-621 elseif ~ mais clare que urilizar ifs anin..bados, 320 especificacees de formate de data, <4- 80 eventc top-of-page, 519 eventos acionand o em ordem ditada por prognma de driver, 548 Dio incluindo dentro de condili5es a u loops , 552-553 tres eventos de base, 546 eventos top-of-page e end ~of-pa.ge, 521-522 expre ssao- chave, 368-369 fl, valor atu al de quando enddo ~ execur:ada, 334- 335
em,
517-5 19
cabecalhos padrao de
pagina, visualizandce
mcdificaado, 514-51 5
secunddric
defini~io. 185
J-L
justificativa, deslocando com a instru~o statement, 4 90~9 1 Lamb to n Co ll ege Web , site , curses de treinamento, 10 lendo
configura valor de sy-subrc pan 373 ad.i~ mone dria, 485 , di<;io uni~ 488-489 adilioes arr edc ndadas e decimais, 483 adi~Oe s de parimetro, eodific.ndo, 576-577 agrupando por eipo p ara reduzir a duplica~o de codigo e tomar a manut en<;io mais f:i.ciI, 274 append sorted by pan localizer a s tres relatorios de vendas principals, 414 area de rrabalhc da tabela, 77 at first para escrever dru lcs e at last para sublinhar a Ultima 1inh.. 441-442 at new e at end, aciorudas par ah eraes em campo s e altenes no myel de contrale, 448 bytes de p reenchimeoto ao mov er dados en tre St rings de campo , 302 dlculos de data, 308 campos , movendo parte d, ,296-297
programacic baseada em even eo, 65365 4 eventc at selection-screen, 655 eventc at user-command,
655-656 event c initializa tion , 65<4evento selection-screen push-burton, 65 5~656 interceptando eventos command Windows, 31 interface d o usuaric
loclud.. (DOIC), lipo de objeto,693 Includes (p rognm), tipo de objtto,693 incl uindo prognmas, defmiliio, 597
in ician dc Rl3, 10 ins erindo a instru~io call functi on autcmaticarneure, 613, 649-650 campos em nbebs , 126 Iinhas em eabelas, 397-400 navegadores de dados, utiliz ando, 128- 130 solucionand o problema.s, 130-131 Insert From Buffe r, controle, (harra de ferramentas Application), U~/4 Edi tor, 58 Insert Line, controle (b2rra de ferramenus AppH"lion), ABAP/4 Editor, 58
listagem de algumas
linhas,362-3 63 para arualizar (tabelas bufferizadas) , descriliia, 203 Ua1, tabela, visio geral, 438
cbaves estrangeiras,
verifican do, 1++145 persccalizacdc, 17 tew, familiariundo-se com, 52 validando dados com, 145 Interfa ce, m enu., 17-1 9 in terfa ces defmindo pa.rimetrOs, 605,607 605 servidores de apresenu liio e, 24
d es cri ~io,
- --iNCKE I
735
move, 298
mstI'Utjoes write
:adies
on change of
acioaando, "457
definindo como
ts belas d. DDIC ou estrururas, 265
instru~o
rabelasinremas
adi~ de campo s
de justificati...",
cunpo.300
instrut;io move-corresponding, 304
ins tru~o
490
dDUmaneiras
diferentes, 455-+56 para exihir simbolos, 500-501 partmeercs, defmindo
especificatjOes de po si~o e
comprimentc em, 342-343 ilusrrandc efeitos da espec ificacio da
dau.,
if, utilizando no
prc grama, 318
com a instru~o
parameters, 248 parimeuos digitados, 5704 passando panimett'os p ara subrocinas, 572 passando por referencia, 578-579 passando por valor, 580 passando por valor e resulradc, 582
posj~o e especifica~6es
definindo com, 264 inSttlly2.0 tables, defmindo com, 269 referenciandc outre
de dadcs, 433-4304
adicion and o tres linhas a partir da linhado cab erUbo. 355 a.dicionando tr & linhas a parti r cia linh a do cabecalho, e gravaado -as de volta novamente, 361 colocando mais camp os do que existem em uma ubela,432 cc nteado de campo s entre at e eode, +43 copiaa dc dados de uma para cutra utilizan do as instru~oes append lines e insert lines, 393-394 criando com e sem . IWw d. cabecalbo, 352 definindo com e sem urna linha de eabe<;>lho, 351 excluindo linhas de, 409-410 inserindo linhas em listagens dassificadas, enquanto mantendo a ordem de c1as si fi~oJ 375-376
insuu;io parameters
prcgramas que sceitam parimetros de en trada udlizando, 24 8 ~2 4 9
ins~ position.
sub-roeicas
chamando a sub -retina mostrada na Listagem 593-594 clwna.ndo uma seri e de, 560-561 defmindo e chamando, 558 sy-db cnt para con rar linlus reeornadas da instruliio select, 81 syfdpos pan visualizar deslocamenrc do
udlizsndo com parimetros, 612 inst~O case. realiundo urna serie de 327 instru ~io check. 340 instrU~o cleat. utiliundo para limp er a linha de eab~o, 407-408
instru~o collect,
compan.~oes.
538539
de In dice, 365-366
reserve, 523-524 instruc;ao select adi ~o de campos correspoadentes, 436-437 com a instrulj-io
instru~o
linhas de cabecalho,
linhas com mesmos valores que campos-chsve p adri o em, 371 loops sem fim, 330-331 misc:an.s de edi~o, efeitos de 475 mensagem, insuucrio raising. 646-647 m6dulos de funljio, 615 chamada simpl es para, 609 chamados .da Lisugem 20.1, primeiro, 621 chunados da Listagem 20.1, segundo, 621 chamados cia Listi.gem 20.5, c6digo~fonte pan, 624-625 chamados da Li.stagem 643 cham2dos da Listagem 20.9, c6digo~fonte para , 647 no -gap, 473 nG-zero e no- sign, 482
fabricantes
selecicea dos, 78 saida panr processamen to de prognrna morto em suas trilhas, 328 s:udas de coaversao, 477-478 seu segundo prognma,
appendpara
preencher eabelas
ineemas, 435
combinando linhas
primeirc caraceere
coincidente ou !lio coincide nte,324-325 sy-index ccntendc namerc arual de
itera~io, 329 sy-subrc determinando se
72
revisitad c, 269 simplificado.76 sfrnbolos e caracteres de desenho de linha, 504 strings de campo
contendo tipos e constantes, 274 inStnl ljio while, 337 instrU~6es add, subtract, multiply, divide corr espondent es, 307
instrU~oes exit, check e
''',;0 varymg,
qualquer linbas fonm selecionadas, 80 valor configunndo de por dentro m6dulos d. Iun\io, 642- 643 tabela ztxIfal, exibindo dados em,135 ubelas e estruturas ODIC. incluindo em strings ,de campo, 266
sequencia, 332 atribui ~o envolvendo duas, 268 conten do cutra string de campo . 265
-:--~DI"
Maintain of Matchcode Ob ject Fields, tel a, 662 Maintain Select ion Conditions, tela, 664 Maint:l.mSelection Options. tela. 633 mendt, campo, indices e, 188
manuten~o
737
cri~do ,60 1 , 6 1 3 - 6 1 5
.I
diaIogo
padrao, dC5crir;rao, 134 mapeando tipo~ de dado ODIC para tip os de dado ABAP/4, 246-247 Mark Line, controle (barra de ferramentaa Application), ABAP/4 Editor. 59
message, in.s tru~o raising , configurando 0 valor de sy-subre com. 644-648 message, instrosoes, tipos, 681 message-Id, i.nstro~o, sin taxe, 682-683 m estre de fabricante re gistra, arual izando, 13
definic;ao, 600 defini~6 es de dados dentro de. 605 dcsativando, 604 documcnundo excecoes, 648-649
e lTDS,
corriginda, 640-641
modiflcandc csbecalhcs d.
514-515
p;gin ~
mascaras de edi~o
ccmecacdc com V. 712 instru~ao write, 474-476 masC2ttS de cdi~o em V, 712 matchcodcs sabores de, 716
63H38 parimetfos digitados e cia digiesdos, 608-609 expcresdc de, 715 passandc para, 607 passando rabelas internas
231-232
para
metodos, 622
nlidaliiode dsdos,
utiliundo pan, 659-666
viaexporu~o/ importa~a e
alterandc, 623-627
configurando,659-660
criandc e mantendo cb jetcs matchcode,
sineaxe, 666
matchcodes Bsicamente configurados, 659-660 m cm6ria em tabelas Intemas, alccando, 709 mcnsagens de erro, caw de diilogo SAP Rl3, 641 menu principal iI'~ coaceiruais, 10-15
m6dulos de fun~ acivando, 604-605 cancelando a versi o de, 629 chamando , 609-613, 624-625,643,647 dado! globais, 619-622
move, instru~o
adapta~6es aut cm aricas,
613
INDICI I
strings de campo, 297-303 campo s numericcs de, 299-300 tipoa de dado de
caractere, utilizando, 300-301 tipos de dado
739
new-page print on ,
jnstru ~o) sintaxe, 531
new-page print, instru!?O, exib in do a docume ntl;io de palavra-chave para, 534 new-page, instru~o, sintaxe.529 no-gap , adi;io, inst:ro;io
~ te,287, 473-474
move-ccrrespca ding,
ins tru;oe.s sinuxc,303 utilizae.s, 302 Multiple Selection, tela, 632
n om e, ecoveucees pan. atrib ui!?o de caracteres invaIidos, 689 iaeervalos de nome de cliente, 691-696
objeeos de
N
nametab
descri~o, 227
desenvohnrnnento,47 paranetros, 247 p ro gramas de dii1ogo, 691 relatorios, 690 tabelas ~ componentes, 105 variaveis.242 vari fveis de sistema, 79 vida geral, 659 nomes de dominios, chaves estrangeiras compostas, 153 nomes de progra m a e caracteres invalidos, 689 nomes de re lat6ri o de cliente, conven ; oes para at:ribui~o de n om e, 690 n o- scrolling, adi; ao,
instru~o new-line, 528 no-sign, adi ;ao instru~o write, 481-482 utiliza~6es , 712 n o-zero, adi~o, instru~o write, 481-482 Number Range Ob jects,
ccnsistenciaem,
228-230 natureza ineegrada do ambiente Rl3, 8-9 n avegadcr de dados, utilitirios decidindc quando ut ilizar,13 4-135 fun;oes de, 132-134 inserindo linhas em tab elas, 128-131 SE16,'dados de tabda exibindo com, 131-132 SE17, comparando com -SE16, 134 SM31 0 SM30. 134
cpos, 131
utiliza;6c:s, ]28 new-line. instru~o, sin taxe , 528
ti p o d e objeto, 694
ndmercs. fJU campos numericos; literals numericos; tipos de dado numericos Object Browser Initial, tela, instru;6e.s message, 682 Object Log, baCio (berra do ferramenta.s Application),230 Object xxxn:: Dupuy Active Runtime Object, tela, 227 ohjetos agregados, defini~o, 156 ODIC, arivando, 107 desenvolvimento, exemplcs de,-96 ohjetos agregados, def m.i~ o, 156 objetos de dados descri~o e tipos, 237 literal de ponto fluruanre, 240 bexadecimais, 240-241 numericos.239 240 -, . String de caractere, 239 visibilidade de, 237 cbjeeos de dadcs extemame nte visiveis, desc ri ~o, 237 ohjetos de dados glohalmente vis!veis. descrkac, 237 objetos de dados lc calmen ee visfveis, descri~ao. 237 objetcs de dados modificiveis, descri~o, 237 cbjetos de dados nao modificlveis descri~o, 237 literais de po nto flutu ante, 240
hexadecUn~,240-241
adi~o de grupc
de hordes
num ericos, 239-2+0 .string de caractere, 239 objetos de desenvolvimento convenes para am bui~o de nome, .(7
defini~o, 44
de op~o,251 adies para, 249 campo de entrada rorule, 251. campo de entrada rcrula, alt erando, 251-253 como adi~o de cain de selecao, 250-251 efeicc de verificando
exemplos de, 96
umindo, 66 int ervalos de no me de
clien te, 691-696
Maintain Domain),
109-110
P
padrees
alterando, 712 Ueas de trabaIho de rabela, 76 ativando altera;6es para, 464 impressora, aleerandc, 511 instru~o write ccmprimentcs, 461-462 for matando, 463-467 listagem de campos chave, 371 pad rOes do usu ari o, . configurando, 280 Page Do wn, pr ession and o, 74-75 palavn-ch ave, docum entacdo, instruljio new -page prin t, 534 paJaV1'2S cbav e de even to, de5cri~o, 654 Parameter Id s, tipo de objero, 694 para m eter, ins trulji o, 668-670 parameters, instru~o, definindo vari,heis com , 247
adi~o de cain baixa, 250
sintaxe, 247-248
type """" like,~ 253
parimetros
obtendo a documenta~o do
alterando, 607
de expOrta~O, descricsc, 607 de impo naliio defini;io,611 descri~o, 607 tomando opcionais, 608
SAP em dominios,
111-112 occu rs, adi~o, instnJljio append, 357-l59 on change of, instru~o, 451-458 loops e, 452-454 perigc oculto em, 457-458 utilizando, 454-457 Open SQL, 36-l7 descricao, 697 tabelss, operando sobre, 698 vantagens buffer em dados em
servidor de
valores padrio,
fomeceado, 608-609 de tabela,descricsc, 607
defini~io. 247, 571
utilizando, 82-83
op endor es 16gicos, instru~o if, 316-317 op en dores, instru~o compute, 305
digitados, sinesxe, 573 digitados, vantagens, 575 digitados 'lJtTIJI.S nao digitados, 573-575
I
Print, ccntrcle (barra de ferramentas Standard), ABAP/4 Editor, 53 Printer Macros, ti p o de objeto, 694 processamento de blo cos, 6S4 processos de trabalho, 31-32 Program, comandos do meou c opy, n Save As, 77 programa~o baseada em
de.scri~o ,
~, m
induindo, defmi;io, 597 cbjetcs de tempo de
execu~o, 47 procurando, 67
salvando alteraes, 54
tipo s de programas de dalcgo, 46 relatorios, 45-46 programas de cliente,
descri ~o,
prop6sito, 8 visio geral, 7-8 RJ3 Analyzer Identifier , tipo de objeto, 694 RJ3 Data Dictionary
(ODIC)
campo s. controlando a
exibi~o de, 71 defmilioes, exibindo, 70 descri; io,67 estrururas, 68 objetos, imporUncia de,
(dicas de ferramenta), 17 ponto Iluruante.fiterais, 240 pontos decimals, campos, 701 po ol de tabelas descricao, 98 resericees, 101-102 poo ls de dados , desc:ri;2o , 659 po ols d e ta bela, descri;io, 98 pools de tipos cons tant es e, 262 d.fini,.o. 273 pcrta bilidad e do codigo, 36 objetos de desenvolvimento.45 posi~o e comprirnento, especifica;oe.s, li stag em , 470 posi;io, especifica~o, instnJ;io write, 468-470 posi ti on, in stru;io, sin tax e, 538 pre ssion ando Back, sequencia de
47
eventc
eveneo at user-command,
655-656 evento de inicializa~, sinuxe, 654
evenrc selection-screen
Q-R
quantidade, campos, definj~o, 170 quebras de pagina, causando, 530 R/3
96
paisagem de sistema .
po si~o
parimctros de tabela,
dcscri~oj
607
pushbutton, sintaxe, 655-656 interatividade de, 653-654 programado res, conhe cime n to da ar ea fun cional e, 9 " prognmas convenliOes para atribuic;:ao de nome, 47-48 criando processo pan, 48-50 solucionaodo problemas, 50
utiliz.ac;:6es, 68 R/3 Library help. ABA P/ 4 Editor: Edit Program, te la, 65 rad iobuttons, instru;io, parimetro de grupo, 672-673 raise, instnJ~ configurando 0 valor de sy-subrc co~, 641-644 utilizac;:oes. 716 read table, instruliio
servidor de
apres enta~io,
24-
servidor de ban co de
dados,25
servidores,
configurmdo, 25-26 clienees do sistema de instala;ao, 36 iniciando, 10 menu principal , 10 area Bas" 20-22 is,
5n
parametres, adic;Oes,
codifican do, 576-577 parametros, nomes,
instru~o form, 715 pass by refcrencc,lisagcm,
em lore, chaves
estrangeiras e. 152 include
defmi~o, 597
~e
372-374 adi;ao de Indice, 365-366 adi c?o de pesquisa binaria, 370 com a di~ o de chave, 367-370
superior,
578-579
personaliZ2odo
742
INDICE
743
release, fun~o
cance kndo.629 procedim en to para, 628
s
sa fda de Iista, impressao, 511-512 safdas de ccnversac e
instru ~o
sy-subrc, 79-80
eabelas in tenus
adicionando linhas uma a uma, ~34-437 preenchimento,
r ecursos de referencia online, 10 refresh, instrucao, sintaxe, 405 registros Mestre do usuario, status dependence do clientc.35 regras de conversso, exi bindo com a
instru~o move, 295 reindexando, in serindo
estrangeiras,
esrsbelecendo, 717
r eIacio na m en to s de chave
primdria, tabelas de
exemplo,438 Relation IDs, ripe de
obj eto, 694
renomeando m6dulos de Un~o, 640 Report Writer, tipc de ob jcto,694 report, instru~o adi~ line-count, 521 adic;oes, 712 tamanh o de pagim., formatando, 508-511 Repository Information System, tela, 631 Repository Information System: Function Module, tela, 632 reserve instru~o, sintax e, 523 Restricting the Vendors Selected listing. 78 reutilizandc domfnios oersus criando, 1041 05 Revised, versoes de tabelas companndo com Active, 222-223 descarundo,223-224 descricso, 222
'.
write, 476-479
apresentac?o, 24 banco de da.dos, 25 confi gurando, 25-26 servidores de ap licativo arquitetura de, 27 area de rolagem, 28 cliea ee de lo go n, 32
exibindo as existentes, 478-479 lista gem, 477-478 re tinas de cc nversao dentro de domfnios, 476-4 78
salvan do
a1t era~oes de programs,
54
ferra mentas Application), A BAP/4 Editor, 58 select, ins tru~ o, 72-76 adi~o de campos ccrrespcndentes, 432-434 area de trabalho expllcita, 77-78 areas de trabalhc de tabela, 76-77 chaves estrangeiras e, 658 cl:iusuhwhere, 78-79
inst royio check, 339-34 1 continue, 337-339 instro~o exit, 327-328 servido r de banco de da dos,
des cri~o. Z5 instru~o
rodapes e cabegalhos,
513-524 rcdapes, utilizando a
instru~o
skip, 535
arribuicic de nome,
690
treinamentc , 10 sapgui.exe,24 Save As, comando (men u Program), 77 Save. botao, 12 Scr een Cams, 44 Scr een s, tipo de obje to, 694 SE16, nave gad cr de dad cs exibiado dados de eabela com 0,131-132 fun,oe, do , 132- 134 SE17, navega dor de dad os, comparando co m 0
SE16,134 SE63, transa ~o , tra duzi ndo
servidores
aplicativo, 2-4-25
irea de rolagem, 28 arquite rura de, 27-36 buffer em dados e O pen SQL, 36-37
cliente de logon, 32
sintaxe, 426
estrutura 51St, exibindo, 82
instrU~o tables ,
interagindc com ,
269-2 70
processamento cia
inStru~ o
AVI select,
74
impressio em multiplas
imp ressons de urna vez, 512
in strUljaO appendsorted
elem en tos de text o, 517 Sear c:h/R.eplace, tc:la, 54-56 segu n do programa listag em, 72 Iistagem revisitada, 269
processamento de Page
componentes do processo de trabalhc, 31-32 cont exte de ususrio, 27-28 passos do dialogc, 28-29 passos d? dialcgc, inicia.ndo,29 processamento roll -in/roll-out, 30-31 cbelas, tipos, 32-36 trocando dados com servid c res de apres enta~ o , 31 descrici o, 24 urilizando buffer em dados e Open SQL, 36-37 servidores de apresentaclc descri ci c, 24 tr ocand o dados com servidc res de aplicativo, 31 servidcres, configurando, 25-26 sessses, abrindo, 76 set blank lin es, instru~o, sintaxe, 540 set margins, instru ~ o , 533 seta para baixo , te cla, ajuda F4 e, 150-15 1
seu primeiro programa ABAP/4,li,tagem , 50 seu segundo programa
Down, 74-75
sintaxe,72 sy-dbc nt, 80-81
by, 412-413
telas,45
r
.;
r'
r> r>;
r-
r-
r>; I
r:
r>
r-.
<:
r>
<.
.....,~. , .
''Ii'
.lPREND.l EM 21 DIAS ABA P/4
'""'
"
"
"
-e-,
"'
-r-,
--..,
'"'
'7 44
745
Iiseagem, n liscagem revisicada, 2 69 Iiseagem simplificada, 76 Short Text, campo eel Dictionary: Change a
Data Elements, 112
report, tamanho
especificacoes de
e cc mprimenco, 341-344
po si~o
instru~o
de linha e adir;:Ocs de
contagem de
liaha,
508-5 09
instru~o
instrur;:ao on changeof,
451-452 perigo oculto ern, 457- 458
ins tru~o param eters,
reserve, 523
lnstculjio select, 72
247-248 adi<;ao d e gropo de bc ee es de op~o, 25 1 adi <;ao de lecras minusculas,250 adi<;ao type tJtnus like, 253 adies a, 249 com o adi~o de caixa de sel~o, 250-25 1
389 instru<;ao do, 328-329 varyin g, ad.i~o, 332-3 34 v:uyinglenddo, adi~o, 334-335
instru~o editor-call,
select, 74 processamento de Back, 75 processamenco de Page Down, 7+.7 5 sy-dbcnt, 80-81 sy-subrc, 79-80 instru<;2a selec t single. 83-84 inStrulf20 selection-screen, pardmeerc de cain d e seleljia,671 instru<;ao select-options, 672
instru~20 set blank line s,
start-of-selection,
automaticamen te inscrindo Iistagem , 551 Status, comando (m en u System), 20, 95 stop, instruc;ao inStruc;ao loop at e, 364 ucilizacoes, 714 strings de ca mpo atribuicac envolvendo duas listage ns, 268 con rendo ou tra listage rn d e String de campo, 265 defmi lj2o, 263 defmindo como tabe la ODIC ou lista gem d e eserueura, 265 lnstruljaO de dadcs, 263-2 66
ins tnl~o tables, 268-269
aintax e
ABAP/4,236-23 7 event o de inicializaca o, 654 evento selection-screen pushbutton, 655-656 ins rrucac add, 306-307 inStru<;20 add-corresponding, 307 in strulfio appen d, 354 occurs addition, 357: 3,9 inStruc;ao appen d lines, 392 instru<;3a append so rte d by, 413-417 inStruyao at end of, 444 instru<;ioat fIrst, 440 instru<;io at new, 444 in Stru<;2o back, 537 instruljao call functi oo , 610-611
395-39 7
instru~o, 560
ins trucio insert lines, 393 inStruljio lo op at, 359-3 60 adi<;5es from, eo, whe re, 3 62~3 63 instrucao que pede aleerar 0 processamento do lo op, 364 instrucio m essage-id, 682-683
ins cru~o m odify, 400
instru~o mo ve, 291
540 ins ttu <;ao skip, 534 instru<;ao SOrt, 376 como adit;i.a de textc, 379-382 ins truljio sum, 449 instru<;20 tab les, 268 269 inscru<;aotyp e, 270-272 instruljio while, 336-337 instru<;ao write, 46 7-468
criando, 119 122 sort, ins trut;i.o, utilizando com tahelas internas, 376-382 SPACE, constante, 262 spaol, irnp ressaa, 512-5 13 Spool, tipo de objeto, 694- 695
r> r-
~~~~0rr~rr~0rrrrr~~~r~~~~~~~~~~~~~~~
746
--:: CE iH::DI::::.J
747
cipos de dados de
caractere, utilizando.300-301
syststnu~ture,instru ~ao
namero de linhas,
determinando se vazia, 389 esrrururas para testando e para m odificando ccne ea do, 388 excluin do linhas, 406, 408-412
21 8-220
tipos de dados
numericos, u tilizan do, 301 -303 Iistagem da adi~ao
sy-subrc
configurando 0 valor de
de dentrc de s
m6dulos de funliao, Iistag em, 642- 643
banco de dados,
excluindo e re criando por dentro, 232 -233 hi st6ri co de tabela au tormcicc descriliw . 217 u tilizaado, 221 in dices criandc, 187-189 descricso, 183-186
variavel,332
p assando para su b-retinas, 575 utilizando como varidveis do tipo char, 267-268 strings,localizado todas ocorrencias de, 56 Structure (DDIC), tipo de o bjeto, 695
instrucio raise,
641-644 m essage, instrucao raising, 644-64 8 ins trucic select, 79-80 variavel, depois da in st ru cdc editor- call, 396 sy-tabix, cperacses de loop e,710 sy- to ccu , areas d e pagina~ao e, 710 sy- uzeit, campo 245
excluindo 0 conteudo,
403-406 indice, defull~o,3 65 ins u uliao append, u tiliz wdo, 353- 359
instru~a o loop at,
configuracoes tecnicas
buffer, utilizando , 196-213 buffer em re sume de tabe las, 212-213 campo Size Cate gory, 195
subcampos
instru~ao
dererminando qual e
u cilizada com a ferramenta de rastr.eio de SQL, 191-193
utiliz and o, 359-364 instrUc;ao read table, utilizando, 364- 376 instrucac sort, urilizando, 376-382 lend o dados de, 359-376 linh as inserindc em, 397-400 modificand o Iinhas em, 400-403 passando m6dulos de fun.,.o, 622-627 preenchend c a partir de tabelas de banco de
inserucaowrire, 471-472
sub-retinas extemas
comparando com in temas, 593 comparando com m6dulos de fun,ao, 600 descricio, 592
sub-retinas
chamada urn mostradc na Listagem 18.12, 594 chamando uma sene de listagens, 560~561 definindo em grupos de fun c;aovia F Ol , 627-628 deixando, 561-563 descricao, 558 efeitos de exit, check e stop dentro de Iistagem, 562 extemas, comparando com in rernas , 593 internes, definindo e charnando, 559-561 passando parametres p ara , 576-577 rnetodcs, 578-5 83 p or referencis, 57 8-580 par valor, 580-581
sub-retinas in ternes
comparando co m ext ernos, 593 definindo e cham ando , 559-561 deixando, 56 1-563 sum, instrucao, 449-451
T
Tab. Maint. Allowed, campo (Dictionary: Table/Structu r e: Change Fields, te la) , 117 tabela, campos campos de quanridade, 170-171 campos monetarios, 168-169 tabela, dusters, descricio, 99
conteudo classificando
de, 376-382 con teudo comparando de do is, 395 cop iandc dados entre, 393-394 copiando p art es de, 392-393 definii;ao, 350 -353 definind o, 349
sy, variavel
adi cionando lisragem, 2 86 list agem, 283 sy -daturn, campo, 245 sy-dbcnt, selecion an do
dadcs, 425-437
preenchendo utilizando a insrrucio collect, 417-422 processamento de iccenupcso de controle, 440-444, 445,449,451-458 programa para obter informecces sabre, 390 -391
instrucao, 81
sy-fdpos, 324- 326
tabelas
Active, versoes ativas, comparan do com tabelas d e banco de
definin a Iinha de do
cabecalho, 350 definin dc 0 corpo, 350
dados, 226-22 7
alt erand o a nom e de, 124
top include, programa, descricdo,602 top-of-page, eventcs acionando, 550-551 . f eventos end-of-page,
521-522
tipo de dado char definido pelousuario,listagem,271 tipos de campos e chaves estrangeiras, 156-160 campos-chave, 156-160
candidatos-chave, 156- 157
tipos de dado numericos descri!rae, 245-246 instru<j3.0 move, utilizando, 301-303 tipos de dados definindovariaveis com mapeando tipos de dados DDIC para tipos de dado
ABAP/ 4,246-247
insrrucio write, 519 traduzindo elementos de rexto, 515-51 7 transacoes, definicao, 19 Transaction Codes, tipo de objeto, 695 transportando adi~o, instru~o read table, 375 tratamento automaticc de cliente, Open SQL e, 37 tutorial on ABAP/4 Editor: Edit Program, tela, 64 Type Group, objeto de Grupo, 695 type, instru~;io, sintaxe,
2 70-272
Help on, 65 utilizando e alterando sao identicos em fun~o, llstagem,579-580 UXX (segundo programa include), descricac, 602
V
validando dados, 145 valores de componente gone, 442-444 valores de X, cardinalidade,
155
valores de Y, cardinalidade,
155
valores excluidos (excludes),633 valores iniciais padrao, deini~o, 286 valores, excluidos, 633 Value Table, campo
chaves estra ngeiras e, 165-166
U
under addition, instru~a o write, 472-473 Undo, conrrole (barra de ferramentas Application), ABAP/ 4 Editor, 58 unidades de modularizacao descricso, 545-546 utilizacoes, 546 unit addition , instrucao write, 484,486-490 User Defaults, comandos (menu System), 511 User Profiles, tipo de ohjeto,695
tipos de dados numericos, 245-246 instrusao if, ordem de preferenca, 317 rabelas, alrerandc em,
127-128
<
Titlebars, tipo de objeto, 695 to addition, instru ~o loop at, 362-363 Tools, comandos do menu Administration, 22 Development Wotkbench, 12
acessando incorretamente antes de definir, listagem, 243 cabecalhos padraode pdgina, lisragem, 517 compuuundo, 707 convencoes para atribuicao de nome,
242
'
rrrrr0~n0~n~~nn~n~n~
I
definindo, 714
i'
no-zero e no-sign, 481~482 :ldi<;6es redondas decimais, 482-484comprimentos padrao,
461-462
adi~oes
w
where, adicio, instrucio
loop at, 362-363
exibindo exisrenres,
478-479
retinas de conversao
dentro de
instru<;io form,
571 -573
inStru~o
where, clausula
param.eters,
utilizando, 247-251
Ven dor Master Update Transaction Address, tela, 12 Vendor Master Update T ransaction: Initial, tela,
12
Iormatacio padrao,
465-467
desloeando a justificativa,
490-491
dOlUS, 463
estouro, 464
numeros, 464
tipos de dados,
243 -247
vezes,4 64
formatando da ta, 479 -481
z
ztxa, grupo de fun~o,
listagem, 622
ztxlfal, tabela, exibindo
verificacac, campos de, ch aves estrangeiras compostas e, 152 verificacio, tabelas de,
defini~o, 143
especificacoes de posi<;ao
e comprimentc,
341-344
mascaras de ediljao,
474-476
saidas de ccnversao,
476-479
descricao, 79
exiblndo, zso instru<;io describe table,
389 localizado, 283-286
,\
write, instru!;ao
nomes de, 79
sy-dbcnt, 80-81
adiljoes de formaeacsc
descanando Revised,
223- 224
grafica
como Icone, 501-5 03 como linha, 503-506 como simbolo,
500-501
varisveislocals, descricto,
563
visibilidade
exibin do simbolos
disponfvel, Icones e
caracteres de
desenho de linha,
506 -507
paginando cabecalboe,
514
sintaxe, 500
adi<;oes monetaries,
4 84-486
.'
," I