cap[1][1].08instruçoesdecontrole.ppt

20
Capítulo 8 Instruções de Controle Interno

Upload: lvaldeir

Post on 27-Nov-2015

2 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Cap[1][1].08InstruçoesdeControle.ppt

Capítulo 8 Instruções de Controle Interno

Page 2: Cap[1][1].08InstruçoesdeControle.ppt

8-2 Instruções de Controle Interno

Instruções de Controle - Visão Geral

IF ENDIFON CHANGE OF ENDONCASE ENDCASEAT FIRST ENDATAT LAST ENDATAT NEW ENDATAT END OF ENDATSUM

DO ENDDOLOOP ENDLOOPWHILE ENDWHILE

CHECKCONTINUEEXITSTOP

Controle condicionalControle condicionalControle condicionalControle condicional

Instruções Cíclicas (repetitivas)Instruções Cíclicas (repetitivas)Instruções Cíclicas (repetitivas)Instruções Cíclicas (repetitivas)

Outras instruções de controleOutras instruções de controleOutras instruções de controleOutras instruções de controle

Page 3: Cap[1][1].08InstruçoesdeControle.ppt

8-3 Instruções de Controle Interno

Operadores Relacionais

OperadorOperador SignificadoSignificado

EQ = Igual a

NE <> >< Diferente de

GT > Maior que

GE >= => Maior ou igual a

LT < Menor que

LE <= =< Menor ou igual a

BETWEEN f1 AND f2

Intervalo

IS INITIAL Valor inicial

DATA: START TYPE D, SUM1 TYPE F, SUM2 TYPE P.

.

.

.IF START IS INITIAL ...IF SUM1 GT SUM2 ...IF SUM1 BETWEEN 0 AND 100 ...

Page 4: Cap[1][1].08InstruçoesdeControle.ppt

8-4 Instruções de Controle Interno

Operadores de comparação de strings

<f1> CO <f2> contém apenas: f1 contém apenas caracteres de f2 ACCOUNT CO '0123456789'

<f1> CA <f2> contém pelo menos um de: f1 contém pelo menosum caracter de f2

<f1> CS <f2> contém a string: f1 contém a string f2‘ABCDE’ CS ‘DE’

<f1> CP <f2> contém o padrão: f1 corresponde ao modelo f2Modelo: * qualquer string+ qualquer caracter# símbolo escape'ABXDE' CP '*B+D*'

Page 5: Cap[1][1].08InstruçoesdeControle.ppt

8-5 Instruções de Controle Interno

Expressões lógicas

COUNTER GE 0

COUNTER GT 0 ANDFLAG IS INITIAL

(FLAG1 NE SPACE OR FLAG2NE SPACE) AND COUNTERBETWEEN 0 AND 100

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

Page 6: Cap[1][1].08InstruçoesdeControle.ppt

8-6 Instruções de Controle Interno

Instrução IF

IF <expressão lógica>.

ENDIF.

IF < expressão lógica >.

ELSE.

ENDIF.

IF < expressão lógica >.

ELSEIF < expressão lógica >.

ELSEIF < expressão lógica >.

ELSE.

ENDIF

instruçõesinstruções

instruçõesinstruções

instruçõesinstruções

instruçõesinstruções

instruçõesinstruções

instruçõesinstruções

instruçõesinstruções

Page 7: Cap[1][1].08InstruçoesdeControle.ppt

8-7 Instruções de Controle Interno

Instrução CASE - sintaxe

CASE <campo>.

WHEN <valor 1>.

WHEN <valor 2>.

WHEN <valor 3>.

WHEN OTHERS.

ENDCASE.

instruçõesinstruções

instruçõesinstruções

instruçõesinstruções

instruçõesinstruções

Page 8: Cap[1][1].08InstruçoesdeControle.ppt

8-8 Instruções de Controle Interno

Instrução CASE - exemplo

CASE COUNTRY.

WHEN 'D'.WRITE:/ ‘Alemanha’.

. . .

WHEN 'USA'.WRITE:/ ‘Estados Unidos’.

. . .

WHEN 'GB'.WRITE:/ ‘Grã-Bretanha’.

. . .

ENDCASE.

Page 9: Cap[1][1].08InstruçoesdeControle.ppt

8-9 Instruções de Controle Interno

Instruções AT FIRST, AT LAST, AT NEW e AT END OF

Todas destinam-se a trabalhar em instruções do tipo LOOP AT <tabela_interna> e não se podem ser utilizadas dentro de instruções SELECT <tabela_DDIC>.

AT FIRST.Ocorre na primeira execução do ciclo loop.

AT LAST.Ocorre na execução do último ciclo do loop.

AT NEW <campo1>.Ocorre cada vez que o valor do campo <campo1> sofrer alteração ou se os campos à esquerda de <campo1> também sofrerem.

AT END OF <campo1>.Ocorre quando o campo <campo1> for alterado após AT NEW <campo1>, se qualquer campo antes de <campo1> for alterado ou se for a última linha da tabela.

Page 10: Cap[1][1].08InstruçoesdeControle.ppt

8-10 Instruções de Controle Interno

Instruções AT FIRST, AT LAST, AT NEW e AT END OFExemplo de uso

SORT TAB BY C1 C2 C3.LOOP AT TAB.

AT FIRST. “ primeira execução do loop<comandos>

ENDAT.AT NEW C1. “ mudança no valor de C1

<comandos>ENDAT.AT END OF C1. “ mudança no valor C1 após AT NEW C1

<comandos>ENDAT.AT NEW C3.

<comandos>ENDAT.AT END OF C3.

<comandos> 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.

Porque a ordem da tabela é C1+C2+C3

Page 11: Cap[1][1].08InstruçoesdeControle.ppt

8-11 Instruções de Controle Interno

Instrução SUM - Exemplo de uso

SORT TAB BY C1 C2 C3.LOOP AT TAB.

AT FIRST. “ primeira execução do loopSUM

ENDAT.AT NEW C1. “ mudança no valor de C1

<comandos>ENDAT.AT END OF C1. “ mudança no valor C1 após AT NEW C1

SUMENDAT.AT NEW C3.

<comandos>ENDAT.AT END OF C3.

SUMENDAT.AT LAST. “ ultimo registro lido da tabela TAB

SUMENDAT. <comandos comuns a qualquer registro de TAB>

ENDLOOP.

Esta instrução totaliza todos os dados numéricos da tabela no seu nível de controle. Ela localiza todos as linhas da tabela TAB que contenham a

mesma chave do seu nível de controle e soma cada campo numérico à direita do seu nível de controle, colocando os valores coletados na área de

trabalho da tabela TAB.

Page 12: Cap[1][1].08InstruçoesdeControle.ppt

8-12 Instruções de Controle Interno

Instrução ON CHANGE OF

PROGRAM ZTST17##.TABLES: TABNA.

SELECT * FROM TABNA.ON CHANGE OF TABNA-COUNTRY.

NEW-PAGE.ENDON.WRITE: / TABNA-COUNTRY,

TABNA-NAME1, ... .ENDSELECT.

ON CHANGE OF <campo>. <instruções>ENDON.

Tabela TABNACOUNTRY NAME1

A Demel

A Zander

D Albers

Page 13: Cap[1][1].08InstruçoesdeControle.ppt

8-13 Instruções de Controle Interno

Considerações 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 execução das quebras em tabelas internas ou tabelas transparentes é dada pela ordem do indice das mesmas, e não pela sequencia em que ON CHANGE OF <campo> é declarada no código ABAP. Isto significa que em

nosso exemplo a ordem de execução 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>.

Page 14: Cap[1][1].08InstruçoesdeControle.ppt

8-14 Instruções de Controle Interno

Ciclo DO

DO [<n> TIMES].

ENDDO.

SY-INDEX Índice do Loop

instruçõesinstruções

Page 15: Cap[1][1].08InstruçoesdeControle.ppt

8-15 Instruções de Controle Interno

Ciclo WHILE

WHILE <expressão lógica>.

ENDWHILE.

WHILE COUNTER > 0....

SUBTRACT 1 FROM COUNTER.ENDWHILE.

instruçõesinstruções

SY-INDEX Índice do Loop

Page 16: Cap[1][1].08InstruçoesdeControle.ppt

8-16 Instruções de Controle Interno

Ciclo LOOP

LOOP AT <tabela interna >.

ENDLOOP.

LOOP AT TB_SCUSTOM.WRITE :/ TB_SCUSTOM-CUSTOMID.

ENDLOOP.WRITE / SY-SUBRC. “ 0 ou 4

instruçõesinstruções

SY-SUBRC = 0 Ciclo executadoSY-SUBRC = 4 Ciclo não foi executado

Page 17: Cap[1][1].08InstruçoesdeControle.ppt

8-17 Instruções de Controle Interno

Instrução CHECK

CHECK <expressão lógica>.

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

WHILE COUNTER GT 0

CHECK FLAG NE SPACE.

ENDWHILE.

instruçõesinstruções

instruçõesinstruções

Page 18: Cap[1][1].08InstruçoesdeControle.ppt

8-18 Instruções de Controle Interno

Instrução EXIT

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

EXIT.

DO.

IF COUNTER GE 100. EXIT. ENDIF.

ENDDO.

instruçõesinstruções

instruçõesinstruções

Page 19: Cap[1][1].08InstruçoesdeControle.ppt

8-19 Instruções de Controle Interno

Instrução 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:/ 'Saída do DO ... ENDDO'.

ResultadoResultado

1ª passagem2ª passagem3ª passagem

Saída do DO … ENDDO

Page 20: Cap[1][1].08InstruçoesdeControle.ppt

8-20 Instruções de Controle Interno

Considerações 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> ENDIFENDLOOP

Em CHECK <condicao> pode-se entender que o codigo abaixo da instrução somente será executado caso <condicao> seja verdadeira. No

caso de <condicao> ser falso, CHECK força um novo loop na tabela <tabela>, comportando-se exatamente como a instrução CONTINUE.