Vous êtes sur la page 1sur 20

Captulo 8

Instrues de Controle Interno

8-2 Instrues de Controle Interno

Instrues de Controle - Viso Geral Controle condicional


IF ON CHANGE OF CASE AT FIRST AT LAST AT NEW AT END OF SUM ENDIF ENDON ENDCASE ENDAT ENDAT ENDAT ENDAT

Instrues Cclicas (repetitivas)


DO LOOP WHILE ENDDO ENDLOOP ENDWHILE

Outras instrues de controle


CHECK CONTINUE EXIT STOP

8-3 Instrues de Controle Interno

Operadores Relacionais Operador Significado

EQ = NE <> >< GT > GE >= => LT < LE <= =< DATA: START TYPE D, BETWEEN f1 AND f2 SUM1 TYPE F, SUM2 TYPE P. IS INITIAL . . . IF START IS INITIAL ... IF SUM1 GT SUM2 ... IF SUM1 BETWEEN 0 AND 100 ...

Igual a Diferente de Maior que Maior ou igual a

Menor que Menor ou igual a

Intervalo Valor inicial

8-4 Instrues de Controle Interno

Operadores de comparao de strings

<f1>

CO

<f2>

contm apenas: f1 contm apenas caracteres de f2 ACCOUNT CO '0123456789' contm pelo menos um de: f1 contm pelo menos um caracter de f2 contm a string: f1 contm a string f2 ABCDE CS DE contm o padro: f1 corresponde ao modelo f2 Modelo: * qualquer string + qualquer caracter # smbolo escape 'ABXDE' CP '*B+D*'

<f1>

CA

<f2>

<f1>

CS

<f2>

<f1>

CP

<f2>

8-5 Instrues de Controle Interno

Expresses lgicas

COUNTER GE 0

COUNTER GT 0 AND FLAG IS INITIAL

(FLAG1 NE SPACE OR FLAG2 NE SPACE) AND COUNTER BETWEEN 0 AND 100

COUNTER EQ 0 AND NOT (FLAG1 EQ SPACE AND FLAG2 EQ SPACE)

8-6 Instrues de Controle Interno

Instruo IF

IF <expresso lgica>. ENDIF.


instrues

IF < expresso lgica >.


instrues

ELSE.
instrues

ENDIF. IF < expresso lgica >.


instrues

ELSEIF < expresso lgica >.


instrues

ELSEIF < expresso lgica >.


instrues

ELSE.
instrues

ENDIF

8-7 Instrues de Controle Interno

Instruo CASE - sintaxe

CASE <campo>.
WHEN <valor 1>.
instrues

WHEN <valor 2>.


instrues

WHEN <valor 3>.


instrues

WHEN OTHERS.
instrues

ENDCASE.

8-8 Instrues de Controle Interno

Instruo CASE - exemplo

CASE COUNTRY. WHEN 'D'. WRITE:/ Alemanha. ... WHEN 'USA'. WRITE:/ Estados Unidos. ... WHEN 'GB'. WRITE:/ Gr-Bretanha. ... ENDCASE.

8-9 Instrues de Controle Interno

Instrues AT FIRST, AT LAST, AT NEW e AT END OF

Todas destinam-se a trabalhar em instrues do tipo LOOP AT <tabela_interna> e no se podem ser utilizadas dentro de instrues SELECT <tabela_DDIC>.
AT FIRST. Ocorre na primeira execuo do ciclo loop. AT LAST. Ocorre na execuo do ltimo ciclo do loop. AT NEW <campo1>. Ocorre cada vez que o valor do campo <campo1> sofrer alterao ou se os campos esquerda de <campo1> tambm sofrerem. AT END OF <campo1>. Ocorre quando o campo <campo1> for alterado aps AT NEW <campo1>, se qualquer campo antes de <campo1> for alterado ou se for a ltima linha da tabela.

8-10 Instrues de Controle Interno

Instrues AT FIRST, AT LAST, AT NEW e AT END OF Exemplo de uso


SORT TAB BY C1 C2 C3. LOOP AT TAB. AT FIRST. primeira execuo do loop <comandos> ENDAT. AT NEW C1. mudana no valor de C1 <comandos> ENDAT. AT END OF C1. mudana no valor C1 aps AT NEW C1 <comandos> ENDAT. AT NEW C3. <comandos> ENDAT. AT END OF C3. <comandos> Porque a ordem da tabela C1+C2+C3 se campo C3 modificar ou se campo C2 modificar ou se campo C1 modificar ou se for a ltima linha da tabela ENDAT. AT LAST. ultimo registro lido da tabela TAB <comandos> ENDAT. <comandos comuns a qualquer registro de TAB> ENDLOOP.

8-11 Instrues de Controle Interno

Instruo SUM - Exemplo de uso


SORT TAB BY C1 C2 C3. LOOP AT TAB. AT FIRST. primeira execuo do loop SUM ENDAT. AT NEW C1. mudana no valor de C1 <comandos> ENDAT. AT END OF C1. mudana no valor C1 aps AT NEW C1 SUM ENDAT. AT NEW C3. <comandos> ENDAT. AT END OF C3. SUM ENDAT. AT LAST. ultimo registro lido da tabela TAB SUM ENDAT. <comandos comuns a qualquer registro de TAB> ENDLOOP. Esta instruo totaliza todos os dados numricos da tabela no seu nvel de controle. Ela localiza todos as linhas da tabela TAB que contenham a mesma chave do seu nvel de controle e soma cada campo numrico direita do seu nvel de controle, colocando os valores coletados na rea de trabalho da tabela TAB.

8-12 Instrues de Controle Interno

Instruo ON CHANGE OF

Tabela TABNA
COUNTRY

ON CHANGE OF <campo>. <instrues> ENDON.

NAME1

A
A D

Demel
Zander Albers

PROGRAM ZTST17##. TABLES: TABNA. SELECT * FROM TABNA. ON CHANGE OF TABNA-COUNTRY. NEW-PAGE. ENDON. WRITE: / TABNA-COUNTRY, TABNA-NAME1, ... . ENDSELECT.

8-13 Instrues de Controle Interno

Consideraes sobre ON CHANGE OF

SORT <TABELA> BY <campo1> <campo2> <campo3>. LOOP AT <tabela>. ON CHANGE OF <campo3>. <comandos para campo3> ENDON. ON CHANGE OF <campo2>. <comandos para campo2> ENDON. ON CHANGE OF <campo1>. <comandos para campo1> ENDON. ENDLOOP

A ordem de execuo das quebras em tabelas internas ou tabelas transparentes dada pela ordem do indice das mesmas, e no pela sequencia em que ON CHANGE OF <campo> declarada no cdigo ABAP. Isto significa que em nosso exemplo a ordem de execuo seria ON CHANGE OF <campo1> depois ON CHANGE OF <campo2> e finalmente ON CHANGE OF <campo3>, porque a tabela interna <tabela> foi ordenada por <campo1> + <campo2> + <campo3>.

8-14 Instrues de Controle Interno

Ciclo DO

DO [<n> TIMES]. instrues ENDDO.

SY-INDEX

ndice do Loop

8-15 Instrues de Controle Interno

Ciclo WHILE

WHILE <expresso lgica>. instrues ENDWHILE.

SY-INDEX

ndice do Loop

WHILE COUNTER > 0. . . . SUBTRACT 1 FROM COUNTER. ENDWHILE.

8-16 Instrues de Controle Interno

Ciclo LOOP

LOOP AT <tabela interna >. instrues ENDLOOP.

SY-SUBRC = 0 Ciclo executado SY-SUBRC = 4 Ciclo no foi executado

LOOP AT TB_SCUSTOM. WRITE :/ TB_SCUSTOM-CUSTOMID. ENDLOOP. WRITE / SY-SUBRC. 0 ou 4

8-17 Instrues de Controle Interno

Instruo CHECK

CHECK <expresso lgica>.

CHECK dentro de um loop: termina apenas a passagem corrente pelo loop

WHILE COUNTER GT 0 instrues CHECK FLAG NE SPACE. instrues ENDWHILE.

8-18 Instrues de Controle Interno

Instruo EXIT

EXIT.

EXIT dentro de um ciclo: interrompe o ciclo e prossegue o processamento

DO.

instrues
IF COUNTER GE 100. EXIT. ENDIF.

instrues
ENDDO.

8-19 Instrues de Controle Interno

Instruo EXIT - exemplo EXIT dentro de um loop.

REPORT ZCTRL00. PARAMETERS COUNTER TYPE I DEFAULT '3'. DO. WRITE:/ SY-INDEX, ' passagem'. IF SY-INDEX GE COUNTER. EXIT. ENDIF. ENDDO. SKIP 2. WRITE:/ 'Sada do DO ... ENDDO'.

Resultado 1 passagem 2 passagem 3 passagem Sada do DO ENDDO

8-20 Instrues de Controle Interno

Consideraes sobre controle de LOOP

LOOP AT <tabela> CHECK <condicao> * a partir deste ponto <condicao> est garantida. IF NOT <condicao> CONTINUE " novo loop em <tabela> ENDIF IF NOT <condicao> EXIT " termina o loop em <tabela> ENDIF ENDLOOP

Em CHECK <condicao> pode-se entender que o codigo abaixo da instruo somente ser executado caso <condicao> seja verdadeira. No caso de <condicao> ser falso, CHECK fora um novo loop na tabela <tabela>, comportando-se exatamente como a instruo CONTINUE.

Vous aimerez peut-être aussi