Вы находитесь на странице: 1из 45

Introduo.................................................................................................................................................

3
Ambiente Natural.....................................................................................................................................4
Objetos Natural........................................................................................................................................4
Menu Principal......................................................................................................................................5
Menu Para Funes de Desenvolvimento............................................................................................6
Editor de programas, subprogramas e outros...........................................................................................7
Terceira tela do Editor de mapas ...........................................................................................................10
Editor de Data reas...............................................................................................................................11
Alguns Comandos do Ambiente Natural................................................................................................11
Recorrendo a Ajuda (HELP)..................................................................................................................12
Qual o texto de uma mensagem de erro de execuo ?..........................................................................12
Qual a sintaxe de uma instruo Natural ?.............................................................................................12
Recuperando os ltimos Comandos (LAST) .........................................................................................13
Qual o ltimo comando que usei ?.........................................................................................................13
Quais os ltimos comandos que usei ?...................................................................................................13
Recuperando os parmetros do meu ambiente (GLOBALS).................................................................13
Recuperando os objetos da biblioteca (LIST)........................................................................................14
Quais os objetos da biblioteca ?..............................................................................................................14
Quais os objetos de um determinado tipo na biblioteca ?......................................................................14
Quais os objetos de um determinado tipo iniciados com a letra S na biblioteca ?.............................15
Recuperando os objetos que possuem uma string (SCAN)................................................................15
Limpando a rea do editor Natural.........................................................................................................16
Editando um objeto Natural (EDIT)......................................................................................................16
Renomeando um objeto Natural (RENAME).......................................................................................17
Gerando APENAS o fonte de um objeto do editor Natural (EDIT).....................................................17
Gerando o fonte e o executvel de um objeto Natural (STOW)...........................................................17
Verificando a sintaxe de um programa Natural (CHECK)....................................................................19
Estruturando um objeto no editor Natural (STRUCT).........................................................................19
Conhecendo o utilitrio de mensagens de erro (SYSERR)...................................................................20
Terminando uma sesso Natural (FIN).................................................................................................20
Mudando de biblioteca (LOGON).........................................................................................................20
Rodando um programa a partir do seu executvel (EXECUTE)...........................................................20
Rodando um programa a partir do seu fonte (RUN)..............................................................................20
Programao Natural..............................................................................................................................21
Modos de programao..........................................................................................................................21
Variveis de usurio...............................................................................................................................21
Nome......................................................................................................................................................21
Formato...................................................................................................................................................21
Definio................................................................................................................................................22
Redefinio.............................................................................................................................................22
Inicializao (INIT).............................................................................................................................22
Manipulao de variveis ......................................................................................................................23
Limpando (RESET)..............................................................................................................................23
Movendo Contedo (MOVE)................................................................................................................23
Operaes Matemticas..........................................................................................................................24
Juntando Variveis Strings................................................................................................................25
Alterando um caracter em uma varivel ou pesquisando um caracter em uma varivel........................25
Testes Condicionais................................................................................................................................26
A instruo DECIDE ON.......................................................................................................................26
A instruo IF.........................................................................................................................................26
Tratamento de Erro (ON ERROR).........................................................................................................27
Trabalhando com Tela............................................................................................................................27
Chamando o Mapa (tela)........................................................................................................................27
Apresentando no Mapa uma mensagem.................................................................................................27

Natural 2
Reexecutando o Mapa............................................................................................................................28
Indicando o uso de PFs...........................................................................................................................28
Testando a PF pressionada.....................................................................................................................28
Usando a Varivel de controle................................................................................................................29
Processamento com Loop (lao) ............................................................................................................29
A instruo FOR.....................................................................................................................................29
A instruo REPEAT..............................................................................................................................30
A instruo ESCAPE..............................................................................................................................31
Apresentao de informaes.................................................................................................................31
Trabalhando com Arquivo Adabas.........................................................................................................35
Leitura de Registros................................................................................................................................35
A instruo Read....................................................................................................................................36
READ PHYSICAL.................................................................................................................................36
READ LOGICAL...................................................................................................................................37
A instruo HISTOGRAM.....................................................................................................................37
A instruo FIND...................................................................................................................................38
FIND <local> WITH <condio lgica> (gera loop) ...........................................................................39
FIND NUMBER <local> WITH <condio lgica> (no gera loop) ...................................................40
FIND NUMBER <local> WITH <condio lgica> RETAIN AS <lista> ..........................................40
(no gera loop)........................................................................................................................................40
FIND <local> WITH <lista> (gera loop) ............................................................................................40
A instruo GET....................................................................................................................................41
Atualizao de Registros........................................................................................................................41
A instruo UPDATE............................................................................................................................41
A instruo DELETE.............................................................................................................................42
A instruo STORE...............................................................................................................................42
As instrues END TRANSACTION e BACKOUT TRANSACTION................................................42
A instruo RETRY................................................................................................................................43
Trabalhando com arquivos WORK........................................................................................................43
Lendo arquivo work................................................................................................................................44
Gravando arquivo work..........................................................................................................................44
Usando Subrotina Interna.......................................................................................................................44
Usando Subprograma.............................................................................................................................45
Exemplo de Programa com Consulta Fontica.......................................................................................45

Natural 2

Introduo

O objetivo deste curso ensinar aos alunos conhecimentos bsicos


do ambiente de desenvolvimento Natural / Adabas e da linguagem de
programao NATURAL 2.
Neste curso o aluno aprender como utilizar cada um dos editores do
NATURAL 2, bem como seus comandos associados, e os comandos de
sistema. Ao concluir este curso o aluno estar apto a desenvolver
programas na linguagem NATURAL e acessar banco de dados ADABAS.

Natural 2

Ambiente Natural
Objetos Natural
Os seguintes tipos de objetos podem ser criados dentro de uma
biblioteca Natural:

P
N
S
H
C
T
M

Program
Subprogram
Subroutine
Helproutine
Copycode
Text
Map

G
L
A
Z
D
4

Global Data Area


Local Data Area
Parameter Data Area
Recording
Description
Class

Dos tipos de objetos acima relacionados, no iremos trabalhar com


alguns, que podero ser vistos posteriormente em outros cursos.
H, basicamente, trs editores para a manipulao destes tipos de
objetos: um para as reas de dados (Data Area); um para Map e
HelpMap; e o ltimo para os demais objetos (Copycode, Description,
Helproutine, Program, Subprogram e Subroutine).
A letra que est a esquerda de cada tipo de objeto no quadro acima,
utilizada no ambiente Natural para representar o tipo de objeto.

Natural 2

Menu Principal
16:33:28
User P007779

*****

NATURAL *****
- Main Menu -

2001-01-15
Library SYSTEM

Function
_
_
_
_
_
_
_
_

Development Functions
Development Environment Settings
Maintenance and Transfer Utilities
Debugging and Monitoring Utilities
Example Libraries
Other Products
Help
Exit NATURAL Session

Logon accepted to library SYSTEM.


Command =
Enter-PF1---PF2---PF3---PF4---PF5---PF6---PF7---PF8---PF9---PF10PF11PF12--Help
Exit
Canc

Tela com o menu principal do ambiente de desenvolvimento Natural


Neste curso vamos trabalhar apenas a primeira opo apresentada
neste menu, a opo Development Funcions (Funes de
Desenvolvimento).
Para selecionar esta opo, basta posicionar o cursor no trao a
esquerda da mesma e teclar enter.
Nesta tela pode ser selecionada, opcionalmente, a biblioteca onde
esto os objetos que vamos trabalhar. Para isso necessrio digitar o
nome da biblioteca, direita da palavra Library, em cima da palavra
SYSTEM, no canto superior direito da tela.

Natural 2

Menu Para Funes de Desenvolvimento


17:23:53
User P007779

***** NATURAL *****


- Development Functions Code
C
E
R
D
X
L
S
?
.
Code .. _

2001-01-15
Library SYSTEM
Mode Structured
Work area empty

Function
Create Object
Edit Object
Rename Object
Delete Object
Execute Program
List Object(s)
List Subroutines Used
Help
Exit
Type .. _
Name .. ________________________________

Command ===>
Enter-PF1---PF2---PF3---PF4---PF5---PF6---PF7---PF8---PF9---PF10--PF11--PF12--Help Menu Exit
Canc

Esta tela permite trabalhar (criar, editar, excluir, etc...) programas,


mapas e outros objetos do Natural.

Natural 2

Editor de programas, subprogramas e outros

>
Top
0010
0020
0030
0040
0050
0060
0070
0080
0090
0100
0110
0120
0130
0140
0150
0160
0170
0180
0190
0200

> + Program
SAEPG100 Lib SINARM
....+....1....+....2....+....3....+....4....+....5....+....6....+....7..
** ------------------------------------------------------------------ **
** PGM. QUE CHAMA O MENU DE MANUTENCAO DO SISTEMA
- 16/12/91 **
** ------------------------------------------------------------------ **
DEFINE DATA
GLOBAL USING SAEGL001
LOCAL
1 #DADOS-CALL
2 #COD-ORGAO-P
(N05)
2 #MAT-ALT-P
(N07)
2 #AUT-ALTERA
(A01)
2 #DADOS-P
3 #ISN-PROP-P
(P8)
3 #ISN-ARMA-P
(P8)
3 #COD-ARMA-P
(P9)
3 #COD-VEND-P
(N09)
3 #COD-PROP-P
(N09)
3 #TIPO-PROP-P
(A01)
3 #GUARDA-IDENT
(A15)
3 #GUARDA-NOME
(A50)
3 #GUARDA-DTNASC
(N08)
....+....1....+....2....+....3....+....4....+....5....+... S 185 L 1

Alguns comandos usados na linha do editor:

.In
para criar n linhas em branco abaixo da linha onde
est o comando;

.I
para criar dez linhas em branco abaixo da linha onde
est o comando

.I(<nome do objeto>) para incluir outro objeto dentro do editor;

.X
para marcar o incio de um bloco (conjunto) de linhas;

.y
para marcar o final de um bloco (conjunto) de linhas;

.C
para copiar (duplicar) uma linha;

.CX
para copiar a linha marcada com X, para a linha abaixo
da linha deste comando

.CX-Y
para copiar o bloco de linhas marcados por X e Y para
abaixo da linha deste comando;

.D
elimina uma linha;

.DX
elimina a linha marcada com X;

.DX-Y
elimina o bloco de linhas marcado por X e Y;

.P
posiciona a linha onde est este comando como a
primeira linha da tela do editor;

.L
desfaz as alteraes da linha onde est este comando;

.MX
move a linha marcada com X para a linha abaixo da
que est este comando;

Natural 2

.MX-Y
move o bloco de linhas marcado por X e Y para a linha
abaixo da que est este comando.
Alguns comandos usados na linha de comandos do editor:

TOP
posiciona no incio do objeto que est sendo editado;

BOTTOM
posiciona no final do objeto que est sendo editado;

LET
desfaz as alteraes em curso, as no confirmadas com
ENTER, da pgina do editor;

GLOBALS SM=ON/OFF permite alterar o modo de programao. Se


SM igual a ON, structured mode, caso contrrio reporting mode;

SET TYPE <tipo-objeto> permite alterar o tipo do objeto;

2.3.2 Menu do editor de mapas


16:54:15
User P007779

***** NATURAL MAP EDITOR *****


- Edit Map Code
---D
E
I
H
M
S
T
W
?
.

Code .. E

2001-01-16
Library SINARM

Function
--------------------------------Field and Variable Definitions
Edit Map
Initialize new Map
Initialize a new Help Map
Maintenance of Profiles & Devices
Save Map
Test Map
Stow Map
Help
Exit

Name .. SAETL170

Profile .. SYSPROF_

Command ===>
Enter-PF1---PF2---PF3---PF4---PF5---PF6---PF7---PF8---PF9---PF10--PF11--PF12--Help
Exit Test Edit

a letra E ao lado da opo Code significa que vamos editar um mapa j


existente.

O mapa a ser editado o SAETL170.

Natural 2

2.3.3 Segunda tela do editor de mapas

15:25:25

Define Map Settings for MAP

Delimiters
----------------Cls Att CD Del
T
D
BLANK
T
I
?
A
D
_
A
I
)
A
N

M
D
&
M
I
:
O
D
+
O
I
(

Format
--------------------------Page Size ...... 23
Line Size ...... 79
Column Shift ... 0 (0/1)
Layout ......... ________
dynamic ....... N (Y/N)
Zero Print ..... N (Y/N)
Case Default ... UC (UC/LC)
Manual Skip .... N (Y/N)
Decimal Char ... ,
Standard Keys .. N (Y/N)
Justification .. L (L/R)
Print Mode ..... __
Control Var .... ________

2001-01-19
Context
-------------------------Device Check .... ________
WRITE Statement
_
INPUT Statement
X
Help ____________________
as field default N (Y/N)
Automatic Rule Rank 1
Profile Name .... SYSPROF
Filler Characters
-----------------------Optional, Partial ....
Required, Partial ....
Optional, Complete ...
Required, Complete ...

Enter-PF1---PF2---PF3---PF4---PF5---PF6---PF7---PF8---PF9---PF10--PF11--PF12--Help
Exit
Let

Na Segunda tela, que s apresentada na criao de um mapa ou


se for chamada na terceira tela (opo PF2 Mset), definimos as
caractersticas do mapa: Quantidade de linhas (Page Size), que pode
variar de 1 a 255; Quantidade de colunas (Line Size), que pode variar de
1 a 255; Como o mapa ser utilizado tela ou relatrio; e outras
informaes.

Natural 2

Terceira tela do Editor de mapas

Ob _
Ob D CLS ATT DEL
CLS ATT DEL
.
.
T D
Blnk
T I
?
.
.
A D
_
A I
)
.
.
A N

M D
&
.
.
M I
:
O D
+
.
.
O I
(
.
.
001
--010---+----+----+---030---+----+----+---050---+----+----+---070---+---+XXXXXXXXXXX ?SINARM ?- ?SISTEMA?NACIONAL?DE?ARMAS
+XXXXXXXX
+XXXXXXXX
SAETL170
----------------------------(XXXXXXXXXXXXXXXXXXXXXXXXX -----------------------

RAZAO SOCIAL:&XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
C.G.C.
:&00000000000000
+XXXXXX &XXXXXX
ENDERECO
::XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
BAIRRO
::XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
MUNICIPIO
::XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX U.F.::XX +99999
C.E.P.
::00000000
Enter-PF1---PF2---PF3---PF4---PF5---PF6---PF7---PF8---PF9---PF10--PF11--PF12--Help Mset Exit Test Edit -+
Full <
>
Let

Os comandos que podem ser utilizados nas linhas so:

..D
..Dn
..I
..In
..C
..R
..Rn
..P

para eliminar uma linha;


para eliminar n linhas;
para incluir uma linha;
para incluir n linhas;
para centralizar o contedo de uma linha;
para copiar (duplicar) uma linha;
para copiar (repetir) uma linha n vezes;
para definir a regra de validao das PFs;

Os comandos que podem ser utilizados para campos e textos so:

.D

.E

.M
cursor;

.A

.P

para eliminar um campo ou texto;


para editar um campo;
para mover um campo ou texto para o local onde est o
para definir um campo como matriz (array);
para ver ou definir a regra para o campo.

10

Natural 2

Editor de Data reas

Local
SAE-JURI Library SINARM
DBID
200 FNR
9
Command
> +
I T L Name
F Leng Index/Init/EM/Name/Comment
Top - -------------------------------- - ---- --------------------------------V 1 SAE-JURI
SAE-JURIDICA
2 COD-PROPRIETARIO
P 9,0
2 CATEGORIA-PJ
N 1,0
G 2 CGC
3 CGC1
P 8,0
3 CGC2
P 4,0
3 CGC3
P 2,0
2 SFPC
A
6
G 2 RAZAO
3 RAZAO1
A
20
3 RAZAO2
A
30
2 ENDERECO
A
40
2 BAIRRO
A
30
2 CIDADE
P 5,0
2 UF-END
A
2
2 CEP
P 8,0
2 TEL
A
13
----------------------------------------------------------------- S 24
L 1

neste exemplo o editor de data reas est mostrando a Local SAEJURI

Alguns Comandos do Ambiente Natural


So comandos que utilizamos para poder melhor trabalhar dentro de
um ambiente Natural. Podemos dividir estes comandos em: de ajuda
(HELP,LAST); de conhecimento do ambiente (GLOBALS, SYSPROF,
SYSPROD); de recuperao de informao dos objetos do ambiente (LIST,
SCAN); de manuteno dos objetos do ambiente (CATALOG, CHECK,
CLEAR, CREATE, DELETE, EDIT, PURGE, READ, RENAME,
RENUMBER,
SAVE,
SCRATCH,
STOW,
STRUCT,
SYSERR,UNCATALOG); de mudana/sada do ambiente (FIN, LOGOFF,
LOGON); de processamento/execuo de objetos (EXECUTE, RUN).
Dos comandos acima apresentados iremos conhecer alguns, os de uso
mais freqente. Para os demais encontraremos maiores detalhes no
Natural Reference Manual.

11

Natural 2

Recorrendo a Ajuda (HELP)


Qual o texto de uma mensagem de erro de execuo ?
Para recuperar o texto de uma mensagem basta informar HELP n
(onde n o nmero da mensagem)
Exemplo: HELP 3017
15:00:14
Library SINARM

***** NATURAL HELP UTILITY *****


- NATURAL System Message NAT3021 -

2001-01-17
Page 1

An invalid CID value was detected. DB/FNR :1:/:2:


Tx *** Short Text ***
An invalid CID value was detected.
Ex *** Explanation ***
A time-out occurred because a command ID was not found.
This program error can be caused by:
- CMD ID being assigned to another Ln command (n = 1,...9);
- CMD ID being assigned to another file;
- CMD ID not found for an S8 command.
More ...
Enter-PF1---PF2---PF3---PF4---PF5---PF6---PF7---PF8---PF9---PF10--PF11--PF12--Help Menu Exit
Print
+
Canc

Qual a sintaxe de uma instruo Natural ?


Para recuperar a sintaxe de uma instruo Natural basta informar
HELP <instruo>.
Exemplo: HELP IF
15:19:47

***** NATURAL HELP UTILITY *****


- IF -

2001-01-17
Page 1

-----------------------------------------------------------------------------GENERAL SYNTAX
-----------------------------------------------------------------------------IF logical-condition
THEN statement ...
ELSE statement ...
END-IF
Note: If no action is to be performed if condition met, specify statement
IGNORE in THEN clause.
-----------------------------------------------------------------------------More ...
Enter-PF1---PF2---PF3---PF4---PF5---PF6---PF7---PF8---PF9---PF10--PF11--PF12--Help Menu Exit
+
Canc

12

Natural 2

Recuperando os ltimos Comandos (LAST)


Qual o ltimo comando que usei ?
Para recuperar qual foi o seu ltimo comando utilizado no ambiente
Natural informe LAST.
Exemplo: LAST
Command ===> LIST P *

Quais os ltimos comandos que usei ?


Para recuperar os ltimos doze comandos utilizados no ambiente
Natural informe LAST *.
Exemplo: LAST *
_
_
_
_
_
_
_
_
_

LAST
LOGON
P007779
LOGON SINARM
HELP U 100
HELP 3017
HELP IF
? 3021
HELP IF
L P *
LIST P *

Recuperando os parmetros do meu ambiente (GLOBALS)


Para recuperar os parmetros definidos para o seu ambiente Natural,
informe GLOBALS.
Exemplo: GLOBALS
16:09:02

***** NATURAL GLOBALS COMMAND *****


- Session Parameters -

(CC) Cond.Prog.Execution ....... OFF


(CF) Term.Control Character ....
%
(DC) Dec. Character .............. ,
(DFOUT) Date Format Output ....... S
(DFSTACK) Date Format Stack Cmd .. S
(DFTITLE) Date Format Title ...... S
(DU) Dump Generation .........
OFF
(EJ) Page Eject ................ ON
(FS) Default Format ............ OFF
(FCDP) FC on Dyn.Prot.Fields ... ON
(IA) Input Assign ................ =
(ID) Input Delimiter ............. /
(IM) Input Mode .................. F
(LE) Limit Error ............... OFF
(LS) Line Size ................. _80
(LT) Limit .............. __99999999

2001-01-17

(MT) Max.CPU Time ....... ______60


(NC) Nat.Sys.Commands ........ OFF
(OPF) Overw.Prot.Fields ...... ON
(PD) Page Dataset ............ _50
(PM) Print Mode ............... RP
(PS) Page Size ............... _23
(REINP) Reinput on Error ..... ON
(SA) Sound Alarm ............. OFF
(SF) Spacing Factor ........... _1
(SL) Source Line Length ....... 72
(SM) Structured Mode ......... ON
(TS) Translate Sys.Prog ...... OFF
(WH) Wait on Hold ............ OFF
(ZD) Zero Division ........... ON
(ZP) Zero Printing ........... ON

Command ===>
Enter-PF1---PF2---PF3---PF4---PF5---PF6---PF7---PF8---PF9---PF10--PF11--PF12--Help Print Exit
Updat
Canc

13

Natural 2

Recuperando os objetos da biblioteca (LIST)


O comando LIST um dos comandos do Natural que possui uma
grande variedade de opes. Algumas sero apresentadas a seguir.
Quais os objetos da biblioteca ?
Para recuperar quais os objetos da biblioteca, informe LIST *.
Exemplo: LIST *
16:25:48
User P007779
Cmd
--__
__
__
__
__
__
__
__
__
__
__
__
__

Name
*________
##ACERTO
AAAPG210
AAAPG220
AAAPG230
AAAPG240
AAAPG260
AAAPG630
AAATL145
AAATL635
AAPARAMT
ANDREWK
ANT-OCOR
ANTPG000

***** NATURAL LIST COMMAND *****


- LIST Objects in a Library Library SINARM

Type
*__________
Program
Program
Program
Program
Program
Program
Program
Map
Map
Parameter
Program
Local
Program

S/C
*__
S/C
S/C
S/C
S/C
S/C
S/C
S/C
S/C
S/C
S/C
S
S/C
S/C

SM
*
S
S
S
S
S
S
S
S
S
S
S

Version
*______
2.2.06
2.3.03
2.2.06
2.2.08
2.2.08
2.2.08
2.2.08
2.3.03
2.3.03
2.2.06
2.3.03
2.2.06
2.2.08

User ID
*________
FREITAS
P007779
FREITAS
P007779
P007779
P007779
P007779
P007779
P007779
IRENE
ANDRE
IRENE
P007779

2001-01-17

Date
Time
*__________ *________
1997-12-16 14:45:16
1999-08-17 16:26:00
1997-12-03 15:59:08
1999-07-02 16:32:41
1999-03-26 12:09:59
1999-03-31 09:24:37
1999-05-27 13:20:20
2000-01-03 17:52:23
2000-01-03 17:50:36
1995-11-24 14:11:58
2000-10-06 10:40:52
1995-11-24 14:14:42
1999-07-02 15:51:41
14 Objects found

Top of List.
Command ===>
Enter-PF1---PF2---PF3---PF4---PF5---PF6---PF7---PF8---PF9---PF10--PF11--PF12--Help Print Exit
-+
++
Canc

Quais os objetos de um determinado tipo na biblioteca ?


Para recuperar quais os objetos de um determinado tipo na
biblioteca, informe LIST <tipo> * (onde tipo qualquer um dos tipo de
objeto Natural)
Exemplo: LIST P * (lista todos os programas na biblioteca)
17:10:55
User P007779
Cmd
--__
__
__
__
__
__
__
__
__
__
__
__
__

Name
*________
##ACERTO
AAAPG210
AAAPG220
AAAPG230
AAAPG240
AAAPG260
AAAPG630
ANDREWK
ANTPG000
ANTPG240
AUTORIZ
BACADEL
BACAEMPR

***** NATURAL LIST COMMAND *****


- LIST Objects in a Library Type
P__________
Program
Program
Program
Program
Program
Program
Program
Program
Program
Program
Program
Program
Program

S/C
*__
S/C
S/C
S/C
S/C
S/C
S/C
S/C
S
S/C
S/C
S/C
S/C
S/C

SM
*
S
S
S
S
S
S
S
S
S
S
S
S
S

Version
*______
2.2.06
2.3.03
2.2.06
2.2.08
2.2.08
2.2.08
2.2.08
2.3.03
2.2.08
2.3.03
2.2.06
2.2.06
2.2.06

User ID
*________
FREITAS
P007779
FREITAS
P007779
P007779
P007779
P007779
ANDRE
P007779
P007779
MAGNO
FREITAS
ANDRE

2001-01-17
Library SINARM
Date
Time
*__________ *________
1997-12-16 14:45:16
1999-08-17 16:26:00
1997-12-03 15:59:08
1999-07-02 16:32:41
1999-03-26 12:09:59
1999-03-31 09:24:37
1999-05-27 13:20:20
2000-10-06 10:40:52
1999-07-02 15:51:41
1999-08-13 07:56:16
1997-02-20 15:15:39
1997-12-16 10:04:27
1997-11-13 17:17:08
14 Objects found

Top of List.
Command ===>
Enter-PF1---PF2---PF3---PF4---PF5---PF6---PF7---PF8---PF9---PF10--PF11--PF12--Help Print Exit
-+
++
Canc

14

Natural 2

Quais os objetos de um determinado tipo iniciados com a letra S na


biblioteca ?
Para recuperar quais os objetos de um determinado tipo na biblioteca
iniciados pela letra S ou outra, informe LIST <tipo> S* (onde tipo
qualquer um dos tipo de objeto Natural, e o S a letra com a qual se inicia
o nome do objeto).
Exemplo: LIST P S* (lista todos os programas na biblioteca, cujo
nome comea com a letra S)
17:32:17
User P007779
Cmd
--__
__
__
__
__
__
__
__
__
__
__
__
__
__

Name
S*_______
SAE-RELA
SAE-RELB
SAE-RELC
SAE-RN
SAE-RN2
SAE-RN3
SAE-RN4
SAEARMA
SAEARMA1
SAEBAT01
SAECGARM
SAECGAR2
SAECLEXT
SAECLEX1

***** NATURAL LIST COMMAND *****


- LIST Objects in a Library Type
P__________
Program
Program
Program
Program
Program
Program
Program
Program
Program
Program
Program
Program
Program
Program

S/C
*__
S/C
S/C
S/C
S/C
S/C
S
S/C
S/C
S/C
S
S/C
S/C
S/C
S/C

SM
*
S
S
S
S
S
S
S
S
S
S
S
S
S
S

Version
*______
2.2.08
2.2.08
2.2.08
2.2.08
2.2.08
2.2.08
2.2.08
2.2.06
2.2.06
2.3.03
2.2.08
2.2.08
2.2.06
2.2.06

User ID
*________
P007779
P007779
P007779
P007804
P007804
P007804
P007804
FREITAS
FREITAS
P007779
P007779
ANDRE
ANDRE
ANDRE

2001-01-17
Library SINARM
Date
Time
*__________ *________
1999-06-15 09:49:01
1999-06-15 09:49:55
1999-06-15 09:50:39
1998-11-09 15:10:13
1998-11-09 10:21:52
1998-11-06 15:29:30
1998-11-09 10:41:57
1997-12-16 10:31:27
1997-12-16 10:31:56
1999-08-17 09:21:20
1999-04-22 10:19:39
1998-11-10 11:05:38
1997-10-08 09:36:46
1997-11-10 15:55:53
14 Objects found

Top of List.
Command ===>
Enter-PF1---PF2---PF3---PF4---PF5---PF6---PF7---PF8---PF9---PF10--PF11--PF12--Help Print Exit
-+
++
Canc

Recuperando os objetos que possuem uma string (SCAN)


O SCAN um programa que permite recuperar/alterar todos os
objetos fonte de uma biblioteca que contenham uma determinada string de
caracteres.
Para aciona-lo basta informar SCAN na linha de comando, que a
seguinte tela ser apresentada:

15

Natural 2

17:50:11
User P007779

***** NATURAL SCAN COMMAND *****


- Scan Objects in Libraries Code
T
L
S
?
.

Code ...........
Scan value .....
Replace value ..
Library ........
Object name ....
Object type ....
Absolute scan ..

2001-01-17
Library SINARM

Function
Statistic
List modules containing scan value
List found scan values
Help
Exit

_
________________________________
________________________________
SINARM__
_________
Selection list .. N
______________
N
Trace ........... N

Command ===>
Enter-PF1---PF2---PF3---PF4---PF5---PF6---PF7---PF8---PF9---PF10--PF11--PF12--Help Menu Exit

Observaes:

Code - deve ser preenchido com S para executar o scan.

Scan value - a string de caracteres que deseja-se procurar/alterar.

Replace value - a string de caracteres que substituir a string


informada no Scan value. Se for apenas uma pesquisa, deix-lo em branco.

Library - a biblioteca que deseja-se fazer o SCAN, deixar sempre o


contedo que aparece.

Object name - o nome de um objeto que dever ser pesquisado, ou


o prefixo com o qual comeam os objetos a serem pesquisados.

Absolute scan - deve ser N se a string a ser pesquisada for parte


de uma palavra, caso contrrio, S.

Trace - para evitar que ocorra o erro 1009 (time-out) informe sempre
s.
Limpando a rea do editor Natural
Para limpar a rea de edio do editor corrente do Natural. Esse
comando pode ser acionado da rea de comando do editor ou da linha de
comando do Natural.
Exemplo: CLEAR
Editando um objeto Natural (EDIT)
Para editar e/ou criar um objeto Natural, devemos chamar seu editor
especfico utilizando o comando EDIT: caso o objeto exista na biblioteca,
informe EDIT <nome do objeto>; caso contrrio informe EDIT n (onde n

16

Natural 2

o tipo do objeto a se criado). um comando que pode ser utilizado na rea


de comandos do Natural e dentro de um editor.
Exemplo:
EDIT M

(para criar um novo mapa)

EDIT SAETL100

(Para editar o objeto j existente na biblioteca)

Renomeando um objeto Natural (RENAME)


Para renomear um objeto Natural, quer fonte, quer executvel ou
ambos, utilizamos o comando RENAME. A sua sintaxe o nome do
comando seguido pelo nome atual do objeto e o novo nome. um comando
que pode ser utilizado na rea de comandos do Natural e dentro de um
editor.
Exemplo:
RENAME SAETL100 SAETL200

(Modifica o nome do objeto


SAETL100 para SAETL200)

Gerando APENAS o fonte de um objeto do editor Natural (EDIT)


Para salvar (gravar na biblioteca) um objeto que est sendo
trabalhado dentro de uma rea de edio, utilizamos o comando SAVE. Se
o objeto j existe na biblioteca, basta apenas informar o nome do comando,
mas se for um novo objeto dever ser informado o nome. um comando
que pode ser utilizado tanto na rea de comandos do Natural e dentro de
um editor.
Exemplo:
SAVE

(Salva (grava na biblioteca) um objeto j


existente)

SAVE SAEPG100 (Salva (inclui na biblioteca) um objeto novo


chamado SAEPG100)
Gerando o fonte e o executvel de um objeto Natural (STOW)
O comando STOW verifica se h algum erro de sintaxe no programa
fonte, se no houver, ele salva (grava na biblioteca) o fonte e gera
(gravando na biblioteca) o executvel de um objeto existente dentro da rea
de edio do Natural. um comando que pode ser utilizado na rea de
comandos Natural e dentro de um editor.
Exemplo:

17

Natural 2

STOW

(Salva (grava na biblioteca) o fonte e o


executvel de um objeto j existente)

18

Natural 2

Verificando a sintaxe de um programa Natural (CHECK)


O comando CHECK verifica se h algum erro de sintaxe no
programa fonte, se houver, ele mostra uma mensagem dizendo qual o erro
ocorrido e nmero da linha no programa. um comando que pode ser
utilizado na rea de comandos Natural e dentro de um editor.
Exemplo:

CHECK

(Verifica erros de sintaxe no programa)

Estruturando um objeto no editor Natural (STRUCT)


O comando STRUCT estrutura as linhas de um programa fonte
fazendo um alinhamento para comandos que formam laos e para definio
de estrutura de dados.
Exemplo:
>
STRUCT
> + Program
CURSO
Lib SINARM
All
....+....1....+....2....+....3....+....4....+....5....+....6....+....7..
0010 DEFINE DATA
0020 LOCAL
0030 1 CAMPOS
0040 2 CAMPO-1
(A1)
0050 2 CAMPO-2
(N5)
0060 END-DEFINE
0070 RESET CAMPO-1
0080 REPEAT
0090 IF CAMPO-1 = 'X'
0100 WRITE 'EH IGUAL A X'
0110 ELSE
0120 IF CAMPO-1 = ' '
0130 WRITE 'ESTAH EM BRANCO'
0140 ELSE
0150 WRITE 'TEM OUTRA COISA'
0160 END-IF
0170 END-IF
0180 END-REPEAT
0190 END
0200
....+....1....+....2....+....3....+....4....+....5....+... S 19
L 1

>
All
0010
0020
0030
0040
0050
0060
0070
0080
0090
0100
0110
0120
0130
0140
0150
0160
0170
0180
0190

> + Program
CURSO
Lib SINARM
....+....1....+....2....+....3....+....4....+....5....+....6....+....7..
DEFINE DATA
LOCAL
1 CAMPOS
2 CAMPO-1
(A1)
2 CAMPO-2
(N5)
END-DEFINE
RESET CAMPO-1
REPEAT
IF CAMPO-1 = 'X'
WRITE 'EH IGUAL A X'
ELSE
IF CAMPO-1 = ' '
WRITE 'ESTAH EM BRANCO'
ELSE
WRITE 'TEM OUTRA COISA'
END-IF
END-IF
END-REPEAT
END
....+....1....+....2....+....3....+....4....+....5....+... S 19
L 1

19

Natural 2

Conhecendo o utilitrio de mensagens de erro (SYSERR)


O SYSERR um utilitrio do ambiente Natural para manuteno do
arquivo de mensagens de erro dentro de uma biblioteca. Estas mensagens
de erro podem sem emitidas de dentro de um programa.
Exemplo:

SYSERR

11:35:23

(Na linha de comando do Natural)

***** NATURAL SYSERR UTILITY *****


- Menu Code
---AD
DE
DI
MO
PR
SC
SE
TR
?
.
---Code .. ad

2001-01-19

Function
---------------------------------------Add new messages
Delete messages
Display messages
Modify messages
Print messages
Scan in messages
Select messages from a list
Translate messages into another language
Help
Exit
---------------------------------------Message type .... US
Library ......... SINARM__
Message number .. 1___ - 9999
Language codes .. 1________

Please enter code.


Command ===>
Enter-PF1---PF2---PF3---PF4---PF5---PF6---PF7---PF8---PF9---PF10--PF11--PF12--Help
Exit
Canc

Terminando uma sesso Natural (FIN)


O FIN o comando que encerra uma sesso Natural.
Exemplo: FIN
(Na linha de comando do Natural)
Mudando de biblioteca (LOGON)
O comando LOGON permite que o usurio mude para outra
biblioteca. necessrio informar o nome da biblioteca, caso no seja
informado o Natural assume que a biblioteca a SYSTEM.
Exemplo: LOGON CURSO

(conecta com a biblioteca CURSO)

Rodando um programa a partir do seu executvel (EXECUTE)


Para executar um programa a partir de seu executvel utilizamos o
comando EXECUTE.
Exemplo: EXECUTE SAEPG001

(Executa
o
programa
SAEPG001)
Rodando um programa a partir do seu fonte (RUN)
Para executar um programa a partir do seu fonte, utilizamos o
comando RUN. Este comando deve ser emitido de dentro do editor de
programas, com o programa a ser executado sendo editado.
Exemplo: RUN

(Executa o programa que est sendo


editado)

20

Natural 2

Programao Natural
Modos de programao
H duas formas de programar no Natural 2: a primeira, a forma
como o Natural foi criado a partir de sua primeira verso, em Reporting
Mode; e a Segunda, em structured Mode. A diferena entre os dois
modos que em um, o Structured Mode, algumas instrues possuem as
respectivas instrues de finalizao e uma rea de definio de dados
obrigatria para definio de variveis e views utilizadas, enquanto no
outro, o Reporting Mode, pode no existir a rea de dados para definio
das variveis, pois qualquer varivel pode ser definida em qualquer lugar e
quando for necessrio, e o agrupamento de instrues dentro de uma outra
feito utilizando as instrues DO/DOEND.
Neste curso vamos abordar somente o Structured Mode, pois o
Reporting Mode j est praticamente em desuso.
Variveis de usurio
Nome
O nome de uma varivel definida pelo usurio pode Ter de um a 32
caracteres, entre letras, numerais e alguns caracteres especiais: - hfen,
@ arroba, _ sublinhado, / barra, $ cifro, & e comercial, # hash, +
sinal de mais, somente se for o primeiro caracter.
Como primeiro caracter podemos utilizar um dos seguintes smbolos:
qualquer letra; #; + ;&.
Formato
H vrios formatos de variveis disponveis no Natural, dos quais,
conheceremos alguns. Os demais podem ser conhecidos atravs de leitura
de manuais do Natural.
A
- alfanumrico de 1 at 253 posies.
B binrio de 1 at 126 posies.
C controle de atributo (veremos no item Trabalhando com tela)
D varivel de data.
L varivel lgica.
N numrico de 1 a 29 posies.
P numrico compactado de 1 a 29 posies.
T hora

21

Natural 2

Definio
No modo estruturado, a definio de variveis pode ser feita dentro
do fonte do objeto ou fora, em uma rea de dados. Em ambos os casos, h
a necessidade de que ou a varivel ou a rea de dados seja informada
dentro da DEFINE DATA do programa.
>
All
0010
0020
0030
0040
0050
0060

> + Program
CURSO
Lib SINARM
....+....1....+....2....+....3....+....4....+....5....+....6....+....7..
DEFINE DATA
LOCAL
1 #NUMERO
(N05)
1 #NOME
(A30)
1 #MATRIZ
(B2/1:10)
END-DEFINE
....+....1....+....2....+....3....+....4....+....5....+... S 19
L 1

Redefinio
A redefinio permite que uma varivel que foi definida com um
formato possa ser redefinida com outro formato. Permite tambm que uma
varivel definida com um tamanho, possa ser dividida, criando outras
variveis, que so subdiviso da primeira.
A instruo utilizada para redefinir uma varivel o REDEFINE.
>
All
0010
0020
0030
0030
0030
0040
0040
0040
0040
0040
0040
0040
0040
0040
0040
0040
0040
0050
0060

> + Program
CURSO
Lib SINARM
....+....1....+....2....+....3....+....4....+....5....+....6....+....7..
DEFINE DATA
LOCAL
1 #NUMERO
(N05)
1 REDEFINE #NUMERO
2 #NUM-RED (A05)
1 #NOME
(A10)
1 REDEFINE #NOME
2 #LETRA-1 (A01)
2 #LETRA-2 (A01)
2 #LETRA-3 (A01)
2 #LETRA-4 (A01)
2 #LETRA-5 (A01)
2 #LETRA-6 (A01)
2 #LETRA-7 (A01)
2 #LETRA-8 (A01)
2 #LETRA-9 (A01)
2 #LETRA-0 (A01)
1 #MATRIZ
(B21:10)
END-DEFINE
....+....1....+....2....+....3....+....4....+....5....+... S 19
L 1

Inicializao

(INIT)
A inicializao consiste em colocar um contedo inicial na varivel,
no momento da sua definio.

>
All
0010
0020
0030
0050
0070
0080

> + Program
CURSO
Lib SINARM
....+....1....+....2....+....3....+....4....+....5....+....6....+....7..
DEFINE DATA
LOCAL
1 #NUMERO
(N05) INIT <386>
1 #NOME
(A10) INIT <'EDIVALDO'>
1 #MATRIZ
(B2/1:10)
END-DEFINE
....+....1....+....2....+....3....+....4....+....5....+... S 8
L 1

22

Natural 2

Manipulao de variveis
Limpando (RESET)
A instruo RESET elimina o contedo de uma varivel, deixando-a
com o valor adequado a seu formato. Se a varivel for numrica (formato N
ou P), fica com valor zero, se for alfanumrica (formato A) fica em branco.
>
> + Program
CURSO
Lib SINARM
All
....+....1....+....2....+....3....+....4....+....5....+....6....+....7..
0010 DEFINE DATA
0020 LOCAL
0030 1 #NUMERO
(N05) INIT <386>
0040 *
0050 1 #NOME
(A10) INIT <'EDIVALDO'>
0060 *
0070 1 #MATRIZ
(B2/1:10)
0080 END-DEFINE
0090 RESET #NUMERO
0100 RESET #NOME
0110
0120
0130
....+....1....+....2....+....3....+....4....+....5....+... S 10
L 1

Movendo Contedo (MOVE)


A instruo MOVE permite mover o contedo de uma varivel para
outra ou vrias do mesmo formato. Esta movimentao no apaga o
contedo da varivel de origem, ou seja as variveis ficam com contedos
iguais.
Exemplo: Movimentao simples
>
All
0010
0020
0030
0040
0050
0060
0070
0080
0090
0100
0110
0120
0130
0140
0190
0200

> + Program
CURSO
Lib SINARM
....+....1....+....2....+....3....+....4....+....5....+....6....+....7..
DEFINE DATA
LOCAL
1 #CAMPO1
(A10)
1 #CAMPO2
(A10)
1 #CAMPO3
(N05)
1 #CAMPO4
(N05)
END-DEFINE
MOVE 'APRENDER' TO #CAMPO1
MOVE #CAMPO1
TO #CAMPO2
*
MOVE 38415
TO #CAMPO3
MOVE #CAMPO3
TO #CAMPO4
*
END
....+....1....+....2....+....3....+....4....+....5....+... S 14

L 1

23

Natural 2

Exemplo: movendo variveis de mesmo nome de um grupo para outro.


>
All
0010
0020
X 0030
0040
0050
Y 0060
0070
0080
0090
0100
0110
0120
0130
0140
0150
0160
0170
0180
0190
0200

> + Program
CURSO
Lib SINARM
....+....1....+....2....+....3....+....4....+....5....+....6....+....7..
DEFINE DATA
LOCAL
1 #GRUPO1
2 #CAMPO1
(A10)
2 #CAMPO2
(N05)
2 #CAMPO3
(N05)
1 #GRUPO2
2 #CAMPO1
(A10)
2 #CAMPO2
(N05)
2 #CAMPO3
(N05)
END-DEFINE
MOVE BY NAME #GRUPO1 TO #GRUPO2
*
END

....+....1....+....2....+....3....+....4....+....5....+... S 14

L 1

Operaes Matemticas
As instrues matemticas permitem: Adicionar (ADD); Subtrair
(SUBTRACT); Multiplicar (MULTIPLY); Dividir (DIVIDE). No caso de existir
a necessidade de se trabalhar com uma expresso aritmtica, o ideal
montar uma expresso, utilizando a instruo COMPUTE.
>
All
0010
0020
0030
0040
0050
X 0060
Y 0070
0080
0090
0100
0110
0120
0130
0140
0150
0160
0170
0180
0190
0200

> + Program
CURSO
Lib SINARM
....+....1....+....2....+....3....+....4....+....5....+....6....+....7..
DEFINE DATA
LOCAL
1 #CAMPO1
(N05)
1 #CAMPO2
(N03)
END-DEFINE
ADD 8 TO #CAMPO1
/* SOMA 8 AO CONTEUDO DE #CAMPO1
COMPUTE #CAMPO1 = #CAMPO1 + 8
/* SOMA 8 AO CONTEUDO DE #CAMPO1
*
SUBTRACT 5 FROM #CAMPO2
/* SUBTRAI 5 DO CONTEUDO DO #CAMPO2
COMPUTE #CAMPO2 = #CAMPO2 - 5
/* SUBTRAI 5 DO CONTEUDO DO #CAMPO2
*
MULTIPLY #CAMPO1 BY 7
/* MULTIPLICA O CONTEUDO
COMPUTE #CAMPO1 = #CAMPO1 * 7
/* DE #CAMPO1 POR 7
*
DIVIDE 2 INTO #CAMPO2
/* DIVIDE O CONTEUDO DE #CAMPO2 POR 2
COMPUTE #CAMPO2 = #CAMPO2 / 2
/* DIVIDE O CONTEUDO DE #CAMPO2 POR 2
*
COMPUTE #CAMPO1 = 10 * ((#CAMPO1 + #CAMPO1) / 2) - 5
END
....+....1....+....2....+....3....+....4....+....5....+... S 19

L 1

24

Natural 2

Juntando Variveis Strings


A instruo COMPRESS permite que se faa ajuntamento de
variveis e strings em uma s varivel, isto , essa instruo usada
para transferir o contedo de duas ou mais variveis ou strings para uma
varivel alfanumrica.
A instruo COMPRESS com o complemento LEAVING NO no
deixar espao em branco entre as strings e variveis combinadas. Sem
o complemento, deixar espao em branco.
>
All
0010
0020
0030
0040
0050
0060
0070
0080
0090
0100
0110
Y 0120
0130
0140
0150
0160
0170
0180
0190
0200

> + Program
CURSO
Lib SINARM
....+....1....+....2....+....3....+....4....+....5....+....6....+....7..
DEFINE DATA
LOCAL
1 #NOME
(A10)
1 #SOBRENOME
(A15)
1 #NOME-COMPLETO (A20)
1 #TEXTO
(A30)
END-DEFINE
MOVE 'JOAQUIM'
TO #NOME
MOVE 'FERREIRA'
TO #SOBRENOME
*
COMPRESS #NOME #SOBRENOME INTO #NOME-COMPLETO
COMPRESS 'NOME=' #NOME-COMPLETO INTO #TEXTO LEAVING NO
END

....+....1....+....2....+....3....+....4....+....5....+... S 13

L 1

Alterando um caracter em uma varivel ou pesquisando um caracter em uma


varivel
A instruo EXAMINE utilizada para pesquisar e/ou alterar um
caracter em uma varivel alfanumrica.
>
> + Program
CURSO
Lib SINARM
All
....+....1....+....2....+....3....+....4....+....5....+....6....+....7..
0010 DEFINE DATA
0020 LOCAL
0030 1 #MATRIZ
(A1/5)
0040 1 #CAMPO
(A05) INIT <'
5'>
0050 1 #NUMERO
(N03)
0060 END-DEFINE
0070 /* PROCURANDO UM DETERMINADO CONTEUDO E SUA POSICAO
0080 EXAMINE #CAMPO FOR '5' POSITION #NUMERO
0090 /* PROCURANDO QUAL OCORRENCIA TEM O CONTEUDO 'X'
0100 MOVE 'X' TO #MATRIZ (3)
0110 EXAMINE #MATRIZ (*) FOR 'X' INDEX #NUMERO
0120 /* ALTERANDO UM CARACTER EM UMA VARIAVEL
Y 0130 EXAMINE #CAMPO FOR ' ' REPLACE '0'
0140 END
0150
0160
....+....1....+....2....+....3....+....4....+....5....+... S 14
L 1

25

Natural 2

Testes Condicionais
So instrues que permitem tomada de decises verificando o
contedo das variveis.
A instruo DECIDE ON
A instruo DECIDE ON utilizada para especificar mltiplas
opes a serem executadas dependendo do valor contido em uma varivel.
>
All
0010
0020
0030
0040
0050
0060
0070
0100
0110
0120

> + Program
CURSO
Lib SINARM
....+....1....+....2....+....3....+....4....+....5....+....6....+....7..
DECIDE ON FIRST VALUE OF *PF-KEY
VALUE 'ENTR' WRITE 'TECLOU ENTER'
VALUE 'PF01' WRITE 'TECLOU PF 1'
VALUE 'PF02' WRITE 'TECLOU PF 2'
VALUE 'PF03' WRITE 'TECLOU PF 3'
VALUE 'PF04' WRITE 'TECLOU PF 4'
VALUE 'PF05' WRITE 'TECLOU PF 5'
NONE
WRITE 'TECLA NAO PREVISTA'
END-DECIDE
END
....+....1....+....2....+....3....+....4....+....5....+... S 12
L 1

>
All
0010
0020
0030
0040
0050
0060
0070
0080
0110
0120
0130

> + Program
CURSO
Lib SINARM
....+....1....+....2....+....3....+....4....+....5....+....6....+....7..
DEFINE DATA
LOCAL
1 #ESTADO-CIVIL
(N01) INIT <2>
END-DEFINE
DECIDE ON FIRST VALUE OF #ESTADO-CIVIL
VALUE 1 WRITE 'CASADO'
VALUE 2 WRITE 'SOLTEIRO'
VALUE 3 WRITE 'DIVORCIADO'
NONE
WRITE 'ERRO NO ESTADO CIVIL'
END-DECIDE
END
....+....1....+....2....+....3....+....4....+....5....+... S 13
L 1

A instruo IF
A instruo IF utilizada para controlar a execuo de uma instruo
ou um conjunto de instrues de acordo com uma condio lgica.
As condies lgicas permitidas e os conectores so: igual a (=);
diferente de (NE); menor que (<); maior que (>); menor ou igual a (LE);
maior ou igual a (GE). possvel utilizar os seguintes conectivos: OR e
AND.
>
> + Program
CURSO
Lib SINARM
All
....+....1....+....2....+....3....+....4....+....5....+....6....+....7..
0010 DEFINE DATA
0020 LOCAL
0030 1 #ESTADO-CIVIL
(N01) INIT <2>
0040 END-DEFINE
0050 IF #ESTADO-CIVIL = 1
0060
WRITE 'CASADO'
0070 END-IF
0080 IF #ESTADO-CIVIL = 2
0090
WRITE 'SOLTEIRO'
0100 ELSE
0110
WRITE #ESTADO-CIVIL
0120 END-IF
0130 END
....+....1....+....2....+....3....+....4....+....5....+... S 13
L 1

26

Natural 2

Tratamento de Erro (ON ERROR)


Os erros de processamento de um objeto podem ser tratados a fim
de evitar o seu cancelamento e no permitir que o usurio receba a
mensagem diretamente do Natural.
A instruo que permite o tratamento de erro ON ERROR e as
variveis que podem ser utilizadas dentro dela so: *ERROR LINE,
numrica de 4 posies, que contm o nmero da linha fonte do objeto em
execuo que deu erro; *ERROR-NR, numrica de 7 posies, que contm
o nmero do erro ocorrido; *PROGRAM, alfanumrico de 8 posies, que
contm o nome do programa em execuo no memento que ocorreu o erro.
>
All
0010
0020
0030
0040
0050
0060
0070
0080
0090
0100
0110
0120

> + Program
CURSO
Lib SINARM
....+....1....+....2....+....3....+....4....+....5....+....6....+....7..
DEFINE DATA
LOCAL
1 #ESTADO-CIVIL
(N01) INIT <2>
END-DEFINE
IF #ESTADO-CIVIL = 1
WRITE 'CASADO'
END-IF
ON ERROR
WRITE 'ERRO NR:' *ERROR-NR 'NA LINHA:' *ERROR-LINE
'DO PROGRAMA:' *PROGRAM
END-ERROR
END

Trabalhando com Tela


Outra facilidade do Natural o trabalho com tela. O definio da tela
deve ser feita atravs do editor de mapa.
Chamando o Mapa (tela)
Para acionar o mapa definido no editor, utilizamos a instruo INPUT
seguida do complemento USING MAP:
>
All
0010
0020
0030
0040
0050
0060
0070

> + Program
CURSO
Lib SINARM
....+....1....+....2....+....3....+....4....+....5....+....6....+....7..
DEFINE DATA
LOCAL
1 #NOME
(A30)
1 #CPF
(N11)
END-DEFINE
INPUT USING MAP 'MAPA01'
END

Apresentando no Mapa uma mensagem


Para esse trabalho, usamos a instruo INPUT com o complemento
WITH TEXT:
>
All
0010
0020
0030
0040
0050
0060
0070

> + Program
CURSO
Lib SINARM
....+....1....+....2....+....3....+....4....+....5....+....6....+....7..
DEFINE DATA
LOCAL
1 #NOME
(A30)
1 #CPF
(N11)
END-DEFINE
INPUT WITH TEXT 'MENSAGEM' USING MAP 'MAPA01'
END

27

Natural 2

Reexecutando o Mapa
A instruo REINPUT usada para retornar e reexecutar o ltimo
INPUT. Geralmente a utilizamos com dois complementos: uma mensagem
e um indicador (MARK) da varivel onde o cursor deve ser posicionado.
>
All
0010
0020
0030
0040
0050
0060
0070
0080

> + Program
CURSO
Lib SINARM
....+....1....+....2....+....3....+....4....+....5....+....6....+....7..
DEFINE DATA
LOCAL
1 #NOME
(A30)
1 #CPF
(N11)
END-DEFINE
INPUT WITH TEXT 'MENSAGEM' USING MAP 'MAPA01'
REINPUT 'MENSAGEM' MARK *#NOME
END

Indicando o uso de PFs


O uso de PFs num objeto requer a indicao de qual ou quais sero
utilizadas e, se for necessrio, o que cada uma indica.
>
All
0010
0020
0030
0040
0050
0060
0070
0080
0090
0100
0110
0120
0130

> + Program
CURSO
Lib SINARM
....+....1....+....2....+....3....+....4....+....5....+....6....+....7..
DEFINE DATA
LOCAL
1 #NOME
(A30)
1 #CPF
(N11)
END-DEFINE
SET KEY ALL
/* TODAS AS PFS DISPONIVEIS
SET KEY PF3
/* APENAS A PF3 DISPONIVEL
SET KEY PF1=HELP
/* INDICA QUE A PF1 EH O HELP
*
INPUT WITH TEXT 'MENSAGEM' USING MAP 'MAPA01'
*
REINPUT 'MENSAGEM' MARK *#NOME
END

Testando a PF pressionada
A varivel de sistema do Natural que contm a PF pressionada a
*PF-KEY (alfanumrico de 4 posies) e para test-la usamos as instrues
de teste condicional.
Os valores possveis da *PF-KEY so: ENTR (enter); PA1 a PA3;
PF1 a PF48 e CLR (clear).
0010
0020
0030
0040
0050
0060
0080
0100
0110
0120
0130
0140
0150
0160
0170
0180
0190
0200

DEFINE DATA
LOCAL
1 #NOME
(A30)
1 #CPF
(N11)
END-DEFINE
SET KEY ALL
/* TODAS AS PFS DISPONIVEIS
INPUT WITH TEXT 'MENSAGEM' USING MAP 'MAPA01'
IF *PF-KEY = 'PF1'
REINPUT 'PRESSIONOU A PF1' MARK *#NOME
END-IF
* OU ...
DECIDE ON FIRST VALUE OF *PF-KEY
VALUE 'PF1' REINPUT 'PRESSIONOU A PF1'
VALUE 'PF2' REINPUT 'PRESSIONOU A PF2'
VALUE 'PF3' REINPUT 'PRESSIONOU A PF3'
NONE
REINPUT 'PRESSIONOU TECLA NAO PREVISTA'
END-DECIDE
END

28

Natural 2

Usando a Varivel de controle


A varivel de controle permite modificar atributos de uma varivel da
tela.
A varivel de controle deve ser informada no parmetro CV do editor
de mapa.
Fld #campo
Fmt A5
------------------------------------------------------------------------------AD= MIT_______
ZP=
SG=
HE= _____________________
Rls 0
AL= _____
CD= __
CV= #cv____________________________
Mod Undef
PM= __ DF=
DY= ______________________________
EM= _______________________________________________________________
001

--010---+----+----+---030---+----+----+---050---+----+----+---070---+----

Os valores possveis da varivel de controle so: I, intensificado e


como sada e entrada de dados; N, como sada mas sem apresentar o
caracter informado; P, apenas apresentado.
>
> + Program
CURSO
Lib CURSO
All
....+....1....+....2....+....3....+....4....+....5....+....6....+....7..
0010 DEFINE DATA
0020 LOCAL
0030 1 #CAMPO
(A30) INIT <'ZZZZZZZZZZZZZZZZ'>
0040 1 #CV-CAMPO
(C)
0050 END-DEFINE
0060 MOVE (AD=I)
TO #CV-CAMPO
/* INTENSIFICADO
0070 MOVE (AD=NP)
TO #CV-CAMPO
/* NAO VISUALIZADO E PROTEGIDO
0080 MOVE (AD=P)
TO #CV-CAMPO
/* PROTEGIDO
0090 MOVE (AD=N)
TO #CV-CAMPO
/* NAO VISUALIZADO
0100 INPUT USING MAP 'MAPA01'
0110 END
....+....1....+....2....+....3....+....4....+....5....+... S 11
L 1

Processamento com Loop (lao)


Para processos repetitivos o Natural dispe de duas instrues: FOR
e REPEAT.
A instruo FOR
a instruo usada para gerar loop controlado pelo nmero de
execues que sero feitas. Possui o seguinte formato: FOR <operando de
controle> <operando de incio> <operando de final> STEP operando de
incremento>, onde:
Operando de controle uma varivel que controla o loop do
FOR.
Operando de incio um valor fixo ou uma varivel cujo valor
ser colocado no operando de controle.
Operando de final um valor fixo ou uma varivel cujo valor
ser comparado com o operando de controle, para determinar o
final do FOR.
Operando de incremento um valor fixo ou uma varivel cujo
valor ser adicionado ou subtrado do operando de controle.

29

Natural 2

>
All
0010
0020
0030
0040
0050
0060
0070
0080
0090
0100
0110
X 0120
Y 0130
0140
0150
0160
0170

> + Program
CURSO
Lib CURSO
....+....1....+....2....+....3....+....4....+....5....+....6....+....7..
DEFINE DATA
LOCAL
1 #CONTROLE
(N03)
1 #INICIO
(N03) INIT <01>
1 #FINAL
(N03) INIT <16>
1 #INCREMENTO
(N03) INIT <02>
END-DEFINE
FOR #CONTROLE #INICIO #FINAL STEP #INCREMENTO
...
FOR #CONTROLE 1 10
/* #CONTROLE VARIA DE 1 A 10 INCREMENTADO DE
...
/* 1 EM 1
FOR #CONTROLE 1 10 STEP 2 /* #CONTROLE VARIA DE 1 A 10 INCREMENTADO DE
...
/* 2 EM 2
FOR #CONTROLE 10 1 STEP -2 /* #CONTROLE VARIA DE 10 A 1 DECREMENTADO DE
...
/* 2 EM 2
END-FOR
END
....+....1....+....2....+....3....+....4....+....5....+... S 17
L 1

A instruo REPEAT
a instruo usada para gerar um processamento repetitivo
controlado. Possui dois complementos , o UNTIL e o WHILE.
O REPEAT pode ser usado tambm sem nenhum complemento e
desta forma, o bloco de instrues que estiver dentro do REPEAT ser
executado at encontrar uma instruo ESCAPE BOTTOM.
Na forma REPEAT UNTIL <condio lgica>, o bloco de instrues
que estiver dentro do REPEAT, ser executado at que seja satisfeita a
condio lgica ou seja interrompido por uma instruo ESCAPE BOTTOM.
Na forma REPEAT WHILE <condio lgica>, o bloco de instrues
que estiver dentro do REPEAT ser executado enquanto a condio lgica
estiver sendo satisfeita ou at ser interrompido por uma instruo ESCAPE
BOTTOM.
>
All
0010
0020
0030
0040
0050
0060
0070
0080
0090
0100
Y 0110
0120
0130
0140
0150
0160
0170
0180

> + Program
CURSO
Lib CURSO
....+....1....+....2....+....3....+....4....+....5....+....6....+....7..
DEFINE DATA
LOCAL
1 #CONT
(N03)
1 #FINAL
(N03) INIT <16>
END-DEFINE
REPEAT UNTIL #CONT > #FINAL
ADD 1 TO #CONT
END-REPEAT
REPEAT WHILE #CONT < #FINAL
ADD 1 TO #CONT
END-REPEAT
REPEAT
ADD 1 TO #CONT
IF #CONT > #FINAL
ESCAPE BOTTOM
END-IF
END-REPEAT
END
....+....1....+....2....+....3....+....4....+....5....+... S 18
L 1

30

Natural 2

A instruo ESCAPE
A instruo ESCAPE BOTTOM serve para encerrar o loop que est
ativo no momento. O computador passa a executar a instruo que est na
linha seguinte ao END-xx , onde xx o comando que gerou o loop.
A instruo ESCAPE TOP volta a seqncia de execuo ao incio
do loop ativo.
Apresentao de informaes
Uma das grandes facilidades do Natural a possibilidade de gerao
de relatrios quer para apresentar no monitor de vdeo ou em papel. A
facilidade est na definio do lay-out do relatrio e na sua produo.
H dois comandos que permitem gerar relatrio: o DISPLAY e o
WRITE. Ambos os comandos geram o ttulo do relatrio, composto do
nmero da pgina, da data e da hora da gerao do relatrio, que pode ser
suprimido pelo complemento NOTITLE para qualquer uma das instrues.
A instruo DISPLAY mais usada para apresentar variveis num
relatrio. Para cada varivel apresentada gera automaticamente o header
(cabealho) da varivel com o seu nome.
A instruo WRITE muito utilizada para gerar relatrios formatados.
Exemplo
>
> + Program
CURSO
Lib SINARM
All
....+....1....+....2....+....3....+....4....+....5....+....6....+....7..
0010 DEFINE DATA
0020 LOCAL
0030 1 #CAMPO1
(N05) INIT <28649>
0040 1 #CAMPO2
(A30) INIT <'EDSON ARANTES DO NASCIMENTO'>
0050 END-DEFINE
0060 DISPLAY NOTITLE #CAMPO1 #CAMPO2
X 0070 WRITE
NOTITLE #CAMPO1 #CAMPO2
0080 END
0090
....+....1....+....2....+....3....+....4....+....5....+... S 8
L 1

Resultado
#CAMPO1
#CAMPO2
------- -----------------------------28649 EDSON ARANTES DO NASCIMENTO
28649 EDSON ARANTES DO NASCIMENTO
MORE

Como a instruo WRITE muito usada para gerar relatrios


formatados necessrio conhecer os seus complementos que permitem a
formatao do relatrio:
nX, a notao usada para inserir n espaos em branco entre
informaes.
nT, a notao usada para definir a partir de qual coluna a
varivel ou string ser impressa.
x/y, a notao usada para indicar em qual linha e qual
coluna a informao ser apresentada.

31

Natural 2

=, a notao usada para indicar que o header (cabealho)


da varivel ser o nome da prpria varivel.
texto livre, a notao usada para indicar o texto que ser
apresentado.
/, a notao usada para indicar salto de linha.
(I), a notao usada para indicar que o texto deve ser
apresentado de forma intensificada, ser for monitor de vdeo, ou
negrito, se for impresso.
(AD=I) a notao usada para indicar que a varivel deve ser
apresentada de forma intensificada, ser for monitor de vdeo, ou
negrito, se for impresso.
Uma pgina para o Natural sempre contm 80 colunas e 23
linhas. Caso o relatrio a ser gerado tenha mais de 80 colunas
e/ou mais de 23 linhas ser necessrio alterar os valores iniciais
utilizando a instruo FORMAT com os parmetros PS e LS, que
so respectivamente, a quantidade de linha e a quantidade de
colunas do relatrio.
>
> + Program
CURSO
Lib CURSO
All
....+....1....+....2....+....3....+....4....+....5....+....6....+....7..
0010 DEFINE DATA
0020 LOCAL
0030 1 #NOME
(A30)
0040 1 #MATRICULA (N07)
0050 END-DEFINE
0060 FORMAT PS=60 LS=132
/* PAGINA COM 60 LINHAS E 132 COLUNAS
0070 WRITE NOTITLE
0080 01T 'TEXTO NA COLUNA 1 - NORMAL'
0090 40T 'TEXTO NA COLUNA 40 - INTENSIFICADO' (I)
0100 /// 'APOS SALTO DE 3 LINHAS'
0110 6X 'APOS 6 COLUNAS'
0120 9/9 'NA LINHA 9 E COLUNA 9' //
0130 MOVE 'PRINCESA ISABEL' TO #NOME
0140 MOVE 3689403
TO #MATRICULA
0150 WRITE '=' #MATRICULA '(COM NOME DO CAMPO)' /
0160 WRITE #NOME (AD=I) '(COM CONTEUDO INTENSIFICADO)'
0170 END
....+....1....+....2....+....3....+....4....+....5....+... S 17
L 1

Exemplo da execuo do programa anterior:


TEXTO NA COLUNA 1 - NORMAL
APOS SALTO DE 3 LINHAS

TEXTO NA COLUNA 40 - INTENSIFICADO


APOS 6 COLUNAS

NA LINHA 9 E COLUNA 9
#MATRICULA:

3689403 (COM NOME DO CAMPO)

PRINCESA ISABEL
MORE

(COM CONTEUDO INTENSIFICADO)

32

Natural 2

A mudana para uma nova pgina durante o processo de impresso


ocorre automaticamente quando a quantidade de linhas impressas igual
ao valor do parmetro PS do ambiente Natural ou quando a instruo
NEWPAGE acionada. Qualquer um desses processos gera a mudana no
contador de pginas do Natural. O *PAGE-NUMBER, que pode ser utilizado
no relatrio impresso.
Sem necessidade de artifcios de programao, a gerao de
cabealho com a de rodap de um relatrio so feitas automaticamente
quando se inicia a impresso de uma nova pgina, via AT TOP OF PAGE,
ou quando a ltima linha impressa igual ao valor do parmetro PS, via AT
END OF PAGE.
>
All
0010
0020
0030
0040
0050
0060
0070
0080
0090
0100
0110
0120
0130
0140
0150
0160
0170
0180
0190

> + Program
CURSO
Lib CURSO
....+....1....+....2....+....3....+....4....+....5....+....6....+....7..
FORMAT PS=11
/* DEFININDO UMA PAGINA COM 10 LINHAS APENAS
AT TOP OF PAGE
/* QUANDO FOR INICIO DA PAGINA
WRITE NOTITLE NOHDR
01T 'TESTANDO O CABECALHO DE UM RELATORIO'
/ 01T 'INFORMANDO A DATA DE EMISSAO :' *DATX (EM=DD/MM/YYYY)
/ 01T 'INFORMANDO A HORA DE EMISSAO :' *TIMX (EM=HH/II/SS)
/ 01T 'INFORMANDO O NUMERO DA PAGINA:' *PAGE-NUMBER (EM=ZZZ.ZZ9)
END-TOPPAGE
AT END OF PAGE
/* QUANDO FOR FIM DE PAGINA
WRITE // 1T 'ESTA E" A LINHA DE RODAP'
END-ENDPAGE
WRITE / 10T 'LINHA FONTE 1'
WRITE / 10T 'LINHA FONTE 2'
WRITE / 10T 'LINHA FONTE 3'
WRITE / 10T 'LINHA FONTE 4'
WRITE / 10T 'LINHA FONTE 5'
WRITE / 10T 'LINHA FONTE 6'
WRITE / 10T 'LINHA FONTE 7'
END

TESTANDO O CABECALHO DE UM RELATORIO


INFORMANDO A DATA DE EMISSAO : 25/01/2001
INFORMANDO A HORA DE EMISSAO : 18/15/12
INFORMANDO O NUMERO DA PAGINA:
1
LINHA FONTE 1
LINHA FONTE 2
LINHA FONTE 3
LINHA FONTE 4
ESTA E' A LINHA DE RODAP
TESTANDO O CABECALHO DE UM RELATORIO
INFORMANDO A DATA DE EMISSAO : 25/01/2001
INFORMANDO A HORA DE EMISSAO : 18/24/43
INFORMANDO O NUMERO DA PAGINA:
2
LINHA FONTE 5
LINHA FONTE 6
LINHA FONTE 7
ESTA E' A LINHA DE RODAP

33

Natural 2

Na gerao de um relatrio encontramos freqentemente alguns


problemas que necessitam de um pouco mais de raciocnio para resolvlos: a impresso de parte do contedo de um campo sem utilizar a
redefinio da varivel; a impresso de contedos editados, quer
alfanumricos ou numricos; e a no apresentao de informaes
repetidas em linhas seguidas. Para resolver esses problemas devemos
utilizar os seguintes, respectivamente: o parmetro AL; o parmetro EM ; e
o parmetro IS.
>

> + Program
CURSO
Lib CURSO
All
....+....1....+....2....+....3....+....4....+....5....+....6....+....7..
0010 DEFINE DATA
0020 LOCAL
0030 1 #CAMPO1
(A70)
0040 1 #CAMPO2
(A11)
0050 1 #CAMPO3
(N08,2)
0060 END-DEFINE
0070 MOVE ALL 'X'
TO #CAMPO1
0080 MOVE '00011111111' TO #CAMPO2
0090 MOVE 3863,54
TO #CAMPO3
0100 WRITE #CAMPO1 (AL=30)
/* SOMENTE AS 30 PRIMEIRAS POSICOES
0110
#CAMPO2 (EM=XXX.XXX.XXX-XX)
0120
#CAMPO3 (EM=ZZ.ZZZ.ZZ9,99)
0130 END
0140
....+....1....+....2....+....3....+....4....+....5....+... S 13
L 1
Page

XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX 000.111.111-11

01-01-25

19:06:55

3.863,54

A ltima instruo que veremos com relao a gerao de relatrio


o EJECT. Essa instruo quando utilizada gera um avano de pgina sem a
impresso do cabealho, ou seja, desconsidera o que para ser feito
dentro da instruo AT TOP OF PAGE:
>
> + Program
CURSO
Lib CURSO
All
....+....1....+....2....+....3....+....4....+....5....+....6....+....7..
0010 AT TOP OF PAGE
0020
WRITE 'CABECALHO TO TOP-PAGE'
0030 END-TOPPAGE
0040 *
0050 EJECT
0060 WRITE //// 'IMPRESSAO GERADA PELO EJECT'
0070 NEWPAGE
0080 WRITE // 'IMPRESSAO DE UMA LINHA DETALHE'
0090 END
....+....1....+....2....+....3....+....4....+....5....+... S 9
L 1

Resultado da execuo do programa anterior:


IMPRESSAO GERADA PELO EJECT

MORE

34

Natural 2

Page

01-01-25

19:20:01

CABECALHO TO TOP-PAGE
IMPRESSAO DE UMA LINHA DETALHE

MORE

Trabalhando com Arquivo Adabas


Para se ter acesso de leitura ou gravao de um arquivo Adabas,
necessrio utilizar o objeto Natural chamado LOCAL. Na LOCAL so
definidas as variveis (com tamanho e formato) do arquivo Natural que
sero acessadas pelo programa.
Local
SAE-FISI Library SINARM
DBID
200 FNR
9
Command
> +
I T L Name
F Leng Index/Init/EM/Name/Comment
Top - -------------------------------- - ---- --------------------------------V 1 SAE-FISI
SAE-FISICA
2 COD-PROPRIETARIO
P 9,0
2 CPF-PROPRIETARIO
P 11,0
2 NOME-PES
A
50
2 NUM-IDENT
A
15
2 ORGAO-IDENT
A
10
2 UF-IDENT
A
2
2 DATA-EXP-IDENT
P 8,0
2 NOME-PAI
A
45
2 NOME-MAE
A
45
2 DATA-NASC
P 8,0
2 SEXO
A
1
2 PAIS-NASCIM
P 4,0
2 CID-NASC
P 5,0
2 UF-NASC
A
2
2 ESTADO-CIVIL
N 1,0
2 TIT-ELEITOR
P 12,0
----------------------------------------------------------------- S 40
L 1

Todo arquivo fsico criado no adabas armazenado nas vrias


estruturas do Banco de Dados :no Data Storage, onde esto os dados
propriamente ditos na ordem que foram inseridos no arquivo; no Adress
Converter do Associator, onde est o endereo de cada registro fsico no
Data Storage associado ao seu respectivo ISN; e nas Listas Invertidas, se
existir chave definida para o arquivo, para cada registro do Data Storage.
Leitura de Registros
H vrias instrues que permitem ler os registros de um arquivo
Adabas, via DDM. Algumas geram loop READ, HISTOGRAM E FIND e
outra que no gera loop, o GET.
H duas formas de sair de uma instruo que gera loop: a primeira,
quando o loop finaliza normalmente; a segunda, quando finalizada por
uma instruo que ESCAPE.
A instruo ESCAPE pode ser apresentada de duas maneiras: na
primeira, ESCAPE BOTTOM(r), indica que para finalizar o loop

35

Natural 2

relacionado a linha do editor e executar a primeira instruo aps a


sentena que finaliza o loop; a segunda, ESCAPE TOP, indica que para
voltar ao incio do loop.
possvel limitar a quantidade de registros a ser selecionados com a
incluso de parnteses com um nmero aps a instruo.
A instruo Read
H vrias extenses da instruo READ, mas veremos apenas duas,
as mais usadas: uma para leitura na ordem fsica de armazenamento
(PHYSICAL); e a outra, na ordem seqencial de um descritor ou
superdescritor ou subdescritor (LOGICAL)
READ PHYSICAL
O READ PHYSICAL recupera os registros na ordem que os mesmos
aparecem no Data Storage, a partir do primeiro registro fsico, sempre.
ideal para trabalhar com arquivos que possuem apenas uma viso lgica
para efetuar recuperao de pelo menos 20% dos registros de um arquivo
por ser muito rpida, visto que s acessa o Data Storage,
O uso desta instruo em conjunto com instrues de atualizao
requer um cuidado especial: no caso de uma alterao UPDATE pode
gerar o split de bloco e produzir alteraes em cascata para um mesmo
registro: no caso de excluso, NO UTILIZAR NUNCA, se existir mais de
uma viso lgica de um arquivo fsico.
>
All
0010
0020
0030
0040
0050
0060
0070
Page

> + Program
CURSO
Lib SINARM
....+....1....+....2....+....3....+....4....+....5....+....6....+....7..
DEFINE DATA
LOCAL USING SAE-FISI
END-DEFINE
READ SAE-FISI
write cpf-proprietario (em=999.999.999-99) nome-pes
END-READ
END
1

000.000.000-00
000.000.000-00
000.000.000-00
000.000.000-00
000.000.000-00
000.000.000-00
604.490.719-87
000.000.000-00
127.535.219-72
000.000.000-00
004.826.175-00
000.000.000-00
000.000.000-00
000.000.000-00
000.000.000-00
000.000.000-00
000.000.000-00
000.000.000-00
000.000.000-00
000.000.000-00
000.000.000-00
MORE

01-01-26

16:37:02

PAULO SERGIO DE VASCONCELO


PAULO SERGIO MARIANO CORREA
ARISTIDES CARDOSO DE OLIVEIRA
JOAO ZITO LUPIS
HELSSON DA SILVA
ANTONIO CORDEIRO DA SILVA
ERMINIO DA LUZ CARNEIRO
BELMIRO MENDES
ROBERTO NEGRAO ROBERTI
WASHINGTON AGUIAR TORRES
DAGOBERTO VILARINHO
WALTER MELHADO
VITOR JOSE SCORSIM CUNHA
TEREZINHA DE FATIMA DA SILVA
ALTAMIR FELIX
VALDIR LUIZ DA SILVA
JONLINEI VIEIRA
ADIVINO DOS SANTOS
NORBERTO VIEIRA YOGO
JOSE SOARES DE OLIVEIRA

36

Natural 2

READ LOGICAL
O Read Logical
recupera os
registros na ordem de uma
determinada chave descritor/superdescritor/ subdescritor - . permite que
os registros sejam recuperados a partir de um determinado valor e pode ser
utilizado com quaisquer outras instrues de atualizao, sem problema
nenhum.
>
> + Program
CURSO
Lib SINARM
All
....+....1....+....2....+....3....+....4....+....5....+....6....+....7..
0010 DEFINE DATA
0020 LOCAL USING SAE-FISI
0030 END-DEFINE
0040 READ SAE-FISI BY CPF-PROPRIETARIO
0050
write cpf-proprietario (em=999.999.999-99) nome-pes
0060 END-READ
0070 END
....+....1....+....2....+....3....+....4....+....5....+... S 8
L 1

Resultado da execuo do programa anterior:


Page

000.000.001-91
000.000.217-84
000.001.063-40
000.001.227-00
000.001.401-04
000.001.591-15
000.002.211-04
000.002.561-53
000.003.371-53
000.004.185-87
000.004.782-10
000.005.396-19
000.005.402-00
000.006.123-91
000.006.479-34
000.006.739-35
000.007.119-69
000.007.379-25
000.008.412-34
000.008.761-00
000.008.842-00
MORE

01-01-26

16:24:14

SERGIO MURILO SANTOS


ANDRE BARRETO DE MORAES
GALDENCIO BRAZ DE MACENA
JOSE ROBERTO DA SILVA GUIMARAES
HELIO DUTRA
GENNARO CASELLA
LOMELINO DE SOUZA SANTOS FILHO
JATIR BATISTA DA CUNHA
DALMO DE ALMEIDA
DILSON RIBEIRO SCHINDLER
RUMENOS SARKIS SIMAO
ROBERTO ACCIOLY VEIGA
PEDRO SMITH DO AMARAL
RUBENS CAVALCANTE CARVALHO
ANTENOR LEONARDO DE OLIVEIRA GODOI
ELOIR CESAR FERREIRA DE LIMA
ADRIANI AKEMI KOKUBO
ANDELEI CRUZ PEREIRA
IRIS PEDRO DE OLIVEIRA
JAYME RUBSTEM
ENEIDA DO ESPIRITO SANTO MORAES

A instruo HISTOGRAM
A instruo HISTOGRAM usada para ler os valores de um campo
do banco de dados que foi definido como descritor, superdescritor ou
subdescritor. Os valores so lidos diretamente da Lista Invertida e so
apresentados na ordem crescente.
possvel dentro do loop gerado pelo HISTOGRAM utilizar as
seguintes variveis do Natural: *NUMBER, que recupera a quantidade de
registros que possuem o valor da chave; e *COUNTER, que contm o
nmero de valores j lidos.

37

Natural 2
>
> + Program
CURSO
Lib SINARM
All
....+....1....+....2....+....3....+....4....+....5....+....6....+....7..
0010 DEFINE DATA
0020 LOCAL
0030 1 SAE-FISIX VIEW OF SAE-FISICA
0040 2 DATA-NASC
0050 END-DEFINE
0060 HISTOGRAM SAE-FISIX DATA-NASC
0070
WRITE *NUMBER *COUNTER DATA-NASC (EM=9999/99/99)
0080 END-HISTOGRAM
0090 END
....+....1....+....2....+....3....+....4....+....5....+... S 9
L 1

Resultado da execuo do programa acima:


Page

150

01-01-26
3
4
4
4
3
1
2
1
3
2
1
2
4
3
1
2
3
6
1
2
1

3130
3131
3132
3133
3134
3135
3136
3137
3138
3139
3140
3141
3142
3143
3144
3145
3146
3147
3148
3149
3150

17:01:39

1914/03/01
1914/03/02
1914/03/03
1914/03/04
1914/03/05
1914/03/06
1914/03/07
1914/03/08
1914/03/09
1914/03/10
1914/03/12
1914/03/13
1914/03/14
1914/03/15
1914/03/16
1914/03/17
1914/03/18
1914/03/19
1914/03/20
1914/03/21
1914/03/22

MORE

A instruo FIND
A instruo FIND usada para selecionar um conjunto de registros
de um arquivo de acordo com um critrio de pesquisa definido para suas
chaves.
Os critrios de pesquisa possveis entre uma chave e um valor so:
igual a (=); diferente de (NE); menor que (<); maior que (>); menor ou igual
a (LE); maior ou igual a (GE). possvel utilizar os seguintes conectivos
entre as chaves: OR e AND.
O FIND pode ser codificado de muitas formas, e vamos destacar aqui
as quatro mais utilizadas.
Como h a possibilidade de que nenhum registro satisfaa o critrio
de pesquisa estabelecido, o Natural permite que se d tratamento para
esses casos utilizando as seguintes instrues: IF NO RECORDS ou IF
*NUMBER.
A instruo IF NO RECORDS deve estar contida dentro do FIND e
deve ter obrigatoriamente a instruo ESCAPE BOTTOM para evitar que
execute os comandos dentro do FIND erradamente.
O IF *NUMBER deve ser colocado aps a instruo que finalizar o
FIND (END-FIND).
38

Natural 2

>
> + Program
CURSO
Lib SINARM
All
....+....1....+....2....+....3....+....4....+....5....+....6....+....7..
0010 DEFINE DATA
0020 LOCAL USING SAE-FISI
0030 LOCAL
0040 1 #CPF
(N11) INIT <9706623191>
0050 END-DEFINE
0060 FIND SAE-FISI WITH CPF-PROPRIETARIO = #CPF
0070
IF NO RECORDS FOUND
0080
WRITE 'NAO ACHEI CPF=' #CPF
0090
ESCAPE BOTTOM
0100
END-NOREC
0110
WRITE CPF-PROPRIETARIO (EM=999.999.999-99)
0120
DATA-NASC (EM=9999/99/99) NOME-PES
0130 END-FIND
0140 END
....+....1....+....2....+....3....+....4....+....5....+... S 14
L 1b

FIND <local> WITH <condio lgica> (gera loop)


nesta forma o FIND seleciona um conjunto de registros que atendem
a <condio lgica> e vai lendo um a um para serem processados.
>
> + Program
CURSO
Lib SINARM
All
....+....1....+....2....+....3....+....4....+....5....+....6....+....7..
0010 DEFINE DATA
0020 LOCAL USING SAE-FISI
0030 END-DEFINE
0040 FIND SAE-FISI WITH CPF-PROPRIETARIO = 9706623191
0050
WRITE CPF-PROPRIETARIO (EM=999.999.999-99)
0060
DATA-NASC (EM=9999/99/99) NOME-PES
0070 END-FIND
0080 WRITE '----------------------------------------------'
0090 FIND SAE-FISI WITH DATA-NASC = 19551109
X 0100
WRITE DATA-NASC (EM=9999/99/99) NOME-PES
Y 0110 END-FIND
0120 END
....+....1....+....2....+....3....+....4....+....5....+... S 12
L 1

Resultado da execuo do programa anterior:


Page

01-01-26

17:59:45

097.066.231-91 1955/11/09 PAULO AMORIM NOLETO


---------------------------------------------1955/11/09 APARECIDO DONIZETTE DOS SANTOS
1955/11/09 CICERO GUIMARAES VIEIRA
1955/11/09 MARCUS VENICIUS FLEMING FONSECA BARBOSA
1955/11/09 AMADO CONSTATINO DA SILVA
1955/11/09 JOSE ORESTE DA SILVA
1955/11/09 ANTONIO JURASKI
1955/11/09 LUCILO CARLOS CICERI
1955/11/09 LIBERIO BOEHM
1955/11/09 ANTONIO JOAQUIM DA SILVA
1955/11/09 ARLINDO DRZERMISKI
1955/11/09 APARECIDO DONIZETE DOS SANTOS
1955/11/09 ALONSO BRANDAO AIRES
1955/11/09 ALMIR JOSE PINTO
1955/11/09 SEBASTIAO REINALDO FERNANDES
1955/11/09 LUIZ HUMBERTO MELO DOS SANTOS
1955/11/09 CICERO MARCAL DA SILVA
1955/11/09 MOACYR BERWERTH JUNIOR
1955/11/09 REYNALDO DA SILVA AYROSA NETO
1955/11/09 JOSE LUIZ SANTOS PORTO
MORE

39

Natural 2

FIND NUMBER <local> WITH <condio lgica> (no gera loop)


nesta forma o FIND conta quantos elementos tem o conjunto de
registros que atendem a <condio lgica> e apresenta este total na
varivel de sistema *NUMBER.
>
All
0010
0020
0030
0040
0050
0060

> + Program
CURSO
Lib SINARM
....+....1....+....2....+....3....+....4....+....5....+....6....+....7..
DEFINE DATA
LOCAL USING SAE-FISI
END-DEFINE
FIND NUMBER SAE-FISI WITH DATA-NASC = 19551121
WRITE 'ENCONTRADOS=' *NUMBER
END
....+....1....+....2....+....3....+....4....+....5....+... S 6
L 1

FIND NUMBER <local> WITH <condio lgica> RETAIN AS <lista>


(no gera loop)
nesta forma o FIND conta quantos elementos tem o conjunto de
registros que atendem a <condio lgica> e apresenta este total na
varivel de sistema *NUMBER, e alm disso, gera em memria um arquivo
com o conjunto de registros, chamado <lista>. Este arquivo criado ser lido
depois pelo comando FIND <local> WITH <lista>.
>
All
0010
0020
0030
0040
0050
0060

> + Program
CURSO
Lib SINARM
....+....1....+....2....+....3....+....4....+....5....+....6....+....7..
DEFINE DATA
LOCAL USING SAE-FISI
END-DEFINE
FIND NUMBER SAE-FISI WITH DATA-NASC = 19551121 RETAIN AS 'LISTA8'
WRITE 'ENCONTRADOS=' *NUMBER
END
....+....1....+....2....+....3....+....4....+....5....+... S 6
L 1

FIND <local> WITH <lista> (gera loop)


nesta forma o FIND le uma <lista> de registros gerada pela instruo
FIND com a opo RETAIN.
As <listas> criadas podem ser excludas com o comando RELEASE
SET <lista>.
>
All
0010
0020
0030
0040
0050
0060
0070
0080
0090
0100
0110

> + Program
CURSO
Lib SINARM
....+....1....+....2....+....3....+....4....+....5....+....6....+....7..
DEFINE DATA
LOCAL USING SAE-FISI
END-DEFINE
FIND SAE-FISI WITH 'LISTA8'
IF NO RECORDS FOUND
RELEASE SET 'LISTA8'
REINPUT '*** NAO HA REGISTRO PARA ESTA PESQUISA ***' ALARM
END-NOREC
/*...
END-FIND
END
....+....1....+....2....+....3....+....4....+....5....+... S 11
L 1

40

Natural 2

A instruo GET
A instruo GET usada para ler um registro atravs do seu ISN.
Essa instruo no gera loop. O ISN de um registro pode ser obtido
atravs da varivel do sistema *ISN.
All
0010
0020
0030
0040
0050
0060
0070
0080
0090
0100
0110
0120
0130
0140
0150
0160
0170

....+....1....+....2....+....3....+....4....+....5....+....6....+....7..
DEFINE DATA
LOCAL USING SAE-FISI
LOCAL
1 #CPF
(N11) INIT <9706623191>
1 #ISN
(N08)
END-DEFINE
FIND SAE-FISI WITH CPF-PROPRIETARIO = #CPF
IF NO RECORDS FOUND
WRITE 'NAO ACHEI CPF=' #CPF
ESCAPE BOTTOM
END-NOREC
MOVE *ISN
TO #ISN
WRITE CPF-PROPRIETARIO (EM=999.999.999-99)
DATA-NASC (EM=9999/99/99) NOME-PES
END-FIND
GET SAE-FISI #ISN
END

Atualizao de Registros
As instrues que efetuam atualizao de registros UPDATE e
DELETE em um arquivo Adabas necessitam, obrigatoriamente, que os
registros tenham sido selecionados anteriormente pelo FIND ou GET ou
READ.

A instruo UPDATE
A instruo UPDATE usada para atualizar uma ou varveis de um
registro de um arquivo Adabas.
0010
0020
0030
0040
0050
0060
0070
0080
0090
0100
0110
0120
0130
0140

DEFINE DATA
LOCAL USING SAE-FISI
LOCAL
1 #CPF
(N11) INIT <9706623191>
END-DEFINE
FIND SAE-FISI WITH CPF-PROPRIETARIO = #CPF
IF NO RECORDS FOUND
WRITE 'NAO ACHEI CPF=' #CPF
ESCAPE BOTTOM
END-NOREC
MOVE 'EDSON TEIXEIRA DA SILVA' TO NOME-PES
UPADATE
END-FIND
END

41

Natural 2

A instruo DELETE
A instruo DELETE usada para excluir um ou mais registros de
um arquivo Adabas.
0010
0020
0030
0040
0050
0060
0070
0080
0090
0100
0110
0120
0130

DEFINE DATA
LOCAL USING SAE-FISI
LOCAL
1 #CPF
(N11) INIT <9706623191>
END-DEFINE
FIND SAE-FISI WITH CPF-PROPRIETARIO = #CPF
IF NO RECORDS FOUND
WRITE 'NAO ACHEI CPF=' #CPF
ESCAPE BOTTOM
END-NOREC
DELETE
END-FIND
END

A instruo STORE
A instruo STORE usada para incluir registros em um arquivo
Adabas.
>
> + Program
CURSO
Lib SINARM
All
....+....1....+....2....+....3....+....4....+....5....+....6....+....7..
0010 DEFINE DATA
0020 LOCAL USING SAE-FISI
0030 END-DEFINE
0040 MOVE 21425248691
TO CPF-PROPRIETARIO
0050 MOVE 'ERMENEGILDO COSTA'
TO NOME-PES
0060 MOVE '244364'
TO NUM-IDENT
0070 MOVE 'SSP/DF'
TO ORGAO-IDENT
0080 MOVE 'DF'
TO UF-IDENT
0090 MOVE 19900520
TO DATA-EXP-IDENT
0100 MOVE 'GILDO COSTA'
TO NOME-PAI
0110 MOVE 'GILDA COSTA'
TO NOME-MAE
0120 MOVE 19801021
TO DATA-NASC
0130 MOVE 'M'
TO SEXO
0140 STORE SAE-FISI
0150 END
....+....1....+....2....+....3....+....4....+....5....+... S 15
L 1

As instrues END TRANSACTION e BACKOUT TRANSACTION


As instrues de atualizao de um arquivo Adabas no momento que
so acionadas NO geram, imediatamente, a atualizao na base de
dados, mas sim na rea de WORK.
Apesar de estarem disponveis para todos os usurios as
atualizaes somente sero efetivadas se forem confirmadas pela instruo
END TRANSACTION, ou ento canceladas pela instruo BACKOUT
TRANSACTION.
A instruo END TRANSACTION avisa ao Natural que aquelas
atualizaes que foram efetuadas a partir do ltimo END TRANSACTION
ou BACKOUT TRANSACTION devem ser efetivadas fisicamente.
Ao contrrio do END TRANSACTION, a instruo BACKOUT
TRANSACTION avisa ao Natural para desconsiderar as atualizaes
deixando o arquivo como estava anteriormente.

42

Natural 2
>
All
0010
0020
0030
0040
0050
0060
0070
0080
0090
0100
0110
0120
0130
0140
0150
0160

>

All
0010
0020
0030
0040
0050
0060
0070
0080
0090
0100
0110
0120
0130
0140
0150
0160

> + Program
CURSO
Lib SINARM
....+....1....+....2....+....3....+....4....+....5....+....6....+....7..
DEFINE DATA
LOCAL USING SAE-FISI
LOCAL
1 #CPF
(N11)
1 #NOME
(A30) INIT <'JOAO PEDRO PEREIRA'>
END-DEFINE
FIND SAE-FISI WITH CPF-PROPRIETARIO = 21425248691
IF NO RECORDS FOUND
WRITE 'NAO ACHEI CPF=' #CPF
ESCAPE BOTTOM
END-NOREC
MOVE #NOME TO NOME-PES
UPDATE
END-FIND
END TRANSACTION
END
....+....1....+....2....+....3....+....4....+....5....+... S 16
L 1

> + Program
CURSO
Lib SINARM
....+....1....+....2....+....3....+....4....+....5....+....6....+....7..
DEFINE DATA
LOCAL USING SAE-FISI
LOCAL
1 #CPF
(N11)
1 #NOME
(A30) INIT <'JOSE CALIXTO'>
END-DEFINE
FIND SAE-FISI WITH CPF-PROPRIETARIO = 21425248691
IF NO RECORDS FOUND
WRITE 'NAO ACHEI CPF=' #CPF
ESCAPE BOTTOM
END-NOREC
MOVE #NOME TO NOME-PES
UPDATE
END-FIND
BACKOUT TRANSACTION
END
....+....1....+....2....+....3....+....4....+....5....+... S 16
L 1

A instruo RETRY
A instruo RETRY deve ser usada dentro do bloco da instruo ON
ERROR, para verificar novamente a possibilidade de atualizar um registro
que est sendo atualizado por outro usurio.
Quando se tenta atualizar um registro que j est sendo atualizado
por outro, o Adabas devolve um erro 3145, que deve ser tratada no ON
ERROR.
Trabalhando com arquivos WORK
Ha 4 instrues para gerao/leitura de arquivos work: READ WORK
FILE; READ WORK FILE ONCE; WRITE WORK FILE; CLOSE WORK FILE.
As instrues READ e WRITE possuem os complementos <n> e
<campos>: <n> o nmero do arquivo relacionado ao carto //cmwkfnn do
JCL; <campos> a relao de campos que formam o lay-out do registro do
arquivo.

43

Natural 2

Lendo arquivo work


A instruo para ler um arquivo Work possui vrios formatos, mas o
mais utilizado deles : READ WORK FILE <n> <campos>.
Esta instruo gera um loop de processamento e deve ser
encerrada com a instruo END-WORK.
>
All
0010
0020
0030
0040
0050
0060
0070
0080
0090
0100

> + Program
CURSO
Lib CURSO
....+....1....+....2....+....3....+....4....+....5....+....6....+....7..
DEFINE DATA
LOCAL
1 #REGISTRO
2 #MATRICULA
(N07)
2 #NOME
(A30)
END-DEFINE
READ WORK FILE 1 #REGISTRO
...
END-WORK
END

Gravando arquivo work


A instruo para gravar um arquivo Work : WRITE WORK FILE <n>
<campos>.
>
All
0010
0020
0030
0040
0050
0060
0070
0080
0100

> + Program
CURSO
Lib CURSO
....+....1....+....2....+....3....+....4....+....5....+....6....+....7..
DEFINE DATA
LOCAL
1 #REGISTRO
2 #MATRICULA
(N07)
2 #NOME
(A30)
END-DEFINE
WRITE WORK FILE 1 #REGISTRO
...
END
....+....1....+....2....+....3....+....4....+....5....+... S 10
L 1

Usando Subrotina Interna


Se h um conjunto de instrues dentro de um objeto que aparece
repetidamente em vrias partes do programa, podemos criar uma subrotina
com estas instrues e cham-la dos diversos pontos onde apareciam.
A subrotina pode ser interna ou externa, em ambos os casos ser
definida pela instruo DEFINE SUBROUTINE <nome-subrotina> e finalizada
por END-SUBROUTINE.
Para cham-la utilizamos a instruo PERFORM <nome-subrotina>.
0010
0020
0030
0040
0050
0060
0070
0080
0090
0100
0110
0120
0130

DEFINE DATA
LOCAL
1 #REGISTRO
2 #MATRICULA
(N07)
2 #NOME
(A30)
END-DEFINE
PERFORM ROT-MOVIMENTACAO
** ...
DEFINE SUBROUTINE ROT-MOVIMENTACAO
MOVE 'PEDRO PEREIRA' TO #NOME
MOVE 7777777
TO #MATRICULA
END-SUBROUTINE
END

44

Natural 2

Usando Subprograma
O subprograma um objeto Natural que pose ser acionado pela
instruo CALLNAT a partir de outro objeto, com passagem de parmetros
que podem ser alterados pelo subprograma e devolvidos ao objeto
chamador. A sua sintaxe CALLNAT <subprograma> <parmetros>.
Os parmetros so recebidos via rea de comunicao do
subprograma chamada de PARAMETER e nela as variveis devem ter o
mesmo formato e tamanho e estarem na mesma ordem da passada pelo
objeto chamador.
Programa Chamador:
0010
0020
0030
0040
0050
0060
0070
0080
0090

DEFINE DATA
LOCAL
1 #MATRICULA
(N07)
1 #NOME
(A30)
END-DEFINE
MOVE 'PEDRO PEREIRA' TO #NOME
MOVE 7777777
TO #MATRICULA
CALLNAT 'CURSOSUB' #MATRICULA #NOME
END

Programa chamado
0010
0020
0030
0040
0050
0060
0070
0080

DEFINE DATA
PARAMETER
1 #MATRICULA
1 #NOME
END-DEFINE
WRITE #NOME
WRITE #MATRICULA
END

(N07)
(A30)

Exemplo de Programa com Consulta Fontica


0010
0020
0030
0040
0050
0060
0070
0080
0090
0100
0110
0120
0130
0140
0150
0160
0170
0180
0190
0200
0210
0220
0230
0240
0250
0260
0270
0280

DEFINE DATA
LOCAL USING SAE-FISI
LOCAL
1 #I
(N03)
1 #QTD-PARTES
(N01)
1 #NOME-P
(A15/1:10)
1 #NOME
(A50) INIT <'PAULO AMORIM
'>
END-DEFINE
CALLNAT 'SAEN0001' #NOME #NOME-P(1:10) #QTD-PARTES
IF #QTD-PARTES = 0
REINPUT 'ARGUMENTO DE PESQUISA INSUFICIENTE' MARK *#NOME ALARM
END-IF
FIND NUMBER SAE-FISI WITH NOME-PHON EQ #NOME-P(1) RETAIN AS 'LISTA'
FOR #I EQ 2 TO #QTD-PARTES
FIND NUMBER SAE-FISI WITH NOME-PHON EQ #NOME-P(#I)
AND 'LISTA' RETAIN AS 'LISTA'
END-FOR
**-----------------------------------------------------------------FIND SAE-FISI WITH 'LISTA'
IF NO RECORDS FOUND
WRITE 'NAO CONSTA NO BANCO DE DADOS'
ESCAPE BOTTOM
END-NOREC
WRITE CPF-PROPRIETARIO (EM=999.999.999-99)
DATA-NASC (EM=9999/99/99) NOME-PES
END-FIND
RELEASE SET 'LISTA'
END

45