You are on page 1of 23

EasyTrieve Manual rápido de referência

EASYTRIEVE é uma linguagem de programação, com recursos para acesso a arquivos e bases de dados, com comandos que trazem bastante facilidade principalmente para a geração de relatórios. Estrutura de um programa em EASYTRIEVE A estrutura básica de um programa em EASYTRIEVE é composta de statements para : • PARM para indicar condições de processamento ao EASYTRIEVE (opcional) • declaração de arquivos (opcional) • declaração de variáveis (opcional) • declaração dos procedimentos (obrigatório); os blocos de procedimentos (ATIVIDADES) são delimitados a cada JOB ou SORT Um programa com n atividades :
PARM declaração arquivos declaração variáveis atividade 1 [atividade 2] . . . . . [atividade n]

Um programa com uma atividade (JOB) :
PARM declaração arquivos declaração variáveis

EASYTRIEVE 1 – Conceitos Básicos c – Estrutura de um programa Easytrieve JOB ..... . . . . .

Um programa com uma atividade e todas as declarações possíveis para um REPORT :
PARM declaração arquivos declaração variáveis JOB..... ... . *---------------------REPORT SEQUENCE CONTROL SUM TITLE HEADING LINE *-----------------REPORT-INPUT. PROC ... END-PROC *-----------------BEFORE-LINE. PROC ... END-PROC *-----------------... ... ... AFTER-LINE. PROC ... END-PROC *---------------------BEFORE-BREAK. PROC ... END-PROC *-----------------AFTER-BREAK. PROC ... END-PROC *-----------------ENDPAGE. PROC ... END-PROC *-----------------TERMINATION. PROC ... END-PROC *------------------

Regras gerais para os statements • • • • o padrão é o statement estar desde a posição 1 até a 80 (pode ser mudado via parâmetro SCANCOL de instalação) o padrão para comentários é o primeiro caráter não-branco do statement ser um asterisco (*) pode haver mais de um statement por linha; para isso, encerrar cada statement com um ponto para continuar um statement na próxima linha, uma linha deve ter um “+” ou um “-“ como último caráter não-branco; • o “+” indica que a continuação na linha seguinte começa a partir do primeiro caráter não-branco; • o “-” indica que a continuação na linha seguinte começa a partir da primeira posição; literais devem ser colocadas entre apóstrofes o uso da vírgula fora de literais é opcional, usado somente para efeito de melhor visibilidade do texto para qualificação de arquivos, registros e campos, se necessário, usar dois pontos “:”

• • •

EASYTRIEVE 1 – Conceitos Básicos c – Estrutura de um programa Easytrieve

• • • •

nomes de campos podem ter no máximo 40 caracteres, e podem ter caracteres alfabéticos (A a Z), dígitos (0 a 9), e qualquer caráter especial exceto os delimitadores (espaço, apóstrofe, ponto, vírgula, abre parênteses, fecha parênteses e dois pontos nomes de procedimentos e REPORTS não podem ter somente dígitos para fazer referência a dados em hexadecimal, usar X’nn....’, sendo nn... dígitos hexadecimais (0 a 9, e A a F) operadores aritméticos ( “+” , “-“, “*” e “/” ) devem ter pelo menos um espaço antes e um depois)

Expressão Uma expressão é indica a posição inicial (relativa a 1) do campo dentro da área que o contém. utilizada para indicar um conjunto de operações entre literais e variáveis. As operações são : + (soma) – (subtração) * (multiplicação) e / (divisão) A ordem de resolução segue os padrões matemáticos. Podem ser utilizados parênteses para priorizar as operações. Exemplos :
SALARIO * 0.5 + 10.00 AL-QTDD / 100 DESPREZADOS + 1

Em geral, as expressões são utilizadas para que o resultado do cálculo seja colocado (atribuido) numa variável receptora. Declaração De Dados – Áreas De I/O A declaração de variáveis é feita através do DEFINE. Observar que a própria keyword DEFINE é opcional, caso a declaração seja feita após a declaração de arquivos. Sintaxe :
[DEFINE] [nomearquivo:]nome-campo posição-inicial tamanho formato [decimais]

EASYTRIEVE 1 – Conceitos Básicos e – Regras gerais para os statements
outros-atributos

Posição inicial = pode ser especificada de uma das seguintes maneiras : inteiro1 * * +inteiro2 indica que a posição inicial é a próxima disponível após a última declaração indica que a posição inicial é n bytes após a próxima disponível após a última declaração, sendo n indicado através de inteiro2 nome-campo +inteiro3 indica que a posição inicial é n bytes após a o campo referenciado através do nome, sendo n indicado através de inteiro2 Tamanho Formato A N P U B = indica o tamanho, EM BYTES, do campo sendo definido = indica o formato dos dados no campo : alfanumérico. numérico decimal zonado. Máximo 16 bytes numérico decimal compactado (com sinal). Máximo 16 bytes numérico decimal compactado (sem sinal). numérico binário. Máximo 4 bytes. Se especificado decimais, tem bit de sinal Se não especificado decimais, não tem bit de sinal = indica a quantidade de casas decimais a considerar para o número contido

Decimais

Outros atributos : HEADING = indica a(s) literal(is) a ser(em) utilizada(s) nas linhas de cabeçalho que identificam os campos listados. Sintaxe : HEADING (literal1 [literal2] ... [literaln]) Cada literal será colocada numa linha de cabeçalho. MASK = indica a máscara de edição para campos numéricos a listar. Sintaxe : MASK BWZ (blank when zero) ou MASK HEX (para exibir em formato hexadecimal) ou MASK (máscara) A máscara pode ter Z’s e 9’s, ponto(s) (separador de visualização) e vírgula (separador decimal), além dos caracteres especiais desejados. Outra forma de declaração é :
[DEFINE] [nome-arquivo:] [nome-campo] posição-inicial [nome-arquivo2:]nome-campo2

Neste caso, o tamnho, o formato e as decimais de nome-campo serão as mesmas de [nome-arquivo2:]nome-campo2 Declaração De Dados – Áreas De Work

EASYTRIEVE 1 – Conceitos Básicos e – Regras gerais para os statements

Declaração de área que NÃO é sub-divisão de outra área.
[DEFINE] nome-campo W tamanho formato [decimais] outros-atributos

W = indica área de work (trabalho), não vinculada a área de I/O. Tamanho = indica o tamanho, EM BYTES, do campo sendo definido Formato = idem áreas de I/O Decimais = indica a quantidade de casas decimais a considerar para o número contido Outros atributos : HEADING , MASK (idem áreas de I/O) Declaração de área que é sub-divisão de outra área.
[DEFINE] [nome-arquivo:]nome-campo posição-inicial tamanho formato [decimais] outros-atributos

Posição inicial = pode ser especificada de uma das seguintes maneiras : idem áreas de I/O Tamanho = indica o tamanho, EM BYTES, do campo sendo definido Formato = idem áreas de I/O Decimais = indica a quantidade de casas decimais a considerar para o número contido Outros atributos : HEADING , MASK (idem áreas de I/O) VALUE = indica o conteúdo inicial do campo. Assume zero para campos numéricos e brancos para alfanuméricos RESET = indica que o conteúdo inicial deve ser restaurado a cada execução de um comando JOB ou SORT

EASYTRIEVE 1 – Conceitos Básicos e – Regras gerais para os statements

Variáveis Easytrieve; Pegar Parm Do Exec SYSDATE = campo alfanumérico de 8 bytes com a data do dia (AA/MM/DD) SYSTIME = campo alfanumérico de 8 bytes (HH.MM.SS – ver Características de instalação) PARM-REGISTER = campo numérico binário de 4 bytes que contém o conteúdo do registrador 1 quando da entrada da execução do Easytrieve. O registrador 1 contém o endereço de uma lista de parâmetros fornecida através do PARM do EXEC. Deve ser usado através da chamada da subrotina EZTPX01 (ver Uso de PARM no cartão EXEC). RETURN-CODE = campo numérico binário de 4 bytes cujo conteúdo é retornado ao sistema operacional ao término da execução do Easytrieve, para poder ser testado via COND. RECORD-LENGTH = campo numérico binário de 2 bytes cujo conteúdo é colocado pelo Easy, e é o tamanho do registro lógico processado. RECORD-COUNT = campo numérico binário de 4 bytes cujo conteúdo é colocado pelo Easy, e é o número sequencial do registro dentro do arquivo. FILE-STATUS = campo com o file-status de um arquivo VSAM, cujo conteúdo é colocado pelo Easy e indica o resultado da última operação de I/O efetuada para o arquivo. Os file-status retornados são : 00 04 08 12 16 128 = = = = = = OK EOF no GET DUP KEY no PUT ou WRITE KEY fora de sequência no PUT RECORD NOT FOUND no READ falta DD no JCL para o arquivo

LEVEL = campo numérico que indica qual quebra está sendo processada (detalhes e exemplos adiante, no capítulo referente a relatórios). TALLY = campo numérico cujo conteúdo é a quantidade de registros utilizados para a obtenção de um total. Exemplo - Utilização de variáveis Easytrieve; pegar PARM do EXEC
*-------------------------------------------------* DECLARACAO DE ARQUIVOS E RESPECTIVAS AREAS DE I/O *-------------------------------------------------FILE RELAT PRINTER FILE ENTRA VS AL 1 80 A AL-NOME 1 15 A AL-DATA 16 08 N AL-SALDO 24 10 N 2

EASYTRIEVE 1 – Conceitos Básicos e – Regras gerais para os statements *-------------------------------------------------* DECLARACAO DE VARIAVEIS DE TRABALHO *-------------------------------------------------WLL W 7 N PARMVEIO W 32 A PARMLEN PARMVEIO 2 B PARMTXT PARMVEIO +2 30 A *-------------------------------------------------* DECLARACAO DE PROCEDIMENTOS *-------------------------------------------------*------------* ROTINA PRINCIPAL *------------JOB INPUT ENTRA START ANTESDETUDO FINISH DEPOISDETUDO WLL = WLL + 1 DISPLAY '* DISPLAY DO REGISTRO - INICIO *****' DISPLAY 'FILE-STATUS = ' ENTRA:FILE-STATUS DISPLAY 'RECORD-LENGTH = ' ENTRA:RECORD-LENGTH DISPLAY 'RECORD-COUNT = ' ENTRA:RECORD-COUNT DISPLAY '* DISPLAY DO REGISTRO - FIM ********' PRINT SYSREL GO TO JOB *------------* ROTINA DE INICIALIZACAO *------------ANTESDETUDO. PROC CALL EZTPX01 USING (PARM-REGISTER, PARMVEIO) DISPLAY '************************************' DISPLAY 'PARMLEN= ' PARMLEN DISPLAY 'PARMTXT=/' PARMTXT '/' DISPLAY 'SYSDATE= ' SYSDATE DISPLAY HEX SYSDATE DISPLAY 'SYSTIME= ' SYSTIME DISPLAY HEX SYSTIME DISPLAY '************************************' END-PROC *------------* ROTINA DE FINALIZACAO *------------DEPOISDETUDO. PROC DISPLAY '************************************' DISPLAY '* FINAL ****************************' DISPLAY '************************************' IF WLL EQ 0 RETURN-CODE = 0 ELSE RETURN-CODE = 4 END-IF END-PROC *------------* DECLARACAO DO RELATORIO *------------REPORT SYSREL PRINTER RELAT NOADJUST CONTROL FINAL TITLE 1 ' PROGRAMA EXEMPLO 016' LINE 1 TALLY AL-NOME AL-DATA AL-SALDO * FIM **************************************************

EASYTRIEVE 1 – Conceitos Básicos e – Regras gerais para os statements

Componentes de um relatório Os componentes de um relatório podem ser exemplificados da seguinte forma : régua para simples referência data controlada por NODATE literal controlada pelo PARM PAGEWRD

.... 1 1 1 2 3 4 5 .... 2 3 123456789012345678901234567890123456789012345678901....90123456789012

18/05/01 AL-NOME ALBERTO ZIGOMAR MAFALDA VALDICE

PROGRAMA EXEMPLO 001 AL-DATA 19880229 20010530 20001015 19991223 AL-SALDO ,01 ,10 1,00 10,00 11,11

.... PAGINA

1

linha de total (controlada pelo CONTROL) linhas de detalhe (controlada pelo(s) LINE(s) linha (de cabeçalho) identificadora dos campos (controlada pelos HEADING’s) linha de cabeçalho (controlada pelo(s) TITLE(s))

EASYTRIEVE Quick Reference

Comandos
Atribuição variavelreceptora [INTEGER] [ | ROUNDED | TRUNCATED | ] = | variavel | literal | expressao | (cópia / movimento) ou variavelreceptora [INTEGER] [ | ROUNDED | TRUNCATED | ] EQ | variavel | literal | expressao | ou variavelreceptora = variavel | AND | OR | XOR | sendo INTEGER = despreza a parte decimal do campo emissor ROUNDED = soma 5 ao último algarismo decimal significativo (ex. 10.75 é movido como 10.8) TRUNCATED = trunca os algarismos à direita da parte decimal e/ou os algarismos à esquerda da parte inteira. Exemplos : ADICIONAL = SALARIO * 0.5 + 10.00 UMPORCENTO = AL-QTDD / 100 DESPREZADOS = DESPREZADOS + 1 SUBTOTAL = 0 Uma outra forma de atribuição é através dos comandos MOVE e MOVE LIKE. MOVE | arquivo1 | registro1 | campo1 | literal1 | [ | campo3 | literal3 | ] TO | arquivo2 | registro2 | campo2 | [ campo4 | literal4 ] [FILL literal5] ou MOVE | SPACE | SPACES | ZERO | ZEROS | ZEROES | TO nome-campo sendo : nome-arquivo1 = nome do arquivo cuja area de I/O será a emissora do movimento nome-registro1 = nome da area de I/O que será a emissora no movimento nome-campo1 = campo emissor literal1 = campo emissor nome-arquivo2 = nome do arquivo cuja area de I/O será a receptora do movimento nome-registro2 = nome da area de I/O que será a receptora no movimento nome-campo2 = campo receptor nome-campo3 = variável com um número que indica a quantidade de bytes no campo emissor literal3 = literal numérica que indica a quantidade de bytes no campo emissor nome-campo4 = variável com um número que indica a quantidade de bytes no campo receptor literal4 = literal numérica que indica a quantidade de bytes no campo receptor literal5 = literal que indica o preenchimento a ser efetuado caso o tamanho do campo receptor seja maior que o tamanho do campo emissor. | variavel | literal |

EASYTRIEVE 1 – Conceitos Básicos e – Regras gerais para os statements MOVE LIKE | nome-arq1 | nome-reg1 | TO | nome-arq2 | nome-reg2 | Os campos cujos nomes forem iguais tanto nos campos emissores quanto nos receptores serão movidos. Na sintaxe, temos : nome-arq1 = nome do arquivo cuja area de I/O será a emissora do movimento nome-reg1 = nome do campo (área de I/O de arquivo) cujas areas serão as emissoras do movimento nome-arq2 = nome do arquivo cuja area de I/O será a receptora do movimento nome-reg2 = nome do campo (área de I/O de arquivo) cujas áreas serão as receptoras do movimento Exemplo : FILE ENTRA REG-ENTRA 1 80 A COD-CLI 1 5 N COD-AREA 6 3 A NOME-CLI 9 30 A SALDO 39 9 N 2 FILE SAI REG-SAI 1 80 A COD-CLI 1 5 N COD-AREA 6 3 A NOME-CLI 9 30 A VALOR 39 9 N 2 . . MOVE LIKE ENTRA TO SAI MOVE LIKE REG-ENTRA TO REG-SAI

ou

Os campos COD-CLI, COD-AREA e NOME-CLI do arquivo ENTRA serão movidos para os campos COD-CLI, COD-AREA e NOME-CLI do arquivo SAI. CALL Através do comando CALL pode-se chamar para execução uma sub-rotina, mesmo desenvolvida em outra linguagem, desde que siga as linkage conventions. Sintaxe : CALL nomerotina [ USING |campo1|literal| [|campo2|literal|] ... ] + [ RETURNS nome-campo ] Os nomes de campo e/ou literais indicam os parâmetros que são passados PARA a sub-rotina. O nome do campo em RETURNS indica um campo numérico que deve receber um return-code DA sub-rotina. CASE CASE nome-campo WHEN literal [THRU] literal . . . [ WHEN literal [THRU] literal . . .] [ OTHERWISE . .]

EASYTRIEVE 1 – Conceitos Básicos e – Regras gerais para os statements DISPLAY END-CASE DISPLAY | lit1 | var1 | [ | lit2 | var2 | ] ... [ | litn | varn | ] Exibe o conteúdo da(s) variável(eis) e/ou literal(is) especificada(s). DISPLAY [HEX] nome-relatorio | lit1 | var1 | [ ... | litn | varn | ] Para exibir constantes e/ou variáveis na SYSPRINT ou outro DD. Sintaxe : Se nome do relatório for omitido, será assumida impressão no DD SYSPRINT. Se for especificado, colocar o nome declarado na cláusula FILE. Exemplos : DISPLAY DISPLAY DISPLAY DISPLAY DISPLAY DO END-DO ‘REG DELETADOS = ‘ CONT-DEL ‘ERRO ! PGM CANCELADO.’ HEX REG-CTL RELVEND ‘******* FIM *********’ CADCLI:FILE-STATUS

DO WHILE condição (primeiro testa a condição depois, se verdadeira, executa) ... END-DO Ou DO UNTIL condição (primeiro executa e depois testa a condição) ... END-DO A condição pode ser especificada da mesma forma como no comando IF. Os blocos de DO / END-DO podem ser aninhados (nested); a indentação não é obrigatória, apesar de facilitar a visualização : DO WHILE condição . . DO UNTIL condição . . DO WHILE . . END-DO . END-DO . . DO WHILE condição . END-DO . . END-DO

FILE

FILE nome-arquivo [ | PRINTER | VS | ] Declara um arquivo. Se for para relatorio, declarar FILE nome-arquivo PRINTER Se for arquivo em disco sequencial, declarar FILE nome-arquivo. Se for arquivo em disco VSAM, declarar FILE nome-arquivo VS

EASYTRIEVE 1 – Conceitos Básicos e – Regras gerais para os statements GET GET nome-arquivo [STATUS] Para efetuar a leitura sequencial de um registro lógico, em arquivos SAM ou VSAM. STATUS aplica-se somente para arquivos VSAM. Status 4 = EOF; Status 8 = existem registros com mesma chave em índice alternado GO TO nome-instrução Os pontos de uma atividade, onde há comandos a executar, podem ser identificados através de um nome. Para IDENTIFICAR uma instrução, basta atribuir um nome no local onde ela se encontra. Se a referência é para executar um desvio, via GO TO, a identificação é somente o nome da instrução. Se a referência é para a execução de uma sub-rotina (chamada ou referenciada através de PERFORM, DO, START, FINISH, a identificação deve ser acrescida de PROC. O comando GO TO desvia para a instrução identificada através do nome indicado. IF, ELSE, ELSE-IF, END-IF IF condição comandos se condição satisfeita END-IF ou IF condição comandos se condição satisfeita ELSE comandos se condição não satisfeita END-IF ou IF condição comandos se condição satisfeita ELSE-IF condição comandos se condição satisfeita [ELSE-IF condição comandos se condição satisfeita ELSE-IF condição comandos se condição satisfeita] ELSE comandos se nenhuma condição satisfeita END-IF

GO TO

Os IF’s podem ser aninhados (nested), devendo haver pares correspondentes de IF’s e respectivos END-IF’s; a indentação não é obrigatória, apesar de facilitar a visualização :
IF condição (satisfeita) IF condição comandos se condição satisfeita END-IF ELSE (não satisfeita) IF condição comandos se condição satisfeita

EASYTRIEVE 1 – Conceitos Básicos e – Regras gerais para os statements ELSE comandos se condição não satisfeita END-IF END-IF A condição pode ser especificada da seguinte forma : • • • • • • • Relacionamento de campos Classes de campos Série de campos Bits de campos Presença de arquivos Presença de série de arquivos Relacionamento de registros

RELACIONAMENTO DE CAMPOS Testa como o conteúdo de um campo é em relação ao conteúdo de outro campo. Sintaxe : IF campo |EQ|=|NE|NQ|¬=|LT|LS|<|LE|LQ|<=|GT|GR|>|GE|GQ|>=| |campo|literal|expressão| Sendo : EQ NE LT LE GT GE ou ou ou ou ou ou = NQ LS LQ GR GQ equal (igual) not equal (não igual / diferente) less than (menor que) less or equal (menor ou igual que) greater than (maior que) greater or equal (maior ou igual)

ou ou ou ou ou

¬= < <= > >=

CLASSES DE CAMPOS Testa se um campo tem determinada característica ou não. Sintaxe : IF campo |NOT| classe classe podendo ser : ALPHABETIC NUMERIC SPACE SPACES ZERO ZEROS ZEROES Exemplos : IF DATA-NASC NOT NUMERIC ... IF NOME-CLI NOT ALPHABETIC ... IF SALDO ZERO ... SÉRIE DE CAMPOS Testa se campo1 está ou não dentro dos limites de uma série delimitada por desde e até, cada qual podendo ser especificado através de uma literal numérica ou alfanumérica, ou outra variável. Sintaxe: IF campo1 |EQ|=|NE|NQ|¬=| desde THRU até

EASYTRIEVE 1 – Conceitos Básicos e – Regras gerais para os statements Exemplos : IF ANO-NASC EQ 1890 THRU 1990 ... IF COD-PROD NE 001 thru 870 ... BITS DE CAMPOS Testa se bit(s) de um campo está(ão) ou não ligado(s). Sintaxe : IF campo [NOT] |ON|OFF| |campo|literalhexa| Exemplos : IF ULTDIGANO ON X‘01’ ... IF BIT4567DOBYTE ON X‘0F’ ... IF ULTDIGNRO OFF X’01’ ... PRESENÇA DE ARQUIVOS Testa se um registro do arquivo em referência está ou não disponível para processamento. Sintaxe : IF [NOT] [EOF] |nome-arquivo|PRIMARY|SECONDARY|

PRESENÇA DE SÉRIE DE ARQUIVOS Testa se registro(s) do arquivo tem correspondente em outro ou não. Sintaxe : IF [NOT] MATCHED |nome-arquivo|PRIMARY|SECONDARY|

RELACIONAMENTO DE ARQUIVOS Testa se registro(s) do arquivo tem duplicidade (ou qual duplicidade) em outro ou não. Sintaxe : IF [NOT] |DUPLICATE|FIRST-DUP|LAST-DUP| |nome-arq|PRIMARY|SECONDARY| JOB Na estrutura de um programa em Easytrieve, o que caracteriza a parte de procedimentos é um conjunto de ATIVIDADES (muitas vezes é uma única atividade). Cada atividade é declarada através de um statement JOB ou um statement SORT. JOB [START nome-proc1] [FINISH nome-proc2] [NAME nome-job] O statement JOB sem a especificação de INPUT faz o Easy assumir como INPUT o primeiro FILE que não seja PRINTER definido. JOB INPUT NULL [START nome-proc1] [FINISH nome-proc2] [NAME nomejob] O statement JOB com a especificação de INPUT NULL indica ao Easy que não há arquivo de entrada a ser lido automaticamente por ele. JOB INPUT nome-arquivo [START nome-proc1] [FINISH nome-proc2] + [NAME nome-job] O statement JOB com a especificação de INPUT com nome-de-arquivo indica ao Easy que o arquivo de entrada a ser lido automaticamente por ele é aquele cujo nome está especificado. A cláusula START indica o nome de uma procedure (PROC) que deve ser executada ANTES do início da leitura do arquivo. A cláusula FINISH indica o nome de uma procedure (PROC) que deve ser executada APÓS a leitura automática de todo o arquivo, antes de encerrar a atividade.

EASYTRIEVE 1 – Conceitos Básicos e – Regras gerais para os statements A cláusula NAME dá nome à atividade JOB (somente para documentação). PERFORM O comando PERFORM executa uma procedure (ou rotina) : desvia para seu início (instrução identificada por uma nome, seguido de PROC), executa as instruções até o final da rotina (identificado com END-PROC) e volta para a instrução subsequente ao PERFORM. Sintaxe : PERFORM nome-rotina Os nomes referenciados no START e/ou no FINISH devem ser de rotinas delimitadas por PROC e END-PROC. POINT Para efetuar o posicionamento de um arquivo VSAM num determinado ponto de seus registros. IMPORTANTE : o registro somente fica disponível após o GET subsequente feito com sucesso (ou uma leitura automática via JOB INPUT). POINT nome-arquivo |=|EQ|GE|GQ|>=| PRINT |campo|literal| [STATUS]

Imprime linha(s) de detalhe, conforme especificado na(s) declaração(ões) LINE do REPORT. PRINT nome-relatorio

PUT

Para efetuar a gravação sequencial de um registro lógico em arquivos SAM ou VSAM. FROM indica de qual arquivo ou área de I/O o registro a ser gravado deve ser copiado. STATUS aplica-se somente para arquivos VSAM. Status 8 = chave duplicada; Status 12 = chave fora de sequência PUT nome-arquivo [ FROM | nome-arquivo | nome-reg | ] [STATUS]

READ

Para efetuar a leitura aleatória (“randômica”) de um registro lógico em um arquivo VSAM. Status 16 = registro não localizado READ nome-arquivo KEY |campo|literal-alfa| [STATUS]

REPORT

Faz a declaração das características de um relatório, como por exemplo : linha(s) de cabeçalho, linha(s) de detalhe, linha(s) de total, sequencia, etc... REPORT nome-relatório [cláusulas do REPORT] [statements complementares] simplificadamente : REPORT nome-relatorio PRINTER nome-arquivo Cláusulas do REPORT nome para referência no PRINT ou DISPLAY. Pode haver n relatórios para cada FILE (DD) DTLCTL |EVERY|FIRST|NONE| indica características das linhas de detalhe. EVERY indica que o conteúdo dos campos de controle deve ser impresso em todas as linhas de detalhe FIRST indica que o conteúdo dos campos de contrile deve ser impresso sempre na primeira linha de detalhe de cada págian , e na primeira linha após cada quebra de controle. NONE indica que os campos de controle não devem ser impressos nas linhas de detalhe. nome-relatorio EVERY literal FILE nome-arquivo LIMIT literal indica que deve ser impressa somente 1 linha a cada n PRINTs. Se especificar EVERY 10 e forem dados 1000 PRINTs para 1000 registros de um arquivo, somente os registros 10, 20, 30 ... serão impressos Indica nome do arq p/ relatórios mto grandes (o VFM é insuficiente) indica o número máximo de registros a processar no relatório

EASYTRIEVE 1 – Conceitos Básicos e – Regras gerais para os statements LINESIZE literal Modifica o tamanho máximo, em bytes, das linhas. NOADJUST Vai colocando os dados nas linhas de detalhe da esquerda para a direita. Se omitido, centraliza na linha. NODATE Faz com que NÃO seja impressa a data do dia na primeira linha de cabeçalho NOHEADING Faz com que NÃO seja(m) impressa(s) a(s) linha(s) de cabeçalho identificadora(s) d(s) campo(s) NOPAGE Faz com que NÃO sejam impressas a constante identificadora de página, e o número da página, nas linhas de cabeçalho NOSPREAD Indica para não espalhar os dados por toda a linha (junta-los pela esquerda) PAGESIZE literal1 literal2 Modifica o tamanho máximo, em linhas, da página. literal1 aplica-se às linhas de LINE literal2 aplica-se aos DISPLAYS PRINTER nome-arquivo Indica o nome do FILE a ser utilizado por este REPORT SKIP literal Indica o número de linhas em branco entre um PRINT e outro (entre um LINE nn e o próximo LINE 01 SPACE literal Coloca tantos espaços em branco entre um campo e outro, quanto especificado na literal. Assume 3. SPREAD Indica para espalhar os dados por toda a linha de detalhe SUMCTL ([x] [y]) Indica características das linhas de total. x pode ser : ALL = campos de controle devem ser impressos em todas as linhas de total HIAR = imprimir somente os campos de controle de mesmo nível, ou de nível mais alto NONE = não imprimir campos de controle nas linhas de total TAG = deve ser impresso o nome do campo de total à esquerda da linha de total (deve haver espaço suficiente) y pode ser : DTLCOPY = imprimir variáveis de detalhe nas linhas de total, se LEVEL=1 DTLCOPYALL = idem, para todos os LEVEL SUMMARY devem ser impressos somente os totais especificados na cláusula CONTROL SUMSPACE literal indica o tamanho para impressão dos campos de total. O nro especificado através da literal é somado ao tamanho (em dígitos) do campo para determinar o tamanho do campo de total (máximo possível resultante = 18) TALLYSIZE Indica tamanho do TALLY do relatório (existe um TALLY para cada REPORT) TITLESKIP literal Indica o número de linhas em branco entre a última linha de cabeçalho Geral e a primeira de cabeçalho identificador dos campos Statements complementares ao REPORT SEQUENCE para indicar a sequência de impressão das linhas de detalhe. Sintaxe: SEQUENCE campo1 [D] campo2 [D] ... Indica a ordem (campo ou campos chave) com que as linhas devem ser impressas. Especificar D se a sequência for decrescente (o default é crescente). CONTROL para indicar os campos de controle de quebra. Sintaxe: CONTROL | campo1 [D] campo2 [D] ... | FINAL | | NEWPAGE | RENUM | NOPRINT Indica em qual(is) quebra(s) deve(m) ser impressa(s) a(s) linha(s) de total. Se algum campo for especificado, a linha de total final também será impressa. FINAL indica para imprimir só a linha de total final. SUM para indicar os campos a totalizar. Sintaxe: SUM campo1 [campo2 ... campon] Indica quais os campos numéricos que devem ser totalizados. Devem ter especificação da Quantidade de decimais na sua declaração (se necessário, colocar zero; caso contrário, ocorrerá erro de compilação).

EASYTRIEVE 1 – Conceitos Básicos e – Regras gerais para os statements TITLE para declarar as linhas de cabeçalho. Sintaxe: TITLE nrolin |campo|literal |+nro|-nro| COL nro Nrolin = número da linha de cabeçalho |campo|literal| = conteúdo a ser impresso +nro -nro = o nro especificado é somado ou subtraido do valor de SPACE para indicar quantos espaços em branco são desejados entre o campo anterior e o atual COL nro = indica o número da coluna em que se deseja colocar o próximo campo HEADING para declarar as constantes identificadoras dos campos listados. Sintaxe: HEADING campo (‘xxx’ [‘yyy’ ...]) Indica a constante que deve identificar um campo nas linhas de cabeçalho que os identificam. Cada literal é colocada numa linha. Pode-se especificar colocando em sequência, ou separadamente, indicando o número da linha. LINE para declarar as linhas de detalhe. Sintaxe: LINE nrolin |campo|literal |+nro|-nro| |COL|POS| nro nrolin = número da linha de cabeçalho |campo|literal| = conteúdo a ser impresso +nro -nro = o nro especificado é somado ou subtraido do valor de SPACE para indicar quantos espaços em branco são desejados entre o campo anterior e o atual COL nro = indica o número da coluna em que se deseja colocar o próximo campo POS nro = indica o número do ítem da LINE 01 na direção do qual o campo sendo especificado deve ser colocado procedures para declarar procedimentos que são invocados pelo Easy automaticamente em eventos relacionados à impressão do relatório. As procedures podem ser : REPORT-INPUT para selecionar e/ou modificar dados do relatório BEFORE-LINE para algum procedimento após a linha de detalhe ser montada, antes de ser impressa AFTER-LINE para algum procedimento após a linha de detalhe impressa BEFORE-BREAK para algum procedimento após a linha de total ser montada, antes de ser impressa AFTER-BREAK para algum procedimento após a linha de total ser impressa ENDPAGE para imprimir linhas de rodapé TERMINATION para algum procedimento após o término da impressão do relatório STOP WRITE WRITE nome-arquivo [|UPDATE|ADD|] [FROM |nome-arq|campo| ] [STATUS] Para efetuar a gravação de novos registros, update de registros já existentes, ou delete de um registro lógico num arquivo VSAM ou WRITE nome-arquivo DELETE [STATUS] Para efetuar o delete (lógico) de um registro num arquivo VSAM. Status 8 = chave duplicada STOP Termina a execução da atividade (JOB ou SORT).

EASYTRIEVE 1 – Conceitos Básicos e – Regras gerais para os statements

Tabelas : declaração e referência no processamento
A utilização de tabelas internas de memória é indicada na declaração das variáveis através da indicação da quantidade de ocorrências do campo, e, na parte de procedimentos, da indicação de um índice que indica qual das ocorrências deseja-se referenciar. A quantidade de ocorrências é indicada através da cláusula OCCURS. A referência ao indexador é feita colocando-se o nome do campo ou literal numérica que tenham o número a ser usado para indexar, entre parênteses, após o nome da variável que tenha OCCURS (ou que seja subordinada a um campo com OCCURS). Exemplo :
TB-MESES W 132 TB-1MES TB-MESES 11 TB-CODM TB-1MES 2 TB-EXTM TB-1MES +002 9 TB-MES01 TB-MESES 11 TB-MES02 TB-MESES +011 11 TB-MES03 TB-MESES +022 11 TB-MES04 TB-MESES +033 11 TB-MES05 TB-MESES +044 11 TB-MES06 TB-MESES +055 11 TB-MES07 TB-MESES +066 11 TB-MES08 TB-MESES +077 11 TB-MES09 TB-MESES +088 11 TB-MES10 TB-MESES +099 11 TB-MES11 TB-MESES +110 11 TB-MES12 TB-MESES +121 11 ... WIX = 1 PROXCODMES IF WIX GT 12 GO TO MESEXTOK END-IF IF W-MON NE TB-CODM (WIX) WIX = WIX + 1 GO TO PROXCODMES ELSE WEXTMES = TB-EXTM (WIX) END-IF MESEXTOK A A N A A A A A A A A A A A A A OCCURS 12 VALUE VALUE VALUE VALUE VALUE VALUE VALUE VALUE VALUE VALUE VALUE VALUE ‘01JANEIRO ’ ‘02FEVEREIRO’ ‘03MARCO ’ ‘04ABRIL ’ ‘05MAIO ’ ‘06JUNHO ’ ‘07JULHO ’ ‘08AGOSTO ’ ‘09SETEMBRO ’ ‘10OUTUBRO ’ ‘11NOVEMBRO ’ ‘12DEZEMBRO ’

Outro exemplo :
TB-MESES W 132 A TB-1MES TB-MESES 11 A OCCURS 12 TB-CODM TB-1MES 2 N TB-EXTM TB-1MES +002 9 A TB-MES01 TB-MESES 11 A VALUE + ‘01JANEIRO 02FEVEREIRO03MARCO 04ABRIL 07JULHO 08AGOSTO 09SETEMBRO 10OUTUBRO ... WIX = 1 PROXCODMES IF WIX GT 12 GO TO MESEXTOK END-IF IF W-MON NE TB-CODM (WIX) WIX = WIX + 1 GO TO PROXCODMES ELSE WEXTMES = TB-EXTM (WIX) END-IF MESEXTOK

05MAIO 06JUNHO + 11NOVEMBRO 12DEZEMBRO ’

EASYTRIEVE 1 – Conceitos Básicos e – Regras gerais para os statements

Dicas gerais : problemas mais comuns e outros tópicos
a) Resultados de acumulação aparentemente errados Campos W tem o conteúdo colocado como está em tempo de PRINT. Campos S tem o conteúdo colocado como está o último conteúdo. b) Campos não são totalizados Só totaliza campos que tenham número de decimais especificado (se necessário, colocar zero). c) Uso de TALLY não aceito; TALLY para sumarizar TALLY só pode ser especificado se tiver CONTROL. d) Trocar sinal de um campo compactado ou zonado Às vezes, temos um campo positivo com sinal F, mas precisamos que seja C, ou vice-versa. Para efetuar o teste e eventual troca, podemos fazer conforme o exemplo a seguir.
WNROZONADO W WNROZULTDIR WNROZONADO +4 WNROCOMPAC W WNROPULTDIR WNROCOMPAC +4 5 1 5 1 N MASK HEX B P MASK HEX B

WNROZONADO = 12345 IF WNROZULTDIR ON X'C0' WNROZULTDIR = WNROZULTDIR - 48 END-IF IF WNROZULTDIR ON X'F0' WNROZULTDIR = WNROZULTDIR + 48 END-IF * SABE O QUE EH 48? EH X'30', A DIFERENCA ENTRE X'F0' E X'C0' WNROCOMPAC = 123456789 IF WNROPULTDIR ON X'0C' WNROPULTDIR = WNROPULTDIR - 3 END-IF IF WNROPULTDIR ON X'0F' WNROPULTDIR = WNROPULTDIR + 3 END-IF * SABE O QUE EH 3? EH X'03', A DIFERENCA ENTRE X'0F' E X'0C'

e) Instruções aparentemente executadas erradas Muitas vezes, um sinal C ou D num campo numérico, aliado ao uso de um campo declarado como numérico ou alfa, pode nos fazer pensar que uma instrução está sendo executada de forma errada. f) Abends na execução 0C7= Data exception : Algum campo numérico está sendo manuseado pelo EASY, e seu conteúdo não é numérico. Normalmente é indicado o statement Easy onde o problema ocorreu. Se o statement referir-se a um REPORT, é um campo numérico que se está tentando imprimir, e que não está com conteúdo numérico. Mude o(s) campo(s) numérico(s) para alfa (pode-se redefini-los) e faça referência aos nomes alfa na(s) LINE(S). Não esqueça que pode ser um arquivo com lay-outs diferentes (um header, trailler, etc...).

EASYTRIEVE 1 – Conceitos Básicos e – Regras gerais para os statements

0C4 = Specification exception : Verifique se algum índice de tabela interna está fora de range ou se algum arquivo sequencial está com VS ou se falta algum DD para um arquivo g) Arquivos VFM Arquivos VFM (Virtual File Manager) é um método de acesso sequencial bastante apropriado para manipulação de arquivos de trabalho (temporários). Normalmente, quando se usa arquivos de trabalho, cada um deles precisa ter uma definição, tanto no programa quanto em JCL. Utilizando VFM, basta declarar todos os arquivos de trabalho como VIRTUAL na especificação do FILE, e os arquivos são manipulados, dentro do possível (depende da memória disponível) em memória, sem necessidade de especificação em JCL. Caso a memória disponível não seja suficiente, uma única área em disco é utilizada como “extensão” (através do DD EZTVFM). Arquivos declarados como VIRTUAL são deletados quando seu processamento como input é terminado. Exemplo : FILE CADCLI ... FILE CADCLIALFA VIRTUAL ... SORT CADCLI TO CADCLIALFA USING CLI-NOME JOB INPUT CADCLIALFA ...

EASYTRIEVE Quick Reference

EASYTRIEVE 1 – Conceitos Básicos e – Regras gerais para os statements
Declaração de campos I/O [DEFINE] [nome-arquivo:]nome-campo pos-inicial tambytes |A|N|P|U|B| [decimais] [HEADING (‘...’)] [MASK (‘...’)] Declaração de campos work [DEFINE] nome-campo W tamanho |A|N|P|U|B| [decimais] [HEADING (‘...’)] [MASK (‘...’)] Atividade JOB normal PARM FILE arq PRINTER |DEFER| FILE arqseq-es |DEFER| FILE arqseq-es VBS maxlrecl [maxblk] [FULLTRK] [DEFER] FILE arqvs-e VS [DEFER] FILE arqvs-u VS UPDATE [DEFER] FILE arqvs-s VS CREATE |NOVERIFY| |RESET| [DEFER] declaração áreas I/O declaração variáveis work *------------------------------------------JOB INPUT [START proc] [FINISH proc] JOB INPUT NULL [START proc] [FINISH proc] JOB INPUT arq [START proc] [FINISH proc] JOB INPUT arq KEY cpo1 [cpo2...] comandos REPORT.... Atividade SORT PARM FILE arq PRINTER [DEFER] FILE arqseq-es [DEFER] FILE arqseq-es VBS maxlrecl [maxblk] [FULLTRK] [DEFER] FILE arqvs-e VS [DEFER] FILE arqvs-u VS UPDATE [DEFER] FILE arqvs-s VS CREATE |NOVERIFY| |RESET| [DEFER] declaração áreas I/O declaração variáveis work *------------------------------------------SORT arq1 TO arq2 USING campo1 [D] [BEFORE proc] + [SIZE literal1] [WORK literal2] comandos, exceto de I/O (só DISPLAY sem nomearq) Atividade JOB INPUT SQL PARM FILE arq PRINTER |DEFER| FILE arqseq-es |DEFER| FILE arqseq-es VBS maxlrecl [maxblk] [FULLTRK| |DEFER| FILE arqvs-e VS |DEFER| FILE arqvs-u VS UPDATE |DEFER| FILE arqvs-s VS CREATE |NOVERIFY| |RESET| |DEFER| declaração áreas I/O declaração variáveis work *------------------------------------------JOB INPUT SQL [START proc1] [FINISH proc2] SELECT coluna1 [, coluna2..... , colunan ] + FROM nometabela + [WHERE condição] + [ORDER coluna1 [... , colunan] ] + INTO :campo1 [ ... , campon] comandos REPORT .... Variáveis EASY SYSDATE = AA/MM/DD SYSTIME = HH.MM.SS RETURN-CODE = uso JCL RECORD-LENGTH = lrecl RECORD-COUNT = qt regs FILE-STATUS = status I/O VSAM LEVEL = qual quebra TALLY = qtdd regs do total. PARM-REGISTER = para pegar PARM via CALL EZTPX01 00 04 08 12 16 128 = = = = = = REPORT nome-relatorio + [SUMMARY] + [SUMFILE] + [SUMSPACE] + [TALLYSIZE] + [DTLCTL |EVERY|FIRST|NONE|] + [SUMCTL ([x] [y])] + [LABELS [ACROSS literal] ] + [DOWN literal SIZE literal NEWPAGE]+ [FILE nome-arquivo] + [PRINTER nome-arquivo] + [PAGESIZE literal literal] + [LINESIZE literal] + [SKIP literal] + [SPACE literal] + [TITLESKIP literal] + [| SPREAD | NOSPREAD |] + [NOADJUST] + [| NODATE | NOKDATE |] + [| NOPAGE | NOKPAGE |] + [NOHEADING] + [LIMIT literal] + [EVERY literal] SEQUENCE campo1 [D] campo2 [D] ... CONTROL cpo1 [D] ... |FINAL| |NEWPAGE| + |RENUM| |NOPRINT| SUM campo1 [campo2 ... campon] TITLE nrolin |cpo| literal |+nro|-nro| [COL nro] HEADING campo (‘xxx’ [‘yyy’ ...]) LINE nrolin |cpo|literal |+nro|-nro| [|COL|POS| nro] *------------------------------------------REPORT-INPUT. PROC ... END-PROC *------------------------------------------BEFORE-LINE. PROC ... END-PROC *------------------------------------------AFTER-LINE. PROC ... END-PROC *------------------------------------------BEFORE-BREAK. PROC ... END-PROC *------------------------------------------AFTER-BREAK. PROC ... END-PROC *------------------------------------------ENDPAGE. PROC ... END-PROC *------------------------------------------TERMINATION. PROC ... END-PROC *------------------------------------------Return Codes VSAM OK EOF no GET DUP KEY no PUT ou WRITE KEY fora de sequência no PUT RECORD NOT FOUND no READ falta DD no JCL para o arq

REPORT