Sunteți pe pagina 1din 23

EasyTrieve Manual rpido de referncia

Conceitos..........................................................................................................................................................................3 Estrutura de um programa em EASYTRIEVE................................................................................................................3 Regras gerais para os statements .....................................................................................................................................5 Expresso.........................................................................................................................................................................6 Declarao De Dados reas De I/O ............................................................................................................................6 Declarao De Dados reas De Work .........................................................................................................................7 Variveis Easytrieve; Pegar Parm Do Exec.....................................................................................................................8 Componentes de um relatrio........................................................................................................................................10 Comandos......................................................................................................................................................................10 Tabelas : declarao e referncia no processamento ....................................................................................................20 Dicas gerais : problemas mais comuns e outros tpicos................................................................................................21 QUICK REFERENCE...................................................................................................................................................23

2 EASYTRIEVE

3 EASYTRIEVE

Conceitos EASYTRIEVE uma linguagem de programao, com recursos para acesso a arquivos e bases de dados, com comandos que trazem bastante facilidade principalmente para a gerao de relatrios. Estrutura de um programa em EASYTRIEVE A estrutura bsica de um programa em EASYTRIEVE composta de statements para : PARM para indicar condies de processamento ao EASYTRIEVE (opcional) declarao de arquivos (opcional) declarao de variveis (opcional) declarao dos procedimentos (obrigatrio); os blocos de procedimentos (ATIVIDADES) so delimitados a cada JOB ou SORT Um programa com n atividades :
PARM declarao arquivos declarao variveis atividade 1 [atividade 2] . . . . . [atividade n] Um programa com uma atividade (JOB) : PARM declarao arquivos declarao variveis JOB ..... . . . . .

Um programa com uma atividade e todas as declaraes possveis para um REPORT : PARM declarao arquivos declarao variveis ... ... ...

4 EASYTRIEVE 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 *------------------

EASYTRIEVE

Regras gerais para os statements o padro o statement estar desde a posio 1 at a 80 (pode ser mudado via parmetro SCANCOL de instalao) o padro para comentrios o primeiro carter no-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 prxima linha, uma linha deve ter um + ou um - como ltimo carter no-branco; o + indica que a continuao na linha seguinte comea a partir do primeiro carter no-branco; o - indica que a continuao na linha seguinte comea a partir da primeira posio; literais devem ser colocadas entre apstrofes o uso da vrgula fora de literais opcional, usado somente para efeito de melhor visibilidade do texto para qualificao de arquivos, registros e campos, se necessrio, usar dois pontos : nomes de campos podem ter no mximo 40 caracteres, e podem ter caracteres alfabticos (A a Z), dgitos (0 a 9), e qualquer carter especial exceto os delimitadores (espao, apstrofe, ponto, vrgula, abre parnteses, fecha parnteses e dois pontos nomes de procedimentos e REPORTS no podem ter somente dgitos para fazer referncia a dados em hexadecimal, usar Xnn...., sendo nn... dgitos hexadecimais (0 a 9, e A a F) operadores aritmticos ( + , -, * e / ) devem ter pelo menos um espao antes e um depois)

Expresso Uma expresso utilizada para indicar um conjunto de operaes entre literais e variveis. As operaes so : + (soma) (subtrao) * (multiplicao) e / (diviso) A ordem de resoluo segue os padres matemticos. Podem ser utilizados parnteses para priorizar as operaes. Exemplos :
SALARIO * 0.5 + 10.00 AL-QTDD / 100 DESPREZADOS + 1

Em geral, as expresses so utilizadas para que o resultado do clculo seja colocado (atribuido) numa varivel receptora. Declarao De Dados reas De I/O A declarao de variveis feita atravs do DEFINE. Observar que a prpria keyword DEFINE opcional, caso a declarao seja feita aps a declarao de arquivos. Sintaxe :
[DEFINE] [nome-arquivo:]nome-campo posio-inicial tamanho formato [decimais] outros-atributos

Posio inicial = pode ser especificada de uma das seguintes maneiras : inteiro1 * * +inteiro2 nome-campo +inteiro3 Tamanho Formato A N P U B indica a posio inicial (relativa a 1) do campo dentro da rea que o contm. indica que a posio inicial a prxima disponvel aps a ltima declarao indica que a posio inicial n bytes aps a prxima disponvel aps a ltima declarao, sendo n indicado atravs de inteiro2 indica que a posio inicial n bytes aps a o campo referenciado atravs do nome, sendo n indicado atravs de inteiro2

= indica o tamanho, EM BYTES, do campo sendo definido = indica o formato dos dados no campo : alfanumrico. numrico decimal zonado. Mximo 16 bytes numrico decimal compactado (com sinal). Mximo 16 bytes numrico decimal compactado (sem sinal). numrico binrio. Mximo 4 bytes. Se especificado decimais, tem bit de sinal Se no especificado decimais, no tem bit de sinal = indica a quantidade de casas decimais a considerar para o nmero contido

Decimais

Outros atributos :

HEADING = indica a(s) literal(is) a ser(em) utilizada(s) nas linhas de cabealho que identificam os campos listados. Sintaxe : HEADING (literal1 [literal2] ... [literaln]) Cada literal ser colocada numa linha de cabealho. MASK = indica a mscara de edio para campos numricos a listar. Sintaxe : MASK BWZ (blank when zero) ou MASK HEX (para exibir em formato hexadecimal) ou MASK (mscara) A mscara pode ter Zs e 9s, ponto(s) (separador de visualizao) e vrgula (separador decimal), alm dos caracteres especiais desejados. Outra forma de declarao :
[DEFINE] [nome-arquivo:] [nome-campo] posio-inicial [nome-arquivo2:]nome-campo2

Neste caso, o tamnho, o formato e as decimais de nome-campo sero as mesmas de [nome-arquivo2:]nome-campo2 Declarao De Dados reas De Work Declarao de rea que NO sub-diviso de outra rea.
[DEFINE] nome-campo W tamanho formato [decimais] outros-atributos

W = indica rea de work (trabalho), no 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 nmero contido Outros atributos : HEADING , MASK (idem reas de I/O) Declarao de rea que sub-diviso de outra rea.
[DEFINE] [nome-arquivo:]nome-campo posio-inicial tamanho formato [decimais] outros-atributos

Posio 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 nmero contido Outros atributos : HEADING , MASK (idem reas de I/O) VALUE = indica o contedo inicial do campo. Assume zero para campos numricos e brancos para alfanumricos RESET = indica que o contedo inicial deve ser restaurado a cada execuo de um comando JOB ou SORT

Variveis Easytrieve; Pegar Parm Do Exec SYSDATE = campo alfanumrico de 8 bytes com a data do dia (AA/MM/DD) SYSTIME = campo alfanumrico de 8 bytes (HH.MM.SS ver Caractersticas de instalao) PARM-REGISTER = campo numrico binrio de 4 bytes que contm o contedo do registrador 1 quando da entrada da execuo do Easytrieve. O registrador 1 contm o endereo de uma lista de parmetros fornecida atravs do PARM do EXEC. Deve ser usado atravs da chamada da subrotina EZTPX01 (ver Uso de PARM no carto EXEC). RETURN-CODE = campo numrico binrio de 4 bytes cujo contedo retornado ao sistema operacional ao trmino da execuo do Easytrieve, para poder ser testado via COND. RECORD-LENGTH = campo numrico binrio de 2 bytes cujo contedo colocado pelo Easy, e o tamanho do registro lgico processado. RECORD-COUNT = campo numrico binrio de 4 bytes cujo contedo colocado pelo Easy, e o nmero sequencial do registro dentro do arquivo. FILE-STATUS = campo com o file-status de um arquivo VSAM, cujo contedo colocado pelo Easy e indica o resultado da ltima operao de I/O efetuada para o arquivo. Os file-status retornados so : 00 04 08 12 16 128 = = = = = = OK EOF no GET DUP KEY no PUT ou WRITE KEY fora de sequncia no PUT RECORD NOT FOUND no READ falta DD no JCL para o arquivo

LEVEL = campo numrico que indica qual quebra est sendo processada (detalhes e exemplos adiante, no captulo referente a relatrios). TALLY = campo numrico cujo contedo a quantidade de registros utilizados para a obteno de um total. Exemplo - Utilizao de variveis 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

*-------------------------------------------------* 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 **************************************************

Componentes de um relatrio Os componentes de um relatrio podem ser exemplificados da seguinte forma : rgua para simples referncia 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

linha de total (controlada pelo CONTROL) linhas de detalhe (controlada pelo(s) LINE(s) linha (de cabealho) identificadora dos campos (controlada pelos HEADINGs) linha de cabealho (controlada pelo(s) TITLE(s)) Comandos
Atribuio variavelreceptora [INTEGER] [ | ROUNDED | TRUNCATED | ] = | variavel | literal | expressao | (cpia / 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. | variavel | literal |

Exemplos : ADICIONAL = SALARIO * 0.5 + 10.00 UMPORCENTO = AL-QTDD / 100 DESPREZADOS = DESPREZADOS + 1 SUBTOTAL = 0 Uma outra forma de atribuio atravs 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 = varivel com um nmero que indica a quantidade de bytes no campo emissor literal3 = literal numrica que indica a quantidade de bytes no campo emissor nome-campo4 = varivel com um nmero que indica a quantidade de bytes no campo receptor literal4 = literal numrica 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. MOVE LIKE | nome-arq1 | nome-reg1 | TO | nome-arq2 | nome-reg2 | Os campos cujos nomes forem iguais tanto nos campos emissores quanto nos receptores sero 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 sero 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 sero as receptoras do movimento Exemplo : FILE ENTRA REG-ENTRA 1 80 COD-CLI 1 5 COD-AREA 6 3 NOME-CLI 9 30 SALDO 39 9 N 2 FILE SAI REG-SAI 1 80 COD-CLI 1 5 A N A A A 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 sero movidos para os campos COD-CLI, COD-AREA e NOME-CLI do arquivo SAI. CALL Atravs do comando CALL pode-se chamar para execuo 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 parmetros que so passados PARA a sub-rotina. O nome do campo em RETURNS indica um campo numrico que deve receber um return-code DA sub-rotina. CASE CASE nome-campo WHEN literal [THRU] literal . . . [ WHEN literal [THRU] literal . . .] [ OTHERWISE . .] END-CASE DISPLAY | lit1 | var1 | [ | lit2 | var2 | ] ... [ | litn | varn | ] Exibe o contedo da(s) varivel(eis) e/ou literal(is) especificada(s). DISPLAY [HEX] nome-relatorio | lit1 | var1 | [ ... | litn | varn | ] Para exibir constantes e/ou variveis na SYSPRINT ou outro DD. Sintaxe : Se nome do relatrio for omitido, ser assumida impresso no DD SYSPRINT. Se for especificado, colocar o nome declarado na clusula 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

DISPLAY

DO WHILE condio (primeiro testa a condio depois, se verdadeira, executa) ... END-DO

Ou DO UNTIL condio (primeiro executa e depois testa a condio) ... END-DO A condio pode ser especificada da mesma forma como no comando IF. Os blocos de DO / END-DO podem ser aninhados (nested); a indentao no obrigatria, apesar de facilitar a visualizao : DO WHILE condio . . DO UNTIL condio . . DO WHILE . . END-DO . END-DO . . DO WHILE condio . 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 GET nome-arquivo [STATUS] Para efetuar a leitura sequencial de um registro lgico, 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-instruo Os pontos de uma atividade, onde h comandos a executar, podem ser identificados atravs de um nome. Para IDENTIFICAR uma instruo, basta atribuir um nome no local onde ela se encontra. Se a referncia para executar um desvio, via GO TO, a identificao somente o nome da instruo. Se a referncia para a execuo de uma sub-rotina (chamada ou referenciada atravs de PERFORM, DO, START, FINISH, a identificao deve ser acrescida de PROC. O comando GO TO desvia para a instruo identificada atravs do nome indicado. IF, ELSE, ELSE-IF, END-IF IF condio comandos se condio satisfeita END-IF

GET

GO TO

ou IF condio comandos se condio satisfeita ELSE comandos se condio no satisfeita END-IF ou IF condio comandos se condio satisfeita ELSE-IF condio comandos se condio satisfeita [ELSE-IF condio comandos se condio satisfeita ELSE-IF condio comandos se condio satisfeita] ELSE comandos se nenhuma condio satisfeita END-IF

Os IFs podem ser aninhados (nested), devendo haver pares correspondentes de IFs e respectivos END-IFs; a indentao no obrigatria, apesar de facilitar a visualizao :
IF condio (satisfeita) IF condio comandos se condio satisfeita END-IF ELSE (no satisfeita) IF condio comandos se condio satisfeita ELSE comandos se condio no satisfeita END-IF END-IF A condio pode ser especificada da seguinte forma : Relacionamento de campos Classes de campos Srie de campos Bits de campos Presena de arquivos Presena de srie de arquivos Relacionamento de registros

RELACIONAMENTO DE CAMPOS Testa como o contedo de um campo em relao ao contedo de outro campo. Sintaxe : IF campo |EQ|=|NE|NQ|=|LT|LS|<|LE|LQ|<=|GT|GR|>|GE|GQ|>=| |campo|literal|expresso|

Sendo : EQ NE LT LE GT GE

ou ou ou ou ou ou

= NQ LS LQ GR GQ

ou ou ou ou ou

= < <= > >=

equal (igual) not equal (no igual / diferente) less than (menor que) less or equal (menor ou igual que) greater than (maior que) greater or equal (maior ou igual)

CLASSES DE CAMPOS Testa se um campo tem determinada caracterstica ou no. 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 ... SRIE DE CAMPOS Testa se campo1 est ou no dentro dos limites de uma srie delimitada por desde e at, cada qual podendo ser especificado atravs de uma literal numrica ou alfanumrica, ou outra varivel. Sintaxe: IF campo1 |EQ|=|NE|NQ|=| desde 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 no ligado(s). Sintaxe : IF campo [NOT] |ON|OFF| |campo|literalhexa| Exemplos : IF ULTDIGANO ON X01 ... IF BIT4567DOBYTE ON X0F ... IF ULTDIGNRO OFF X01 ... PRESENA DE ARQUIVOS Testa se um registro do arquivo em referncia est ou no disponvel para processamento. Sintaxe : IF [NOT] [EOF] |nome-arquivo|PRIMARY|SECONDARY| THRU at

PRESENA DE SRIE DE ARQUIVOS Testa se registro(s) do arquivo tem correspondente em outro ou no. 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 no. 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 atravs de um statement JOB ou um statement SORT. JOB [START nome-proc1] [FINISH nome-proc2] [NAME nome-job] O statement JOB sem a especificao de INPUT faz o Easy assumir como INPUT o primeiro FILE que no seja PRINTER definido. JOB INPUT NULL [START nome-proc1] [FINISH nome-proc2] [NAME nomejob] O statement JOB com a especificao de INPUT NULL indica ao Easy que no 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 especificao 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 clusula START indica o nome de uma procedure (PROC) que deve ser executada ANTES do incio da leitura do arquivo. A clusula FINISH indica o nome de uma procedure (PROC) que deve ser executada APS a leitura automtica de todo o arquivo, antes de encerrar a atividade. A clusula NAME d nome atividade JOB (somente para documentao). PERFORM O comando PERFORM executa uma procedure (ou rotina) : desvia para seu incio (instruo identificada por uma nome, seguido de PROC), executa as instrues at o final da rotina (identificado com END-PROC) e volta para a instruo 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 disponvel aps o GET subsequente feito com sucesso (ou uma leitura automtica via JOB INPUT). POINT nome-arquivo |=|EQ|GE|GQ|>=| PRINT |campo|literal| [STATUS]

Imprime linha(s) de detalhe, conforme especificado na(s) declarao(es) LINE do REPORT. PRINT nome-relatorio

PUT

Para efetuar a gravao sequencial de um registro lgico 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 sequncia PUT nome-arquivo [ FROM | nome-arquivo | nome-reg | ] [STATUS] READ Para efetuar a leitura aleatria (randmica) de um registro lgico em um arquivo VSAM. Status 16 = registro no localizado READ nome-arquivo KEY |campo|literal-alfa| [STATUS] REPORT Faz a declarao das caractersticas de um relatrio, como por exemplo : linha(s) de cabealho, linha(s) de detalhe, linha(s) de total, sequencia, etc... REPORT nome-relatrio [clusulas do REPORT] [statements complementares] simplificadamente : REPORT nome-relatorio PRINTER nome-arquivo Clusulas do REPORT nome para referncia no PRINT ou DISPLAY. Pode haver n relatrios para cada FILE (DD) DTLCTL |EVERY|FIRST|NONE| indica caractersticas das linhas de detalhe. EVERY indica que o contedo dos campos de controle deve ser impresso em todas as linhas de detalhe FIRST indica que o contedo dos campos de contrile deve ser impresso sempre na primeira linha de detalhe de cada pgian , e na primeira linha aps cada quebra de controle. NONE indica que os campos de controle no devem ser impressos nas linhas de detalhe. nome-relatorio 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 ... sero impressos FILE nome-arquivo Indica nome do arq p/ relatrios mto grandes (o VFM insuficiente) LIMIT literal indica o nmero mximo de registros a processar no relatrio LINESIZE literal Modifica o tamanho mximo, 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 NO seja impressa a data do dia na primeira linha de cabealho NOHEADING Faz com que NO seja(m) impressa(s) a(s) linha(s) de cabealho identificadora(s) d(s) campo(s) NOPAGE Faz com que NO sejam impressas a constante identificadora de pgina, e o nmero da pgina, nas linhas de cabealho NOSPREAD Indica para no espalhar os dados por toda a linha (junta-los pela esquerda) PAGESIZE literal1 literal2 Modifica o tamanho mximo, em linhas, da pgina. 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 nmero de linhas em branco entre um PRINT e outro (entre um LINE nn e o prximo LINE 01 SPACE literal Coloca tantos espaos 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 caractersticas 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 nvel, ou de nvel mais alto EVERY literal

NONE = no 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 espao suficiente) y pode ser : DTLCOPY = imprimir variveis de detalhe nas linhas de total, se LEVEL=1 DTLCOPYALL = idem, para todos os LEVEL SUMMARY devem ser impressos somente os totais especificados na clusula CONTROL SUMSPACE literal indica o tamanho para impresso dos campos de total. O nro especificado atravs da literal somado ao tamanho (em dgitos) do campo para determinar o tamanho do campo de total (mximo possvel resultante = 18) TALLYSIZE Indica tamanho do TALLY do relatrio (existe um TALLY para cada REPORT) TITLESKIP literal Indica o nmero de linhas em branco entre a ltima linha de cabealho Geral e a primeira de cabealho identificador dos campos Statements complementares ao REPORT SEQUENCE para indicar a sequncia de impresso 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 sequncia 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 tambm 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 numricos que devem ser totalizados. Devem ter especificao da Quantidade de decimais na sua declarao (se necessrio, colocar zero; caso contrrio, ocorrer erro de compilao). TITLE para declarar as linhas de cabealho. Sintaxe: TITLE nrolin |campo|literal |+nro|-nro| COL nro Nrolin = nmero da linha de cabealho |campo|literal| = contedo a ser impresso +nro -nro = o nro especificado somado ou subtraido do valor de SPACE para indicar quantos espaos em branco so desejados entre o campo anterior e o atual COL nro = indica o nmero da coluna em que se deseja colocar o prximo 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 cabealho que os identificam. Cada literal colocada numa linha. Pode-se especificar colocando em sequncia, ou separadamente, indicando o nmero da linha. LINE para declarar as linhas de detalhe. Sintaxe: LINE nrolin |campo|literal |+nro|-nro| |COL|POS| nro nrolin = nmero da linha de cabealho |campo|literal| = contedo a ser impresso +nro -nro = o nro especificado somado ou subtraido do valor de SPACE para indicar quantos espaos em branco so desejados entre o campo anterior e o atual COL nro = indica o nmero da coluna em que se deseja colocar o prximo campo

POS nro = indica o nmero do tem da LINE 01 na direo do qual o campo sendo especificado deve ser colocado procedures para declarar procedimentos que so invocados pelo Easy automaticamente em eventos relacionados impresso do relatrio. As procedures podem ser : REPORT-INPUT para selecionar e/ou modificar dados do relatrio BEFORE-LINE para algum procedimento aps a linha de detalhe ser montada, antes de ser impressa AFTER-LINE para algum procedimento aps a linha de detalhe impressa BEFORE-BREAK para algum procedimento aps a linha de total ser montada, antes de ser impressa AFTER-BREAK para algum procedimento aps a linha de total ser impressa ENDPAGE para imprimir linhas de rodap TERMINATION para algum procedimento aps o trmino da impresso do relatrio STOP WRITE STOP Termina a execuo da atividade (JOB ou SORT). WRITE nome-arquivo [|UPDATE|ADD|] [FROM |nome-arq|campo| ] [STATUS] Para efetuar a gravao de novos registros, update de registros j existentes, ou delete de um registro lgico num arquivo VSAM ou WRITE nome-arquivo DELETE [STATUS] Para efetuar o delete (lgico) de um registro num arquivo VSAM. Status 8 = chave duplicada

Tabelas : declarao e referncia no processamento A utilizao de tabelas internas de memria indicada na declarao das variveis atravs da indicao da quantidade de ocorrncias do campo, e, na parte de procedimentos, da indicao de um ndice que indica qual das ocorrncias deseja-se referenciar. A quantidade de ocorrncias indicada atravs da clusula OCCURS. A referncia ao indexador feita colocando-se o nome do campo ou literal numrica que tenham o nmero a ser usado para indexar, entre parnteses, aps o nome da varivel 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

Dicas gerais : problemas mais comuns e outros tpicos a) Resultados de acumulao aparentemente errados Campos W tem o contedo colocado como est em tempo de PRINT. Campos S tem o contedo colocado como est o ltimo contedo. b) Campos no so totalizados S totaliza campos que tenham nmero de decimais especificado (se necessrio, colocar zero). c) Uso de TALLY no 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) Instrues aparentemente executadas erradas Muitas vezes, um sinal C ou D num campo numrico, aliado ao uso de um campo declarado como numrico ou alfa, pode nos fazer pensar que uma instruo est sendo executada de forma errada. f) Abends na execuo 0C7= Data exception : Algum campo numrico est sendo manuseado pelo EASY, e seu contedo no numrico. Normalmente indicado o statement Easy onde o problema ocorreu. Se o statement referir-se a um REPORT, um campo numrico que se est tentando imprimir, e que no est com contedo numrico. Mude o(s) campo(s) numrico(s) para alfa (pode-se redefini-los) e faa referncia aos nomes alfa na(s) LINE(S). No esquea que pode ser um arquivo com lay-outs diferentes (um header, trailler, etc...).

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 mtodo de acesso sequencial bastante apropriado para manipulao de arquivos de trabalho (temporrios). Normalmente, quando se usa arquivos de trabalho, cada um deles precisa ter uma definio, tanto no programa quanto em JCL. Utilizando VFM, basta declarar todos os arquivos de trabalho como VIRTUAL na especificao do FILE, e os arquivos so manipulados, dentro do possvel (depende da memria disponvel) em memria, sem necessidade de especificao em JCL. Caso a memria disponvel no seja suficiente, uma nica rea em disco utilizada como extenso (atravs do DD EZTVFM). Arquivos declarados como VIRTUAL so deletados quando seu processamento como input terminado. Exemplo : FILE CADCLI ... FILE CADCLIALFA VIRTUAL ... SORT CADCLI TO CADCLIALFA USING CLI-NOME JOB INPUT CADCLIALFA ...

QUICK REFERENCE
Declarao de campos I/O [DEFINE] [nome-arquivo:]nome-campo pos-inicial tambytes |A|N|P|U|B| [decimais] [HEADING (...)] [MASK (...)] Declarao 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] declarao reas I/O declarao variveis 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] declarao reas I/O declarao variveis 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| declarao reas I/O declarao variveis work *------------------------------------------JOB INPUT SQL [START proc1] [FINISH proc2] SELECT coluna1 [, coluna2..... , colunan ] + FROM nometabela + [WHERE condio] + [ORDER coluna1 [... , colunan] ] + INTO :campo1 [ ... , campon] comandos REPORT .... Variveis 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 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 *-------------------------------------------

REPORT

Return Codes VSAM 00 04 08 12 16 128 = = = = = = OK EOF no GET DUP KEY no PUT ou WRITE KEY fora de sequncia no PUT RECORD NOT FOUND no READ falta DD no JCL para o arq

S-ar putea să vă placă și