cap[1][1].08instruçoesdecontrole.ppt
TRANSCRIPT
Capítulo 8 Instruções de Controle Interno
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
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 ...
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*'
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)
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
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
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.
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.
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
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.
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
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>.
8-14 Instruções de Controle Interno
Ciclo DO
DO [<n> TIMES].
ENDDO.
SY-INDEX Índice do Loop
instruçõesinstruções
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
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
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
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
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
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.