Explorar E-books
Categorias
Explorar Audiolivros
Categorias
Explorar Revistas
Categorias
Explorar Documentos
Categorias
www.grandeporte.com.br
(11)
4427-4579
(11) 9
9903-3218
Sobre o autor
Prof. Nelson Goncalves
de Oliveira
,
Cientista da Computaco
pelo IMES-SCS,
,
Especialista em Telecomunicaces
pela
,
FAAP-SP, mestrando em cincia da
computaco
pela UFAbc-sp.
,
Iniciou a carreira como desenvolvedor de
software em 1987, especializando-se em
COBOL para Mainframes IBM.
Professor universitrio Desde 2000,
leciona diversas disciplinas nos cursos de
Cincia da Computaco
e Informtica.
,
nelson@grandeporte.com.br
Parte
Verso 2.3.5
Parte 1
Preparation
Trocando Ideias
Reflexo
www.grandeporte.com.br
Parte 1
Presentation
Histria
Conheca
a xpto !!
,
Consultoria
em
Desenvolvimento
de
Software
www.grandeporte.com.br
Parte 1
Teoria
Introdu o
linguagem cobol
Origens
O COBOL foi criado em 1959 pelo CODASYL (Conference on Data Systems
Language), um dos trs comits propostos numa reunio no Pentgono em Maio de
1959, organizado por Charles Phillips do Departamento de Defesa dos Estados
Unidos. O CODASYL foi formado para recomendar as diretrizes de uma linguagem de
programao para negcios. Foi constitudo por membros representantes de seis
fabricantes de computadores e trs rgos governamentais, a saber:
Burroughs Corporation
IBM
Minneapolis-Honeywell (Honeywell Labs)
RCA
Sperry Rand
Sylvania Electric Products
Fora Area dos Estados Unidos
David Taylor Model Basin
Agncia Nacional de Padres (National Bureau of Standards ou NBS).
Este comit foi presidido por um membro do NBS. Um comit de Mdio Prazo e
outro de Longo Prazo foram tambm propostos na reunio do Pentgono. Entretanto,
embora tenha sido formado, o Comit de Mdio Prazo nunca chegou a funcionar; e o
Comit de Longo Prazo nem chegou a ser formado. Por fim, um subcomit do Comit
de Curto Prazo desenvolveu as especificaes da linguagem COBOL. Este subcomit
era formado por seis pessoas:
William Selden e Gertrude Tierney da IBM
Howard Bromberg e Howard Discount da RCA
Vernon Reeves e Jean E. Sammet da Sylvania Electric Products
Este subcomit completou as especificaes para o COBOL no fim do ano de
1959. Elas foram inspiradas em grande parte pela linguagem FLOW-MATIC inventada
por Grace Murray Hopper, e pela linguagem COMTRAN da IBM inventada por Bob
Bemer.
As especificaes foram aprovadas pelo CODASYL. A partir da foram
aprovadas pelo Comit Executivo em Janeiro de 1960, e enviadas grfica do
governo, que as editou e imprimiu com o nome de COBOL 60. O COBOL foi
desenvolvido num perodo de seis meses, e continua ainda em uso depois de mais de
50 anos.
www.grandeporte.com.br
Parte 1
Grace Murray Hopper
Grace Hopper foi uma analista de sistemas da marinha americana nas
dcadas de 1940 e 1950, criadora da linguagem de programao FLOW-MATIC, hoje
extinta. Como sua linguagem serviu como base para a criao do COBOL, atribui-se
ela o ttulo de Me do COBOL. (equivocadamente) de autoria de Hopper a
inveno da palavra "bug", usada para designar uma falha em um cdigo-fonte, devido
a uma traa que ela encontrou esmagada em um rel do computador UNIVAC MARK
II.
FLOW-MATIC
A linguagem FLOW-MATIC, originalmente conhecida como B-0 (Business
Language version 0), foi a primeira linguagem de processamento de dados parecida
com o idioma ingls. Ela foi desenvolvida para o UNIVAC I da Remington Rand por
Grace M. Hopper.
Grace havia observado que os usurios da rea de negcios no se sentiam
confortveis com a notao matemtica exigida pelo FORTRAN, que foi a primeira
linguagem de programao de alto nvel, significando FORmula TRANslator (Tradutor
de Frmulas). No final de 1953 ela props que os problemas de processamento de
dados deveriam ser expressos usando palavras-chave em ingls, mas a gesto da
Rand considerava a ideia invivel. No incio de 1955, ela e sua equipe escreveram
uma especificao para uma linguagem de programao com essas caractersticas e
implementaram um prottipo. O compilador do FLOW-MATIC tornou-se publicamente
disponvel no incio de 1958 e foi substancialmente completado em 1959.
O FLOW-MATIC foi a primeira linguagem de programao a expressar suas
operaes usando comandos em ingls, foi o primeiro sistema que separou a
descrio dos dados das operaes. Sua linguagem de definio de dados, diferente
www.grandeporte.com.br
Parte 1
dos comandos de execuo, no eram em ingls, em vez disso, as estruturas de
dados eram definidas preenchendo formulrios pr-impressos.
O FLOW-MATIC foi a maior influncia no projeto do COBOL. Muitos de seus
elementos foram incorporados ao COBOL, tais como:
CONTRAM
A linguagen COMTRAN (COMmercial TRANslator) uma antiga linguagem de
programao desenvolvida na IBM. Seu objetivo era ser uma linguagem de
programao comercial equivalente a linguagem de programao cienttica FORTRAN
(FORmula TRANslator). Ela serviu como impulsionadora da linguagem COBOL. foi
desenvolvida em 1957 por Bob Bemer (Robert William Bemer 1920 2004), foi
influenciada pelo FLOW-MATC e influenciou o COBOL. O CONTRAM foi a primeira
linguagem de programao a usar a clusula PIC.
Muitos elementos da COMTRAN foram incorporados ao COBOL, tais como:
COBOL II
O COBOL uma linguagem de alto nvel, isto , semelhante a linguagem
humana. um acrnimo e significa COmmon Business Oriented Language
(Linguagem Comum Orientada aos Negcios). Como seu nome indica, o objetivo
desta linguagem permitir o desenvolvimento de aplicaes comerciais para pessoas
sem conhecimento profundo de computadores. Por isso a linguagem COBOL usa
frases normais da lngua inglesa, e a estrutura de um programa COBOL se assemelha
a um texto com divises, sees, pargrafos e frases em ingls. Uma das
caractersticas importantes do COBOL sua auto documentao: um programador
pode entender um programa COBOL pela simples leitura de sua codificao.
www.grandeporte.com.br
Parte 1
O COBOL II foi liberado pela IBM no inicio dos anos 90 e a atual verso
utilizada pelas empresas usurias de computadores de Grande Porte. uma
linguagem poderosa e flexvel para as aplicaes comerciais atuais e permite a
codificao de programas especificados pelas metodologias: Programao
Estruturada, TOP-DOWN e MODULAR.
No COBOL II foram includos comandos para COPY book, PERFORM IN-LINE,
DELIMITADORES DE ESCOPO e os comandos EVALUATE e INITIALIZE entre outros.
O mdulo objeto gerado ficou mais potente, podendo utilizar todas as
facilidades dos sistemas operacionais modernos. Pode-se rodar um programa acima
da linha dos 16 MBytes e com 31 bits de endereamento de memria tornando mais
fcil o desenvolvimento de grandes aplicaes. O compilador foi totalmente reescrito
tendo sido eliminados comandos e instrues obsoletas das verses anteriores,
tratando-se de um compilador novo, o COBOL II apresenta algumas melhorias em
relao ao antigo permitindo uso mais eficiente dos recursos, como maior facilidade de
depurao BATCH e novo formato das listagens de compilao.
Parte 1
Teoria
PROCESSAMENTO BATCH
== EM LOTES ==
www.grandeporte.com.br
10
Parte 1
www.grandeporte.com.br
Parte 1
EXEMPLO
11
PROCESSAMENTO BATCH
Objetivo do Programa
Calcular o valor a receber de vrios funcionrios, com base na quantidade de
horas trabalhadas, com salrio fixo de R$ 25,00 por hora.
Macro-Fluxo
SYSIN
EEXXNN01
SYSOUT
Observao
A quantidade de horas trabalhadas pelos funcionrios est gravada em uma
SYSIN. O programa EEXXNN01 l todas as horas gravadas na SYSIN, e para cada
uma delas, calcula o salrio e o exibe na SYSOUT.
Alm disso, tambm deve ser exibido o nmero de salrios que foram
calculados e a soma de todos os salrios.
A SYSIN (SYSTEM INPUT) lida com o comando ACCEPT, que carrega na
varivel informada o dado lido. Exemplo:
ACCEPT QTDHSTRAB FROM SYSIN
A SYSOUT (SYSTEM OUTPUT) gravada com o comando DISPLAY, que
exibe constantes e valores de variveis informadas. Exemplo:
DISPLAY "TOTAL DE FUNCIONARIOS LIDOS.: " CONTFUNC
www.grandeporte.com.br
12
Parte 1
JOB de Execuo
Observe a SYSIN, onde as horas trabalhadas esto informadas. O ltimo valor
0000 um indicador de que no h mais horas para calcular o salrio. comum
utilizar um valor previamente combinado para indicar o trmino dos dados da SYSIN,
essa tcnica conhecida como SENTINELA.
11234567892123456789312345678941234567895123456789612345678971234567898
12345678901234567890123456789012345678901234567890123456789012345678901234567890
//GPXXNNE1 JOB 'SEUNOME',MSGCLASS=X,CLASS=C,NOTIFY=GPXXNN,TIME=(0,20)
//*******************************************************************
//JOBLIB
DD DSN=GP.GERAL.LOADLIB,DISP=SHR
//STEP1
EXEC PGM=EEXXNN01
//SYSIN
DD *
0150
0085
Sentinela.
0180
0025
0090
0125
0070
e
0000
//*
Programa COBOL
----+-*A-1-B--+----2----+----3----+----4----+----5----+----6----+----7--|-+----8
*--------------------------------------------------------------*
* EXEMPLO 01 - COBOL LEVEL 1
*
*--------------------------------------------------------------*
* OBJETIVO : CALCULAR O VALOR A RECEBER DE VARIOS FUNCIONARIOS *
*
COM BASE NA QUANTIDADE DE HORAS TRABALHADAS, COM *
*
SALARIO FIXO DE R$ 25,00 POR HORA.
*
*--------------------------------------------------------------*
IDENTIFICATION
DIVISION.
*--------------------------------------------------------------*
PROGRAM-ID.
EEXXNN01.
AUTHOR.
GRACE.
*--------------------------------------------------------------*
ENVIRONMENT
DIVISION.
*--------------------------------------------------------------*
CONFIGURATION
SECTION.
SPECIAL-NAMES.
DECIMAL-POINT IS COMMA.
INPUT-OUTPUT
SECTION.
*--------------------------------------------------------------*
DATA
DIVISION.
*--------------------------------------------------------------*
FILE
SECTION.
WORKING-STORAGE
SECTION.
77 QTDHRSTRAB
PIC 9(04).
77 CONTFUNC
PIC 9(05).
77 SOMASAL
PIC 9(12)V99.
77 SALARIO
PIC 9(06)V99.
www.grandeporte.com.br
Parte 1
----+-*A-1-B--+----2----+----3----+----4----+----5----+----6----+----7--|-+----8
*--------------------------------------------------------------*
PROCEDURE
DIVISION.
*--------------------------------------------------------------*
0000-EEXXNN01.
PERFORM 1000-INICIALIZAR
PERFORM 2000-PROCESSAR
UNTIL QTDHRSTRAB = 0
PERFORM 3000-TERMINO
STOP RUN
.
1000-INICIALIZAR.
MOVE 0
MOVE 0
PERFORM 1500-LER-SYSIN
.
TO CONTFUNC
TO SOMASAL
1500-LER-SYSIN.
ACCEPT QTDHRSTRAB
FROM SYSIN
IF QTDHRSTRAB NOT = 0
COMPUTE CONTFUNC = CONTFUNC + 1
END-IF
.
2000-PROCESSAR.
COMPUTE SALARIO = QTDHRSTRAB * 25
COMPUTE SOMASAL = SOMASAL + SALARIO
DISPLAY "*********************************"
DISPLAY "FUNCIONARIO........: " CONTFUNC
DISPLAY "QTDE. HORAS TRAB...: " QTDHRSTRAB
DISPLAY "SALARIO............: " SALARIO
DISPLAY "*********************************"
PERFORM 1500-LER-SYSIN
.
3000-TERMINO.
DISPLAY "*-------------------------------------------------*"
DISPLAY " TOTAL DE FUNCIONARIOS LIDOS.: " CONTFUNC
DISPLAY "*-------------------------------------------------*"
DISPLAY " SOMA DOS SALARIOS A PAGAR...: " SOMASAL
DISPLAY "*-------------------------------------------------*"
DISPLAY "*
TERMINO NORMAL DO EEXXNN01
*"
DISPLAY "*-------------------------------------------------*"
.
www.grandeporte.com.br
13
14
Parte 1
Teoria
Comandos bsicos
ACCEPT da SYSIN
O COBOL foi desenvolvido originalmente para processar arquivos de dados e
ainda usado com esta finalidade. Entretanto, em muitas ocasies existe a
necessidade de interao com o operador do Mainframe. Usamos o comando (verbo)
ACCEPT para receber os dados de entrada por meio de um carto DD do JCL (tratado
no programa COBOL como SYSIN). Exemplo:
12345678911234567892123456789312345678941234567895123456789612345678971234567898
12345678901234567890123456789012345678901234567890123456789012345678901234567890
//GPXXNNE1 JOB SEUNOME,MSGCLASS=X,CLASS=C,NOTIFY=GPXXNN,TIME=(0,20)
//******************************************************************
//JOBLIB
DD DSN=GP.GERAL.LOADLIB,DISP=SHR
//STEP1
EXEC PGM=EEXXNN01
//SYSIN
DD *
0150
0085
0180
0025
0090
0125
0070
0000
//*
www.grandeporte.com.br
15
Parte 1
DISPLAY
COMPUTE
Realiza operaes aritmticas mais sofisticadas, utilizando o operador de
atribuio = (sinal de igualdade) e uma expresso aritmtica. Exemplo:
----+-*A-1-B--+----2----+----3----+----4----+----5----+----6----+----7--|-+----8
COMPUTE WS-CONTADOR = WS-CONTADOR + 1
COMPUTE WS-SALARIO-ANUAL = WS-SALARIO-MES * 12
COMPUTE WS-DIAGONAL = ((2 * WS-LADO ** 2) ** 0,5)
Observe o compute com o nmero 0,5 escrito com vrgula para separar a parte
decimal. Isso s possvel se no pargrafo SPECIAL-NAMES for utilizado a
declarao DECIMAL-POINT IS COMMA como ser visto mais adiante.
Os operadores aritmticos possuem prioridades diferentes, como mostra a
tabela abaixo. Quando houver operadores de mesma prioridade, eles sero
executados da esquerda para a direita.
Operao
Parnteses
Potncia
Multiplicao
Diviso
Adio
Subtrao
Smbolo
( )
**
*
/
+
-
Prioridade
0
1
2
2
3
3
=+
++
X = A + (B /(C + (D / (E + F))))
www.grandeporte.com.br
16
Parte 1
MOVE Bsico
A instruo MOVE copia o valor de uma constante ou o contedo de uma
varivel para uma ou mais variveis. IMPORTANTE: A instruo no MOVE dados,
mas sim faz uma CPIA.
Alinhamento alfabtico ou alfanumrico
Os dados so acomodados na varivel receptora alinhado-se da esquerda para
a direita. Se a varivel emissora for maior que a receptora, os caracteres mais a direita,
em excesso, sero truncados na varivel receptora. Se a emissora for menor que a
receptora os caracteres faltantes para preencher o campo receptor sero preenchidos
com SPACES. Exemplo:
----+-*A-1-B--+----2----+----3----+----4----+----5----+----6----+----7--|-+----8
MOVE GRACE HOPPER TO WS-NOME
WS-NOME
G R A C E
H O P P E R
Alinhamento Numrico
Os dados so acomodados na varivel receptora alinhando-se da direita para a
esquerda. Se a varivel emissora for maior que a receptora os dgitos mais a esquerda
da varivel emissora sero truncados. Quando a varivel receptora for maior que a
emissora ou o valor numrico menor que o tamanho da varivel, ocorre preenchimento
com zeros esquerda. Exemplo:
----+-*A-1-B--+----2----+----3----+----4----+----5----+----6----+----7--|-+----8
MOVE 7010,50 TO WS-VALOR
WS-VALOR
0 0 0 0 0 0 7 0 1 0 5 0
Quando h vrgula na varivel emissora e receptora, separando a parte inteira
da decimal, as vrgulas so alinhadas e depois o move realizado. O que no couber
na parte inteira ( esquerda) ou decimal ( direita) truncado.
Exemplos de MOVE:
----+-*A-1-B--+----2----+----3----+----4----+----5----+----6----+----7--|-+----8
MOVE 0
TO
WS-CTLIDO
WS-CTGRAVA
WS-CTDESP
MOVE 3.14159
TO
WS-PI
MOVE ZEROS
TO
WS-ACUMULADOR
MOVE SPACES
TO
WS-MENSAGEM
MOVE ALL -
TO
WS-LINHA
MOVE N
TO
WS-FIM
MOVE HIGH-VALUES
TO
WS-CODCLI
MOVE LOW-VALUES
TO
WS-CHAVE
www.grandeporte.com.br
17
Parte 1
LOW-VALUES
LOW-VALUES e HIGH-VALUES
so respectivamente o menor e o maior
valor que se pode armazenar em uma
varivel. Na tabela EBCDIC, que a
tabela de caracteres aceitos pelo
mainframe correspondem ao primeiro e
ltimo valor respectivamente, como mostra
a tabela ao lado:
...
.
HIGH-VALUES
www.grandeporte.com.br
18
Parte 1
Abaixo temos um trecho de programa COBOL mostrando os diversos tipos de
variveis, alguns MOVEs e o DISPLAY dos valores.
*----------------------------------------------------------------*
WORKING-STORAGE
SECTION.
*----------------------------------------------------------------*
* VE VARIAVEL EMISSORA
77 VE-ALFANUMERICO
PIC X(10).
77 VE-NUMERICO-INTEIRO
PIC 9(10).
77 VE-NUMERICO-NAO-INTEIRO
PIC 9(08)V99.
77 VE-NUMERICO-EDITADO
PIC $ZZ.ZZZ.ZZ9,99+.
77 VE-ALFANUMERICO-EDITADO
PIC XXBXXBXXBXXBXX.
77 VE-ALFABETICO
PIC A(10).
* VR
77
77
77
77
77
77
VARIAVEL RECEPTORA
VR-ALFANUMERICO
VR-NUMERICO-INTEIRO
VR-NUMERICO-NAO-INTEIRO
VR-NUMERICO-EDITADO
VR-ALFANUMERICO-EDITADO
VR-ALFABETICO
PIC
PIC
PIC
PIC
PIC
PIC
X(10).
9(10).
9(08)V99.
$ZZ.ZZZ.ZZ9,99+.
XXBXXBXXBXXBXX.
A(10).
*----------------------------------------------------------------*
PROCEDURE
DIVISION.
*----------------------------------------------------------------*
MOVE '1A2B3C4D5E'
TO VE-ALFANUMERICO
MOVE 123
TO VE-NUMERICO-INTEIRO
MOVE 123,45
TO VE-NUMERICO-NAO-INTEIRO
MOVE 678,90
TO VE-NUMERICO-EDITADO
MOVE '1A2B3C4D5E'
TO VE-ALFANUMERICO-EDITADO
MOVE 'QWERTYUIOP'
TO VE-ALFABETICO
DISPLAY '*----------------------------------------------*'
DISPLAY 'CONTEUDO VARIAVEL EMISSORA'
DISPLAY '*----------------------------------------------*'
DISPLAY 'VE-ALFANUMERICO
' VE-ALFANUMERICO
DISPLAY 'VE-NUMERICO-INTEIRO
' VE-NUMERICO-INTEIRO
DISPLAY 'VE-NUMERICO-NAO-INTEIRO
' VE-NUMERICO-NAO-INTEIRO
DISPLAY 'VE-NUMERICO-EDITADO
' VE-NUMERICO-EDITADO
DISPLAY 'VE-ALFANUMERICO-EDITADO
' VE-ALFANUMERICO-EDITADO
DISPLAY 'VE-ALFABETICO
' VE-ALFABETICO
*----------------------------------------------------------------*
www.grandeporte.com.br
19
Parte 1
Foram feitos vrios MOVEs de variveis de um tipo para todos os outros tipo,
as que do erros na compilao esto escritos em vermelho, j as que produzem
valores errados esto em azul.
*----------------------------------------------------------------*
MOVE VE-ALFANUMERICO
TO
VR-ALFANUMERICO
MOVE VE-ALFANUMERICO
TO
VR-NUMERICO-INTEIRO
MOVE VE-ALFANUMERICO
TO
VR-NUMERICO-NAO-INTEIRO
MOVE VE-ALFANUMERICO
TO
VR-NUMERICO-EDITADO
MOVE VE-ALFANUMERICO
TO
VR-ALFANUMERICO-EDITADO
MOVE VE-ALFANUMERICO
TO
VR-ALFABETICO
*----------------------------------------------------------------*
MOVE VE-NUMERICO-INTEIRO
TO
VR-ALFANUMERICO
MOVE VE-NUMERICO-INTEIRO
TO
VR-NUMERICO-INTEIRO
MOVE VE-NUMERICO-INTEIRO
TO
VR-NUMERICO-NAO-INTEIRO
MOVE VE-NUMERICO-INTEIRO
TO
VR-NUMERICO-EDITADO
MOVE VE-NUMERICO-INTEIRO
TO
VR-ALFANUMERICO-EDITADO
MOVE VE-NUMERICO-INTEIRO
TO
VR-ALFABETICO
*----------------------------------------------------------------*
MOVE VE-NUMERICO-NAO-INTEIRO
TO
VR-ALFANUMERICO
MOVE VE-NUMERICO-NAO-INTEIRO
TO
VR-NUMERICO-INTEIRO
MOVE VE-NUMERICO-NAO-INTEIRO
TO
VR-NUMERICO-NAO-INTEIRO
MOVE VE-NUMERICO-NAO-INTEIRO
TO
VR-NUMERICO-EDITADO
MOVE VE-NUMERICO-NAO-INTEIRO
TO
VR-ALFANUMERICO-EDITADO
MOVE VE-NUMERICO-NAO-INTEIRO
TO
VR-ALFABETICO
*----------------------------------------------------------------*
MOVE VE-NUMERICO-EDITADO
TO
VR-ALFANUMERICO
MOVE VE-NUMERICO-EDITADO
TO
VR-NUMERICO-INTEIRO
MOVE VE-NUMERICO-EDITADO
TO
VR-NUMERICO-NAO-INTEIRO
MOVE VE-NUMERICO-EDITADO
TO
VR-NUMERICO-EDITADO
MOVE VE-NUMERICO-EDITADO
TO
VR-ALFANUMERICO-EDITADO
MOVE VE-NUMERICO-EDITADO
TO
VR-ALFABETICO
*----------------------------------------------------------------*
MOVE VE-ALFANUMERICO-EDITADO
TO
VR-ALFANUMERICO
MOVE VE-ALFANUMERICO-EDITADO
TO
VR-NUMERICO-INTEIRO
MOVE VE-ALFANUMERICO-EDITADO
TO
VR-NUMERICO-NAO-INTEIRO
MOVE VE-ALFANUMERICO-EDITADO
TO
VR-NUMERICO-EDITADO
MOVE VE-ALFANUMERICO-EDITADO
TO
VR-ALFANUMERICO-EDITADO
MOVE VE-ALFANUMERICO-EDITADO
TO
VR-ALFABETICO
*----------------------------------------------------------------*
MOVE VE-ALFABETICO
TO
VR-ALFANUMERICO
MOVE VE-ALFABETICO
TO
VR-NUMERICO-INTEIRO
MOVE VE-ALFABETICO
TO
VR-NUMERICO-NAO-INTEIRO
MOVE VE-ALFABETICO
TO
VR-NUMERICO-EDITADO
MOVE VE-ALFABETICO
TO
VR-ALFANUMERICO-EDITADO
MOVE VE-ALFABETICO
TO
VR-ALFABETICO
*----------------------------------------------------------------*
Mother of God!
www.grandeporte.com.br
20
Parte 1
Na compilao, as mensagens de erros para os MOVEs invlidos so:
follow
The
www.grandeporte.com.br
Parte 1
21
IF ELSE END-IF
Permite o desvio condicional do fluxo de processamento. Operadores
relacionais e lgicos so usados para montar uma condio, que pode ser verdadeira
ou falsa, de acordo com os valores das variveis desta condio.
Abaixo do IF so executadas as instrues se a condio for verdadeira, aps
o ELSE so executadas as instrues se a condio for falsa. Um IF pode ou no ter
ELSE. O THEN opcional e raramente usado. No ser usado neste treinamento.
Exemplo:
----+-*A-1-B--+----2----+----3----+----4----+----5----+----6----+----7--|-+----8
XXXXXXXXXXXIF WS-QTDEST < WS-QTDMIN THEN
XXXXXX*-------INSTRUCOES SE CONDICAO FOR VERDADEIRA
XXXXXXXXXXX
COMPUTE WS-QTDREP = WS-QTDMAX WS-QTDMIN
XXXXXXXXXXX
DISPLAY QUANTIDADE PARA REPOR NO ESTOQUE = WS-QTDREP
XXXXXXXXXXXELSE
XXXXXX*-------INSTRUCOES SE CONDICAO FOR FALSA
XXXXXXXXXXX
MOVE 0 TO WS-QTDREP
XXXXXXXXXXX
DISPLAY NAO HA NADA PARA REPOR NO ESTOQUE
XXXXXXXXXXXEND-IF
Smbolo
=
NOT =
<
>=
NOT <
>
<=
NOT >
OPERADORES RELACIONAIS
Palavra em
Significado
COBOL
EQUAL
igual
NOT EQUAL
diferente
LESS
Menor
NOT LESS
maior ou igual
NOT LESS
maior ou igual
GREATER
maior
NOT GREATER
menor ou igual
NOT GREATER
menor ou igual
OPERADORES LGICOS
Operador
Significado Prioridade
( )
parnteses
0
NOT
NO
1
AND
E
2
OR
OU
3
OPERADORES DE CATEGORIAS
IS POSITIVE
Teste de
IS NEGATIVE
Sinal
IS ZERO
IS NUMERIC
Teste de
Classe
IS ALPHABETIC
www.grandeporte.com.br
22
Parte 1
Exemplos:
----+-*A-1-B--+----2----+----3----+----4----+----5----+----6----+----7--|-+----8
XXXXXX*--------------------IF SEM ELSE---------------------*
XXXXXXXXXXXIF WS-SALARIO < 400
XXXXXXXXXXX
COMPUTE WS-SALARIO = WS-SALARIO + 200
XXXXXXXXXXX
PERFORM 050-IMPRIME-DEMONSTRATIVO
XXXXXXXXXXXEND-IF
XXXXXX*--------------------IF COM ELSE---------------------*
XXXXXXXXXXXIF WS-MEDIA NOT < 7
XXXXXXXXXXX
DISPLAY ALUNO APROVADO COM MEDIA = WS-MEDIA
XXXXXXXXXXXELSE
XXXXXXXXXXX
DISPLAY ALUNO REPROVADO COM MEDIA = WS-MEDIA
XXXXXXXXXXXEND-IF
XXXXXX*--------------------IF ENCADEADO--------------------*
XXXXXXX
IF A > B
XXXXXXXXXXX
IF A > C
XXXXXXXXXXX
IF B > C
XXXXXXXXXXXXXXXXX
DISPLAY C B A
XXXXXXXXXXX
ELSE
XXXXXXXXXXXXXXXXX
DISPLAY B C A
XXXXXXXXXXX
END-IF
XXXXXXXXXXX
ELSE
XXXXXXXXXXXXXX
DISPLAY B A C
XXXXXXXXXXX
END-IF
XXXXXXXXXXXELSE
XXXXXXXXXXX
IF A > C
XXXXXXXXXXXXXX
DISPLAY C A B
XXXXXXXXXXX
ELSE
XXXXXXXXXXX
IF B > C
XXXXXXXXXXXXXXXXX
DISPLAY A C B
XXXXXXXXXXX
ELSE
XXXXXXXXXXXXXXXXX
DISPLAY A B C
XXXXXXXXXXX
END-IF
XXXXXXXXXXX
END-IF
XXXXXXXXXXXEND-IF
XXXXXX*---------------------IF COMPLEXO--------------------*
XXXXXXXXXXXIF R4 = 0 AND R100 NOT = 0 OR R400 = 0 AND R3600 NOT = 0
XXXXXXXXXXX
DISPLAY EH BISSEXTO
XXXXXXXXXXXELSE
XXXXXXXXXXX
DISPLAY NAO EH BISSEXTO
XXXXXXXXXXXEND-IF
XXXXXX*------------------IF DE CATEGORIAS------------------*
XXXXXXXXXXXIF WS-SALARIO IS NUMERIC AND
XXXXXXXXXXXXXXWS-NOME IS ALPHABETIC AND
XXXXXXXXXXXXXXWS-TAXA IS POSITIVE
XXXXXXXXXXX
PERFORM 150-CALCULA-VALOR
XXXXXXXXXXXELSE
XXXXXXXXXXX
DISPLAY REGISTRO INVALIDO
XXXXXXXXXXXEND-IF
XXXXXX*-----------IF DE TESTE DE MULTIPLO VALORES----------*
XXXXXXXXXXXIF WS-OPCAO = 1 OR 2 OR 3 OR 4 OR 5
XXXXXXXXXXX DISPLAY BOA OPCAO
XXXXXXXXXXXEND-IF
XXXXXXXXXXXIF WS-VALOR = 2 OR > 3 OR NOT < 4
XXXXXXXXXXX DISPLAY VALOR IDEAL
XXXXXXXXXXXEND-IF
XXXXXXXXXXXIF WS-OPCAO = 8 OR 9 AND WS-VALOR = 7 OR 9
XXXXXXXXXXX DISPLAY OTIMA COMBINACAO
XXXXXXXXXXXEND-IF
XXXXXX*-----------IF DE EXPRESSAO ARITMETICA---------------*
XXXXXXXXXXXIF WS-SALARIO + WS-BONUS > 5000
XXXXXXXXXXX DISPLAY OTIMO SALARIO, JA PODE CASAR.
XXXXXXXXXXXEND-IF
www.grandeporte.com.br
Parte 1
23
PERFORM Bsico
Executa apenas 1 vez o bloco de instrues de um pargrafo ou SECTION.
Exemplos:
----+-*A-1-B--+----2----+----3----+----4----+----5----+----6----+----7--|-+----8
PERFORM 010-INICIALIZAR
PERFORM 070-TERMINO
*
*
*
*
*
*
www.grandeporte.com.br
24
Parte 1
Teoria
MACRO-FLUXO
ou
Significado
Programa
www.grandeporte.com.br
25
Parte 1
vendas
Arquivo de entrada
(leitura) INPUT
GeraComi
Comissao
www.grandeporte.com.br
Arquivo de sada
(gravao) OUPUT
26
Parte 1
Practice
Atividade
) O COBOL foi criado em 1959 pelo CODASYL, mas a primeira verso s saiu
em 1960 com o nome COBOL 60.
B. (
C. (
D. (
E. (
F. (
www.grandeporte.com.br
Parte 1
2) Coloque entre parnteses qual parte do processamento BATCH essas tarefas so
executadas:
a) rotina-inicializar
b) rotina-processar
c) rotina-termino
www.grandeporte.com.br
27
28
Parte 1
b. (
c. (
d. (
e. (
f. (
) COMPUTE WS-SALARIO=WS-HORASTRAB*WS-SALARIOHORA
g. (
h. (
) MOVE WS-SALARIO TO 25
i. (
j. (
k. (
l. (
) IF WS-SALDO IS
m. (
) IF WS-TIPOCONTA = CC OR CP OR CI
n. (
o. (
p. (
POSITIVE OR NEGATIVE
www.grandeporte.com.br
Parte 1
Atividade
29
Flip chart
a)
www.grandeporte.com.br
30
Parte 1
Trabalhe em duplas
TEXTO COBOL
Pargrafo 0000-EEXXNN02
Executar o pargrafo 1000-INICIALIZAR
Executar o pargrafo 2000-PROCESSAR
at que a varivel WS-FIM seja igual a S
Executar o pargrafo 3000-termino
Parar o programa
Pargrafo 1000-inicializar
Mover zero para as variveis WS-CONT, WS-CTLIDO
Mover N para a varivel WS-FIM
Executar o pargrafo 1500-LER-SYSIN
Pargrafo 1500-LER-SYSIN
Receber dado da SYSIN e armazenar na varivel WS-TAB
Se a varivel WS-TAB for igual a zero
Mover S para a varivel WS-FIM
Seno
Incrementar de um a varivel WS-CTLIDO
Fim-se
Pargrafo 2000-PROCESSAR
Executar o pargrafo 2500-IMPRIME-TABUADA
at que a varivel WS-CONT seja igual a dez
Mover zero para a varivel WS-CONT
Executar o pargrafo 1500-LER-SYSIN
Pargrafo 2500-IMPRIME-TABUADA
Incrementar de um a varivel WS-CONT
Multiplicar as variveis WS-CONT e WS-TAB dando WS-PROD
Exibir WS-TAB X WS-CONT = WS-PROD
Pargrafo 3000-TERMINO
Exibir Quantidade de nmeros lidos = WS-CTLIDO
Exibir TERMINO NORMAL DO EEXXNN02
www.grandeporte.com.br
Parte 1
0000-EEXXNN02.
PERFORM 1000-INICIALIZAR
PERFORM 2000-PROCESSAR UNTIL WS-FIM = "S"
PERFORM 3000-TERMINO
STOP RUN
.
1000-INICIALIZAR.
.
1500-LER-SYSIN.
.
2000-PROCESSAR.
.
2500-IMPRIME-TABUADA.
.
3000-TERMINO.
www.grandeporte.com.br
31
32
Parte 1
Trabalhe em duplas
COBOL TEXTO
0000-EEXXNN03.
PERFORM 1000-INICIALIZAR
PERFORM 2000-PROCESSAR UNTIL WS-FIM = "S"
PERFORM 3000-TERMINO
STOP RUN
.
1000-INICIALIZAR.
MOVE "N" TO WS-FIM
MOVE 0 TO WS-CTLIDO
PERFORM 1500-LER-SYSIN
.
1500-LER-SYSIN.
ACCEPT WS-NUM FROM SYSIN
IF WS-NUM = 0
MOVE "S" TO WS-FIM
ELSE
COMPUTE WS-CTLIDO = WS-CTLIDO + 1
END-IF
.
2000-PROCESSAR.
MOVE 1 TO WS-CONT
MOVE 0 TO WS-SOMA
PERFORM 2500-CALCULA UNTIL WS-CONT > WS-NUM
DISPLAY A SOMA DOS NATURAIS ATE WS-NUM " = " WS-SOMA
PERFORM 1500-LER-SYSIN
.
2500-CALCULA.
COMPUTE WS-SOMA = WS-SOMA + WS-CONT
COMPUTE WS-CONT = WS-CONT + 1
.
3000-TERMINO.
DISPLAY "TOTAL DE NUMEROS LIDOS = " WS-CTLIDO
DISPLAY "TERMINO NORMAL DO EEXXNN03"
.
www.grandeporte.com.br
Parte 1
Pargrafo 0000-EEXXNN03.
Executar o pargrafo 1000-inicializar
Executar o pargrafo 2000-processar at que WS-FIM seja S
Executar o pargrafo 3000-termino
Parar o programa
Pargrafo 1000-INICIALIZAR.
Pargrafo 1500-LER-SYSIN.
Pargrafo 2000-PROCESSAR.
Pargrafo 2500-calcula.
Pargrafo 3000-TERMINO.
www.grandeporte.com.br
33
34
Parte 1
Performance
Todos Juntos
PROJETO 1
Objetivo do Programa
O Departamento Financeiro do Banco DOPOLVO S.A. precisa de um programa
para simular emprstimos aos seus clientes.
Os dados dos diversos emprstimos sero fornecidos via SYSIN e lidos pelo
programa GPXXNN01, que dever calcular o valor da parcela de cada emprstimo a
partir da frmula abaixo, onde vp o valor da parcela, ve o valor do emprstimo, j
o juros e n a quantidade de parcelas.
100
1
1
(1 +
)
100
= ( / 100) / (1 1 / (1 + / 100) )
Macro-Fluxo
SYSIN
GPXXNN01
SYSOUT
www.grandeporte.com.br
Parte 1
35
Layout da SYSIN
Nome do Registro
Nome da Varivel
WS-NUM-SIMULACAO
WS-VAL-EMPRESTIMO
WS-JUROS
WS-QTD-PARCELAS
WS-REG-SYSIN
Tipo e
Tamanho
Descrio do Dado
do Dado
9(04)
Nmero da Simulao
9(06)V99
Valor do Emprstimo
9(02)V99
Percentual de Juros Compostos ao Ms
9(02)
Quantidade de Parcelas
Layout da SYSOUT
O resultado do processamento ser exibido na SYSOUT pela instruo
DISPLAY. Para cada simulao de emprstimo exibir os seguintes dados:
11234567892123456789312345678941234567895
12345678901234567890123456789012345678901234567890
**************************************************
NUMERO DA SIMULACAO.....: 9999
VALOR DO EMPRESTIMO.....: 99999999
JUROS...................: 9999
QTDE. DE PARCELAS.......: 99
VALOR DA PARCELA ........: 99999999
VALOR TOTAL.............: 9999999999
**************************************************
www.grandeporte.com.br
36
Parte 1
Observao
0000-PRINCIPAL
1000-INICIALIZAR
2000-PROCESSAR
1500-LER-SYSIN
1500-LER-SYSIN
3000-TERMINO
JOB de Execuo
11234567892123456789312345678941234567895123456789612345678971234567898
12345678901234567890123456789012345678901234567890123456789012345678901234567890
//GPXXNN01 JOB 'SEUNOME',MSGCLASS=X,CLASS=C,NOTIFY=GPXXNN,TIME=(0,20)
//*******************************************************************
//STEP1
EXEC PGM=GPXXNN01
//STEPLIB DD DSN=GP.GERAL.LOADLIB,DISP=SHR
//SYSIN
DD *
000100100000100010
000200400000080015
000308000000150050
000410000000040060
000000000000000000
//*
AC
CE
PT
0 0 0 1 0 0 1 0 0 0 0 0 1 0 0 0 1 0
WS-REG-SYSIN
www.grandeporte.com.br
Parte 1
37
www.grandeporte.com.br
38
Parte 1
www.grandeporte.com.br
Parte 1
39
www.grandeporte.com.br
40
Parte 1
Avaliao
Estou fera!
Fiz Certo!
Muito Bom
Bom
www.grandeporte.com.br
regular
ruim
Muito ruim
Parte
O que um Mainframe?
um computador de Grande Porte. Nos anos
70 e 80 quando quase todos os computadores eram
grandes, o termo Mainframe era usado para se
referir a diferentes sistemas de computadores. Hoje
a maioria desses sistemas se foram, e o termo
Mainframe
quase
sempre
se
refere
aos
computadores IBM zSeries. De agora em diante
quando falarmos sobre Mainframes, estaremos
falando da zSeries.
IBM System Z10
David Stephens
What on earth is a Mainframe?
Verso 2.3.5
Parte 2
Preparation
Trocando Ideias
Reflexo
www.grandeporte.com.br
Parte 2
Presentation
Histria
O acesso ao Mainframe
www.grandeporte.com.br
Parte 2
Teoria
finalidade
www.grandeporte.com.br
Parte 2
Teoria
Login e logoff
No campo Session Name voc pode colocar o seu nome, pois ele apenas
identifica a sesso do Telnet. No campo Host Name coloca-se o nmero IP do
servidor. No campo Telnet Port coloca-se o nmero da porta habilitada no servidor
para a conexo remota. No campo Terminal Time deixar 3279, que o tipo de
terminal que estamos usando. Finalmente pressione o boto connect para se conectar
ao servidor.
Anote aqui o IP e a Porta para se conectar em nosso servidor:
SOCKET
IP
PORT
www.grandeporte.com.br
Parte 2
Basta pressionar a tecla Esc para ter acesso ao menu de servios do Sistema
Operacional. Digite ento TSO e pressione ENTER para entrar na tela de Login do
TSO.
USERID
www.grandeporte.com.br
Parte 2
www.grandeporte.com.br
Parte 2
www.grandeporte.com.br
10
Parte 2
Atividade
Prtica de laboratrio
www.grandeporte.com.br
Parte 2
Teoria
11
Navega o por
menus e painis
www.grandeporte.com.br
12
Parte 2
A partir do Menu Principal, no campo OPTION ===> informamos as letras da
opo que desejamos acessar. As mais comuns, que usaremos em nosso curso so:
P que leva ao menu ISPF/PDF Interactive System Productivity Facility /
Program Development Facility. Que usaremos para manipular arquivos, editar
programas e submeter Jobs (servios).
SD que leva ao menu System Display and Search Facility Que usaremos
para acompanhar a execuo dos Jobs (servios).
A navegao pelos menus e painis feita selecionando opes, preenchendo
campos e pressionando uma tecla de ao. A mais comum a ENTER, que executa a
ao selecionada. Abaixo temos uma imagem do teclado de um terminal IBM 3270
que emulado nos terminais PC (Personal Computer) e uma relao das teclas de
ao e seus efeitos.
PF7
Ctrl esquerdo
Ctrl direito
PF10
Program Function (PF)
PF1
PF2
PF3
PF5
PF7
PF8
PF9
PF10
PF11
PF12
PF11
PF8
www.grandeporte.com.br
Outras Teclas
Tab
CLR
13
Parte 2
Modificando as
Teoria
configura es
www.grandeporte.com.br
14
Parte 2
www.grandeporte.com.br
Parte 2
15
Prtica de laboratrio
Atividade
www.grandeporte.com.br
16
Parte 2
Teoria
Aloca o de
data set (arquivo)
Qualificador_1
Qualificador_2
Qualificador_3
Qualificador_n
mximo de 44 caracteres
Exemplos:
CADCLI
BACKLOG.ACTIVIT
GP.GPAZ99.COBLIB
XPTO.RHSP.FERIAS.2010
A Organizao de um Arquivo (DSorg = Data Set Organizartion) diz respeito a
forma como os dados so arranjados ou organizados dentro de um arquivo. As
organizaes mais comuns so:
PS Physical Sequential (Fsico Sequencial)
um arquivo que possui registros organizados
sequencialmente, um atrs do outro, podendo ser de
tamanho fixo ou varivel. So os arquivos mais
comuns para o armazenamento de dados para
processamento em lote (Batch).
www.grandeporte.com.br
17
Parte 2
BUFFER
FIFO
STRO
R EGI
STRO
R EGI
STRO
R EGI
STRO
R EGI
STRO
R EGI
PROGRAMA
STRO
R EGI
STRO
R EGI
STRO
R EGI
STRO
R EGI
STRO
R EGI
IRG
IRG
www.grandeporte.com.br
STRO
IRG
R EGI
STRO
IRG
R EGI
STRO
IRG
R EGI
STRO
IRG
IRG
R EGI
STRO
IRG
R EGI
STRO
IRG
R EGI
IRG
STRO
IRG
R EGI
STRO
R EGI
STRO
R EGI
STRO
R EGI
STRO
R EGI
STRO
R EGI
IRG
18
Parte 2
O processo de criao de arquivos chamado de Alocao. O modo mais fcil
de alocar um arquivo consultando as caractersticas de um arquivo j existente,
assim essas caractersticas ficam gravadas na memria e so repassadas para o
arquivo que se deseja alocar. A partir do menu principal do TSO escolhemos:
P (Menu PDF), 3 (utilities) e 2 (data set), ou digitamos P.3.2.
www.grandeporte.com.br
Parte 2
19
www.grandeporte.com.br
20
Parte 2
www.grandeporte.com.br
Parte 2
Atividade
21
Prtica de laboratrio
www.grandeporte.com.br
22
Parte 2
Teoria
Visualiza o dos
arquivos alocados
A partir do menu principal, digitamos P.3.4, que nos levar ao painel Data Set
List Utility, que permitir a visualizao dos arquivos criados, bem como dos membros
dos arquivos particionados. No campo Dsname Level, que significa Data Set Name
Level, colocamos o nome do arquivo completo ou o comeo do nome do arquivo.
Exemplo:
GP.GPAZ99
GP.GPAZ99.C*
GP.GPAZ*
GP.*.COBLIB
Quando paramos logo antes do ponto, que separa o nome do arquivo, no
usamos o asterisco, que neste caso faz o papel de coringa. No segundo exemplo
GP.GPAZ99.C*, desejo exibir todos os arquivos que comecem com GP.GPAZ99.C, o
coringa permite que qualquer outro caractere aparea aps o ltimo C.
No campo Initial View, temos a possibilidade de exibir as seguintes
informaes dos arquivos:
1 Volume
2 Espao
3 Atributos
4 Total
www.grandeporte.com.br
23
Parte 2
INITIAL VIEW 1
INITIAL VIEW 2
INITIAL VIEW 3
INITIAL VIEW 4
www.grandeporte.com.br
24
Parte 2
Atividade
Prtica de laboratrio
www.grandeporte.com.br
25
Parte 2
Teoria
manipula o dos
arquivos alocados
Aps exibir os arquivos pelo painel Data Set List Utility, podemos executar
diversas operaes, tais como renomear, excluir, editar, compactar, etc. Basta colocar
o cursor pelo menos a 1 caractere de distncia do lado esquerdo do nome do arquivo
e digitar um dos comandos:
E
V
B
R
D
Z
/
I
S
Observe que ele est com 100% de uso. Isso ocorre porque sempre que se
editar membros ser preciso salvar as alteraes. O TSO salva o membro alterado em
outro lugar dentro do particionado, deixando o anterior indisponvel. Isso faz com que o
arquivo particionado fique logo cheio, mesmo que tenha apenas um membro. Neste
caso necessrio comprimir (Z = Compress) o particionado, liberando os membros
no usados. O ABEND SE37 o indcio de que o arquivo est 100% usado e precisa
ser comprimido, ele acontece ao salvar um membro, ou sair da edio do membro
com PF3.
www.grandeporte.com.br
26
Parte 2
www.grandeporte.com.br
Parte 2
Atividade
27
Prtica de laboratrio
www.grandeporte.com.br
28
Parte 2
Teoria
Edi o de membros
www.grandeporte.com.br
Parte 2
29
Toda linha que comea com '''''' no foi usada e quando se pressiona
ENTER elas so apagadas. Para inserir linhas, basta colocar o cursor nos asteriscos
da lateral esquerda da linha Top of Data e digitar I seguido da tecla ENTER. Para
inserir 5 linhas, digitar I5. Toda vez que for pressionado ENTER aps a digitao de
uma linha, uma nova linha com '''''' ser exibida. Se for pressionado ENTER
novamente, ela desaparece e ser necessrio digitar I em qualquer linha da lateral
esquerda da tela.
No campo SCROOL podemos escolher:
PAGE
CSR
nmero
www.grandeporte.com.br
30
Parte 2
insere uma linha. I5 insere 5 linhas (ou outro nmero que desejar).
Exclui uma linha. D5 Exclui 5 linhas.
repete uma linha. R5 repete a linha 5 vezes.
move a linha para um destino (usar A = after ou B=before) na linha de destino
copia a linha para um destino (usar A = after ou B=before) na linha de destino
(Lower Case) converte os caracteres da linha para minsculo
(Upper Case) converte os caracteres da linha para maisculo
oculta uma linha. X5 oculta 5 linhas.
exibe linha ocultada. S5 exibe 5 linhas ocultadas.
(Text Split) divide a linha na posio atual do cursor
insere uma rgua na linha, o que ajuda na identificao das colunas
descola linha para a direita. )5 desloca 5 colunas para a direita.
descola linha para a esquerda. (5 desloca 5 colunas para a esquerda.
www.grandeporte.com.br
Parte 2
Atividade
31
Prtica de laboratrio
www.grandeporte.com.br
32
Parte 2
Teoria
cpia de membros
www.grandeporte.com.br
Parte 2
33
Prtica de laboratrio
Atividade
B) Mova o membro DICAS da COBLIB de seu instrutor para seu PDS COBLIB.
Anote o procedimento abaixo. O que ocorreu?
www.grandeporte.com.br
34
Parte 2
Teoria
GP.GPXXNN.COBLIB
(GPXXNN04)
BOOKs
1. Passo
PRE-COMPILE
GP.GPXXNN.JOBLIB
(COMPCOB)
GP.GPXXNN.BOOKLIB
(CLISP)
Programa Fonte
COBOL
+
BOOKs
2. Passo
COMPILE
SPOOL
PROGRAMA
OBJETO
SD.ST
? JOBID
S SYSPRINT
LIBRARY
3. Passo
LINKAGE EDITOR
LOAD
MODULE
www.grandeporte.com.br
A
GP.GERAL.LOADLIB
(GPXXNN04)
Parte 2
35
www.grandeporte.com.br
36
Parte 2
www.grandeporte.com.br
37
Parte 2
Atividade
Prtica de laboratrio
Compile
programa
EEXXNN01.
Anote
www.grandeporte.com.br
38
Parte 2
na compila o
Uma relao de JOB aparece. Identifique o Job Id que voc havia obtido.
Coloque uma interrogao (?) esquerda e pressione ENTER. Os arquivos que
compem o JOB aparecem.
Coloque um S do lado esquerdo do arquivo SYSPRINT COBCOMP COBOL
para ele ser aberto.
www.grandeporte.com.br
Parte 2
39
Na coluna LineID est a linha do programa fonte que est com erro. Na coluna
Message Code os erros terminam com S (Severe), E (Error) ou W (Warning),
dependendo da severidade do erro. Com as teclas PF11 e PF10 possvel deslocar a
tela para a esquerda e direita, assim possvel ler toda a mensagem de erro.
Divida a tela em duas partes, posicionando o cursor no topo
pressionando PF2. Voc sabe que a tela est dividida quando aparece
pontilhada. Para trocar de tela pressione PF9. Em uma tela mantenha os
outra abra o programa fonte para correo. Retire os erros e recompile o
at obter MAXCC=0.
www.grandeporte.com.br
da tela e
uma linha
erros e na
programa,
40
Parte 2
Atividade
Prtica de laboratrio
Encontre
elimine
os
erros
do
programa
www.grandeporte.com.br
Parte 2
Teoria
41
Executando cobol
www.grandeporte.com.br
42
Parte 2
ALGUMAS DICAS
Dica 2) Para abrir uma nova janela, digite START na linha de comando.
possvel abrir mais de 2 janelas simultaneamente. Mas a tecla PF9 s faz a troca entre
2 janelas. Para ver as demais janelas, digitar KEYS na linha de comando e na opo
PF9 colocar SWAP LIST. Ao pressionar PF9 aparece uma lista de janelas. A janela
ativa aparece com *. Para dar nome s janelas, digite SCRNAME nome_da_janela na
linha de comando.
Na prxima pgina esto as telas onde essas dicas so mostradas na prtica.
www.grandeporte.com.br
Parte 2
43
www.grandeporte.com.br
44
Parte 2
Atividade
Prtica de laboratrio
www.grandeporte.com.br
Parte 2
45
Practice
Atividade
(
(
(
(
(
(
CAPS ON
NUM OFF
RES
HI ON COBOL
SAVE
CANCEL
L nn
M + PF8
M + PF7
F string
RECOVERY ON
C XXXX YYYY
UNDO
C XXXX YYYY ALL
(
(
(
(
(
(
(
(
(
(
(
(
(
(
www.grandeporte.com.br
46
Parte 2
O
A
C
A
L
I
P
M
O
C
A
N
I
U
Q
A
M
J
C
S
C
A
L
O
R
T
C
O
A
I
I
V
O
N
E
S
O
B
R
N
www.grandeporte.com.br
D
O
C
E
B
O
B
L
G
T
E
T
N
O
F
E
O
I
A
A
K
N
O
B
P
E
L
B
L
T
N
K
Z
X
L
Y
B
S
L
I
I
R
I
D
I
O
M
A
A
C
L
S
E
M
A
N
T
I
C
A
Parte 2
Dinmica
47
Pense rpido !
SD.ST
P.2
Menu / Painel
www.grandeporte.com.br
48
Parte 2
Performance
Para casa
Atividade
Instalao do Hercules
Faa a instalao do ambiente mainframe no seu
computador pessoal. Nossos alunos j instalaram esse
ambiente em diversas verses de Windows (do 95 ao
Seven) e em diversas configuraes de hardware (desde
NetPC, Notebook at Desktops).
No DVD que voc recebeu h os seguintes arquivos:
abendassist.exe
Helpdib.hlp
Instalao do Hercules.doc
GrandePorte-1.zip
importante ter o Hercules instalado em seu computador para que voc possa
praticar e ganhar vivncia nesse ambiente. Refaa todos os projetos de programas
feitos na Grande Porte em sua casa.
www.grandeporte.com.br
Parte 2
49
Roger Bowler
Engenheiro do sistema z/OS e criador do
emulador Hercules ESA/390, que em 1999 causou
uma grande revoluo no mundo dos computadores
mainframe, permitindo que pessoas fsicas puderem
executar pela primeira vez, softwares de mainframe
em seus prprios PCs, e o mais importante, de graa.
Jay Maynard
Gerente de projetos do emulador de
mainframe Open Source Hercules. Foi um
programador de mainframe e sistemas de rede por
mais de 15 anos, e tem tambm trabalhado com uma
grande variedade de computadores como sistemas
Unix, AS/400 e outros sistemas de computadores.
www.grandeporte.com.br
50
Parte 2
Avaliao
Estou fera!
Fiz Certo!
Muito Bom
Bom
www.grandeporte.com.br
regular
ruim
Muito ruim
Parte
Verso 2.3.5
Parte 3
Preparation
3
Trocando Ideias
Reflexo
www.grandeporte.com.br
Parte 3
Presentation
Histria
www.grandeporte.com.br
Parte 3
Teoria
Formato do programa
fonte cobol
Colunas de 1 a 6
Coluna 7
Colunas de 8 a 11
Colunas de 12 a 72
Colunas de 73 a 80
(N) no usado
(C) rea de indicao
(A) margem A
(B) margem B
(N) no usado
(*) Asterisco Indica, para o compilador COBOL, que a linha inteira deve ser
tratada como uma linha de comentrio. Linhas de comentrio no so compiladas e,
portanto no interferem na execuo do programa. Porm so importantes para
documentar o programa e esclarecer a lgica desenvolvida pelo programador.
Exemplo:
----+-*A-1-B--+----2----+----3----+----4----+----5----+----6----+----7--|-+----8
......*----------------------------------------------------------------*
......* EMPRESA : METALURGICA FERRO FORTE LTDA.
......* SISTEMA : CONTABILIDADE
......* PROGRAMA : CONT0231
......*----------------------------------------------------------------*
.......IDENTIFICATION................
..DIVISION.
......*----------------------------------------------------------------*
.......PROGRAM-ID......................
CONT0231.
www.grandeporte.com.br
Parte 3
(/) Barra Indica, para a impressora que deve fazer um salto de pgina. Isso
interessante quando desejamos que determinada parte do programa comece no incio
da prxima pgina, como por exemplo as DIVISIONS, os pargrafos da PROCEDURE
DIVISION, etc. Deve estar em uma linha em branco.
Exemplo:
----+-*A-1-B--+----2----+----3----+----4----+----5----+----6----+----7--|-+----8
/
......*----------------------------------------------------------------*
.......PROCEDURE
................
..DIVISION.
......*----------------------------------------------------------------*
Margem A Colunas de 8 a 11
Posio a partir da qual se escrevem o nome de Diviso, Seo, Pargrafo e
os nveis FD (FILE DESCRIPTION), 01 (grupo de variveis) e 77 (varivel individual).
----+-*A-1-B--+----2----+----3----+----4----+----5----+----6----+----7--|-+----8
......*----------------------------------------------------------------*
.......DATA............................
DIVISION.
......*----------------------------------------------------------------*
.......FILE....... ....... ....... ....
SECTION.
.......WORKING-STORAGE....... .........
SECTION.
Margem B Colunas de 12 a 72
Posio a partir da qual se escrevem os valores dos pargrafos e as instrues
COBOL.
----+-*A-1-B--+----2----+----3----+----4----+----5----+----6----+----7--|-+----8
......*--------------------------------------------------------------* x
.......PROCEDURE
DIVISION.
x
......*--------------------------------------------------------------* x
.......000-GPAZ9901.
x
...........PERFORM 010-INICIALIZAR
x
...........PERFORM 030-PROCESSAR
x
UNTIL WS-FIM = "S"
x
...........PERFORM 050-TERMINO
x
...........STOP RUN
x
............
x
EJECT igual a / (barra), indica, para a impressora que deve fazer um salto de
pgina. Pode estar na margem A ou B.
Exemplo:
----+-*A-1-B--+----2----+----3----+----4----+----5----+----6----+----7--|-+----8
EJECT
......*----------------------------------------------------------------*
.......PROCEDURE
................
..DIVISION.
......*----------------------------------------------------------------*
EJECT
www.grandeporte.com.br
Parte 3
www.grandeporte.com.br
Parte 3
Teoria
As 4 divises
IDENTIFICATION DIVISION.
Esta a DIVISION de identificao do programa. No contm SECTIONs, mas
somente alguns pargrafos pr-estabelecidos e opcionais. O nico pargrafo
obrigatrio o PROGRAM-ID (Identificao do Programa). A identificao do
programa deve ser uma palavra com at 8 caracteres (letras ou nmeros), comeando
por uma letra, que ser usado no processo de linkedio para identificar o programa e
nomear o programa objeto. Possui a seguinte estrutura.
----+-*A-1-B--+----2----+----3----+----4----+----5----+----6----+----7--|-+----8
*--------------------------------------------------------------*
IDENTIFICATION
DIVISION.
*--------------------------------------------------------------*
PROGRAM-ID.
GPNENN01.
AUTHOR.
COMENTARIO.
DATE-WRITTEN.
COMENTARIO.
DATE-COMPILED.
SE PRESENTE, O COMPILADOR PREENCHE.
SECURITY.
COMENTARIO.
www.grandeporte.com.br
Parte 3
ENVIRONMENT DIVISION.
Esta DIVISION descreve os computadores e os arquivos usados pelo programa.
Possui duas SECTIONs e sua estrutura a seguinte:
----+-*A-1-B--+----2----+----3----+----4----+----5----+----6----+----7--|-+----8
*----------------------------------------------------------------*
ENVIRONMENT
DIVISION.
*----------------------------------------------------------------*
CONFIGURATION
SECTION.
*----------------------------------------------------------------*
SOURCE-COMPUTER.
COMENTARIO.
OBJECT-COMPUTER.
COMENTARIO.
SPECIAL-NAMES.
DECIMAL-POINT IS COMMA.
*----------------------------------------------------------------*
INPUT-OUTPUT
SECTION.
*----------------------------------------------------------------*
FILE-CONTROL.
SELECT CADALUNO ASSIGN TO UT-S-CADALUNO
FILE STATUS IS FS-CADALUNO.
SELECT RELATO ASSIGN TO UT-S-RELATO
FILE STATUS IS FS-RELATO.
CONFIGURATION SECTION.
Esta SECTION destina-se a uma descrio geral do ambiente do computador.
Ela composta por trs pargrafos: SOURCE-COMPUTER, OBJECT-COMPUTER e
SPECIAL-NAMES.
SOURCE-COMPUTER.
OBJECT-COMPUTER.
SPECIAL-NAMES.
INPUT-OUTPUT SECTION.
Esta SECTION destina-se a configurao dos arquivos. No pargrafo FILECONTROL, informando ao COBOL o nome interno e externo dos arquivos, bem como
a organizao dos registros, modo de acesso e varivel de FILE STATUS.
www.grandeporte.com.br
10
Parte 3
DATA DIVISION.
a DIVISION do programa onde so definidos os layout dos arquivos
(registros e campos), variveis e constantes e dados passados por outros programas.
A DATA DIVISION composta por trs SECTIONs:
FILE SECTION, WORKING-STORAGE SECTION e LINKAGE SECTION.
FILE SECTION.
A FILE SECTION a seo usada para detalhar o layout dos arquivos
(registros e campos). Os nveis usados so FD (FILE DESCRIPTION) para arquivo, 01
para registro e de 02 a 49 para campos. Exemplo:
----+-*A-1-B--+----2----+----3----+----4----+----5----+----6----+----7--|-+----8
*----------------------------------------------------------------*
FILE
SECTION.
*----------------------------------------------------------------*
FD CADALUN
LABEL RECORD STANDARD
BLOCK CONTAINS 0 RECORDS
RECORDING MODE IS F
RECORD CONTAINS 97 CHARACTERS
DATA RECORD IS REG-CADALUN
.
01 REG-CADALUN.
05 CLASSE-E
PIC X(03).
05 NUM-E
PIC X(03).
05 NOME-E
PIC X(40).
05 ENDE-E
PIC X(40).
05 NOTA1-E
PIC 99V99 COMP-3.
05 NOTA2-E
PIC 99V99 COMP-3.
05 NOTA3-E
PIC 99V99 COMP-3.
05 IDADE-E
PIC 9(02).
FD
01
RELATO
LABEL RECORD OMITTED
RECORDING MODE IS F
RECORD CONTAINS 80 CHARACTERS
DATA RECORD IS REG-RELATO
.
REG-RELATO
www.grandeporte.com.br
PIC X(80).
11
Parte 3
WORKING-STORAGE SECTION.
05
05
10
05
10
10
10
10
10
15 15 15 15 15 15 15 15
www.grandeporte.com.br
12
Parte 3
NIVEL
O nvel um nmero variando de 01 a 49 que define a hierarquia da varivel
em relao as outra variveis. Em COBOL pode-se agrupar as variveis e concatenlas formando hierarquias como no exemplo abaixo:
WS-DATA-SISTEMA
WS-ANO
WS-MES
WS-DIA
WS-DATA-SISTEMA
WS-ANO
WS-MES
WS-DIA
NOME DA VARIVEL
Qualquer nome de varivel pode ter no mximo 30 caracteres, incluindo letras,
nmeros e hfen, sendo que pelo menos um dos caracteres deve ser letra e no pode
comear ou terminar por hfen. Quando uma varivel criada na DATA DIVISION no
for referenciada em nenhum comando do programa, no ser necessrio criar um
nome de varivel para ela, e neste caso usa-se a palavra FILLER.
A palavra FILLER o nome padro para identificar variveis annimas.
www.grandeporte.com.br
Parte 3
13
FORMATO DA VARIVEL
O formato das variveis em COBOL especificado pela palavra reservada
PICTURE, ou pela sua abreviao PIC. Os formatos so descritos usando uma das 3
letras seguintes:
A
9
X
WS-CONTADOR
PIC 99999.
WS-CONTADOR
PIC 9(05).
WS-VALOR-PROD
PIC 99999V99.
77
WS-VALOR-PROD
PIC 9(05)V99.
77
WS-VALOR-PROD
PIC 9(05)V9(02).
ou
ou
www.grandeporte.com.br
14
Parte 3
VALOR INICIAL (VALUE)
Esta clusula opcional em COBOL. Seu objetivo definir um valor para a
varivel quando o programa se inicia. Se ela for omitida, a varivel correspondente
ter valores imprevisveis (lixo de memria). No caso de variveis que sero usadas
como contadores ou acumuladores, conveniente que eles comecem com o valor
zero.
Em COBOL existem 2 tipos de constantes: numrica e alfanumrica.
As constantes numricas so escritas colocando-se diretamente o valor na
instruo. Exemplo:
----+-*A-1-B--+----2----+----3----+----4----+----5----+----6----+----7--|-+----8
77 WS-IDADE-MINIMA
PIC 9(02)
VALUE 18.
SPACE
SPACES
LOW-VALUE
LOW-VALUES
HIGH-VALUE
HIGH-VALUES
QUOTE
QUOTES
www.grandeporte.com.br
15
Parte 3
LINKAGE SECTION.
ou
----+-*A-1-B--+----2----+----3----+----4----+----5----+----6----+----7--|-+----8
*----------------------------------------------------------------*
* RECEBENDO DADOS DO PROGRAMA PRINCIPAL
*----------------------------------------------------------------*
LINKAGE
SECTION.
*----------------------------------------------------------------*
01 LS-DADOS-RECEBIDOS.
XXXX
05 LS-NUMERO-CPF PIC X(11).
XXXX
05 LS-RESULTADO PIC X(03).
*----------------------------------------------------------------*
PROCEDURE DIVISION USING LS-DADOS-RECEBIDOS.
*----------------------------------------------------------------*
PROGRAMA PRINCIPAL
SUB-PROGRAMA
www.grandeporte.com.br
16
Parte 3
PROCEDURE DIVISION.
Esta diviso controla a execuo do programa, onde colocamos os
comandos oriundos do algoritmo planejado pelo programador. Os comandos
(instrues) do COBOL so formados por um nico verbo da lngua inglesa, seguido
dos parmetros necessrios, e que sero discutidos um a um nos pargrafos
seguintes. As instrues de um programa COBOL podem ser reunidas em pargrafos,
e estes em sees, definidas pelo programador com o fim de tornar o programa mais
fcil de ser entendido. Exemplo:
----+-*A-1-B--+----2----+----3----+----4----+----5----+----6----+----7--|-+----8
*--------------------------------------------------------------*
PROCEDURE
DIVISION.
*--------------------------------------------------------------*
0000-GPXXNN02.
PERFORM 1000-INICIALIZAR
PERFORM 2000-PROCESSAR
UNTIL WS-FIM = "S"
PERFORM 3000-TERMINO
STOP RUN
.
1000-INICIALIZAR.
MOVE 0
MOVE 0
MOVE "N"
PERFORM 1500-LER-SYSIN
.
1500-LER-SYSIN.
ACCEPT WS-TAB FROM SYSIN
IF WS-TAB = 0
MOVE "S"
ELSE
ADD 1 TO WS-CTLIDO
END-IF
.
2000-PROCESSAR.
PERFORM 2500-IMPRIME-TABUADA
UNTIL WS-CONT = 10
MOVE 0
PERFORM 1500-LER-SYSIN
.
TO WS-CONT
TO WS-CTLIDO
TO WS-FIM
TO WS-FIM
TO WS-CONT
2500-IMPRIME-TABUADA.
ADD 1 TO WS-CONT
COMPUTE WS-PROD = WS-CONT * WS-TAB
DISPLAY WS-TAB " X " WS-CONT " = " WS-PROD
.
3000-TERMINO.
DISPLAY "TOTAL DE REGISTROS LIDOS = " WS-CTLIDO
DISPLAY "TERMINO NORMAL DO GPXXNN02"
.
www.grandeporte.com.br
17
Parte 3
Boas prticas
Teoria
de programa o
INDENTAO
Indentao (recuo, neologismo derivada da palavra em ingls indentation,
tambm se encontra as formas identao e endentao) um termo aplicado ao
cdigo fonte de um programa para indicar que os termos hierarquicamente dispostos
tm o mesmo avano relativamente a sua posio.
O objetivo da indentao alinhar comandos, de forma que fique mais fcil ao
programador que estiver analisando o cdigo, visualizar e, por decorrncia, entender o
conjunto de instrues. Algumas instrues trabalham com subconjuntos (blocos) de
(outras) instrues; por meio da indentao colocam-se instrues que faam parte de
um mesmo bloco num mesmo alinhamento.
O caso mais comum o das instrues de teste (IF), onde normalmente existe
pelo menos um bloco de instrues que deve ser executado quando a condio
testada for satisfeita e, opcionalmente, outro bloco de instrues que devem ser
executadas quando a condio testada no for satisfeita, exemplo:
IF condicao
bloco para condio satisfeita
ELSE
bloco para condio no satisfeita
END-IF
Deslocar os blocos algumas posies direita (trs posies), para que fiquem
destacados facilita a sua visualizao. O ELSE e o END-IF ficam alinhados com o IF,
facilitando a anlise do cdigo fonte.
Se o primeiro bloco fosse:
A = (B * C ) ** 4
C = A / 0.005
(B * C ) ** 4
A / 0.005
(B * C ) ** 5
A / 0.015
www.grandeporte.com.br
18
Parte 3
Ficaria mais difcil analisar do que se houvesse sido especificado com
indentao:
IF condicao
COMPUTE A
COMPUTE C
ELSE
COMPUTE A
COMPUTE C
END-IF
= (B * C ) ** 4
= A / 0.005
= (B * C ) ** 5
= A / 0.015
www.grandeporte.com.br
Parte 3
19
Colunas 44 e 52
H uma prtica de programao na maioria dos ambientes de desenvolvimento
COBOL Mainframe que o uso das colunas 44 e 52 para sempre colocar certas
instrues.
Na COLUNA 44 escrevemos DIVISION, SECTION, PIC, TO do MOVE
Na COLUNA 52 escrevemos VALUE
Exemplo:
----+-*A-1-B--+----2----+----3----+----4----+----5----+----6----+----7--|-+----8
DATA
DIVISION.
WORKING-STORAGE
SECTION.
77 WS-PRECO
PIC 9(06)V99
VALUE ZERO.
77 WS-TEXTO
PIC X(30)
VALUE
CONTATE O ANALISTA RESPONSAVEL.
www.grandeporte.com.br
TO WS-MSG-ERRO
TO WS-AVISO
20
Parte 3
Exemplo de Constantes Numricas:
----+-*A-1-B--+----2----+----3----+----4----+----5----+----6----+----7--|-+----8
COMPUTE WS-AREA = 3.14159 * WS-RAIO ** 2
COMPUTE WS-LUCRO = ((WS-P-VENDA / WS-P-COMPRA) 1) * 100
www.grandeporte.com.br
Parte 3
21
Medida de informaco
,
Teoria
BIT
NIBBLE
BYTE
www.grandeporte.com.br
22
Parte 3
Mltiplos do BYTE
A unidade de medida fundamental da informao o bit, acrnimo de binary
digit (digito binrio), cujo smbolo b. Um agrupamento de 8 bits formam um Byte,
acrnimo de Binary Term (Termo Binrio), smbolo B.
Tradicionalmente, utilizam-se os prefixos do Sistema Internacional (SI) de
Medidas para se medir os mltiplos do Byte, com a utilizao de potncia de 2 no
lugar de potncia de 10 (que seria o correto). Porm em 1998 o IEC (International
Electrotechnical Commission) criou nomes e smbolos prprios para a rea que lida
com o processamento e transmisso de dados, mas ainda so poucos utilizados. As
tabelas abaixo exibem estes prefixos:
Nome SI
Kilobyte
Smbolo SI
kB
06
Megabyte
MB
10 = 1. 000. 000
Gigabyte
GB
Terabyte
TB
Petabyte
PB
Exabyte
EB
Zettabyte
ZB
Yottabyte
YB
em uso
Kibibyte
KiB
210 = 1.024
Kilobyte
Mebibyte
MiB
220 = 1.048.576
Megabyte
Gibibyte
GiB
230 = 1.073.741.824
Gigabyte
Tebibyte
TiB
240 = 1.099.511.627.776
Terabyte
Pebibyte
Exbibyte
PiB
EiB
50
Petabyte
60
Exabyte
70
Zettabyte
2 = 1.125.899.906.842.624
2 = 1.152.921.504.606.846.976
Zebibyte
ZiB
2 = 1.180.591.620.717.411.303.424
Yobibyte
YiB
www.grandeporte.com.br
23
Parte 3
3
NOOOOOOSSA!!!
1024
B
KiB
MiB
GiB
TiB
PiB
EiB
ZiB
YiB
1024
1000
1024
1000
1024
1000
1024
1000
1024
1000
1024
1000
1024
1000
1024
1000
www.grandeporte.com.br
B
kB
MB
GB
TB
PB
EB
ZB
YB
1000
1000
1000
1000
1000
1000
1000
1000
24
Parte 3
Sistemas de numeraco
,
Teoria
Decimal
Utiliza 10 smbolos: 0, 1, 2, 3, 4, 5, 6, 7, 8 e 9.
um sistema posicional, onde a posio a esquerda vale 10 vezes o valor da
posio da direita.
103
102
101
100
Exemplo:
7 4 1 8
100 . 8 =
1 . 8
101 . 1 =
10 . 1
10
102 . 4 = 100 . 4
400
103 . 7 = 1000 . 7
= 7000
7418
Binrio
Utiliza 2 smbolos: 0 e 1.
23
22
21
20
Exemplo:
1 0 1 1
20 . 1 = 1 . 1
= 1
21 . 1 = 2 . 1
= 2
22 . 0 = 4 . 0
= 0
23 . 1 = 8 . 1
= 8
11
www.grandeporte.com.br
25
Parte 3
Hexadecimal
Utiliza 16 smbolos: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B, C, D, E e F.
Os smbolos alfabticos valem 10 (A), 11 (B), 12 (C), 13 (D), 14 (E) e 15 (F).
163
162
161
160
Exemplo:
B 1 F E
160 . E =
1 . 14
14
161 . F =
16 . 15
240
256
162 . 1 = 256 .
163 . B = 4096 . 11
= 45056
45566
4
8
www.grandeporte.com.br
0000
0001
0010
0011
0100
0101
0110
0111
1000
1001
1010
1011
1100
1101
1110
1111
26
Parte 3
Representaco
de
,
nmeros no cobol
Teoria
www.grandeporte.com.br
27
Parte 3
Exemplo 3: O nmero -7418 em zonado PIC S9(4) fica:
Observe que:
F(16) = 1111(2)
C(16) = 1100(2)
D(16) = 1101(2)
NEUTRO
POSITIVO
NEGATIVO
Quando utilizamos nmeros sinalizados como, por exemplo, PIC S9(03), o sinal
representado por um smbolo colocado no lugar do dgito menos significativo (mais a
direita) do nmero. H smbolos para os nmeros positivos e negativos, como mostra
a tabela abaixo:
Nmero
0
1
2
3
4
5
6
7
8
9
Positivo
{
A
B
C
D
E
F
G
H
I
Negativo
}
J
K
L
M
N
O
P
Q
R
www.grandeporte.com.br
28
Parte 3
AT
S9(04) COMP
S9(09) COMP
S9(18) COMP
BYTES
2
4
8
VALORES
-32768 a + 32767
-2.147.483.648 a + 2.147.483.647
Valores com ate 18 algarismos
Exemplo 1: para armazenar o nmero 245 binrio, PIC 9(4) COMP, fazemos:
a) Converter 245 para binrio
245(10) = 1111 0101(2)
b) PIC 9(4) COMP ocupa 2 bytes
0000
0000
1111
0101
www.grandeporte.com.br
29
Parte 3
00F5
DISPLAY
WRITE
F0F2F4F5
00F5
0245
b 5
Exemplo 2: para armazenar o nmero +245 em binrio, PIC S9(4) COMP, fazemos:
a) Converter 245 para binrio:
245(10) = 1111 0101(2)
b) PIC S9(4) COMP ocupa 2 bytes, deixando o bit mais significativo (o da
esquerda) reservado para o sinal (0 positivo e 1 negativo).
bit do sinal
c) Colocar 1111 0101(2) na varivel, da direita para a esquerda, preenchendo com
zeros os bits esquerda.
0 000
0000
1111
0101
bit do sinal
www.grandeporte.com.br
30
Parte 3
d) Converter cada nibble para hexadecimal.
00 F5(16)
e) O comando DISPLAY O comando DISPLAY converte o formato do nmero
binrio para zonado e s ento o exibe, buscando os caracteres
correspondentes ao nmero hexadecimal na tabela EBCDIC.
O comando WRITE no converte o formato do nmero, gravando no arquivo os
caracteres correspondentes ao nmero hexadecimal na tabela EBCDIC.
00F5
DISPLAY
WRITE
F0F2F4C5
00F5
024E
b 5
Exemplo 3: para armazenar o nmero -245 em binrio, PIC S9(4) COMP, fazemos:
a) Converter o mdulo de -245 para binrio.
|-245(10)| = 245(10) = 1111 0101(2)
b) PIC S9(4) COMP ocupa 2 bytes, deixando o bit mais significativo (o da
esquerda) reservado para o sinal (0 positivo e 1 negativo).
bit do sinal
c) Colocar 1111 0101(2) na varivel preenchendo com zeros esquerda.
1 000
0000
1111
0101
bit do sinal
www.grandeporte.com.br
31
Parte 3
d) Inverter os dgitos, todo 1 vira 0 e todo 0 vira 1 (no mexer no sinal).
1 111
1111
0000
1010
bit do sinal
e) Somar 1 ao nmero invertido (no mexer no sinal)
1 111
1111
0000
1011
bit do sinal
f)
FF0B
DISPLAY
WRITE
F0F2F4D5
FF0B
024N
b b
E o COMP-4 ?
32
Parte 3
Para simplificar :
Dividir a quantidade de
dgitos por 2, ignorar as casas
decimais e somar 1 no final.
www.grandeporte.com.br
Parte 3
33
02012F
DISPLAY
WRITE
F2F0F1F2
02012F
2012
www.grandeporte.com.br
b b b
34
Parte 3
02012C
DISPLAY
WRITE
F2F0F1C2
02012C
201B
www.grandeporte.com.br
b b b
Parte 3
35
02012D
DISPLAY
WRITE
F2F0F1D2
02012D
201K
www.grandeporte.com.br
b b b
36
Parte 3
MSCARA DE EDICO
,
Teoria
Som na caixa
cara de pau !
Os smbolos usados
para fazer qualquer
mscara so:
+ - *
9 0 B
Z $ .
CR DB ,
www.grandeporte.com.br
Parte 3
9
Z
0
B
CR
DB
37
VALOR
MSCARA
VALOR EXIBIDO
Exibe o valor numrico com zeros esquerda
0012
9(4)
0012
Suprime todos os zeros esquerda de um nmero nas posies em que exista esse caractere.
2345
ZZ99
2345
0321
ZZ99
X321
0032
ZZ99
XX32
0000
ZZ99
XX00
usado na posio mais esquerda do PIC e insere esse sinal esquerda do valor numrico.
Mais de um smbolo $ desloca o smbolo para o lado esquerdo do dgito mais significativo.
2345
$ZZ99
$2345
0032
$ZZ99
$XX32
0054
$$99
$54
0054
$$$$ZZ9
$X54
Pode ser colocado direita ou esquerda do valor absoluto do nmero. O sinal acompanha o
sinal interno do valor numrico, s aparecendo no resultado se o valor interno da memria
concordar com o sinal indicado pela edio. Caso contrrio aparecer o sinal interno do valor do
nmero ou espao se o valor for positivo. Mais de um smbolo + ou - desloca o smbolo para o
lado esquerdo do dgito mais significativo.
+5435
+9(4)
+5435
+5435
9(4)
5435
-3212
9(4)3212-3212
+9(4)
-3212
+3212
-9(4)
3212
-5432
----99
-5432
-0054
----99
-54
+0054
----99
54
-0023
+++99
-23
Insere uma vrgula na posio indicada. A vrgula que precede zeros esquerda no exibida.
5499
$99,99
$54,99
0078
Z,ZZZ
X X78
033V55
$ZZ9,99
$X33,55
Nas posies dos zeros esquerda do nmero possvel inserir asteriscos que servem para
proteo de valores em cheques.
543275
$**9999,99
$**5432,75
5432
**99
5432
0032
**99
**32
0000
****
espao em branco
0000
**99
**00
1234v56
$*****9,99
$**1234,56
Insere um algarismo zero ou espao em branco na posio indicada pelo smbolo 0 ou B
5432
99BB99
54XX32
5432
990099
540032
12JUN08
XXBXXXBXX
12XJUNX08
Insere um ponto real ou explcito na posio correspondente ao ponto decimal implcito do
valor numrico ou insere um ponto na posio indicada em contedo alfanumrico ou
alfabtico.
5432
$9999.
$5432.
0009
$ZZ.ZZ
$X9.00
87V65
ZZ9.99
X87.65
Representam Crdito ou Dbito e devem ser usados na posio mais direita do PICTURE. Se o
valor do item for negativo, o sinal usado ser impresso. Se for positivo, nada aparecer.
-5432
$99,99CR
$54,32CR
-5432
$99,99DB
$54,32DB
+5432
$99,99CR
$54,32
www.grandeporte.com.br
38
Parte 3
Teoria
Comandos complementares
DAY A varivel receptora deve ser PIC 9(05). O formato da data YYDDD
(data Juliana). 11/07/2008 ser expresso como 08193. No exemplo acima, a varivel
WS-DATA-JULIANA deve ter o seguinte LAYOUT.
----+-*A-1-B--+----2----+----3----+----4----+----5----+----6----+----7--|-+----8
01 WS-DATA-JULIANA.
05 WS-ANO-J
PIC 9(02).
05 WS-DIA-J
PIC 9(03).
www.grandeporte.com.br
39
Parte 3
TIME A varivel deve ser PIC 9(08). O formato da hora HHMMSSCC (hora,
minuto, segundo, centsimos). 11:20:13 da manh ser expresso como 11201300. No
exemplo acima, a varivel WS-HORA-COMPLETA deve ter o seguinte LAYOUT.
----+-*A-1-B--+----2----+----3----+----4----+----5----+----6----+----7--|-+----8
01 WS-HORA-COMPLETA.
05 WS-HORA
PIC 9(02).
05 WS-MINUTO
PIC 9(02).
05 WS-SEGUNDO
PIC 9(02).
05 WS-CENTESIMO
PIC 9(02).
WS-DATA-SISTEMA
WS-ANO
WS-DIA
WS-MES
WS-DIA
WS-MES
/20
WS-ANO
WS-DATA-FORMATADA
www.grandeporte.com.br
40
Parte 3
Porm se for necessrio fazer referncia a uma das variveis que possuem o
mesmo nome, necessrio indicar a varivel de grupo a qual ela pertence. Exemplo:
----+-*A-1-B--+----2----+----3----+----4----+----5----+----6----+----7--|-+----8
DISPLAY WS-MES OF WS-DATA-SISTEMA
www.grandeporte.com.br
Parte 3
41
Practice
3
Atividade
b) 67 GiB
www.grandeporte.com.br
42
Parte 3
b) 7.146.825.580.544 B
b) 1 TB
www.grandeporte.com.br
43
Parte 3
PIC
PIC
PIC
PIC
PIC
PIC
PIC
PIC
PIC
9(4)
S9(3)
S9(2)
9(4)
S9(4)
S9(4)
9(4)
S9(3)
S9(4)
VALUE 123
VALUE -56
VALUE +84
COMP
VALUE 810
COMP
VALUE +38
COMP
VALUE -129
COMP-3 VALUE 230
COMP-3 VALUE +432
COMP-3 VALUE -432
(
(
(
(
(
(
(
(
(
)
)
)
)
)
)
)
)
)
432C
00432D
F0F5D6
00230F
F8C4
FF7F
F0F1F2F3
0026
032A
www.grandeporte.com.br
44
Parte 3
5) O que ser exibido na SYSOUT quando o nmero -140,57 for movido para variveis
com as seguintes mscaras:
a) PIC 9(3)
_____________________________________
b) PIC 9(5)V99
_____________________________________
c) PIC S9(2)
_____________________________________
d) PIC S9(4)V99
_____________________________________
e) ZZZZ9,99
_____________________________________
f) $ZZ.ZZ9,99
_____________________________________
g) $$$.$$9,99
_____________________________________
h) ---.--9,99
_____________________________________
i) +++.++9,99
_____________________________________
j) $**.**9,99
_____________________________________
k) 990099,0099
_____________________________________
l) 99BB99,BB99
_____________________________________
m) $ZZ.ZZ9,99CR
_____________________________________
n) $ZZ.ZZ9,99DB
_____________________________________
www.grandeporte.com.br
Parte 3
45
SYSIN
PGM0001
PRDSEQM
FILE-CONTROL.
b)
PRDSEQV
PGM0002
PRDSEQM
FILE-CONTROL.
www.grandeporte.com.br
46
Parte 3
c)
OLDCLI
MOVCLI
PGM0003
NEWCLI
RELOCOR
FILE-CONTROL.
www.grandeporte.com.br
Parte 3
Atividade
47
Prtica de laboratrio
www.grandeporte.com.br
48
Parte 3
Atividade
Prtica de laboratrio
E o calendrio
ASTECA!?
www.grandeporte.com.br
Parte 3
49
3
Todos Juntos
PROJETO 2
Layout da SYSOUT
1
2
3
4
5
12345678901234567890123456789012345678901234567890
*********************************************
*
SIMULACAO DE EMPRESTIMO
*
*********************************************
NUMERO DA SIMULACAO.......: 9999
VALOR DO EMPRESTIMO.......: R$
ZZZ.ZZ9,99
JUROS.....................: Z9,99% A.M.
QTDE. DE PARCELAS.........: Z9
VALOR DA PARCELA..........: R$
ZZZ.ZZ9,99
VALOR TOTAL...............: R$ Z.ZZZ.ZZ9,99
*********************************************
1
2
3
4
5
12345678901234567890123456789012345678901234567890
==================================================
TOTAL DE SIMULACOES LIDAS............: ZZZ9
TOTAL DE SIMULACOES PROCESSADAS......: ZZZ9
TEMPO TOTAL DE PROCESSAMENTO.........: HH:MM:SS:CC
==================================================
==
TERMINO NORMAL DO GPXXNN02
==
==================================================
www.grandeporte.com.br
50
Parte 3
Observao
Manuteno em programas uma atividade comum em um ambiente de
desenvolvimento mainframe. Execute os passos abaixo (Lembre-se de que XXNN
o seu prefixo de usurio):
1) Copie o programa GPXXNN01 para GPXXNN02 em sua COBLIB. As
alteraes sero feitas nessa cpia.
2) Copie o membro EXECOB01 para EXECOB02 em sua JOBLIB. Altere o
nome do programa no parmetro PGM= para GPXXNN02.
3) Digite as manutenes solicitadas
4) Compile com o job COMPCOB e elimine os erros at obter MAXCC = 0
5) Execute o programa com o job EXECOB02. Compare o resultado com os
dos colegas.
www.grandeporte.com.br
Parte 3
51
www.grandeporte.com.br
52
Parte 3
Avaliao
Estou fera!
Fiz Certo!
Muito Bom
Bom
www.grandeporte.com.br
regular
ruim
Muito ruim
Parte
Verso 2.3.5
Parte 4
Preparation
Trocando Ideias
Reflexo
www.grandeporte.com.br
Parte 4
Presentation
Histria
fundamental dominar
a manipulao de arquivos em
COBOL, j que todos os dados
esto armazenados nesses
objetos.
www.grandeporte.com.br
Parte 4
Tipos de arquivos:
Sequencial e indexado
Teoria
REGISTRO
REGISTRO
REGISTRO
REGISTRO
IRG
REGISTRO
REGISTRO
IRG
REGISTRO
REGISTRO
REGISTRO
REGISTRO
IRG
REGISTRO
REGISTRO
REGISTRO
REGISTRO
REGISTRO
BOF
REGISTRO
EOF
www.grandeporte.com.br
IRG
REGISTRO
IRG
REGISTRO
IRG
REGISTRO
IRG
REGISTRO
IRG
REGISTRO
BOF
REGISTRO
EOF
Parte 4
DIRECT ACCESS - INDEXED O arquivo gravado em discos magnticos,
que permitem o acesso direto ao registro. Possui duas partes, INDEX e DATA. No
DATA ficam os registros de dados, e no INDEX fica um ndice que, com base em um
campo chave (RECORD KEY), aponta para o registro no DATA.
Teoria
Elementos de um arquivo
025200500000150
ARQUIVO
CAMPO
REGISTRO
www.grandeporte.com.br
Parte 4
Layout do arquivo
Teoria
Alfabtico A
Numrico 9
ESTOQUE
REG-ESTOQUE
Tipo e Tamanho
PIC X(04)
PIC X(25)
PIC 9(3)
PIC 9(3)
PIC 9(3)
PIC 9(4)V99
Descrio
Cdigo do produto
Descrio do produto
Quantidade em estoque
Quantidade mnima
Quantidade mxima
Preo do produto
www.grandeporte.com.br
Parte 4
Teoria
Tratamento de
arquivo sequencial
www.grandeporte.com.br
Parte 4
Teoria
Especifica o do arquivo
numero-do-sistema:
tipo-de-arquivo:
numero-do-dispositivo:
modo-de-acesso:
S = Sequencial
I = Indexado
R = Relativo
D = Dinmico
nome-externo:
www.grandeporte.com.br
10
Parte 4
Exemplo:
----+-*A-1-B--+----2----+----3----+----4----+----5----+----6----+----7--|-+----8
FILE-CONTROL.
SELECT ESTOQUE-PRODUTO ASSIGN TO SYS007-UT-3400-S-ESTOQUE
ORGANIZATION IS SEQUENTIAL
ACCESS MODE IS SEQUENTIAL
FILE STATUS IS FS-ESTOQUE-PRODUTO.
SIGNIFICADO
SUCCESSFUL COMPLETION
END OF FILE
OPEN, FILE NOT PRESENT
OPEN, FILE ATTRIB CONFLICTING
OPEN, FILE IS OPEN
CLOSE, FILE IS CLOSED
SEQUENTIAL READ WITHOUT POSITIONING
READING FILE NOT OPEN AS
WRITE
WITHOUT OPEN IO
INPUT/IO/EXTEND
PERMISSION NOT OK
www.grandeporte.com.br
11
Parte 4
Detalhamento do arquivo
Teoria
REGISTRO
REGISTRO
REGISTRO
REGISTRO
IRG
REGISTRO
REGISTRO
REGISTRO
REGISTRO
REGISTRO
IRG
REGISTRO
REGISTRO
REGISTRO
REGISTRO
REGISTRO
BOF
REGISTRO
EOF
www.grandeporte.com.br
12
Parte 4
O bloco de registros carregado para uma memria (Buffer) que uma fila
FIFO (First-in First-out) e os registros do Buffer so entregues, um a um, ao comando
READ. Quando o Buffer esvazia, um novo bloco de registro lido e carregado no
Buffer. Isso aumenta a velocidade de leitura do arquivo.
RECORDING MODE IS F indica que todos os registros sero gravados com o
mesmo tamanho. O F indica FIXED (fixo). uma clusula obrigatria.
RECORD CONTAINS NN CHARACTERS indica o tamanho do registro em
caracteres. Para se chegar a esse tamanho, preciso somar os campos que formam o
registro. No se soma o V (vrgula implcita). uma clusula opcional.
DATA RECORD IS REG-ESTOQUE-PRODUTO indica o nome do registro.
uma clusula opcional.
01 REG-ESTOQUE-PRODUTO. especifica o registro. 01 o nmero do nvel
do registro.
05 CODPROD PIC X(04). especifica o campo. 05 o nmero do nvel do
campo, que pode ser de 02 a 49.
necessrio observar com ateno o uso correto do ponto final na FILE
SECTION, como est demonstrado nos exemplos acima.
Teoria
Varivel espelho
www.grandeporte.com.br
13
Parte 4
Teoria
Manipula o do arquivo
CADCLI
CADCLI
PROGRAMA
RELCLI
possvel abrir todos os arquivos com um nico comando OPEN, como mostra
o exemplo abaixo.
----+-*A-1-B--+----2----+----3----+----4----+----5----+----6----+----7--|-+----8
XXXXXXXXXXXOPEN INPUT CADCLI
XXXXXXXXXXX XXXXXXX
MOVCLI
XXXXXXXXXXX
OUTPUT NEWCAD
XXXXXXXXXXX XXXXXXX
RELATO
www.grandeporte.com.br
14
Parte 4
A recomendao, porm, abrir um arquivo de cada vez e testar o FILE
STATUS para saber se houve sucesso ou no na operao. Exemplo:
----+-*A-1-B--+----2----+----3----+----4----+----5----+----6----+----7--|-+----8
XXXXXXXXXXXOPEN INPUT CADCLI
XxxxxxxxxxxIF FS-CADCLI NOT = 00
XXXXXXXXXXXXXXMOVE ERRO ABERTURA CADCLI
XXXXXXXXXXXXXXMOVE FS-CADCLI
XXXXXXXXXXXXXXGO TO 999-ERRO
XXXXXXXXXXXEND-IF
TO WS-MSG
TO WS-FS
READ
Faz a leitura do arquivo, obtendo o prximo registro lgico e carregando o
layout do arquivo e, se especificado no INTO, carrega tambm a varivel espelho. A
figura abaixo ilustra a movimentao dos dados do arquivo para os campos no layout
do arquivo e para a varivel espelho, declarada na WORKING-STORAGE SECTION.
O READ no apaga os registros do arquivo que est lendo, em outras palavras, ele faz
uma cpia do registro.
0,XXXXXFDxxCADCLI
XXXXXXXXXXXLABEL RECORD STANDARD
XXXXXXXXXXXBLOCK CONTAINS 0 RECORDS
XXXXXXXXXXXRECORDING MODE IS F
XXXXXXXXXXXRECORD CONTAINS 54 CHARACTERS
XXXXXXXXXXXDATA RECORD IS REG-CADCLI
XXXXXXXXXXX.
XXXXXXX01XXREG-CADCLI.
XXXXXXXXXX
lay-out
05 CODCLI
XXXXXXXXXX 05 NOMECLI
do arquivo
XXXXXXXXXX
05 CPFCLI
0100
PIC X(30).
PIC X(11).
36525415488
PIC X(09).
451547859
READ CADCLI
XXXXXXXXXX 05 RGCLI
PIC X(04).
XXXXXXX01XXWS-REG-CADCLI.
XXXXXXXXXX 05 WS-CODCLI
PIC X(04).
0100
XXXXXXXXXX 05 WS-NOMECLI
PIC X(30).
XXXXXXXXXX 05 WS-CPFCLI
PIC X(11).
36525415488
XXXXXXXXXX 05 WS-RGCLI
PIC X(09).
451547859
varivel
7355
0050ANA M
CADCLI
www.grandeporte.com.br
espelho
15
Parte 4
FILE STATUS 00
REGISTRO
REGISTRO
REGISTRO
REGISTRO
REGISTRO
REGISTRO
REGISTRO
BOF
REGISTRO
00 00 00 00 00 00 00 00
OPEN
EOF
10
46
READ
= 10
----+-*A-1-B--+----2----+----3----+----4----+----5----+----6----+----7--|-+----8
XXXXXXXXXXXREADXCADCLI INTO WS-REG-CADCLI
XXXXXXXXXXXXXXXXAT ENDXXXXXXMOVE S
TO WS-FIM-ARQ
XXXXXXXXXXXXXXXXXXXXXXXXXXXXDISPLAY ACABOU O ARQUIVO CADCLI
XXXXXXXXXXXXXXXXNOT AT ENDXXADD 1 TO WS-CTLIDO
XXXXXXXXXXXEND-READ
NOT = 10
----+-*A-1-B--+----2----+----3----+----4----+----5----+----6----+----7--|-+----8
XXXXXXXXXXXREADXCADCLI INTO WS-REG-CADCLI
XXXXXXXXXXXIF FS-CADCLI = 00
XXXXXXXXXXXXXXADD 1 TO WS-CTLIDO
XXXXXXXXXXXELSE
XXXXXXXXXXXXXXIF FS-CADCLI NOT = 10
XXXXXXXXXXXXXXXXXMOVE ERRO LEITURA CADCLI
TO WS-MSG
XXXXXXXXXXXXXXXXXMOVE FS-CADCLI
TO WS-FS
XXXXXXXXXXXXXXXXXGO TO 999-ERRO
XXXXXXXXXXXEND-IF
XXXXXXXXXXXEND-IF
www.grandeporte.com.br
16
Parte 4
WRITE
Faz a incluso de um registro lgico no arquivo. Os dados podem vir da
varivel espelho especificado na clusula FROM. O WRITE move os dados do layout
do arquivo para o arquivo fsico, portando o WRITE destrutivo, porm os dados
armazenados na varivel espelho no so apagadas.
0,XXXXXFDxxNEWCLI
XXXXXXXXXXXLABEL RECORD STANDARD
XXXXXXXXXXXBLOCK CONTAINS 0 RECORDS
XXXXXXXXXXXRECORDING MODE IS F
XXXXXXXXXXXRECORD CONTAINS 54 CHARACTERS
XXXXXXXXXXXDATA RECORD IS REG-NEWCLI
XXXXXXXXXXX.
XXXXXXX01XXREG-NEWCLI.
05 CODCLI-N
XXXXXXXXXX 05 NOMECLI-N
do arquivo
XXXXXXXXXX
05 CPFCLI-N
XXXXXXXXXX 05 RGCLI-N
PIC X(04).
0100
PIC X(30).
PIC X(11).
36525415488
PIC X(09).
451547859
Aps o
FROM, mas
antes do
WRITE
WRITE REG-NEWCLI
XXXXXXXXXX
lay-out
XXXXXXX01XXWS-REG-NEWCLI.
XXXXXXXXXX 05 WS-CODCLI-N
PIC X(04).
0100
XXXXXXXXXX 05 WS-CPFCLI-N
PIC X(11).
36525415488
XXXXXXXXXX 05 WS-RGCLI-N
PIC X(09).
451547859
varivel
0050ANA M
NEWCLI
www.grandeporte.com.br
espelho
17
Parte 4
0,XXXXXFDxxNEWCLI
XXXXXXXXXXXLABEL RECORD STANDARD
XXXXXXXXXXXBLOCK CONTAINS 0 RECORDS
XXXXXXXXXXXRECORDING MODE IS F
XXXXXXXXXXXRECORD CONTAINS 54 CHARACTERS
XXXXXXXXXXXDATA RECORD IS REG-NEWCLI
XXXXXXXXXXX.
XXXXXXX01XXREG-NEWCLI.
05 CODCLI-N
XXXXXXXXXX 05 NOMECLI-N
do arquivo
XXXXXXXXXX
05 CPFCLI-N
XXXXXXXXXX 05 RGCLI-N
PIC X(04).
PIC X(30).
PIC X(11).
PIC X(09).
WRITE REG-NEWCLI
XXXXXXXXXX
lay-out
APS
O
WRITE
4
XXXXXXX01XXWS-REG-NEWCLI.
XXXXXXXXXX 05 WS-CODCLI-N
PIC X(04).
0100
XXXXXXXXXX 05 WS-CPFCLI-N
PIC X(11).
36525415488
XXXXXXXXXX 05 WS-RGCLI-N
PIC X(09).
451547859
varivel
0100ANA PAULA DOS SANTOS SILVAXXXX36525415488451547859
0050ANA M
espelho
NEWCLI
----+-*A-1-B--+----2----+----3----+----4----+----5----+----6----+----7--|-+----8
XXXXXXXXXXXWRITEXREG-NEWCLI FROM WS-REG-NEWCLI
XXXXXXXXXXXIF FS-NEWCLI NOT = 00
XXXXXXXXXXXXXXXMOVE ERRO GRAVAVAO NEWCLI TO WS-MSG
XXXXXXXXXXXXXXXMOVE FS-CADCLI
TO WS-FS
XXXXXXXXXXXXXXXGO TO 999-ERRO
XXXXXXXXXXXEND-IF
Observe a diferena:
READ nome-lgico-arquivo
WRITE nome-registro
www.grandeporte.com.br
18
Parte 4
CLOSE
Fecha o arquivo especificado. Todos os arquivos abertos devem ser fechados.
possvel fechar todos os arquivos com um nico comando CLOSE, como mostra o
exemplo abaixo.
----+-*A-1-B--+----2----+----3----+----4----+----5----+----6----+----7--|-+----8
XXXXXXXXXXXCLOSE CADCLI MOVCLI NEWCLI
www.grandeporte.com.br
Parte 4
EXEMPLO
19
USO DE ARQUIVO
Objetivo do Programa
Calcular o salrio dos funcionrios com base no salrio hora e quantidade de
horas trabalhadas armazenadas no arquivo CADFUNC. Gravar o arquivo FOLHAPAG
com os dados do funcionrio e o seu salrio.
Exibir a quantidade de funcionrios lidos e gravados, bem como a soma do
salrio a ser pago.
Macro-Fluxo
CADFUNC
EEXXNN04
FOLHAPAG
Observao
O salrio do funcionrio obtido pela multiplicao do salrio hora pelas horas
trabalhadas. Esse resultado armazenado em varivel de trabalho. Um acumulador
usado para acumular os salrios dos funcionrios, que ser exibido na SYSOUT.
----+-*A-1-B--+----2----+----3----+----4----+----5----+----6----+----7--|-+----8
77 WS-SALARIO
PIC 9(06)V99.
77 WS-SOMASAL
PIC 9(09)V99.
COMPUTE WS-SALARIO = WS-QTDHRSTRAB-C * WS-VALORHORA-C
COMPUTE WS-SOMASAL = WS-SOMASAL + WS-SALARIO
www.grandeporte.com.br
20
Parte 4
Nome do Arquivo
Nome do Registro
Nome do Campo
CODFUNC-C
NOMEFUNC-C
VALORHORA-C
QTDHRSTRAB-C
CADFUNC
REG-CADFUNC
Tipo e Tamanho
X(05)
X(30)
9(02)V99
9(04)
Nome do Arquivo
Nome do Registro
Nome do Campo
CODFUNC-F
NOMEFUNC-F
SALARIO-F
FOLHAPAG
REG-FOLHAPAG
Tipo e Tamanho Descrio
X(05)
Cdigo do funcionrio
X(30)
Nome do funcionrio
9(06)V99
Salrio do funcionrio
Descrio
Cdigo do funcionrio
Nome do funcionrio
Valor por hora do funcionrio
Quantidade de horas trabalhadas
Layout da SYSOUT
1
2
3
4
5
12345678901234567890123456789012345678901234567890
**************************************************
TOTAL DE REGISTROS LIDOS.........: ZZZ9
TOTAL DE REGISTROS GRAVADOS......: ZZZ9
SOMA DE TODOS OS SALARIOS........: $ZZZ.ZZZ.ZZ9,99
**************************************************
JOB de Execuo
O arquivo de entrada CADFUNC est com o prefixo do seu instrutor, j o
arquivo FOLHAPAG est com o prefixo de seu usurio.
11234567892123456789312345678941234567895123456789612345678971234567898
12345678901234567890123456789012345678901234567890123456789012345678901234567890
//GPXXNN04 JOB SEUNOME,MSGCLASS=X,CLASS=C,NOTIFY=GPXXNN,TIME=(0,20)
//*****************************************************************
//STEP1
EXEC PGM=EEXXNN04
//STEPLIB DD DSN=GP.GERAL.LOADLIB,DISP=SHR
//CADFUNC DD DSN=GP.GPXX99.CADFUNC,DISP=SHR
//FOLHAPAG DD DSN=GP.GPXXNN.FOLHAPAG,DISP=(NEW,CATLG,DELETE),
//
SPACE=(TRK,(1,1),RLSE),UNIT=SYSALLDA,
//
DCB=(LRECL=43,RECFM=FB,DSORG=PS)
www.grandeporte.com.br
Parte 4
21
Programa COBOL
----+-*A-1-B--+----2----+----3----+----4----+----5----+----6----+----7--|-+----8
*----------------------------------------------------------------*
IDENTIFICATION
DIVISION.
*----------------------------------------------------------------*
PROGRAM-ID.
EEXXNN04.
AUTHOR.
SEUNOME.
*----------------------------------------------------------------*
ENVIRONMENT
DIVISION.
*----------------------------------------------------------------*
CONFIGURATION
SECTION.
SPECIAL-NAMES.
DECIMAL-POINT IS COMMA.
INPUT-OUTPUT
SECTION.
FILE-CONTROL.
SELECT CADFUNC ASSIGN
TO UT-S-CADFUNC
FILE STATUS IS FS-CADFUNC
.
SELECT FOLHAPAG ASSIGN
TO UT-S-FOLHAPAG
FILE STATUS IS FS-FOLHAPAG
.
*----------------------------------------------------------------*
DATA
DIVISION.
*----------------------------------------------------------------*
FILE
SECTION.
*----------------------------------------------------------------*
FD CADFUNC
LABEL RECORD IS STANDARD
BLOCK CONTAINS 0 RECORDS
RECORDING MODE IS F
RECORD CONTAINS 43 CHARACTERS
DATA RECORD IS REG-CADFUNC
.
01 REG-CADFUNC.
05 CODFUNC-C
PIC X(05).
05 NOMEFUNC-C
PIC X(30).
05 VALORHORA-C
PIC 9(02)V99.
05 QTDHRSTRAB-C
PIC 9(04).
*----------------------------------------------------------------*
FD
01
FOLHAPAG
LABEL RECORD IS STANDARD
BLOCK CONTAINS 0 RECORDS
RECORDING MODE IS F
RECORD CONTAINS 43 CHARACTERS
DATA RECORD IS REG-FOLHAPAG
.
REG-FOLHAPAG.
05 CODFUNC-F
05 NOMEFUNC-F
05 SALARIO-F
PIC X(05).
PIC X(30).
PIC 9(06)V99.
*----------------------------------------------------------------*
WORKING-STORAGE
SECTION.
*----------------------------------------------------------------*
* DECLARACAO DAS VARIAVEIS ESPELHO DOS ARQUIVOS
*----------------------------------------------------------------*
01 WS-REG-CADFUNC.
05 WS-CODFUNC-C
PIC X(05).
05 WS-NOMEFUNC-C
PIC X(30).
05 WS-VALORHORA-C
PIC 9(02)V99.
05 WS-QTDHRSTRAB-C
PIC 9(04).
01
WS-REG-FOLHAPAG.
05 WS-CODFUNC-F
05 WS-NOMEFUNC-F
05 WS-SALARIO-F
www.grandeporte.com.br
PIC X(05).
PIC X(30).
PIC 9(06)V99.
22
Parte 4
----+-*A-1-B--+----2----+----3----+----4----+----5----+----6----+----7--|-+----8
*----------------------------------------------------------------*
* VARIAVEIS DE FILE STATUS
*----------------------------------------------------------------*
77 FS-CADFUNC
PIC X(02).
77 FS-FOLHAPAG
PIC X(02).
*----------------------------------------------------------------*
* COLOCAR AS MENSAGENS EM VARIAVEIS EH UMA BOA PRATICA
*----------------------------------------------------------------*
77 WS-MSG01
PIC X(60)
VALUE
"ERRO ABERTURA CADFUNC".
77 WS-MSG02
PIC X(60)
VALUE
"ERRO ABERTURA FOLHAPAG".
77 WS-MSG03
PIC X(60)
VALUE
"ERRO LEITURA CADFUNC".
77 WS-MSG04
PIC X(60)
VALUE
"ERRO GRAVACAO FOLHAPAG".
77 WS-MSG05
PIC X(60)
VALUE
"ERRO FECHAMENTO CADFUNC".
77 WS-MSG06
PIC X(60)
VALUE
"ERRO FECHAMENTO FOLHAPAG".
*----------------------------------------------------------------*
* VARIAVEIS DE TRABALHO
*----------------------------------------------------------------*
77 WS-MSG
PIC X(60).
77 WS-FS
PIC X(02).
77
WS-CTLIDO
PIC 9(04)
COMP.
77
WS-CTGRAV
PIC 9(04)
COMP.
77
WS-SALARIO
77
WS-SOMASAL
*----------------------------------------------------------------*
* VARIAVEIS COM MASCARA DE EDICAO (FORMATADAS)
*----------------------------------------------------------------*
77 WS-CTGRAV-F
PIC ZZZ9.
77 WS-CTLIDO-F
PIC ZZZ9.
77 WS-SOMASAL-F
PIC $ZZZ.ZZZ.ZZ9,99.
*----------------------------------------------------------------*
PROCEDURE
DIVISION.
*----------------------------------------------------------------*
0000-EEXXNN04.
PERFORM 1000-INICIALIZAR
PERFORM 2000-PROCESSAR
UNTIL FS-CADFUNC = "10"
PERFORM 3000-TERMINO
STOP RUN
.
1000-INICIALIZAR.
MOVE 0
MOVE 0
MOVE 0
TO WS-CTLIDO
TO WS-CTGRAV
TO WS-SOMASAL
www.grandeporte.com.br
TO WS-MSG
TO WS-FS
Parte 4
23
----+-*A-1-B--+----2----+----3----+----4----+----5----+----6----+----7--|-+----8
OPEN OUTPUT FOLHAPAG
IF FS-FOLHAPAG NOT = "00"
MOVE WS-MSG02
MOVE FS-FOLHAPAG
GO TO 9000-ERRO
END-IF
TO WS-MSG
TO WS-FS
PERFORM 1500-LER-CADFUNC
.
1500-LER-CADFUNC.
READ CADFUNC INTO WS-REG-CADFUNC
IF FS-CADFUNC = "00"
COMPUTE WS-CTLIDO = WS-CTLIDO + 1
ELSE
IF FS-CADFUNC NOT = "10"
MOVE WS-MSG03
TO WS-MSG
MOVE FS-CADFUNC
TO WS-FS
GO TO 9000-ERRO
END-IF
END-IF
.
2000-PROCESSAR.
MOVE WS-CODFUNC-C
MOVE WS-NOMEFUNC-C
TO WS-CODFUNC-F
TO WS-NOMEFUNC-F
TO WS-SALARIO-F
TO WS-MSG
TO WS-FS
TO WS-CTLIDO-F
TO WS-CTGRAV-F
TO WS-SOMASAL-F
"=================================================="
"TOTAL DE REGISTROS LIDOS.........: " WS-CTLIDO-F
"TOTAL DE REGISTROS GRAVADOS......: " WS-CTGRAV-F
"SOMA DE TODOS OS SALARIOS........: " WS-SOMASAL-F
"=================================================="
CLOSE CADFUNC
IF FS-CADFUNC NOT = "00"
MOVE WS-MSG05
MOVE FS-CADFUNC
GO TO 9000-ERRO
END-IF
TO WS-MSG
TO WS-FS
CLOSE FOLHAPAG
IF FS-FOLHAPAG NOT = "00"
MOVE WS-MSG06
MOVE FS-FOLHAPAG
GO TO 9000-ERRO
END-IF
TO WS-MSG
TO WS-FS
www.grandeporte.com.br
24
Parte 4
----+-*A-1-B--+----2----+----3----+----4----+----5----+----6----+----7--|-+----8
9000-ERRO.
DISPLAY "=================================================="
DISPLAY "MENSAGEM....: " WS-MSG
DISPLAY "FILE STATUS.: " WS-FS
DISPLAY "=================================================="
DISPLAY "==
TERMINO ANORMAL DO PROGRAMA EEXXNN04
=="
DISPLAY "=================================================="
MOVE 12
TO RETURN-CODE
STOP RUN
.
www.grandeporte.com.br
Parte 4
Atividade
25
Trabalho em dupla
a)
FILE
Nome do Arquivo
Nome do Registro
Nome do Campo
CODPROD-O
DESCPROD-O
UNIDPROD-O
LOCALPROD-O
QTDEST-O
QTDMAX-O
QTDMIN-O
PRECOCOMPRA-O
PRECOVENDA-O
PERCOMIS-O
OLDPROD
REG-OLDPROD
Tipo e Tamanho
X(04)
X(20)
X(05)
X(05)
9(05)
9(05)
9(05)
9(06)V99 COMP-3
9(06)V99 COMP-3
9(02)V99 COMP-3
Descrio
Cdigo
Descrio
Unidade (caixa, litro, Kg, etc)
Localizao no estoque
Quantidade em estoque
Quantidade mxima em estoque
Quantidade mnima em estoque
Preo de Compra
Preo de Venda
Percentual de comisso
SECTION.
www.grandeporte.com.br
26
b)
Parte 4
Nome do Arquivo
Nome do Registro
Nome do Campo
CODPROD-1
DESCPROD-1
QTDEST-1
QTDMAX-1
QTDMIN-1
FILE
PRDTP1
REG-PRDTP1
Tipo e Tamanho
X(04)
X(20)
9(05) COMP
9(05) COMP
9(05) COMP
Descrio
Cdigo
Descrio
Quantidade em estoque
Quantidade mxima em estoque
Quantidade mnima em estoque
SECTION.
c)
Nome do Arquivo
Nome do Registro
Nome do Campo
CHAVE-O
AGENCIA-O
NUM-CONTA-O
NOME-O
SALDO-O
FILE
OLDCLI
REG-OLDCLI
Tipo e Tamanho
9(10)
9(10)
X(40)
S9(11)V99 COMP-3
Descrio
Chave de cliente
Nmero da agncia
Nmero da conta
Nome do cliente
Saldo do cliente
SECTION.
www.grandeporte.com.br
27
Parte 4
d)
Nome do Arquivo
Nome do Registro
Nome do Campo
CODCLI-SP
NOMECLI-SP
ENDCLI-SP
FONECLI-SP
CPFCLI-SP
RGCLI-SP
NASCCLI-SP
SEXOCLI-SP
CLISP
REG-CLISP
Tipo e Tamanho
X(04)
X(25)
X(30)
X(10)
X(11)
X(09)
X(08)
X(01)
FILE
Descrio
Cdigo
Nome
Endereo completo
Telefone com DDD
CPF
RG
Data Nasc. AAAAMMDD
Sexo M / F
SECTION.
Nome do Arquivo
Nome do Registro
Nome do Campo
CHAVE-O
AGENCIA-O
NUM-CONTA-O
NOME-O
SALDO-O
OLDCLI
REG-OLDCLI
Tipo e Tamanho
9(10)
9(10)
X(40)
S9(11)V99 COMP-3
WORKING-STORAGE
www.grandeporte.com.br
Descrio
Chave de cliente
Nmero da agncia
Nmero da conta
Nome do cliente
Saldo do cliente
SECTION.
28
b)
Parte 4
Nome do Arquivo
Nome do Registro
Nome do Campo
CODPROD-1
DESCPROD-1
QTDEST-1
QTDMAX-1
QTDMIN-1
PRDTP1
REG-PRDTP1
Tipo e Tamanho
X(04)
X(20)
9(05) COMP
9(05) COMP
9(05) COMP
WORKING-STORAGE
Descrio
Cdigo
Descrio
Quantidade em estoque
Quantidade mxima em estoque
Quantidade mnima em estoque
SECTION.
www.grandeporte.com.br
(
(
(
(
(
(
(
(
(
)
)
)
)
)
)
)
)
)
00
10
35
39
41
42
46
47
48
Parte 4
29
Performance
Todos Juntos
PROJETO 3
Macro-Fluxo
SIMUEMP
GPXXNN03
EMPAPROV
www.grandeporte.com.br
30
Parte 4
Observao
Layout da SYSOUT
1
2
3
4
5
12345678901234567890123456789012345678901234567890
**************************************************
* DATA GREGORIANA 1 - 99/99/2099
*
* DATA GREGORIANA 2 - 99 DE XXXXXXXXX DE 2099
*
* DATA JULIANA
999 DE 2099
*
* DIA DA SEMANA
XXXXXXXXXXXXX
*
**************************************************
1
2
3
4
5
12345678901234567890123456789012345678901234567890
==================================================
TOTAL DE SIMULACOES LIDAS............: ZZZ9
TOTAL DE SIMULACOES APROVADAS........: ZZZ9
TOTAL DE SIMULACOES REPROVADAS.......: ZZZ9
TEMPO TOTAL DE PROCESSAMENTO.........: HH:MM:SS:CC
==================================================
www.grandeporte.com.br
Parte 4
31
Nome do Arquivo
Nome do Registro
Nome do Campo
NUM-SIMULACAO-S
VAL-EMPRESTIMO-S
TX-JUROS-S
QTD-PARCELAS-S
SIMUEMP
REG-SIMUEMP
Tipo e Tamanho
9(04)
9(06)V99
9(02)V99
9(02)
Nome do Arquivo
Nome do Registro
Nome do Campo
NUM-SIMULACAO-E
VAL-EMPRESTIMO-E
TX-JUROS-E
QTD-PARCELAS-E
VALOR-PARCELA-E
TOTAL-EMP-E
EMPAPROV
REG-EMPAPROV
Tipo e Tamanho Descrio
9(04)
Nmero da simulao
9(06)V99
Valor do emprstimo
9(02)V99
Taxa de juros compostos ao ms
9(02)
Quantidade de parcelas
9(06)V99
Valor da parcela
9(07)V99
Valor total do emprstimo
Descrio
Nmero da simulao
Valor do emprstimo
Taxa de juros compostos ao ms
Quantidade de parcelas
www.grandeporte.com.br
32
Parte 4
Pargrafo 1500-LER-SIMUEMP
Ler registro do arquivo SIMUEMP carregando varivel espelho
Se file status for igual a 00 (sucesso)
Somar 1 ao contador de simulaes lidas
Seno
Se file status for diferente de 10 (fim de arquivo)
Mover mensagem de erro para varivel da rotina de erro
Mover file status para variveis da rotina de erro
Executar rotina de erro (9000-ERRO)
Pargrafo 2000-PROCESSAR
Se o valor do emprstimo for maior ou igual a R$ 100.000 e
o nmero de parcelas for maior ou igual a 50
somar 1 ao contador de simulaes reprovadas
Seno
Calcular o valor da parcela
Calcular o valor total do emprstimo
Mover os dados da varivel espelho do SIMUEMP
para a varivel espelho do EMPAPROV
Gravar o registro do EMPAPROV usando sua varivel espelho
Se file status for igual a 00 (sucesso)
Somar 1 ao contador de simulaes aprovadas
seno
Mover mensagem de erro para varivel da rotina de erro
Mover file status para variveis da rotina de erro
Executar rotina de erro (9000-ERRO)
Executar o pargrafo 1500-LER-SIMUEMP
Pargrafo 3000-TERMINO
Executar rotina 9000-IMPRIME-DATA
Fechar o arquivo SIMUEMP
Se file status for diferente de 00
Mover mensagem de erro para varivel da rotina de erro
Mover file status para variveis da rotina de erro
Executar rotina de erro (9000-ERRO)
Fechar o arquivo EMPAPROV
Se file status for diferente de 00
Mover mensagem de erro para varivel da rotina de erro
Mover file status para variveis da rotina de erro
Executar rotina de erro (9000-ERRO)
Receber o horrio final de processamento
Calcular o tempo de processamento
Exibir os contadores de simulaes lidas, aprovadas e reprovadas
Exibir o tempo total de processamento
www.grandeporte.com.br
Parte 4
33
Pargrafo 9000-ERRO
Exibir mensagem de erro
Exibir FILE STATUS
Mover +16 para a varivel do RETURN-CODE
Encerrar o programa
www.grandeporte.com.br
34
Parte 4
Avaliao
Estou fera!
Fiz Certo!
Muito Bom
Bom
www.grandeporte.com.br
regular
ruim
Muito ruim
Parte
um
pouco
mais
complicada,
especialmente se h mais de dois arquivos,
porque ns precisamos preservar a ordenao no
arquivo combinado. O algoritmo de MERGE
permite
juntar
dois
ou
mais
arquivos,
preservando a ordenao.
Verso 2.3.5
Parte 5
Preparation
Trocando Ideias
Reflexo
www.grandeporte.com.br
Parte 5
Presentation
Histria
COBOL a fundo
www.grandeporte.com.br
Parte 5
Teoria
Comandos complementares
EVALUATE
Compara o contedo de uma varivel ou mais variveis contra diversos valores
indicados, efetuando as instrues correspondentes. o chamado desvio condicional
mltiplo. Exemplo:
----+-*A-1-B--+----2----+----3----+----4----+----5----+----6----+----7--|-+----8
XXXXXXXXXXXEVALUATE WS-SIGLA-UF
XXXXXXXXXXXXXXWHEN SP DISPLAY
XXXXXXXXXXXXXXWHEN RJ DISPLAY
XXXXXXXXXXXXXXWHEN MG DISPLAY
XXXXXXXXXXXXXXWHEN AM DISPLAY
XXXXXXXXXXXXXXWHEN RR DISPLAY
XXXXXXXXXXXXXXWHEN OTHER DISPLAY
XXXXXXXXXXXEND-EVALUATE
SAO PAULO
RIO DE JANEIRO
MINAS GERAIS
AMAZONAS
RORAIMA
OUTRO ESTADO
----+-*A-1-B--+----2----+----3----+----4----+----5----+----6----+----7--|-+----8
XXXXXXXXXXXEVALUATE TRUE
XXXXXXXXXXXXXXWHEN WS-SALDO NOT < 0 AND NOT > 10000
XXXXXXXXXXXXXXXXXXXPERFORM 062-CLIENTE-COMUM
XXXXXXXXXXXXXXWHEN WS-SALDO > 10000 AND NOT > 20000
XXXXXXXXXXXXXXXXXXXPERFORM 064-CLIENTE-ESPECIAL
XXXXXXXXXXXXXXWHEN WS-SALDO > 20000
XXXXXXXXXXXXXXXXXXXPERFORM 066-CLIENTE-PRIME
XXXXXXXXXXXEND-EVALUATE
----+-*A-1-B--+----2----+----3----+----4----+----5----+----6----+----7--|-+----8
XXXXXXXXXXXEVALUATE
FUNCAO
ALSO
XXXXXXXWHEN VENDEDOR
ALSO
XXX
MOVE 100 TO TOTSUBSID
XXXXXXXWHEN VENDEDOR
ALSO
XXX
MOVE 75
TO TOTSUBSID
XXXXXXXWHEN SECRETARIA ALSO
XXX
MOVE 50
TO TOTSUBSID
XXXXXXXXXXXEND-EVALUATE
ESTCIVIL
CASADO
ALSO DEPENDENTES
ALSO
S
SOLTEIRO
ALSO
NOT S
CASADO
ALSO
NOT S
----+-*A-1-B--+----2----+----3----+----4----+----5----+----6----+----7--|-+----8
XXXXXXXXXXX
EVALUATE MEDIA
WHEN 90 THRU
WHEN 80 THRU
WHEN 70 THRU
WHEN 00 THRU
WHEN OTHER
END-EVALUATE
100
89
79
69
----+-*A-1-B--+----2----+----3----+----4----+----5----+----6----+----7--|-+----8
EVALUATE IDADE <= 19
WHEN TRUE
PERFORM R100-ROTINA-MENOR
WHEN FALSE
PERFORM R200-ROTINA-ADULTO
END-EVALUATE
----+-*A-1-B--+----2----+----3----+----4----+----5----+----6----+----7--|-+----8
* NESTE EVALUATE SE A VARIAVEL A VALER 1 OU 2 SERA EXECUTADO
* DISPLAY A
XXXXXXXXXXXEVALUATE A
XXXXXXXXXXXXXXWHEN 1
XXXXXXXXXXXXXXWHEN 2XXXXXXXXXXXXXXXDISPLAY A
XXXXXXXXXXXXXXWHEN 3XXXXXXXXXXXXXXXDISPLAY B
XXXXXXXXXXXEND-EVALUATE
www.grandeporte.com.br
Parte 5
CONTINUE ou NEXT SENTENCE
possvel escrever um IF onde s h instrues para executar se a condio
for FALSA. Neste caso preciso colocar abaixo do IF um dos seguintes comandos:
CONTINUE ou NEXT SENTENCE.
CONTINUE desvia o fluxo do processamento para a prxima instruo.
Exemplo:
----+-*A-1-B--+----2----+----3----+----4----+----5----+----6----+----7--|-+----8
XXXXXXXXXXXIF A > B
XXXXXXXXXXXXXXCONTINUE
XXXXXXXXXXXELSE
XXXXXXXXXXXXXXDISPLAY A
XXXXXXXXXXXEND-IF
XXXXXXXXXXXIF A > B
XXXXXXXXXXXXXXCONTINUE
XXXXXXXXXXXXXXDISPLAY B
XXXXXXXXXXXELSE
XXXXXXXXXXXXXXDISPLAY A
XXXXXXXXXXXEND-IF
XXXXXXXXXXXEVALUATE A
XXXXXXXXXXXXXXWHEN 1
XXXXXXXXXXXXXXWHEN 2
XXXXXXXXXXXXXXXXXXXCONTINUE
XXXXXXXXXXXXXXWHEN 3
XXXXXXXXXXXXXXXXXXXDISPLAY A
XXXXXXXXXXXEND-EVALUATE
XXXXXXXXXXXDISPLAY FIM DO EXEMPLO
XXXXXXX150-CALCULA-JUROS.
COMPUTE WS-JUROS = WS-CAPITAL * (1 + (WS-TAXA ** WS-PERIODO))
DISPLAY WS-JUROS
.
www.grandeporte.com.br
Parte 5
COPY
O comando COPY insere nos programas COBOL o contedo de membros de
arquivos particionados (PDS partitioned data set). Esses membros so chamados de
BOOKS.
As BOOKS podem conter descries de registros de arquivos ou rotinas
padronizadas que podem ser repetidas em muitos programas. Abaixo temos um
exemplo de cada.
----+-*A-1-B--+----2----+----3----+----4----+----5----+----6----+----7--|-+----8
*----------------------------------------------------------------*
*
BOOK DE ARQUIVO
- CADASTRO DE PRODUTOS
*
*
NOME DO BOOK
- CADPROD
*
*
NOME DO PDS
- GP.GPXXNN.BOOKLIB
*
*
NOME DO ARQUIVO
- CADPROD
*
*
TAMANHO DO REGISTRO - 69 BYTES
*
*----------------------------------------------------------------*
01 REG-CADPROD.
05 CODPROD
PIC X(04).
05 DESCPROD
PIC X(20).
05 UNIDPROD
PIC X(05).
05 LOCALPROD
PIC X(05).
05 QTDEST
PIC 9(05).
05 QTDMAX
PIC 9(05).
05 QTDMIN
PIC 9(05).
05 PRECOCOMPRA
PIC 9(06)V99.
05 PRECOVENDA
PIC 9(06)V99.
05 PERCOMIS
PIC 9(02)V99.
----+-*A-1-B--+----2----+----3----+----4----+----5----+----6----+----7--|-+----8
*----------------------------------------------------------------*
*
BOOK DE ROTINA
- 9000-ERRO
*
*
NOME DA BOOK
- ROTERRO
*
*
NOME DO PDS
- GP.GPXXNN.BOOKLIB
*
*
VARIAVEIS USADAS
- WS-MSG
PIC X(60).
*
*
WS-FS
PIC X(02).
*
*----------------------------------------------------------------*
9000-ERRO.
DISPLAY "*-------------------------------------------------*"
DISPLAY "*
TERMINO ANORMAL
*"
DISPLAY "*-------------------------------------------------*"
DISPLAY " MENSAGEM.......: " WS-MSG
DISPLAY " FILE STATUS....: " WS-FS
DISPLAY "*-------------------------------------------------*"
DISPLAY "* CONTATE COM BREVIDADE O ANALISTA RESPONSAVEL
*"
DISPLAY "*-------------------------------------------------*"
MOVE +16
TO RETURN-CODE
STOP RUN
.
www.grandeporte.com.br
Parte 5
Durante o processo de pr-compilao, todos os COPYs sero executados e o
contedo das books sero inseridas no programa fonte COBOL, para ento serem
passados ao compilador.
www.grandeporte.com.br
Parte 5
5
Observe a letra C colocada nas linhas que foram copiadas da BOOK. Isso
significa que seu programa fonte ficou maior. Quando ocorrer um erro, por exemplo,
na linha 100, preciso verificar nessa listagem do SPOOL (SD.ST ? S) onde est a
linha 100, pelo comando TOP; F 00100 e depois encontrar a linha correspondente em
seu programa fonte na COBLIB.
www.grandeporte.com.br
10
Parte 5
www.grandeporte.com.br
11
Parte 5
UNSTRING e STRING
A instruo UNSTRING separa o contedo de uma string em strings menores,
usando o espao em branco ou outra string qualquer, indicada entre aspas ou
apstrofes. Exemplo:
----+-*A-1-B--+----2----+----3----+----4----+----5----+----6----+----7--|-+----8
WORKING-STORAGE
SECTION.
77 WS-NOME-COMPLETO
PIC X(25).
77 WS-PRIMEIRO-NOME
PIC X(25).
77 WS-NOME-DO-MEIO
PIC X(25).
77 WS-ULTIMO-NOME
PIC X(25).
PROCEDURE
DIVISION.
000-LBSTR01.
MOVE 'GRACE MURRAY HOPPER'
TO WS-NOME-COMPLETO
UNSTRING WS-NOME-COMPLETO
DELIMITED BY SPACE
INTO WS-PRIMEIRO-NOME
WS-NOME-DO-MEIO
WS-ULTIMO-NOME
DISPLAY 'PRIMEIRO NOME
DISPLAY 'NOME DO MEIO
DISPLAY 'ULTIMO NOME
' WS-PRIMEIRO-NOME
' WS-NOME-DO-MEIO
' WS-ULTIMO-NOME
STOP RUN
.
DELIMITED
DELIMITED
DELIMITED
DELIMITED
DELIMITED
BY
BY
BY
BY
BY
SPACE
SIZE
SPACE
SIZE
SPACE
Outros exemplos:
----+-*A-1-B--+----2----+----3----+----4----+----5----+----6----+----7--|-+----8
XXXXXXXXXXSTRING TOTAL DE REGISTROS LIDOS =
WS-CTLIDO
XXXXXXXXXXXDELIMITED BY SIZE INTO WS-MENSAGEM1
STRING O ALUNO
WS-NOME-ALUNO
FOI
WS-SITUACAO
COM MEDIA FINAL DE
WS-MEDIA-FINAL
PONTOS.
DELIMITED BY SIZE INTO WS-FRASE-FATAL
www.grandeporte.com.br
12
Parte 5
Caso o tamanho da varivel receptora seja menor que o tamanho dos dados
concatenados, esses dados sero truncados. O alinhamento sempre feito da
esquerda para a direita.
Outros PERFORMs
A instruo PERFORM executa um bloco de instrues que pode estar em um
pargrafo ou SECTION (OUT-LINE) ou dentro do prprio PERFORM (IN-LINE).
PERFORM OUTLINE Executa as instrues de um pargrafo ou SECTION,
retornando em seguida para a prxima instruo aps o PERFORM. H 5 formatos de
PERFORM OUT-LINE.
PERFORM bsico executa apenas 1 pargrafo ou SECTION.
Exemplos:
----+-*A-1-B--+----2----+----3----+----4----+----5----+----6----+----7--|-+----8
PERFORM 010-INICIALIZAR
PERFORM 070-TERMINO
www.grandeporte.com.br
13
Parte 5
PERFORM WITH
TEST AFTER =
do {} while (cond)
PERFORM WITH
TEST BEFORE =
while (cond)
Corpo do Lao
Corpo do Lao
Teste
no
sim
Prximo Comando
Teste
no
sim
Prximo Comando
www.grandeporte.com.br
14
Parte 5
PERFORM com opo VARYING executa o pargrafo ou SECTION
variando o contedo de uma varivel, de um valor inicial (FROM),
incrementando um valor (BY) at que uma situao ocorra (UNTIL). Exemplos:
----+-*A-1-B--+----2----+----3----+----4----+----5----+----6----+----7--|-+----8
PERFORM 040-IMPRIME-TABUADA
VARYING WS-CONTADOR FROM 1 BY 1
UNTIL WS-CONTADOR > 10
PERFORM 070-CALCULA-JUROS
VARYING WS-MES FROM WS-MES-INICIAL BY WS-INCREMENTO
UNTIL WS-MES-INICIAL > WS-MES-FINAL
incio
inicializa varivel com o
valor inicial (FROM)
(WS-CONT = 1)
condio
(CONT > 100)
sim
fim
no
executa os comandos
(PERFORM 999-ROTINA)
Incrementar varivel com
o valor do incremento (BY)
(CONT = CONT + 1)
www.grandeporte.com.br
Parte 5
15
TO WS-CONT
PERFORM 10 TIMES
DISPLAY VALOR DO CONTADOR = WS-CONT
COMPUTE WS-CONT = WS-CONT + 1
END-PERFORM
www.grandeporte.com.br
16
Parte 5
preciso tomar cuidado ao dividir a PROCEDURE DIVISION em sees, pois
quando se utiliza o PERFORM para chamar uma seo, todos os pargrafos da seo
so executados. Exemplo:
----+-*A-1-B--+----2----+----3----+----4----+----5----+----6----+----7--|-+----8
PROCEDURE
DIVISION.
MAIN-LINE
SECTION.
PERFORM MOSTRAR-A
PERFORM MOSTRAR-C
PERFORM MOSTRAR-B
PERFORM MOSTRAR-D
STOP RUN
.
MOSTRAR-A
SECTION.
DISPLAY '10'
DISPLAY '11'
.
MOSTRAR-B.
DISPLAY '20'
.
MOSTRAR-C
SECTION.
DISPLAY '30'
DISPLAY '31'
.
MOSTRAR-D.
DISPLAY '40'
.
MOSTRAR-E.
DISPLAY '50'
.
MOSTRAR-F.
DISPLAY '60'
DISPLAY '66'
.
MOSTRAR-G
SECTION.
DISPLAY '70'
.
MOSTRAR-OUTROS
SECTION.
DISPLAY '90'
.
Atividade
1 minuto
www.grandeporte.com.br
Parte 5
EXEMPLO
17
MERGE
Objetivo do Programa
Unificar o Cadastro de Funcionrios, que est dividido em dois arquivos
FUNCANT e FUNCNOVO, utilizando o algoritmo de merge, gerando o arquivo
FUNCCAD.
Macro-Fluxo
FUNCANT
FUNCNOVO
EEXXNN05
FUNCCAD
Observao
Um pr-requisito para executar o algoritmo do merge os arquivos estarem
ordenados por uma chave, neste caso o cdigo do funcionrio.
O algoritmo comea lendo o primeiro registro de cada arquivo de entrada.
Depois feito uma comparao entre essas chaves, gravando sempre a que for
menor. Isso garante que o arquivo gerado tambm fique ordenado.
O primeiro arquivo que chegar no fim (EOF), receber HIGH-VALUES na chave
(varivel espelho), o que forar a gravao dos registros remanescentes do outro
arquivo.
O algoritmo termina quando ambos os arquivos de entrada chegarem no final
(EOF).
www.grandeporte.com.br
18
Parte 5
Layout dos Arquivos
Nome do Arquivo
Nome do Registro
Nome do Campo
CODFUNC-A
NOMEFUNC-A
VALORHORA-A
QTDHRSTRAB-A
FUNCANT
REG-FUNCANT
Tipo e Tamanho
X(05)
X(30)
9(02)V99
9(04)
Nome do Arquivo
Nome do Registro
Nome do Campo
CODFUNC-N
NOMEFUNC-N
VALORHORA-N
QTDHRSTRAB-N
FUNCNOVO
REG-FUNCNOVO
Tipo e Tamanho Descrio
X(05)
Cdigo do funcionrio
X(30)
Nome do funcionrio
9(02)V99
Valor por hora do funcionrio
9(04)
Quantidade de horas trabalhadas
Nome do Arquivo
Nome do Registro
Nome do Campo
CODFUNC-C
NOMEFUNC-C
VALORHORA-C
QTDHRSTRAB-C
FUNCCAD
REG-FUNCCAD
Tipo e Tamanho
X(05)
X(30)
9(02)V99
9(04)
Descrio
Cdigo do funcionrio
Nome do funcionrio
Valor por hora do funcionrio
Quantidade de horas trabalhadas
Descrio
Cdigo do funcionrio
Nome do funcionrio
Valor por hora do funcionrio
Quantidade de horas trabalhadas
Layout da SYSOUT
1
2
3
4
5
12345678901234567890123456789012345678901234567890
==================================================
TOTAL DE REGISTROS LIDOS FUNCANT.: ZZZ9
TOTAL DE REGISTROS LIDOS FUNCNOVO: ZZZ9
TOTAL DE REGISTROS GRAVADOS......: ZZZ9
==================================================
JOB de Execuo
Os arquivos de entrada (FUNCANT e FUNCNOVO) esto com o prefixo do
instrutor, j o de sada (FUNCCAD) est com o prefixo do aluno.
11234567892123456789312345678941234567895123456789612345678971234567898
12345678901234567890123456789012345678901234567890123456789012345678901234567890
//GPXXNN05 JOB SEUNOME,MSGCLASS=X,CLASS=C,NOTIFY=GPXXNN,TIME=(0,20)
//*****************************************************************
//STEP1
EXEC PGM=EEXXNN05
//STEPLIB DD DSN=GP.GERAL.LOADLIB,DISP=SHR
//FUNCANT DD DSN=GP.GPXX99.FUNCANT,DISP=SHR
//FUNCNOVO DD DSN=GP.GPXX99.FUNCNOVO,DISP=SHR
//FUNCCAD DD DSN=GP.GPXXNN.FUNCCAD,DISP=(NEW,CATLG,DELETE),
//
SPACE=(TRK,(1,1),RLSE),UNIT=SYSALLDA,
//
DCB=(LRECL=43,RECFM=FB,DSORG=PS,BLKSIZE=0)
www.grandeporte.com.br
Parte 5
19
----+-*A-1-B--+----2----+----3----+----4----+----5----+----6----+----7--|-+----8
*----------------------------------------------------------------*
*
BOOK DE ARQUIVO
- CAD. DE FUNCIONARIO NOVO
*
*
NOME DO BOOK
- FUNCNOVO
*
*
NOME DO PDS
- GP.GPXXNN.BOOKLIB
*
*
NOME DO ARQUIVO
- FUNCNOVO
*
*
TAMANHO DO REGISTRO - 43 BYTES
*
*----------------------------------------------------------------*
01 ::REG-FUNCNOVO.
05 ::CODFUNC-N
PIC X(05).
05 ::NOMEFUNC-N
PIC X(30).
05 ::VALORHORA-N
PIC 9(02)V99.
05 ::QTDHRSTRAB-N
PIC 9(04).
----+-*A-1-B--+----2----+----3----+----4----+----5----+----6----+----7--|-+----8
*----------------------------------------------------------------*
*
BOOK DE ARQUIVO
- CAD. DE FUNCIONARIO
*
*
NOME DO BOOK
- FUNCCAD
*
*
NOME DO PDS
- GP.GPXXNN.BOOKLIB
*
*
NOME DO ARQUIVO
- FUNCCAD
*
*
TAMANHO DO REGISTRO - 43 BYTES
*
*----------------------------------------------------------------*
01 ::REG-FUNCCAD.
05 ::CODFUNC-C
PIC X(05).
05 ::NOMEFUNC-C
PIC X(30).
05 ::VALORHORA-C
PIC 9(02)V99.
05 ::QTDHRSTRAB-C
PIC 9(04).
www.grandeporte.com.br
20
Parte 5
Programa COBOL
----+-*A-1-B--+----2----+----3----+----4----+----5----+----6----+----7--|-+----8
*----------------------------------------------------------------*
IDENTIFICATION
DIVISION.
*----------------------------------------------------------------*
PROGRAM-ID.
EEXXNN05.
AUTHOR.
SEUNOME.
*----------------------------------------------------------------*
ENVIRONMENT
DIVISION.
*----------------------------------------------------------------*
CONFIGURATION
SECTION.
SPECIAL-NAMES.
DECIMAL-POINT IS COMMA.
INPUT-OUTPUT
SECTION.
FILE-CONTROL.
SELECT FUNCANT ASSIGN
TO UT-S-FUNCANT
FILE STATUS IS FS-FUNCANT
.
SELECT FUNCNOVO ASSIGN
TO UT-S-FUNCNOVO
FILE STATUS IS FS-FUNCNOVO
.
SELECT FUNCCAD ASSIGN
TO UT-S-FUNCCAD
FILE STATUS IS FS-FUNCCAD
.
*----------------------------------------------------------------*
DATA
DIVISION.
*----------------------------------------------------------------*
FILE
SECTION.
*----------------------------------------------------------------*
FD FUNCANT
LABEL RECORD IS STANDARD
BLOCK CONTAINS 0 RECORDS
RECORDING MODE IS F
RECORD CONTAINS 43 CHARACTERS
DATA RECORD IS REG-FUNCANT
.
COPY FUNCANT REPLACING ==::== BY ====.
*----------------------------------------------------------------*
FD
FUNCNOVO
LABEL RECORD IS STANDARD
BLOCK CONTAINS 0 RECORDS
RECORDING MODE IS F
RECORD CONTAINS 43 CHARACTERS
DATA RECORD IS REG-FUNCNOVO
.
COPY FUNCNOVO REPLACING ==::== BY ====.
*----------------------------------------------------------------*
FD
FUNCCAD
LABEL RECORD IS STANDARD
BLOCK CONTAINS 0 RECORDS
RECORDING MODE IS F
RECORD CONTAINS 43 CHARACTERS
DATA RECORD IS REG-FUNCCAD
.
COPY FUNCCAD REPLACING ==::== BY ====.
*----------------------------------------------------------------*
WORKING-STORAGE
SECTION.
*----------------------------------------------------------------*
* DECLARACAO DAS VARIAVEIS ESPELHO DOS ARQUIVOS
*----------------------------------------------------------------*
COPY FUNCANT REPLACING ==::== BY ==WS-==.
COPY FUNCNOVO REPLACING ==::== BY ==WS-==.
COPY FUNCCAD REPLACING ==::== BY ==WS-==.
www.grandeporte.com.br
Parte 5
21
----+-*A-1-B--+----2----+----3----+----4----+----5----+----6----+----7--|-+----8
*----------------------------------------------------------------*
* VARIAVEIS DE FILE STATUS
*----------------------------------------------------------------*
77 FS-FUNCANT
PIC X(02).
77 FS-FUNCNOVO
PIC X(02).
77 FS-FUNCCAD
PIC X(02).
*----------------------------------------------------------------*
* VARIAVEIS DE TRABALHO
*----------------------------------------------------------------*
77 WS-MSG
PIC X(60).
77 WS-FS
PIC X(02).
77 WS-CTLIDO-A
PIC 9(04) COMP.
77 WS-CTLIDO-N
PIC 9(04) COMP.
77 WS-CTGRAV
PIC 9(04) COMP.
*----------------------------------------------------------------*
* VARIAVEIS COM MASCARA DE EDICAO (FORMATADAS)
*----------------------------------------------------------------*
77 WS-CTLIDO-A-F
PIC ZZZ9.
77 WS-CTLIDO-N-F
PIC ZZZ9.
77 WS-CTGRAV-f
PIC ZZZ9.
*----------------------------------------------------------------*
* MENSAGENS DE ERRO DE FILE STATUS
*----------------------------------------------------------------*
77 WS-MSG01
PIC X(60)
VALUE
ERRO ABERTURA FUNCANT.
77 WS-MSG02
PIC X(60)
VALUE
ERRO ABERTURA FUNCNOVO.
77 WS-MSG03
PIC X(60)
VALUE
ERRO ABERTURA FUNCCAD.
77 WS-MSG04
PIC X(60)
VALUE
ERRO LEITURA FUNCANT.
77 WS-MSG05
PIC X(60)
VALUE
ERRO LEITURA FUNCNOVO.
77 WS-MSG06
PIC X(60)
VALUE
ERRO GRAVACAO FUNCCAD.
77 WS-MSG07
PIC X(60)
VALUE
ERRO FECHAMENTO FUNCANT.
77 WS-MSG08
PIC X(60)
VALUE
ERRO FECHAMENTO FUNCNOVO.
77 WS-MSG09
PIC X(60)
VALUE
ERRO FECHAMENTO FUNCCAD.
www.grandeporte.com.br
22
Parte 5
----+-*A-1-B--+----2----+----3----+----4----+----5----+----6----+----7--|-+----8
*----------------------------------------------------------------*
PROCEDURE
DIVISION.
*----------------------------------------------------------------*
0000-EEXXNN05.
PERFORM 1000-INICIALIZAR
PERFORM 2000-PROCESSAR
UNTIL FS-FUNCNOVO = "10"
AND
FS-FUNCANT = "10"
PERFORM 3000-TERMINO
STOP RUN
.
1000-INICIALIZAR.
MOVE 0
MOVE 0
MOVE 0
TO WS-CTLIDO-A
TO WS-CTLIDO-N
TO WS-CTGRAV
TO WS-MSG
TO WS-FS
TO WS-MSG
TO WS-FS
TO WS-MSG
TO WS-FS
PERFORM 1500-LER-FUNCANT
PERFORM 1600-LER-FUNCNOVO
.
1500-LER-FUNCANT.
READ FUNCANT INTO WS-REG-FUNCANT
IF FS-FUNCANT = "00"
COMPUTE WS-CTLIDO-A =
ELSE
IF FS-FUNCANT = "10"
MOVE HIGH-VALUES
ELSE
MOVE WS-MSG04
MOVE FS-FUNCANT
GO TO 9000-ERRO
END-IF
END-IF
.
WS-CTLIDO-A + 1
www.grandeporte.com.br
TO WS-CODFUNC-A
TO WS-MSG
TO WS-FS
Parte 5
23
----+-*A-1-B--+----2----+----3----+----4----+----5----+----6----+----7--|-+----8
1600-LER-FUNCNOVO.
READ FUNCNOVO INTO WS-REG-FUNCNOVO
IF FS-FUNCNOVO = "00"
COMPUTE WS-CTLIDO-N =
ELSE
IF FS-FUNCNOVO = "10"
MOVE HIGH-VALUES
ELSE
MOVE WS-MSG05
MOVE FS-FUNCNOVO
GO TO 9000-ERRO
WS-CTLIDO-N + 1
TO WS-CODFUNC-N
TO WS-MSG
TO WS-FS
END-IF
END-IF
.
2000-PROCESSAR.
IF WS-CODFUNC-A < WS-CODFUNC-N
MOVE WS-CODFUNC-A
MOVE WS-NOMEFUNC-A
MOVE WS-QTDHRSTRAB-A
MOVE WS-VALORHORA-A
TO
TO
TO
TO
WS-CODFUNC-C
WS-NOMEFUNC-C
WS-QTDHRSTRAB-C
WS-VALORHORA-C
TO WS-MSG
TO WS-FS
1
WS-CODFUNC-C
WS-NOMEFUNC-C
WS-QTDHRSTRAB-C
WS-VALORHORA-C
TO WS-MSG
TO WS-FS
www.grandeporte.com.br
24
Parte 5
----+-*A-1-B--+----2----+----3----+----4----+----5----+----6----+----7--|-+----8
3000-TERMINO.
MOVE WS-CTLIDO-A
TO WS-CTLIDO-A-F
MOVE WS-CTLIDO-N
TO WS-CTLIDO-N-F
MOVE WS-CTGRAV
TO WS-CTGRAV-F
DISPLAY "=================================================="
DISPLAY "TOTAL DE REGISTROS LIDOS FUNCANT.: " WS-CTLIDO-A-F
DISPLAY "TOTAL DE REGISTROS LIDOS FUNCNOVO: " WS-CTLIDO-N-F
DISPLAY "TOTAL DE REGISTROS GRAVADOS......: " WS-CTGRAV-F
DISPLAY "=================================================="
CLOSE FUNCANT
IF FS-FUNCANT NOT = "00"
MOVE WS-MSG07
MOVE FS-FUNCANT
GO TO 9000-ERRO
END-IF
TO WS-MSG
TO WS-FS
CLOSE FUNCNOVO
IF FS-FUNCNOVO NOT = "00"
MOVE WS-MSG08
MOVE FS-FUNCNOVO
GO TO 9000-ERRO
END-IF
TO WS-MSG
TO WS-FS
CLOSE FUNCCAD
IF FS-FUNCCAD NOT = "00"
MOVE WS-MSG09
MOVE FS-FUNCCAD
GO TO 9000-ERRO
END-IF
TO WS-MSG
TO WS-FS
DISPLAY "=================================================="
DISPLAY "
TERMINO NORMAL EENNXX05
"
DISPLAY "=================================================="
.
9000-ERRO.
DISPLAY "=================================================="
DISPLAY "MENSAGEM....: " WS-MSG
DISPLAY "FILE STATUS.: " WS-FS
DISPLAY "=================================================="
DISPLAY "==
TERMINO ANORMAL DO PROGRAMA EEXXNN05
=="
DISPLAY "=================================================="
MOVE 12
TO RETURN-CODE
STOP RUN
.
www.grandeporte.com.br
Parte 5
25
Practice
Atividade
PROCEDURE
www.grandeporte.com.br
DIVISION.
26
Parte 5
PROCEDURE
www.grandeporte.com.br
DIVISION.
Parte 5
27
SECTION.
SECTION.
www.grandeporte.com.br
SECTION.
28
Parte 5
DIVISION.
5) Dada as variveis abaixo, monte uma data completa, usando o comando STRING,
no formato:
12 DE MARCO DE 2012
----+-*A-1-B--+----2----+----3----+----4----+----5----+----6----+----7--|-+----8
WORKING-STORAGE
SECTION.
77 WS-DIA
PIC 9(02)
VALUE 12.
77 WS-MES
PIC X(09)
VALUE MARCO.
77 WS-ANO
PIC 9(04)
VALUE 2012.
77 WS-DATA
PIC X(30).
PROCEDURE
DIVISION.
www.grandeporte.com.br
Parte 5
Atividade
29
Trabalho em dupla
5
a) Executar do pargrafo 2300-INICIO-CALCULO at o pargrafo 2800-TERMINOCALCULO.
c) Executar do parfrado 1100-ADMISSAO-FASE1 at o pargrafo 1800-ADMISSAOFASE8 at que a varivel WS-STATUS seja 'AK'
www.grandeporte.com.br
30
Parte 5
Performance
Atividade
PROJETO 4
Objetivo do Programa
A Chapu de Couro Indstria Brasileira S.A. precisa de um programa para
unificar seu cadastro de clientes. Atualmente ele est dividido em 3 arquivos:
CLISP
CLIRJ
CLIMG
Macro-Fluxo
CLISP
CLIRJ
CLIMG
GPXXNN04
CLIUNIF
www.grandeporte.com.br
Parte 5
31
Nome do Arquivo
Nome do Registro
Nome da Varivel
CPFCLI-SP
NOMECLI-SP
ENDCLI-SP
FONECLI-SP
TOTALCOMPRAS-SP
ULTIMACOMPRA-SP
CLISP
REG-CLISP
Tipo e Tamanho
X(11)
X(25)
X(30)
X(10)
9(08)V99
X(08)
Descrio do Dado
Nmero do CPF
Nome do Cliente
Endereo do Cliente
Telefone do Cliente com DDD
Valor total de Compras
Data da ltima compra AAAAMMDD
Nome do Arquivo
Nome do Registro
Nome da Varivel
CPFCLI-RJ
NOMECLI-RJ
ENDCLI-RJ
FONECLI-RJ
TOTALCOMPRAS-RJ
ULTIMACOMPRA-RJ
CLIRJ
REG-CLIRJ
Tipo e Tamanho
X(11)
X(25)
X(30)
X(10)
9(08)V99
X(08)
Descrio do Dado
Nmero do CPF
Nome do Cliente
Endereo do Cliente
Telefone do Cliente com DDD
Valor total de Compras
Data da ltima compra AAAAMMDD
Nome do Arquivo
Nome do Registro
Nome da Varivel
CPFCLI-MG
NOMECLI-MG
ENDCLI-MG
FONECLI-MG
TOTALCOMPRAS-MG
ULTIMACOMPRA-MG
CLIMG
REG-CLIMG
Tipo e Tamanho
X(11)
X(25)
X(30)
X(10)
9(08)V99
X(08)
Descrio do Dado
Nmero do CPF
Nome do Cliente
Endereo do Cliente
Telefone do Cliente com DDD
Valor total de Compras
Data da ltima compra AAAAMMDD
Nome do Arquivo
Nome do Registro
Nome da Varivel
CPFCLI-UNIF
NOMECLI-UNIF
ENDCLI-UNIF
FONECLI-UNIF
TOTALCOMPRAS-UNIF
ULTIMACOMPRA-UNIF
CLIUNIF
REG-CLIUNIF
Tipo e Tamanho
X(11)
X(25)
X(30)
X(10)
9(08)V99
X(08)
Descrio do Dado
Nmero do CPF
Nome do Cliente
Endereo do Cliente
Telefone do Cliente com DDD
Valor total de Compras
Data da ltima compra AAAAMMDD
www.grandeporte.com.br
32
Parte 5
Layout da SYSOUT
1
2
3
4
5
12345678901234567890123456789012345678901234567890
**************************************************
* DATA GREGORIANA 1 - 99/99/2099
*
* DATA GREGORIANA 2 - 99 DE XXXXXXXXX DE 2099
*
* DATA JULIANA
999 DE 2099
*
* DIA DA SEMANA
XXXXXXXXXXXXX
*
**************************************************
1
2
3
4
5
12345678901234567890123456789012345678901234567890
==================================================
TOTAL DE CLIENTES SP............: ZZZ9
TOTAL DE CLIENTES RJ............: ZZZ9
TOTAL DE CLIENTES MG............: ZZZ9
TOTAL DE CLIENTES UNIFICADO.....: ZZZ9
TEMPO TOTAL DE PROCESSAMENTO....: HH:MM:SS:CC
==================================================
Observao
Para utilizar o algoritmo do MERGE, todos os arquivos de entrada devem estar
ordenados por um campo chave, no caso o CPF do cliente.
Execute os passos abaixo (Lembre-se de que XXNN o seu prefixo de
usurio):
1) Pelo TSO, opo P.2 (Edit Entry Panel), crie os membros CLISP, CLIRJ,
CLIMG e CLIUNIF na BOOKLIB e digite uma BOOK para cada um dos
quatro arquivos, utilizando a string :XX-: no incio dos campos, sendo ento
um prefixo.
2) Pelo TSO, opo P.2 (Edit Entry Panel), crie o membro GPXXNN04 e digite
o programa COBOL. Faa os COPY BOOKs necessrios.
3) Compile com o job COMPCOB e elimine os erros at obter MAXCC = 0
4) Copie o job EXECOB04 da JOBLIB de seu instrutor e altere XXNN pelo
prefixo de seu usurio.
5) Execute o programa com o job EXECOB04. Compare o resultado com os
dos colegas.
www.grandeporte.com.br
Parte 5
33
JOB de Execuo
Os arquivos de entrada (CLISP, CLIRJ e CLIMG) esto com o prefixo do
instrutor, j o de sada (CLIUNIF) est com o prefixo do aluno.
11234567892123456789312345678941234567895123456789612345678971234567898
12345678901234567890123456789012345678901234567890123456789012345678901234567890
//GPXXNN04 JOB SEUNOME,MSGCLASS=X,CLASS=C,NOTIFY=GPXXNN,TIME=(0,20)
//*****************************************************************
//STEP1
EXEC PGM=GPXXNN04
//STEPLIB DD DSN=GP.GERAL.LOADLIB,DISP=SHR
//CLISP
DD DSN=GP.GPXX99.CLISP,DISP=SHR
//CLIRJ
DD DSN=GP.GPXX99.CLIRJ,DISP=SHR
//CLIMG
DD DSN=GP.GPXX99.CLIMG,DISP=SHR
//CLIUNIF DD DSN=GP.GPXXNN.CLIUNIF,DISP=(NEW,CATLG,DELETE),
//
SPACE=(TRK,(1,1),RLSE),UNIT=SYSALLDA,
//
DCB=(LRECL=94,RECFM=FB,DSORG=PS,BLKSIZE=0)
www.grandeporte.com.br
34
Parte 5
Abrir para leitura o arquivo CLIMG
Se file status for diferente de 00
Mover mensagem de erro para varivel da rotina de erro
Mover file status para variveis da rotina de erro
Executar rotina de erro (9000-ERRO)
Abrir para gravao o arquivo CLIUNIF
Se file status for diferente de 00
Mover mensagem de erro para varivel da rotina de erro
Mover file status para variveis da rotina de erro
Executar rotina de erro (9000-ERRO)
Ler o primeiro registro do arquivo CLISP (1100-LER-CLISP)
Ler o primeiro registro do arquivo CLIRJ (1200-LER-CLIRJ)
Ler o primeiro registro do arquivo CLIMG (1300-LER-CLIMG)
Pargrafo 1100-LER-CLISP
Ler registro do arquivo CLISP carregando varivel espelho
Se file status for igual a 00 (sucesso)
Somar 1 ao contador de lidos no arquivo CLISP
Seno
Se file status for igual a 10 (fim de arquivo)
Mover HIGH-VALUES para CPFCLI-SP (espelho)
Seno
Mover mensagem de erro para varivel da rotina de erro
Mover file status para variveis da rotina de erro
Executar rotina de erro (9000-ERRO)
Pargrafo 1200-LER-CLIRJ
Ler registro do arquivo CLIRJ carregando varivel espelho
Se file status for igual a 00 (sucesso)
Somar 1 ao contador de lidos no arquivo CLIRJ
Seno
Se file status for igual a 10 (fim de arquivo)
Mover HIGH-VALUES para CPFCLI-RJ (espelho)
Seno
Mover mensagem de erro para varivel da rotina de erro
Mover file status para variveis da rotina de erro
Executar rotina de erro (9000-ERRO)
www.grandeporte.com.br
Parte 5
35
Pargrafo 1300-LER-CLIMG
Ler registro do arquivo CLIMG carregando varivel espelho
Se file status for igual a 00 (sucesso)
Somar 1 ao contador de lidos no arquivo CLIMG
Seno
Se file status for igual a 10 (fim de arquivo)
Mover HIGH-VALUES para CPFCLI-MG (espelho)
Seno
Mover mensagem de erro para varivel da rotina de erro
Mover file status para variveis da rotina de erro
Executar rotina de erro (9000-ERRO)
Pargrafo 2000-PROCESSAR
Se CPFCLI-SP < CPFCLIRJ e CPFCLI-SP < CPFCLIMG
Mover espelho do registro de CLISP para CLIUNIF
Executar rotina 2100-GRAVAR-CLIUNIF
Executar rotina 1100-LER-CLISP
Seno
Se CPFCLI-RJ < CPFCLI-MG
Mover espelho do registro CLIRJ para CLIUNIF
Executar rotina 2100-GRAVAR-CLIUNIF
Executar rotina 1200-LER-CLIRJ
Seno
Mover espelho do registro CLIMG para CLIUNIF
Executar rotina 2100-GRAVAR-CLIUNIF
Executar rotina 1300-LER-CLIMG
Pargrafo 2100-GRAVAR-CLIUNIF
Gravar o registro do CLIUNIF usando sua varivel espelho
Se file status for igual a 00 (sucesso)
Somar 1 ao contador de Clientes gravados no arquivo CLIUNIF
seno
Mover mensagem de erro para varivel da rotina de erro
Mover file status para variveis da rotina de erro
Executar rotina de erro (9000-ERRO)
www.grandeporte.com.br
36
Parte 5
Pargrafo 3000-TERMINO
Executar rotina 9000-IMPRIME-DATA
Fechar o arquivo CLISP
Se file status for diferente de 00
Mover mensagem de erro para varivel da rotina de erro
Mover file status para variveis da rotina de erro
Executar rotina de erro (9000-ERRO)
Fechar o arquivo CLIRJ
Se file status for diferente de 00
Mover mensagem de erro para varivel da rotina de erro
Mover file status para variveis da rotina de erro
Executar rotina de erro (9000-ERRO)
Fechar o arquivo CLIMG
Se file status for diferente de 00
Mover mensagem de erro para varivel da rotina de erro
Mover file status para variveis da rotina de erro
Executar rotina de erro (9000-ERRO)
Fechar o arquivo CLIUNIF
Se file status for diferente de 00
Mover mensagem de erro para varivel da rotina de erro
Mover file status para variveis da rotina de erro
Executar rotina de erro (9000-ERRO)
Receber o horrio final de processamento
Calcular o tempo de processamento
Exibir os contadores:
Clientes lidos no arquivo CLISP
Clientes lidos no arquivo CLIRJ
Clientes lidos no arquivo CLIMG
Clientes gravados no arquivo CLIUNIF
Exibir o tempo total de processamento
www.grandeporte.com.br
Parte 5
37
www.grandeporte.com.br
38
Parte 5
Avaliao
Estou fera!
Fiz Certo!
Muito Bom
Bom
www.grandeporte.com.br
regular
ruim
Muito ruim
Parte
O que JCL?
Para cada JOB que voc submete, voc precisa dizer ao sistema
operacional onde encontrar a apropriada entrada, como processar essa
entrada, e o que fazer com a sada resultante.Voc usa a JCL (Job Control
Language - Linguagem de Controle de Servios) para levar essas informaes
ao sistema operacional atravs de um conjunto de comandos conhecidos como
comandos de controle de job.
Verso 2.3.5
Parte 6
Preparation
Trocando Ideias
Reflexo
www.grandeporte.com.br
Parte 6
Presentation
Histria
O ambiente mainframe
www.grandeporte.com.br
Parte 6
Teoria
JOB
PGM001
VERCPF
CONFDATA
VERSPC
CALL
GOBACK
www.grandeporte.com.br
Parte 6
CALL USING/ END-CALL
O Comando CALL chama um SUB-PROGRAMA, que pode ou no receber
dados do programa PRINCIPAL, por referncia (quando o endereo do dado
passado e o SUB-PROGRAMA pode alterar esse dado) ou por valor (quando o SUBPROGRAMA recebe uma cpia do dado e no pode alterar o dado original).
Chamada por Referncia No momento do CALL o endereo do item de
dado passado ao SUB-PROGRAMA. Isso transparente para o programador. O
valor do item de dado pode ser alterado pelo SUB-PROGRAMA e o programa
PRINCIPAL pode usar esse novo valor. A clusula BY REFERENCE default e no
obrigatrio inform-la.
CALL VERCPF USING BY REFERENCE WS-DADOS-ENVIADOS
ou
CALL VERCPF USING WS-DADOS-ENVIADOS
A figura abaixo ilustra a chamada a SUB-PROGRAMA passando dados por
referncia.
Endereo do
item de dado
CALL .. BY
REFERENCE
Direo do
Fluxo de dados
Sub-programa
chamado
CALL .. BY
CONTENT
Direo do
Fluxo de dados
Valor do
item de dado
Sub-programa
chamado
Endereo
da cpia
Cpia do
item de dado
www.grandeporte.com.br
Parte 6
Os dados so carregados no SUB-PROGRAMA nas variveis declaradas na
LINKAGE SECTION. A mesma quantidade de variveis usadas no CALL USING deve
ser declarada na LINKAGE SECTION. Essas mesmas variveis devem tambm ser
informadas na PROCEDURE DIVISION com a clusula USING, como mostra a figura
abaixo. As variveis podem tambm estar separadas por vrgula.
PROGRAMA PRINCIPAL
VAR2
VAR2
SUB-PROGRAMA
LINKAGE
77 DADO1
77 DADO2
77 DADO3
SECTION.
PIC X(10).
PIC X(10).
PIC X(10).
DADO2
DADO3.
www.grandeporte.com.br
Parte 6
CALL DINMICO O nome do SUB-PROGRAMA carregado em uma
varivel, que usada para emitir o CALL. O SUB-PROGRAMA um mdulo
independente e s carregado na memria quando chamado. As chamadas
sucessivas encontram o SUB-PROGRAMA no ltimo estado, exceto quando o
programa chamado possui o atributo IS INITIAL no pargrafo PROGRAM-ID.
Exemplo:
----+-*A-1-B--+----2----+----3----+----4----+----5----+----6----+----7--|-+----8
*----------------------------------------------------------------*
PROCEDURE
DIVISION.
*----------------------------------------------------------------*
050-CHAMA-PROGRAMA-CPF.
MOVE VERCPF
TO
WS-PROGRAMA
MOVE 15524514585
TO
WS-NUMERO-CPF
MOVE SPACES
TO
WS-RESULTADO
XXXX
*
* O NOME DO SUB-PROGRAMA ESTA NA VARIAVEL WS-PROGRAMA
*
CALL WS-PROGRAMA
USING
WS-NUMERO-CPF
WS-RESULTADO
END-CALL
www.grandeporte.com.br
Parte 6
IS INITIAL / CANCEL
A primeira vez que um SUB-PROGRAMA chamado ele est em seu estado
inicial, todos os arquivos esto fechados e todas as variveis esto com os valores
indicados pela clusula VALUE.
A prxima vez que o programa for chamado, ele se lembra de seu estado da
ltima vez em que foi chamado. Todos os arquivos que estavam abertos continuam
abertos, e toda varivel que assumiu algum valor continua com esse valor.
Embora possa ser til a um programa lembrar seu estado chamada aps
chamada, os sistemas formados por SUB-PROGRAMAS que guardam seu ltimo
estado so poucos confiveis e difceis de tirar erros, pois no sabemos ao certo como
ficou seu ltimo estado.
Um SUB-PROGRAMA pode ser forado ao seu estado inicial toda vez que for
chamado quando inclumos a clusula IS INITIAL no pargrafo PROGRAM-ID.
Exemplo:
----+-*A-1-B--+----2----+----3----+----4----+----5----+----6----+----7--|-+----8
*----------------------------------------------------------------*
IDENTIFICATION
DIVISION.
*----------------------------------------------------------------*
PROGRAM-ID.
VERCPF IS INITIAL.
www.grandeporte.com.br
10
Parte 6
Teoria
Finalidade do jcl
terminating messages
severe messages
error messages
warning messages
informational messages / success
www.grandeporte.com.br
Parte 6
Teoria
11
Elementos de jcl
Uma rgua foi colocada no incio do JOB para melhor identificar as colunas.
Uma linha na linguagem JCL comea com // nas duas primeiras colunas. Existem 3
tipos de linhas principais, tambm chamados de cartes, pois o JCL remonta poca
em que se usavam cartes perfurados, conforme mostra a figura a seguir:
www.grandeporte.com.br
12
Parte 6
Teoria
www.grandeporte.com.br
Parte 6
Teoria
13
Posicionamento de um job
Contedo
Observao
.
//
obrigatrio, menos na entrada de dados
nome do carto
pode ser um JOBNAME, STEPNAME ou DDNAME
operador
tipo do carto, pode ser JOB, EXEC ou DD
operando
parmetros do carto, separados por vrgula e sem
espao.
Um espao em branco aps um operando comea um
comentrio.
www.grandeporte.com.br
14
Parte 6
Teoria
O carto job
Formato 1
11234567892123456789312345678941234567895123456789612345678971234567898
12345678901234567890123456789012345678901234567890123456789012345678901234567890
//GPAZ9901 JOB ACCOUNT,MSGCLASS=X,CLASS=C,NOTIFY=GPAZ99,TIME=(0,20)
Formato 2
11234567892123456789312345678941234567895123456789612345678971234567898
12345678901234567890123456789012345678901234567890123456789012345678901234567890
//GPAZ9901 JOB ACCOUNT,
//
MSGCLASS=X,
//
CLASS=C,
//
NOTIFY=GPAZ99,
//
TIME=(0,20)
GPAZ9901
JOB
ACCOUNT
CLASS
MSGCLASS
NOTIFY
www.grandeporte.com.br
Parte 6
TIME
15
REGION
MSGLEVEL
Sub-parmetro A:
0 = imprime apenas o carto JOB;
1 = imprime todos os cartes de JCL alimentados e os intercalados;
2 = imprime todos os cartes de JCL alimentados.
Sub-parmetro B:
0 = NO imprime mensagens de alocao ou liberao de arquivo;
1 = imprime todas as mensagens de alocao e liberao de arquivo.
O valor default :
(1,1) = exibe todos comandos de JCL codificados, expandidos e as
alocaes
TYPRUN
www.grandeporte.com.br
16
Parte 6
Teoria
O carto exec
Formato 1
11234567892123456789312345678941234567895123456789612345678971234567898
12345678901234567890123456789012345678901234567890123456789012345678901234567890
//PASSO03xxEXEC PGM=GPAZ9901,COND=(0,NE,PASSO02)
Formato 2
11234567892123456789312345678941234567895123456789612345678971234567898
12345678901234567890123456789012345678901234567890123456789012345678901234567890
//PASSO03xxEXEC PGM=GPAZ9901,
//
COND=(0,NE,PASSO02)
PASSO03
EXEC
PGM
PROC
COND
PASSO2
COND=((CODIGO,OPERADOR,STEPNAME),EVEN/ONLY)
COND=
(0,NE,PASSO2)
no
sim
onde:
CODIGO
PASSO03
www.grandeporte.com.br
Parte 6
17
(4,LT)
(4,GT,STEP1)
(0,EQ,STEP5)
TIME
PARM
www.grandeporte.com.br
18
Parte 6
Exemplo:
11234567892123456789312345678941234567895123456789612345678971234567898
12345678901234567890123456789012345678901234567890123456789012345678901234567890
//STEP10
EXEC PGM=GPAZ9912,PARM=20081026
Teoria
Joblib e steplib
O STEPLIB vale apenas para o passo (STEP) onde foi codificado. Se for
codificado uma JOBLIB, ela invalida o STEPLIB. Exemplo:
11234567892123456789312345678941234567895123456789612345678971234567898
12345678901234567890123456789012345678901234567890123456789012345678901234567890
//GPAZ9901 JOB ACCOUNT,MSGCLASS=X,CLASS=C,NOTIFY=GPAZ99,TIME=(0,20)
//PASSO01 xEXEC PGM=GPAZ9902
//STEPLIB DD DSN=GP.GERAL.LOADLIB,DISP=SHR
www.grandeporte.com.br
Parte 6
Teoria
19
O carto dd
Formato 1
11234567892123456789312345678941234567895123456789612345678971234567898
12345678901234567890123456789012345678901234567890123456789012345678901234567890
//PRDSEQM DD DSN=GP.GPAZ99.PRDSEQM,DISP=SHR
//PRDSEQF DD DSN=GP.GPAZ99.PRDSEQF,DISP=(NEW,CATLG,DELETE),
//
SPACE=(TRK,(5,2),RLSE),UNIT=SYSALLDA,
//
DCB=(DSORG=PS,RECFM=FB,LRECL=57,BLKSIZE=0)
//RELOCOR DD SYSOUT=*
Formato 2
11234567892123456789312345678941234567895123456789612345678971234567898
12345678901234567890123456789012345678901234567890123456789012345678901234567890
//PRDSEQM DD DSN=GP.GPAZ99.PRDSEQM,
//
DISP=SHR
//PRDSEQF DD DSN=GP.GPAZ99.PRDSEQF,
//
DISP=(NEW,CATLG,DELETE),
//
SPACE=(TRK,(5,2),RLSE),
//
UNIT=SYSALLDA,
//
DCB=(DSORG=PS,RECFM=FB,LRECL=57,BLKSIZE=0)
//RELOCOR DD SYSOUT=*
PRDSEQF
DD
DSN
DISP
www.grandeporte.com.br
20
Parte 6
O primeiro sub-parmetro o status do arquivo:
SHR
OLD
NEW
MOD
UNCATLG
DELETE
Apaga o arquivo.
KEEP
PASS
UNCATLG
DELETE
Apaga o arquivo.
KEEP
www.grandeporte.com.br
Parte 6
21
Exemplos vlidos:
DISP=(NEW,PASS,DELETE): o arquivo criado neste step e passado aos
demais somente se o programa der return code 0. Se o programa ABENDar,
o arquivo ser excludo.
DISP=(NEW,PASS): o arquivo criado neste step e passado aos demais
em qualquer condio de termino.
DISP=(OLD,PASS): o arquivo lido neste step e passado aos demais em
qualquer condio de termino.
DISP=SHR: o arquivo lido neste step, podendo ser lido por outros
programas de outros Jobs, pois o arquivo de uso compartilhado (shared).
Exemplos invlidos:
DISP=(SHR,CATLG,DELETE): Como o arquivo no novo (SHR) ele j
est catalogado. No possvel recatalog-lo.
DISP=(NEW,KEEP,DELETE): Como o arquivo novo (NEW) no
possvel manter (KEEP) o arquivo como estava antes.
Default:
Se voc colocar apenas DISP=SHR o sistema assume (SHR,KEEP,KEEP).
SPACE
www.grandeporte.com.br
22
Parte 6
A alocao do espao funciona da seguinte forma ((de 1 a 15 * SEC) + PRIM)
Vale notar que todo disco modelo 3390 contm 56.664 bytes por trilha, 15
trilhas por cilindro e 849.960 bytes por cilindro. O termo trilha (track) e cilindro
(cylinder) vem da poca dos discos pr-RAID (redundant array of inexpensive
disks), que eram semelhantes a 8 discos de vinil empilhados e com um conjunto de
cabeotes de leitura/gravao que se moviam sobre a superfcie dos discos. Os discos
tinham superfcie de gravao em ambos os lados. Das 16 superfcies, uma era usada
para informaes de controle, o que deixava 15 para os dados. Uma trilha a
quantidade de dados que podia ser lida de uma superfcie em uma volta do disco, sem
precisar mover as cabeas. Um cilindro podia ser lido de todas as 15 superfcies sem
mover as cabeas. Isso muito importante, j que um cilindro pode ser lido
rapidamente, sem qualquer movimento mecnico. O diagrama abaixo ilustra isso. Os
discos modernos usam armazenamento FBA (Fixed Block Architecture), mas devem
emular o formato dos discos 3390, de forma que os termos trilha (track) e cilindros
(cylinder) so ainda usados.
www.grandeporte.com.br
Parte 6
23
VOL=SER=
UNIT
DCB
LRECL
DSORG
BLKSIZE
BUFNO
Exemplo:
DCB=(RECFM=FB,LRECL=100,BLKSIZE=6000,DSORG=PS)
www.grandeporte.com.br
24
Parte 6
SYSOUT
DUMMY
DD DUMMY
DD DUMMY,SYSOUT=*,DCB=(LRECL=133)
ou
//SYSUDUMP DD
SYSOUT=*
ou
//SYSABEND DD
SYSOUT=*
www.grandeporte.com.br
25
Parte 6
Concatenando arquivos (DATA SETs)
Fluxo de a es de um job
Teoria
PROGRAMADOR
Determina a
Tarefa
JOB ENTRY
SUBSYSTEM
TSO
Digita o
JCL
Submete o
JCL
P.2
SISTEMA
OPERACIONAL
JES interpreta
o JCL e passa
p/ S.O.
sub
JOBID
SD
ST
?
S
Usurio
consulta a
sada
S.O. executa o
servio
JES agrupa as
sadas e
informaes
sobre o JOB
MAXCC
www.grandeporte.com.br
26
Parte 6
Classifica o externa
de um arquivo
Teoria
SORTIN
SORTOUT
SORT FIELDS
PF
TD
TO
BI
binrio
PK
decimal compactado
ZD
decimal zonado
CH
caractere
ascendente (crescente)
descendente (decrescente)
www.grandeporte.com.br
Parte 6
27
Practice
Atividade
WORKING-STORAGE
77 WIND
01 PROG010
01 AREACALL
PROCEDURE
...
EVALUATE TRUE
WHEN WIND
CALL
WHEN WIND
CALL
END-EVALUATE.
SECTION.
PIC X(001).
PIC X(008) VALUE PROG010.
PIC X(025).
DIVISION.
= A
PROG010 USING AREACALL
= B
PROG020 USING AREACALL
www.grandeporte.com.br
28
Parte 6
Atividade
(
(
(
(
(
(
(
(
(
(
(
(
(
(
(
(
(
) DD / DISP
) DD / SYSUDUMP
) JOB / JOBNAME
) DD / DSNAME
) DD / SYSOUT
) DD / DDNAME
) DD / DCB
) DD / UNIT
) JOB / ACCOUNT
) EXEC / COND
) DD / SPACE
) JOBLIB ou STEPLIB
) JOB / CLASS
) EXEC / PGM
) EXEC / STEPNAME
) EXEC / PARM
) JOB / MSGCLASS
Trabalho em dupla
www.grandeporte.com.br
Parte 6
29
g) Qual a diferena entre o nome informado no DDname (DD) e o Data Set Name
(DSN)?
www.grandeporte.com.br
30
Parte 6
www.grandeporte.com.br
Parte 6
31
5) Com base no macro-fluxo abaixo escreva os comandos de JCL para incluir um novo
step (STEP0002).
ARQENT20
PROG030
ARQSAI20
DSN=XPTO.PRODUTO.TABPRECO
www.grandeporte.com.br
32
Parte 6
Performance
Atividade
Projeto 5
Objetivo da Manuteno
Macro-Fluxo
CLISP
CLIRJ
GPXXNN05
CLIMG
PGMAUX01
CLIUNIF
www.grandeporte.com.br
Parte 6
33
Layout da Mensagem
Nome do Registro
Nome do Campo
WS-CPF
WS-RESP
WS-DADOS-ENVIADOS
Tipo e Tamanho Descrio
X(11)
CPF a ser verificado
X(01)
Resposta da verificao
Observao
www.grandeporte.com.br
34
Parte 6
Layout da SYSOUT
1
2
3
4
5
12345678901234567890123456789012345678901234567890
**************************************************
*
CLIENTE COM CPF REJEITADO
*
**************************************************
C.P.F.
: 999.999.999-99
NOME
: XXXXXXXXXXXXXXXXXXXXXXXXX
ENDERECO
: XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
TELEFONE
: 99-9999-9999
COMPRAS
: R$ ZZ.ZZZ.ZZ9,99
ULTIMA COMPRA : 99/XXX/9999
1
2
3
4
5
12345678901234567890123456789012345678901234567890
**************************************************
* DATA GREGORIANA 1 - 99/99/2099
*
* DATA GREGORIANA 2 - 99 DE XXXXXXXXX DE 2099
*
* DATA JULIANA
999 DE 2099
*
* DIA DA SEMANA
XXXXXXXXXXXXX
*
**************************************************
1
2
3
4
5
12345678901234567890123456789012345678901234567890
==================================================
TOTAL DE CLIENTES SP............: ZZZ9
TOTAL DE CLIENTES RJ............: ZZZ9
TOTAL DE CLIENTES MG............: ZZZ9
TOTAL DE CLIENTES UNIFICADO.....: ZZZ9
TOTAL DE CLIENTES REJEITADOS....: ZZZ9
TEMPO TOTAL DE PROCESSAMENTO....: HH:MM:SS:CC
==================================================
www.grandeporte.com.br
Parte 6
35
JOB de Execuo
Os arquivos de entrada (CLISP, CLIRJ e CLIMG) esto com o prefixo do
instrutor, j o de sada (CLIUNIF) est com o prefixo do aluno.
11234567892123456789312345678941234567895123456789612345678971234567898
12345678901234567890123456789012345678901234567890123456789012345678901234567890
//GPXXNN05 JOB SEUNOME,MSGCLASS=X,CLASS=C,NOTIFY=GPXXNN,TIME=(0,20)
//*****************************************************************
//STEP1
EXEC PGM=GPXXNN05
//STEPLIB DD DSN=GP.GERAL.LOADLIB,DISP=SHR
//CLISP
DD DSN=GP.GPXX99.CLISP,DISP=SHR
//CLIRJ
DD DSN=GP.GPXX99.CLIRJ,DISP=SHR
//CLIMG
DD DSN=GP.GPXX99.CLIMG,DISP=SHR
//CLIUNIF DD DSN=GP.GPXXNN.CLIUNIF,DISP=OLD,
//
SPACE=(TRK,(1,1),RLSE),UNIT=SYSALLDA,
//
DCB=(LRECL=96,RECFM=FB,DSORG=PS,BLKSIZE=0)
WS-REG-CLIUNIF-F.
05 WS-CPFCLI-F.
10 WS-NUMCPF-F
10 FILLER
PIC 999.999.999.
PIC X(01)
VALUE -.
PIC 99.
PIC X(25).
PIC X(30).
10 WS-DIGITOCPF-F
05 WS-NOMECLI-F
05 WS-ENDCLI-F
05 WS-FONECLI-F.
10 WS-DDD-F
10 FILLER
10 WS-FONE-PARTE1-F
10 FILLER
10 WS-FONE-PARTE2-F
05 WS-TOTALCOMPRAS-F
05 WS-ULTIMACOMPRA-F.
10 WS-DIA-ULTIMACOMPRA-F
10 FILLER
10 WS-MES-ULTIMACOMPRA-F
10 FILLER
10 WS-ANO-ULTIMACOMPRA-F
www.grandeporte.com.br
PIC 99.
PIC X(01)
VALUE -.
PIC X(04).
PIC X(01)
VALUE -.
PIC X(04).
PIC ZZ.ZZZ.ZZ9,99.
PIC 99.
PIC X(01)
VALUE /.
PIC X(03).
PIC X(01)
VALUE /.
PIC 9(04).
36
Parte 6
WS-CPFCLI-UNIF(01:09)
TO WS-NUMCPF-F
WS-CPFCLI-UNIF(10:02)
TO WS-DIGITOCPF-F
WS-NOMECLI-UNIF
TO WS-NOMECLI-F
WS-ENDCLI-UNIF
TO WS-ENDCLI-F
WS-FONECLI-UNIF(01:02) TO WS-DDD-F
WS-FONECLI-UNIF(03:04) TO WS-FONE-PARTE1-F
WS-FONECLI-UNIF(07:04) TO WS-FONE-PARTE2-F
WS-TOTALCOMPRAS-UNIF
TO WS-TOTALCOMPRAS-F
WS-ULTIMACOMPRA-UNIF(07:02)
TO WS-DIA-ULTIMACOMPRA-F
MOVE WS-ULTIMACOMPRA-UNIF(01:04)
TO WS-ANO-ULTIMACOMPRA-F
EVALUATE WS-ULTIMACOMPRA-UNIF(05:02)
WHEN 01 MOVE JAN
TO WS-MES-ULTIMACOMPRA-F
WHEN 02 MOVE FEV
TO WS-MES-ULTIMACOMPRA-F
WHEN 03 MOVE MAR
TO WS-MES-ULTIMACOMPRA-F
WHEN 04 MOVE ABR
TO WS-MES-ULTIMACOMPRA-F
WHEN 05 MOVE MAI
TO WS-MES-ULTIMACOMPRA-F
WHEN 06 MOVE JUN
TO WS-MES-ULTIMACOMPRA-F
WHEN 07 MOVE JUL
TO WS-MES-ULTIMACOMPRA-F
WHEN 08 MOVE AGO
TO WS-MES-ULTIMACOMPRA-F
WHEN 09 MOVE SET
TO WS-MES-ULTIMACOMPRA-F
WHEN 10 MOVE OUT
TO WS-MES-ULTIMACOMPRA-F
WHEN 11 MOVE NOV
TO WS-MES-ULTIMACOMPRA-F
WHEN 12 MOVE DEZ
TO WS-MES-ULTIMACOMPRA-F
END-EVALUATE
DISPLAY
**************************************************
DISPLAY
*
CLIENTE COM CPF REJEITADO
*
DISPLAY
**************************************************
DISPLAY C.P.F.
: WS-CPFCLI-F
DISPLAY NOME
: WS-NOMECLI-F
DISPLAY ENDERECO
: WS-ENDCLI-F
DISPLAY TELEFONE
: WS-FONECLI-F
DISPLAY COMPRAS
: R$ WS-TOTALCOMPRAS-F
DISPLAY ULTIMA COMPRA : WS-ULTIMACOMPRA-F
END-IF
.
www.grandeporte.com.br
Parte 6
37
www.grandeporte.com.br
38
Parte 6
Avaliao
Estou fera!
Fiz Certo!
Muito Bom
Bom
www.grandeporte.com.br
regular
ruim
Muito ruim
Parte
Verso 2.3.5
Parte 7
Preparation
Trocando Ideias
Reflexo
www.grandeporte.com.br
Parte 7
Presentation
Histria
www.grandeporte.com.br
Parte 7
Teoria
Operadores aritmticos
(somar)
(subtrair)
(multiplicar)
(dividir)
(calcular)
www.grandeporte.com.br
Parte 7
ADD
Acumula constantes e variveis em uma ou mais variveis de resultado. O
contedo da varivel de resultado tambm somado com os demais valores.
Exemplo:
----+-*A-1-B--+----2----+----3----+----4----+----5----+----6----+----7--|-+----8
ADD 18 TO WS-TOTAL
ADD WS-VALOR TO WS-ACUMULADOR-TOTAL
ADD WS-DEBITO WS-CREDITO TO WS-SALDO
ADD WS-BONUS TO WS-SALARIO WS-COMISSAO
www.grandeporte.com.br
Parte 7
SUBTRACT
Subtrai uma ou mais constantes e variveis numricas de uma varivel de
resultado. Exemplo:
----+-*A-1-B--+----2----+----3----+----4----+----5----+----6----+----7--|-+----8
SUBTRACT 1 FROM WS-CONTATOR
SUBTRACT WS-ENCARGOS WS-DEBITOS FROM WS-SALDO
SUBTRACT WS-VALOR-1 WS-VALOR-2
FROM WS-SALDO
GIVING WS-RESULTADO
SUBTRACT WS-VAL1 FROM
GIVING WS-DIFERENCA
ON SIZE ERROR
DISPLAY ERRO NO
DISPLAY CONTATE
GO TO 9000-ERRO
END-SUBTRACT
WS-VAL2
ROUNDED
TAMANHO DA VARIAVEL WS-DIFERENCA
O ANALISTA RESPONSAVEL
www.grandeporte.com.br
Parte 7
DIVIDE
Efetua uma diviso, determinando o quociente e, se indicado, o resto. Possui 2
formatos: INTO e BY. Exemplo:
----+-*A-1-B--+----2----+----3----+----4----+----5----+----6----+----7--|-+----8
DIVIDE 4 INTO WS-CONTADOR
DIVIDE 12 INTO WS-SALARIO-ANUAL GIVING WS-SALARIO-MENSAL
DIVIDE WS-NUM INTO WS-SOMADOR
GIVING WS-QUOCIENTE REMINDER WS-RESTO
DIVIDE WS-CONTADOR BY 4 GIVING WS-CONTATOR
DIVIDE WS-SALARIO-ANUAL BY 12 GIVING WS-SALARIO-MENSAL
DIVIDE WS-SOMADOR BY WS-NUM GIVING WS-QUOCIENTE REMAINDER WS-RESTO
DIVIDE WS-SOMADOR BY WS-NUM
GIVING WS-QUOCIENTE ROUNDED
REMAINDER WS-RESTO
ON SIZE ERROR
DISPLAY ERRO NO TAMANHO DA VARIAVEL WS-QUOCIENTE
DISPLAY CONTATE O ANALISTA RESPONSAVEL
GO TO 9000-ERRO
END-DIVIDE
Observe que GIVING opcional com INTO, mas obrigatrio com BY. Com
INTO sem GIVING, o resultado fica armazenado na varivel aps o INTO. A opo
REMAINDER utilizada para determinar o resto da diviso, que fica armazenado na
varivel aps o REMAINDER. Depois da palavra GIVING, contudo, o campo pode ser
um item de relatrio. ou seja, pode possuir mscara de edio.
Diviso por Zero tambm causa SIZE ERROR. Em uma diviso, a condio de
erro de tamanho tem um significado adicional: Se for feita uma tentativa de diviso por
zero, ocorrer uma condio de erro de tamanho, porque a diviso por zero resulta em
um valor infinito. O que torna impossvel definir um campo receptor muito grande.
Abaixo exemplo de DIVIDE e o equivalente com COMPUTE.
----+-*A-1-B--+----2----+----3----+----4----+----5----+----6----+----7--|-+----8
DIVIDE A INTO B
COMPUTE B = B / A
DIVIDE A INTO B GIVING C
COMPUTE C = B / A
DIVIDE A BY
COMPUTE C =
COMPUTE D =
COMPUTE E =
B
A
A
A
GIVING C D E
/ B
/ B
/ B
www.grandeporte.com.br
Parte 7
MULTIPLY
Efetua a multiplicao entre variveis. Exemplo:
----+-*A-1-B--+----2----+----3----+----4----+----5----+----6----+----7--|-+----8
MULTIPLY 4 BY WS-VALOR
MULTIPLY WS-SALARIO-MES BY 12 GIVING WS-SALARIO-ANUAL
MULTIPLY WS-SALARIO-MES BY WS-QTD-MESES
GIVING WS-SALARIO-ANUAL ROUNDED
ON SIZE ERROR
DISPLAY ERRO NO TAMANHO DA VARIAVEL WS-SALARIO-ANUAL
DISPLAY CONTATE O ANALISTA RESPONSAVEL
GO TO 9000-ERRO
END-MULTIPLY
B
*
*
*
GIVING C D E
B
B
B
www.grandeporte.com.br
10
Parte 7
COMPUTE
Como visto anteriormente, realiza operaes aritmticas mais sofisticadas,
utilizando o operador de atribuio = e uma expresso aritmtica. Exemplo:
----+-*A-1-B--+----2----+----3----+----4----+----5----+----6----+----7--|-+----8
COMPUTE WS-CONTADOR = WS-CONTADOR + 1
COMPUTE WS-SALARIO-ANUAL = WS-SALARIO-MES * 12
COMPUTE WS-DIAGONAL = ((WS-LADO ** 2) ** 0,5)
COMPUTE WS-SALARIO-ANUAL = WS-SALARIO-MES * 12 ROUNDED
ON SIZE ERROR
DISPLAY ERRO NO TAMANHO DA VARIAVEL WS-SALARIO-ANUAL
DISPLAY ENTRE EM CONTATO COM O ANALISTA RESPONSAVEL
GO TO 9000-ERRO
END-COMPUTE
2 4
2
J com ADD, SUBTRACT, MULTIPLY, DIVIDE e COMPUTE para calcular a raiz quadrada
fica:
----+-*A-1-B--+----2----+----3----+----4----+----5----+----6----+----7--|-+----8
MULTIPLY B BY B GIVING B-QUADRADO
MULTIPLY 4 BY A GIVING QUATRO-A
MULTIPLY QUATRO-A BY C GIVING QUATRO-A-C
SUBTRACT QUATRO-A-C FROM B-QUADRADO GIVING DELTA
COMPUTE RAIZ-DELTA = DELTA ** 0,5
MULTIPLY -1 BY B GIVING MENOS-B
ADD MENOS-B TO RAIZ-DELTA GIVING NUMERADOR
MULTIPLY 2 BY A GIVING DENOMINADOR
DIVIDE NUMERADOR BY DENOMINADOR GIVING X
Traduzindo:
3
www.grandeporte.com.br
Parte 7
Teoria
11
www.grandeporte.com.br
12
Parte 7
Agora um exemplo de cdigo sem o uso de flag.
----+-*A-1-B--+----2----+----3----+----4----+----5----+----6----+----7--|-+----8
XXXXXXXXXXXIF WS-COR-CABELO = C
DISPLAY CASTANHO
ELSE
IF WS-COR-CABELO = P
DISPLAY PRETO
ELSE
IF WS-COR-CABELO = L
DISPLAY LOIRO
ELSE
DISPLAY OUTRO
END-IF
END-IF
END-IF
www.grandeporte.com.br
Parte 7
13
Para setar, fazer um nome de condio ser verdadeiro usa-se a instruo SET.
----+-*A-1-B--+----2----+----3----+----4----+----5----+----6----+----7--|-+----8
* SETANDO A VARIAVEL WS-COR-CABELO COM L
SET LOIRO TO TRUE
* EH O MESMO QUE
MOVE L
TO WS-COR-CABELO
No usar NOT TRUE ou FALSE para setar o nome da condio, pois gera os
seguintes erros:
SET LOIRO TO NOT TRUE
"NOT" was found in the "SET" statement. It was not allowed in this context.
The statement was discarded.
SET LOIRO TO FALSE
"FALSE" was found in the "SET" statement. It was not allowed in this context.
The statement was discarded.
A seguir um exemplo de programa que recebe uma data via PARM GO do JCL
e a valida.
----+-*A-1-B--+----2----+----3----+----4----+----5----+----6----+----7--|-+----8
*--------------------------------------------------------------*
IDENTIFICATION
DIVISION.
*--------------------------------------------------------------*
PROGRAM-ID.
VALIDADT.
*--------------------------------------------------------------*
ENVIRONMENT
DIVISION.
*--------------------------------------------------------------*
CONFIGURATION
SECTION.
SPECIAL-NAMES.
DECIMAL-POINT IS COMMA.
INPUT-OUTPUT
SECTION.
*--------------------------------------------------------------*
DATA
DIVISION.
*--------------------------------------------------------------*
WORKING-STORAGE
SECTION.
*--------------------------------------------------------------*
01 WS-SITUACAO-DATA
PIC X(01).
88 DATA-INVALIDA
VALUE '0'.
88 DATA-VALIDA
VALUE '1'.
01
WS-CALCULO-BISSEXTO.
05 WS-Q4
PIC 9(06) COMP.
05 WS-Q100
PIC 9(06) COMP.
05 WS-Q400
PIC 9(06) COMP.
05 WS-Q3600
PIC 9(06) COMP.
05 WS-R4
PIC 9(06) COMP.
05 WS-R100
PIC 9(06) COMP.
05 WS-R400
PIC 9(06) COMP.
05 WS-R3600
PIC 9(06) COMP.
*--------------------------------------------------------------*
LINKAGE
SECTION.
*--------------------------------------------------------------*
01 LS-PARAMETRO.
05 LS-TAMANHO-PARAMETRO
PIC S9(04) COMP.
05 LS-DATA-PARA-VALIDAR.
10 LS-ANO
PIC 9(04).
10 LS-MES
PIC 9(02).
10 LS-DIA
PIC 9(02).
www.grandeporte.com.br
14
Parte 7
*--------------------------------------------------------------*
PROCEDURE
DIVISION
USING LS-PARAMETRO.
*--------------------------------------------------------------*
*
* PRIMEIRO VAMOS CONSIDERAR QUE A DATA EH VALIDA
*
SET DATA-VALIDA TO TRUE
*
* TESTE 01 - ANO ENTRE 1 E 2099
*
IF DATA-VALIDA AND (LS-ANO < 1 OR > 2099)
SET DATA-INVALIDA TO TRUE
END-IF
*
* TESTE 02 - MES ENTRE 1 E 12
*
IF DATA-VALIDA AND (LS-MES < 1 OR > 12)
SET DATA-INVALIDA TO TRUE
END-IF
*
* TESTE 03 - MES COM 30 OU 31 DIAS
*
IF DATA-VALIDA AND (LS-MES = 1 OR 3 OR 5 OR 7 OR
8 OR 10 OR 12)
IF LS-DIA < 1 OR > 31
SET DATA-INVALIDA TO TRUE
END-IF
ELSE
IF LS-MES NOT = 2 AND (LS-DIA < 1 OR > 30)
SET DATA-INVALIDA TO TRUE
END-IF
END-IF
*
* TESTE 04 - FEVEREIRO EM ANO BISSEXTO
*
IF DATA-VALIDA AND LS-MES = 2
DIVIDE LS-ANO BY
4 GIVING WS-Q4
DIVIDE LS-ANO BY 100 GIVING WS-Q100
DIVIDE LS-ANO BY 400 GIVING WS-Q400
DIVIDE LS-ANO BY 3600 GIVING WS-Q3600
REMAINDER
REMAINDER
REMAINDER
REMAINDER
WS-R4
WS-R100
WS-R400
WS-R3600
IF WS-R4
= 0 AND WS-R100 NOT = 0 OR
WS-R400 = 0 AND WS-R3600 NOT = 0
IF LS-DIA < 1 OR > 29
SET DATA-INVALIDA TO TRUE
END-IF
ELSE
IF LS-DIA < 1 OR > 28
SET DATA-INVALIDA TO TRUE
END-IF
END-IF
END-IF
*
* VERIFICANDO SE A DATA CONTINUA VALIDA
*
IF DATA-VALIDA
DISPLAY "DATA VALIDA = " LS-DATA-PARA-VALIDAR
ELSE
DISPLAY "DATA INVALIDA = " LS-DATA-PARA-VALIDAR
END-IF
STOP RUN
.
www.grandeporte.com.br
Parte 7
Teoria
15
Arquivos com
mltiplos layouts
A - IDENTIFICAO
B - TRATAMENTO
C - PAGAMENTO
A - IDENTIFICAO
B - TRATAMENTO
C - PAGAMENTO
B - TRATAMENTO
C - PAGAMENTO
C - PAGAMENTO
C - PAGAMENTO
www.grandeporte.com.br
16
Parte 7
Para garantir que todos os registros tenham o mesmo comprimento (record
legth), um FILLER (enchedor) atribudo no final dos registros menores, de forma a
igualar ao tamanho do maior. Ou todos os registros possuem um FILLER para chegar
a um nmero redondo.
A - IDENTIFICAO
FILLER
B - TRATAMENTO
C - PAGAMENTO
A - IDENTIFICAO
FILLER
FILLER
B - TRATAMENTO
C - PAGAMENTO
A - IDENTIFICAO
FILLER
FILLER
B - TRATAMENTO
C - PAGAMENTO
FILLER
FILLER
D - DATA
D - DATA
D - DATA
D - DATA
D - DATA
D - DATA
D - DATA
T - TRAILER
FILLER
Um arquivo mdico em COBOL pode conter ambos desses conceitos. Ele pode
comear com um registro de cabealho (H), seguido por um grupo de registros A, B, C
(um grupo para cada paciente), e terminar com um registro de reboque (T). Isso d um
arquivo com 5 tipos de registros.
www.grandeporte.com.br
Parte 7
17
REDEFINES
O COBOL permite que um item de dado seja redefinido (REDEFINES) para
representar dados com outro layout. Primeiro informamos o item de dado original,
depois na sequncia, suas redefinies. Exemplo:
----+-*A-1-B--+----2----+----3----+----4----+----5----+----6----+----7--|-+----8
*----------------------------------------------------------------*
FILE
SECTION.
*----------------------------------------------------------------*
FD CADALUNO
RECORDING MODE IS F.
01 REG-CADALUNO
PIC X(70).
XXXX
XXXX
*----------------------------------------------------------------*
WORKING-STORAGE
SECTION.
*----------------------------------------------------------------*
01 WS-REG-CADALUNO.
05 WS-TIPO-REG
PIC X(01).
05 FILLER
PIC X(69).
01
01
01
XXXX
XXXX
XXXX
XXXX
XXXX
XXXX
XXXX
XXXX
www.grandeporte.com.br
18
Parte 7
O header deve ser o primeiro registro do arquivo, enquanto o trailer deve ser o
ltimo. A lgica do programa que ir manipular esse arquivo deve garantir que isso
acontea.
HEADER
DATA
DATA
READ CADALUNO
INTO WS-REG-CADALUNO
DATA
WS-REG-CADALUNO
WS-REG-CADALUNO-HEADER
WS-REG-CADALUNO-DATA
DATA
WS-REG-CADALUNO-TRAILER
DATA
TRAILER
www.grandeporte.com.br
EXEMPLO
BALANCE LINE
Parte 7
19
Objetivo do Programa
Atualizar o cadastro de produtos e servios PSOLD com base no arquivo de
movimento PSMOV, utilizando um algoritmo de BALANCE LINE, gerando o arquivo
PSNEW.
Para cada registro do arquivo PSOLD pode haver nenhum ou um registro no
arquivo PSMOV.
Macro-Fluxo
PSOLD
PSMOV
EEXXNN06
PSNEW
www.grandeporte.com.br
20
Parte 7
Nome do arquivo
Nome do Registro
Nome do Campo
TIPO-REGISTRO-O
FILLER
PSOLD
REG-PSOLD
Tipo e Tamanho Descrio
X(01)
Tipo do registro
X(42)
Nome do arquivo
Nome do Registro
Nome do Campo
FILLER
SIGLA-SYS-O
ANO-MES-REF-O
FILLER
PSOLD
REG-PSOLD-HEADER
Tipo e Tamanho Descrio
X(01)
Header H
X(05)
Sigla do Sistema
X(06)
Ano e ms de referncia
X(31)
Nome do arquivo
Nome do Registro
Nome do Campo
FILLER
CODPS-O
DESCPS-O
VALORPS-O
PSOLD
REG-PSOLD-DATA
Tipo e Tamanho Descrio
X(01)
Data D
X(05)
Cdigo do produto/servio
X(30)
Descrio do produto/servio
9(05)V99
Valor do produto/servio
Nome do arquivo
Nome do Registro
Nome do Campo
FILLER
QTD-REG-O
FILLER
PSOLD
REG-PSOLD-TRAILER
Tipo e Tamanho Descrio
X(01)
Trailer T
9(05)
Quantidade de registros
X(37)
Layout da SYSOUT
1
2
3
4
5
12345678901234567890123456789012345678901234567890
==================================================
TOTAL DE REGISTROS LIDOS OLD: ZZZ9
TOTAL DE REGISTROS LIDOS MOV: ZZZ9
TOTAL DE REGISTROS GRAVADOS.: ZZZ9
TOTAL DE REGISTROS INCLUIDOS: ZZZ9
TOTAL DE REGISTROS EXCLUIDOS: ZZZ9
TOTAL DE REGISTROS ALTERADOS: ZZZ9
TOTAL DE REGISTROS INVALIDOS: ZZZ9
TOTAL DE REGISTROS PERMANEC.: ZZZ9
==================================================
www.grandeporte.com.br
Parte 7
Nome do arquivo
Nome do Registro
Nome do Campo
TIPO-REGISTRO-M
FILLER
PSMOV
REG-PSMOV
Tipo e Tamanho Descrio
X(01)
Tipo do registro
X(43)
Nome do arquivo
Nome do Registro
Nome do Campo
FILLER
SIGLA-SYS-M
ANO-MES-REF-M
FILLER
PSMOV
REG-PSMOV-HEADER
Tipo e Tamanho Descrio
X(01)
Header H
X(05)
Sigla do Sistema
X(06)
Ano e ms de referncia
X(31)
Nome do arquivo
Nome do Registro
Nome do Campo
FILLER
CODPS-M
DESCPS-M
VALORPS-M
TIPOMOV-M
PSMOV
REG-PSMOV-DATA
Tipo e Tamanho Descrio
X(01)
Data D
X(05)
Cdigo do produto/servio
X(30)
Descrio do produto/servio
9(05)V99
Valor do produto/servio
X(01)
Tipo do movimento (I, E ou A)
Nome do arquivo
Nome do Registro
Nome do Campo
FILLER
QTD-REG-M
FILLER
PSMOV
REG-PSMOV-TRAILER
Tipo e Tamanho Descrio
X(01)
Trailer T
9(05)
Quantidade de registros
X(38)
Nome do arquivo
Nome do Registro
Nome do Campo
CODPS-N
DESCPS-N
VALORPS-N
PSNEW
REG-PSNEW
Tipo e Tamanho
X(05)
X(30)
9(05)V99
www.grandeporte.com.br
Descrio
Cdigo do produto/servio
Descrio do produto/servio
Valor do produto/servio
21
22
Parte 7
Observao
www.grandeporte.com.br
Parte 7
23
Programa COBOL
----+-*A-1-B--+----2----+----3----+----4----+----5----+----6----+----7--|-+----8
*--------------------------------------------------------------*
IDENTIFICATION
DIVISION.
*--------------------------------------------------------------*
PROGRAM-ID.
EEXXNN06.
AUTHOR.
SEUNOME.
*--------------------------------------------------------------*
ENVIRONMENT
DIVISION.
*--------------------------------------------------------------*
CONFIGURATION
SECTION.
SPECIAL-NAMES.
DECIMAL-POINT IS COMMA.
INPUT-OUTPUT
SECTION.
FILE-CONTROL.
SELECT PSOLD ASSIGN TO UT-S-PSOLD
FILE STATUS IS FS-PSOLD
.
SELECT PSMOV ASSIGN TO UT-S-PSMOV
FILE STATUS IS FS-PSMOV
.
SELECT PSNEW ASSIGN TO UT-S-PSNEW
FILE STATUS IS FS-PSNEW
.
*--------------------------------------------------------------*
DATA
DIVISION.
*--------------------------------------------------------------*
FILE
SECTION.
*--------------------------------------------------------------*
FD PSOLD
LABEL RECORD STANDARD
BLOCK CONTAINS 0 RECORDS
RECORDING MODE IS F
RECORD CONTAINS 43 CHARACTERS
DATA RECORD IS REG-PSOLD
.
01 REG-PSOLD
PIC X(43).
*--------------------------------------------------------------*
FD
01
PSMOV
LABEL RECORD STANDARD
BLOCK CONTAINS 0 RECORDS
RECORDING MODE IS F
RECORD CONTAINS 44 CHARACTERS
DATA RECORD IS REG-PSMOV
.
REG-PSMOV
PIC X(44).
*--------------------------------------------------------------*
FD
01
PSNEW
LABEL RECORD STANDARD
BLOCK CONTAINS 0 RECORDS
RECORDING MODE IS F
RECORD CONTAINS 42 CHARACTERS
DATA RECORD IS REG-PSNEW
.
REG-PSNEW
www.grandeporte.com.br
PIC X(42).
24
Parte 7
----+-*A-1-B--+----2----+----3----+----4----+----5----+----6----+----7--|-+----8
*--------------------------------------------------------------*
WORKING-STORAGE
SECTION.
*--------------------------------------------------------------*
* DEFINICAO DAS VARIAVEIS ESPELHOS E SUAS REDEFINICOES
*--------------------------------------------------------------*
01
WS-REG-PSOLD.
05 WS-TIPO-REGISTRO-O
05 FILLER
PIC X(01).
PIC X(42).
01
01
01
*--------------------------------------------------------------*
01
WS-REG-PSMOV.
05 WS-TIPO-REGISTRO-M
05 FILLER
PIC X(01).
PIC X(43).
01
01
01
*--------------------------------------------------------------*
01
WS-REG-PSNEW.
05 WS-CODPS-N
05 WS-DESCPS-N
05 WS-VALORPS-N
PIC X(05).
PIC X(30).
PIC 9(05)V99.
*--------------------------------------------------------------*
* FLAGS PARA O FILE STATUS DOS ARQUIVOS
*--------------------------------------------------------------*
01
FS-PSOLD
88 SUCESSO-O
88 FIM-ARQ-O
PIC X(02).
VALUE "00".
VALUE "10".
01
FS-PSMOV
88 SUCESSO-M
88 FIM-ARQ-M
PIC X(02).
VALUE "00".
VALUE "10".
01
FS-PSNEW
88 SUCESSO-N
88 FIM-ARQ-N
PIC X(02).
VALUE "00".
VALUE "10".
www.grandeporte.com.br
25
Parte 7
----+-*A-1-B--+----2----+----3----+----4----+----5----+----6----+----7--|-+----8
*--------------------------------------------------------------*
* CONTADORES NO FORMATO BINARIO
*--------------------------------------------------------------*
77
77
77
77
77
77
77
77
WS-CTLIDO-O
WS-CTLIDO-M
WS-CTGRAV
WS-CTINC
WS-CTEXC
WS-CTALT
WS-CTINV
WS-CTPERM
PIC
PIC
PIC
PIC
PIC
PIC
PIC
PIC
9(04)
9(04)
9(04)
9(04)
9(04)
9(04)
9(04)
9(04)
COMP.
COMP.
COMP.
COMP.
COMP.
COMP.
COMP.
COMP.
*--------------------------------------------------------------*
* CONTADORES COM MASCARA DE EDICAO
*--------------------------------------------------------------*
77
77
77
77
77
77
77
77
WS-CTLIDO-O-F
WS-CTLIDO-M-F
WS-CTGRAV-F
WS-CTINC-F
WS-CTEXC-F
WS-CTALT-F
WS-CTINV-F
WS-CTPERM-F
PIC
PIC
PIC
PIC
PIC
PIC
PIC
PIC
ZZZ9.
ZZZ9.
ZZZ9.
ZZZ9.
ZZZ9.
ZZZ9.
ZZZ9.
ZZZ9.
*--------------------------------------------------------------*
* VARIAVEIS PARA A ROTINA DE ERRO
*--------------------------------------------------------------*
77
77
WS-MSG
WS-FS
PIC X(60).
PIC X(02).
*--------------------------------------------------------------*
PROCEDURE
DIVISION.
*--------------------------------------------------------------*
0000-EEXXNN06.
PERFORM 1000-INICIALIZAR
PERFORM 2000-PROCESSAR UNTIL WS-TIPO-REGISTRO-O = "T"
AND WS-TIPO-REGISTRO-M = "T"
PERFORM 3000-TERMINO
STOP RUN
.
1000-INICIALIZAR.
MOVE 0
TO WS-CTLIDO-O
WS-CTLIDO-M
WS-CTGRAV
WS-CTINC
WS-CTEXC
WS-CTALT
WS-CTINV
WS-CTPERM
TO WS-MSG
TO WS-FS
TO WS-MSG
TO WS-FS
TO WS-MSG
TO WS-FS
www.grandeporte.com.br
26
Parte 7
----+-*A-1-B--+----2----+----3----+----4----+----5----+----6----+----7--|-+----8
PERFORM 1500-LER-PSOLD
IF FIM-ARQ-O
MOVE "PSOLD VAZIO"
MOVE FS-PSOLD
GO TO 9000-ERRO
END-IF
TO WS-MSG
TO WS-FS
TO WS-MSG
TO WS-FS
www.grandeporte.com.br
WS-CODPS-O
WS-MSG
WS-FS
WS-MSG
WS-FS
Parte 7
----+-*A-1-B--+----2----+----3----+----4----+----5----+----6----+----7--|-+----8
1600-LER-PSMOV.
READ PSMOV INTO WS-REG-PSMOV
IF SUCESSO-M
ADD 1 TO WS-CTLIDO-M
IF WS-TIPO-REGISTRO-M = "T"
MOVE HIGH-VALUES
TO WS-CODPS-M
END-IF
ELSE
IF FIM-ARQ-M
IF WS-CTLIDO-M > 0
MOVE "PSMOV SEM TRAILER"
TO WS-MSG
MOVE FS-PSMOV
TO WS-FS
GO TO 9000-ERRO
END-IF
ELSE
MOVE "ERRO LEITURA PSMOV" TO WS-MSG
MOVE FS-PSMOV
TO WS-FS
GO TO 9000-ERRO
END-IF
END-IF
.
2000-PROCESSAR.
IF WS-CODPS-O < WS-CODPS-M
PERFORM 2100-MANTER
PERFORM 1500-LER-PSOLD
ELSE
IF WS-CODPS-O > WS-CODPS-M
PERFORM 2200-INCLUIR
PERFORM 1600-LER-PSMOV
ELSE
PERFORM 2300-ALT-EXC
PERFORM 1500-LER-PSOLD
PERFORM 1600-LER-PSMOV
END-IF
END-IF
.
2100-MANTER.
PERFORM 2500-GRAVA-O
ADD 1 TO WS-CTPERM
.
2200-INCLUIR.
IF WS-TIPOMOV-M = "I"
PERFORM 2600-GRAVA-M
ADD 1 TO WS-CTINC
ELSE
ADD 1 TO WS-CTINV
END-IF
.
2300-ALT-EXC.
IF WS-TIPOMOV-M = "A"
PERFORM 2600-GRAVA-M
ADD 1 TO WS-CTALT
ELSE
IF WS-TIPOMOV-M = "E"
ADD 1 TO WS-CTEXC
ELSE
ADD 1 TO WS-CTINV
ADD 1 TO WS-CTPERM
PERFORM 2500-GRAVA-O
END-IF
END-IF
.
www.grandeporte.com.br
27
28
Parte 7
----+-*A-1-B--+----2----+----3----+----4----+----5----+----6----+----7--|-+----8
2500-GRAVA-O.
MOVE WS-CODPS-O
TO WS-CODPS-N
MOVE WS-DESCPS-O
TO WS-DESCPS-N
MOVE WS-VALORPS-O
TO WS-VALORPS-N
WRITE REG-PSNEW FROM WS-REG-PSNEW
IF NOT SUCESSO-N
MOVE "ERRO GRAVACAO PSNEW"
TO WS-MSG
MOVE FS-PSNEW
TO WS-FS
GO TO 9000-ERRO
ELSE
ADD 1 TO WS-CTGRAV
END-IF
.
2600-GRAVA-M.
MOVE WS-CODPS-M
TO WS-CODPS-N
IF WS-DESCPS-M NOT = SPACES
MOVE WS-DESCPS-M
ELSE
MOVE WS-DESCPS-O
END-IF
IF WS-VALORPS-M IS NUMERIC
MOVE WS-VALORPS-M
ELSE
MOVE WS-VALORPS-O
END-IF
WRITE REG-PSNEW
IF NOT SUCESSO-N
MOVE "ERRO GRAVACAO PSNEW"
MOVE FS-PSNEW
GO TO 9000-ERRO
ELSE
ADD 1 TO WS-CTGRAV
END-IF
.
3000-TERMINO.
MOVE WS-CTLIDO-O
MOVE WS-CTLIDO-M
MOVE WS-CTGRAV
MOVE WS-CTINC
MOVE WS-CTEXC
MOVE WS-CTALT
MOVE WS-CTINV
MOVE WS-CTPERM
DISPLAY
DISPLAY
DISPLAY
DISPLAY
DISPLAY
DISPLAY
DISPLAY
DISPLAY
DISPLAY
DISPLAY
TO WS-DESCPS-N
TO WS-DESCPS-N
TO WS-VALORPS-N
TO WS-VALORPS-N
FROM WS-REG-PSNEW
TO WS-MSG
TO WS-FS
TO
TO
TO
TO
TO
TO
TO
TO
WS-CTLIDO-O-F
WS-CTLIDO-M-F
WS-CTGRAV-F
WS-CTINC-F
WS-CTEXC-F
WS-CTALT-F
WS-CTINV-F
WS-CTPERM-F
"=================================================="
"TOTAL DE REGISTROS LIDOS OLD: " WS-CTLIDO-O-F
"TOTAL DE REGISTROS LIDOS MOV: " WS-CTLIDO-M-F
"TOTAL DE REGISTROS GRAVADOS.: " WS-CTGRAV-F
"TOTAL DE REGISTROS INCLUIDOS: " WS-CTINC-F
"TOTAL DE REGISTROS EXCLUIDOS: " WS-CTEXC-F
"TOTAL DE REGISTROS ALTERADOS: " WS-CTALT-F
"TOTAL DE REGISTROS INVALIDOS: " WS-CTINV-F
"TOTAL DE REGISTROS PERMANEC.: " WS-CTPERM-F
"=================================================="
CLOSE PSOLD
IF NOT SUCESSO-O
MOVE "ERRO FECHAMENTO PSOLD" TO WS-MSG
MOVE FS-PSOLD
TO WS-FS
GO TO 9000-ERRO
END-IF
CLOSE PSMOV
IF NOT SUCESSO-M
MOVE "ERRO FECHAMENTO PSMOV" TO WS-MSG
MOVE FS-PSMOV
TO WS-FS
GO TO 9000-ERRO
END-IF
www.grandeporte.com.br
Parte 7
29
----+-*A-1-B--+----2----+----3----+----4----+----5----+----6----+----7--|-+----8
CLOSE PSNEW
IF NOT SUCESSO-N
MOVE "ERRO FECHAMENTO PSNEW" TO WS-MSG
MOVE FS-PSNEW
TO WS-FS
GO TO 9000-ERRO
END-IF
DISPLAY "=================================================="
DISPLAY "
TERMINO NORMAL EEXXNN06
"
DISPLAY "=================================================="
.
9000-ERRO.
DISPLAY "=================================================="
DISPLAY "MENSAGEM....: " WS-MSG
DISPLAY "FILE STATUS.: " WS-FS
DISPLAY "=================================================="
DISPLAY "==
TERMINO ANORMAL DO PROGRAMA EEXXNN06
=="
DISPLAY "=================================================="
MOVE 12
TO RETURN-CODE
STOP RUN
.
www.grandeporte.com.br
30
Parte 7
JOB de Execuo
www.grandeporte.com.br
Parte 7
31
Practice
Atividade
01 VARIAVEIS.
05 COD-ENT-CD
PIC 9(3) VALUE 7.
05 COD-EMP-CD
PIC 9(3) VALUE ZEROS.
05 IND
PIC 9(2) VALUE ZEROS.
05 QUO-EMP-CD
PIC 9(3) VALUE ZEROS.
05 RES-EMP-CD
PIC 9(3) VALUE ZEROS.
.............................................
PERFORM VARYING IND FROM 2 BY 1 UNTIL IND > 5
COMPUTE COD-EMP-CD = COD-EMP-CD + (COD-ENT-CD * IND)
END-PERFORM
DIVIDE COD-EMP-CD BY 2
GIVING QUO-EMP-CD
REMAINDER RES-EMP-CD
IF RES-EMP-CD > ZEROS
COMPUTE QUO-EMP-CD = IND * COD-EMP-CD
ELSE
DIVIDE COD-EMP-CD BY IND GIVING QUO-EMP-CD
END-IF
ADD 103 TO QUO-EMP-CD
MOVE QUO-EMP-CD TO RES-EMP-CD
DISPLAY 'RES-EMP-CD=' RES-EMP-CD.
Variveis
COD-ENT-CD
COD-EMP-CD
IND
QUO-EMP-CD
RES-EMP-CD
www.grandeporte.com.br
32
Parte 7
b) COMPUTE C = A + 7
c) COMPUTE C = A B 5
d) COMPUTE C = A / B
e) COMPUTE C = A * B
= 9 ( 32)
b)
= 745.6999
c)
d)
= ( )( )( )
++
2
www.grandeporte.com.br
Parte 7
Atividade
33
Trabalho em dupla
WORKING-STORAGE
www.grandeporte.com.br
SECTION.
34
Parte 7
Performance
Projeto 6
Atividade
Objetivo do Programa
A Paraguay Express, empresa de cartes de crdito, precisa de um programa
para atualizar o arquivo que contm os clientes devedores CLIOLD com base na
movimentao do perodo gravada no arquivo CLIMOV, gerando um cadastro de
clientes devedores atualizada CLINEW.
Ser usado o programa auxiliar PGMAUX02 para atualizar o saldo da dvida
quando necessrio.
No final exibir uma estatstica do processamento, datas e tempo gasto
conforme layout da SYSOUT.
Macro-Fluxo
CLIOLD
CLIMOV
GPXXNN06
PGMAUX02
CLINEW
www.grandeporte.com.br
Parte 7
35
Observao
Para cada registro de CLIOLD deve ter um registro de movimento em CLIMOV.
Trata-se ento de um BALANCE LINE 1:1 (leia-se um para um).
Clientes que pagaram as suas dvidas viro com o movimento E e no devem
ser gravadas no novo arquivo. (Excluso)
Clientes que adquiriram dvidas viro com o movimento I e devem ser
gravadas no novo arquivo. (Incluso)
Clientes que continuam devendo viro com o movimento A e devem ter o
valor da dvida corrigida antes de gravar no novo arquivo. A correo ser feita pelo
programa PGMAUX02, que vai somar juros no valor da dvida.
Clientes que no tem movimento devem ser exibidos na SYSOUT, seu cdigo
e a mensagem sem movimento para posterior anlise.
Execute os passos abaixo (Lembre-se de que XXNN o seu prefixo de
usurio):
1) Pela TSO, opo P.2 (Edit Entry Panel), crie o programa GPXXNN06 em
sua COBLIB.
2) Digite o programa COBOL conforme orientao para processamento. Utilize
flags (nvel 88) para verificar o FILE STATUS dos arquivos.
3) Compile com o job COMPCOB e elimine os erros at obter MAXCC = 0
4) Pela TSO, opo P.2 (Edit Entry Panel),crie o job EXECOB06 em sua
JOBLIB, monte o JOB de forma que os arquivos de entrada (CLIOLD e
CLIMOV) sejam lidos com o prefixo de seu instrutor (XX99) e altere XXNN
pelo prefixo de seu usurio.
5) Execute o programa com o job EXECOB06. Compare o resultado com os
dos colegas.
www.grandeporte.com.br
36
Parte 7
Layout da SYSOUT
1
2
3
4
5
12345678901234567890123456789012345678901234567890
**************************************************
* DATA GREGORIANA 1 - 99/99/2099
*
* DATA GREGORIANA 2 - 99 DE XXXXXXXXX DE 2099
*
* DATA JULIANA
999 DE 2099
*
* DIA DA SEMANA
XXXXXXXXXXXXX
*
**************************************************
1
2
3
4
5
12345678901234567890123456789012345678901234567890
==================================================
TOTAL DE CADASTROS LIDOS EM CLIOLD..........: ZZZ9
TOTAL DE MOVIMENTOS LIDOS EM CLIMOV.........: ZZZ9
TOTAL DE CADASTROS GRAVADOS EM CLINEW.......: ZZZ9
TOTAL DE CADASTROS INCLUIDOS EM CLINEW......: ZZZ9
TOTAL DE CADASTROS EXCLUIDOS DE CLIOLD......: ZZZ9
TOTAL DE CADASTROS ALTERADOS PARA CLINEW....: ZZZ9
TOTAL DE CADASTROS INVALIDOS................: ZZZ9
TOTAL DE MOVIMENTOS INVALIDOS...............: ZZZ9
TEMPO TOTAL DE PROCESSAMENTO.........: HH:MM:SS:CC
==================================================
Nome do Registro
Nome do Campo
WS-TOTALDIVIDA
WS-RESP
WS-DIVIDACALC
WS-DADOS-ENVIADOS
Tipo e Tamanho Descrio
9(08)V99
Divida atual
X(01)
Resposta
9(08)V99
Divida com juros
www.grandeporte.com.br
Parte 7
37
Nome do Registro
Nome do Campo
TIPO-REGISTRO-O
FILLER
REG-CLIOLD
Tipo e Tamanho
X(01)
X(79)
Nome do Registro
Nome do Campo
FILLER
SIGLA-SYS-O
ANO-MES-REF-O
FILLER
REG-CLIOLD-HEADER
Tipo e Tamanho Descrio
X(01)
Header H
X(05)
Sigla do Sistema
X(06)
Ano e ms de referncia
X(68)
Nome do Registro
Nome do Campo
FILLER
CODCLI-O
NOMECLI-O
ENDCLI-O
FONECLI-O
TOTALDIVIDA-O
REG-CLIOLD-DATA
Tipo e Tamanho Descrio
X(01)
Data D
X(04)
Cdigo do Cliente
X(25)
Nome do Cliente
X(30)
Endereo do Cliente
X(10)
Telefone do Cliente com DDD
9(08)V99
Valor total da dvida
Nome do Registro
Nome do Campo
FILLER
QTD-REG-O
FILLER
REG-CLIOLD-TRAILER
Tipo e Tamanho Descrio
X(01)
Trailer T
9(05)
Quantidade de registros
X(74)
Nome do Registro
Nome do Campo
TIPO-REGISTRO-M
FILLER
REG-CLIMOV
Tipo e Tamanho
X(01)
X(80)
Nome do Registro
Nome do Campo
FILLER
SIGLA-SYS-M
ANO-MES-REF-M
FILLER
REG-CLIMOV-HEADER
Tipo e Tamanho Descrio
X(01)
Header H
X(05)
Sigla do Sistema
X(06)
Ano e ms de referncia
X(69)
Nome do Registro
Nome do Campo
FILLER
CODCLI-M
NOMECLI-M
ENDCLI-M
FONECLI-M
TOTALDIVIDA-M
TIPOMOV-M
REG-CLIMOV-DATA
Tipo e Tamanho Descrio
X(01)
Data D
X(04)
Cdigo do Cliente
X(25)
Nome do Cliente
X(30)
Endereo do Cliente
X(10)
Telefone do Cliente com DDD
9(08)V99
Valor total da dvida
X(1)
Tipo do movimento (I / E / A)
Nome do Registro
Nome do Campo
FILLER
QTD-REGISTRO-M
FILLER
REG-CLIMOV-TRAILER
Tipo e Tamanho Descrio
X(01)
Trailer T
9(05)
Quantidade de registros
X(75)
www.grandeporte.com.br
Descrio
Tipo do registro
Descrio
Tipo do registro
38
Parte 7
Nome do Registro
Nome do Campo
CODCLI-N
NOMECLI-N
ENDCLI-N
FONECLI-N
TOTALDIVIDA-N
REG-CLINEW
Tipo e Tamanho
X(04)
X(25)
X(30)
X(10)
9(08)V99
Descrio
Cdigo do Cliente
Nome do Cliente
Endereo do Cliente
Telefone do Cliente com DDD
Valor total da dvida
Parte 7
39
www.grandeporte.com.br
40
Parte 7
Pargrafo 1100-LER-CLIOLD
Ler registro do arquivo CLIOLD carregando varivel espelho
Se file status for igual a 00 (sucesso)
Somar 1 ao contador de cadastros lidos CLIOLD
Se o tipo de registro for Trailer (T)
Mover HIGH-VALUES para o cdigo do cliente
Seno
Se file status for igual a 10 (fim de arquivo)
Se WS-CTLIDO-O > 0
Erro -> arquivo no tem Trailer
Mover mensagem de erro para varivel da rotina de erro
Mover file status para variveis da rotina de erro
Executar rotina de erro (9000-ERRO)
Seno
Mover mensagem de erro para varivel da rotina de erro
Mover file status para variveis da rotina de erro
Executar rotina de erro (9000-ERRO)
Pargrafo 1200-LER-CLIMOV
Ler registro do arquivo CLIMOV carregando varivel espelho
Se file status for igual a 00 (sucesso)
Somar 1 ao contador de cadastros lidos CLIMOV
Se o tipo de registro for Trailer (T)
Mover HIGH-VALUES para o cdigo do cliente
Seno
Se file status for igual a 10 (fim de arquivo)
Se WS-CTLIDO-M > 0
Erro -> arquivo no tem Trailer
Mover mensagem de erro para varivel da rotina de erro
Mover file status para variveis da rotina de erro
Executar rotina de erro (9000-ERRO)
Seno
Mover mensagem de erro para varivel da rotina de erro
Mover file status para variveis da rotina de erro
Executar rotina de erro (9000-ERRO)
Pargrafo 2000-PROCESSAR
Se o cdigo do cliente em CLIOLD for menor que o de MOVCLI
Somar 1 ao contador de cadastros invlidos
Ler o prximo registro de CLIOLD (1100-LER-CLIOLD)
Seno
Se o cdigo do cliente em CLIOLD for maior que o de MOVCLI
Executar o pargrafo 2100-INCLUIR
Ler o prximo registro de CLIMOV (1200-LER-CLIMOV)
Seno
(o cdigo do cliente em CLIOLD igual ao de MOVCLI)
Executar o pargrafo 2200-ALT-EXC
Ler o prximo registro de CLIOLD (1100-LER-CLIOLD)
Ler o prximo registro de CLIMOV (1200-LER-CLIMOV)
www.grandeporte.com.br
Parte 7
41
Pargrafo 2100-INCLUIR
Se o tipo de movimento for I
Executar o pargrafo 2400-GRAVA-M
Somar 1 ao contador de cadastros includos
Seno
Somar 1 ao contador de movimentos invlidos
Pargrafo 2200-ALT-EXC
Se o tipo de movimento for A
Executar o pargrafo 2300-ALTERAR
Seno
Se o tipo de movimento for E
Somar 1 ao contador de cadastros excludos
Seno
Somar 1 ao contador de movimentos invlidos
Pargrafo 2300-ALTERAR
Mover o total da dvida do CLIOLD para a Mensagem
Chamar dinamicamente o programa PGMAUX02 passando dados
Cancelar dinamicamente o programa PGMAUX02
Se a resposta for igual a 0 (sucesso)
Mover o valor recalculado da dvida para CLIOLD
Somar 1 ao contador de cadastros alterados
Executar o pargrafo 2400-GRAVA-M
Mover espao para WS-RESP
Seno
Somar 1 ao contador de movimentos invlidos
Somar 1 ao contador de cadastros invlidos
Pargrafo 2400-GRAVA-M
Mover o cdigo do CLIMOV para o cdigo do CLINEW
Se o nome do cliente em CLIMOV for diferentes de espaos
Mover o nome do CLIMOV para o nome do NEWCLI
Seno
Mover o nome do CLIOLD para o nome do NEWCLI
Se o endereo do cliente em CLIMOV for diferentes de espaos
Mover o endereo do CLIMOV para o endereo do NEWCLI
Seno
Mover o endereo do OLDCLI para o endereo do NEWCLI
Se o telefone do cliente em CLIMOV for diferentes de espaos
Mover o telefone do CLIMOV para o telefone do NEWCLI
Seno
Mover o telefone do OLDCLI para o telefone do NEWCLI
www.grandeporte.com.br
42
Parte 7
Se o total da dvida em CLIMOV for numrico (IS NUMERIC)
Mover esse valor de CLIMOV para o total da dvida do NEWCLI
Seno
Se WS-RESP NOT = 0
Mover esse valor de CLIMOV para o total da dvida do NEWCLI
Gravar o registro do NEWCLI a partir da varivel espelho
Se file status for diferente de 00
Mover mensagem de erro para varivel da rotina de erro
Mover file status para variveis da rotina de erro
Executar rotina de erro (9000-ERRO)
Somar 1 ao contador de cadastros gravados CLINEW
Pargrafo 3000-TERMINO
Executar rotina 9000-IMPRIME-DATA
Fechar o arquivo CLIOLD
Se file status for diferente de 00
Mover mensagem de erro para varivel da rotina de erro
Mover file status para variveis da rotina de erro
Executar rotina de erro (9000-ERRO)
Fechar o arquivo CLIMOV
Se file status for diferente de 00
Mover mensagem de erro para varivel da rotina de erro
Mover file status para variveis da rotina de erro
Executar rotina de erro (9000-ERRO)
Fechar o arquivo CLINEW
Se file status for diferente de 00
Mover mensagem de erro para varivel da rotina de erro
Mover file status para variveis da rotina de erro
Executar rotina de erro (9000-ERRO)
Receber o horrio final de processamento
Calcular o tempo de processamento
Mover contadores para as variveis formatadas
Exibir os contadores:
cadastros lidos CLIOLD
movimentos lidos CLIMOV
cadastros gravados CLINEW
cadastros includos
cadastros excludos
cadastros alterados
cadastros invlidos
movimentos invlidos
Exibir o tempo total de processamento
www.grandeporte.com.br
Parte 7
43
www.grandeporte.com.br
44
Parte 7
Avaliao
Estou fera!
Fiz Certo!
Muito Bom
Bom
www.grandeporte.com.br
regular
ruim
Muito ruim
Parte
Verso 2.3.5
Parte 8
Preparation
Trocando Ideias
Reflexo
www.grandeporte.com.br
Parte 8
Presentation
Histria
www.grandeporte.com.br
Parte 8
Teoria
Tratamento de relatrio
2 Detalhamento do Relatrio
Na FILE SECTION da DATA DIVISION, descrevemos o relatrio e seu registro.
Vale observar que um relatrio no possui campos. O registro definido com a sua
largura total. No exemplo abaixo 80 caracteres.
----+-*A-1-B--+----2----+----3----+----4----+----5----+----6----+----7--|-+----8
XXXXXXXDATAXXXXXXXXXXXX
XXXXXXXDIVISION.
XXXXXXXFILEXXXXXXXXXXXXXX
XXXXXSECTION.
0,XXXXXFDxxRELPROD
XXXXXXXXXXXLABEL RECORD OMITTED
XXXXXXXXXXXRECORDING MODE IS F
XXXXXXXXXXXRECORD CONTAINS 80 CHARACTERS
XXXXXXXXXXXDATA RECORD IS REG-RELPROD
XXXXXXXXXXX.
XXXXXXX01XXREG-RELPROD
PIC X(80).
www.grandeporte.com.br
Parte 8
3 Especificao do layout do relatrio
O layout do relatrio precisa ser especificado em termos de linhas. As primeiras
linhas so chamadas de CABEALHOS e sempre aparecem no incio de cada pgina.
As linhas com os dados impressos so chamadas de DETALHES e as ltimas linhas
so os RODAPS e esto presentes no final de todas as pginas.
A seguir temos um exemplo de lay-out do relatrio RELPROD e a
especificao na WORKING-STORAGE SECTION.de seus CABEALHOS, DETALHE
e RODAPE.
01
02
01
02
03
04
05
06
..
46
47
48
49
50
12345678911234567892123456789312345678941234567895123456789612345678971234567898
12345678901234567890123456789012345678901234567890123456789012345678901234567890
DD/MM/20AA HH:MM:SS RELACAO DE PRODUTOS PARA REPOSICAO DO ESTOQUE
PAG. Z9
-------------------------------------------------------------------------------CODIGO
DESCRICAO
QT.EST.
QT.MIN.
QT.REP.
ULT.PRECO
-------------------------------------------------------99.999
XXXXXXXXXXXXXXXXXXXXXXXXX
999
999
999
Z.ZZ9,99
99.999
XXXXXXXXXXXXXXXXXXXXXXXXX
999
999
999
Z.ZZ9,99
99.999
XXXXXXXXXXXXXXXXXXXXXXXXX
999
999
999
Z.ZZ9,99
99.999
XXXXXXXXXXXXXXXXXXXXXXXXX
999
999
999
Z.ZZ9,99
99.999
XXXXXXXXXXXXXXXXXXXXXXXXX
999
999
999
Z.ZZ9,99
99.999
XXXXXXXXXXXXXXXXXXXXXXXXX
999
999
999
Z.ZZ9,99
-------------------------------------------------------------------------------INDUSTRIAS SEU NOME LTDA.
SERVIMOS BEM PARA SERVIR SEMPRE
CABEALHO
DETALHE
RODAP
----+-*A-1-B--+----2----+----3----+----4----+----5----+----6----+----7--|-+----8
WORKING-STORAGE
SECTION.
01
WS-CABEC1.
05 WS-DATA-CABEC1
05 FILLER
05
05
05
05
Cabealhos
PIC X(10).
PIC X(02)
VALUE SPACES.
WS-HORA-CABEC1
PIC X(08).
FILLER
PIC X(02)
VALUE SPACES.
FILLER
PIC X(56)
VALUE
"RELACAO DE PRODUTOS PARA REPOSICAO DE ESTOQUE
WS-PAG-CABEC1
PIC Z9.
01
WS-CABEC2
01
WS-CABEC3.
05 FILLER
" CODIGO
05 FILLER
"T.EST.
01
PAG. ".
PIC X(80)
VALUE ALL "-".
DESCRICAO
QT.MIN.
QT.REP.
WS-CABEC4.
05 FILLER
PIC X(40)
VALUE
Q".
PIC X(40)
VALUE
ULT.PRECO ".
PIC X(40)
VALUE
" ------------------------------".
05 FILLER
PIC X(40)
VALUE
"-------------------------- ".
** OBSERVE ATENTAMENTE **
Os cabealhos, linha de detalhe e
rodap
so
construdos
com
constantes e variveis, seguindo o
layout do relatrio.
Os espaos entre os dados devem
ser declarados como SPACES.
FILLER uma constante e pode
assumir qualquer valor especificado
por VALUES.
Desenhar o relatrio no COBOL
requer ateno aos detalhes, caso
contrrio, ele ficar desalinhado.
www.grandeporte.com.br
Parte 8
----+-*A-1-B--+----2----+----3----+----4----+----5----+----6----+----7--|-+----8
01 WS-LINDET.
05 FILLER
PIC X(02)
VALUE SPACES.
05 LD-CODPROD
PIC 99.999.
05 FILLER
PIC X(03)
VALUE SPACES.
05 LD-DESCRICAO
PIC X(25).
05 FILLER
PIC X(05)
VALUE SPACES.
05 LD-QTDEST
PIC 999.
Linha de
05 FILLER
PIC X(07)
VALUE SPACES.
Detalhe
05 LD-QTDMIN
PIC 999.
05 FILLER
PIC X(07)
VALUE SPACES.
05 LD-QTDREP
PIC 999.
05 FILLER
PIC X(06)
VALUE SPACES.
05 LD-PRECO
PIC Z.ZZ9,99.
05 FILLER
PIC X(02)
VALUE SPACES.
Rodap
01
WS-RODAPE1
01
WS-RODAPE2.
05 FILLER
"
05 FILLER
"
PIC X(80)
VALUE ALL "-".
PIC X(40)
VALUE
INDUSTRIAS SEU NOME LTDA.
".
PIC X(40)
VALUE
SERVIMOS BEM PARA SERVIR SEMPRE ".
4 Manipulao do Relatrio
Como o relatrio um arquivo gravado, ele precisa ser aberto como OUTPUT
e testar o FILE STATUS. Exemplo:
----+-*A-1-B--+----2----+----3----+----4----+----5----+----6----+----7--|-+----8
XXXXXXXXXXXOPEN OUTPUT RELPROD
XxxxxxxxxxxIF FS-RELPROD NOT = 00
XXXXXXXXXXXXXXMOVE ERRO ABERTURA RELPROD TO WS-MSG
XXXXXXXXXXXXXXMOVE FS-RELPROD
TO WS-FS
XXXXXXXXXXXXXXGO TO 999-ERRO
XXXXXXXXXXXEND-IF
www.grandeporte.com.br
Parte 8
O WRITE sempre grava o registro do arquivo, neste exemplo o REGRELPROD. Mas os dados devem vir dos cabealhos, detalhe ou rodap. A clusula
FROM determina de onde os dados so carregados. Abaixo temos um exemplo de
impresso do cabealho:
----+-*A-1-B--+----2----+----3----+----4----+----5----+----6----+----7--|-+----8
040-IMPRIME-CABECALHO.
MOVE WS-DATA-FORMATADA
TO WS-DATA-CABEC1
MOVE WS-HORA-FORMATADA
TO WS-HORA-CABEC1
ADD 1 TO WS-CTPAG
MOVE WS-CTPAG
WRITE
WRITE
WRITE
WRITE
REG-RELATO
REG-RELATO
REG-RELATO
REG-RELATO
TO WS-PAG-CABEC1
FROM
FROM
FROM
FROM
MOVE 4
.
TO WS-CTLIN
www.grandeporte.com.br
Parte 8
O rodap deve ser impresso no final da pgina, mas nem sempre h linhas de
detalhe suficientes para preencher toda a pgina, ento necessrio calcular quantas
linhas necessrio pular antes da impresso do rodap. A clusula AFTER N LINES
grava o rodap somente depois de pular N linhas. Abaixo temos um exemplo da
impresso do rodap.
----+-*A-1-B--+----2----+----3----+----4----+----5----+----6----+----7--|-+----8
060-IMPRIME-RODAPE.
COMPUTE WS-PULA = 49 WS-CTLINHA
WRITE REG-RELATO FROM WS-RODAPE1 AFTER WS-PULA LINES
WRITE REG-RELATO FROM WS-RODAPE2
MOVE 50
.
TO WS-CTLIN
REG-RELPROD
RELPROD
www.grandeporte.com.br
10
Parte 8
As formas de escrever WRITE em relatrios so:
----+-*A-1-B--+----2----+----3----+----4----+----5----+----6----+----7--|-+----8
XXXXXXXXXXXWRITE REG-RELATORIO FROM WS-LINHA
XXXXXXXXXXXWRITE REG-RELATORIO FROM WS-LINHA AFTER PAGE
XXXXXXXXXXXWRITE REG-RELATORIO FROM WS-LINHA AFTER LINE
XXXXXXXXXXXWRITE REG-RELATORIO FROM WS-LINHA AFTER 5 LINES
XXXXXXXXXXXWRITE REG-RELATORIO FROM WS-LINHA BEFORE PAGE
XXXXXXXXXXXWRITE REG-RELATORIO FROM WS-LINHA BEFORE LINE
XXXXXXXXXXXWRITE REG-RELATORIO FROM WS-LINHA BEFORE N LINES
ZEBRADO
PR-IMPRESSO
www.grandeporte.com.br
BRANCO
Parte 8
11
Ao
Next line
Skip one line
Skyp two lines
Overtype previous line
Page feed
Siginificado
Avana para prxima linha
Pula uma linha
Pula duas linhas
Sobrepe ltima linha impressa
Pula 1 pgina
----+-*A-1-B--+----2----+----3----+----4----+----5----+----6----+----7--|-+----8
* NEXT LINE (AVANCA PARA PROXIMA LINHA)
XXXXXXXXXXXWRITE REG-RELATORIO FROM WS-LINHA AFTER 1 LINE
* NAO EH NECESSARIO COLOCAR AFTER 1 LINE, POIS EH DEFAULT
XXXXXXXXXXXWRITE REG-RELATORIO FROM WS-LINHA
* SKIP ONE LINE (PULA UMA LINHA)
XXXXXXXXXXXWRITE REG-RELATORIO FROM WS-LINHA AFTER 2 LINES
* SKIP TWO LINES (PULA DUAS LINHA)
XXXXXXXXXXXWRITE REG-RELATORIO FROM WS-LINHA AFTER 3 LINES
* OVERTIPE PREVIOUS LINE (SOBREPOEM ULTIMA LINHA IMPRESSA)
XXXXXXXXXXXWRITE REG-RELATORIO FROM WS-LINHA AFTER 0 LINE
* PAGE FEED (PULA 1 PAGINA)
XXXXXXXXXXXWRITE REG-RELATORIO FROM WS-LINHA AFTER PAGE
www.grandeporte.com.br
12
Parte 8
BLANK WHEN ZERO
Esta clusula, usada aps a mscara de edio da PICTURE, exibe espaos
em branco quando a varivel numrica tem valor zero, independente do formato da
mscara. Exemplo:
05 LD-VALOR PIC ZZ.ZZ9,99 BLANK WHEN ZERO.
Quando um relatrio possui muitas colunas numricas com alta probabilidade
de zero, essa clusula deixa o relatrio mais limpo.
Exemplo sem o uso de BLANK WHEN ZERO.
15/02/2012XXXXX
XXRESUMOXDEXPRODUTOS A PARTIR DE FEVEREIRO/12XXXXXXXXXPAG.X01
-------------------------------------------------------------------------------CODIGO DESCRICAO
PRECO
LUCRO ESTOQUE REPOSICAO
-------------------------------------------------------------------------------0001 PARAFUSO SEXTAVADO
R$
1,00
0,00
0
0
0010 PORCA SEXTAVADA
R$
2,10
1,00
10
100
0015 PORTA DE MOGNO
R$
300,50 10,15
200
0
0025 CAIXA DE FERRAMENTAS
R$
125,00
0,00
0
0
0150 COMPRESSOR 35 LITROS
R$
1.250,15
0,00
0
0
-------------------------------------------------------------------------------INDUSTRIAS SEUNOME S/A.
SERVIMOS BEM PARA SERVIR SEMPRE.
www.grandeporte.com.br
Parte 8
EXEMPLO
13
RELATRIO
Objetivo do Programa
Imprimir um relatrio com a quantidade de produtos para repor o estoque em
sua quantidade mxima. Os produtos esto gravados no arquivo ESTOQUE, em
ordem crescente de cdigo de produto e o relatrio ter sua imagem gravada no
arquivo RELATO.
Macro-Fluxo
ESTOQUE
EEXXNN07
RELATO
www.grandeporte.com.br
14
Parte 8
Layout dos Arquivos
Nome do Arquivo
Nome do Registro
Nome do Campo
CODPROD-E
DESCRICAO-E
QTDEST-E
QTDMIN-E
QTDMAX-E
PRECO-E
ESTOQUE
REG-ESTOQUE
Tipo e Tamanho
9(05)
X(25)
9(03)
9(03)
9(03)
9(04)V99
Descrio
Cdigo do produto
Descrio
Qtde. em estoque
Qtde. Mnima
Qtde. Mxima
Preo
Nome do Arquivo
Nome do Registro
REG-RELATO
RELATO
Tipo e Tamanho
X(80)
Descrio
Relatrio de 80 colunas
Layout do Relatrio
01
02
01
02
03
04
05
06
..
45
46
47
48
49
50
12345678911234567892123456789312345678941234567895123456789612345678971234567898
12345678901234567890123456789012345678901234567890123456789012345678901234567890
DD/MM/20AA HH:MM:SS RELACAO DE PRODUTOS PARA REPOSICAO DO ESTOQUE
PAG. Z9
-------------------------------------------------------------------------------CODIGO
DESCRICAO
QT.EST.
QT.MIN.
QT.REP.
ULT.PRECO
-------------------------------------------------------99.999
XXXXXXXXXXXXXXXXXXXXXXXXX
999
999
999
Z.ZZ9,99
99.999
XXXXXXXXXXXXXXXXXXXXXXXXX
999
999
999
Z.ZZ9,99
99.999
XXXXXXXXXXXXXXXXXXXXXXXXX
999
999
999
Z.ZZ9,99
99.999
XXXXXXXXXXXXXXXXXXXXXXXXX
999
999
999
Z.ZZ9,99
99.999
XXXXXXXXXXXXXXXXXXXXXXXXX
999
999
999
Z.ZZ9,99
99.999
XXXXXXXXXXXXXXXXXXXXXXXXX
999
999
999
Z.ZZ9,99
99.999
XXXXXXXXXXXXXXXXXXXXXXXXX
999
999
999
Z.ZZ9,99
-------------------------------------------------------------------------------INDUSTRIAS SEU NOME LTDA.
SERVIMOS BEM PARA SERVIR SEMPRE
Observao
www.grandeporte.com.br
Parte 8
15
Programa COBOL
----+-*A-1-B--+----2----+----3----+----4----+----5----+----6----+----7--|-+----8
*----------------------------------------------------------------*
IDENTIFICATION
DIVISION.
*----------------------------------------------------------------*
PROGRAM-ID.
EEXXNN07.
AUTHOR.
SEUNOME.
*----------------------------------------------------------------*
ENVIRONMENT
DIVISION.
*----------------------------------------------------------------*
CONFIGURATION
SECTION.
SPECIAL-NAMES.
DECIMAL-POINT IS COMMA.
INPUT-OUTPUT
SECTION.
FILE-CONTROL.
SELECT ESTOQUE ASSIGN TO UT-S-ESTOQUE
FILE STATUS IS FS-ESTOQUE
.
SELECT RELATO ASSIGN TO UT-S-RELATO
FILE STATUS IS FS-RELATO
.
*----------------------------------------------------------------*
DATA
DIVISION.
*----------------------------------------------------------------*
FILE
SECTION.
FD ESTOQUE
LABEL RECORD STANDARD
BLOCK CONTAINS 0 RECORDS
RECORDING MODE IS F
RECORD CONTAINS 45 CHARACTERS
DATA RECORD IS REG-ESTOQUE
.
01 REG-ESTOQUE.
05 CODPROD-E
PIC 9(05).
05 DESCRICAO-E
PIC X(25).
05 QTDEST-E
PIC 9(03).
05 QTDMIN-E
PIC 9(03).
05 QTDMAX-E
PIC 9(03).
05 PRECO-E
PIC 9(04)V99.
FD
01
RELATO
LABEL RECORD OMITTED
RECORDING MODE IS F
RECORD CONTAINS 80 CHARACTERS
DATA RECORD IS REG-RELATO
.
REG-RELATO
www.grandeporte.com.br
PIC X(80).
16
Parte 8
----+-*A-1-B--+----2----+----3----+----4----+----5----+----6----+----7--|-+----8
WORKING-STORAGE
SECTION.
01 WS-CABEC1.
05 WS-DATA-CABEC1
PIC X(10).
05 FILLER
PIC X(02)
VALUE SPACES.
05 WS-HORA-CABEC1
PIC X(08).
05 FILLER
PIC X(02)
VALUE SPACES.
05 FILLER
PIC X(45)
VALUE
"RELACAO DE PRODUTOS PARA REPOSICAO DE ESTOQUE".
05 FILLER
PIC X(11)
VALUE
"
PAG. ".
05 WS-PAG-CABEC1
PIC Z9.
01 WS-CABEC2
PIC X(80)
Cabealhos
VALUE ALL "-".
01 WS-CABEC3.
05 FILLER
PIC X(40)
VALUE
" CODIGO
DESCRICAO
Q".
05 FILLER
PIC X(40)
VALUE
"T.EST.
QT.MIN.
QT.REP.
ULT.PRECO ".
01 WS-CABEC4.
05 FILLER
PIC X(40)
VALUE
" ------------------------------".
05 FILLER
PIC X(40)
VALUE
"-------------------------- ".
01 WS-LINDET.
05 FILLER
PIC X(02)
VALUE SPACES.
05 LD-CODPROD
PIC 99.999.
05 FILLER
PIC X(03)
VALUE SPACES.
05 LD-DESCRICAO
PIC X(25).
05 FILLER
PIC X(05)
VALUE SPACES.
05 LD-QTDEST
PIC 999.
Linha de
05 FILLER
PIC X(07)
detalhe
VALUE SPACES.
05 LD-QTDMIN
PIC 999.
05 FILLER
PIC X(07)
VALUE SPACES.
05 LD-QTDREP
PIC 999.
05 FILLER
PIC X(06)
VALUE SPACES.
05 LD-PRECO
PIC Z.ZZ9,99.
05 FILLER
PIC X(02)
VALUE SPACES.
01 WS-RODAPE1
PIC X(80)
VALUE ALL "-".
01 WS-RODAPE2.
05 FILLER
PIC X(40)
VALUE
Rodap
"
INDUSTRIAS SEU NOME LTDA.
".
05 FILLER
PIC X(40)
VALUE
"
SERVIMOS BEM PARA SERVIR SEMPRE ".
www.grandeporte.com.br
Parte 8
17
----+-*A-1-B--+----2----+----3----+----4----+----5----+----6----+----7--|-+----8
01 WS-REG-ESTOQUE.
05 WS-CODPROD-E
PIC 9(05).
05 WS-DESCRICAO-E
PIC X(25).
05 WS-QTDEST-E
PIC 9(03).
05 WS-QTDMIN-E
PIC 9(03).
05 WS-QTDMAX-E
PIC 9(03).
05 WS-PRECO-E
PIC 9(04)V99.
01
01
01
WS-DATA-SYS.
05 WS-ANO
05 WS-MES
05 WS-DIA
PIC 99.
PIC 99.
PIC 99.
WS-HORA-SYS.
05 WS-HORA
05 WS-MINUTO
05 WS-SEGUNDO
PIC 99.
PIC 99.
PIC 99.
WS-DATA-FORMATADA.
05 WS-DIA
05 FILLER
05 WS-MES
05 FILLER
05 WS-ANO
01
WS-HORA-FORMATADA.
05 WS-HORA
05 FILLER
05 WS-SEGUNDO
PIC 99.
PIC X(01)
VALUE :.
PIC 99.
PIC X(01)
VALUE :.
PIC 99.
FS-ESTOQUE
FS-RELATO
WS-CTLIDO
WS-CTDESP
WS-CTIMP
WS-CTLIN
WS-CTPAG
WS-PULA
WS-MSG
WS-FS
WS-QTDREP
PIC
PIC
PIC
PIC
PIC
PIC
PIC
PIC
PIC
PIC
PIC
05 WS-MINUTO
05 FILLER
77
77
77
77
77
77
77
77
77
77
77
PIC 99.
PIC X(01)
VALUE /.
PIC 99.
PIC X(03)
VALUE /20.
PIC 99.
X(02).
X(02).
9(03).
9(03).
9(03).
9(02).
9(02).
9(02).
X(60).
X(02).
9(03).
*----------------------------------------------------------------*
PROCEDURE
DIVISION.
*----------------------------------------------------------------*
000-EEXXNN07.
PERFORM 010-INICIALIZAR
PERFORM 030-PROCESSAR
UNTIL FS-ESTOQUE = "10"
PERFORM 070-TERMINO
STOP RUN
.
www.grandeporte.com.br
18
Parte 8
----+-*A-1-B--+----2----+----3----+----4----+----5----+----6----+----7--|-+----8
010-INICIALIZAR.
MOVE 0
TO WS-CTLIDO
MOVE 0
TO WS-CTDESP
MOVE 0
TO WS-CTIMP
MOVE 99
TO WS-CTLIN
MOVE 0
TO WS-CTPAG
OPEN INPUT ESTOQUE
IF FS-ESTOQUE NOT = "00"
MOVE "ERRO ABERTURA ESTOQUE" TO WS-MSG
MOVE FS-ESTOQUE
TO WS-FS
GO TO 999-ERRO
END-IF
OPEN OUTPUT RELATO
IF FS-RELATO NOT = "00"
MOVE "ERRO ABERTURA ESTOQUE" TO WS-MSG
MOVE FS-RELATO
TO WS-FS
GO TO 999-ERRO
END-IF
PERFORM 999-FORMATA-DATA-HORA
PERFORM 020-LER-ESTOQUE
.
020-LER-ESTOQUE.
READ ESTOQUE INTO WS-REG-ESTOQUE
IF FS-ESTOQUE = "00"
ADD 1 TO WS-CTLIDO
ELSE
IF FS-ESTOQUE NOT = "10"
MOVE "ERRO LEITURA ESTOQUE" TO WS-MSG
MOVE FS-ESTOQUE
TO WS-FS
GO TO 999-ERRO
END-IF
END-IF
.
030-PROCESSAR.
IF WS-QTDEST-E < WS-QTDMIN-E
IF WS-CTLIN > 49
PERFORM 040-IMPRIME-CABECALHO
END-IF
PERFORM 050-IMPRIME-DETALHE
IF WS-CTLIN = 48
PERFORM 060-IMPRIME-RODAPE
END-IF
ELSE
ADD 1 TO WS-CTDESP
END-IF
PERFORM 020-LER-ESTOQUE
.
www.grandeporte.com.br
Parte 8
19
----+-*A-1-B--+----2----+----3----+----4----+----5----+----6----+----7--|-+----8
040-IMPRIME-CABECALHO.
MOVE WS-DATA-FORMATADA
TO WS-DATA-CABEC1
MOVE WS-HORA-FORMATADA
TO WS-HORA-CABEC1
ADD 1 TO WS-CTPAG
MOVE WS-CTPAG
TO WS-PAG-CABEC1
WRITE REG-RELATO FROM WS-CABEC1 AFTER PAGE
IF FS-RELATO NOT = "00"
MOVE "ERRO IMPRESSAO WS-CABEC1" TO WS-MSG
MOVE FS-RELATO
TO WS-FS
GO TO 999-ERRO
END-IF
WRITE REG-RELATO FROM WS-CABEC2
IF FS-RELATO NOT = "00"
MOVE "ERRO IMPRESSAO WS-CABEC2" TO WS-MSG
MOVE FS-RELATO
TO WS-FS
GO TO 999-ERRO
END-IF
WRITE REG-RELATO FROM WS-CABEC3
IF FS-RELATO NOT = "00"
MOVE "ERRO IMPRESSAO WS-CABEC3" TO WS-MSG
MOVE FS-RELATO
TO WS-FS
GO TO 999-ERRO
END-IF
WRITE REG-RELATO FROM WS-CABEC4
IF FS-RELATO NOT = "00"
MOVE "ERRO IMPRESSAO WS-CABEC4" TO WS-MSG
MOVE FS-RELATO
TO WS-FS
GO TO 999-ERRO
END-IF
MOVE 4 TO WS-CTLIN
.
050-IMPRIME-DETALHE.
MOVE WS-CODPROD-E
TO LD-CODPROD
MOVE WS-DESCRICAO-E
TO LD-DESCRICAO
MOVE WS-QTDEST-E
TO LD-QTDEST
MOVE WS-QTDMIN-E
TO LD-QTDMIN
COMPUTE WS-QTDREP = WS-QTDMAX-E WS-QTDEST-E
MOVE WS-QTDREP
TO LD-QTDREP
MOVE WS-PRECO-E
TO LD-PRECO
WRITE REG-RELATO FROM WS-LINDET
IF FS-RELATO NOT = "00"
MOVE "ERRO IMPRESSAO LINDET"
MOVE FS-RELATO
GO TO 999-ERRO
END-IF
TO WS-MSG
TO WS-FS
ADD 1 TO WS-CTIMP
ADD 1 TO WS-CTLIN
.
www.grandeporte.com.br
20
Parte 8
----+-*A-1-B--+----2----+----3----+----4----+----5----+----6----+----7--|-+----8
060-IMPRIME-RODAPE.
COMPUTE WS-PULA = 49 WS-CTLINHA
WRITE REG-RELATO FROM WS-RODAPE1 AFTER WS-PULA LINES
IF FS-RELATO NOT = "00"
MOVE "ERRO IMPRESSAO WS-RODAPE1" TO WS-MSG
MOVE FS-RELATO
TO WS-FS
GO TO 999-ERRO
END-IF
WRITE REG-RELATO FROM WS-RODAPE2
IF FS-RELATO NOT = "00"
MOVE "ERRO IMPRESSAO WS-RODAPE2" TO WS-MSG
MOVE FS-RELATO
TO WS-FS
GO TO 999-ERRO
END-IF
MOVE 50 TO WS-CTLIN
.
070-TERMINO.
IF WS-CTLIN < 50
PERFORM 060-IMPRIME-RODAPE
END-IF
DISPLAY "TOTAL DE REGISTROS LIDOS
= " WS-CTLIDO
DISPLAY "TOTAL DE REGISTROS IMPRESSOS
= " WS-CTIMP
DISPLAY "TOTAL DE REGISTROS DESPREZADOS = " WS-CTDESP
CLOSE ESTOQUE
IF FS-ESTOQUE NOT = "00"
MOVE "ERRO FECHAMENTO ESTOQUE" TO WS-MSG
MOVE FS-ESTOQUE
TO WS-FS
GO TO 999-ERRO
END-IF
CLOSE RELATO
IF FS-RELATO NOT = "00"
MOVE "ERRO FECHAMENTO RELATO"
MOVE FS-RELATO
GO TO 999-ERRO
END-IF
DISPLAY
DISPLAY
DISPLAY
DISPLAY
DISPLAY
DISPLAY
DISPLAY
DISPLAY
DISPLAY
DISPLAY
DISPLAY
.
TO WS-MSG
TO WS-FS
"*------------------------------------------*"
" DEU CERTO!!!
)/_
"
"
_.--..---'-,--O_
"
"
\|..'
._O__)_
"
"
,-.
_./ _ \..--( /
"
"
`\.-''__.-' \ (
\_
"
"
`'''
`\__
/\
"
"
/)
"
"*------------------------------------------*"
" TERMINO NORMAL DO EEXXNN07"
"*------------------------------------------*"
www.grandeporte.com.br
Parte 8
21
----+-*A-1-B--+----2----+----3----+----4----+----5----+----6----+----7--|-+----8
999-ERRO.
DISPLAY "*------------------------------------------*"
DISPLAY " MENSAGEM.....: " WS-MSG
DISPLAY " FILE STATUS..: " WS-FS
DISPLAY "*------------------------------------------*"
DISPLAY "
._`-\ )\,`-.-.
"
DISPLAY "
\'\` \)\ \)\ \|.)
"
DISPLAY "
\`) |\) )\ .)\ )\|
"
DISPLAY "
\ \)\ |)\ `
\ .')/|
"
DISPLAY "
``-.\ \
)\ ` . ., '(
"
DISPLAY "
\\ -. `)\``- ._ .)` |\(,_
"
DISPLAY "
`__ '\ `-- _\`. `
(/
"
DISPLAY "
`\,\
.\\
/
"
DISPLAY "
'` ) (`-.\\
`
"
DISPLAY "
/||\
`. * _*|
"
DISPLAY "
`-.( `\
"
DISPLAY "
`. \
"
DISPLAY "
`(C
"
DISPLAY " DEU ERRO!!!
"
DISPLAY "*------------------------------------------*"
DISPLAY " TERMINO ANORMAL DO EEXXNN07
"
DISPLAY "*------------------------------------------*"
STOP RUN
.
999-FORMATA-DATA-HORA.
ACCEPT WS-DATA-SYS FROM DATE
ACCEPT WS-HORA-SYS FROM TIME
MOVE CORRESPONDING WS-DATA-SYS TO WS-DATA-FORMATADA
MOVE CORRESPONDING WS-HORA-SYS TO WS-HORA-FORMATADA
.
www.grandeporte.com.br
22
remalina
66 linhas
de 1/6 de polegada
serrilha ou
micro serrilha
80 ou 132 colunas
de 1/10 de polegada
www.grandeporte.com.br
Anatomia de um
Formulrio contnuo
Parte 8
Parte 8
23
JOB de Execuo
12345678911234567892123456789312345678941234567895123456789612345678971234567898
12345678901234567890123456789012345678901234567890123456789012345678901234567890
//GPAZNN05 JOB SEUNOME,MSGCLASS=X,CLASS=C,NOTIFY=GPAZNN,TIME=(0,20)
//*****************************************************************
//STEP1
EXEC PGM=EEXXNN07
//STEPLIB DD DSN=GP.GERAL.LOADLIB,DISP=SHR
//ESTOQUE DD DSN=GP.GPXX99.ESTOQUE,DISP=SHR
//RELATO
DD SYSOUT=*
Cabecalho,
Detalhe e
Rodap.
Ok, j
entendi !
www.grandeporte.com.br
24
Parte 8
Practice
Atividade
(
(
(
(
(
) Microserrilha
) Rodap
) Remalina
) Cabealho
) Detalhe
www.grandeporte.com.br
Parte 8
Atividade
25
Trabalho em dupla
www.grandeporte.com.br
26
Parte 8
Performance
Atividade
Projeto 7
Objetivo do Programa
A Box Company do Brasil precisa de um programa para imprimir um relatrio
com a movimentao de estoque.
Os registros da movimentao do estoque esto gravados no arquivo
sequencial MOVTOEST, com Header, Data e Trailer. A imagem do relatrio ser
gravada no arquivo RELMOV01.
Macro-Fluxo
MOVTOEST
GPXXNN07
RELMOV01
www.grandeporte.com.br
Parte 8
27
Nome do Arquivo
Nome do Registro
Nome do Campo
TIPO-REG-MOVTO
FILLER
MOVTOEST
REG-MOVTOEST
Tipo e Tamanho Descrio
X(01)
H=HEADER, D=DATA, T=TRAILER
X(32)
Nome do Registro
Nome do Campo
FILLER
SIGLA-SYS-CAD
ANO-MES-REF-CAD
FILLER
REG-MOVTOEST-HEADER
Tipo e Tamanho Descrio
X(01)
H=HEADER
X(05)
Sigla do Sistema
X(06)
Ano e ms de referncia AAAAMM
X(21)
Nome do Registro
Nome do Campo
FILLER
NUMMOVTO
DATAMOVTO
HORAMOVTO
CODPRODMOVTO
TIPOMOVTO
QTDMOVTO
REG-MOVTOEST-DATA
Tipo e Tamanho Descrio
X(01)
D=DATA
9(08)
Nmero do movimento
9(08)
Data do movimento AAAAMMDD
9(06)
Hora do movimento HHMMSS
9(04)
Cdigo do produto
X(01)
Tipo do movimento E=entrada S=sada
9(08) COMP-3
Quantidade movimentada
Nome do Registro
Nome do Campo
FILLER
QTDREG-MOVTO
FILLER
REG-MOVTOEST-TRAILER
Tipo e Tamanho Descrio
X(01)
Trailer T
9(05)
Quantidade de registros no arquivo
X(27)
Nome do Arquivo
Nome do Registro
REG-RELMOV01
RELMOV01
Tipo e Tamanho
X(80)
www.grandeporte.com.br
Descrio
Relatrio de 80 colunas
28
Parte 8
Layout do Relatrio
01
02
01
02
03
04
05
06
..
45
46
47
48
49
50
12345678911234567892123456789312345678941234567895123456789612345678971234567898
12345678901234567890123456789012345678901234567890123456789012345678901234567890
DD/MM/20AA
** BOX COMPANY DO BRASIL **
HH:MM:SS
RELATORIO DE MOVIMENTACAO DE ESTOQUE (REFERENCIA 9999/99)
PAG. Z.ZZ9
-------------------------------------------------------------------------------NUMERO
DATA
HORA
PRODUTO
QUANTIDADE
-----------------------------------------99.999.999
DD/MM/AAAA
HH:MM:SS
9999
ZZ.ZZZ.ZZ9+
99.999.999
DD/MM/AAAA
HH:MM:SS
9999
ZZ.ZZZ.ZZ9+
99.999.999
DD/MM/AAAA
HH:MM:SS
9999
ZZ.ZZZ.ZZ9+
99.999.999
DD/MM/AAAA
HH:MM:SS
9999
ZZ.ZZZ.ZZ9+
99.999.999
DD/MM/AAAA
HH:MM:SS
9999
ZZ.ZZZ.ZZ9+
99.999.999
DD/MM/AAAA
HH:MM:SS
9999
ZZ.ZZZ.ZZ9+
-------------------------------------------------------------------------------APOS O USO UTILIZE ESTE PAPEL COMO RASCUNHO
RECICLE SUAS IDEIAS
Layout da SYSOUT
1
2
3
4
5
12345678901234567890123456789012345678901234567890
**************************************************
* DATA GREGORIANA 1 - 99/99/2099
*
* DATA GREGORIANA 2 - 99 DE XXXXXXXXX DE 2099
*
* DATA JULIANA
999 DE 2099
*
* DIA DA SEMANA
XXXXXXXXXXXXX
*
**************************************************
1
2
3
4
5
12345678901234567890123456789012345678901234567890
=======================================================
BOX COMPANY DO BRASIL
=======================================================
TOTAL DE MOVIMENTOS LIDOS.................: ZZ.ZZ9
TOTAL DE PAGINAS IMPRESSAS................: ZZ.ZZ9
TOTAL DE MOVIMENTOS IMPRESSOS.............: ZZ.ZZ9
=======================================================
TEMPO TOTAL DE PROCESSAMENTO..............: HH:MM:SS:CC
=======================================================
www.grandeporte.com.br
29
Parte 8
Observao
O ms de referencia do Header (H) ser usado para a montagem do cabealho.
Todas as linhas de Data (D) sero impressas nas linhas de detalhe. A quantidade de
registros apontados no Trailer (T) deve bater com a quantidade de linhas de detalhe
impressas, caso contrrio, ABENDAR o programa com RETURN CODE 12.
O relatrio RELMOV01 possui 80 colunas e 50 linhas por pgina. So 5 linhas
de cabealho, 43 linhas de detalhe e 2 linhas de rodap.
O RELMOV01 tem 5 linhas de cabealho, a saber:
WS-CABEC1, que contm as variveis
WS-DATA-CABEC1
DD/MM/20AA
WS-HORA-CABEC1
HH:MM:SS
WS-REF-CABEC2
RELATORIO DE MOVIMENTACAO DE ESTOQUE
WS-PAG-CABEC2
(REFERENCIA 9999/99)
Vou fazer
direito.
Eu
prometo!
www.grandeporte.com.br
PAG. Z.ZZ9
30
Parte 8
Tem tambm 1 linha de detalhe, WS-LINDET, com as variveis:
LD-NUMMOVTO
LD-DATAMOVTO
LD-HORAMOVTO
99.999.999
99.999.999
99.999.999
99.999.999
99.999.999
99.999.999
DD/MM/AAAA
DD/MM/AAAA
DD/MM/AAAA
DD/MM/AAAA
DD/MM/AAAA
DD/MM/AAAA
HH:MM:SS
HH:MM:SS
HH:MM:SS
HH:MM:SS
HH:MM:SS
HH:MM:SS
9999
9999
9999
9999
9999
9999
ZZ.ZZZ.ZZ9+
ZZ.ZZZ.ZZ9+
ZZ.ZZZ.ZZ9+
ZZ.ZZZ.ZZ9+
ZZ.ZZZ.ZZ9+
ZZ.ZZZ.ZZ9+
LD-CODPRODMOVTO
LD-QTDMOVTO
Finalmente tem 2 linhas de rodap
59
60
www.grandeporte.com.br
Parte 8
31
www.grandeporte.com.br
32
Parte 8
Ler o segundo registro do MOVTOEST (1100-LER-MOVTOEST)
Se WS-TIPO-REG-MOVTO no for D (Data)
Mover mensagem de erro para varivel da rotina de erro
Mover file status para variveis da rotina de erro
Executar rotina de erro (9000-ERRO)
Executar o pargrafo 9100-FORMATA-DATA-HORA
Pargrafo 1100-LER-MOVTOEST
Ler registro do arquivo MOVTOEST carregando varivel espelho
Se file status for igual a 00 (sucesso)
Somar 1 ao contador de registros lidos
Seno
Se file status for igual a 10 (fim de arquivo)
Se WS-CTLIDO > 0
Erro -> arquivo no tem Trailer
Mover mensagem de erro para varivel da rotina de erro
Mover file status para variveis da rotina de erro
Executar rotina de erro (9000-ERRO)
Seno
Mover mensagem de erro para varivel da rotina de erro
Mover file status para variveis da rotina de erro
Executar rotina de erro (9000-ERRO)
Pargrafo 2000-PROCESSAR
Se o contador de linha for maior que 49
Executar o pargrafo 2100-IMPRIME-CABECALHO
Executar o pargrafo 2200-IMPRIME-DETALHE
Se o contador de linha for igual a 48
Executar o pargrafo 2300-IMPRIME-RODAPE
Executar o pargrafo 1100-LER-MOVTOEST
Pargrafo 2100-IMPRIME-CABECALHO
Mover a data e a hora formatada para o cabealho 1
Mover o ano e ms de referencia para o cabealho 2
Somar 1 ao contador de pgina
Mover o contador de pgina para o cabealho 2
gravar os 5 cabealhos testando o file status
Se o file status for diferente de 00
Mover mensagem de erro para varivel da rotina de erro
Mover file status para variveis da rotina de erro
Executar rotina de erro (9000-ERRO)
Mover 5 para o contador de linha
Lembre que o 1 cabealho deve ser AFTER PAGE
www.grandeporte.com.br
Parte 8
33
Pargrafo 2200-IMPRIME-DETALHE
Mover para as variveis da LINDET:
Nmero do movimento
Data do movimento
Hora do movimento
Cdigo do produto
Se o tipo do movimento for de entrada
Mover a qtde para a LINDET
Seno
Multiplicar a qtde por -1 atribuindo o resultado para a LINDET
gravar a linha de detalhe testando o file status
Se o file status for diferente de 00
Mover mensagem de erro para varivel da rotina de erro
Mover file status para variveis da rotina de erro
Executar rotina de erro (9000-ERRO)
Somar 1 ao contador de linha
Somar 1 ao contador de registros impressos
Pargrafo 2300-IMPRIME-RODAPE
Calcular WS-PULA = 48 WS-CTLINHA
gravar as 2 linhas de rodap testando o file status
Se o file status for diferente de 00
Mover mensagem de erro para varivel da rotina de erro
Mover file status para variveis da rotina de erro
Executar rotina de erro (9000-ERRO)
Mover 50 para o contador de linha
Lembre que o 1 rodap deve ser AFTER WS-PULA LINES
Pargrafo 3000-TERMINO
Executar rotina 9000-IMPRIME-DATA
Se o contador de linha for menor que 50
Executar o pargrafo 2300-IMPRIME-RODAPE
Fechar o arquivo MOVTOEST
Se file status for diferente de 00
Mover mensagem de erro para varivel da rotina de erro
Mover file status para variveis da rotina de erro
Executar rotina de erro (9000-ERRO)
www.grandeporte.com.br
34
Parte 8
Fechar o arquivo RELMOV01
Se file status for diferente de 00
Mover mensagem de erro para varivel da rotina de erro
Mover file status para variveis da rotina de erro
Executar rotina de erro (9000-ERRO)
Se WS-QTDREG-MOVTO (do trailer) for diferente do contador de impressos
Mover 12 para RETURN-CODE
Parar o programa
Receber o horrio final de processamento
Calcular o tempo de processamento
Mover contadores para as variveis formatadas
Exibir os contadores:
registros lidos
linhas impressas
pginas impressas
Exibir o tempo total de processamento
www.grandeporte.com.br
Parte 8
35
www.grandeporte.com.br
36
Parte 8
Avaliao
Estou fera!
Fiz Certo!
Muito Bom
Bom
www.grandeporte.com.br
regular
ruim
Muito ruim
Parte
Verso 2.3.5
Parte 9
Preparation
Trocando Ideias
Reflexo
www.grandeporte.com.br
Parte 9
Presentation
Histria
www.grandeporte.com.br
Parte 9
Arquivos vsam
Teoria
EOF
0900MARTELO
0800PREGO
0700CADEADO
0500PORTA
0600FECHADURA
0400JANELA
0300ARRUELA
0200PORCA
0100PARAFUSO
BOF
INDEX
DATA
0100
0500PARAFUSO010003001000
0200
0600ARRUELAX030005001200
0300
0100PREGOXXX120015003200
0400
0200PORCAXXX001000300040
0500
0300BUCHAXXX111122223333
0600
0400CHAPAXXX000200030004
www.grandeporte.com.br
Parte 9
VSAM RRDS (Relative Record Data Set) Os registros esto alocados em
clulas (slots) de tamanho fixo. A chave a posio do registro dentro do arquivo. Por
exemplo, para ler o centsimo registro do arquivo, fornecemos o valor 100 como chave.
Nos arquivos VSAM RRDS necessrio um algoritmo de Hash para associar um
determinado registro com sua posio no arquivo. Apesar dos arquivos VSAM RRDS
serem mais eficientes no processamento, a exigncia de se criar este algoritmo de
Hash restringe muito seu uso.
1
10
11
15
16
17
21
22
0001PARAFUSO
7
0008PORCA
13
14
20
12
0012JANELA
014PORTA
19
0005ARRUELA
18
0017MARTELO
23
24
0022PREGO
Teoria
www.grandeporte.com.br
Parte 9
Na SYSIN passado as instrues para o IDCAMS executar suas aes. A
instruo:
DELETE GP.GPXXNN.VCADPRD PURGE CLUSTER
RECORDSIZE (69,69)
KEYS (04,0)
SHAREOPTIONS (2,3)
DEFINE
Depois da execuo deste JOB o arquivo VSAM KSDS criado, porm estar
vazio. preciso um programa de CARGA, que colocar dados neste arquivo.
www.grandeporte.com.br
Parte 9
Teoria
DA-I indica que a organizao do arquivo para acesso direto (DA = Direct
Access) e o I indica que o arquivo indexado (I = Indexed).
Mesmo assim, necessrio colocar ORGANIZATION IS INDEXED. Quanto ao
modo de acesso, temos trs possibilidades:
www.grandeporte.com.br
Parte 9
FILE STATUS
'00'
'10'
'21'
'22'
'23'
SIGNIFICADO
SUCCESSFUL COMPLETION
END OF FILE
SEQUENCE ERROR ON WRITE OR CHANGING KEY ON
DUPLICATE
KEY
REWRITE
RECORD OR FILE NOT FOUND
www.grandeporte.com.br
10
Parte 9
Teoria
www.grandeporte.com.br
Parte 9
Teoria
11
Vsam KSDS na
PROCEDURE DIVISION
OPEN
Abre o arquivo para leitura ou gravao. H 3 modos de abrir arquivos VSAM
KSDS:
----+-*A-1-B--+----2----+----3----+----4----+----5----+----6----+----7--|-+----8
XXXXXXXXXXXOPEN INPUT VCADPRD
XXXXXXXXXXXOPEN OUTPUT VCADPRD
XXXXXXXXXXXOPEN I-O
VCADPRD
READ
L um registro do arquivo. H trs formas de ler um arquivo VSAM KSDS,
dependendo do ACCESS MODE utilizado.
1. Forma: ACCESS MODE IS SEQUENTIAL (LEITURA SEQUENCIAL)
idntico ao arquivo sequencial. Uma vez que o arquivo VSAM KSDS tenha
sido aberto com OPEN INPUT, o READ l o primeiro registro. Novos READ lero os
demais registros na sequncia, at encontrar FILE STATUS = 10 (EOF). Exemplo:
----+-*A-1-B--+----2----+----3----+----4----+----5----+----6----+----7--|-+----8
= 10XXXXXXXXXXXREADXVCADPRDXINTOXWS-REG-VCADPRD
XXXXXXXXXXXREADXVCADPRDXINTOXWS-REG-VCADPRD
XXXXXXXXXXXXXXXXAT ENDXXXXXXXMOVE S TO WS-FIMARQ
XXXXXXXXXXXXXXXXNOT AT ENDXXXADD 1 TO WS-CTLIDO
XXXXXXXXXXXEND-READ
NOT = 10
www.grandeporte.com.br
12
Parte 9
2. Forma: ACCESS MODE IS RANDOM
(LEITURA DIRETA)
= 23
XXXXXX*----------------------------------------------------------------*
XXXXXXXXXXXMOVEx0100x
TOxCODPROD-V
XXXXXXXXXXXREADXVCADPRDXINTOXWS-REG-VCADPRD
XXXXXXXXXXXXXXXXINVALIDXKEYXXXXXDISPLAYXREGISTROXNAOXLOCALIZADO
XXXXXXXXXXXXXXXXNOTXINVALIDXKEYXADD 1 TO WS-CTLIDO
XXXXXXXXXXXEND-READ
NOT = 23
XXXXXX*----------------------------------------------------------------*
= 23
XXXXXXXXXXXMOVEx0100x
TOxCODPROD-V
XXXXXXXXXXXREADXVCADPRDXINTOXWS-REG-VCADPRD KEY IS CODPROD-V
XXXXXXXXXXXXXXXXINVALIDXKEYXXXXXDISPLAYXREGISTROXNAOXLOCALIZADO
XXXXXXXXXXXXXXXXNOTXINVALIDXKEYXADD 1 TO WS-CTLIDO
XXXXXXXXXXXEND-READ
NOT = 23
www.grandeporte.com.br
Parte 9
13
START
Como visto acima, o START posiciona a leitura no registro especificado pela
chave. S pode ser utilizado em arquivo VSAM-KSDS aberto como INPUT ou I-O.
Quando a sentena KEY IS no for usada, o posicionamento ser feito pela chave
principal e a condio ser sempre EQUAL. Exemplo:
----+-*A-1-B--+----2----+----3----+----4----+----5----+----6----+----7--|-+----8
XXXXXXXXXXXMOVEx0100x
TOxCODPROD-V
XXXXXXXXXXXSTART VCADPRD
XXXXXX*----------------------------------------------------------------*
XXXXXX* O START ACIMA EQUIVALE AO START ABAIXO
XXXXXX*----------------------------------------------------------------*
XXXXXXXXXXXSTART VCADPRD KEY IS EQUAL CODPROD-V
= 23
XXXXXX*----------------------------------------------------------------*
XXXXXXXXXXXMOVEx0100xTOxCODPROD-V
XXXXXXXXXXXSTARTXVCADPRDXKEYXISXEQUALXCODPROD-V
XXXXXXXXXXXXXXINVALIDXKEYXXXXXDISPLAYX ERRO NO POCISIONAMENTO
XXXXXXXXXXXXXXNOTXINVALIDXKEYXDISPLAYX PODE PROSSEGUIR COM A CONSULTA
XXXXXXXXXXXEND-START
NOT = 23
www.grandeporte.com.br
14
Parte 9
WRITE
Insere um registro no arquivo. As sentenas INVALID KEY e NOT INVALID
KEY tambm so permitidas. FROM indica de onde vm os dados que sero inseridos
no registro. Exemplo:
----+-*A-1-B--+----2----+----3----+----4----+----5----+----6----+----7--|-+----8
XXXXXXXXXXXWRITEXREG-VCADPRDXFROMXWS-REG-VCADPRD
= 22
XXXXXX*----------------------------------------------------------------*
XXXXXXXXXXXWRITEXREG-VCADPRDXFROMXWS-REG-VCADPRD
XXXXXXXXXXXXXXINVALID KEYXXXXXDISPLAYXREGISTRO DUPLICADO
XXXXXXXXXXXXXXNOTXINVALIDXKEYXADD 1 TO WS-CTGRAV
XXXXXXXXXXXEND-WRITE
NOT = 22
O arquivo deve ser aberto como OUTPUT ou I-O para poder usar o WRITE. As
sentenas INVALID KEY e NOT INVALID KEY tambm podem ser utilizadas, porm
recomenda-se o uso do FILE STATUS.
REWRITE
Atualiza um registro, porm no permitido alterar o valor da RECORD KEY
(Chave do arquivo). Exemplo:
= 23
----+-*A-1-B--+----2----+----3----+----4----+----5----+----6----+----7--|-+----8
XXXXXXXXXXXMOVE 0100
TO CODPROD-V
XXXXXXXXXXXREAD VCADPRDX
XXXXXXXXXXX
XXXXXXXXXXXREWRITEXREG-VCADPRDXFROMXWS-REG-VCADPRD
XXXXXXXXXXXXXXINVALID KEYXXXXXDISPLAYXREGISTRO NAO ALTERADO
XXXXXXXXXXXXXXNOTXINVALIDXKEYXADD 1 TO WS-CTALT
XXXXXXXXXXXEND-REWRITE
NOT = 23
O arquivo VSAM KSDS que ser atualizado com a instruo REWRITE deve
ser aberto no modo I-O e o registro a ser alterado deve ser lido com a instruo READ,
antes da atualizao. Apesar das sentenas INVALID KEY e NOT INVALID KEY
serem usadas, recomenda-se o uso de FILE STATUS.
www.grandeporte.com.br
Parte 9
15
DELETE
Exclui um registro. O arquivo VSAM KSDS que ter um registro excludo com a
instruo DELETE deve ser aberto no modo I-O e o registro deve ser lido com a
instruo READ, antes da excluso. A instruo DELETE deve ser seguida do nome
do arquivo. Exemplo:
= 23
----+-*A-1-B--+----2----+----3----+----4----+----5----+----6----+----7--|-+----8
XXXXXXXXXXXMOVE 0100
TO CODPROD-V
XXXXXXXXXXXREAD VCADPRD
XXXXXXXXXXX
XXXXXXXXXXXDELETE VCADPRD
XXXXXXXXXXXXXXINVALID KEYXXXXXDISPLAYXREGISTRO NAO LOCALIZADO
XXXXXXXXXXXXXXNOTXINVALIDXKEYXADD 1 TO WS-CTEXC
XXXXXXXXXXXEND-DELETE
NOT = 23
Apesar das sentenas INVALID KEY e NOT INVALID KEY serem usadas,
recomenda-se o uso de FILE STATUS.
CLOSE
Fecha o arquivo especificado. importante fechar os arquivos abertos e testar
seu sucesso com FILE STATUS. Exemplo:
----+-*A-1-B--+----2----+----3----+----4----+----5----+----6----+----7--|-+----8
XXXXXXXXXXXCLOSE VCADPRD
IF FS-VCADPRD NOT = 00
MOVE ERRO ABERTURA VCADPRD TO WS-MSG
MOVE FS-VCADPRD
TO WS-FS
GO TO 999-ERRO
END-IF
Modo de Acesso
Comando Permitido
SEQUENTIAL
OPEN INPUT
OPEN OUTPUT
READ
WRITE
CLOSE
RANDOM
OPEN I-O
READ
WRITE
REWRITE
DELETE
CLOSE
DYNAMIC
OPEN INPUT
START
READ NEXT
CLOSE
www.grandeporte.com.br
16
Parte 9
EXEMPLO
Objetivo do Programa
Macro-Fluxo
CADPRD
EEXXNN08
VCADPRD
Observao
www.grandeporte.com.br
Parte 9
17
JOB de Execuo
Nome do Arquivo
Nome do Registro
Nome do Campo
CODPROD
DESCPROD
UNIDPROD
LOCALPROD
QTDEST
QTDMAX
QTDMIN
PRECOCOMPRA
PRECOVENDA
PERCOMIS
CADPRD
REG-CADPRD
Tipo e Tamanho
X(04)
X(20)
X(05)
X(05)
9(05)
9(05)
9(05)
9(06)V99
9(06)V99
9(02)V99
Descrio
Cdigo
Descrio
Unidade (caixa, litro, Kg, etc)
Localizao no estoque
Quantidade em estoque
Quantidade mxima em estoque
Quantidade mnima em estoque
Preo de Compra
Preo de Venda
Percentual de comisso
Nome do Arquivo
Nome do Registro
Nome do Campo
CODPROD-V
DESCPROD-V
UNIDPROD-V
LOCALPROD-V
QTDEST-V
QTDMAX-V
QTDMIN-V
PRECOCOMPRA-V
PRECOVENDA-V
PERCOMIS-V
VCADPRD
REG-VCADPRD
Tipo e Tamanho
X(04)
X(20)
X(05)
X(05)
9(05)
9(05)
9(05)
9(06)V99
9(06)V99
9(02)V99
Descrio
Cdigo (Chave)
Descrio
Unidade (caixa, litro, Kg, etc)
Localizao no estoque
Quantidade em estoque
Quantidade mxima em estoque
Quantidade mnima em estoque
Preo de Compra
Preo de Venda
Percentual de comisso
www.grandeporte.com.br
18
Parte 9
Layout da SYSOUT
1
2
3
4
5
12345678901234567890123456789012345678901234567890
==================================================
TOTAL DE REGISTROS LIDOS............: ZZZ9
TOTAL DE REGISTROS DUPLICADOS.......: ZZZ9
TOTAL DE REGISTROS GRAVADOS.........: ZZZ9
TOTAL DE REGISTROS FORA DE SEQUENCIA: ZZZ9
==================================================
Programa COBOL
----+-*A-1-B--+----2----+----3----+----4----+----5----+----6----+----7--|-+----8
*--------------------------------------------------------------*
IDENTIFICATION
DIVISION.
*--------------------------------------------------------------*
PROGRAM-ID.
EEXXNN08.
AUTHOR.
SEUNOME.
*--------------------------------------------------------------*
ENVIRONMENT
DIVISION.
*--------------------------------------------------------------*
CONFIGURATION
SECTION.
SPECIAL-NAMES.
DECIMAL-POINT IS COMMA.
INPUT-OUTPUT
SECTION.
FILE-CONTROL.
SELECT CADPRD ASSIGN TO UT-S-CADPRD
FILE STATUS IS FS-CADPRD
.
SELECT VCADPRD ASSIGN TO DA-I-VCADPRD
ORGANIZATION IS INDEXED
ACCESS MODE IS SEQUENTIAL
FILE STATUS IS FS-VCADPRD
RECORD KEY IS CODPROD-V
.
*--------------------------------------------------------------*
DATA
DIVISION.
*--------------------------------------------------------------*
FILE
SECTION.
FD CADPRD
LABEL RECORD STANDARD
BLOCK CONTAINS 0 RECORDS
RECORDING MODE IS F
RECORD CONTAINS 69 CHARACTERS
DATA RECORD IS REG-CADPRD
.
www.grandeporte.com.br
Parte 9
19
----+-*A-1-B--+----2----+----3----+----4----+----5----+----6----+----7--|-+----8
01 REG-CADPRD.
05 CODPRD
PIC X(04).
05 DESCPROD
PIC X(20).
05 UNIDPROD
PIC X(05).
05 LOCALPROD
PIC X(05).
05 QTDEST
PIC 9(05).
05 QTDMAX
PIC 9(05).
05 QTDMIN
PIC 9(05).
05 PRECOCOMPRA
PIC 9(06)V99.
05 PRECOVENDA
PIC 9(06)V99.
05 PERCOMIS
PIC 9(02)V99.
FD
01
VCADPRD
RECORD CONTAINS 69 CHARACTERS
DATA RECORD IS REG-VCADPRD
.
REG-VCADPRD.
05 CODPRD-V
05 DESCPROD-V
05 UNIDPROD-V
05 LOCALPROD-V
05 QTDEST-V
05 QTDMAX-V
05 QTDMIN-V
05 PRECOCOMPRA-V
05 PRECOVENDA-V
05 PERCOMIS-V
PIC
PIC
PIC
PIC
PIC
PIC
PIC
PIC
PIC
PIC
X(04).
X(20).
X(05).
X(05).
9(05).
9(05).
9(05).
9(06)V99.
9(06)V99.
9(02)V99.
*-------------------------------------------------------------*
WORKING-STORAGE
SECTION.
*-------------------------------------------------------------*
01 WS-REG-CADPRD.
05 WS-CODPRD
PIC X(04).
05 WS-DESCPROD
PIC X(20).
05 WS-UNIDPROD
PIC X(05).
05 WS-LOCALPROD
PIC X(05).
05 WS-QTDEST
PIC 9(05).
05 WS-QTDMAX
PIC 9(05).
05 WS-QTDMIN
PIC 9(05).
05 WS-PRECOCOMPRA
PIC 9(06)V99.
05 WS-PRECOVENDA
PIC 9(06)V99.
05 WS-PERCOMIS
PIC 9(02)V99.
01
WS-REG-VCADPRD.
05 WS-CODPRD-V
05 WS-DESCPROD-V
05 WS-UNIDPROD-V
05 WS-LOCALPROD-V
05 WS-QTDEST-V
05 WS-QTDMAX-V
05 WS-QTDMIN-V
05 WS-PRECOCOMPRA-V
05 WS-PRECOVENDA-V
05 WS-PERCOMIS-V
PIC
PIC
PIC
PIC
PIC
PIC
PIC
PIC
PIC
PIC
X(04).
X(20).
X(05).
X(05).
9(05).
9(05).
9(05).
9(06)V99.
9(06)V99.
9(02)V99.
01 WS-DATE-SYS.
05 WS-ANO-SYS
05 WS-MES-SYS
05 WS-DIA-SYS
PIC 99.
PIC 99.
PIC 99.
01 WS-TIME-SYS.
05 WS-HORA-SYS
05 WS-MIN-SYS
05 WS-SEG-SYS
05 FILLER
PIC
PIC
PIC
PIC
www.grandeporte.com.br
99.
99.
99.
XX.
20
Parte 9
----+-*A-1-B--+----2----+----3----+----4----+----5----+----6----+----7--|-+----8
01 WS-DATE-FORMATADA.
05 WS-DIA-FORMATADA
PIC 99.
05 FILLER
PIC X
VALUE "/".
05 WS-MES-FORMATADA
PIC 99.
05 FILLER
PIC X(03)
VALUE "/20".
05 WS-ANO-FORMATADA
PIC 99.
01 WS-TIME-FORMATADA.
05 WS-HORA-FORMATADA
05 FILLER
05 WS-MIN-FORMATADA
05 FILLER
05 WS-SEG-FORMATADA
PIC
PIC
PIC
PIC
PIC
99.
X
VALUE ":".
99.
X
VALUE ":".
99.
*--------------------------------------------------------------*
77
77
77
77
77
77
77
77
FS-CADPRD
FS-VCADPRD
WS-CTLIDO
WS-CTGRAV
WS-CTDUP
WS-CTFORASEQ
WS-MSG
WS-FS
PIC
PIC
PIC
PIC
PIC
PIC
PIC
PIC
X(02).
X(02).
9(03).
9(03).
9(03).
9(03).
X(60).
X(02).
*--------------------------------------------------------------*
PROCEDURE
DIVISION.
*--------------------------------------------------------------*
000-EEXXNN08.
PERFORM 999-IMPRIME-DATA-HORA
PERFORM 010-INICIALIZAR
PERFORM 030-PROCESSAR
UNTIL FS-CADPRD3 = "10"
PERFORM 040-TERMINO
PERFORM 999-IMPRIME-DATA-HORA
STOP RUN
.
010-INICIALIZAR.
MOVE 0
TO WS-CTLIDO
WS-CTGRAV
WS-CTDUP
WS-CTFORASEQ
TO WS-MSG
TO WS-FS
www.grandeporte.com.br
Parte 9
21
----+-*A-1-B--+----2----+----3----+----4----+----5----+----6----+----7--|-+----8
020-LERCADPRD.
READ CADPRD INTO WS-REG-CADPRD
IF FS-CADPRD = "00"
ADD 1 TO WS-CTLIDO
ELSE
IF FS-CADPRD NOT = "10"
MOVE "ERRO LEITURA CADPRD" TO WS-MSG
MOVE FS-CADPRD
TO WS-FS
PERFORM 999-ERRO
END-IF
END-IF
.
030-PROCESSAR.
MOVE WS-REG-CADPRD
TO WS-REG-VCADPRD
www.grandeporte.com.br
22
Parte 9
----+-*A-1-B--+----2----+----3----+----4----+----5----+----6----+----7--|-+----8
DISPLAY "
"
DISPLAY "*------------------------------------------*"
DISPLAY "
"
DISPLAY " EH O BICHO !!!
)/_
"
DISPLAY "
_.--..---'-,--O_
"
DISPLAY "
\|..'
._O__)_
"
DISPLAY "
,-.
_./ _ \..--( /
"
DISPLAY "
`\.-''__.-' \ (
\_
"
DISPLAY "
`'''
`\__
/\
"
DISPLAY "
/)
"
DISPLAY "*------------------------------------------*"
DISPLAY "
"
DISPLAY "*------------------------------------------*"
DISPLAY " TERMINO NORMAL DO EEXXXNN08
"
DISPLAY "*------------------------------------------*"
.
999-ERRO.
DISPLAY "*------------------------------------------*"
DISPLAY " MENSAGEM.....: " WS-MSG
DISPLAY " FILE STATUS..: " WS-FS
DISPLAY "*------------------------------------------*"
DISPLAY " "
DISPLAY "*------------------------------------------*"
DISPLAY "
"
DISPLAY "
._`-\ )\,`-.-.
"
DISPLAY "
\'\` \)\ \)\ \|.)
"
DISPLAY "
\`) |\) )\ .)\ )\|
"
DISPLAY "
\ \)\ |)\ `
\ .')/|
"
DISPLAY "
``-.\ \
)\ ` . ., '(
"
DISPLAY "
\\ -. `)\``- ._ .)` |\(,_
"
DISPLAY "
`__ '\ `-- _\`. `
(/
"
DISPLAY "
`\,\
.\\
/
"
DISPLAY "
'` ) (`-.\\
`
"
DISPLAY "
/||\
`. * _*|
"
DISPLAY "
`-.( `\
"
DISPLAY "
`. \
"
DISPLAY "
`(C
"
DISPLAY " DEU ERRO!!!
"
DISPLAY "*------------------------------------------*"
STOP RUN
.
999-IMPRIME-DATA-HORA.
ACCEPT WS-DATE-SYS FROM DATE
MOVE WS-ANO-SYS
MOVE WS-MES-SYS
MOVE WS-DIA-SYS
TO WS-ANO-FORMATADA
TO WS-MES-FORMATADA
TO WS-DIA-FORMATADA
TO WS-HORA-FORMATADA
TO WS-MIN-FORMATADA
TO WS-SEG-FORMATADA
DISPLAY "*------------------------------------------*"
DISPLAY " DATA : "
WS-DATE-FORMATADA
" HORA : "
WS-TIME-FORMATADA
DISPLAY "*------------------------------------------*"
.
www.grandeporte.com.br
Parte 9
Atividade
23
9
2) O que acontece quando um arquivo VSAM vazio aberto como INPUT no COBOL?
3) O que IDCAMS?
www.grandeporte.com.br
24
Parte 9
www.grandeporte.com.br
25
Parte 9
Atividade
Trabalho em dupla
www.grandeporte.com.br
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
26
Parte 9
Atividade
Projeto 8
Objetivo do Programa
Macro-Fluxo
MOVPRD
GPXXNN08
VCADPRD
RELOCOR
www.grandeporte.com.br
Parte 9
27
Nome do Arquivo
Nome do Registro
Nome do Campo
CODPROD-M
DESCPROD-M
UNIDPROD-M
LOCALPROD-M
QTDEST-M
QTDMAX-M
QTDMIN-M
PRECOCOMPRA-M
PRECOVENDA-M
PERCOMIS-M
TIPOMOVTO-M
MOVPRD
REG-MOVPRD
Tipo e Tamanho
X(04)
X(20)
X(05)
X(05)
9(05)
9(05)
9(05)
9(06)V99
9(06)V99
9(02)V99
X(01)
Descrio
Cdigo
Descrio
Unidade (caixa, litro, Kg, etc)
Localizao no estoque
Quantidade em estoque
Quantidade mxima em estoque
Quantidade mnima em estoque
Preo de Compra
Preo de Venda
Percentual de comisso
Tipo de movimento
Nome do Arquivo
Nome do Registro
Nome do Campo
CODPROD-V
DESCPROD-V
UNIDPROD-V
LOCALPROD-V
QTDEST-V
QTDMAX-V
QTDMIN-V
PRECOCOMPRA-V
PRECOVENDA-V
PERCOMIS-V
VCADPRD
REG-VCADPRD
Tipo e Tamanho
X(04)
X(20)
X(05)
X(05)
9(05)
9(05)
9(05)
9(06)V99
9(06)V99
9(02)V99
Descrio
Cdigo (Chave)
Descrio
Unidade (caixa, litro, Kg, etc)
Localizao no estoque
Quantidade em estoque
Quantidade mxima em estoque
Quantidade mnima em estoque
Preo de Compra
Preo de Venda
Percentual de comisso
Nome do Arquivo
Nome do Registro
REG-RELOCOR
RELOCOR
Tipo e Tamanho
X(132)
www.grandeporte.com.br
Descrio
Relatrio de 132 colunas
WS-HORA-CABEC1
WS-DATA-CABEC1
12345678911234567892123456789312345678941234567895123456789612345678971234567898123456789912345678901234567891123456789212123456738
123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012
DD/MM/20AA HH:MM:SSxxxxxxxxxxxxxxxxxxxxxx
xxOCORRENCIAS ATUALIZACAO CADASTRO DE PRODUTOSxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxPAG.xZ9
-----------------------------------------------------------------------------------------------------------------------------------IMAGEM DO REGISTRO
OCORRENCIA
-----------------------------------------------------------------------------------------------------------------------------------XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXX
-----------------------------------------------------------------------------------------------------------------------------------INDUSTRIAS SEUNOME S/A.
SERVIMOS BEM PARA SERVIR SEMPRE.
WS-PAG-CABEC1
1
2
01
02
03
04
05
06
07
08
09
..
57
58
59
60
28
Parte 9
Layout do Relatrio
www.grandeporte.com.br
LD-OCORRENCIA
Ocorrncias
INCLUSAO EFETUADA
EXCLUSAO EFETUADA
ANTES ALTERACAO
APOS ALTERACAO
MOVIMENTO INVALIDO
LD-IMAGEM
Parte 9
29
Layout da SYSOUT
1
2
3
4
5
12345678901234567890123456789012345678901234567890
**************************************************
* DATA GREGORIANA 1 - 99/99/2099
*
* DATA GREGORIANA 2 - 99 DE XXXXXXXXX DE 2099
*
* DATA JULIANA
999 DE 2099
*
* DIA DA SEMANA
XXXXXXXXXXXXX
*
**************************************************
1
2
3
4
5
12345678901234567890123456789012345678901234567890
==================================================
MOVIMENTOS LIDOS................: ZZZ9
PRODUTOS INCLUIDOS..............: ZZZ9
PRODUTOS EXCLUIDOS..............: ZZZ9
PRODUTOS ALTERADOS..............: ZZZ9
MOVIMENTO INVALIDO..............: ZZZ9
LINHAS DE DETALHE IMPRESSAS.....: ZZZ9
PAGINAS IMPRESSAS...............: ZZZ9
TEMPO TOTAL DE PROCESSAMENTO....: HH:MM:SS:CC
==================================================
www.grandeporte.com.br
30
Parte 9
Observao
www.grandeporte.com.br
Parte 9
31
JOB de Execuo
11234567892123456789312345678941234567895123456789612345678971234567898
12345678901234567890123456789012345678901234567890123456789012345678901234567890
//GPXXNN08 JOB SEUNOME,CLASS=A,MSGCLASS=X,NOTIFY=GPXXNN,TIME=(1,20)
//JOBLIB
DD
DSN=GP.GERAL.LOADLIB,DISP=SHR
//*********************************************************************
//* STEP001 - EXCLUIR O VCADPRD E RECRIA-LO
//*********************************************************************
//STEP001
EXEC PGM=IDCAMS
//SYSPRINT DD
SYSOUT=*
//SYSIN
DD *
DELETE GP.GPXXNN.VCADPRD PURGE CLUSTER
IF MAXCC = 8 THEN SET MAXCC=0
DEFINE CLUSTER
(NAME (GP.GPXXNN.VCADPRD)
VOL (PR39T7)
TRK (1,1)
RECORDSIZE (69,69)
KEYS (04,0)
SHAREOPTIONS (2,3))
DATA(NAME(GP.GPXXNN.VCADPRD.DATA))
INDEX(NAME(GP.GPXXNN.VCADPRD.INDEX))
//*********************************************************************
//* STEP002 - CARREGAR VCADPRD COM BASE NO ARQUIVO CADPRD
//*
EXECUTAR O PROGRAMA EEXX99E8 PARA DAR A CARGA
//*********************************************************************
//STEP002
EXEC PGM=EEXX99E8,COND=(0,NE)
//VCADPRD
DD DSN=GP.GPXXNN.VCADPRD,DISP=SHR
//CADPRD
DD DSN=GP.GPAZ99.CADPRD,DISP=SHR
//*********************************************************************
//* STEP003 - IMPRIMIR O ARQUIVO VCADPRD COM O UTILITARIO IDCAMS
//*********************************************************************
//STEP003
EXEC PGM=IDCAMS,COND=(0,NE)
//STEPLIB
DD DSN=GP.GERAL.LOADLIB,DISP=SHR
//SYSPRINT DD SYSOUT=*
//VCADPRD
DD DSN=GP.GPXXNN.VCADPRD,DISP=SHR
//SYSIN
DD *
PRINT INFILE(VCADPRD) CHAR
//*
//*********************************************************************
//* STEP004 - EXECUTAR O PROGRAMA GPXXNN08 PARA ATUALIZAR VCADPRD
//*********************************************************************
//STEP004
EXEC PGM=GPXXNN08,COND=(0,NE)
//STEPLIB
DD DSN=GP.GERAL.LOADLIB,DISP=SHR
//VCADPRD
DD DSN=GP.GPXXNN.VCADPRD,DISP=SHR
//MOVPROD
DD DSN=GP.GPXX99.MOVPROD,DISP=SHR
//RELOCOR
DD SYSOUT=*
//*
//*********************************************************************
//* STEP005 - VAMOS IMPRIMIR O ARQUIVO VCADPRD COM O UTILITARIO IDCAMS
//*********************************************************************
//STEP005
EXEC PGM=IDCAMS,COND=(0,NE)
//STEPLIB
DD DSN=GP.GERAL.LOADLIB,DISP=SHR
//SYSPRINT DD SYSOUT=*
//VCADPRD
DD DSN=GP.GPXXNN.VCADPRD,DISP=SHR
//SYSIN
DD *
PRINT INFILE(VCADPRD) CHAR
//*
www.grandeporte.com.br
32
Parte 9
www.grandeporte.com.br
Parte 9
33
Pargrafo 1100-LER-MOVPRD
Ler registro do arquivo MOVPRD carregando varivel espelho
Se file status for igual a 00 (sucesso)
Somar 1 ao contador movimentos lidos
Seno
Se file status for diferente de 10 (fim de arquivo)
Mover mensagem de erro para varivel da rotina de erro
Mover file status para variveis da rotina de erro
Executar rotina de erro (9000-ERRO)
Pargrafo 2000-PROCESSAR
se WS-TIPOMOVTO-M = I
Executar o pargrafo 2100-INCLUSAO
se WS-TIPOMOVTO-M = E
Executar o pargrafo 2200-EXCLUSAO
se WS-TIPOMOVTO-M = A
Executar o pargrafo 2300-ALTERACAO
se WS-TIPOMOVTO-M no for I, E ou A
Mover WS-REG-MOVPRD para LD-IMAGEM
Mover MOVIMENTO INVALIDO para LD-OCORRENCIA
Executar o pargrafo 2400-IMPRIME-RELOCOR
Somar 1 ao contador de movimentos invlidos
Ler o prximo registro do arquivo MOVPRD (1100-LER-MOVPRD)
Acho que
podemos
usar o
evaluate
hehehehhe
www.grandeporte.com.br
34
Parte 9
Pargrafo 2100-INCLUSAO
Mover WS-CODPROD-M para CODPROD-V (campo chave)
Ler VCADPRD carregando a varivel espelho WS-REG-VCADPRD
Se FILE STATUS = 00
ERRO - O produto que se deseja incluir j existe
Mover WS-REG-MOVPRD para LD-IMAGEM
Mover MOVIMENTO INVALIDO para LD-OCORRENCIA
Executar o pargrafo 2400-IMPRIME-RELOCOR
Somar 1 ao contador de movimento invlidos
Se FILE STATUS = 23
OK - O produto que se deseja incluir no existe
Mover a varivel WS-REG-MOVPRD para WS-REG-VCADPRD
Gravar REG-VCADPRD com base na WS-REG-VCADPRD
Se FILE STATUS = 00
OK - Incluso ocorreu com sucesso
Mover WS-REG-VCADPRD para LD-IMAGEM
Mover INCLUSAO EFETUADA para LD-OCORRENCIA
Executar o pargrafo 2400-IMPRIME-RELOCOR
Somar 1 ao contador de includo
Se FILE STATUS = 22
ERRO - Outro programa incluiu o mesmo produto
Mover WS-REG-MOVPRD para LD-IMAGEM
Mover MOVIMENTO INVALIDO para LD-OCORRENCIA
Executar o pargrafo 2400-IMPRIME-RELOCOR
Somar 1 ao contador de movimento invlido
Se FILE STATUS NOT = 00 AND NOT = 22
ERRO File Status no esperado
Mover mensagem de erro para varivel da rotina de erro
Mover file status para variveis da rotina de erro
Executar rotina de erro (9000-ERRO)
Se FILE STATUS NOT = 23 AND NOT = 00
ERRO File Status no esperado
Mover mensagem de erro para varivel da rotina de erro
Mover file status para variveis da rotina de erro
Executar rotina de erro (9000-ERRO)
www.grandeporte.com.br
Parte 9
35
Pargrafo 2200-EXCLUSAO
Mover WS-CODPROD-M para CODPROD-V (campo chave)
Ler VCADPRD carregando a varivel espelho WS-REG-VCADPRD
Se FILE STATUS = 00
OK - O produto que se deseja excluir existe
Excluir o registro (DELETE)
Se FILE STATUS = 00
OK - A excluso foi feita com sucesso
Mover WS-REG-VCADPRD para LD-IMAGEM
Mover EXCLUSAO EFETUADA para LD-OCORRENCIA
Executar o pargrafo 2400-IMPRIME-RELOCOR
Somar 1 ao contador de excluido
Se FILE STATUS = 23
ERRO - Outro programa excluiu o mesmo produto
Mover WS-REG-MOVPRD para LD-IMAGEM
Mover MOVIMENTO INVALIDO para LD-OCORRENCIA
Executar o pargrafo 2400-IMPRIME-RELOCOR
Somar 1 ao contador de movimento invlido
Se FILE STATUS NOT = 23 AND NOT = 00
ERRO File Status no esperado
Mover mensagem de erro para varivel da rotina de erro
Mover file status para variveis da rotina de erro
Executar rotina de erro (9000-ERRO)
Se FILE STATUS = 23
ERRO - O produto que se deseja excluir no existe
Mover WS-REG-MOVPRD para LD-IMAGEM
Mover MOVIMENTO INVALIDO para LD-OCORRENCIA
Executar o pargrafo 2400-IMPRIME-RELOCOR
Somar 1 ao contador de movimento invlido
Se FILE STATUS NOT = 23 AND NOT = 00
ERRO File Status no esperado
Mover mensagem de erro para varivel da rotina de erro
Mover file status para variveis da rotina de erro
Executar rotina de erro (9000-ERRO)
www.grandeporte.com.br
36
Parte 9
Pargrafo 2300-ALTERACAO
Mover WS-CODPROD-M para CODPROD-V (campo chave)
Ler VCADPRD carregando a varivel espelho WS-REG-VCADPRD
Se FILE STATUS = 00
OK - O produto que se deseja alterar existe
Mover WS-REG-VCADPRD para LD-IMAGEM
Mover ANTES ALTERACAO para LD-OCORRENCIA
Executar o pargrafo 2400-IMPRIME-RELOCOR
Mover os campos da WS-REG-MOVPRD
para WS-REG-VCADPRD, observando que:
Se campo for numrico:
mover apenas se tiver contedo numrico
Se campo for alfanumrico
mover apenas se for diferente de espaos
Alterar o registro com base no WS-REG-VCADPRD (REWRITE)
Se FILE STATUS = 00
OK - a alterao foi feita com sucesso
Mover WS-REG-VCADPRD para LD-IMAGEM
Mover APOS ALTERACAO para LD-OCORRENCIA
Executar o pargrafo 2400-IMPRIME-RELOCOR
Somar 1 ao contador de alterado
Se FILE STATUS = 23
ERRO - Outro programa excluiu o mesmo produto
Mover WS-REG-MOVPRD para LD-IMAGEM
Mover MOVIMENTO INVALIDO para LD-OCORRENCIA
Executar o pargrafo 2400-IMPRIME-RELOCOR
Somar 1 ao contador de movimento invlido
Se FILE STATUS NOT = 23 AND NOT = 00
ERRO File Status no esperado
Mover mensagem de erro para varivel da rotina de erro
Mover file status para variveis da rotina de erro
Executar rotina de erro (9000-ERRO)
Se FILE STATUS = 23
ERRO - O produto que se deseja alterar no existe
Mover WS-REG-MOVPRD para LD-IMAGEM
Mover MOVIMENTO INVALIDO para LD-OCORRENCIA
Executar o pargrafo 2400-IMPRIME-RELOCOR
Somar 1 ao contador de movimento invlido
www.grandeporte.com.br
Parte 9
37
www.grandeporte.com.br
38
Parte 9
Pargrafo 2700-IMPRIME-RODAPE
Calcular WS-PULA = 58 WS-CTLINHA
gravar as 2 linhas de rodap testando o file status
Se o file status for diferente de 00
Mover mensagem de erro para varivel da rotina de erro
Mover file status para variveis da rotina de erro
Executar rotina de erro (9000-ERRO)
Mover 60 ao contador de linha
Lembre que o 1 rodap deve ser AFTER WS-PULA LINES
Pargrafo 3000-TERMINO
Se WS-CTLINHA < 60
Executar o pargrafo 2700-IMPRIME-RODAPE
Executar o pargrafo 9000-IMPRIME-DATA
Fechar o arquivo MOVPRD
Se file status for diferente de 00
Mover mensagem de erro para varivel da rotina de erro
Mover file status para variveis da rotina de erro
Executar rotina de erro (9000-ERRO)
Fechar o arquivo VCADPRD
Se file status for diferente de 00
Mover mensagem de erro para varivel da rotina de erro
Mover file status para variveis da rotina de erro
Executar rotina de erro (9000-ERRO)
Fechar o arquivo RELOCOR
Se file status for diferente de 00
Mover mensagem de erro para varivel da rotina de erro
Mover file status para variveis da rotina de erro
Executar rotina de erro (9000-ERRO)
Receber o horrio final de processamento
Calcular o tempo de processamento
Mover contadores para as variveis formatadas
Exibir os contadores:
Movimentos Lidos
Produtos Includo
Produtos Excludo
Produtos Alterado
Movimento Invlido
Linhas de Detalhe Impresso
Pgina
Exibir o tempo total de processamento
www.grandeporte.com.br
Parte 9
39
www.grandeporte.com.br
40
Parte 9
Avaliao
Estou fera!
Fiz Certo!
Muito Bom
Bom
www.grandeporte.com.br
regular
ruim
Muito ruim
Parte
Quantas dimenses
uma varivel pode ter
na linguagem COBOL?
Verso 2.3.5
Parte 10
Preparation
Trocando Ideias
Reflexo
www.grandeporte.com.br
10
Parte 10
Presentation
Teoria
Comandos complementares
INITIALIZE
Efetua a inicializao (atribuio de valores) de uma varivel (ou um conjunto
de variveis).
Como default variveis numricas so inicializadas com zeros e variveis
alfanumricas so inicializadas com espaos.
Se a varivel especificada for um item de grupo, todos os seus subitens sero
inicializados de acordo com seu formato: os que forem numricos sero inicializados
com zero e os que forem alfanumrica ou alfabtica sero inicializados com espaos.
Pode-se especificar um contedo alternativo para a inicializao, atravs da
clusula REPLACING. Exemplos:
----+-*A-1-B--+----2----+----3----+----4----+----5----+----6----+----7--|-+----8
xxxxxxxxxxxINITIALIZExxWS-CTLIDO WS-CTGRAVA WS-CTDESP WS-MENSAGEM
xxxxxxxxxxxINITIALIZExxWS-CTLIDO WS-CTGRAVA WS-CTDESP WS-MENSAGEM
xxxxxxxxxxxxxxxxxxxxxxxREPLACING ALPHANUMERIC BY SPACES
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxNUMERIC BY ZEROS
xxxxxxxxxxxINITIALIZExxWS-CTLIDO WS-CTGRAVA WS-CTDESP WS-MENSAGEM
xxxxxxxxxxxxxxxxxxxxxxxREPLACING ALPHANUMERIC BY BANANA
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxNUMERIC BY 2012
xxxxxxxxxxxINITIALIZExxWS-CTLIDO WS-CTGRAVA WS-CTDESP WS-MENSAGEM
xxxxxxxxxxxxxxxxxxxxxxxREPLACING ALPHANUMERIC BY ALL X
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxNUMERIC BY ALL 9
www.grandeporte.com.br
Parte 10
Teoria
TO
TO
TO
TO
TO
TO
TO
TO
TO
TO
TO
TO
WS-TOTAL-01
WS-TOTAL-02
WS-TOTAL-03
WS-TOTAL-04
WS-TOTAL-05
WS-TOTAL-06
WS-TOTAL-07
WS-TOTAL-08
WS-TOTAL-09
WS-TOTAL-10
WS-TOTAL-11
WS-TOTAL-12
Esse problema pode ser resolvido criando uma tabela (vetor) unidimensional
com 12 ocorrncias, uma para cada ms. A clusula OCCURS (ocorre) usada na
DATA DIVISION na definio de uma varivel para indicar quantas vezes essa
varivel deve ser repetida. A clusula OCCURS no pode ser usada em variveis de
nvel 01, 77 ou 88. Exemplo:
www.grandeporte.com.br
10
Parte 10
----+-*A-1-B--+----2----+----3----+----4----+----5----+----6----+----7--|-+----8
*----------------------------------------------------------------*
WORKING-STORAGE
SECTION.
*----------------------------------------------------------------*
01 WS-TOTAL-VENDAS.
05 WS-TOTAL
PIC 9(06)V99 OCCURS 12 TIMES.
WS-TOTAL-VENDAS
01
02
03
04
05
06
07
08
09
10
11
12
WS-TOTAL
06
A varivel WS-TOTAL-VENDAS formado por 12 ocorrncias da varivel WSTOTAL. preciso informar qual delas estamos nos referindo atravs de um indexador
(subscrito). Esse subscrito deve estar dentro de parnteses e pode ser uma constante
ou varivel numrica, com valores inteiros. O subscrito comea pelo nmero 1 e vai
at o valor informado por OCCURS. Agora a PROCEDURE DIVISION do exemplo
acima fica:
----+-*A-1-B--+----2----+----3----+----4----+----5----+----6----+----7--|-+----8
*----------------------------------------------------------------*
PROCEDURE
DIVISION.
*----------------------------------------------------------------*
060-TOTALIZA-VENDAS.
ADD WS-VALOR-VENDA TO WS-TOTAL (WS-MES)
.
www.grandeporte.com.br
Parte 10
Essa tabela de uma dimenso pode ser representada graficamente da seguinte
forma:
WS-DADOS-DO-CLIENTE
WS-TELEFONES-CLI
WS-NOMECLI
01
02
03
04
05
WS-CODCLI
WS-FONE (3)
----+-*A-1-B--+----2----+----3----+----4----+----5----+----6----+----7--|-+----8
*----------------------------------------------------------------*
WORKING-STORAGE
SECTION.
*----------------------------------------------------------------*
* TABELA DE DUAS DIMENSOES UMA LOJA COM ATE 5 VENDEDORES E O
* TOTAL DE SUAS VENDAS NO TRIMESTRE, MES A MES.
*----------------------------------------------------------------*
01 WS-VENDAS-DA-LOJA.
05 WS-VENDEDOR OCCURS 5 TIMES.
XXX
10 WS-CODVEND
PIC X(05).
XXX
10 WS-NOMEVEND
PIC X(30).
XXXX
10 WS-VENDAS-TRIMESTRE OCCURS 3 TIMES.
XXXXXXX
15 WS-VENDAS
PIC 9(06)V99.
01
WS-VENDAS (02,03)
02
03
01
02
03
04
05
WS-VENDEDOR (04)
----+-*A-1-B--+----2----+----3----+----4----+----5----+----6----+----7--|-+----8
*----------------------------------------------------------------*
WORKING-STORAGE
SECTION.
*----------------------------------------------------------------*
* TABELA DE TRES DIMENSOES UMA CLASSE COM ATE 5 ALUNOS, QUE
* CURSAM 4 DISCIPLINAS E TEM 3 NOTAS POR DISCIPLINA.
*----------------------------------------------------------------*
01 WS-DADOS-DA-CLASSE.
05 WS-DADOS-DOS-ALUNOS OCCURS 5 TIMES.
XXX
10 WS-MATRICULA
PIC X(08).
XXX
10 WS-NOMEALUNO
PIC X(30).
XXXX
10 WS-DADOS-DISCIPLINA OCCURS 4 TIMES.
XXXXXXX
15 WS-DISCIPLINA
PIC X(15).
XXXXXXX
15 WS-NOTAS-DISCIPLINA OCCURS 3 TIMES.
XXXXXXXXXX
20 WS-NOTA
PIC 9(02)V9.
www.grandeporte.com.br
10
Parte 10
Essa tabela de trs dimenses pode ser representada graficamente da seguinte forma:
WS-DISCIPLINA (01,02)
WS-NOMEALUNO (01)
WS-NOTAS-DISCIPLINA (01,04)
WS-DADOS-DISCIPLINA (01,01)
01
02
03
04
01
02
03
04
05
WS-MATRICULA(02)
WS-NOTA (02,04,01)
WS-DADOS-DOS-ALUNOS (05)
01
WS-PRODUTOS.
05 WS-CODPROD
PIC X(05)
OCCURS 100 TIMES
ASCENDING KEY WS-CODPROD
INDEXED BY WS-IDX-CODPROD.
ETIQUETA.
05 WS-LINHA-ETIQUETA
05
OCCURS 3 TIMES
INDEXED BY WS-LINHA-INDEX.
OCCURS 3 TIMES
INDEXED BY WS-COLUNA-INDEX.
PIC X(01).
PIC X(25).
WS-COLUNA-ETIQUETA
10
10
FILLER
CAMPO-ETIQUETA
www.grandeporte.com.br
Parte 10
Teoria
Pesquisa em
tabela interna (search)
01 WS-CP
PIC X(04).
*----------------------------------------------------------------*
PROCEDURE
DIVISION.
*----------------------------------------------------------------*
MOVE 004
TO WS-CP
SET IDX-PROD TO 1
SEARCH WS-REG-PRODUTOS
AT END
DISPLAY PRODUTO NAO LOCALIZADO
WHEN WS-CODPROD(IDX-PROD) = WS-CP
DISPLAY PRODUTO LOCALIZADO
DISPLAY CODIGO.........: WS-CODPROD(IDX-PROD)
DISPLAY DESCRICAO......: WS-DESCPROD(IDX-PROD)
DISPLAY PRECOPROD......: WS-PRECOPROD(IDX-PROD)
END-SEARCH
www.grandeporte.com.br
10
10
Parte 10
01 WS-MES
PIC 9(2).
*----------------------------------------------------------------*
PROCEDURE
DIVISION.
*----------------------------------------------------------------*
MOVE 7
TO WS-MES
Quando voc usar SEARCH ALL no preciso setar o ndice antes do mesmo
iniciar. O ndice usado sempre o associado com o primeiro index-name na clusula
OCCURS, e varia durante execuo para maximizar a eficincia de pesquisa.
www.grandeporte.com.br
Parte 10
11
Para usar a declarao SEARCH ALL, sua tabela deve estar ordenada pelas
KEY(s) especificadas dentro da clusula OCCURS. Voc pode especificar qualquer
KEY dentro da condio WHEN, mas tudo que precede os data-names na opo KEY
tambm deve ser testado.
O teste deve ser uma condio EQUAL TO, e o data-name KEY ou tenha que
ser o assunto da condio ou o nome de uma varivel condicional com que o nome a
ser testado. O condio WHEN tambm pode ser uma condio de combinao,
formada de uma simples condio com AND como o nico conetivo lgico.
A KEY e seu objeto de comparao devem ser compatveis, como declarado
na relao regras de teste.
10
www.grandeporte.com.br
12
Parte 10
Atividade
WORKING-STORAGE
SECTION.
SECTION.
www.grandeporte.com.br
Parte 10
Atividade
13
Trabalho em dupla
----+-*A-1-B--+----2----+----3----+----4----+----5----+----6----+----7--|-+----8
DATA
DIVISION
WORKING-STORAGE
SECTION.
77 WS-NOME
PIC X(20).
01 WS-BANCO-DO-POLVO.
05 WS-CONTA-POUPANCA
OCCURS 400 TIMES
INDEXED BY IDX1.
10 WS-NUMERO-CONTA
PIC 9(06).
10 WS-NOME-CLIENTE
PIC X(20).
10 WS-SALDO-POUPANCA
PIC 9(06)V99.
PROCEDURE DIVISION.
ACCEPT WS-NOME FROM SYSIN
SET IDX1 TO 1
SEARCH WS-CONTA-POUPANCA
AT END
DISPLAY NOME NAO ENCONTRADO
WHEN WS-NOME = WS-NOME-CLIENTE (IDX1)
DISPLAY WS-NUMERO-CONTA
(IDX1) " - "
WS-NOME-CLIENTE
(IDX1) " - "
WS-SALDO-POUPANCA (IDX1)
www.grandeporte.com.br
10
14
Parte 10
Atividade
Projeto 9
Objetivo do Programa
Macro-Fluxo
MOVTOEST
PARM=AAAAMMDD
GPXXNN09
TABCADPROD
CADPROD
PGMAUX03
RELMOV01
www.grandeporte.com.br
Parte 10
15
Nome do Arquivo
Nome do Registro
Nome do Campo
TIPO-REG-MOVTO
FILLER
MOVTOEST
REG-MOVTOEST
Tipo e Tamanho Descrio
X(01)
H=HEADER, D=DATA, T=TRAILER
X(32)
Nome do Registro
Nome do Campo
FILLER
SIGLA-SYS-CAD
ANO-MES-REF-CAD
FILLER
REG-MOVTOEST-HEADER
Tipo e Tamanho Descrio
X(01)
H=HEADER
X(05)
Sigla do Sistema
X(06)
Ano e ms de referncia AAAAMM
X(21)
Nome do Registro
Nome do Campo
FILLER
NUMMOVTO
DATAMOVTO
HORAMOVTO
CODPRODMOVTO
TIPOMOVTO
QTDMOVTO
REG-MOVTOEST-DATA
Tipo e Tamanho Descrio
X(01)
D=DATA
9(08)
Nmero do movimento
9(08)
Data do movimento AAAAMMDD
9(06)
Hora do movimento HHMMSS
9(04)
Cdigo do produto
X(01)
Tipo do movimento E=entrada S=sada
9(08) COM-3
Quantidade movimentada
Nome do Registro
Nome do Campo
FILLER
QTDREG-MOVTO
FILLER
REG-MOVTOEST-TRAILER
Tipo e Tamanho Descrio
X(01)
Trailer T
9(05)
Quantidade de registros no arquivo
X(75)
Nome do Arquivo
Nome do Registro
REG-RELMOV01
RELMOV01
Tipo e Tamanho
X(80)
Nome do Arquivo
Nome do Registro
Nome do Campo
CODPROD
DESCPROD
QTDEST
PRECOUNIT
CADPROD
REG-CADPROD
Tipo e Tamanho
9(04)
X(20)
9(08) COMP-3
9(08)V99 COMP-3
www.grandeporte.com.br
Descrio
Relatrio de 80 colunas
Descrio
Cdigo do produto
Descrio do produto
Quantidade em estoque
Preo Unitrio
10
16
Parte 10
Layout da Mensagem
Nome do Registro
Nome do Campo
WS-MENS-CODPROD
WS-MENS-TIPOMOVTO
WS-MENS-QTDE
WS-MENS-CLASSIF
WS-MSG-COMUNICACAO
Tipo e Tamanho Descrio
9(04)
Cdigo do produto
X(01)
Tipo de movimentao E=entrada S=sada
9(08) COMP-3
Quantidade movimentada
X(01)
Classificao do Movimento (0 ou 1)
01
02
01
02
03
04
05
06
..
45
46
47
48
49
50
12345678911234567892123456789312345678941234567895123456789612345678971234567898
12345678901234567890123456789012345678901234567890123456789012345678901234567890
DD/MM/20AA
** BOX COMPANY DO BRASIL **
HH:MM:SS
RELATORIO DE MOVIMENTACAO DE ESTOQUE A PARTIR DE DD/MM/AAAA
PAG. Z.ZZ9
-------------------------------------------------------------------------------NUMERO
DATA
HORA
PRODUTO
QUANTIDADE
----------- ----------------- ------------------------------------99.999.999 DD/MM/AAAA
HH:MM:SS 9999 XXXXXXXXXXXXXXXXXXXX
ZZ.ZZZ.ZZ9+
99.999.999 DD/MM/AAAA
HH:MM:SS 9999 XXXXXXXXXXXXXXXXXXXX
ZZ.ZZZ.ZZ9+
99.999.999 DD/MM/AAAA
HH:MM:SS 9999 XXXXXXXXXXXXXXXXXXXX
ZZ.ZZZ.ZZ9+
99.999.999 DD/MM/AAAA
HH:MM:SS 9999 XXXXXXXXXXXXXXXXXXXX
ZZ.ZZZ.ZZ9+
99.999.999 DD/MM/AAAA
HH:MM:SS 9999 XXXXXXXXXXXXXXXXXXXX
ZZ.ZZZ.ZZ9+
99.999.999 DD/MM/AAAA
HH:MM:SS 9999 XXXXXXXXXXXXXXXXXXXX
ZZ.ZZZ.ZZ9+
-------------------------------------------------------------------------------APOS O USO UTILIZE ESTE PAPEL COMO RASCUNHO
RECICLE SUAS IDEIAS
DD/MM/AAAA
DD/MM/AAAA
DD/MM/AAAA
DD/MM/AAAA
DD/MM/AAAA
DD/MM/AAAA
HH:MM:SS
HH:MM:SS
HH:MM:SS
HH:MM:SS
HH:MM:SS
HH:MM:SS
9999
9999
9999
9999
9999
9999
XXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXX
LD-CODPRODMOVTO
LD-DESCPRODMOVTO
LD-QTDMOVTO
www.grandeporte.com.br
ZZ.ZZZ.ZZ9+
ZZ.ZZZ.ZZ9+
ZZ.ZZZ.ZZ9+
ZZ.ZZZ.ZZ9+
ZZ.ZZZ.ZZ9+
ZZ.ZZZ.ZZ9+
Parte 10
17
Layout da SYSOUT
1
2
3
4
5
12345678901234567890123456789012345678901234567890
**************************************************
* DATA GREGORIANA 1 - 99/99/2099
*
* DATA GREGORIANA 2 - 99 DE XXXXXXXXX DE 2099
*
* DATA JULIANA
999 DE 2099
*
* DIA DA SEMANA
XXXXXXXXXXXXX
*
**************************************************
1
2
3
4
5
12345678901234567890123456789012345678901234567890
=======================================================
BOX COMPANY DO BRASIL
=======================================================
TOTAL DE MOVIMENTOS LIDOS..............: 99999
TOTAL DE PAGINAS IMPRESSAS.............: 99999
TOTAL DE MOVIMENTOS IMPRESSOS..........: 99999
TOTAL DE MOVIMENTOS DESPREZADOS........: 99999
=======================================================
TEMPO TOTAL DE PROCESSAMENTO...........: HH:MM:SS
=======================================================
Observao
www.grandeporte.com.br
10
18
Parte 10
Orientao para processamento
Na LINKAGE SECTION, criar a varivel para receber via PARM do JCL a data
de referencia.
----+-*A-1-B--+----2----+----3----+----4----+----5----+----6----+----7--|-+----8
LINKAGE
SECTION.
01 LS-PARAMETRO.
05 LS-LENGTH
PIC S9(4) COMP.
05 LS-DATAREF
PIC X(10).
No Pargrafo 1000-INICIALIZAR:
aps a abertura de todos os outros arquivos:
Abrir para leitura o arquivo CADPROD
Se file status for diferente de 00
Mover mensagem de erro para varivel da rotina de erro
Mover file status para variveis da rotina de erro
Executar rotina de erro (9000-ERRO)
aps executar o pargrafo 9100-FORMATA-DATA-HORA:
Inicializar WS-INDICE com zero
Executar o pargrafo 1500-CARREGA-TABELA
at que FILE STATUS = 10 no arquivo CADPROD
Preencher as linhas restantes da tabela com 9999 para o cdigo
Pargrafo 1500-CARREGA-TABELA
Ler registro do arquivo CADPROD carregando varivel espelho
Se FILE STATUS = 00
Somar 1 ao WS-INDICE
Mover WS-CODPROD para WS-TAB-CODPROD (WS-INDICE)
Mover WS-DESCPROD para WS-TAB-DESCPROD (WS-INDICE)
Se FILE STATUS diferente de 10
Mover mensagem de erro para varivel da rotina de erro
Mover file status para variveis da rotina de erro
Executar rotina de erro (9000-ERRO)
www.grandeporte.com.br
Parte 10
19
www.grandeporte.com.br
10
20
Parte 10
Fazer Busca Binria na tabela WS-REG-TAB-CADPROD
Se for fim (no achou nada)
Mover NAO LOCALIZADO para a LINDET
Se WS-TAB-CODPROD(IDX1) = WS-CODPRODMOVTO
Mover WS-TAB-DESCPROD(IDX1) para a LINDET
gravar a linha de detalhe testando o file status
Se o file status for diferente de 00
Mover mensagem de erro para varivel da rotina de erro
Mover file status para variveis da rotina de erro
Executar rotina de erro (9000-ERRO)
Somar 1 ao contador de linha
Somar 1 ao contador de registros impressos
Pargrafo 3000-TERMINO
Tirar o teste do trailer, pois trata-se de um filtro e ser impresso
menos registros que o registrado no trailer.
aps o fechamento de todos os outros arquivos:
Fechar o arquivo CADPROD
Se file status for diferente de 00
Mover mensagem de erro para varivel da rotina de erro
Mover file status para variveis da rotina de erro
Executar rotina de erro (9000-ERRO)
aps exibir os contadorores:
Exibir tambm o contador de desprezados
www.grandeporte.com.br
Parte 10
21
10
www.grandeporte.com.br
22
Parte 10
Avaliao
Estou fera!
Fiz Certo!
Muito Bom
Bom
www.grandeporte.com.br
regular
ruim
Muito ruim
Parte
ANEXOS
Verso 2.3.5
Parte 11
Teoria
Wrong length record; Input file record length is not equal to the length stated in the DD or the FD.
IO error, damaged tape, device malfunction; With disk, reading a dataset that was allocated but never written to.
Writing to input file; Concatenation of files with different record lengths or record formats.
S001-5
Reading after the end of the file by non-COBOL program. COBOL intercepts this and displays "QSAM error,
status 92". Out of space on output disk file.
S002
With variable format files used for output.
The record is larger than the track size.
The record length is greater than allowed maximum 32,768.
The wrong record length is being used on output.
The 4-byte record length indicator is wrong.
Record greater than 32,768 bytes
S013-10
A dummy file with no blocksize.
S013-14
A library has run out of space in its directory. You have to backup, delete, and restore the library with
IEBCOPY. A dataset is sequential, but the JCL indicates that it is a library.
S013-18
A library member was specified in the JCL but was not found.
S013-20
The block size is not a multiple of record length.
Check record length in program, compare to actual record length of file
S013-34
The block size was found to be 0. A new file is being created but block size was not in the JCL.
S013-40
Reading a file whose JCL has SYSOUT=
S106
The program on the program library was unreadable. Recompile and link.
S122
The job was canceled because it violated some restriction. A dump was requested
S137
A tape has a bad trailer label. Copy the file with IEBGENER, ignoring the error. The copy will be good.
Using LABEL=2 when there's only one dataset on the tape.
S213
A disk dataset was not actually on the volume stated in the VOL=SER=.
A disk dataset was not actually on the volume indicated in the catalog.
S222
The job was cancelled because it violated some restriction. No dump was requested.
S237
The block count on a tape trailer label is wrong. Probably caused by hardware error. Copy the file with
IEBGENER, ignoring the error. The copy will be good. A problem with the second volume of tape or disk.
S313, 314 An Input/output error in the VTOC of a disk volume. Inform support staff.
S322
The job used more CPU time than it should have. Either the estimate is wrong or the program is in an
uncontrollable loop.
S413
A volume was needed that could not be mounted.
S422
Too many job steps.
S513
Two jobs or DDNAMES wanting same tape at same time.
S522
Job was waiting too long.
S613
A bad tape label.
S637
A bad concatenation, different types of devices were used. An unreadable tape mark or label.
S706
The program on the library was not executable. See linkage editor report that put the program on library.
S713
The tape was unexpired and the operator terminated the job.
S714
Labels on the tape were bad.
www.grandeporte.com.br
4
S722
S804
S806
S80A
S813
S913
SA13
SB14
SB37
SD37
SE37
S0C1
S0C2
S0C4
S0C5
S0C6
S0C7
S0CB
U1002
U1005
U1006
U1017
U1020
U1026
U1034
U1035
U1037
U1056
U1066,
U1075
U1072,
U1073,
U1074
U3000
U4038
Parte 11
Too many lines of print.
Region too small for the program.
Program not on the library. May need a JOBLIB or STEPLIB.
Region too small for the program.
Right tape volume, wrong dataset name.
Right dataset name, wrong tape volume.
Security violation.
Label=n states the wrong number.
No space in a library directory for this member's name.
Insufficient disk space.
Insufficient disk space.
Insufficient disk space. An E37 on tape datasets is most often caused when the number of requested volumes is
exceeded. The default is 5, therefore a request for the sixth volume will fail with a E37.
(Operation Exception)
Executing a program with an unresolved external reference.
Calling a program and the program was not included during link edit.
An uncontrolled loop moved data on top of instructions.
Reading a file that is not open
Your SORTIN DCB was not correct
Mixing compile options RES and NORES in different modules
Privileged Operation. Read/write to unopened file. An uncontrolled loop moved data on top of instructions.
Protection. An uncontrolled loop moved data on top of instructions. referencing a field in a record of a closed file
referencing an item in Linkage-Section when there was no PARM= in the JCL.
Calling/called programs have different length for items passed in Linkage Section
with COBOL Sort, doing a STOP RUN or GOBACK while an input or output procedure is still running
Addressing. Same reasons as for 0C4. Falling through into an ENTRY statement
Transferring control into the middle of a SORT procedure.
Specification. Bad boundary alignment for binary data. See reasons for 0C4
Data Exception. Program attempting to do math on illegal data. Data is not numeric, but should be.
Moving ZEROS to group item whose subordinate items are packed-decimal. Uninitialized packed-decimal
fields. Record description is wrong. Field starts or ends in the wrong place in the record.
Find record description of creating program.
Attempting to divide by 0 and not using ON SIZE ERROR
Conflicting file attributes. See S013.
Executing with modules compiled both with RES and NORES
Subscript out of range
Missing DD statement in JCL for DISPLAY or ACCEPT verb
Problem opening or processing a file.
Check the file status.
COBOL sort failed.
Same as SB37
Conflicting DCB parameters. Same as S013.
Program control falls through the last physical statement in program, which is not GOBACK/STOP RUN.
Program didnt close a file before ending
Conflicting DCB information for file defined as EXTERNAL
Illegal numbers in reference modification
www.grandeporte.com.br
Parte 11
Teoria
FILE STATUS
'00'
'02'
'04'
'05'
'07'
'10'
'14'
'20'
'21'
'22'
'23'
'24'
SIGNIFICADO
SUCCESSFUL COMPLETION
DUPLICATE KEY, NON UNIQ. ALT INDX
READ, WRONG LENGTH RECORD
OPEN, FILE NOT PRESENT
CLOSE OPTION INCOMPAT FILE DEVICE OPEN IMPLIES TAPE; TAPE NOT USED
END OF FILE
RRN > RELATIVE KEY DATA
INVALID KEY VSAM KSDS OR RRDS
SEQUENCE ERROR ON WRITE OR CHANGING KEY ON REWRITE'
DUPLICATE KEY
RECORD OR FILE NOT FOUND
BOUNDARY VIOLATION. WRITE PAST END OF KSDS RECORD. COBOL 370: REL: REC#
TOO BIG. OUT OF SPACE ON KSDS/RRDS FILE
'30'
'34'
'35'
'37'
'38'
'39'
'41'
'42'
'43'
'44'
'46'
'47'
'48'
'49'
'90'
'91'
'92'
'93'
'94'
'95'
'96'
'97'
OTHER
VSAM - INVALID FILE INFORMATION OR OPEN OUTPUT (LOAD) WITH FILE THAT NEVER
CONTAINED DATA
VSAM - MISSING DD STATEMENT IN JCL
VSAM - OPEN OK, FILE INTEGRITY VERIFIED FILE SHOULD BE OK
UNKNOWN REASON
www.grandeporte.com.br
Parte 11
Teoria
Tabela ascII
Hex
0
1
2
3
4
5
6
7
8
9
A
B
C
D
E
F
10
11
12
13
14
15
16
17
18
19
1A
1B
1C
1D
1E
1F
20
21
22
23
24
25
26
27
28
29
2A
2B
2C
2D
2E
2F
30
31
32
33
34
35
36
37
38
39
3A
3B
3C
char
Dec Hex Char Dec Hex Char Dec
NUL (null)
64 40 @ 128 80
192
SOH (start of heading)
65 41 A 129 81
193
STX (start of text)
66 42 B 130 82
194
ETX (end of text)
67 43 C 131 83
195
EOT (end of transmission)
68 44 D 132 84
196
ENQ (enquiry)
69 45
E 133 85
197
ACK (acknowledge)
70 46
F 134 86
198
BEL (bell)
71 47 G 135 87
199
BS (backspace)
72 48 H 136 88
200
TAB (horizontal tab)
73 49
I
137 89
201
LF (line feed)
74 4A
J 138 8A
202
VT (vertical Tab)
75 4B K 139 8B
203
FF (form feed)
76 4C
L 140 8C
204
CR (carriage return)
77 4D M 141 8D
205
SO (shift out)
78 4E N 142 8E
206
SI (shift in)
79 4F O 143 8F
207
DLE (data link escape)
80 50 P 144 90
208
DC1 (device control 1)
81 51 Q 145 91
209
DC2 (device control 2)
82 52 R 146 92
210
DC3 (device control 3)
83 53
S 147 93
211
DC4 (device control 4)
84 54
T 148 94
212
NAK (negative acknowledge)
85 55 U 149 95
213
SYN (synchronous idle)
86 56 V 150 96
214
ETB (end of transmission block)
87 57 W 151 97
215
CAN (cancel)
88 58 X 152 98
216
EM (end of medium)
89 59
Y 153 99
217
SUB (substitute)
90 5A
Z 154 9A
218
ESC (escape)
91 5B
[ 155 9B
219
FS (file separator)
92 5C
\ 156 9C
220
GS (group separator)
93 5D
] 157 9D
221
RS (record separator)
94 5E
^ 158 9E
222
US (unit separator)
95 5F
_ 159 9F
223
Space
96 60
` 160 A0
224
!
97 61
a 161 A1
225
"
98 62 b 162 A2
226
#
99 63
c 163 A3
227
$
100 64 d 164 A4
228
%
101 65 e 165 A5
229
&
102 66
f 166 A6
230
'
103 67
g 167 A7
231
(
104 68 h 168 A8
232
)
105 69
i
169 A9
233
*
106 6A
j
170 AA
234
+
107 6B
k 171 AB
235
,
108 6C
l
172 AC
236
109 6D m 173 AD
237
.
110 6E n 174 AE
238
/
111 6F
o 175 AF
239
0
112 70 p 176 B0
240
1
113 71 q 177 B1
241
2
114 72
r 178 B2
242
3
115 73
s 179 B3
243
4
116 74
t 180 B4
244
5
117 75 u 181 B5
245
6
118 76
v 182 B6
246
7
119 77 w 183 B7
247
8
120 78
x 184 B8
248
9
121 79
y 185 B9
249
:
122 7A
z 186 BA
250
;
123 7B
{ 187 BB
251
<
124 7C
| 188 BC
252
61 3D =
62 3E >
63 3F ?
www.grandeporte.com.br
125 7D
126 7E
127 7F
}
~
del
189 BD
190 BE
191 BF
Hex Char
C0
C1
C2
C3
C4
C5
C6
C7
C8
C9
CA
CB
CC
CD
CE
CF
D0
D1
D2
D3
D4
D5
D6
D7
D8
D9
DA
DB
DC
DD
DE
DF
E0 a
E1 b
E2 G
E3 p
E4 S
E5 s
E6
E7
t
E8 f
E9 q
EA W
EB d
EC
ED
EE
EF
F0
F1
F2
F3
F4
F5
F6
F7
F8
F9
FA
FB
FC h
253 FD
254 FE
255 FF
Parte 11
Teoria
Tabela EBCDIC
EBCDIC e a sigla para Extendet Binary Coded Decimal Interchange Code, desenvolvida para os Mainframes
no incio dos anos de 1960 e so ainda usadas hoje em dia, principalmente nos Mainframes da IBM.
LOW-VALUES
Dec
0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
Hex char
Dec Hex
Char
0 NUL (null)
64 40 SP (space)
1 SOH (start of heading)
65 41
2 STX (start of text)
66 42
3 ETX (end of text)
67 43
4 PF (punch off)
68 44
5 HT (horizontal tab)
69 45
6 LC (lower case)
70 46
7 DEL (delete)
71 47
8 GE
72 48
9 RLF
73 49
A SMM (start of manual message)
74 4A
B VT (vertical tab)
75 4B
.
C FF (form feed)
76 4C
<
D CR (carriage return)
77 4D
(
E SO (shift out)
78 4E
+
F SI (shift in)
79 4F
|
10 DLE (data link escape)
80 50
&
11 DC1 (device control 1)
81 51
12 DC2 (device control 2)
82 52
13 TM (tape mark)
83 53
14 RES (restore)
84 54
15 NL (new line)
85 55
16 BS (back space)
86 56
17 IL (idle)
87 57
18 CAN (cancel)
88 58
19 EM (end of medium)
89 59
1A CC (cursor control)
90 5A
!
1B CU1 (customer use 1)
91 5B
$
1C IFS (interchange file separator)
92 5C
*
1D IGS (interchange group separator)
93 5D
)
1E IRS (interchange record separator)
94 5E
;
1F IUS (interchange unit separator)
95 5F
20 DS (digit select)
96 60
21 SOS (start of significance)
97 61
/
22 FS (field separator)
98 62
23
99 63
24 BYP (bypass)
100 64
25 LF (line feed)
101 65
26 ETB (end of transmission block)
102 66
27 ESC (escape)
103 67
28
104 68
29
105 69
2A SM (set mode)
106 6A
www.grandeporte.com.br
223 DF
160 A0
224 E0 \
161 A1
~
225 E1
162 A2
s
226 E2 S
163 A3
t
227 E3 T
164 A4
u
228 E4 U
165 A5
v
229 E5 V
166 A6
w
230 E6 W
167 A7
x
231 E7 X
168 A8
y
232 E8 Y
169 A9
z
233 E9 Z
170 AA
234 EA
171 AB
235 EB
172 AC
236 EC
173 AD
237 ED
174 AE
238 EE
175 AF
239 EF
176 B0
240 F0 0
177 B1
241 F1 1
178 B2
242 F2 2
179 B3
243 F3 3 Usados para
180 B4
244 F4 4
representar
181 B5
245 F5 5
182 B6
246 F6 6 nmeros sem
183 B7
247 F7 7 sinal.
184 B8
248 F8 8
185 B9
249 F9 9
186 BA
250 FA
187 BB
251 FB
188 BC
252 FC
189 BD
253 FD
190 BE
254 FE
HIGH-VALUES
191 BF
255 FF
Parte 11
Teoria
POTNCIA DE 2
1 Byte
2 Bytes
3 Bytes
4 Bytes
www.grandeporte.com.br