Você está na página 1de 404

COBOL Level 1

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

fundou a Grande Porte em 2008 com o


objetivo de difundir essa experincia para
o mercado.

O COBOL tem aberto as portas de


diversas empresas para os nossos
alunos e, mesmo aps 55 anos de
existncia, continua firme e forte
suportando globalmente o comrcio
mundial.

Verso 2.3.5 PDF liberado em 26/04/2015


Fique atento para novas verses em nosso site.

Parte

A Almirante Grace Murray Hopper (1906 1992) foi


uma das primeiras programadoras do sistema Haward Mark I
e foi a criadora do primeiro compilador para uma linguagem de
programao de computadores. Criou a Linguagem de
programao FLOW-MATIC, que serviu como base para a
criao da linguagem COBOL, participando ativamente da
validao da primeira verso desta linguagem.

Verso 2.3.5

Parte 1

Preparation

Trocando Ideias

agora que voc fala !!

Antes de iniciarmos, vamos conversar sobre os tpicos apresentados na


capa desta parte. Isso importante para que seu instrutor e seus colegas
saibam como est seu conhecimento sobre o assunto e se voc precisa ou
pode fornecer ajuda aos colegas e instrutor.

O que voc j sabe ?


O que voc no sabe ?
Porque importante conhecer estes tpicos ?
Quais so os seus temores ?
O que voc considera difcil ?

Reflexo

aqui que voc se compromete !!

Depois de falar sobre o assunto com seus colegas e instrutor, escreva,


desenhe, rabisque, diga algo sobre o que voc vai fazer para dominar esses
tpicos. Comprometa-se!

www.grandeporte.com.br

(11) 4427-4579 (11) 9 9903-3218

Parte 1

Presentation

Histria

Conheca
a xpto !!
,

A XPTO consultoria em desenvolvimento de software uma empresa


especializada no desenvolvimento de solues informatizadas para seus clientes.
Suas solues atendem as mais diversas plataformas de Hardware e Sistemas
Operacionais, tais como Mainframe (Z/OS), AS/400 (OS/400), RISC (UNIX), PC
(Windows/Linux), Tablets (Android/iOS), bem como aplicaes para a Internet.
Suas solues de software so tambm desenvolvidas nas mais diversas
linguagens de programao, tais como COBOL, Java, C#, C/C++, HTML, ASP.NET,
etc.
Voc o mais novo estagirio da XPTO e, portanto passar por esse programa
de treinamento em COBOL, junto com o TSO e a linguagem JCL, utilizados na
plataforma mainframe. Todo o conhecimento de lgica de programao que voc
possui ser usado neste treinamento.
Chama-se plataforma Mainframe ao computador de Grande Porte da IBM para
processamento de transaes. utilizado por grandes empresas e est vivendo uma
fase de crescimento, apesar da dificuldade de se encontrar mo de obra qualificada. A
linguagem de programao mais utilizada nesta plataforma o COBOL. Criada no fim
da dcada de 1950 a linguagem mais importante nesta plataforma, de fcil
compreenso por ser parecida com o ingls corrente. Este ser o foco de seu
treinamento.
Ento vamos l, bons estudos e tenham muita dedicao.

Consultoria
em
Desenvolvimento
de
Software

www.grandeporte.com.br

(11) 4427-4579 (11) 9 9903-3218

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

(11) 4427-4579 (11) 9 9903-3218

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.

Almirante Grace Murray Hopper


1906 1992

1 bug (inseto = erro) de computador

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

(11) 4427-4579 (11) 9 9903-3218

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:

Definio dos arquivos em detalhes, separando em arquivos de entrada


(INPUT) e sada (OUTPUT).
Qualificao dos nomes de dados (clusulas IN e OF)
Clusulas IF END OF DATA (AT END) na operao de leitura (READ) de
arquivos
Constante figurativa ZERO (originalmente ZZZ...ZZZ, onde a quantidade de Z's
indicava a preciso)
Dividir o programa em sees, separando diferentes partes dos programas. O
FLOW-MATIC inclua as sees COMPUTER (ENVIRONMENT DIVISION),
DIRECTORY (DATA DIVISION) e COMPILER (PROCEDURE DIVISION).

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:

Clusula PIC, define o tamanho dos dados e seu tipo


Diviso do cdigo em pargrafos com nomes, sendo possvel pular (GO TO)
para um nome de pargrafo
Clusula AT END nas operaes de arquivos de entrada
Constante figurativa HIGH-VALUE
Retorno ao sistema operacional de um valor numrico quando o programa
encerra. (RETURN-CODE)

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

(11) 4427-4579 (11) 9 9903-3218

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.

Grace Hopper em 1960


com o manual da
1 verso do COBOL
www.grandeporte.com.br

(11) 4427-4579 (11) 9 9903-3218

Parte 1

Teoria

PROCESSAMENTO BATCH
== EM LOTES ==

a modalidade de processamento onde uma coleo de registros de um ou


mais arquivos de entrada processada e um ou mais arquivos de sada so gravados.
No h interao com o usurio, uma vez iniciado um programa batch, ele s termina
quando todos os dados de entrada foram processados ou quando acontecer um erro
de processamento.
Os algoritmos desenvolvidos para esta modalidade de processamento tm o
seguinte aspecto:
algoritmo batch
execute rotina-inicializar
execute rotina-processar at fim dos arquivos de entrada
execute rotina-termino
fim-algoritmo
Na rotina-inicializar, realizamos as seguintes tarefas:
Inicializao das variveis (contadores e acumuladores)
Abertura dos arquivos de entrada e sada
Leitura do primeiro registro dos arquivos de entrada
Na rotina-processar, realizamos as seguintes tarefas:
Seleo de registros para o processamento, pelos operadores
relacionais (=, <, >, >=, <= e NOT =) e operadores lgicos (AND,
OR e NOT)
Processamento dos campos numricos pelos operadores
aritmticos (+,-,*,/ e **)
Movimentao de campos da entrada para a sada
Gravao do registro de sada
Leitura do prximo registro do arquivo de entrada
Na rotina-termino, realizamos as seguintes tarefas:
Exibio de uma estatstica de processamento, mostrando
registros lidos, gravados, desprezados, selecionados, etc.
(contadores e acumuladores)
Fechamento dos arquivos de entrada e de sada
Exibio de mensagem avisando do trmino normal do
processamento

www.grandeporte.com.br

(11) 4427-4579 (11) 9 9903-3218

10

Parte 1

O processamento em lotes uma atividade corriqueira, que realizamos toda a


vez que precisamos lidar com um lote de documentos, fichas de inscrio, provas para
corrigir, contas para conferir, etc.
rotina-inicializar Comeamos organizando a mesa onde vamos trabalhar,
zerando a calculadora, abrindo o lote de documentos e pegando o primeiro documento
da pilha.
rotina-processar Enquanto houver documentos na pilha, para cada
documento vamos processando seus dados, contabilizando ocorrncias, acumulando
valores e por ltimo pegamos o prximo documento da pilha.
rotina-termino No final, aliviados pelo trmino do trabalho, fechamos o lote,
exibimos o resultado do processamento e avisamos que acabou.

Exemplo de processamento em lote (batch)

www.grandeporte.com.br

(11) 4427-4579 (11) 9 9903-3218

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

(11) 4427-4579 (11) 9 9903-3218

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

(11) 4427-4579 (11) 9 9903-3218

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

(11) 4427-4579 (11) 9 9903-3218

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

Abaixo temos um exemplo de ACCEPT da SYSIN:


----+-*A-1-B--+----2----+----3----+----4----+----5----+----6----+----7--|-+----8
ACCEPT QTDHRSTRAB
FROM SYSIN

Quando a opo FROM omitida o padro FROM SYSIN assumido.


Cada vez que o programa passa pela instruo ACCEPT, uma linha da SYSIN
do JCL carregada na varivel QTDHRSTRAB.
necessrio colocar no programa COBOL uma condio para parar de ler a
SYSIN. Observe no JCL acima que o ltimo nmero tudo zero. No programa a
SYSIN ser lida at que (UNTIL) se encontre o valor zero (0).
Essa tcnica chamada de SENTINELA, pois temos um valor previamente
combinado que indica o trmino da SYSIN. Se isso no for feito, o ACCEPT ler os
nmeros da SYSIN at acabar e depois repetir a leitura do ltimo nmero vria vezes,
at que o programa pare por TIME OUT, ou seja, acabar o tempo reservado para ele
executar.

www.grandeporte.com.br

(11) 4427-4579 (11) 9 9903-3218

15

Parte 1
DISPLAY

Exibe constantes e/ou variveis num dispositivo de sada. Normalmente o


dispositivo cujo DDNAME SYSOUT. Exemplo:
----+-*A-1-B--+----2----+----3----+----4----+----5----+----6----+----7--|-+----8
.......999-ERRO.
...........DISPLAY "*------------------------------------------*"
...........DISPLAY " MENSAGEM.....: " WS-MSG
...........DISPLAY " FILE STATUS..: " WS-FS
...........DISPLAY "*------------------------------------------*"
...........DISPLAY "
TERMINOxANORMALxDOxPROGRAMAx xxxxxxx"
...........DISPLAY "*------------------------------------------*"
...........STOP RUN
............

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

Deve haver um espao em branco antes e depois do operador aritmtico e


do operador de atribuio. Fique atento ao fato de que as expresses aritmticas
devem ser escritas em formato linear. Exemplo, a expresso aritmtica abaixo

=+

++

convertida para o formato linear fica

X = A + (B /(C + (D / (E + F))))

www.grandeporte.com.br

(11) 4427-4579 (11) 9 9903-3218

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

(11) 4427-4579 (11) 9 9903-3218

17

Parte 1

As constantes figurativas SPACES, HIGH-VALUES e LOW-VALUES s podem


ser movidas para variveis alfanumricas. A opo ALL move uma constante repetida
vezes at preencher a varivel receptora.
A constante figurativa ZERO, ZEROS ou ZEROES, pode ser movida para
variveis numricas e alfanumricas.
A tabela abaixo mostra quais tipos de variveis podem ter seu contedo
movido para outros tipos de variveis.

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

(11) 4427-4579 (11) 9 9903-3218

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

O comando DISPLAY exibe na SYSOUT as seguintes informaes:


*----------------------------------------------*
CONTEUDO VARIAVEL EMISSORA
*----------------------------------------------*
VE-ALFANUMERICO
1A2B3C4D5E
VE-NUMERICO-INTEIRO
0000000123
VE-NUMERICO-NAO-INTEIRO
0000012345
VE-NUMERICO-EDITADO
$
678,90+
VE-ALFANUMERICO-EDITADO
1A 2B 3C 4D 5E
VE-ALFABETICO
QWERTYUIOP

www.grandeporte.com.br

(11) 4427-4579 (11) 9 9903-3218

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

Os MOVES que produzem resultados errados, geram os seguintes contedos:


*----------------------------------------------*
RESULTADO DO MOVE DE ALFANUMERICO PARA OUTRAS
*----------------------------------------------*
VR-ALFANUMERICO
1A2B3C4D5E
VR-NUMERICO-INTEIRO
1A2B3C4D55
VR-NUMERICO-NAO-INTEIRO
2B3C4D5500
VR-NUMERICO-EDITADO
$22.334.455,00+
VR-ALFANUMERICO-EDITADO
1A 2B 3C 4D 5E
VR-ALFABETICO
1A2B3C4D5E

Mother of God!

www.grandeporte.com.br

(11) 4427-4579 (11) 9 9903-3218

20

Parte 1
Na compilao, as mensagens de erros para os MOVEs invlidos so:

"VE-NUMERICO-INTEIRO (NUMERIC INTEGER)" and "VR-ALFABETICO (ALPHABETIC)" did not


the "MOVE" statement compatibility rules. The statement was discarded.

follow

"VE-NUMERICO-NAO-INTEIRO (NUMERIC NON-INTEGER)" and "VR-ALFANUMERICO (ALPHANUMERIC)" did


not follow the "MOVE" statement compatibility rules. The statement was discarded.
"VE-NUMERICO-NAO-INTEIRO (NUMERIC NON-INTEGER)" and "VR-ALFANUMERICO-EDITADO
(ALPHANUMERIC-EDITED)" did not follow the "MOVE" statement compatibility rules.
statement was discarded.

The

"VE-NUMERICO-NAO-INTEIRO (NUMERIC NON-INTEGER)" and "VR-ALFABETICO (ALPHABETIC)" did not


follow the "MOVE" statement compatibility rules. The statement was discarded.
"VE-NUMERICO-EDITADO (NUMERIC-EDITED)" and "VR-ALFABETICO (ALPHABETIC)" did not follow
the "MOVE" statement compatibility rules. The statement was discarded.
"VE-ALFANUMERICO-EDITADO (ALPHANUMERIC-EDITED)" and "VR-NUMERICO-INTEIRO (NUMERIC
INTEGER)" did not follow the "MOVE" statement compatibility rules. The statement was
discarded.
"VE-ALFANUMERICO-EDITADO (ALPHANUMERIC-EDITED)" and "VR-NUMERICO-NAO-INTEIRO (NUMERIC
NON-INTEGER)" did not follow the "MOVE" statement compatibility rules. The statement
was discarded.
"VE-ALFANUMERICO-EDITADO (ALPHANUMERIC-EDITED)" and "VR-NUMERICO-EDITADO (NUMERICEDITED)" did not follow the "MOVE" statement compatibility rules. The statement was
discarded.
"VE-ALFABETICO (ALPHABETIC)" and "VR-NUMERICO-INTEIRO (NUMERIC INTEGER)" did not follow
the "MOVE" statement compatibility rules. The statement was discarded.
"VE-ALFABETICO (ALPHABETIC)" and "VR-NUMERICO-NAO-INTEIRO (NUMERIC NON-INTEGER)" did not
follow the "MOVE" statement compatibility rules. The statement was discarded.
"VE-ALFABETICO (ALPHABETIC)" and "VR-NUMERICO-EDITADO (NUMERIC-EDITED)" did not follow
the "MOVE" statement compatibility rules. The statement was discarded.

www.grandeporte.com.br

(11) 4427-4579 (11) 9 9903-3218

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

CONDIO As condies podem sem simples (apenas operador relacional)


ou complexas (expresses aritmticas, relacionais e lgicas). As tabelas abaixo
mostram os operadores relacionais, operadores lgicos e os testes de categoria.

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

(11) 4427-4579 (11) 9 9903-3218

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

(11) 4427-4579 (11) 9 9903-3218

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

PERFORM com a opo UNTIL


Executa o bloco de instrues de um pargrafo ou SECTION at que uma
determinada situao ocorra.
Se nada for informado, feito o teste da condio ANTES de executar o
pargrafo ou SECTION, mas possvel especificar se o teste deve ser feito antes ou
depois com a opo WITH TEST BEFORE ou WITH TEST AFTER, respectivamente.
Exemplos:
----+-*A-1-B--+----2----+----3----+----4----+----5----+----6----+----7--|-+----8
*
* POR DEFAULT, SERA VERIFICADO A CONDICAO PRIMEIRO E SE
* FOR VERDADEIRA, A ROTINA SERA EXECUTADA
*
PERFORM 030-PROCESSAR
UNTIL FS-VCADPRD = 10
*
*
*
*
*

COM A OPCAO WITH TEST BEFORE (DEFAULT)


O PERFORM FUNCIONA COMO O LACO DE REPETICAO
WHILE (ENQUANTO)
PERFORM 055-IMPRIME-TABUADA
WITH TEST BEFORE
UNTIL WS-CONTADOR > 10

*
*
*
*
*
*

COM A OPCAO WITH TEST AFTER (NAO DEFAULT)


O PERFORM FUNCIONA COMO O LACO DE REPETICAO
DO/WHILE (FACA/ENQUANTO), EXECUTANDO A ROTINA
PRIMEIRO E DEPOIS VERIFICANDO SE PODE EXECUTAR NOVAMENTE
PERFORM 080-CALCULA-JUROS
WITH TEST AFTER
UNTIL WS-MES > 12

www.grandeporte.com.br

(11) 4427-4579 (11) 9 9903-3218

24

Parte 1

Teoria

MACRO-FLUXO

a viso geral do algoritmo em relao aos arquivos de entrada e de sada. Os


smbolos utilizados em macro-fluxo e seu significado so mostrados abaixo:
Smbolo

ou

Significado

Arquivo sequencial em fita magntica

Arquivo sequencial em disco

Arquivo indexado em disco

Tabela de um banco de dados relacional

Relatrio (Arquivo para impresso)

Programa

SYSIN (System Input Entrada via JCL)

SYSOUT (System Output Sada via


SPOOL)

www.grandeporte.com.br

(11) 4427-4579 (11) 9 9903-3218

25

Parte 1

No Macro-Fluxo os arquivos de entrada (INPUT) ficam acima do programa, e


os de sada (OUTPUT) ficam abaixo. Um macro-fluxo d uma primeira idia do esforo
necessrio para desenvolver o algoritmo. Quanto maior a quantidade de arquivos que
o programa deve manipular, maior deve ser sua complexidade.
Um programa complexo no significa um programa difcil. O termo
complexidade aqui se refere a quantidade de instrues que o programa dever
executar para atingir seu objetivo.
Abaixo temos um exemplo de macro-fluxo onde o arquivo de vendas lido e
gravado um relatrio de comisses a pagar atravs do programa GeraComi.

vendas

Arquivo de entrada
(leitura) INPUT

GeraComi

Comissao

www.grandeporte.com.br

Arquivo de sada
(gravao) OUPUT

(11) 4427-4579 (11) 9 9903-3218

26

Parte 1

Practice

Atividade

Reviso aos pares

Responda as questes abaixo, depois pea para


que seu colega as corrija.

1) Dadas as sentenas abaixo, coloque V ou F entre os parnteses, caso a mesma


seja verdadeira ou falsa.
A. (

) O COBOL foi criado em 1959 pelo CODASYL, mas a primeira verso s saiu
em 1960 com o nome COBOL 60.

B. (

) Grace Hopper criou a linguagem FLOW-MATIC, que junto com a linguagem


CONTRAM de Bob Bemer, foram as principais linguagens que influenciaram o
COBOL.

C. (

) O COBOL uma linguagem de baixo nvel (prxima a linguagem de


mquina), parecida com o Assembly, de difcil aprendizagem e altamente
complexa.

D. (

) COBOL um acrnimo para Completely Over and Beyond Obvius Logic.

E. (

) No processamento BATCH, uma coleo de registros processada, sem a


interveno do usurio, at que todos os registros terminem ou um erro de
processamento ocorra.

F. (

) So exemplos de processamento Batch: Pagar uma conta de luz no caixa


eletrnico, consultar o saldo de uma conta corrente via internet, entrevistar um
candidato a uma vaga de emprego e escrever um e-mail solicitando a 2 via de
um boleto.

www.grandeporte.com.br

(11) 4427-4579 (11) 9 9903-3218

Parte 1
2) Coloque entre parnteses qual parte do processamento BATCH essas tarefas so
executadas:
a) rotina-inicializar

b) rotina-processar

c) rotina-termino

) Processamento dos campos numricos pelos operadores aritmticos


(+, -, *, / ou **)

) Abertura dos arquivos de entrada e sada

) Fechamento dos arquivos de entrada e sada

) Exibio de mensagem avisando do trmino normal de processamento

) Inicializao das variveis (Contadores e Acumuladores)

) Leitura do primeiro registro do arquivo de entrada

) Leitura do prximo registro do arquivo de entrada

3) Coloque V ou F se as aes abaixo caracterizam (verdadeiro) ou no (falso) um


processamento batch
(

) O professor corrigindo as avaliaes de uma turma

) Um contador registrando no livro fiscal as notas fiscais emitidas por uma


empresa no ms passado

) Pagar uma conta de telefone no caixa eletrnico de um banco

) Dar baixa no estoque de uma geladeira vendida na loja

) Separar do cadastro de clientes aqueles que no compram a mais de 30 dias

www.grandeporte.com.br

(11) 4427-4579 (11) 9 9903-3218

27

28

Parte 1

4) Marque com um X os comandos COBOL com erro de sintaxe ou de lgica,


sublinhando a parte errada.
a. (

) ACCEPT WS-HORASTRAB FROM SYSOUT

b. (

) DISPLAY PROCESSADO COM SUCESSO

c. (

) DISPLAY LIDOS = WS-CTLIDO

d. (

) DISPLAY ((2 * WS-LADO ** 2) ** 0,5)

e. (

) COMPUTE WS-DIAGONAL = ((2 * WS-LADO ** 2) ** 0,5)

f. (

) COMPUTE WS-SALARIO=WS-HORASTRAB*WS-SALARIOHORA

g. (

) MOVE 25 TO WS-SALARIO-A WS-SALARIO-B WS-SALARIO-C

h. (

) MOVE WS-SALARIO TO 25

i. (

) MOVE WS-LADO1 WS-LADO2 WS-LADO3 TO WS-TRIANGULO

j. (

) IF WS-QTDEST NOT < 1000

k. (

) IF WS-SALDO IS NUMERIC AND ALPHABETIC

l. (

) IF WS-SALDO IS

m. (

) IF WS-TIPOCONTA = CC OR CP OR CI

n. (

) PERFORM 010-INICIALIZAR 020-PROCESSAR 030-TERMINO

o. (

) PERFORM 055-CALCULO UNTIL WS-SENTINELA = 0

p. (

) PERFORM WITHOUT TEST 040-EXIBE-RESULTADO

POSITIVE OR NEGATIVE

www.grandeporte.com.br

(11) 4427-4579 (11) 9 9903-3218

Parte 1

Atividade

29

Flip chart

Em grupo de at 3 alunos, faa os Macro-fluxos solicitados,


compare com os de seus colegas e anote os corretos.

a)

O programa PGMFOPAG processa a folha de pagamento de uma empresa.


Ele ler o arquivo HORARIO (sequencial em disco) e a tabela TABFUNC
(tabela de um banco de dados) e gravar o arquivo FOLHAPAG (sequencial
em fita magntica) e imprimir o relatrio CHEQUES.

b) O programa ATUESTOK atualiza o estoque de uma empresa com base na


movimentao. Ler o arquivo CADANT (sequencial em disco) e o arquivo
MOVESTOK (sequencial em fita magntica) e gravar o arquivo CADATU
(sequencial em disco) e imprimir o relatrio RELOCORR.

www.grandeporte.com.br

(11) 4427-4579 (11) 9 9903-3218

30

Parte 1

Trabalhe em duplas

TEXTO COBOL

Converta a especificao do programa abaixo para


a PROCEDURE DIVISION do 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

(11) 4427-4579 (11) 9 9903-3218

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

(11) 4427-4579 (11) 9 9903-3218

31

32

Parte 1

Trabalhe em duplas

COBOL TEXTO

Converta o programa COBOL abaixo para 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

(11) 4427-4579 (11) 9 9903-3218

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

(11) 4427-4579 (11) 9 9903-3218

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

(11) 4427-4579 (11) 9 9903-3218

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

No final do processamento, exibir o seguinte resumo:


11234567892123456789312345678941234567895
12345678901234567890123456789012345678901234567890
**************************************************
TOTAL DE SIMULACOES LIDAS........: 9999
TOTAL DE SIMULACOES PROCESSADAS..: 9999
**************************************************

Bem como a frase:


11234567892123456789312345678941234567895
12345678901234567890123456789012345678901234567890
**************************************************
* TERMINO NORMAL DE PROCESSAMENTO DO GPXXNN01
*
**************************************************

www.grandeporte.com.br

(11) 4427-4579 (11) 9 9903-3218

36

Parte 1
Observao

O pargrafo principal chama os pargrafos inicializar, processar e trmino,


formando a seguinte hierarquia de pargrafos:

0000-PRINCIPAL

1000-INICIALIZAR

2000-PROCESSAR

1500-LER-SYSIN

1500-LER-SYSIN

3000-TERMINO

JOB de Execuo

O dados para realizao da simulao do emprstimo podem ser vistas na


SYSIN. Observe a ltima simulao com tudo zero (sentinela), que indicar ao
programa que no h mais simulaes para processar:

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

(11) 4427-4579 (11) 9 9903-3218

Parte 1

37

Orientao para processamento


Pargrafo Principal (0000-GPXXNN01)
Executa o pargrafo 1000-INICIALIZAR
Executa o pargrafo 2000-PROCESSAR
at que o registro lido na SYSIN seja o sentinela
Executar o pargrafo 3000-TERMINO
Encerrar o programa
Pargrafo 1000-INICIALIZAR
Mover zero para os contadores
contador de simulaes lidas
contador de simulaes processadas
Executar o pargrafo 1500-LER-SYSIN
Pargrafo 1500-LER-SYSIN
Ler um registro na SYSIN (ACCEPT)
Se o registro no for tudo zero
Somar 1 ao contador de Simulaes lidas
Pargrafo 2000-PROCESSAR
Calcular o valor da parcela do emprstimo
Calcular o valor da soma das parcelas
Exibir os dados na SYSOUT
Somar 1 ao contador de simulaes processadas
Executar o pargrafo 1500-LER-SYSIN
No pargrafo 3000-TERMINO fazer:
Exibir o resumo do processamento
Exibir frase de trmino normal
Com base nesta especificao de programa, escreva nas pginas seguintes a
PROCEDURE DIVISION do programa COBOL que atenda a necessidade do Banco
DOPOLVO S.A.

www.grandeporte.com.br

(11) 4427-4579 (11) 9 9903-3218

38

Parte 1

www.grandeporte.com.br

(11) 4427-4579 (11) 9 9903-3218

Parte 1

39

www.grandeporte.com.br

(11) 4427-4579 (11) 9 9903-3218

40

Parte 1

Avaliao

Ento...Como foi ?!?

Estou fera!

Fiz Certo!

Muito Bom

Bom

www.grandeporte.com.br

regular

ruim

Muito ruim

(11) 4427-4579 (11) 9 9903-3218

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

agora que voc fala !!

Antes de iniciarmos, vamos conversar sobre os tpicos apresentados na


capa desta parte. Isso importante para que seu instrutor e seus colegas
saibam como est seu conhecimento sobre o assunto e se voc precisa ou
pode fornecer ajuda aos colegas e instrutor.

O que voc j sabe ?


O que voc no sabe ?
Porque importante conhecer estes tpicos ?
Quais so os seus temores ?
O que voc considera difcil ?

Reflexo

aqui que voc se compromete !!

Depois de falar sobre o assunto com seus colegas e instrutor, escreva,


desenhe, rabisque, diga algo sobre o que voc vai fazer para dominar esses
tpicos. Comprometa-se!

www.grandeporte.com.br

(11) 4427-4579 (11) 9 9903-3218

Parte 2

Presentation

Histria

O acesso ao Mainframe

Vamos agora acessar o ambiente mainframe. Em geral, demora uma ou duas


semanas para que seja criado um usurio e senha para o estagirio acessar
mainframe, um processo burocrtico, onde o gerente do estagirio manda e-mail
para a rea de segurana (Security Office), justificando a necessidade do acesso, etc,
etc. Mas aqui na XPTO seu acesso ser imediato. Seu usurio e senha j esto
criados e voc poder acessar agora o ambiente.
Voc poder ter esse ambiente em sua casa. Todo estagirio da XPTO tem um
mainframe virtual chamado Hercules, que poder inclusive ser instalado em seu
notebook ou netpc.
Pratique bastante, pois a XPTO aprecia muito o estagirio que tem
desenvoltura com a interface baseada em caractere do mainframe.

www.grandeporte.com.br

(11) 4427-4579 (11) 9 9903-3218

Parte 2

Teoria

finalidade

O TSO (Time Sharing Option) um ambiente interativo que compartilha o


tempo do Mainframe com seus usurios, mas o usurio tem a impresso que o nico
a utilizar o Mainframe.
Uma vez conectado (login) ao TSO, o usurio pode excluir, visualizar,
submeter e acompanhar Jobs (servios), alocar, renomear, mover, copiar e excluir
arquivos, e tambm utilizar outros aplicativos do sistema operacional que rodam sob o
TSO como, por exemplo, RACF, HCD, SDSF, Control/M, Endevor etc. O TSO controla
todos estes aplicativos.
O nome Time Sharing Option deriva do fato que quando surgiu nos anos de
1960, tempo compartilhado (time-sharing) era considerada uma caracterstica
opcional, comparado com o padro de processamento em lotes (Batch) da poca.
Ento o TSO era oferecido como uma caracterstica opcional do Sistema Operacional
OS/MVT. Ele se tornou padro como parte do Sistema Operacional MVS em 1974.
TSO/E (E=extentions) uma srie de extenses ao TSO original e a mais usada
hoje em dia. Todos as verses atuais do Sistema Operacional, a famlia Z/OS, tem o
TSO e TSO/E instalados e comum cham-los apenas de TSO.

www.grandeporte.com.br

(11) 4427-4579 (11) 9 9903-3218

Parte 2

Teoria

Login e logoff

O acesso ao TSO feito por um Software de Telnet (tele network = rede


distncia). Usamos o Tn3270 plus, cujo cone est no desktop.
Um duplo-clique neste cone inicializa o programa, que tem este
aspecto:

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

(11) 4427-4579 (11) 9 9903-3218

Parte 2

Voc obter a seguinte tela:

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.

Informar o seu USERID (identificao do usurio) e pressione ENTER, ento


informe sua senha e pressione ENTER novamente. Quando aparecer os 3 asteriscos,
voc estar logado, pressione ENTER mais uma vez para ir ao menu principal do TSO.
Outra maneira de Logar no TSO digitar o comando L seguido do seu usurio, indo
direto para a tela de digitao da senha, exemplo:
L GPAZ99

Anote aqui o seu USERID:

USERID

www.grandeporte.com.br

(11) 4427-4579 (11) 9 9903-3218

Parte 2

Para sair do TSO pressionar X (EXIT) no menu principal ou PF3.


Se o painel Specify Disposition of Log Data Set aparecer, escolher a opo 2
Delete data set without printing para excluir o arquivo de LOG sem imprimi-lo. O LOG
registra todas as aes que o usurio executou durante a sesso do TSO. Isso bom
para a empresa investigar quem fez algo de errado. No nosso caso podemos excluir
sem imprimi-lo.

www.grandeporte.com.br

(11) 4427-4579 (11) 9 9903-3218

Parte 2

Quando aparecer READY, digitar LOGOFF e pressionar ENTER que a sesso


do TSO ser encerrada.

www.grandeporte.com.br

(11) 4427-4579 (11) 9 9903-3218

10

Parte 2

Atividade

Prtica de laboratrio

Com seu usurio e senha em mos, fazer o LOGIN


e o LOGOFF para se familiarizar com o procedimento.
Descubra como alterar sua senha (Password). Anote
o procedimento abaixo.

www.grandeporte.com.br

(11) 4427-4579 (11) 9 9903-3218

Parte 2

Teoria

11

Navega o por
menus e painis

O uso do TSO se d atravs de Menus, Painis ou Comandos. A Navegao


por menus a mais usual. Um Menu sempre composto de opes onde voc dever
escolher uma, e somente uma, opo. Um Menu pode levar a outro Menu ou a um
Painel. O Painel o ltimo estgio da navegao dentro do TSO. No painel voc
dever digitar os dados solicitados e pressionar ENTER, para que ao seja
executada.

www.grandeporte.com.br

(11) 4427-4579 (11) 9 9903-3218

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

(Help) Exibe ajuda contextualizada


(Split) Divide a Janela do TSO no Cursor
Voltar ou sair salvando
Repete o ltimo comando
Retrocede uma pgina
Avana uma pgina
Navega entre 2 janelas abertas com PF2
Desloca tela esquerda
Desloca tela direita
Cancela ao em curso ou sair sem salvar

www.grandeporte.com.br

Program Attention (PA)


PA1
PA2

Encerra um comando iniciado com


erro ou Esc pressionado por engano
no PC usar tecla Page Up
Desfaz o que foi digitado
No PC usar tecla Page Down

Outras Teclas
Tab
CLR

Salta o cursor para o prximo campo


Limpa a tela
no PC usar ESC ou Ctrl+C
Enter Executa a ao solicitada
Reset desbloqueia o teclado
no PC usar Ctrl esquerdo

(11) 4427-4579 (11) 9 9903-3218

13

Parte 2

Modificando as

Teoria

configura es

A partir do Menu principal do TSO, digitamos P para ir ao menu PDF e depois 0


para ir ao painel ISPF Setting. Tambm podemos abreviar a navegao e digitarmos
as duas opes de uma nica vez, separando-as por ponto (P.0) ou ponto-e-vrgula
(P;0).

No painel ISPF Setting vamos modificar a localizao da linha de comando,


que por default (padro) est localizado em baixo na tela, tirando a barra (/) do campo
Command line at bottom e pressionando ENTER. A linha de comando passa ento
para cima. Vamos desmarcar tambm a Tab to action bar choices, pois ao
pressionarmos a tecla HOME, o cursor posicionado na linha de comando e no na
primeira linha da tela.

www.grandeporte.com.br

(11) 4427-4579 (11) 9 9903-3218

14

Parte 2

www.grandeporte.com.br

(11) 4427-4579 (11) 9 9903-3218

Parte 2

15

Prtica de laboratrio

Atividade

Modifique as configuraes de sua sesso TSO/E,


conforme solicitadas abaixo. Anote o procedimento.

a) Posicionar a linha de comando na parte superior da tela.


(Command line at bottom).

b) Configure a tecla HOME para que, quando pressionada, posicionar o cursor na


linha de comando. (Tab to action bar choices).

www.grandeporte.com.br

(11) 4427-4579 (11) 9 9903-3218

16

Parte 2

Teoria

Aloca o de
data set (arquivo)

No ambiente de Grande Porte (Mainframe) os arquivos so chamados de


DATA SET (Conjunto de Dados). O nome de um arquivo deve seguir as seguintes
regras:
a) O nome do arquivo consiste em uma ou mais partes, chamadas
qualificadores. Eles so conectados por pontos.
b) Cada qualificador deve iniciar com um caractere alfabtico de A a Z ou
caracteres nacionais americanos @, # ou $.
c) O tamanho de cada qualificador no deve exceder 8 caracteres.
d) O tamanho mximo do nome de um arquivo 44 caracteres, incluindo os
pontos conectores.
de 1 a 8 caracteres

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

(11) 4427-4579 (11) 9 9903-3218

17

Parte 2

PO Partitioned Organization (Particionado) ou


PDS Partitioned Data Set
Um particionado um arquivo subdividido em
um pequeno e limitado nmero de arquivos virtuais
chamados membros. Para nossos propsitos, voc
pode considerar um membro como um arquivo,
cujos registros possuem um tamanho fixo,
usualmente de 80 caracteres. Os particionados
tambm so chamados de bibliotecas (Library), pois
lembram uma estante cheia de livros, que no caso
so os membros.
Ambos os arquivos (PS ou PO/PDS) podem ser blocados. Um arquivo
blocado permite que o equipamento que o l (unidade de disco ou fita), faa a leitura
de um grupo de registros de uma nica vez (bloco de registros), armazenando-os em
um buffer de memria e disponibilizando para a aplicao um registro por vez. Isso
agiliza a leitura, pois o acesso aos dados em disco ou fita mais lento por possurem
componentes mecnicos. Entre os registros (arquivo no blocado) ou entre os blocos
de registros (arquivo blocado) h um espao no gravado chamado IRG (Inter Record
Gap).

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

(11) 4427-4579 (11) 9 9903-3218

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.

No painel Data Set Utility deixamos o campo Option em branco e preenchemos


os campos Project, Group e Type com o nome do arquivo que desejamos consultar as
informaes (caractersticas do arquivo).
Um arquivo particionado (PDS Partitioned Data Set) possuem um nome de
arquivo com 3 nveis (qualificadores).

www.grandeporte.com.br

(11) 4427-4579 (11) 9 9903-3218

Parte 2

19

Vamos consultar as informaes do arquivo GP.GPAZ99.COBLIB.


Quando pressionamos ENTER, as informaes do arquivo aparecem no painel
Data Set Information.

Depois pressionamos PF3 para voltar ao painel Data Set Utility.


Aquelas informaes ficaram armazenadas na memria e sero utilizadas na
alocao do prximo arquivo.
Para alocarmos um novo arquivo colocamos no campo Option a opo A
(Allocate new data set) e nos campos Project, Group e Type o nome do arquivo que
desejamos alocar, por exemplo, GP.GPNE19.BOOKLIB e pressionamos ENTER.
As informaes consultadas anteriormente so automaticamente preenchidas
nos campos. Basta pressionar ENTER que o arquivo alocado e a mensagem data
set allocated aparece no canto superior direito da tela.

www.grandeporte.com.br

(11) 4427-4579 (11) 9 9903-3218

20

Parte 2

www.grandeporte.com.br

(11) 4427-4579 (11) 9 9903-3218

Parte 2

Atividade

21

Prtica de laboratrio

Faa a alocao dos seguintes arquivos (DATA


SET), substituindo XXNN pela identificao de seu
usurio. Utilize como base os arquivos de seu instrutor.

www.grandeporte.com.br

(11) 4427-4579 (11) 9 9903-3218

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

em qual disco (storage) o arquivo se encontra

2 Espao

quantas trilhas (56.664 bytes no modelo de disco 3390)

3 Atributos

dados armazenados no catlogo (VTOC volume table


of contents) que aponta a localizao fsica dos arquivos

4 Total

todas as informaes juntas

www.grandeporte.com.br

(11) 4427-4579 (11) 9 9903-3218

23

Parte 2

Depois de informado o Dsname Level e o Initial View, pressione ENTER e os


arquivos sero exibidos, conforme tela a seguir.

INITIAL VIEW 1

INITIAL VIEW 2

INITIAL VIEW 3

INITIAL VIEW 4

www.grandeporte.com.br

(11) 4427-4579 (11) 9 9903-3218

24

Parte 2

Atividade

Prtica de laboratrio

Visualize os DATA SET que voc alocou na


atividade anterior, alterando o valor do campo INITIAL
VIEW desde 1 at 4.

O que acontece, na visualizao dos arquivos, quando pressionamos PF10 ou


PF11 repetidas vezes?

www.grandeporte.com.br

(11) 4427-4579 (11) 9 9903-3218

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

(Edit) Editar arquivo / membros


(View) Visualizar arquivo / membros, no permite alteraes
(Browse) Exibe arquivo / membros, no permite alteraes
(Rename) Renomear arquivo / membros
(Delete) Excluir arquivo / membros
(Compress) Comprime arquivos particionados com 100% de uso
exibe menu com diversas aes. Digitar o nmero da ao desejada.
(Information) Exibe informaes sobre o Data Set
(Information Short) Exibe informaes reduzidas sobre o Data Set

Abaixo vamos editar os membros da GP.GPAZ99.JOBLIB.

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

(11) 4427-4579 (11) 9 9903-3218

26

Parte 2

A charge faz referncia ao Parallel Sysplex, onde possvel conectar at 32


mainframes, permitindo que todos trabalhem em conjunto para a execuo de uma
tarefa.

www.grandeporte.com.br

(11) 4427-4579 (11) 9 9903-3218

Parte 2

Atividade

27

Prtica de laboratrio

Execute os procedimentos solicitados nos Data


Sets alocados na atividade anterior, anotando como o
procedimento foi realizado:

A) Visualizar as informaes do DATA SET GP.GPXXNN.COBLIB.

B) Renomear o DATA SET GP.GPXXNN.DADOS.PESSOAIS para


GP.GPXXNN.PESSOAIS.

C) Excluir o DATA SET GP.GPXXNN.PESSOAIS.

www.grandeporte.com.br

(11) 4427-4579 (11) 9 9903-3218

28

Parte 2

Teoria

Edi o de membros

Para adicionar um membro em um particionado, utilizamos a opo P.2 para


abrir o painel Edit Entry Utility. Informamos nos campos Project, Group e Type o nome
do particionado e no campo member o nome do membro que desejamos criar e
pressionamos ENTER. Um membro vazio aberto no modo de edio e j podemos
digitar nossos textos.

www.grandeporte.com.br

(11) 4427-4579 (11) 9 9903-3218

Parte 2

29

Na linha Command podemos usar os seguintes comandos:


CANCEL
SAVE
RES
HI ON
HI ON COBOL
HI ON JCL
HI ON ASM
HEX ON
HEX OFF
NUM ON
NUM OFF
CAPS ON
CAPS OFF
RECOVERY ON
UNDO
F xxxx
C xxx yyy
C xxx yyy ALL
L 44
M + PF8
M + PF7
EXC aaa
EXC aaa ALL
PFSHOW OFF
PFSHOW ON
PROF
BOTTOM
TOP
START
LIST

sai da edio do membro sem salvar


salva o membro
restore apaga as mensagens exibidas pelo TSO
ativa as cores de acordo com o que est sendo digitado
ativa as cores para a linguagem COBOL
ativa as cores para a linguagem JCL
ativa as cores para a linguagem Assembly
exibe o arquivo em hexadecimal
desliga a exibio do arquivo em hexadecimal
enumera as linhas de 100 em 100 (o mesmo que RENUM)
enumera as linhas de 1 em 1
transforma tudo o que foi digitado em maisculo
desativa CAPS ON
apenas uma vez, habilita o UNDO (desfazer)
desfaz a ltima modificao no texto
find localiza a string xxxx no texto PF5 posiciona na prxima
change troca a primeira ocorrncia de xxx por yyy
change troca todas as ocorrncias de xxx por yyy
locate posiciona o cursor na linha 44
move Letra M e tecla PF8 Avana para o fim do texto
move Letra M e tecla PF7 Avana para o incio do texto
ocultar a linha com a string aaa.
ocultar todas as linhas com a string aaa.
no exibe o rodap, com as teclas de funo
exibe o rodap, com as teclas de funo
exibe o perfil do usurio (PROFILE) do usurio
avana para o fim do texto
avana para o incio do texto
Abre uma nova janela
Exibe um menu com as janelas abertas

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

paginao da tela inteira. Abreviadamente P.


paginao at a posio do cursor. Abreviadamente C.
paginao pelo nmero de linhas indicado

www.grandeporte.com.br

(11) 4427-4579 (11) 9 9903-3218

30

Parte 2

A melhor escolha para o SCROOL CSR, pois colocamos o cursos no linha


desejada e pressionamos PF8, avanando a tela, mas parando na posio do cursor.

Os comandos que podem ser utilizados na lateral esquerda da tela de edio


so:
I
D
R
M
C
LC
UC
X
S
TS
COLS
)
(

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.

Comandos para grupos de linhas (blocos de linhas)


MM
CC
DD
RR
))
((

marca o incio e o trmino do bloco que desejamos mover,


usar A ou B no destino
marca o incio e o trmino do bloco que desejamos copiar,
usar A ou B no destino
marca o incio e o trmino do bloco que desejamos excluir
marca o incio e o trmino do bloco que desejamos repetir
marca o incio e o trmino do bloco que desejamos deslocar para a direita.
marca o incio e o trmino do bloco que desejamos deslocar para a esquerda.

www.grandeporte.com.br

(11) 4427-4579 (11) 9 9903-3218

Parte 2

Atividade

31

Prtica de laboratrio

Crie o membro TESTE dentro do particionado


GP.GPXXNN.COBLIB e digite trechos do texto abaixo.

www.grandeporte.com.br

(11) 4427-4579 (11) 9 9903-3218

32

Parte 2

Teoria

cpia de membros

Podemos copiar membros de arquivos particionados. Basta informar a origem e


o destino do membro. A partir do menu principal digitamos P.3.3 para acessar o painel
Move/Copy Utility.
No campo option digitamos C para copiar. Abaixo da frase Specify "From" Data
Set below, then press ENTER key, digitamos nos campos Project, Group, Type e
Member o nome do particionado e do membro que desejamos copiar e pressionamos
ENTER.
Abaixo da frase Specify "To" Data Set Below, digitamos nos campos Project,
Group, Type o nome do particionado de destino do membro copiado. Se no
preenchermos o campo member, ele ser copiado com o mesmo nome, ou damos um
novo nome para o membro e pressionamos ENTER.
Uma mensagem aparece no canto superior direito indicando que a cpia foi
realizada com sucesso, como mostra as telas abaixo.

www.grandeporte.com.br

(11) 4427-4579 (11) 9 9903-3218

Parte 2

33

Prtica de laboratrio

Atividade

Execute os procedimentos abaixo e anote como foram


feitos:

A) Copie os membros ESKELETO e EEXXNN01 da COBLIB de seu instrutor para


seu PDS COBLIB. Anote o procedimento abaixo.

B) Mova o membro DICAS da COBLIB de seu instrutor para seu PDS COBLIB.
Anote o procedimento abaixo. O que ocorreu?

C) Copie os membros COMPCOB e CCXXNN01 da JOBLIB de seu instrutor para seu


PDS JOBLIB. Anote o procedimento abaixo.

D) Renomeie os membros (usando a opo P.3.4) EEXXNN01 de seu PDS COBLIB e


CCXXNN01 do seu PDS JOBLIB, trocando XXNN pelo prefixo de seu usurio, e
responda: Logo aps a alterao, o membro ficou com o nome alterado?
O que fazer para mostrar o nome alterado do membro?

www.grandeporte.com.br

(11) 4427-4579 (11) 9 9903-3218

34

Parte 2

Teoria

Compilando programa cobol

O programa COBOL chamado de Programa Fonte e est escrito em uma


linguagem de alto nvel, pois est mais prximo da linguagem humana, no caso ingls
estruturado. Um programa fonte no pode ser executado, porque o computador no
fala ingls. preciso convert-lo para uma sequncia de zeros (0) e uns(1)
(linguagem binria), facilmente reconhecida e executada pelo computador, chamado
de Mdulo de Carga (Load Module).
O processo de converter um programa fonte em mdulo de carga (Load
Module) chamado de Compilao. Na verdade ocorrem trs etapas, como mostra a
figura abaixo:
Programa Fonte
COBOL

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)

(11) 4427-4579 (11) 9 9903-3218

Parte 2

35

1 - Pr-Compilao O pr-compilador procura a instruo COPY seguida do


nome de um arquivo (membro) que ser inserido no fonte COBOL. Muitas rotinas j
prontas e o layout dos arquivos no so digitados, mas sim inseridos no fonte pela
instruo COPY. Isso feito antes de passar o programa fonte pela compilao.
2 - Compilao O compilador faz uma anlise sinttica, em busca de
palavras do COBOL escritas erroneamente, como por exemplo PERFORMI, no lugar
de PERFORM, ou END IF no lugar de END-IF. Depois feita uma anlise semntica
(de significado), onde os comandos incompletos so apontados como errados,
exemplo ADD 1 WS-CTLIDO, no lugar de ADD 1 TO WS-CTLIDO. Se tudo estiver
certo, ocorre a traduo para a linguagem da mquina, menos as instrues de I-O
(Input-Output), que so os comandos OPEN. CLOSE, READ, WRITE, REWRITE e
DELETE. Esses comandos so substitudos por chamadas (CALL) funes de I-O,
que esto em biblioteca externa.
3 - Linkage-Editor O linkeditor analisa os CALLs existentes no programa
compilado e acessa uma biblioteca de funes, buscando a funo chamada e
substituindo no ponto onde est o CALL. Assim o Mdulo de Carga (Load Module)
gerado e est pronto para uso.
Um log com o resultado do processo de Compilao e Linkedio gravado e
armazenado em uma fila (SPOOL Simultaneous Peripheral Operations Online), para
consulta posterior.
Normalmente chamamos de compilao a execuo dessas trs etapas. O
JOB de compilao que usaremos est abaixo:
11234567892123456789312345678941234567895123456789612345678971234567898
12345678901234567890123456789012345678901234567890123456789012345678901234567890
//GPXXNN01 JOB SEUNOME,MSGCLASS=X,CLASS=C,NOTIFY=&SYSUID,TIME=(0,20)
//*****************************************************************
//* JOB DE COMPILACAO PROGRAMA COBOL BATCH
//* TROCAR XXNN POR SEU USUARIO
//*****************************************************************
// JCLLIB
ORDER=GP.LB.PROCLIB
//COBCOMP EXEC DFHCOBOL,INSTR='GPXXNN',NOME='GPXXNN01'
//LKED.SYSIN
DD
*
NAME GPXXNN01(R)
/*

Esse JOB executa as trs etapas do processo de compilao. Os exerccios da


apostila tm o seguinte formato: GPXXNN01, onde:
GP
XX
NN
01

significa Grande Porte


a sigla que identifica seu instrutor
o nmero do aluno
o nmero do projeto

www.grandeporte.com.br

(11) 4427-4579 (11) 9 9903-3218

36

Parte 2

Para preparar o JOB de compilao para compilar, por exemplo, o projeto


GPAZ9901 devemos, no TSO, utilizar o comando C (CHANGE) da seguinte forma:
C XXNN AZ99 ALL
Com o comando SUB, submetemos esse JOB ao JES, que atribuir um
nmero ao JOB, chamado de Job Id. Esse nmero ser usado na identificao do JOB
na fila do JES.

Pressione ENTER de tempos em tempos, at aparecer uma notificao no topo


da tela, com o MAXCC obtido. Se tudo der certo, obteremos MAXCC = 0. Caso
contrrio, o MAXCC ser 4, 8 ou 12.

Quando obtemos MAXCC diferente de zero, o programa fonte COBOL est


com erro. Precisamos tirar os erros do programa e recompilar, at obter MAXCC=0.

www.grandeporte.com.br

(11) 4427-4579 (11) 9 9903-3218

37

Parte 2

Atividade

Prtica de laboratrio

Compile

programa

EEXXNN01.

Anote

procedimento abaixo. Qual foi o MAXCC de retorno?

www.grandeporte.com.br

(11) 4427-4579 (11) 9 9903-3218

38

Parte 2

Tirando erros detectados


Teoria

na compila o

A partir do Menu Principal do TSO escolhemos SD (SDSF-System Display and


Search Facility) e depois ST (Display status of jobs in the JES2 queues). Chegamos ao
SPOOL.

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

(11) 4427-4579 (11) 9 9903-3218

Parte 2

39

Utilize o comando F MESSAGE para localizar o incio das mensagens de erro


que ocorreram em seu programa fonte

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

(11) 4427-4579 (11) 9 9903-3218

da tela e
uma linha
erros e na
programa,

40

Parte 2

Atividade

Prtica de laboratrio

Encontre

elimine

os

erros

do

programa

EEXXNN01. Recompile at encontrar MAXCC=0. Anote o


procedimento abaixo.

www.grandeporte.com.br

(11) 4427-4579 (11) 9 9903-3218

Parte 2

Teoria

41

Executando cobol

Para executarmos um programa compilado (Load Module), montamos um JOB


de execuo. A seguir temos o Job de execuo do programa do exemplo. Observe a
SYSIN, que ser lida com o comando ACCEPT do COBOL.
Depois de executar com sucesso, digite SD.ST a partir do menu principal do
TSO, coloque um S ao lado da SYSOUT para abri-la. No programa fonte COBOL, o
resultado do comando DISPLAY aparece na SYSOUT.

No exemplo, a finalidade do exerccio o calcular o salrio de funcionrios, que


ganham lidos da SYSIN na SYSOUT.

www.grandeporte.com.br

(11) 4427-4579 (11) 9 9903-3218

42

Parte 2
ALGUMAS DICAS

Dica 1) Na opo SD.ST, possvel abrir o JOB submetido digitando SJ no


lado esquerdo do JOBNAME. SJ a sigla para submit job.

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

(11) 4427-4579 (11) 9 9903-3218

Parte 2

43

www.grandeporte.com.br

(11) 4427-4579 (11) 9 9903-3218

44

Parte 2

Atividade

Prtica de laboratrio

Execute o programa EEXXNN01 utilizando o job


CCXXNN01 e compare seus resultados com os dos
outros colegas. Anote o procedimento abaixo.

www.grandeporte.com.br

(11) 4427-4579 (11) 9 9903-3218

Parte 2

45

Practice

Reviso aos pares

Atividade

Responda as questes abaixo, depois pea para


que seu colega as corrija.

1) Coloque as letras, que representam a navegao pelos menus do TSO nos


parnteses que indicam o nome do painel correspondente.
A P.0
B P.3.2
C P.3.3
D P.3.4
E SD.ST
F P.2

(
(
(
(
(
(

) SDSF STATUS DISPLAY ALL CLASSES


) ISPF Settings
) Data Set List Utility
) Edit Entry Panel
) Data Set Utility
) Move/Copy Utility

2) Associe os comandos utilizados durante a edio de um membro com a sua ao.


A
B
C
D
E
F
G
H
I
J
K
L
M
N

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

(
(
(
(
(
(
(
(
(
(
(
(
(
(

) ativa as cores para a linguagem COBOL


) posiciona o cursor na linha informada
) Localiza uma string no membro
) apaga as mensagens exibidas pelo TSO
) sai da edio do membro sem salvar
) enumera as linhas de 1 em 1
) habilita o UNDO (desfazer)
) salva o membro
) transforma tudo o que for digitado em maisculo
) substitui todas as ocorrncia da string1 por string2
) substitui 1 ocorrncia da string1 por string2
) desfaz a ltima modificao no texto
) Avana para o fim do texto
) Avana para o incio do texto

www.grandeporte.com.br

(11) 4427-4579 (11) 9 9903-3218

46

Parte 2

3) Com base no texto abaixo, localize as palavras em vermelho no caa-palavras.

O processo de COMPILACAO transforma um programa FONTE escrito


em uma linguagem de alto nvel, como o COBOL, em um mdulo de CARGA
que a linguagem da MAQUINA (binrio). No Mainframe, esse processo
ocorre em trs etapas, a pr-compilacao, que faz a insero de BOOK com o
comando COPY, a compilao, que faz anlise SINTATICA e SEMANTICA no
fonte, indicando as rotinas de I-O com CALL e a LINKEDICAO, que substitui
esses CALLs pelas respectivas funes de I-O.

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

(11) 4427-4579 (11) 9 9903-3218

Parte 2

Dinmica

47

Pense rpido !

Neste bate-bola, fale o nome de um colega, faa


uma pergunta e jogue a bola para ele. Quem recebe a
bola, responde a pergunta e repete o jogo.
Anote as respostas mais criativas!

SD.ST
P.2

Menu / Painel

www.grandeporte.com.br

(11) 4427-4579 (11) 9 9903-3218

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

programa com diversas tabelas de abends


arquivo de Help tambm com tabelas de abends
manual de instalao passo a passo do ambiente
arquivo com o ambiente mainframe compactado

Sero necessrios aproximadamente 22 GB livres em seu HD para essa


instalao.

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.

O Hercules um emulador de computador que permite que softwares


projetados para computadores mainframe IBM (System/370, System/390, zSeries e
System z) e para mainframes plug-compatvel (como mquinas de Amdahl) funcionem
em outros tipos de computadores, como os computadores pessoais por exemplo.

www.grandeporte.com.br

(11) 4427-4579 (11) 9 9903-3218

Parte 2

49

Embora existam outros emuladores de mainframe que desempenhem uma


funo semelhante, o Hercules considerado o melhor de sua categoria. O Hercules
executado em vrios sistemas operacionais, incluindo Linux, Windows, FreeBSD,
Solaris e Mac OS X e liberado sob a licena open source software QPL.
O Hercules foi o primeiro emulador de mainframe a incorporar 64 bits
z/Architecture suporte, superando as ofertas comerciais. Roger Bowler, programador
de sistemas mainframe, iniciou o desenvolvimento do emulador Hercules em 1999.
Jay Maynard atualmente mantm e hospeda o projeto.
Para mais informaes consulte www.hercules-390.org

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

(11) 4427-4579 (11) 9 9903-3218

50

Parte 2

Avaliao

Ento...Como foi ?!?

Estou fera!

Fiz Certo!

Muito Bom

Bom

www.grandeporte.com.br

regular

ruim

Muito ruim

(11) 4427-4579 (11) 9 9903-3218

Parte

Teste de Turing - Um computador pode ser chamado


"inteligente" se conseguir enganar uma pessoa fazendo-se
passar por um ser humano.
O logo da Apple atribudo erroneamente como um
tributo a Alan Turing, com a marca de mordida fazendo
referencia ao seu mtodo de suicdio.
Alan Turing
1912 1954

Verso 2.3.5

Parte 3

Preparation

3
Trocando Ideias

agora que voc fala !!

Antes de iniciarmos, vamos conversar sobre os tpicos apresentados na


capa desta parte. Isso importante para que seu instrutor e seus colegas
saibam como est seu conhecimento sobre o assunto e se voc precisa ou
pode fornecer ajuda aos colegas e instrutor.

O que voc j sabe ?


O que voc no sabe ?
Porque importante conhecer estes tpicos ?
Quais so os seus temores ?
O que voc considera difcil ?

Reflexo

aqui que voc se compromete !!

Depois de falar sobre o assunto com seus colegas e instrutor, escreva,


desenhe, rabisque, diga algo sobre o que voc vai fazer para dominar esses
tpicos. Comprometa-se!

www.grandeporte.com.br

(11) 4427-4579 (11) 9 9903-3218

Parte 3

Presentation

Histria

Ficando ntimo do cobol

Continuando com seu programa de treinamento,


vamos agora ficar mais ntimos do COBOL. Vamos
conhecer os comandos bsicos, necessrios para o
processamento batch.
Esses comandos devem ter seu significado e
sintaxe dominados pelos estagirios. Voc deve sablos na ponta da lngua.
Tambm
aprenderemos
um
pouco
de
matemtica, onde os sistemas de numerao decimal,
binrio e hexadecimal sero usados para representar
os nmeros armazenados em diversos tipos de
variveis do COBOL.
Voc ficar maravilhado com a grande
quantidade de programas que j so possveis de se
fazer com o conhecimento que voc vai adquirir nesta
parte do treinamento.
Boas prticas de programao tambm sero
exigidas e seus programas devem segui-las. No basta
fazer o programa funcionar, ele tambm deve ser
esteticamente bonito, de fcil leitura e compreenso.
Fazer um programa fcil, o difcil dar manuteno.
Escreva seus programas pensando no prximo.

www.grandeporte.com.br

(11) 4427-4579 (11) 9 9903-3218

Parte 3

Teoria

Formato do programa
fonte cobol

A linguagem COBOL possui algumas regras a serem seguidas quanto a


formatao do programa fonte. Uma linha de programa COBOL pode ter at 80
caracteres, conforme o formato abaixo:
12345678911234567892123456789312345678941234567895123456789612345678971234567898
12345678901234567890123456789012345678901234567890123456789012345678901234567890
NNNNNNCAAAABBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBNNNNNNNN
----+-*A-1-B--+----2----+----3----+----4----+----5----+----6----+----7--|-+----8

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

rea de indicao (Coluna 7)


(-) Hfen Indica que existe uma constante alfanumrica entre aspas ou
apstrofe, que foi iniciada na linha anterior. Uma constante alfanumrica que no cabe
em uma linha, para que seja continuada, precisa ter na prxima linha a indicao da
continuao (hfen na coluna 7) e, em qualquer coluna a partir da 12 (margem B), um
apstrofe (ou aspas) indicando o incio da continuao. Exemplo:
----+-*A-1-B--+----2----+----3----+----4----+----5----+----6----+----7--|-+----8
XXXXXXXXXXXDISPLAYXAXLINGUAGEMXDEXPROGRAMACAOXCOBOLXEHXMUITOXUTILIZADA
XXXXXX-XXXXXXXXXXXXEMXEMPRESASXDEXGRANDEXPORTEXDEVIDOXAXSUAXGRANDEXCAPA
XXXXXX-XXXXXXXXXXXXCIDADEXDEXPROCESSAMENTOXEXCONFIABILIDADE

(*) 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.

Linhas em branco com * na coluna 7, so tratadas mais rapidamente pelo


compilador COBOL, pois so ignoradas logo no incio da compilao.

www.grandeporte.com.br

(11) 4427-4579 (11) 9 9903-3218

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

(11) 4427-4579 (11) 9 9903-3218

Parte 3

Folha de codificao COBOL


um formulrio para escrever o programa fonte COBOL, da poca em que o
programa precisava ser perfurado em cartes. Podem-se ver claramente as colunas e
as margens A e B.

www.grandeporte.com.br

(11) 4427-4579 (11) 9 9903-3218

Parte 3

Teoria

As 4 divises

De maneira semelhante a um livro com seus captulos, pargrafos e itens, um


programa COBOL formado por uma hierarquia de diviso (DIVISION), seo
(SECTION), pargrafo e instrues. Uma regra importante em COBOL que todo
nome de Diviso, Seo e Pargrafo deve ser terminada por ponto final (.). O cdigo
COBOL possui quatro divises que devem ser utilizadas nesta ordem:
----+-*A-1-B--+----2----+----3----+----4----+----5----+----6----+----7--|-+----8
.......IDENTIFICATION DIVISION.
.......ENVIRONMENT DIVISION.
.......DATA DIVISION.
.......PROCEDURE DIVISION.

Por questes de esttica e melhor visualizao, costuma-se digitar essas


divises da seguinte forma, com DIVISION na coluna 44:
----+-*A-1-B--+----2----+----3----+----4----+----5----+----6----+----7--|-+----8
......*----------------------------------------------------------------*
.......IDENTIFICATION..................
DIVISION.
......*----------------------------------------------------------------*
......*----------------------------------------------------------------*
.......ENVIRONMENT.....................
DIVISION.
......*----------------------------------------------------------------*
......*----------------------------------------------------------------*
.......DATA............................
DIVISION.
......*----------------------------------------------------------------*
......*----------------------------------------------------------------*
.......PROCEDURE.......................
DIVISION.
......*----------------------------------------------------------------*

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.

Todos os pargrafos que possuem a palavra COMENTARIO, no possuem


efeito. So parmetros opcionais para documentao do programa. Observe a
utilizao do ponto final (.) no programa fonte COBOL. Nenhum destes pontos pode
ser omitido para no causar erro de compilao.

www.grandeporte.com.br

(11) 4427-4579 (11) 9 9903-3218

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.

nome do computador de desenvolvimento (opcional).

OBJECT-COMPUTER.

nome do computador de produo (opcional).

SPECIAL-NAMES.

tem valores pr-definidos em COBOL, para especificar


alfabeto, moeda, ou separador de decimal (vrgula ou
ponto), mas todos os valores so opcionais. O separador
de decimais usado mais frequentemente (DECIMALPOINT IS COMMA.). Esta instruo informa que a vrgula
(COMMA) ser usada como separador de decimais.

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

(11) 4427-4579 (11) 9 9903-3218

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) 4427-4579 (11) 9 9903-3218

11

Parte 3
WORKING-STORAGE SECTION.

NA WORKING-STORAGE SECTION so definidas todas as variveis que o


programa precisa para seu completo funcionamento. No h pargrafos nesta
SECTION, e as variveis podem ser definidas como grupos hierrquicos (nveis 01 a
49), ou variveis independentes (nvel 77) em qualquer ordem, desde que no se crie
um nvel 77 no meio de uma hierarquia. Exemplo:
----+-*A-1-B--+----2----+----3----+----4----+----5----+----6----+----7--|-+----8
*----------------------------------------------------------------*
WORKING-STORAGE
SECTION.1
*----------------------------------------------------------------*
* EXEMPLO DE VARIAVEIS INDEPENDENTES
*----------------------------------------------------------------*
77 WS-CONTADOR
PIC 9(05) VALUE 0.
77 WS-MSG
PIC X(60) VALUE SPACE.
77 WS-NOME
PIC A(40).
*----------------------------------------------------------------*
* EXEMPLO DE VARIAVEIS DE GRUPO
*----------------------------------------------------------------*
01 WS-DATA-SISTEMA.
05 WS-ANO
PIC 9(02).
05 WS-MES
PIC 9(02).
05 WS-DIA
PIC 9(02).
01 WS-DATA-FORMATADA.
05 WS-DIA
PIC 9(02).
05 FILLER
PIC X(01) VALUE /.
05 WS-MES
PIC 9(02).
05 FILLER
PIC X(03) VALUE /20.
05 WS-ANO
PIC 9(02).
*----------------------------------------------------------------*
* EXEMPLO DE VARIAVEIS DE GRUPO COM VARIOS NIVEIS
*----------------------------------------------------------------*
01 WS-CLIENTE.
05 WS-CODCLI
PIC X(04).
05 WS-NOMECLI.
10 WS-PRIMEIRO-NOME
PIC X(15).
10 WS-SOBRENOME
PIC X(30).
05 WS-ENDERECO.
10 WS-LOGRADOURO.
15 WS-TIPO-LOGRADOURO
PIC X(10).
15 WS-NOME-LOGRADOURO
PIC X(30).
10 WS-NUMERO
PIC 9(05).
10 WS-COMPLEMENTO
PIC X(15).
10 WS-BAIRRO
PIC X(25).
10 WS-CIDADE
PIC X(25).
10 WS-UF
PIC X(02).
05 WS-TELEFONECLI.
10 WS-COD-PAIS
PIC 9(03).
10 WS-COD-REGIAO
PIC 9(02).
10 WS-NUM-TELEFONE
PIC 9(08).

A figura abaixo ilustra a hierarquia dos nveis.


01

05

05
10

05
10

10

10

10

10

15 15 15 15 15 15 15 15

Usamos FILLER para definir constantes dentro de uma varivel ou para no


nomear partes da varivel que no ser tratada pelo programa COBOL. A palavra
FILLER opcional.

www.grandeporte.com.br

(11) 4427-4579 (11) 9 9903-3218

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

Neste exemplo, a varivel WS-DATA-SISTEMA formada pelas seguintes


variveis WS-DIA, WS-MES e WS-ANO. Em COBOL, os nveis de 01 a 49 podem ser
usados para especificar estas hierarquias, onde um valor maior significa dependncia.
O exemplo acima acrescido dos nveis seria:
----+-*A-1-B--+----2----+----3----+----4----+----5----+----6----+----7--|-+----8
XXXXXXX01 WS-DATA-SISTEMA.
XXXXXXXXXXX05 WS-ANO
PIC 9(02).
XXXXXXXXXXX05 WS-MES
PIC 9(02).
XXXXXXXXXXX05 WS-DIA
PIC 9(02).

Os nveis de 50 a 99 tem uso especfico, reservado para futuras expanses do


COBOL. Atualmente usam-se dois nveis nesta faixa:
Nvel 77 usado quando a varivel no tem hierarquia (independente).
Nvel 88 usado para nomes condicionais.
----+-*A-1-B--+----2----+----3----+----4----+----5----+----6----+----7--|-+----8
XXXXXXX01 WS-FIM-ARQUIVO
PIC X(01).
XXXXXXXXXXX88 SIM
VALUE S.
XXXXXXXXXXX88 NAO
VALUE N.

De todos estes nveis, somente o nvel 01 e o nvel 77 podem ser codificados


na margem A do fonte COBOL (coluna 8), observe que o nome da varivel deve ficar
na margem B. Todos os outros nveis devem ser codificados na margem B (coluna 12).
O COBOL exige tambm que toda a hierarquia de um grupo de itens comece
com um item de nvel 01. A partir dele, cada nvel subordinado deve ter o mesmo
nmero, por exemplo, se para o segundo nvel for escolhido o nmero 05 todos os
itens do segundo nvel devem ter nvel 05, e se para o terceiro nvel for escolhido o
nmero 10, todos os itens do terceiro nvel devem ser especificado com o nvel 10.

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

(11) 4427-4579 (11) 9 9903-3218

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

A varivel alfabtica (letras e espao)


A varivel numrica (nmeros)
A varivel alfanumrica (letras, nmeros e outros caracteres)

A quantidade de caracteres contidos na varivel especificada no formato


repetindo-se as letras acima. Por exemplo, se a varivel WS-CONTADOR tem 5
algarismos, seu formato ser:
xxxxxxx77

WS-CONTADOR

PIC 99999.

Pode-se abreviar esta repetio colocando o nmero de repeties entre


parnteses:
77

WS-CONTADOR

PIC 9(05).

Quando uma varivel numrica tiver casas decimais, no se carrega na


memria do computador o separador decimal (vrgula).
Se a varivel WS-VALOR-PROD tiver, por exemplo, o valor de 2,35, seu valor
fica na memria como 0000235. Mas o programa COBOL precisa saber em que
posio estava a vrgula que desapareceu (vrgula implcita). A vrgula implcita
definida no formato pela letra V (virtual), como abaixo:
77

WS-VALOR-PROD

PIC 99999V99.

77

WS-VALOR-PROD

PIC 9(05)V99.

77

WS-VALOR-PROD

PIC 9(05)V9(02).

ou
ou

Em um grupo de variveis contidos em uma hierarquia (com nveis de 01 a 49)


s podem ter a clusula PIC as variveis no nvel mais baixo da hierarquia (variveis
elementares). Exemplo:
----+-*A-1-B--+----2----+----3----+----4----+----5----+----6----+----7--|-+----8
01 WS-DATA-SISTEMA.
05 WS-ANO
PIC 9(02).
05 WS-MES
PIC 9(02).
05 WS-DIA
PIC 9(02).

Alinhamento de dado Alfanumrico (JUSTIFIED ou JUST)


Por default um dado alfanumrico alinhado esquerda, mas para alinh-lo a
direita preciso informar essa inteno com a clusula JUSTIFIED. Exemplo:
----+-*A-1-B--+----2----+----3----+----4----+----5----+----6----+----7--|-+----8
77 WS-TEXTO1
PIC X(30) JUSTIFIED RIGHT.
77 WS-TEXTO2
PIC X(30) JUST RIGHT.

No existe JUSTIFIED LEFT.

www.grandeporte.com.br

(11) 4427-4579 (11) 9 9903-3218

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.

As constantes alfanumricas devem ser colocadas entre apstrofes () ou


aspas (). Exemplo:
----+-*A-1-B--+----2----+----3----+----4----+----5----+----6----+----7--|-+----8
77 WS-NOME-ALUNO
PIC A(30)
VALUE
GRACE MURRAY HOPPER.

No se pode misturar em uma cadeia de caracteres (string) o uso de


apstrofes com aspas, ou seja, se uma string comeou a ser escrito com apstrofes,
deve terminar com apstrofes.
As constantes alfanumricas em COBOL podem ter no mximo 160 caracteres.
Podem-se usar ainda como valor-inicial as CONSTANTES FIGURATIVAS, que
so valores pr-definidos no COBOL, so elas:
ZERO
ZEROS
ZEROES

A varivel numrica ser preenchido com 0 (zero).

SPACE
SPACES

A varivel alfabtica ou alfanumrica ser preenchido com


espaos.

LOW-VALUE
LOW-VALUES

(menor valor) A varivel alfanumrica ser preenchida com bits 0


(primeiro caractere da tabela EBCDIC)

HIGH-VALUE
HIGH-VALUES

(maior valor) A varivel alfanumrica ser preenchida com bits 1


(ltimo caractere da tabela EBCDIC)

QUOTE
QUOTES

Insere um apstrofe no lugar indicado

Quando desejamos preencher toda a varivel com um determinado contedo,


usamos ALL, por exemplo:
----+-*A-1-B--+----2----+----3----+----4----+----5----+----6----+----7--|-+----8
77 WS-TRACO1 PIC X(80) VALUE ALL -.
77 WS-TRACO2 PIC X(80) VALUE ALL X-.
77 WS-TRACO3 PIC X(80) VALUE ALL *-#-.

www.grandeporte.com.br

(11) 4427-4579 (11) 9 9903-3218

15

Parte 3
LINKAGE SECTION.

A LINKAGE SECTION a seo onde declaramos as variveis usadas para


receber dados do parmetro PARM do JCL ou do programa PRINCIPAL, atravs da
instruo CALL com USING.
----+-*A-1-B--+----2----+----3----+----4----+----5----+----6----+----7--|-+----8
*----------------------------------------------------------------*
* RECEBENDO DADOS VIA PARM DO JCL
*----------------------------------------------------------------*
LINKAGE
SECTION.
*----------------------------------------------------------------*
01 LS-PARAMETRO-RECEBIDO.
05 LS-TAMANHO-DO-PARAMETRO
PIC S9(4) COMP.
05 LS-DADOS-RECEBIDOS.
10 LS-DATA-RELATORIO
PIC X(08).
*----------------------------------------------------------------*
PROCEDURE DIVISION USING LS-PARAMETRO-RECEBIDO.
*----------------------------------------------------------------*

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

Abaixo temos outro exemplo, onde o programa PRINCIPAL passa ao programa


SUB-PROGRAMA o contedo da varivel WS-NOME.

PROGRAMA PRINCIPAL

SUB-PROGRAMA

www.grandeporte.com.br

(11) 4427-4579 (11) 9 9903-3218

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

(11) 4427-4579 (11) 9 9903-3218

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

E o segundo bloco fosse:


A = (B * C ) ** 5
C = A / 0.015

E a especificao fosse feita sem 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

(11) 4427-4579 (11) 9 9903-3218

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

A vantagem fica muito mais evidente quando houver IFs encadeados :


----+-*A-1-B--+----2----+----3----+----4----+----5----+----6----+----7--|-+----8
IF A > B
IF B > C
COMPUTE A = (B * C ) ** 4
COMPUTE C = A / 0.005
ELSE
COMPUTE A = (B * C ) ** 8
COMPUTE C =7 A / 0.055
END-IF
ELSE
IF A > C
COMPUTE A = (B * C ) ** 5
COMPUTE C = A / 0.007
ELSE
COMPUTE A = (B * C ) ** 9
COMPUTE C = A / 0.007
END-IF
END-IF
----+-*A-1-B--+----2----+----3----+----4----+----5----+----6----+----7--|-+----8
IF A > B
IF B > C
COMPUTE A = (B * C ) ** 4
COMPUTE C = A / 0.005
ELSE
COMPUTE A = (B * C ) ** 8
COMPUTE C = A / 0.055
END-IF
ELSE
IF A > C
COMPUTE A = (B * C ) ** 5
COMPUTE C = A / 0.007
ELSE
COMPUTE A = (B * C ) ** 9
COMPUTE C = A / 0.007
END-IF
END-IF

www.grandeporte.com.br

(11) 4427-4579 (11) 9 9903-3218

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.

No seguir a prtica de programao do uso das colunas 44 e 52 no causar


erro de compilao ou mesmo de lgica no programa, mas se h um padro melhor
segui-lo.

Evitar Hard Coding


Hard Coding o uso de constantes no programa fonte. Quando a mesma
constante utilizada em diversos pontos do programa e houver a necessidade de
alter-la, ser necessrio faz-lo em todos os pontos onde essa constante ocorrer e,
neste caso, pode acontecer de alguma no ser alterada o que pode ocasionar erro de
lgica no programa, da a importncia e evitar o Hard Coding.
Exemplo de Constantes Alfanumricas:
----+-*A-1-B--+----2----+----3----+----4----+----5----+----6----+----7--|-+----8
MOVE ERRO ABERTURA ARQUIVO CADCLI
TO WS-MSG-ERRO
MOVE CONTATE O ANALISTA RESPONSAVEL
TO WS-AVISO

A soluo declarar variveis para as mensagens e inicializ-las com o texto.


----+-*A-1-B--+----2----+----3----+----4----+----5----+----6----+----7--|-+----8
WORKING-STORAGE
SECTION.
77 WS-MSG01
PIC X(30)
VALUE
ERRO ABERTURA ARQUIVO CADCLI.
77 WS-MSG02
PIC X(30)
VALUE
CONTATE O ANALISTA RESPONSAVEL.
*----------------------------------------------------------------*
PROCEDURE
DIVISION.
*----------------------------------------------------------------*
MOVE WS-MSG01
MOVE WS-MSG02

www.grandeporte.com.br

TO WS-MSG-ERRO
TO WS-AVISO

(11) 4427-4579 (11) 9 9903-3218

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

A nica constante numrica importante nos clculos acima o valor de PI


3.14159, cuja preciso est na quantidade de casas decimais usadas e que pode
sofrer alteraes se houver a necessidade de modificar a preciso dos clculos. As
outras constantes numricas no so importantes e nunca tero seus valores
alterados. A soluo para o Hard-Code acima :
----+-*A-1-B--+----2----+----3----+----4----+----5----+----6----+----7--|-+----8
WORKING-STORAGE
SECTION.
77 WS-PI
PIC 9(1)V9(05)
VALUE 3.14159.
*----------------------------------------------------------------*
PROCEDURE
DIVISION.
*----------------------------------------------------------------*
* PRECISOU SUBSTITUIR 3.14159 POR WS-PI HARD CODING RESOLVIDO
*----------------------------------------------------------------*
COMPUTE WS-AREA = WS-PI * WS-RAIO ** 2
*----------------------------------------------------------------*
* NAO HAVIA HARD CODE PARA RESOLVER 1 E 100 NUNCA MUDARAO
*----------------------------------------------------------------*
COMPUTE WS-LUCRO = ((WS-P-VENDA / WS-P-COMPRA) 1) * 100

O Termo Hard Coding foi cunhado em 1990 por Rich


Galichon, na poca um analista/programador na Mobil (Empresa
Petrolfera). O termo foi usado como uma referncia aos circuitos
eletrnicos que uma vez feitos, no podem ser alterados. A idia
era mostrar a inflexibilidade que resultava do uso de dados
inseridos diretamente no cdigo fonte, ao invs de obt-los na
entrada, via teclado ou leitura de arquivo.

www.grandeporte.com.br

(11) 4427-4579 (11) 9 9903-3218

Parte 3

21

Medida de informaco
,

Teoria

Muitas vezes criamos variveis que so usadas durante o processamento do


programa, mas que no so usadas para exibir resultados. Isso acontece porque
existem variveis que ocupam menos espao na memria, mas no so apropriadas
para exibir dados, e vice-versa. Ento, as variveis so criadas de acordo com a
necessidade visando melhor desempenho e usabilidade do sistema.
Todo dado ocupa espao na Memria do computador. Esse espao medido
em BYTEs, que significa BYNARY TERM (termo Binrio). Um BYTE formado por
oito BITs, que significa BINARY DIGIT (digito Binrio). Um grupo de 4 bits chamado
NIBBLE.

BIT

NIBBLE
BYTE

www.grandeporte.com.br

(11) 4427-4579 (11) 9 9903-3218

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

Valor (quantidade de bytes)


1003 = 1.000

este k deve ser minsculo

06

Megabyte

MB

10 = 1. 000. 000

Gigabyte

GB

1009 = 1. 000. 000. 000

Terabyte

TB

1012 = 1. 000. 000. 000. 000

Petabyte

PB

1015 = 1. 000. 000. 000. 000. 000

Exabyte

EB

1018 = 1. 000. 000. 000. 000. 000. 000

Zettabyte

ZB

1021 = 1. 000. 000. 000. 000. 000. 000. 000

Yottabyte

YB

1024 = 1. 000. 000. 000. 000. 000. 000. 000. 000

Nome IEC Smbolo IEC Valor (quantidade de bytes)

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

280 = 1.208.925.819.614.629.174.706.176 Yottabyte

www.grandeporte.com.br

(11) 4427-4579 (11) 9 9903-3218

23

Parte 3

Os fabricantes de HD (Hard Disk Disco Rgido), memria e mdias pticas


(CD-ROM, DVD-ROM, Bluray) utilizam o SI (potncia de 10), enquanto que os
fabricantes de sistemas operacionais (Microsoft, IBM, Apple, Sun) utilizam o IEC
(potncia de 2).

3
NOOOOOOSSA!!!

Regra para converso de unidades em seus mltiplos e divisores.


1024
1024
1024
1024
1024
1024
1024

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

(11) 4427-4579 (11) 9 9903-3218

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.

um sistema posicional, onde a posio esquerda vale 2 vezes o valor da


posio direita.

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

(11) 4427-4579 (11) 9 9903-3218

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).

um sistema posicional onde a posio esquerda vale 16 vezes o valor da


posio direita.

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

Cada digito hexadecimal representa 4 bits em binrio, portanto para converter


de hexadecimal para binrio basta isolar os dgitos em hexadecimal e convert-los
para binrio. Abaixo temos uma tabela e algumas mos que o ajudar nessa
converso.
Hexadecimal
Binrio

4
8

www.grandeporte.com.br

0000

0001

0010

0011

0100

0101

0110

0111

1000

1001

1010

1011

1100

1101

1110

1111

(11) 4427-4579 (11) 9 9903-3218

26

Parte 3

Representaco
de
,
nmeros no cobol

Teoria

Varivel Zonada (PIC com USAGE DISPLAY)


o formato padro (default) das variveis numricas.
----+-*A-1-B--+----2----+----3----+----4----+----5----+----6----+----7--|-+----8
*----------------------------------------------------------------*
WORKING-STORAGE
SECTION.
*----------------------------------------------------------------*
77 WS-CTLIDO
PIC 9(03)
USAGE DISPLAY.
77 WS-PRECO-VENDA
PIC 9(06)V99.

As variveis zonadas no so boas para a realizao de clculos, pois o


computador precisa primeiro converter os valores armazenados nessas variveis para
binrio, depois realizar o clculo (que sempre em binrio) e por fim, o resultado
convertido novamente para zonado.
O uso dessas variveis para exibio (USAGE DISPLAY). Neste formato
cada dgito decimal ocupa um Byte.
Exemplo 1: O nmero 7418 em Zonado PIC 9(4) fica:

O comando DISPLAY exibe, buscando os caracteres correspondentes ao


nmero hexadecimal na tabela EBCDIC o valor: 7418
O comando WRITE grava no arquivo, buscando os caracteres correspondentes
ao nmero hexadecimal na tabela EBCDIC o valor: 7418
Exemplo 2: O nmero +7418 em Zonado PIC S9(4) fica:

O comando DISPLAY exibe, buscando os caracteres correspondentes ao


nmero hexadecimal na tabela EBCDIC o valor: 741H
O comando WRITE grava no arquivo, buscando os caracteres correspondentes
ao nmero hexadecimal na tabela EBCDIC o valor: 741H

www.grandeporte.com.br

(11) 4427-4579 (11) 9 9903-3218

27

Parte 3
Exemplo 3: O nmero -7418 em zonado PIC S9(4) fica:

O comando DISPLAY exibe, buscando os caracteres correspondentes ao


nmero hexadecimal na tabela EBCDIC o valor: 741Q
O comando WRITE grava no arquivo, buscando os caracteres correspondentes
ao nmero hexadecimal na tabela EBCDIC o valor: 741Q

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

Exemplo para PIC S9v99


nmero
armazenado
+3,15
31E
-3,15
31N
+2,7
27{
-2,7
27}
+0,01
00A
-0,01
00J
+1
10{
-1
10}
+3,33
33C

(11) 4427-4579 (11) 9 9903-3218

28

Parte 3

Varivel Binria (PIC com USAGE COMPUTATIONAL)


o formato das variveis binrias. Pode-se abreviar para COMP. O nmero
primeiro convertido para binrio antes de ser armazenado nesse tipo de varivel.
----+-*A-1-B--+----2----+----3----+----4----+----5----+----6----+----7--|-+----8
*----------------------------------------------------------------*
WORKING-STORAGE
SECTION.
*----------------------------------------------------------------*
77 WS-CTLIDO
PIC 9(03)
USAGE COMPUTATIONAL.
77 WS-CTGRAV
PIC 9(03)
USAGE COMP.
77 WS-CTIMP
PIC 9(03)
COMP.

O tamanho da varivel deve seguir a tabela abaixo:


DE
S9(01) COMP
S9(05) COMP
S9(10) COMP

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

c) Colocar 1111 0101(2) na varivel, da direita para a esquerda, preenchendo com


zeros os bits esquerda.

0000

0000

1111

0101

d) Converter cada nibble para hexadecimal.


00 F5(16)

www.grandeporte.com.br

(11) 4427-4579 (11) 9 9903-3218

29

Parte 3

e) 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

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

(11) 4427-4579 (11) 9 9903-3218

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

(11) 4427-4579 (11) 9 9903-3218

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)

Converter cada nibble para hexadecimal


FF 0B(16)

g) 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.

FF0B
DISPLAY

WRITE

F0F2F4D5

FF0B

024N

b b

E o COMP-4 ?

verdade, existe ainda o COMP-4,


que, quanto ao formato exatamente o
mesmo que o COMP. A nica diferena
que a varivel criada em um nvel
hierrquico de memria mais alto
(prxima CPU), o que torna seu
acesso mais rpido.
www.grandeporte.com.br

(11) 4427-4579 (11) 9 9903-3218

32

Parte 3

Varivel Decimal-Compactada (PIC com USAGE COMPUTATIONAL-3)


o formato das variveis BCD (Binary Coded Decimal). So econmicas, pois
cada dgito ocupa um nibble mais um nibble (o da direita) para o sinal. Exemplo:
----+-*A-1-B--+----2----+----3----+----4----+----5----+----6----+----7--|-+----8
*----------------------------------------------------------------*
WORKING-STORAGE
SECTION.
*----------------------------------------------------------------*
77 WS-CTLIDO
PIC 9(03)
USAGE COMPUTATIONAL-3.
77 WS-CTGRAV
PIC 9(03)
USAGE COMP-3.
77 WS-CTIMP
PIC 9(03)
COMP-3.

O nibble de sinal vale 1100(2) = C(16) se positivo, 1101(2) = D(16) se negativo ou


1111(2) = F(16) se sem sinal.
Para determinar o tamanho da varivel, deve-se proceder da seguinte forma,
dependendo se o comprimento da varivel par ou impar. Exemplo:
Comprimento mpar uma PIC 9(5) tem comprimento mpar, ela precisa de 5
nibbles mais o nibble de sinal. Temos ento 5 + 1 = 6 nibbles ou seja, 3 Bytes.
Comprimento Par uma PIC 9(4) tem comprimento par, ela precisa de 4
nibble mais o nibble se sinal, temos ento 4 + 1 = 5 nibbles ou seja, 2,5 Bytes. Mas s
podemos usar Bytes inteiros, temos ento 3 Bytes.

Para simplificar :
Dividir a quantidade de
dgitos por 2, ignorar as casas
decimais e somar 1 no final.

www.grandeporte.com.br

(11) 4427-4579 (11) 9 9903-3218

Parte 3

33

Exemplo 1: para armazenar o nmero 2012 em decimal-compactado, PIC 9(4)


COMP-3, fazer os seguintes passos:
a) PIC 9(4) possui comprimento par, ento ocupar 4+1 = 5 nibbles, ou 3 bytes.

b) O nibble menos significativo (o da direita) armazena F (neutro), e os dgitos


ocupam os demais nibbles. Os nibbles esquerda so preenchidos com zero.

c) Converter cada nibble para hexadecimal


02 01 2F(16)
d) 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.

02012F
DISPLAY

WRITE

F2F0F1F2

02012F

2012

www.grandeporte.com.br

b b b

(11) 4427-4579 (11) 9 9903-3218

34

Parte 3

Exemplo 2: para armazenar o nmero +2012 em decimal compactado PIC


S9(4) COMP-3, fazemos:
a) PIC 9(4) possui comprimento par, ento ocupar 4+1 = 5 nibbles, ou 3 bytes.

b) O nibble menos significativo (o da direita) armazena C (positivo), e os dgitos


ocupam os demais nibbles. Os nibbles esquerda so preenchidos com zero.

c) 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.

02012C
DISPLAY

WRITE

F2F0F1C2

02012C

201B

www.grandeporte.com.br

b b b

(11) 4427-4579 (11) 9 9903-3218

Parte 3

35

Exemplo 3: para armazenar o nmero -2012 em decimal compactado PIC


S9(4) COMP-3, fazer os seguintes passos:
a) PIC 9(4) possui comprimento par, ento ocupar 4+1 = 5 nibbles, ou 3 bytes.

b) O nibble menos significativo (o da direita) armazena D (negativo), e os dgitos


ocupam os demais nibbles. Os nibbles esquerda so preenchidos com zero.

c) 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.

02012D
DISPLAY

WRITE

F2F0F1D2

02012D

201K

www.grandeporte.com.br

b b b

(11) 4427-4579 (11) 9 9903-3218

36

Parte 3

MSCARA DE EDICO
,

Teoria

A clusula PICTURE ou abreviadamente PIC tem alguns formatos prprios


para fazer edio de variveis numricas no momento de uma impresso.
Por Exemplo, a varivel WS-CTLIDO com PIC 9(5) e valor 8, quando for
exibida com o comando DISPLAY WS-CTLIDO, ser exibido o valor 00008.
Para evitar os zeros esquerda, bem como colocar pontos separadores de
milhares, sinais positivo ou negativo, etc, a PIC pode ter outros smbolos no lugar do 9
para melhorar a apresentao, o que chamamos de MSCARA de EDIO.

Som na caixa
cara de pau !

Os smbolos usados
para fazer qualquer
mscara so:
+ - *
9 0 B
Z $ .
CR DB ,

mais, menos, vezes


nove, zero, b
z, cifro, pontinho
CR e DB,

junto com a vrgula


devemos aprender

A tabela a seguir explica cada um desses smbolos e como eles so usados


para montar mscaras.

www.grandeporte.com.br

(11) 4427-4579 (11) 9 9903-3218

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

(11) 4427-4579 (11) 9 9903-3218

38

Parte 3

Teoria

Comandos complementares

ACCEPT do Sistema Operacional


O comando ACCEPT pode alm de receber dados do dispositivo de entrada
padro SYSIN, receber informaes do sistema operacional contidas em um
registrador especial (DATE, DAY, DAY-OF-WEEK, ou TIME). Exemplos:
----+-*A-1-B--+----2----+----3----+----4----+----5----+----6----+----7--|-+----8
ACCEPT WS-DATA-SISTEMA FROM DATE
ACCEPT WS-DATA-JULIANA FROM DAY
ACCEPT WS-DIA-SEMANA
FROM DAY-OF-WEEK
ACCEPT WS-HORA-COMPLETA FROM TIME

DATE A varivel receptora deve ser PIC 9(06). O formato da data


YYMMDD (data gregoriana), 20/12/2005 ser expresso como 051220. No exemplo
acima, a varivel WS-DATA-SISTEMA deve ter o seguinte LAYOUT.
----+-*A-1-B--+----2----+----3----+----4----+----5----+----6----+----7--|-+----8
01 WS-DATA-SISTEMA.
05 WS-ANO-G
PIC 9(02).
05 WS-MES-G
PIC 9(02).
05 WS-DIA-G
PIC 9(02).

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).

DAY-OF-WEEK A varivel receptora deve ser PIC 9(1), onde:


1 = segunda-feira
2 = tera-feira
3 = quartafeira
4 = quinta-feira
5 = sexta-feira
6 = sbado
7 = domingo
No exemplo acima, a varivel WS-DIA-SEMANA deve ter o seguinte LAYOUT.
----+-*A-1-B--+----2----+----3----+----4----+----5----+----6----+----7--|-+----8
77 WS-DIA-SEMANA
PIC 9.

www.grandeporte.com.br

(11) 4427-4579 (11) 9 9903-3218

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).

MOVE CORRESPONDING e MOVE por partes


Quando a varivel emissora e receptora so item de grupo e possuem
variveis elementares com o mesmo nome, usa-se a opo CORRESPONDING,
abreviadamente CORR para mover as variveis elementares com o mesmo nome.
Exemplo:
----+-*A-1-B--+----2----+----3----+----4----+----5----+----6----+----7--|-+----8
WORKING-STORAGE
SECTION.
01 WS-DATA-SISTEMA.
05 WS-ANO
PIC 9(02).
05 WS-MES
PIC 9(02).
05 WS-DIA
PIC 9(02).
01 WS-DATA-FORMATADA.
05 WS-DIA
PIC 9(02).
05 FILLER
PIC X(01)
VALUE /.
05 WS-MES
PIC 9(02).
05 FILLER
PIC X(03)
VALUE /20.
05 WS-ANO
PIC 9(02).
*----------------------------------------------------------------*
PRODEDURE
DIVISION.
*----------------------------------------------------------------*
MOVE CORRESPONDING WS-DATA-SISTEMA TO WS-DATA-FORMATADA

WS-DATA-SISTEMA

WS-ANO

WS-DIA

WS-MES

WS-DIA

WS-MES

/20

WS-ANO

WS-DATA-FORMATADA

www.grandeporte.com.br

(11) 4427-4579 (11) 9 9903-3218

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

possvel mover pedaos da varivel emissora para uma determinada posio


na varivel receptora. No trecho de programa COBOL abaixo, temos um exemplo
deste MOVE.
----+-*A-1-B--+----2----+----3----+----4----+----5----+----6----+----7--|-+----8
WORKING-STORAGE
SECTION.
77 A PIC X(10) VALUE "1234567890".
77 B PIC X(02).
77 C PIC X(10).
*----------------------------------------------------------------*
PROCEDURE
DIVISION.
*----------------------------------------------------------------*
000-GPAZ9900.
MOVE A(3:2) TO B
MOVE A(6:5) TO C(1:5)
MOVE A(1:5) TO C(6:5)
varivel posio inicial comprimento
DISPLAY "*----------------------*"
DISPLAY "A = " A
DISPLAY "B = " B
DISPLAY "C = " C
Observao: variveis alfanumricas
DISPLAY "*----------------------*"
possuem cadeias de caracteres, tambm
STOP RUN
.
conhecidas como STRINGs. Quando

movemos pedaos de uma STRING,


dizemos que movemos uma SUBSTRING.
Na SYSOUT, ser exibido o seguinte texto:
*----------------------*
A = 1234567890
B = 34
C = 6789012345
*----------------------*

www.grandeporte.com.br

(11) 4427-4579 (11) 9 9903-3218

Parte 3

41

Practice

3
Atividade

Reviso aos pares

Responda as questes abaixo, depois pea para


que seu colega as corrija.

1) Converta as medidas abaixo para Bytes


a) 28 MiB

b) 67 GiB

www.grandeporte.com.br

(11) 4427-4579 (11) 9 9903-3218

42

Parte 3

2) Converta os Bytes abaixo para GB e GiB


a) 71.940.702.208 B

b) 7.146.825.580.544 B

3) Converta os tamanhos dos HD abaixo para GiB.


a) 80 GB

b) 1 TB

www.grandeporte.com.br

(11) 4427-4579 (11) 9 9903-3218

43

Parte 3

4) Associe os nmeros armazenados nos formatos informados pelas PICTURES a


esquerda com a representao hexadecimal a direita
a)
b)
c)
d)
e)
f)
g)
h)
i)

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

Utilize o espao abaixo como rascunho.

www.grandeporte.com.br

(11) 4427-4579 (11) 9 9903-3218

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

(11) 4427-4579 (11) 9 9903-3218

Parte 3

45

6) Monte o pargrafo FILE-CONTROL que atenda o Macro-Fluxo abaixo.


a)

SYSIN

PGM0001

PRDSEQM

FILE-CONTROL.

b)

PRDSEQV

PGM0002

PRDSEQM

FILE-CONTROL.

www.grandeporte.com.br

(11) 4427-4579 (11) 9 9903-3218

46

Parte 3

c)
OLDCLI

MOVCLI

PGM0003

NEWCLI

RELOCOR

FILE-CONTROL.

www.grandeporte.com.br

(11) 4427-4579 (11) 9 9903-3218

Parte 3

Atividade

47

Prtica de laboratrio

Vamos colocar para funcionar o programa escrito


no PROJETO 1. Execute os passos abaixo:

1) Copie o membro GPXXNN01 da COBLIB de seu instrutor para a sua


COBLIB.
2) Copie o membro EXECOB01 da JOBLIB de seu instrutor para a sua
JOBLIB.
3) Renomeie o membro GPXXNN01 substituindo XXNN pela sua identificao.
4) Complete o programa COBOL com base em sua especificao do
PROJETO 1.
5) Compile com o job COMPCOB e elimine os erros at obter MAXCC = 0
6) Execute o programa com o job EXECOB01. Compare o resultado com os
dos colegas.

www.grandeporte.com.br

(11) 4427-4579 (11) 9 9903-3218

48

Parte 3

Atividade

Prtica de laboratrio

Vamos acrescentar uma rotina no programa


GPXXNN01, para exibir data nos diversos formatos.

Nome da rotina (pargrafo): 9000-IMPRIME-DATA


Onde ser chamada (PERFORM): no final da rotina 3000-TERMINO, antes da
mensagem de trmino normal do programa.
Layout da SYSOUT (utilize a rgua vermelha como guia):
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
*
**************************************************

E o calendrio
ASTECA!?

www.grandeporte.com.br

(11) 4427-4579 (11) 9 9903-3218

Parte 3

49

3
Todos Juntos

PROJETO 2

Objetivo da Manuteno no Programa


A equipe do Banco do Polvo S.A. solicitou algumas alteraes no projeto de
simulao de emprstimo:
a) Informar tempo total de processamento
b) Exibir os dados da Simulao do Emprstimo formatados

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

(11) 4427-4579 (11) 9 9903-3218

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.

Orientao para processamento


Para calcular o tempo de processamento, proceder da seguinte maneira:
1) Declarar as seguintes variveis na WORKING-STORAGE SECTION:
----+-*A-1-B--+----2----+----3----+----4----+----5----+----6----+----7--|-+----8
WORKING-STORAGE
SECTION.
*==> VARIAVEL PARA RECEBER O HORARIO DE INICIO DO PROCESSAMENTO
01 WS-HORARIO-INICIAL.
05 WS-HORA-I
PIC 9(02).
05 WS-MIN-I
PIC 9(02).
05 WS-SEG-I
PIC 9(02).
05 WS-CENT-I
PIC 9(02).
*==> VARIAVEL PARA RECEBER O HORARIO DE TERMINO DO PROCESSAMENTO
01 WS-HORARIO-FINAL.
05 WS-HORA-F
PIC 9(02).
05 WS-MIN-F
PIC 9(02).
05 WS-SEG-F
PIC 9(02).
05 WS-CENT-F
PIC 9(02).
*==> VARIAVEL PARA ARMAZENAR A DIFERENCA ENTRE HORARIO DE INICIO
*
E TERMINO DO PROCESSAMENTO EM CENTESIMOS DE SEGUNDOS
77 WS-DIFERENCA
PIC 9(07).
*==> VARIAVEL PARA RECEBER O TEMPO DO PROCESSAMENTO SEM FORMATACAO
01 WS-TEMPO-PROCESSAMENTO.
05 WS-HORA-P
PIC 9(02).
05 WS-MIN-P
PIC 9(02).
05 WS-SEG-P
PIC 9(02).
05 WS-CENT-P
PIC 9(02).

www.grandeporte.com.br

(11) 4427-4579 (11) 9 9903-3218

Parte 3

51

*==> VARIAVEL PARA RECEBER O TEMPO DO PROCESSAMENTO COM FORMATACAO


01 WS-TEMPO-PROCESSAMENTO-F.
05 WS-HORA-PF
PIC 99.
05 FILLER
PIC X(01)
VALUE :.
05 WS-MIN-PF
PIC 99.
05 FILLER
PIC X(01)
VALUE :.
05 WS-SEG-PF
PIC 99.
05 FILLER
PIC X(01)
VALUE :.
05 WS-CENT-PF
PIC 99.

2) No pargrafo 1000-INICIALIZAR receber a hora de incio do processamento.


----+-*A-1-B--+----2----+----3----+----4----+----5----+----6----+----7--|-+----8
1000-INICIALIZAR.
ACCEPT WS-HORARIO-INICIAL FROM TIME

3) No pargrafo 3000-TERMINO receber a hora do trmino do processamento.


----+-*A-1-B--+----2----+----3----+----4----+----5----+----6----+----7--|-+----8
3000-TERMINO.
ACCEPT WS-HORARIO-FINAL FROM TIME

Na sequncia, calcular e armazenar na varivel WS-DIFERENCA a diferena


entre esses dois horrios em centsimos de segundo, conforme frmula abaixo:
----+-*A-1-B--+----2----+----3----+----4----+----5----+----6----+----7--|-+----8
COMPUTE WS-DIFERENCA = ( WS-HORA-F * 360000 +
WS-MIN-F *
6000 +
WS-SEG-F *
100 +
WS-CENT-F)
( WS-HORA-I * 360000 +
WS-MIN-I *
6000 +
WS-SEG-I *
100 +
WS-CENT-I)

Calcular e armazenar o tempo de processamento conforme varivel e clculos


abaixo:
----+-*A-1-B--+----2----+----3----+----4----+----5----+----6----+----7--|-+----8
COMPUTE WS-HORA-P = WS-DIFERENCA / 360000
COMPUTE WS-DIFERENCA = WS-DIFERENCA WS-HORA-P * 360000
COMPUTE WS-MIN-P = WS-DIFERENCA / 6000
COMPUTE WS-DIFERENCA = WS-DIFERENCA WS-MIN-P * 6000
COMPUTE WS-SEG-P = WS-DIFERENCA / 100
COMPUTE WS-DIFERENCA = WS-DIFERENCA WS-SEG-P * 100
COMPUTE WS-CENT-P = WS-DIFERENCA

mover os tempos calculados para as variveis formatadas.


----+-*A-1-B--+----2----+----3----+----4----+----5----+----6----+----7--|-+----8
MOVE WS-HORA-P
TO WS-HORA-PF
MOVE WS-MIN-P
TO WS-MIN-PF
MOVE WS-SEG-P
TO WS-SEG-PF
MOVE WS-CENT-P
TO WS-CENT-PF

www.grandeporte.com.br

(11) 4427-4579 (11) 9 9903-3218

52

Parte 3

Avaliao

Ento...Como foi ?!?

Estou fera!

Fiz Certo!

Muito Bom

Bom

www.grandeporte.com.br

regular

ruim

Muito ruim

(11) 4427-4579 (11) 9 9903-3218

Parte

O pequeno cartucho retangular usado no sub-sistema de


fita magntica IBM 3480 aproximadamente 1/4 do tamanho de
um rolo de fita magntica padro de 10,5 polegadas, mesmo
assim ele armazena 20% mais dados - um total de 200 milhes
de caracteres. A taxa ao qual os dados podem ser armazenados
ou recuperados nos cartuchos de fita de dixido de cromo de 1/2
polegada, foi o resultado do uso de 18 trilhas de gravao,
alcanando uma densidade de aproximadamente 30.000 bytes por
polegada - seis vezes a densidade das unidades de fita IBM
usadas anteriormente.
Fonte: IBM

Verso 2.3.5

Parte 4

Preparation

Trocando Ideias

agora que voc fala !!

Antes de iniciarmos, vamos conversar sobre os tpicos apresentados na


capa desta parte. Isso importante para que seu instrutor e seus colegas
saibam como est seu conhecimento sobre o assunto e se voc precisa ou
pode fornecer ajuda aos colegas e instrutor.

O que voc j sabe ?


O que voc no sabe ?
Porque importante conhecer estes tpicos ?
Quais so os seus temores ?
O que voc considera difcil ?

Reflexo

aqui que voc se compromete !!

Depois de falar sobre o assunto com seus colegas e instrutor, escreva,


desenhe, rabisque, diga algo sobre o que voc vai fazer para dominar esses
tpicos. Comprometa-se!

www.grandeporte.com.br

(11) 4427-4579 (11) 9 9903-3218

Parte 4

Presentation

Histria

Arquivos sem fim...

Os dados das empresas ficam armazenados em arquivos. A quantidade to


grande que eles no cabem todos em unidades de disco, chamadas DASD (Direct
Access Storage Device), e devem ficar armazenadas em data cartridge (Cartucho de
Dados), como mostra a figura abaixo:

Os cartuchos ficam armazenados em uma


mquina que, com o uso de um brao robtico,
carrega
os
cartuchos
na
unidade
de
leitora/gravao, de acordo com a solicitao do
JOB em JCL. Como mostra a figura ao lado.

fundamental dominar
a manipulao de arquivos em
COBOL, j que todos os dados
esto armazenados nesses
objetos.

www.grandeporte.com.br

(11) 4427-4579 (11) 9 9903-3218

Parte 4

Tipos de arquivos:
Sequencial e indexado

Teoria

Arquivos so entidades lgicas que armazenam dados. Os arquivos so


gravados em meios magnticos, tais como discos ou cartuchos ou em meios pticos,
tais como CDs, DVDs ou Blu-ray. Os dados gravados nesses meios no apagam
quando o computador desligado. So utilizados como memria de massa, pois
podem armazenar grandes quantidades de dados. Quando necessrio, os dados dos
arquivos so carregados para a memria principal do computador para processamento.
Os dados so organizados nos arquivos em diversas estruturas. Em todas elas
os dados so organizados em campos. Um agrupamento de campos de dados sobre
um mesmo objeto chamado de registro. Um conjunto de registros formam um
arquivo.
Os arquivos podem ter a seguinte estrutura:
PHYSICAL SEQUENTIAL (PS) Os registros esto organizados em sequncia,
um atrs do outro. a nica forma de organizar registros em cartuchos e fitas
magnticas. O acesso esses registros s pode ser feita sequencialmente. Entre os
registros existe um espao chamado INTERRECORD GAP (IRG) ou INTERBLOCK
GAP.

REGISTRO

REGISTRO

REGISTRO

REGISTRO

IRG

REGISTRO

REGISTRO

IRG

REGISTRO

REGISTRO
REGISTRO

REGISTRO

IRG

REGISTRO

REGISTRO

REGISTRO

REGISTRO

REGISTRO

BOF

REGISTRO

Arquivo sequencial blocado.

EOF

www.grandeporte.com.br

IRG

REGISTRO

IRG

REGISTRO

IRG

REGISTRO

IRG

REGISTRO

IRG

REGISTRO

BOF

REGISTRO

Arquivo sequencial no blocado

EOF

(11) 4427-4579 (11) 9 9903-3218

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

Um ARQUIVO armazena dados sobre um tipo de objeto em particular, por


exemplo ESTOQUE, que o nome do arquivo.
Os dados so organizados em REGISTROS, que armazenam vrios dados de
um produto em especfico, por exemplo:
0004CANETA ESFER. PRETA

025200500000150

Os registros possuem CAMPOS, com um dado deste produto, por exemplo


0008, que o cdigo do produto.

ARQUIVO
CAMPO

REGISTRO

www.grandeporte.com.br

(11) 4427-4579 (11) 9 9903-3218

Parte 4

Layout do arquivo

Teoria

Um arquivo possui um layout, com nome do arquivo, nome de registro e um


descritivo de seus campos com nome, tipo de dado e tamanho. Quanto ao tipo de
dado a linguagem COBOL utiliza os seguintes smbolos para sua representao:
Alfanumrico X

Alfabtico A

Numrico 9

Colocamos entre parnteses um nmero que a quantidade de caracteres ou


dgitos utilizados na formao do campo. No caso de campo numrico, a letra V
(virtual) usada para representar uma vrgula implcita, que no contada no
tamanho do campo.
Por exemplo, o arquivo estoque possui o seguinte layout:
Nome do Arquivo
Nome do Registro
Nome do Campo
CODPROD
DESCPROD
QTDEST
QTDMIN
QTDMAX
PRECOPROD

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

Para padronizar, o nome do registro ser REG-nomedoarquivo.


Observe que REG-ESTOQUE possui 44 caracteres de largura (Bytes). Para
encontrar essa quantidade, basta somar os nmeros entre parnteses
4+25+3+3+3+4+2=44.
Outra forma de se escrever o layout :

www.grandeporte.com.br

(11) 4427-4579 (11) 9 9903-3218

Parte 4

Teoria

Tratamento de
arquivo sequencial

Grandes quantidades de dados esto armazenados em arquivos sequenciais.


Esses arquivos ficam armazenados em meios magnticos, tais como discos, fitas ou
cartuchos. A figura abaixo mostra uma Fita Magntica, no mais usada atualmente e
um Cartucho, mais comum.

Para que um programa COBOL possa manipular os arquivos necessrio


cumprir trs etapas:
Especificao do Arquivo
Detalhamento do Arquivo
Manipulao do Arquivo

www.grandeporte.com.br

(11) 4427-4579 (11) 9 9903-3218

Parte 4

Teoria

Especifica o do arquivo

Um arquivo precisa ser especificado na ENVIRONMENT DIVISION, SEO


INPUT-OUTPUT SECTION, pargrafo FILE-CONTROL. A clusula SELECT faz essa
especificao, como mostra o exemplo abaixo:
----+-*A-1-B--+----2----+----3----+----4----+----5----+----6----+----7--|-+----8
*----------------------------------------------------------------*
ENVIRONMENT
DIVISION.
*----------------------------------------------------------------*
CONFIGURATION
SECTION.
*----------------------------------------------------------------*
SPECIAL-NAMES
DECIMAL-POINT IS COMMA.
*----------------------------------------------------------------*
INPUT-OUTPUT
SECTION.
*----------------------------------------------------------------*
FILE-CONTROL.
SELECT ESTOQUE-PRODUTO ASSIGN TO UT-S-ESTOQUE
ORGANIZATION IS SEQUENTIAL
ACCESS MODE IS SEQUENTIAL
FILE STATUS IS FS-ESTOQUE-PRODUTO.

O formato geral do SELECT :


SELECT nome-logico-arquivo ASSIGN TO nome-externo-ddname

O nome-lgico-arquivo pode ter no mximo 30 caracteres de tamanho e deve


seguir a regra para formao de nomes definidos pelo programador, ou seja, pode
comear por nmero, pode conter hfen (menos no incio e no fim), no pode conter
espao em branco e no pode ser uma palavra reservada do COBOL.
O nome-externo-ddname pode vir com os seguintes complementos:
numero-do-sistematipo-de-arquivonumero-do-dispositivomodo-de-acessonome-externo-ddname

numero-do-sistema:

definido pela empresa usuria do mainframe

tipo-de-arquivo:

UR = Unit Record (terminal ou impressora)


UT = Utility (disco sequencial)
DA = Direct Access (disco)

numero-do-dispositivo:

SYSALLDA = todos os discos do ambiente


SYSDA = discos do sistema
nmero definido para o disco, exemplo: 3390

modo-de-acesso:

S = Sequencial
I = Indexado
R = Relativo
D = Dinmico

nome-externo:

nome do arquivo no JOB, chamado de DDNAME

www.grandeporte.com.br

(11) 4427-4579 (11) 9 9903-3218

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.

O nome externo do arquivo aparece do lado esquerdo do carto DD no JOB.


Exemplo:
11234567892123456789312345678941234567895123456789612345678971234567898
12345678901234567890123456789012345678901234567890123456789012345678901234567890
//GPXXNN11 JOB SEUNOME,CLASS=A,MSGCLASS=X,NOTIFY=GPXXNN,TIME=(0,20)
//********************************************************************
//STEP001
EXEC PGM=ATUPROD
//STEPLIB
DD DSN=GP.GERAL.LOADLIB,DISP=SHR
//ESTOQUE DD DSN=GP.GPXXNN.ESTOQUE,DISP=SHR

Neste exemplo, ESTOQUE-PRODUTO o nome lgico do arquivo, ESTOQUE


o nome externo (DDNAME) e GP.GPXXNN.ESTOQUE o nome do arquivo no
catalogo do sistema (DSN = DATA SET NAME).
ORGANIZATION IS SEQUENCIAL indica que os registros esto organizados
sequencialmente dentro do arquivo. Quando no informado, esse o valor default
(padro).
ACCESS MODE IS SEQUENCIAL indica que os registros sero acessados
sequencialmente, um a um, desde o incio do arquivo. Quando no informado, esse
o valor default (padro).
FILE STATUS IS FS-ESTOQUE-PRODUTO, indica uma varivel, com formato
PIC X(02), que conter um cdigo de FILE STATUS, indicando se a operao de I-O
(Input-Outupt), tais como OPEN, READ, WRITE e CLOSE foi realizada com sucesso.
Essa varivel, uma vez indicada, carregada automaticamente pelo sistema
operacional, toda vez que uma operao de I-O for realizada.
A boa prtica de programao sugere que todos os comandos de I-O devem
ser seguidos de um teste na varivel de FILE STATUS para verificar possveis erros. A
varivel de FILE STATUS pode receber, entre outros, os seguintes valores:
FILE STATUS
'00'
'10'
'35'
'39'
'41'
'42'
'46'
'47'
'48'
'9x'

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) 4427-4579 (11) 9 9903-3218

11

Parte 4

Detalhamento do arquivo

Teoria

Na DATA DIVISION, h a seo FILE SECTION, usada para detalhar um


arquivo, seus registros e campos. Todo arquivo especificado no pargrafo FILECONTROL pela clusula SELECT, deve ser detalhado na FILE SECTION. Exemplo:
----+-*A-1-B--+----2----+----3----+----4----+----5----+----6----+----7--|-+----8
XXXXXXXDATAXXXXXXXXXXXXXXXXXXX
DIVISION.
XXXXXXXFILEXXXXXXXXXXXXXXXXXX
SECTION.
0,XXXXXFDxxESTOQUE-PRODUTO
XXXXXXXXXXXLABEL RECORD STANDARD
XXXXXXXXXXXBLOCK CONTAINS 0 RECORDS
XXXXXXXXXXXRECORDING MODE IS F
XXXXXXXXXXXRECORD CONTAINS 44 CHARACTERS
XXXXXXXXXXXDATA RECORD IS REG-ESTOQUE-PRODUTO
XXXXXXXXXXX.
XXXXXXX01XXREG-ESTOQUE-PRODUTO.
XXXXXXXXXXX05 CODPROD
PIC X(04).
XXXXXXXXXXX05 DESCPROD
PIC X(25).
XXXXXXXXXXX05 QTDEST
PIC 9(03).
XXXXXXXXXXX05 QTDMIN
PIC 9(03).
XXXXXXXXXXX05 QTDMAX
PIC 9(03).
XXXXXXXXXXX05 PRECOPROD
PIC 9(04)V99.

FD significa FILE DESCRIPTION (descrio do arquivo) e deve ser seguida do


nome lgico do arquivo. Deve ser escrito na margem A.
LABEL RECORD STANDARD indica a utilizao de etiquetas (label)
padronizadas. uma clusula opcional. O label de um arquivo consiste de um registro
especial, que contm campos como: nome do arquivo, data de criao, o tempo que
deve durar, local do arquivo no disco, informaes sobre cdigo de acesso ao arquivo
para evitar acessos no autorizados, etc. Labels de arquivos em fitas precedem e
sucedem o prprio arquivo na fita. Label de arquivos em discos so armazenados na
VTOC (Volume Table of Contents). A utilizao de labels garantem que os programas
processem os registros corretos.

REGISTRO

REGISTRO

REGISTRO

REGISTRO

IRG

REGISTRO

REGISTRO

REGISTRO

REGISTRO

REGISTRO

IRG

REGISTRO

REGISTRO

REGISTRO

REGISTRO

REGISTRO

BOF

REGISTRO

BLOCK CONTAINS 0 RECORDS indica a quantidade de registros lgicos que


existem em um registro fsico (bloco). Isso conhecido como blocagem do arquivo.
Abaixo temos um exemplo de arquivo blocado com 5 registros lgicos por bloco.

EOF

O FATOR DE BLOCO a quantidade de registros lgicos dentro de um


registro fsico, neste exemplo o FATOR DE BLOCO 5. Quando no sabemos o fator
de bloco, colocamos 0 na clusula BLOCK CONTAINS, assim, o prprio sistema
determina o fator de bloco. uma clusula opcional.

www.grandeporte.com.br

(11) 4427-4579 (11) 9 9903-3218

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

Na WORKING-STORAGE-SECTION declaramos a varivel espelho, onde


detalhamos os campos do registro do arquivo.
O uso da varivel espelho uma boa prtica de programao, pois aps as
operaes de I-O, os dados no se perdem.
----+-*A-1-B--+----2----+----3----+----4----+----5----+----6----+----7--|-+----8
XXXXXXX01 WS REG-ESTOQUE-PRODUTO.
XXXXXXXXXXX05 WS-CODPROD
PIC X(04).
XXXXXXXXXXX05 WS-DESCPROD
PIC X(25).
XXXXXXXXXXX05 WS-QTDEST
PIC 9(03).
XXXXXXXXXXX05 WS-QTDMIN
PIC 9(03).
XXXXXXXXXXX05 WS-QTDMAX
PIC 9(03).
XXXXXXXXXXX05 WS-PRECOPROD
PIC 9(04)V99.

www.grandeporte.com.br

(11) 4427-4579 (11) 9 9903-3218

13

Parte 4

Teoria

Manipula o do arquivo

Na PROCEDURE DIVISION utilizamos as diversas instrues para manipular


os arquivos, tais como OPEN, CLOSE, READ e WRITE.
OPEN
O primeiro passo na manipulao de um arquivo abri-lo. Isso feito atravs
do comando OPEN. Esse comando abre contato com o dispositivo fsico do arquivo.
H 3 modos de abertura de arquivo, que so INPUT, OUTPUT e EXTEND.
----+-*A-1-B--+----2----+----3----+----4----+----5----+----6----+----7--|-+----8
XXXXXXXXXXXOPEN INPUT

CADCLI

XXXXXXXXXXXOPEN OUTPUT VCADPRD


XXXXXXXXXXXOPEN EXTEND CADALUN

INPUT indica que o arquivo ser lido pelo programa. No possvel


gravar um arquivo aberto como INPUT.

OUTPUT indica que o arquivo ser gravado e vazio no momento da


abertura. No possvel ler um arquivo aberto como OUTPUT.

EXTEND indica que o arquivo ser gravado e no vazio no momento


da abertura, ou seja, sero acrescentados registros aps o ltimo.

O nome do arquivo utilizado no comando OPEN o nome lgico do arquivo,


que aparece logo aps o SELECT da FILE-CONTROL.

OPEN INPUT CADCLI

CADCLI

OPEN OUTPUT RELCLI

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

(11) 4427-4579 (11) 9 9903-3218

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).

ANA PAULA DOS SANTOS SILVA

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).

ANA PAULA DOS SANTOS SILVA

XXXXXXXXXX 05 WS-CPFCLI

PIC X(11).

36525415488

XXXXXXXXXX 05 WS-RGCLI

PIC X(09).

451547859

varivel
7355

0100ANA PAULA DOS SANTOS SILVAXXXX36525415488451547859

0050ANA M

CADCLI

www.grandeporte.com.br

(11) 4427-4579 (11) 9 9903-3218

espelho

15

Parte 4

FILE STATUS 00

REGISTRO

REGISTRO

REGISTRO

REGISTRO

REGISTRO

REGISTRO

REGISTRO

BOF

REGISTRO

Quando o READ atinge o EOF, o contedo dos campos e das variveis


espelho permanecem com os dados do ltimo registro lido com sucesso. Um READ
aps EOF produz um FILE STATUS 46 (Sequential Read Without Positioning).

00 00 00 00 00 00 00 00

OPEN

EOF

10

46

READ

possvel utilizar o READ para testar se a leitura do arquivo atingiu a etiqueta


EOF (END OF FILE) atravs da clusula AT END, tambm possvel especificar o
que fazer quando a leitura for um sucesso atravs da clusula NOT AT END. Exemplo:

= 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 recomendao, porm, testar o FILE STATUS para saber se houve


sucesso ou no na operao. Exemplo:

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

(11) 4427-4579 (11) 9 9903-3218

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).

ANA PAULA DOS SANTOS SILVA

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-NOMECLI-N PIC X(30).

ANA PAULA DOS SANTOS SILVA

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

(11) 4427-4579 (11) 9 9903-3218

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-NOMECLI-N PIC X(30).

ANA PAULA DOS SANTOS SILVA

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 recomendao testar o FILE STATUS para saber se houve sucesso ou no


na operao. Exemplo:

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

O READ seguido pelo nome lgico do arquivo para


ler um registro.

WRITE nome-registro

O WRITE seguido pelo nome do registro a ser


gravado.

www.grandeporte.com.br

(11) 4427-4579 (11) 9 9903-3218

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

Porm a recomendao testar o FILE STATUS para verificar o sucesso da


operao. Exemplo:
----+-*A-1-B--+----2----+----3----+----4----+----5----+----6----+----7--|-+----8
XXXXXXXXXXXCLOSE CADCLI
XXXXXXXXXXXIF FS-CADCLI NOT = 00
XXXXXXXXXXXXXXXMOVE ERRO FECHAMENTO CADCLI
TO WS-MSG
XXXXXXXXXXXXXXXMOVE FS-CADCLI
TO WS-FS
XXXXXXXXXXXXXXXGO TO 999-ERRO
XXXXXXXXXXXEND-IF

www.grandeporte.com.br

(11) 4427-4579 (11) 9 9903-3218

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

Utilize mscara de edio para exibir os contadores e o acumulador.

www.grandeporte.com.br

(11) 4427-4579 (11) 9 9903-3218

20

Parte 4

Layout dos Arquivos

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

(11) 4427-4579 (11) 9 9903-3218

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.

(11) 4427-4579 (11) 9 9903-3218

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

PIC 9(06)V99 COMP.

77

WS-SOMASAL

PIC 9(09)V99 COMP.

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

OPEN INPUT CADFUNC


IF FS-CADFUNC NOT = "00"
MOVE WS-MSG01
MOVE FS-CADFUNC
GO TO 9000-ERRO
END-IF

www.grandeporte.com.br

TO WS-MSG
TO WS-FS

(11) 4427-4579 (11) 9 9903-3218

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

COMPUTE WS-SALARIO = WS-QTDHRSTRAB-C * WS-VALORHORA-C


COMPUTE WS-SOMASAL = WS-SOMASAL + WS-SALARIO
MOVE WS-SALARIO

TO WS-SALARIO-F

WRITE REG-FOLHAPAG FROM WS-REG-FOLHAPAG


IF FS-FOLHAPAG NOT = "00"
MOVE WS-MSG04
MOVE FS-FOLHAPAG
GO TO 9000-ERRO
END-IF

TO WS-MSG
TO WS-FS

COMPUTE WS-CTGRAV = WS-CTGRAV + 1


PERFORM 1500-LER-CADFUNC
.
3000-TERMINO.
MOVE WS-CTLIDO
MOVE WS-CTGRAV
MOVE WS-SOMASAL
DISPLAY
DISPLAY
DISPLAY
DISPLAY
DISPLAY

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

DISPLAY "TERMINO NORMAL EEXXNN04"


.

www.grandeporte.com.br

(11) 4427-4579 (11) 9 9903-3218

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
.

Maximum Disk Storage Capacity


2304 TB (ou TiB)

www.grandeporte.com.br

(11) 4427-4579 (11) 9 9903-3218

Parte 4

Atividade

25

Trabalho em dupla

1) Monte a FILE SECTION para os arquivos abaixo. No


faa o detalhamento dos campos, coloque apenas o
tamanho do registro total.

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

(11) 4427-4579 (11) 9 9903-3218

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

(11) 4427-4579 (11) 9 9903-3218

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.

2) Monte as variveis espelho dos layouts de arquivos abaixo


a)

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.

(11) 4427-4579 (11) 9 9903-3218

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.

3) Associe as situaes esquerda com o cdigo de FILE STATUS direita.


a) Arquivo no localizado na abertura
b) Conflito com os atributos do arquivo
c) Fechar um arquivo j fechado
d) Tentou ler depois do fim do arquivo
e) Gravar arquivo no aberto para gravao
f) Sucesso na operao de I-O
g) Abrir um arquivo j aberto
h) A leitura atingiu o fim do arquivo
i) Ler arquivo no aberto para leitura

www.grandeporte.com.br

(
(
(
(
(
(
(
(
(

)
)
)
)
)
)
)
)
)

00
10
35
39
41
42
46
47
48

(11) 4427-4579 (11) 9 9903-3218

Parte 4

29

Performance

Todos Juntos

PROJETO 3

Objetivo da Manuteno no Programa


A equipe do Banco do Polvo S.A. solicitou novas alteraes no projeto de
simulao de emprstimo:
As simulaes de emprstimos sero lidas do arquivo SIMUEMP e as
simulaes aprovadas, de acordo com um critrio, sero gravadas no arquivo
EMPAPROV.
No final do processamento, exibir a quantidade de simulaes lidas, aprovadas
e reprovadas.

Macro-Fluxo

SIMUEMP

GPXXNN03

EMPAPROV

www.grandeporte.com.br

(11) 4427-4579 (11) 9 9903-3218

30

Parte 4
Observao

Todas as simulaes que solicitam um valor de emprstimo maior ou igual a


R$ 100.000 e que possuem um nmero de parcelas maior ou igual a 50, devem ser
reprovadas.
Todas as operaes de I-O (OPEN, READ, WRITE e CLOSE) devem ter o
respectivo FILE STATUS testado e no caso de erro, exibir mensagem apropriada.
Como boa prtica de programao, coloque as mensagens associadas ao FILE
STATUS em variveis.
Mais uma vez, a manuteno de 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 GPXXNN02 para GPXXNN03 em sua COBLIB. As
alteraes sero feitas nessa cpia.
2) Digite as manutenes solicitadas
3) Compile com o job COMPCOB e elimine os erros at obter MAXCC = 0
4) Copie o job EXECOB03 da JOBLIB de seu instrutor e altere XXNN pelo
prefixo de seu usurio.
5) Execute o programa com o job EXECOB03. Compare o resultado com os
dos colegas.

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

(11) 4427-4579 (11) 9 9903-3218

Parte 4

31

Layout dos Arquivos

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

Orientao para processamento


Pargrafo Principal (0000-GPXXNN03)
Executar o pargrafo 1000-INICIALIZAR
Executar o pargrafo 2000-PROCESSAR
at que o file status do arquivo SIMUEMP seja 10
Executar o pargrafo 3000-TERMINO
Encerrar o programa
Pargrafo 1000-INICIALIZAR
Receber o horrio inicial de processamento
Mover zero para os contadores:
simulaes lidas
simulaes aprovadas
simulaes reprovadas
Abrir para leitura 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)
Abrir para gravao 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)
Executar o pargrafo 1500-LER-SIMUEMP

www.grandeporte.com.br

(11) 4427-4579 (11) 9 9903-3218

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

(11) 4427-4579 (11) 9 9903-3218

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

(11) 4427-4579 (11) 9 9903-3218

34

Parte 4

Avaliao

Ento...Como foi ?!?

Estou fera!

Fiz Certo!

Muito Bom

Bom

www.grandeporte.com.br

regular

ruim

Muito ruim

(11) 4427-4579 (11) 9 9903-3218

Parte

frequentemente til combinar dois ou


mais arquivos em um nico arquivo maior. Se os
arquivos no esto ordenados, isso fcil de
conseguir porque ns podemos simplesmente
anexar os registros de um arquivo no final do
outro. Mas se os arquivos esto ordenados, a
tarefa

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

agora que voc fala !!

Antes de iniciarmos, vamos conversar sobre os tpicos apresentados na


capa desta parte. Isso importante para que seu instrutor e seus colegas
saibam como est seu conhecimento sobre o assunto e se voc precisa ou
pode fornecer ajuda aos colegas e instrutor.

O que voc j sabe ?


O que voc no sabe ?
Porque importante conhecer estes tpicos ?
Quais so os seus temores ?
O que voc considera difcil ?

Reflexo

aqui que voc se compromete !!

Depois de falar sobre o assunto com seus colegas e instrutor, escreva,


desenhe, rabisque, diga algo sobre o que voc vai fazer para dominar esses
tpicos. Comprometa-se!

www.grandeporte.com.br

(11) 4427-4579 (11) 9 9903-3218

Parte 5

Presentation

Histria

COBOL a fundo

Neste ponto de seu treinamento, a XPTO Consultoria em Desenvolvimento de


Software espera que seus estagirios desenvolvam mais seus conhecimentos da
linguagem COBOL, conhecendo novas formas de escrever desvios condicionais, como
ganhar tempo, utilizando lay-outs de arquivos j montados, como manipular strings e
finalmente, o algoritmo de merge.
Procure desenvolver seus programas pensando sempre na prxima pessoa
que vai dar manuteno. No basta o programa estar funcionando, preciso tambm
que ele seja de fcil manuteno, ou seja, ter boa manutenibilidade.
Em engenharia de software, manutenibilidade um aspecto da qualidade de
software que se refere facilidade de um software de ser modificado a fim de corrigir
defeitos, adequar-se a novos requisitos, aumentar a suportabilidade ou se adequar a
um ambiente novo. Tais atividades so conhecidas como a manuteno de software,
assim como definido pela ISO/IEC 9126.
Vamos ento conhecer COBOL mais a fundo...

www.grandeporte.com.br

(11) 4427-4579 (11) 9 9903-3218

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

MOVE "A" TO GRAU


MOVE "B" TO GRAU
MOVE "C" TO GRAU
MOVE "D" TO GRAU
PERFORM R900-ROTINA-ERRO THRU R900-FIM

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

(11) 4427-4579 (11) 9 9903-3218

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

NEXT SENTENCE desvia o fluxo do processamento para a primeira instruo


aps o prximo ponto. Exemplo:
----+-*A-1-B--+----2----+----3----+----4----+----5----+----6----+----7--|-+----8
XXXXXXXXXXXIF A > B
XXXXXXXXXXX
NEXT SENTENCE
XXXXXXXXXXXELSE
XXXXXXXXXXX
DISPLAY A EH MENOR OU IGUAL A B
XXXXXXXXXXXEND-IF.
XXXXXXXXXXXDISPLAY COMPARACAO EFETUADA
XXXXX
XXXXXXXXXXXIF A > B
XXXXXXXXXXX
NEXT SENTENCE
XXXXXXXXXXXELSE
XXXXXXXXXXX
DISPLAY A EH MENOR OU IGUAL A B
XXXXXXXXXXXEND-IF
XXXXXXXXXXXDISPLAY COMPARACAO EFETUADA
.

Ponto obrigatrio, obrigando o


fluxo de processamento seguir do
NEXT SENTENCE para, neste
exemplo, o comando DISPLAY.

XXXXXXX150-CALCULA-JUROS.
COMPUTE WS-JUROS = WS-CAPITAL * (1 + (WS-TAXA ** WS-PERIODO))
DISPLAY WS-JUROS
.

Assim, o fluxo de processamento continua aps o prximo ponto. No primeiro


exemplo OBRIGATRIO colocar um ponto logo aps o END-IF, pois desejvamos
que o DISPLAY fosse executado. No segundo exemplo, sem o ponto no END-IF, o
fluxo de processamento pula para o prximo pargrafo, aps o ponto que encerra o
pargrafo atual. O CONTINUE e o NEXT SENTENCE podem ser usados em qualquer
lugar na PROCEDURE DIVISION.

www.grandeporte.com.br

(11) 4427-4579 (11) 9 9903-3218

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
.

No local conveniente do programa fonte COBOL, colocamos, na margem B, o


COPY seguido do nome da BOOK, acompanhado de um ponto final. Exemplo:
----+-*A-1-B--+----2----+----3----+----4----+----5----+----6----+----7--|-+----8
FILE
SECTION.
FD CADPROD
RECORDING MODE IS F
RECORD CONTAINS 69 CHARACTERS
DATA RECORD IS REG-CADPROD
.
COPY CADPROD.
PROCEDURE
DIVISION.
0000-GPXXNN11.
PERFORM 010-INICIALIZAR
PERFORM 030-PROCESSAR UNTIL FS-CADPROD = 10
PERFORM 040-TERMINO
STOP RUN
.
COPY ROTERRO.

www.grandeporte.com.br

(11) 4427-4579 (11) 9 9903-3218

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.

COPY com REPLACING


O uso das variveis espelho faz com que seja necessrio copiar o layout do
arquivo na WORKING-STORAGE SECTION. possvel utilizar uma nica BOOK e
utilizar a opo REPLACING BY do comando COPY para substituir strings dentro da
BOOK, por outra qualquer que desejamos. Essa string dever ser delimitada pelo sinal
de dois pontos. Exemplo:
----+-*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 :XX-:REG-CADPROD.
05 :XX-:CODPROD
PIC X(04).
05 :XX-:DESCPROD
PIC X(20).
05 :XX-:UNIDPROD
PIC X(05).
05 :XX-:LOCALPROD
PIC X(05).
05 :XX-:QTDEST
PIC 9(05).
05 :XX-:QTDMAX
PIC 9(05).
05 :XX-:QTDMIN
PIC 9(05).
05 :XX-:PRECOCOMPRA
PIC 9(06)V99.
05 :XX-:PRECOVENDA
PIC 9(06)V99.
05 :XX-:PERCOMIS
PIC 9(02)V99.

A string de origem e a de destino devero estar delimitadas por dois sinais de


igual (==). Os exemplos abaixo mostram algumas trocas de strings que podem ser
feitas.
1 exemplo troca da string :XX-: por WS----+-*A-1-B--+----2----+----3----+----4----+----5----+----6----+----7--|-+----8
COPY CADPROD REPLACING ==:XX-:== BY ==WS-==.

2 exemplo eliminar a string :XX-:


----+-*A-1-B--+----2----+----3----+----4----+----5----+----6----+----7--|-+----8
COPY CADPROD REPLACING ==:XX-:== BY ====.

3 exemplo troca da string :XX-: por WS-VS----+-*A-1-B--+----2----+----3----+----4----+----5----+----6----+----7--|-+----8


COPY CADPROD REPLACING ==:XX-:== BY ==WS-VS-==.

O coringa pode ser vazio, isto :: (dois-pontos e dois-pontos). Na verdade a


situao mais comum e recomendamos como boa prtica de programao. Exemplo:
----+-*A-1-B--+----2----+----3----+----4----+----5----+----6----+----7--|-+----8
01 ::REG-CADPROD.
05 ::CODPROD
PIC X(04).
05 ::DESCPROD
PIC X(20).

Nas empresas, os layouts dos arquivos so digitados em BOOKS para


simplificar a digitao dos programas e para evitar que erros na digitao do layout do
arquivo possam causar erros nos programas. O comando COPY pode ser utilizado em
qualquer diviso do programa fonte COBOL.

www.grandeporte.com.br

(11) 4427-4579 (11) 9 9903-3218

Parte 5

A seguir algumas imagens do resultado do comando COPY aps a execuo


do pr-compilador.

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

(11) 4427-4579 (11) 9 9903-3218

10

Parte 5

possvel usar vrios coringas diferentes e troc-los conforme nossa


necessidade. Exemplo:
----+-*A-1-B--+----2----+----3----+----4----+----5----+----6----+----7--|-+----8
*----------------------------------------------------------------*
*
BOOK DE ARQUIVO
- CADASTRO DE CLIENTES
*
*
NOME DO BOOK
- CADCLI
*
*
NOME DO PDS
- GP.GPXXNN.BOOKLIB
*
*
NOME DO ARQUIVO
- CADCLI
*
*
TAMANHO DO REGISTRO - 64 BYTES
*
*----------------------------------------------------------------*
01 ::CADPROD.
05 :P:CODCLI:S:
PIC X(04).
05 :P:NOMECLI:S:
PIC X(20).
05 :P:ENDCLI:S:
PIC X(30).
05 :P:FONECLI:S:
PIC X(10).

Abaixo o comando COPY para fazer a troca dos coringas.


----+-*A-1-B--+----2----+----3----+----4----+----5----+----6----+----7--|-+----8
COPY CADCLI REPLACING ==::== BY ==WS-REG-==
==:P:== BY ==WS-==
==:S:== BY ==-CADCLI==.

O resultado dessas trocas :

www.grandeporte.com.br

(11) 4427-4579 (11) 9 9903-3218

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
.

A instruo STRING concatena (junta) o contedo de variveis e constantes


em um nico campo receptor, delimitando pelo tamanho da varivel ou string de
origem ou por espao em branco. 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-LBSTR02.
MOVE 'GRACE'
TO WS-PRIMEIRO-NOME
MOVE 'MURRAY'
TO WS-NOME-DO-MEIO
MOVE 'HOPPER'
TO WS-ULTIMO-NOME
STRING WS-PRIMEIRO-NOME
' '
WS-NOME-DO-MEIO
' '
WS-ULTIMO-NOME
INTO WS-NOME-COMPLETO

DELIMITED
DELIMITED
DELIMITED
DELIMITED
DELIMITED

BY
BY
BY
BY
BY

SPACE
SIZE
SPACE
SIZE
SPACE

DISPLAY 'NOME COMPLETO...: ' WS-NOME-COMPLETO


STOP RUN
.

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

(11) 4427-4579 (11) 9 9903-3218

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

PERFORM com opo THRU executa todos os pargrafos ou


SECTIONs entre o primeiro e o ltimo, inclusive.
Exemplos:
----+-*A-1-B--+----2----+----3----+----4----+----5----+----6----+----7--|-+----8
PERFORM 030-PROCESSAR THRU 060-CALCULO
PERFORM 110-LEVANTAMENTO THRU 220-ENCERRAMENTO

PERFORM com opo TIMES executa o pargrafo ou SECTION uma


determinada quantidade de vezes. Tambm pode ser usado com a opo
THRU.
Exemplos:
----+-*A-1-B--+----2----+----3----+----4----+----5----+----6----+----7--|-+----8
PERFORM 088-IMPRIME-LINHA 5 TIMES
PERFORM 070-DETALHA-CALCULO WS-VEZES TIMES
PERFORM 110-CALCULO-1 THRU 220-CALCULO-3 12 TIMES

www.grandeporte.com.br

(11) 4427-4579 (11) 9 9903-3218

13

Parte 5

PERFORM com opo UNTIL executa o pargrafo ou SECTION at


que uma determinada situao ocorra. Tambm pode ser usada a opo THRU.
Se nada for informado, feito o teste da condio ANTES de executar o
pargrafo ou SECTION, mas possvel especificar se o teste deve ser feito
antes ou depois com a opo WITH TEST BEFORE ou WITH TEST AFTER,
respectivamente.
Exemplos:
----+-*A-1-B--+----2----+----3----+----4----+----5----+----6----+----7--|-+----8
PERFORM 030-PROCESSAR UNTIL FS-VCADPRD = 10
PERFORM 055-IMPRIME-TABUADA WITH TEST BEFORE
UNTIL WS-CONTADOR > 10

PERFORM 080-CALCULA-JUROS WITH TEST AFTER


UNTIL WS-MES > 12
PERFORM 010-INICIO THRU 080-FIM UNTIL WS-CTMES > 12

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

possvel escrever esses PERFORMs em diversas linhas, usando o


endentamento, para melhor visualizao.
----+-*A-1-B--+----2----+----3----+----4----+----5----+----6----+----7--|-+----8
PERFORM 055-IMPRIME-TABUADA
WITH TEST BEFORE
UNTIL WS-CONTADOR > 10

www.grandeporte.com.br

(11) 4427-4579 (11) 9 9903-3218

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

O diagrama de blocos abaixo ilustra o seguinte PERFORM VARYING:


----+-*A-1-B--+----2----+----3----+----4----+----5----+----6----+----7--|-+----8
PERFORM rotina
VARYING variavel FROM valor_inicial BY incremento
UNTIL condicao
PERFORM 999-ROTINA
VARYING WS-CONT FROM 1 BY 1
UNTIL WS-CONT > 100

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

(11) 4427-4579 (11) 9 9903-3218

Parte 5

15

PERFORM INLINE Executa as instrues que esto logo abaixo do


comando PERFORM. Deve ser delimitado pela frase END-PERFORM. H 3 formatos
de PERFORM IN-LINE.
PERFORM com opo TIMES executa as instrues uma
determinada quantidade de vezes. Exemplos:
----+-*A-1-B--+----2----+----3----+----4----+----5----+----6----+----7--|-+----8
PERFORM 5 TIMES
DISPLAY *----------------------*
END-PERFORM
MOVE 0

TO WS-CONT

PERFORM 10 TIMES
DISPLAY VALOR DO CONTADOR = WS-CONT
COMPUTE WS-CONT = WS-CONT + 1
END-PERFORM

PERFORM com opo UNTIL executa as instrues at que uma


determinada situao ocorra. Se nada for informado, feito o teste da condio
ANTES de executar as instrues, mas possvel especificar se o teste deve
ser feito antes ou depois com a opo WITH TEST BEFORE ou WITH TEST
AFTER, respectivamente. Exemplos:
----+-*A-1-B--+----2----+----3----+----4----+----5----+----6----+----7--|-+----8
MOVE 0
TO WS-CONT
PERFORM UNTIL WS-CONT > 10
DISPLAY VALOR DO CONTADOR = WS-CONT
COMPUTE WS-CONT = WS-CONT + 1
END-PERFORM

PERFORM com opo VARYING executa as instrues 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 VARYING WS-CONT FROM 1 BY 1 UNTIL WS-CONT > 10
DISPLAY VALOR DO CONTADOR = WS-CONT
END-PERFORM

www.grandeporte.com.br

(11) 4427-4579 (11) 9 9903-3218

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

CORRENDO CONTRA O TEMPO

O que ser exibido na SYSOUT aps a execuo da


PROCEDURE DIVISION acima?

1 minuto

www.grandeporte.com.br

(11) 4427-4579 (11) 9 9903-3218

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

(11) 4427-4579 (11) 9 9903-3218

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

(11) 4427-4579 (11) 9 9903-3218

Parte 5

19

BOOK dos Arquivos


----+-*A-1-B--+----2----+----3----+----4----+----5----+----6----+----7--|-+----8
*----------------------------------------------------------------*
*
BOOK DE ARQUIVO
- CAD. DE FUNCIONARIO ANTERIOR
*
*
NOME DO BOOK
- FUNCANT
*
*
NOME DO PDS
- GP.GPXXNN.BOOKLIB
*
*
NOME DO ARQUIVO
- FUNCANT
*
*
TAMANHO DO REGISTRO - 43 BYTES
*
*----------------------------------------------------------------*
01 ::REG-FUNCANT.
05 ::CODFUNC-A
PIC X(05).
05 ::NOMEFUNC-A
PIC X(30).
05 ::VALORHORA-A
PIC 9(02)V99.
05 ::QTDHRSTRAB-A
PIC 9(04).

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

(11) 4427-4579 (11) 9 9903-3218

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

(11) 4427-4579 (11) 9 9903-3218

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

(11) 4427-4579 (11) 9 9903-3218

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

OPEN INPUT FUNCANT


IF FS-FUNCANT NOT = "00"
MOVE WS-MSG01
MOVE FS-FUNCANT
GO TO 9000-ERRO
END-IF

TO WS-MSG
TO WS-FS

OPEN INPUT FUNCNOVO


IF FS-FUNCNOVO NOT = "00"
MOVE WS-MSG02
MOVE FS-FUNCNOVO
GO TO 9000-ERRO
END-IF

TO WS-MSG
TO WS-FS

OPEN OUTPUT FUNCCAD


IF FS-FUNCCAD NOT = "00"
MOVE WS-MSG03
MOVE FS-FUNCCAD
GO TO 9000-ERRO
END-IF

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

(11) 4427-4579 (11) 9 9903-3218

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

WRITE REG-FUNCCAD FROM WS-REG-FUNCCAD


IF FS-FUNCCAD NOT = "00"
MOVE WS-MSG06
MOVE FS-FUNCCAD
GO TO 9000-ERRO
END-IF

TO WS-MSG
TO WS-FS

COMPUTE WS-CTGRAV = WS-CTGRAV +


PERFORM 1500-LER-FUNCANT
ELSE
MOVE WS-CODFUNC-N
TO
MOVE WS-NOMEFUNC-N
TO
MOVE WS-QTDHRSTRAB-N
TO
MOVE WS-VALORHORA-N
TO

1
WS-CODFUNC-C
WS-NOMEFUNC-C
WS-QTDHRSTRAB-C
WS-VALORHORA-C

WRITE REG-FUNCCAD FROM WS-REG-FUNCCAD


IF FS-FUNCCAD NOT = "00"
MOVE WS-MSG06
MOVE FS-FUNCCAD
GO TO 9000-ERRO
END-IF

TO WS-MSG
TO WS-FS

COMPUTE WS-CTGRAV = WS-CTGRAV + 1


PERFORM 1600-LER-FUNCNOVO
END-IF
.

www.grandeporte.com.br

(11) 4427-4579 (11) 9 9903-3218

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

(11) 4427-4579 (11) 9 9903-3218

Parte 5

25

Practice

Atividade

Reviso aos pares

1) Codifique um EVALUATE para testar o contedo da


varivel WS-FUNCAO e mover o percentual total de
subsidio que a empresa pagar de plano de assistncia
mdica oferecido aos funcionrios, para a varivel WSTOTSUBSID, sabendo que:

Gerente (WS-FUNCAO = 4) subsidio de 50%.


Coordenador (WS-FUNCAO = 3) subsidio de 25%.
Auxiliar Administrativo (WS-FUNCAO = 1) subsidio 0%.

PROCEDURE

www.grandeporte.com.br

DIVISION.

(11) 4427-4579 (11) 9 9903-3218

26

Parte 5

2) Codifique um EVALUATE para testar o contedo das variveis WS-FUNCAO e


WS-ESTADOCIVIL, para mover o percentual total de subsidio que a empresa pagar
de plano de assistncia mdica oferecido aos funcionrios, para a varivel
WS-TOTSUBSID sabendo que:

Gerente (WS-FUNCAO = 4) subsidio de 50%,


se casado (WS-ESTADOCIVIL = 2) subsidio adicional de 25%.
Coordenador (WS-FUNCAO = 3), subsidio de 25%,
se casado (WS-ESTADOCIVIL = 2) subsidio adicional de 12,5%.
Auxiliar Administrativo (WS-FUNCAO = 1), subsidio 0,
se casado (WS-ESTADOCIVIL = 2) subsidio adicional de 12,5%.

PROCEDURE

www.grandeporte.com.br

DIVISION.

(11) 4427-4579 (11) 9 9903-3218

Parte 5

27

3) Data a book abaixo


----+-*A-1-B--+----2----+----3----+----4----+----5----+----6----+----7--|-+----8
*----------------------------------------------------------------*
*
BOOK DE ARQUIVO
- CADASTRO DE CLIENTES
*
*
NOME DO BOOK
- CADCLI
*
*
NOME DO PDS
- GP.GPXXNN.BOOKLIB
*
*
NOME DO ARQUIVO
- CADCLI
*
*
TAMANHO DO REGISTRO - 84 BYTES
*
*----------------------------------------------------------------*
01 ::REG-CADCLI.
05 ::CODCLI
PIC X(04).
05 ::NOMECLI
PIC X(30).
05 ::ENDCLI
PIC X(40).
05 ::FONECLI
PIC X(10).

a) Escreva o comando COPY para trocar o coringa vazio por WSWORKING-STORAGE

SECTION.

b) Escreva o comando COPY para eliminar o coringa vazio:


FILE

SECTION.

c) Escreva o comando COPY para trocar o coringa vazio por WRK-VARWORKING-STORAGE

www.grandeporte.com.br

SECTION.

(11) 4427-4579 (11) 9 9903-3218

28

Parte 5

4) Data as variveis abaixo


----+-*A-1-B--+----2----+----3----+----4----+----5----+----6----+----7--|-+----8
WORKING-STORAGE
SECTION.
77 WS-TEXTO
PIC X(30)
VALUE
'CANETA;LAPIS;BORRACHA'.
77 WS-PROD1
PIC X(10).
77 WS-PROD2
PIC X(10).
77 WS-PROD3
PIC X(10).

Escreva um comando UNSTRING para separar as strings delimitadas por (;)


ponto-e-vrgula na varivel TEXTO para as variveis PROD1, PROD2 e PROD3.
PROCEDURE

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

(11) 4427-4579 (11) 9 9903-3218

Parte 5

Atividade

29

Trabalho em dupla

Monte o comando perform para as seguintes situaes:

5
a) Executar do pargrafo 2300-INICIO-CALCULO at o pargrafo 2800-TERMINOCALCULO.

b) Executar o pargrado 8600-TRANSMITE-SAUDACAO 50 vezes

c) Executar do parfrado 1100-ADMISSAO-FASE1 at o pargrafo 1800-ADMISSAOFASE8 at que a varivel WS-STATUS seja 'AK'

d) Executar o pargrafo 2100-IMPRIME-TABUADA variando WS-CONT de 1 at 10,


de uma em uma unidade.

www.grandeporte.com.br

(11) 4427-4579 (11) 9 9903-3218

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

com os clientes de So Paulo,


com os clientes do Rio de Janeiro e
com os clientes de Minas Gerais.

O cadastro unificado ser gravado no arquivo CLIUNIF.

Macro-Fluxo

CLISP

CLIRJ

CLIMG

GPXXNN04

CLIUNIF

www.grandeporte.com.br

(11) 4427-4579 (11) 9 9903-3218

Parte 5

31

Layout dos Arquivos

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

(11) 4427-4579 (11) 9 9903-3218

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

(11) 4427-4579 (11) 9 9903-3218

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)

Orientao para processamento

Pargrafo Principal (0000-GPXXNN04)


Executa o pargrafo 1000-INICIALIZAR
Executa o pargrafo 2000-PROCESSAR
at que o file status do arquivo CLISP seja 10 e
file status do arquivo CLIRJ seja 10 e
file status do arquivo CLIMG seja 10
Executar o pargrafo 3000-TERMINO
Encerrar o programa
Pargrafo 1000-INICIALIZAR
Receber o horrio inicial de processamento
Mover zero para os contadores:
Clientes lidos no arquivo CLISP
Clientes lidos no arquivo CLIRJ
Clientes lidos no arquivo CLIMG
Clientes gravados no arquivo CLIUNIF
Abrir para leitura 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)
Abrir para leitura 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)

www.grandeporte.com.br

(11) 4427-4579 (11) 9 9903-3218

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

(11) 4427-4579 (11) 9 9903-3218

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

(11) 4427-4579 (11) 9 9903-3218

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

(11) 4427-4579 (11) 9 9903-3218

Parte 5

37

www.grandeporte.com.br

(11) 4427-4579 (11) 9 9903-3218

38

Parte 5

Avaliao

Ento...Como foi ?!?

Estou fera!

Fiz Certo!

Muito Bom

Bom

www.grandeporte.com.br

regular

ruim

Muito ruim

(11) 4427-4579 (11) 9 9903-3218

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.

site publib.boulder.ibm.com da IBM.

Verso 2.3.5

Parte 6

Preparation

Trocando Ideias

agora que voc fala !!

Antes de iniciarmos, vamos conversar sobre os tpicos apresentados na


capa desta parte. Isso importante para que seu instrutor e seus colegas
saibam como est seu conhecimento sobre o assunto e se voc precisa ou
pode fornecer ajuda aos colegas e instrutor.

O que voc j sabe ?


O que voc no sabe ?
Porque importante conhecer estes tpicos ?
Quais so os seus temores ?
O que voc considera difcil ?

Reflexo

aqui que voc se compromete !!

Depois de falar sobre o assunto com seus colegas e instrutor, escreva,


desenhe, rabisque, diga algo sobre o que voc vai fazer para dominar esses
tpicos. Comprometa-se!

www.grandeporte.com.br

(11) 4427-4579 (11) 9 9903-3218

Parte 6

Presentation

Histria

O ambiente mainframe

Durante o treinamento de COBOL para mainframe, voc deve aprender, alm


do COBOL, o ambiente de desenvolvimento mainframe. Por isso voc aprendeu TSO
e agora vai aprender JCL.
O conhecimento do ambiente de desenvolvimento fundamental para que voc
tenha desenvoltura para desenvolver e testar seus programas. O JCL o que mais
diferencia um desenvolvedor mainframe de outro, por exemplo da baixa plataforma.
Assim, nesta parte do treinamento voc aprender JCL. Voc precisa dela para
montar os JOBs de compilao e de execuo de seus programas. Em geral o JOB de
compilao j est pronto no ambiente e voc precisar perguntar aos colegas de
trabalho onde ele se encontra e como us-lo. J os JOBs de execuo devem ser
montados pelo programador. Saber bem o JCL ajudar a destac-lo dos demais.
Alm disso, voc aprender a usar os programas que j existem no ambiente,
desenvolvidos por outros colegas, como por exemplo um programa para verificar se o
CPF est correto, para classificar um produto, etc. No preciso reinventar a roda,
devemos aprender a chamar esses programas passando parmetros e receber deles
o resultado do processamento.

www.grandeporte.com.br

(11) 4427-4579 (11) 9 9903-3218

Parte 6

Teoria

Chamada a outros programas

Um programa COBOL pode chamar outros programas para execuo,


passando dados que podem ou no serem alterados
Esse um procedimento muito comum. Por exemplo, um programa que verifica
a consistncia do nmero do CPF feito uma nica vez e todos os programas que
precisam verificar se um nmero de CPF correto podem cham-lo, passando o
nmero e recebendo como resposta se ele correto ou no.
O Comando CALL chama outro programa para execuo. O programa que
emite o CALL o programa PRINCIPAL e o programa que executado a partir deste
CALL o SUB-PROGRAMA. O SUB-PROGRAMA no pode terminar com STOP RUN,
mas sim com um GOBACK ou EXIT PROGRAM.
A figura abaixo mostra outro exemplo de chamada de programas. Um JOB
inicializa um programa, que pode chamar sequencialmente um ou mais programas,
estes por sua vez, podem chamar outros e etc.

JOB

PGM001

VERCPF

CONFDATA

VERSPC

CALL
GOBACK

Em geral, nos ambientes de desenvolvimento, existem grandes bibliotecas de


SUB-PROGRAMAS para uso pelos programadores, objetivando a modularizao dos
sistemas, reuso de software, otimizao do desenvolvimento, etc.

www.grandeporte.com.br

(11) 4427-4579 (11) 9 9903-3218

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

Chamada por valor Neste caso o SUB-PROGRAMA recebe uma cpia do


item de dado e, mesmo que esse valor seja alterado, o programa PRINCIPAL tem
acesso apenas ao dado original. A clusula BY CONTENT no default e deve ser
informada sempre que desejarmos realizar uma chamada por valor.
CALL VERCPF USING BY CONTENT WS-DADOS-ENVIADOS
A figura abaixo ilustra a chamada a SUB-PROGRAMA passando dados por
valor.

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

(11) 4427-4579 (11) 9 9903-3218

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

CALL SUBPROG USING VAR1

VAR2

VAR2

SUB-PROGRAMA

LINKAGE
77 DADO1
77 DADO2
77 DADO3

SECTION.
PIC X(10).
PIC X(10).
PIC X(10).

PROCEDURE DIVISION USING DADO1

DADO2

DADO3.

CALL ESTTICO O SUB-PROGRAMA chamado como uma constante,


com seu nome informado entre aspas ou apstrofe. O programa PRINCIPAL e o SUBPROGRAMA fazem parte de um mesmo mdulo (LOAD MODULE), assim quando o
controle passa para o SUB-PROGRAMA ele j est na memria e as chamadas
subsequentes do SUB-PROGRAMA o encontram no ltimo estado, exceto quando o
programa chamado possui o atributo IS INITIAL no pargrafo PROGRAM-ID.
Se voc alterar e compilar o SUB-PROGRAMA, o programa principal tambm
precisar ser recompilado, pois ele tem uma cpia anterior do sub-programa. Isso
pode se tornar um problema, pois se um programa muito utilizado for sempre chamado
de forma esttica por diversos programas e precisar sofrer alterao, todos os demais
programas precisam ser recompilados. Exemplo:
----+-*A-1-B--+----2----+----3----+----4----+----5----+----6----+----7--|-+----8
*----------------------------------------------------------------*
WORKING-STORAGE
SECTION.
*----------------------------------------------------------------*
01 WS-DADOS-ENVIADOS.
XXXX
05 WS-NUMERO-CPF
PIC X(11).
XXXX
05 WS-RESULTADO
PIC X(01).
*----------------------------------------------------------------*
PROCEDURE
DIVISION.
*----------------------------------------------------------------*
050-CHAMA-PROGRAMA-CPF.
MOVE 15524514585
TO
WS-NUMERO-CPF
MOVE SPACES
TO
WS-RESULTADO
*
* O NOME DO SUB-PROGRAMA ESTA ENTRE ASPAS
*
XXXX
CALL VERCPF
USING
WS-NUMERO-CPF
WS-RESULTADO
END-CALL

www.grandeporte.com.br

(11) 4427-4579 (11) 9 9903-3218

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

A clusula END-CALL opcional.


possvel detectar a falha do CALL com a opo ON EXCEPTION, como
mostra o exemplo abaixo:
----+-*A-1-B--+----2----+----3----+----4----+----5----+----6----+----7--|-+----8
CALL PROGRAMA USING WS-DADOS
ON EXCEPTION DISPLAY FALHA NA CHAMADA AO PROGRAMA
END-CALL

GOBACK ou EXIT PROGRAM


Finaliza o SUB-PROGRAMA e devolve o controle ao PROGRAMA PRINCIPAL,
executando a prxima instruo aps o comando CALL. Exemplo:
----+-*A-1-B--+----2----+----3----+----4----+----5----+----6----+----7--|-+----8
*----------------------------------------------------------------*
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.
*----------------------------------------------------------------*
080-VERIFICA-CPF.
*----------------------------------------------------------------*
* SUPONDO QUE O CPF ESTAVA ERRADO MOVEREMOS NOK PARA LS-RESULTADO
*----------------------------------------------------------------*
MOVE NOK
TO LS-RESULTADO
GOBACK
.

Se um programa, que no foi chamado por nenhum outro programa, possuir a


instruo EXIT PROGRAM, essa instruo ser ignorada e a prxima instruo aps o
EXIT PROGRAM ser executada. J o GOBACK realmente encerra o programa, no
importando se h mais instrues no mesmo pargrafo e abaixo dele, devolvendo o
controle ao programa principal. Algumas empresas preferem usar GOBACK no lugar
de STOP RUN, fazendo com que qualquer programa possa ser chamado por outro.

www.grandeporte.com.br

(11) 4427-4579 (11) 9 9903-3218

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.

Se um programa s precisa lembrar de seu estado anterior algumas vezes, ou


seja, se ele precisa voltar ao seu estado inicial somente quando for necessrio lgica
proposta para solucionar o problema, usamos o comando CANCEL no programa
principal, retirando o SUB-PROGRAMA da memria, forando-o assim ao seu estado
inicial na prxima vez em que for chamado. Exemplo:
----+-*A-1-B--+----2----+----3----+----4----+----5----+----6----+----7--|-+----8
*----------------------------------------------------------------*
050-CHAMA-PROGRAMA-CPF.
*----------------------------------------------------------------*
MOVE 15524514585
TO
WS-NUMERO-CPF
MOVE SPACES
TO
WS-RESULTADO
MOVE VERCPF
TO
WS-PROGRAMA
*
* CANCEL USADO EM UM CALL ESTATICO
*
XXXX
CALL VERICPF
USING
WS-NUMERO-CPF
WS-RESULTADO
XXXX
CANCEL VERICPF
*
* CANCEL USADO EM UM CALL DINAMICO
*
XXXX
CALL WS-PROGRAMA
USING
WS-NUMERO-CPF
WS-RESULTADO
XXXX
CANCEL WS-PROGRAMA
.

Quando o comando CANCEL executado o espao de memria ocupado pelo


SUB-PROGRAMA liberado e se o SUB-PROGRAMA for chamado novamente ele
estar em seu estado inicial, ou seja com todos os arquivos fechados e todas as
variveis esto com os valores indicados pela clusula VALUE.
Na prtica, todo CALL seguido de seu respectivo CANCEL.

www.grandeporte.com.br

(11) 4427-4579 (11) 9 9903-3218

10

Parte 6

Teoria

Finalidade do jcl

Para que um programa seja executado no mainframe necessrio escrever um


JOB (servio) utilizando a JCL Job Control Language (Linguagem de Controle de
Servios). O JOB submetido execuo e encaminhado ao JES Job Entry
Subsystem (Subsistema de Entrada de Servios), que atribui um nmero ao JOB (Job
Id) e faz uma anlise sinttica do JCL. Se tudo estiver correto, o JES orienta o Sistema
Operacional na execuo do servio. Quando o servio encerrado, um cdigo de
retorno informado (MAXCC Maximum Condition Code) e um conjunto de
informaes organizado em arquivos e disponibilizado no SPOOL (Simultaneous
Peripheral Operations Online), com o resultado do processamento, para posterior
consulta.
Abaixo temos os valores de MAXCC
16
12
08
04
00

terminating messages
severe messages
error messages
warning messages
informational messages / success

www.grandeporte.com.br

(11) 4427-4579 (11) 9 9903-3218

Parte 6

Teoria

11

Elementos de jcl

Abaixo temos um exemplo de JOB para executar um programa que l e grava


um arquivo:
11234567892123456789312345678941234567895123456789612345678971234567898
12345678901234567890123456789012345678901234567890123456789012345678901234567890
//GPAZNN03 JOB SEUNOME,MSGCLASS=X,CLASS=C,NOTIFY=GPAZNN,TIME=(0,20)
//*****************************************************************
//STEP1
EXEC PGM=GPAZNN03
//STEPLIB DD DSN=GP.GERAL.LOADLIB,DISP=SHR
//ESTOQUE DD DSN=GP.GPAZ99.ESTOQUE,DISP=SHR
//REPOSIC DD DSN=GP.GPAZNN.REPOSIC,DISP=(NEW,CATLG,DELETE),
//
SPACE=(TRK,(1,1),RLSE),UNIT=SYSALLDA,
//
DCB=(LRECL=20,RECFM=FB,DSORG=PS,BLKSIZE=0)

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:

JOB especifica os parmetros de execuo do servio


EXEC especifica o programa que ser executado
DD
especifica os arquivos que sero lidos ou gravados e seus parmetros.
No exemplo acima, o JOB executa o programa GPAZNN03 que l o arquivo
ESTOQUE e grava o arquivo REPOSIC.

www.grandeporte.com.br

(11) 4427-4579 (11) 9 9903-3218

12

Parte 6

Teoria

Estrutura bsica de um job

Um JOB tem a seguinte disposio dos cartes JOB, EXEC e DD:


11234567892123456789312345678941234567895123456789612345678971234567898
12345678901234567890123456789012345678901234567890123456789012345678901234567890
//XXXXXXXX JOB XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
//**********************************************************************
//* COMENTARIO
//**********************************************************************
//XXXXXXXX EXEC XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
//XXXXXXXX DD XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
//XXXXXXXX DD XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
//XXXXXXXX DD XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
//XXXXXXXX EXEC XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
//XXXXXXXX DD XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
//XXXXXXXX DD XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
//XXXXXXXX EXEC XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
//XXXXXXXX DD XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
//XXXXXXXX DD XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
//XXXXXXXX DD XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

Em um JOB temos somente um carto JOB, de 1 a 255 cartes EXEC e de 1 a


1635 cartes DD para cada carto EXEC.

www.grandeporte.com.br

(11) 4427-4579 (11) 9 9903-3218

Parte 6

Teoria

13

Posicionamento de um job

Podemos dividir uma linha da JCL em quatro partes:


Colunas
01 e 02
03 a 10
12 a 15
16 a 72

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.

Regras para a codificao de um JOB:


a) necessrio um espao em branco entre o nome do carto, o operador e o
operando.
b) Toda linha JCL comea com // nas colunas 1 e 2, exceto quando vai se
inserir dados via SYSIN ou INPUT STREAM.
c) Um comentrio comea com //* nas colunas de 1 a 3.
d) Um JOB sempre comea por um carto JOB. Isso significa que a primeira
linha no pode ser comentrio.
e) Um JOB composto de pelo menos um programa. Este programa pode ser
um utilitrio do Sistema Operacional (SORT, IDCAMS, etc), um programa
desenvolvido pelo programador ou um procedimento catalogado (PROC).
f) Cada carto EXEC chamado STEP e sempre executa um utilitrio,
programa, ou PROC.
g) Cada carto EXEC possui cartes DD que indicam os arquivos necessrios
para o funcionamento do programa, utilitrio ou PROC.
h) No confundir JCL ERROR com ABEND. Um JCL ERROR um erro de
sintaxe ou indisponibilidade de recursos e o programa, utilitrio ou PROC
no executado. Um ABEND uma falha no programa que, em alguns
casos, pode at mesmo ser causado por indisponibilidade de recursos do
sistema, tais como disco (DASD) ou memria.
No invente nomes para o JOBNAME, STEPNAME ou DDNAME. Use o
padro da empresa em que estiver trabalhando.

www.grandeporte.com.br

(11) 4427-4579 (11) 9 9903-3218

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

o JOBNAME, nome do JOB. Os seis primeiros caracteres deve


ser seu UserID ou um nome padronizado, estabelecido pela rea
de produo do CPD. O JOBNAME pode ter de 1 a 8 caracteres
de tamanho e deve comear por um caractere alfabtico na
coluna 3.

JOB

Nome do carto. Obrigatrio. Deve ter um espao em branco


antes e outro depois. Deve comear na coluna 12.

ACCOUNT

Informaes de contabilizao. Este parmetro utilizado para


indicar de quem ser cobrado o servio, em outras palavras, o
tempo gasto pelo mainframe. Deve ser codificado entre
apstrofes. Cada empresa utiliza um padro.

CLASS

Define a classe que ser submetida na fila de JOBS. O sinal de


igual (=) no pode ter espao em branco antes ou depois. Podese usar letras de A at Z e dgitos de 0 a 9.

MSGCLASS

Define a classe de SYSOUT (sada) onde sero gerados todos


os arquivos de log durante o tempo que o JOB permanecer no
sistema. Pode-se usar letras de A at Z e dgitos de 0 a 9.

NOTIFY

Emite uma notificao com o MAXCC (Maximum Condition


Code) do JOB executado para o usurio indicado. Pode-se usar
&SYSUID, para utilizar o usurio logado no TSO.

www.grandeporte.com.br

(11) 4427-4579 (11) 9 9903-3218

Parte 6
TIME

15

Tempo de CPU para executar o JOB. No o tempo corrido,


mas sim o tempo que a CPU se dedica ao JOB, visto que ele
compartilha seu tempo com todos os JOBs em execuo no
Sistema Operacional. No inclui tempo de espera nas operaes
de I-O (OPEN, CLOSE, READ, WRITE, etc). O primeiro valor
minutos (de 0 a 1440) e o segundo segundos (de 1 a 59).
Codificando TIME=1440 ou TIME=NOLIMIT, dar ao JOB ou
STEP uma quantidade de tempo ilimitada. Para permitir que o
JOB ou STEP use a quantidade mxima de tempo, codifique
TIME=MAXIMUM, que permite ao JOB ou STEP executar por
357912 minutos (aproximadamente 248 dias).

Outros parmetros do JOB no obrigatrios, mas que podem aparecer nas


empresas que usam mainframe so:
PRTY

Define a prioridade do JOB na fila de execuo. PRTY=n.


Quanto menor o nmero, maior a prioridade. n varia entre 0 e 15.

REGION

Aloca espao em memria. Equivale para todos os STEPs do


JOB. O valor default (padro) 512Kbytes, outros valores
devem ser mltiplos de 512Kbytes. Exemplos: REGION=1024K,
REGION=2M. Se REGION codificada com 0K ou 0M, todo
espao disponvel alocado ao job.

MSGLEVEL

Especifica o nvel de mensagens do sistema que se deseja


imprimir. Sua Sintaxe : MSGLEVEL=(A,B), onde A pode ser 0, 1
ou 2 e B pode ser 0 ou 1. O valor default MSGLEVEL=(1,1). O
parmetro A corresponde a informaes do JCL e o B
corresponde a informaes de alocaes. Os possveis valores
so:

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

Tipo de Execuo. Pode ser:


TYPRUN=HOLD, retm o JOB na fila de entrada, aguardando
um comando do operador
TYPRUN=SCAN, verifica o JCL para detectar erros de sintaxe e
inibe a execuo do JOB.

www.grandeporte.com.br

(11) 4427-4579 (11) 9 9903-3218

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

o STEPNAME. Deve iniciar na coluna 3 e ter no mximo 8


caracteres. Tradicionalmente se utiliza o nome STEPnn, mas
pode ser qualquer nome, desde que comece por um caractere
alfabtico.

EXEC

Nome do carto. Obrigatrio. Deve ter um espao em branco


antes e outro depois. Deve comear na coluna 12.

PGM

Nome do programa ou utilitrio a ser executado no step. No


exemplo acima, GPAZ9901 um programa que dever estar na
biblioteca padro do sistema, no nosso caso a
GP.GERAL.LOADLIB. Antes de dar OPEN no programa, o
sistema ir verificar se o programa realmente existe. Em seguida
ir verificar os recursos solicitados pelos cartes DD para s
ento dar OPEN no programa e carreg-lo para a memria.

PROC

Usado no lugar de PGM, identifica a execuo de uma


procedure catalogada no arquivo particionado GP.LB.PROCLIB.

COND

Condiciona a execuo do step atual em funo do que ocorreu


nos steps anteriores; no faz sentido us-lo no primeiro step do
JOB. Seu formato :

PASSO2

COND=((CODIGO,OPERADOR,STEPNAME),EVEN/ONLY)
COND=
(0,NE,PASSO2)

no

sim

onde:
CODIGO

qualquer valor numrico entre 0 e 4095

PASSO03

www.grandeporte.com.br

(11) 4427-4579 (11) 9 9903-3218

Parte 6

17

OPERADOR GT = GREATER THAN


GE = GREATER OR EQUAL THAN
LT = LESS THAN
LE = LESS OR EQUAL THAN
EQ = EQUAL
NE = NOT EQUAL
EVEN
executa o passo MESMO QUE alguns dos passos
anteriores tenham terminado de forma anormal
(ABEND) ou emitido um return code diferente de
0.
ONLY
executa o passo SOMENTE SE um dos passos
anteriores tenham terminado de forma anormal
(ABEND) ou emitido um return code diferente de
0.
Todos os programas ao terminarem, emitem um cdigo de retorno (return
code) para o sistema operacional. Se for 0 (zero) significa que terminou com sucesso.
A lgica da codificao do COND para pular o passo (STEP), ou seja, para que o
STEP no seja executado.
No exemplo COND=(4,GT,COMPILA), se o step COMPILA terminou com
return code maior que 4, o STEP atual no ser executado. Para que o STEP seja
executado o resultado do COND tem de ser FALSO.
Alguns exemplos de COND=
(0,NE)

Pular o step atual somente se os steps anteriores terminaram


com return code igual a 0.

(4,LT)

Pular o step atual somente se todos os steps anteriores


terminaram com return code menores que 4

(4,GT,STEP1)

Pular o step atual somente se o step1 terminou com return code


maior que 4

(0,EQ,STEP5)

Pular o step atual somente se step5 terminou com return code


igual a 0

Outros parmetros do EXEC no obrigatrios, mas que podem aparecer nas


empresas que usam mainframe so:
REGION

Aloca memria para os steps individualmente. Se esse


parmetro for codificado no carto JOB, ser ignorado no carto
EXEC. Exemplos: REGION=1024K, REGION=2M. Se REGION
codificada com 0K ou 0M, todo espao disponvel alocado ao
step.

TIME

Define um limite de tempo de CPU para os steps individualmente.


Equivale ao parmetro TIME do carto JOB. O parmetro TIME
no carto JOB no anula o TIME do carto EXEC. um
acrscimo a ele.

PARM

Tambm conhecido como PARM GO, permite passar dados


diretamente para a LINKAGE SECTION do COBOL. usado em
programas parametrizados, onde um parmetro orienta o
processamento. PARM=value. Value uma string que pode ter
de 1 a 100 caracteres de tamanho, delimitado por apstrofes.

www.grandeporte.com.br

(11) 4427-4579 (11) 9 9903-3218

18

Parte 6
Exemplo:
11234567892123456789312345678941234567895123456789612345678971234567898
12345678901234567890123456789012345678901234567890123456789012345678901234567890
//STEP10
EXEC PGM=GPAZ9912,PARM=20081026

No COBOL, a LINKAGE SECTION deve conter as seguintes variveis:


----+-*A-1-B--+----2----+----3----+----4----+----5----+----6----+----7--|-+----8
......*----------------------------------------------------------------*
.......LINKAGE..................
SECTION.
......*----------------------------------------------------------------*
.......01 CAMPO-PARAMETRO.
05 CAMPO-TAMANHO
PIC S9(4) COMP.
05 CAMPO-DADO
PIC X(08).
......*----------------------------------------------------------------*
.......PROCEDURE DIVISION USING CAMPO-PARAMETRO.
......*----------------------------------------------------------------*

A primeira varivel contm o comprimento do parmetro, devendo sempre ser


PIC S9(04) COMP e a segunda o dado do parmetro em si.

Teoria

Joblib e steplib

Para se executar um programa, o sistema precisa carregar os programas


executveis (Load Modules) de algum lugar. Em nosso caso, os mdulos executveis
ficam na GP.GERAL.LOADLIB, que um arquivo particionado e o mdulo objeto um
de seus membros.
Logo abaixo do carto JOB codificamos uma JOBLIB, indicando a biblioteca
(Library ou Load) de onde devem ser carregados os programas executveis. Ele
vlido para todos os steps. Exemplo:
11234567892123456789312345678941234567895123456789612345678971234567898
12345678901234567890123456789012345678901234567890123456789012345678901234567890
//GPAZ9901 JOB ACCOUNT,MSGCLASS=X,CLASS=C,NOTIFY=GPAZ99,TIME=(0,20)
//JOBLIB
DD DSN=GP.GERAL.LOADLIB,DISP=SHR

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

(11) 4427-4579 (11) 9 9903-3218

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

DDNAME. o nome do arquivo colocado na frente do ASSIGN


TO no programa COBOL. Deve ter de 1 a 8 caracteres de
tamanho e comear com um caractere alfabtico.

DD

Nome do carto. Obrigatrio. Deve ter um espao em branco


antes e outro depois. Deve comear na coluna 12. DD significa
DATA DEFINITION.

DSN

DATA SET NAME, denomina o nome do arquivo catalogado.


Deve ter de 1 a 44 caracteres de tamanho, separados por um
ponto a cada 8 caracteres no mximo. Os arquivos podem ser
temporrios ou no temporrios. Todos os arquivos no
temporrios devem ter nomes de acordo com os padres da
instalao. Todos os arquivos temporrios devem ter nomes de
1 a 8 caracteres de tamanho e precedidos de &&, se omitido, o
sistema atribui um nome aleatrio, tornando-o temporrio, ou
seja, criado e removido no mesmo JOB

DISP

Informa a situao (status) do arquivo no sistema operacional.


Exemplos:
DISP=(NEW,CATLG,DELETE)
DISP=(OLD,KEEP,KEEP)
DISP=(NEW,PASS,DELETE)
DISP=SHR

www.grandeporte.com.br

(11) 4427-4579 (11) 9 9903-3218

20

Parte 6
O primeiro sub-parmetro o status do arquivo:
SHR

arquivo j existe e pode ser lido por outro programa.

OLD

arquivo j existe e de uso exclusivo do programa.

NEW

arquivo novo e ser criado neste step.

MOD

Se arquivo no existe, ele ser criado. Se j existe, de uso


exclusivo e ser acrescido de mais registros.

O segundo sub-parmetro indica a ao a ser tomada em caso de trmino


normal do step:
CATLG

Catalogar o arquivo. Obviamente que esta opo deve estar


sempre acompanhada de NEW no primeiro sub-parmetro.
Porque se o arquivo estiver sendo lido (OLD) porque j est
catalogado.

UNCATLG

Tira o arquivo do catalogo, mas no o apaga. Evite usar.

DELETE

Apaga o arquivo.

KEEP

Mantm o arquivo do que jeito que estava antes.

PASS

indica que o arquivo temporrio e ser passado aos steps


subsequentes.

O terceiro sub-parmetro indica a ao a ser tomada em caso de trmino


anormal do step. Quando no informado, assume o valor do segundo sub-parmetro:
CATLG

Catalogar o arquivo. Obviamente que esta opo deve estar


sempre acompanhada de NEW no primeiro sub-parmetro.
Porque se o arquivo estiver sendo lido (OLD) porque j est
catalogado.

UNCATLG

Tira o arquivo do catalogo, mas no o apaga. Evite usar.

DELETE

Apaga o arquivo.

KEEP

Mantm o arquivo do jeito que estava antes.

Se o arquivo de entrada (OLD ou SHR) no precisa especificar demais


parmetros, pois naturalmente j est catalogado e o sistema saber encontr-lo. Se
for de sada voc dever usar os demais parmetros do exemplo PRDSEQF.

www.grandeporte.com.br

(11) 4427-4579 (11) 9 9903-3218

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

Especifica o espao que o sistema deve alocar para o arquivo


novo que est sendo gravado em disco. Se no houver o espao
solicitado o JOB ser cancelado. O formato geral :
SPACE=(TRK,(PRIM,SEC,DIR),RLSE,CONTIG,ROUND)
TRK espao alocado em trilhas (47.476 bytes no disco modelo
3380 ou 56.664 bytes no modelo 3390). Tambm pode ser CYL,
espao alocado em cilindros (712.140 bytes no modelo 3380 ou
849.960 no modelo 3390) ou um nmero que indica o tamanho
de um bloco de registros. Observe que 1 CYL = 15 TRK.
PRIM = Quantidade primria de alocao.
SEC = Quantidade secundria de alocao, tambm conhecida
como extends.
DIR = Quantidade em unidades de blocos de 256 bytes (pouco
usado).

Disco IBM 350


Apresentado em 13/09/1956
Pilha de 40 discos de 24 polegadas
Capacidade 4,4 Megabytes
Aluguel anual de US$ 35.000,00

RLSE = Libera o espao no utilizado.


CONTIG = Solicita que o espao primrio seja alocado apenas
em trilhas e cilindros contguos (pouco usado).
ROUND = Arredonda para nmero inteiro de cilindros, e aloca
em cilindros, quando o espao solicitado em blocos (pouco
usado).

www.grandeporte.com.br

(11) 4427-4579 (11) 9 9903-3218

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.

IBM 3390 DASD

www.grandeporte.com.br

(11) 4427-4579 (11) 9 9903-3218

Parte 6

23

VOL=SER=

Especifica o nmero de srie do volume (DASD) onde o arquivo


(DATA SET) est ou ser localizado.

UNIT

Especifica o tipo de dispositivo onde o arquivo ser criado.


Geralmente disco SYSDA. SYSALLDA significa que o sistema
pode procurar em todos (ALL) os dispositivos para encontrar um
com espao suficiente para o arquivo. Para arquivos em fita,
usar TAPE.

DCB

DATA CONTROL BLOCK. Indica o formato do arquivo a ser


gravado. No necessrio para arquivos a serem lidos, pois o
catlogo j guarda essas informaes. A ordem dos subparmetros no importa. Seus sub-parmetros so:
RECFM

Acrnimo para RECORD FORMAT, o formato do


registro. F para registros de tamanho fixo, V para
registros de tamanho varivel, B para registros blocados,
A para registros cuja primeira posio contm caractere
ASA para impressora e U para registros de tamanho
indefinido. As possveis combinaes so: F, FB, V, VB,
U, FBA e FA.

LRECL

Acrnimo para LOGIC RECORD LENGTH, o tamanho


do registro em bytes. Quando voc especifica V para o
parmetro RECFM, o valor informado deve ser o
tamanho do maior registro no arquivo mais 4 bytes.
Esses 4 bytes contm o tamanho real de cada registro de
comprimento varivel no arquivo.

DSORG

Acrnimo para DATA SET ORGANIZATION, a


organizao dos registros no arquivo. DA acesso direto
(disco), PO particionado (disco), PS fsico sequencial
(fita ou cartucho) e IS indexado sequencial (disco).

BLKSIZE

Acrnimo para BLOCK SIZE, o tamanho de um bloco


de registros. Quando omitido ou colocando 0 o sistema
calcula a blocagem ideal.

BUFNO

Acrnimo para BUFFERS NUMBER a quantidade de


buffers. O default BUFNO=5.

Exemplo:
DCB=(RECFM=FB,LRECL=100,BLKSIZE=6000,DSORG=PS)

www.grandeporte.com.br

(11) 4427-4579 (11) 9 9903-3218

24

Parte 6
SYSOUT

Direcionar as sadas para a impressora. Exemplo:


//ARQRELAT DD SYSOUT=*
//RELOCORR DD SYSOUT=Z

fila default (msgclass)

INPUT STREAM, serve para passar dados ao programa, atravs


de um arquivo, via JCL. Os caracteres /* funcionam como
delimitadores. Exemplos:
//ARQDATA DD *
20080901ANTONIO DA SILVA
20080912MARIA MOURA
20080925JOAO PEREIRA
/*
//SYSIN
DD *
20080901ANTONIO DA SILVA
20080912MARIA MOURA
20080925JOAO PEREIRA
/*

DUMMY

Ou DSN=NULLFILE, O arquivo recebe o estado de nulo. O


arquivo no existe. O primeiro read no arquivo gera file status 10
(EOF). Exemplo:
//ARQENT
//ARQSAI

DD DUMMY
DD DUMMY,SYSOUT=*,DCB=(LRECL=133)

SYSUDUMP usado para despejar o contedo de vrios registradores,


variveis e arquivos acessados no exato momento de um
termino anormal (ABEND), dentro de um arquivo ou do SPOOL.
O despejo em hexadecimal. Exemplo:
11234567892123456789312345678941234567895123456789612345678971234567898
12345678901234567890123456789012345678901234567890123456789012345678901234567890
//SYSUDUMP DD DSN=TEST.PROD.LIB

ou
//SYSUDUMP DD

SYSOUT=*

SYSABEND usado para despejar o contedo de vrios registradores,


variveis e arquivos acessados e o ncleo, no exato momento
de um termino anormal (ABEND), dentro de um arquivo ou do
SPOOL. O despejo em hexadecimal. Exemplo:
11234567892123456789312345678941234567895123456789612345678971234567898
12345678901234567890123456789012345678901234567890123456789012345678901234567890
//SYSABEND DD DSN=TEST.PROD.LIB

ou
//SYSABEND DD

SYSOUT=*

www.grandeporte.com.br

(11) 4427-4579 (11) 9 9903-3218

25

Parte 6
Concatenando arquivos (DATA SETs)

No JCL, ns podemos concatenar diferentes arquivos, informando seus


nomes um aps o outro. Todos os arquivos concatenados devem ser do
mesmo tipo. Por exemplo, arquivos particionados PDS (partitioned data set)
podem ser concatenados apenas com outros arquivos particionados. Exemplo:
11234567892123456789312345678941234567895123456789612345678971234567898
12345678901234567890123456789012345678901234567890123456789012345678901234567890
//GPAZ9901 JOB ACCOUNT,MSGCLASS=X,CLASS=C,NOTIFY=GPAZ99,TIME=(0,20)
//JOBLIB
DD DSN=GP.GERAL.LOADLIB,DISP=SHR
//PASSO01 xEXEC PGM=GPAZ9902
//PRDSEQM DD DSN=GP.GPAZ99.PRDSEQM1
//
DSN=GP.GPAZ99.PRDSEQM2
//
DSN=GP.GPAZ99.PRDSEQM3

No programa, ns vamos l-los como um nico arquivo. Os limites para


concatenao de arquivos pelo sistema operacional so:
Mximo de 255 arquivos sequenciais.
Mximo de 16 arquivos particionados.

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

(11) 4427-4579 (11) 9 9903-3218

26

Parte 6

Classifica o externa
de um arquivo

Teoria

O SORT o utilitrio para classificar (ordenar) arquivos. Abaixo temos um


exemplo de classificao de um cadastro de clientes, onde as 4 primeiras posies o
cdigo do cliente, que ser usado como critrio de classificao em ordem crescente.
11234567892123456789312345678941234567895123456789612345678971234567898
12345678901234567890123456789012345678901234567890123456789012345678901234567890
//STEPNN
EXEC PGM=SORT
//SYSPRINT DD SYSOUT=*
//SORTIN
DD DSN=GP.GPXXNN.CADCLI,DISP=SHR
//SORTOUT DD DSN=GP.GPXXNN.CADCLIS,DISP=(NEW,CATLG,DELETE),
//
SPACE=(TRK,(5,2),RLSE),UNIT=SYSALLDA,
//
DCB=(DSORG=PS,RECFM=FB,LRECL=57,BLKSIZE=0)
//SYSIN
DD *
SORT FIELDS=(01,04,CH,A)
//SYSOUT
DD SYSOUT=*

SORTIN

indica o arquivo que ser classificado (entrada)

SORTOUT

indica o arquivo que ser o resultado da classificao (sada)

SORT FIELDS

campos no registro de entrada que sero referencias para a


classificao, os parmetros auxiliares que compem este
parmetro so (PI,PF,TD,TO), onde:
PI

posio inicial do campo

PF

posio final do campo

TD

tipo do dado, podendo ser

TO

BI

binrio

PK

decimal compactado

ZD

decimal zonado

CH

caractere

tipo de ordenao, podendo ser


A

ascendente (crescente)

descendente (decrescente)

www.grandeporte.com.br

(11) 4427-4579 (11) 9 9903-3218

Parte 6

27

Practice

Reviso aos pares

Atividade

1) Verifique o fragmento de programa abaixo e indique se a


informaes abaixo so falsas (F) ou verdadeiras (V):

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

O comando CALL associado condio WIND = A provocar um erro de


compilao (faltaram as aspas)

O programa indicado no CALL associado condio WIND = A ser includo no


LOAD MODULE do programa principal na fase de linkedio do mesmo, pois se trata
de um CALL esttico.

O comando CALL associado condio WIND = B provocar um erro de


compilao (aspas no permitidas no comando CALL).

O programa indicado no CALL associado condio WIND = B ser includo no


LOAD MODULE do programa principal na fase de linkedio do mesmo, pois se trata
de um CALL esttico.

O comando CALL associado condio WIND = A um CALL dinmico e, portanto


o programa indicado ser carregado, em tempo execuo do programa principal.

O comando CALL associado condio WIND = B um CALL dinmico e, portanto


o programa indicado ser carregado, em tempo execuo do programa principal.

www.grandeporte.com.br

(11) 4427-4579 (11) 9 9903-3218

28

Parte 6

2) Associe a informao da esquerda com o carto e o argumento JCL onde ela


informada:
A
B
C
D
E
F
G
H
I
J
K
L
M
N
O
P
Q

Nome do JCL (JOB)


Contabilizao
Classe de Execuo (fila)
Classe de mensagens do sistema
Onde est o programa
Nome do step (passo)
Nome do programa
Condio para execuo do step
Parmetros para o programa
Nome da definio de dados
Nome do arquivo
Disposio (status) do arquivo
Perifrico do arquivo
Espao necessrio para o arquivo
Informaes a respeito do registro
Classe do Relatrio
Mapa da memria em caso de ABEND

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

3) Questes de entrevista. Reveze com seu colega


perguntando as questes abaixo, verifique e anote a resposta
correta.

a) Quais so os 3 tipos de cartes de comandos usados no JCL?

b) Como possvel concatenar arquivos em um JOB?

www.grandeporte.com.br

(11) 4427-4579 (11) 9 9903-3218

Parte 6

29

c) Qual a diferena entre a especificao de um DISP=OLD e DISP=SHR para um


arquivo?

d) Como fazer um comentrio no JCL?

e) Qual o propsito da palavra chave TIME em um comando JCL?

f) Como se usa a palavra chave DUMMY no JCL?

g) Qual a diferena entre o nome informado no DDname (DD) e o Data Set Name
(DSN)?

www.grandeporte.com.br

(11) 4427-4579 (11) 9 9903-3218

30

Parte 6

4) Monte o JOB abaixo conforme explicaes:


Nome do JOB = JOB00001, contabilizar para XPTO.4250. Classe de execuo = A e
classe de mensagens do sistema = Z. Imprimir somente os cartes JOB e no imprimir
as mensagens de alocao ou liberao de arquivos. Alocar 2 Mbytes para todo o job.
Notificar o usurio logado no TSO. Limitar o tempo de execuo do job para 30
segundos.
No STEP01 executar o programa = PROGRA01 passando a informao 20120101
como parmetro. O mdulo objeto do programa se encontra no arquivo particionado
AD.DC40.MODULOS.OBJETO
Arquivo de entrada = informar o arquivo AD.DC40.BRGP.UPDT.ARQENT no
DDNAME ARQENT, com acesso compartilhado.
Arquivo de sada = AD.DC40.BRPG.UPDT.ARQSAI, sequencial, fixo e blocado.
Catalogar em disco se o job terminar normalmente, caso contrrio exclu-lo,
DDNAME=ARQSAI, tamanho do registro=100, tamanho do bloco=10000, alocar 10
trilhas em primrio e 2 trilhas em secundrio liberando o espao no utilizado. A
unidade de armazenamento utilizada ser DASD071.
Arquivo de sada DDNAME=ARQRELAT em impressora, utilizar a classe do carto
JOB.

www.grandeporte.com.br

(11) 4427-4579 (11) 9 9903-3218

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

Local onde se encontra o programa:


XPTO.MODULOS.LOADPROD
Codificar no comando EXEC o parmetro COND para que esse passo
execute somente se o passo anterior (STEP0001) terminar normalmente
(return code = 0)
DSN=XPTO.PRODUTO.LSTPRECO
LRECL=200
BLKSIZE=4800
se o step terminar normalmente catalogar o arquivo
seno excluir o arquivo

www.grandeporte.com.br

(11) 4427-4579 (11) 9 9903-3218

32

Parte 6

Performance

Atividade

Projeto 5

Objetivo da Manuteno

A Chapu de Couro Indstria Brasileira S.A. solicitou uma alterao no


projeto de unificao do cadastro de clientes:
S gravar os clientes no cadastro unificado se o CPF estiver correto. Para
verificar o CPF, utilizar o sub-programa PGMAUX01.

Macro-Fluxo

CLISP

CLIRJ

GPXXNN05

CLIMG

PGMAUX01

CLIUNIF

www.grandeporte.com.br

(11) 4427-4579 (11) 9 9903-3218

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

Chamar por referncia o sub-programa PGMAUX01 de forma esttica,


passando a varivel WS-DADOS-ENVIADOS. No campo WS-CPF mover o CPF que
se deseja verificar.
Se o CPF for vlido, o campo WS-RESP conter 1, caso contrrio 0.
Os clientes com CPF invlido so desprezados e no sero gravados no
cadastro unificado, porm seus dados sero exibidos na SYSOUT conforme layout
abaixo.
Aps a chamada esttica do programa, retir-lo da memria (CANCEL),
garantido que na prxima chamada ele volte ao seu estado inicial.
Execute os passos abaixo (Lembre-se de que XXNN o seu prefixo de
usurio):
1) Pelo TSO, opo P.3.3 (Move / Copy Utility), copiar o programa GPXXNN04
para GPXXNN05.
2) Copiar tambm o JOB EXECOB04 para EXECOB05, alterando o nome do
programa (PGM=GPXXNN05) e a disposio do arquivo CLIUNIF, que j
existe, devido ao projeto 4, de DISP=NEW para DISP=OLD
3) Digite as manutenes solicitadas, compile com o job COMPCOB e elimine
os erros at obter MAXCC = 0
4) Execute o programa com o job EXECOB05. Compare o resultado com os
dos colegas.

www.grandeporte.com.br

(11) 4427-4579 (11) 9 9903-3218

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

(11) 4427-4579 (11) 9 9903-3218

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)

Orientao para processamento

Ser necessrio criar um contador para os clientes rejeitados e variveis com


mscara para exibir os dados desses clientes na WORKING-STORAGE-SECTION.
----+-*A-1-B--+----2----+----3----+----4----+----5----+----6----+----7--|-+----8
77 WS-CTREJ
PIC 9(04) COMP.
77 WS-CTREJ-F
PIC ZZZ9.
01

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).

(11) 4427-4579 (11) 9 9903-3218

36

Parte 6

e na rotina 2100-GRAVAR-CLIUNIF realizar os seguintes MOVEs quando for exibir os


dados dos clientes rejeitados:
----+-*A-1-B--+----2----+----3----+----4----+----5----+----6----+----7--|-+----8
*----------------------------------------------------------------*
2100-GRAVAR-CLIUNIF.
*----------------------------------------------------------------*
.
.
.
ELSE
COMPUTE WS-CTREJ = WS-CTREJ + 1
MOVE
MOVE
MOVE
MOVE
MOVE
MOVE
MOVE
MOVE
MOVE

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

(11) 4427-4579 (11) 9 9903-3218

Parte 6

37

A principal manuteno ocorrer no seguinte pargrafo:


Pargrafo 2100-GRAVAR-CLIUNIF
Mover o nmero do CPF do cliente para a mensagem
Chamar o sub-programa passando essa mensagem
Cancelar o sub-programa, liberando a memria
Se CPF estiver correto
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)
seno
Somar 1 ao contador de clientes rejeitados por CPF invlido
Mover os dados do cliente para as variveis com mscara
Exibir essas variveis conforme layout da SYSOUT
No pargrafo 1000-INICIALIZAR, acrescentar
Mover zero para o contador de clientes rejeitados
E no pargrafo 3000-TERMINO, acrescentar
Exibir o contador de clientes rejeitados

www.grandeporte.com.br

(11) 4427-4579 (11) 9 9903-3218

38

Parte 6

Avaliao

Ento...Como foi ?!?

Estou fera!

Fiz Certo!

Muito Bom

Bom

www.grandeporte.com.br

regular

ruim

Muito ruim

(11) 4427-4579 (11) 9 9903-3218

Parte

Algoritmo de Balance Line


A origem do simptico nome
desse algoritmo parece no ser documentada,
mas
provavelmente
deriva
do
"balanceamento" dos valores chaves uns
contra os outros que forma o corao desse
algoritmo. Vale notar que o Balance Line
mais do que um algoritmo, uma abordagem
de projeto e muitas rotinas customizadas
podem ser desenvolvidas com base nela.

Verso 2.3.5

Parte 7

Preparation

Trocando Ideias

agora que voc fala !!

Antes de iniciarmos, vamos conversar sobre os tpicos apresentados na


capa desta parte. Isso importante para que seu instrutor e seus colegas
saibam como est seu conhecimento sobre o assunto e se voc precisa ou
pode fornecer ajuda aos colegas e instrutor.

O que voc j sabe ?


O que voc no sabe ?
Porque importante conhecer estes tpicos ?
Quais so os seus temores ?
O que voc considera difcil ?

Reflexo

aqui que voc se compromete !!

Depois de falar sobre o assunto com seus colegas e instrutor, escreva,


desenhe, rabisque, diga algo sobre o que voc vai fazer para dominar esses
tpicos. Comprometa-se!

www.grandeporte.com.br

(11) 4427-4579 (11) 9 9903-3218

Parte 7

Presentation

Histria

O Algoritmo mais usado

importante conhecer os outros operadores aritmticos alm do COMPUTE.


H empresas que pedem para usar COMPUTE o mnimo possvel. A justificativa que
as expresses aritmticas mais complexas so difceis de entender e que quebr-las
em expresses mais simples ajuda melhor a compreender sua construo.
Agora, o algoritmo mais usado em processamento batch o BALANCE LINE. A
idia ter um arquivo com a movimentao (transaes) ocorridas ao longo do dia ou
de um perodo qualquer. Esse arquivo ordenado (classificado) e serve como base
para atualizar um cadastro (de estoque, de contas, de funcionrios, etc).
Inclusive o algoritmo mais solicitado em testes de admisso na rea de
desenvolvimento COBOL Mainframe. Assim, caro estagirio da XPTO Consultoria em
Desenvolvimento de Software, preciso domin-lo. Sab-lo de cor, ok?

www.grandeporte.com.br

(11) 4427-4579 (11) 9 9903-3218

Parte 7

Teoria

Operadores aritmticos

As instrues para efetuar clculos aritmticos em COBOL so:


ADD
SUBTRACT
MULTIPLY
DIVIDE
COMPUTE

(somar)
(subtrair)
(multiplicar)
(dividir)
(calcular)

Todos possuem a opo ROUNDED, ON SIZE ERROR e END-terminador.

ROUNDED Para obter resultados arredondados, a opo ROUNDED pode


ser especificada em qualquer instruo aritmtica. Em todos os casos, ela vem
imediatamente aps o nome da varivel de resultado. O COBOL faz um
arredondamento clssico para o resultado da instruo aritmtica (valores menores
que 5 so truncados, e os maiores so arredondados para cima).
Exemplo:
----+-*A-1-B--+----2----+----3----+----4----+----5----+----6----+----7--|-+----8
ADD WS-VALOR TO WS-ACUMULADOR ROUNDED
ADD 3.14159 TO WS-CTIMP WS-CTLINHA ROUNDED

ON SIZE ERROR Quando a varivel que recebe o resultado da operao


aritmtica no tem tamanho suficiente para conter o resultado, o COBOL trunca o
valor resultante (o valor perde algarismos esquerda), e o COBOL no emite avisos
ou cdigo de erro. Para que se possa detectar esta situao necessrio codificar na
instruo aritmtica a clausula ON SIZE ERROR, onde podemos colocar uma
mensagem de erro, parar o programa ou desviar para um pargrafo especial de
tratamento de erro. Exemplo:
----+-*A-1-B--+----2----+----3----+----4----+----5----+----6----+----7--|-+----8
ADD WS-VALOR TO WS-ACUMULADOR
ON SIZE ERROR
DISPLAY ESTOUROU A VARIAVEL WS-ACUMULADOR
MOVE S TO WS-FLAG-ERRO
END-ADD

END-terminador Visando permitir uma programao estrutura, todas as


instrues aritmticas do COBOL permitem terminador de escopo. Exemplo:
----+-*A-1-B--+----2----+----3----+----4----+----5----+----6----+----7--|-+----8
END-ADD
END-SUBTRACT
END-MULTIPLY
END-DIVIDE
END-COMPUTE

www.grandeporte.com.br

(11) 4427-4579 (11) 9 9903-3218

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

Todas as constantes e variveis que so parte da adio devem ser numricos.


Aps o TO ou GIVING deve vir uma varivel e no uma constante. No mximo duas
variveis devero anteceder a palavra GIVING. Ao usar TO, o contedo inicial da
varivel de resultado, que deve ser numrico, somado junto ao dos outros campos
(varivel ou constante).
Ao usar o formato GIVING, a varivel de resultado receber a soma, mas seu
contedo inicial no ser parte da instruo ADD. Depois da palavra GIVING, contudo,
o campo pode ser um item de relatrio, ou seja, pode possuir mscara de edio.
Exemplo:
----+-*A-1-B--+----2----+----3----+----4----+----5----+----6----+----7--|-+----8
ADD 365 TO WS-TEMPO GIVING WS-RESULTADO
ADD WS-VALOR TO WS-ACUMULADO GIVING LD-TOTAL
ADD WS-DEBITO TO WS-CREDITO GIVING WS-SALDO WS-RESULT
ADD WS-VAL1 WS-VAL2 TO WS-TOTAL
GIVING WS-SOMA-FINAL ROUNDED
ON SIZE ERROR
DISPLAY ERRO NO TAMANHO DA VARIAVEL WS-SOMA-FINAL
DISPLAY CONTATE O ANALISTA RESPONSAVEL
GO TO 9000-ERRO
END-ADD

Abaixo exemplos de ADD e o equivalente com COMPUTE.


----+-*A-1-B--+----2----+----3----+----4----+----5----+----6----+----7--|-+----8
ADD A TO B
COMPUTE B = B + A
ADD A TO B C
COMPUTE B = B + A
COMPUTE C = C + A
ADD A B TO C
COMPUTE C = C + A + B
ADD A TO B GIVING C D
COMPUTE C = A + B
COMPUTE D = A + B

www.grandeporte.com.br

(11) 4427-4579 (11) 9 9903-3218

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

Duas ou mais variveis ou constantes podem ser subtradas da varivel de


resultado. O GIVING direciona o resultado para uma varivel de resultado.
Todas as constantes e variveis que so parte da instruo SUBTRACT devem
ser numricos. Depois da palavra GIVING, contudo, o campo pode ser um item de
relatrio. ou seja, pode possuir mscara de edio. Aps FROM ou GIVING, deve
ser usada uma varivel, e no uma constante.
Ao usar o formato GIVING, a varivel de resultado receber o resultado da
subtrao, mas seu contedo inicial no ser parte da instruo SUBTRACT.
Abaixo exemplo de SUBTRACT e o equivalente com COMPUTE.
----+-*A-1-B--+----2----+----3----+----4----+----5----+----6----+----7--|-+----8
SUBTRACT A FROM B
COMPUTE B = B A
SUBTRACT A B FROM C
COMPUTE C = C A B
SUBTRACT A B FROM C GIVING D E
COMPUTE D = C A - B
COMPUTE E = C A - B

www.grandeporte.com.br

(11) 4427-4579 (11) 9 9903-3218

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

(11) 4427-4579 (11) 9 9903-3218

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

Depois da palavra GIVING, contudo, o campo pode ser um item de relatrio. ou


seja, pode possuir mscara de edio.

Abaixo exemplo de MULTIPLY e o equivalente com COMPUTE.


----+-*A-1-B--+----2----+----3----+----4----+----5----+----6----+----7--|-+----8
MULTIPLY A BY B
COMPUTE B = B * A
MULTIPLY A BY B GIVING C
COMPUTE C = A * B
MULTIPLY A BY
COMPUTE C = A
COMPUTE D = A
COMPUTE E = A

B
*
*
*

GIVING C D E
B
B
B

www.grandeporte.com.br

(11) 4427-4579 (11) 9 9903-3218

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

Para comparao, a frmula de Bskara para determinar as razes de uma


equao de 2 grau :
=

2 4
2

Com compute, o clculo de uma das razes fica:


----+-*A-1-B--+----2----+----3----+----4----+----5----+----6----+----7--|-+----8
COMPUTE X = ((-1) * B + (B ** 2 4 * A * C) ** 0,5)) /
(2 * A)

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

(1296 13824). 17,5 1908029761


(36 24). 17,5 209
12.17,5 209 = 210 109 = 1

www.grandeporte.com.br

(11) 4427-4579 (11) 9 9903-3218

Parte 7

Teoria

11

Uso de flags (nivel 88)

O uso de flags muito comum na programao COBOL e ela implementada


com o nvel 88 seguido de um nome de condio.
Um nome de condio uma palavra definida pelo usurio, estabelecida na
DATA DIVISION, dando um nome a um valor especfico que pode ser assumido por
um identificador. Por exemplo:
----+-*A-1-B--+----2----+----3----+----4----+----5----+----6----+----7--|-+----8
WORKING-STORAGE
SECTION.
01 WS-ESTADO-CIVIL
PIC X(01).
88 SOLTEIRO
VALUE S.
88 CASADO
VALUE C.
88 DIVORCIADO
VALUE D.
88 VIUVO
VALUE V.

Quando a varivel WS-ESTADO-CIVIL for igual a S, chamamos essa


condio de SOLTEIRO. O item de nvel 88 no o nome de uma varivel, mas o
nome de uma condio. Refere-se especificamente ao item elementar
imediatamente precedente. SOLTEIRO um nome de condio aplicado a varivel
WS-ESTADO-CIVIL, uma vez que WS-ESTADO-CIVIL imediatamente precedente
ao item de nmero 88.
O nome de condio sempre codificado no nvel 88 e tem apenas uma
clusula VALUE associada a ele. Como o nome de condio no um nome de
campo, ele no tem uma clusula PICTURE.
Ento no lugar de testar a varivel WS-ESTADO-CIVIL contra um contedo,
por exemplo S, como mostra o cdigo abaixo:
----+-*A-1-B--+----2----+----3----+----4----+----5----+----6----+----7--|-+----8
XXXXXXXXXXXIF WS-ESTADO-CIVIL = S
DISPLAY O ESTADO CIVIL EH SOLTEIRO
END-IF

Podemos testar diretamente o nome da condio, como mostra o cdigo


abaixo:
----+-*A-1-B--+----2----+----3----+----4----+----5----+----6----+----7--|-+----8
XXXXXXXXXXXIF SOLTEIRO
DISPLAY O ESTADO CIVIL EH SOLTEIRO
END-IF

www.grandeporte.com.br

(11) 4427-4579 (11) 9 9903-3218

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

E o mesmo cdigo com o uso de flag.


----+-*A-1-B--+----2----+----3----+----4----+----5----+----6----+----7--|-+----8
WORKING-STORAGE
SECTION.
01 WS-COR-CABELO
PIC X(01).
88 CASTANHO
VALUE C.
88 PRETO
VALUE P.
88 LOIRO
VALUE L.
*----------------------------------------------------------------*
PROCEDURE
DIVISION.
*----------------------------------------------------------------*
IF CASTANHO
DISPLAY CASTANHO
ELSE
IF PRETO
DISPLAY PRETO
ELSE
IF LOIRO
DISPLAY LOIRO
ELSE
DISPLAY OUTRO
END-IF
END-IF
END-IF

Abaixo um exemplo de cdigo com o uso de flag para a verificao do FILE


STATUS.
----+-*A-1-B--+----2----+----3----+----4----+----5----+----6----+----7--|-+----8
WORKING-STORAGE
SECTION.
77 WS-MSG01
PIC X(60)
VALUE
ERRO LEITURA CADCLI.
01 FS-CADCLI
PIC X(02).
88 FIM-ARQUIVO
VALUE 10.
88 SUCESSO
VALUE 00.
*----------------------------------------------------------------*
PROCEDURE
DIVISION.
*----------------------------------------------------------------*
020-LER-CADCLI.
READ CADCLI INTO WS-REG-CADCLI
IF SUCESSO
ADD 1
TO WS-CTLIDO
ELSE
IF NOT FIM-ARQUIVO
MOVE WS-MSG01
TO WS-MSG
MOVE FS-CADCLI
TO WS-FS
GO TO 9000-ERRO
END-IF
END-IF

www.grandeporte.com.br

(11) 4427-4579 (11) 9 9903-3218

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

(11) 4427-4579 (11) 9 9903-3218

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

(11) 4427-4579 (11) 9 9903-3218

Parte 7

Teoria

15

Arquivos com
mltiplos layouts

Arquivos complexos no podem armazenar seus dados em apenas um tipo de


registro, ento eles tem mltiplos tipos de registros. Por exemplo, registros mdicos
podem ter um tipo de registro para identificar o paciente (nome, endereo, etc), outro
tipo de registro para dados sobre o tratamento, e um terceiro tipo para informaes de
pagamento. Vamos cham-los de registros A, B e C respectivamente. Quando todos
esses tipos de registros so armazenados em um arquivo, esse arquivo possui
"multiplos tipos de registros", ou "registros redefinidos".
A - IDENTIFICAO
B - TRATAMENTO
C - PAGAMENTO

A - IDENTIFICAO
B - TRATAMENTO
C - PAGAMENTO

A - IDENTIFICAO
B - TRATAMENTO
C - PAGAMENTO

Quando um arquivo contm mltiplos tipos de registros (registros redefinidos),


frequentemente esses registros so organizados em grupos. Usando o exemplo do
arquivo mdico acima, os dados de um paciente deve consistir de um registro de
identificao do paciente (A), seguido por um registro de tratamento (B) seguido por
um registro de pagamento(C). Outro paciente poderia conter um registro de
identificao do paciente (A), seguido por 5 registros de tratamento (B), seguido por 3
registros de pagamento(C). Esses registros de paciente so frequentemente
associados atravs de um campo chave, mas algumas vezes a ordem no arquivo a
coisa que os mantm unidos.
A - IDENTIFICAO
B - TRATAMENTO
B - TRATAMENTO
B - TRATAMENTO
B - TRATAMENTO

B - TRATAMENTO
C - PAGAMENTO
C - PAGAMENTO
C - PAGAMENTO

www.grandeporte.com.br

(11) 4427-4579 (11) 9 9903-3218

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

Uma outra estrutura comum de arquivo contendo mltiplos tipos de registros


um arquivo que comea com um registro de cabealho (H=Header), digamos para
identificar o fornecedor e a data de processamento, seguido por registros de dados
(D=Data) e terminando com um registro de reboque (T=Trailer) que contm a
contagem dos registros e a soma dos campos numricos individuais. Esses totais so
frequentemente usados como uma checagem dos dados depois de um processamento,
onde a soma dos registros individuais deve ser igual ao total no registro de reboque.
H - HEADER

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

(11) 4427-4579 (11) 9 9903-3218

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

WS-REG-CADALUNO-HEADER REDEFINES WS-REG-CADALUNO.


05 FILLER
PIC X(01).
05 WS-SIGLA-SYS
PIC X(05).
05 WS-MES-ANO-REF
PIC X(06).
05 FILLER
PIC X(58).

01

WS-REG-CADALUNO-DATA REDEFINES WS-REG-CADALUNO.


05 FILLER
PIC X(01).
05 WS-CODCLI
PIC X(04).
05 WS-NOMECLI
PIC X(20).
05 WS-ENDCLI
PIC X(30).
05 WS-TELEFONE
PIC X(10).
05 FILLER
PIC X(05).

01

WS-REG-CADALUNO-TRAILER REDEFINES WS-REG-CADALUNO.


05 FILLER
PIC X(01).
05 WS-QTDE-REG
PIC 9(05).
05 FILLER
PIC X(64).

XXXX
XXXX
XXXX

XXXX
XXXX
XXXX

XXXX
XXXX

Vale notar que as variveis WS-REG-ALUNO, WS-REG-ALUNO-HEADER,


WS-REG-ALUNO-DATA e WS-REG-ALUNO-TRAILER esto todas localizados na
mesma posio na memria RAM sendo, portanto o mesmo item de dado. Quando um
dado for carregado em um desses itens de dados, todos tero o mesmo contedo. A
lgica do programa precisar decidir qual layout utilizar, dependendo do contedo de
um determinado campo, no caso WS-TIPO-REG.
Utilizamos o comando READ para ler o arquivo carregando a varivel espelho
que no foi redefinida, como mostra o cdigo abaixo:
----+-*A-1-B--+----2----+----3----+----4----+----5----+----6----+----7--|-+----8
READ CADALUNO INTO WS-REG-CADALUNO
...
IF WS-TIPO-REG NOT = H
DISPLAY ARQUIVO NAO TEM HEADER
ELSE
DISPLAY ARQUIVO TEM HEADER
END-IF

www.grandeporte.com.br

(11) 4427-4579 (11) 9 9903-3218

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

(11) 4427-4579 (11) 9 9903-3218

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

Layout dos Arquivos

www.grandeporte.com.br

(11) 4427-4579 (11) 9 9903-3218

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

(11) 4427-4579 (11) 9 9903-3218

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

(11) 4427-4579 (11) 9 9903-3218

21

22

Parte 7

Observao

Todos os produtos e servios existentes atualmente esto gravados no arquivo


PSOLD, as alteraes solicitadas esto no arquivo PSMOV e o resultado do BalanceLine deve ser gravado no arquivo PSNEW.
O arquivo PSOLD possui os trs tipos de registros Header, Data e Trailer nesta
ordem. Os registros de Data esto em ordem crescente de cdigo de produto/servio,
que a condio fundamental para realizar o Balance Line.
O arquivo PSMOV tambm possui Header, Data e Trailer, com os registros de
Data em ordem crescente de cdigo de produto/servio. H no registro de Data o
campo TIPOMOV-M com o tipo de movimento:
I Indica que o produto/servio ser includo no PSNEW. Ento esse
produto/Servio no pode existir no PSOLD.
E Indica que o produto/servio existente no PSOLD no ser gravado no
PSNEW.
A Indica que o produto/servio existente no PSOLD ter seus dados
alterados (com exceo do CODPS-O) com base no arquivo PSMOV.
O programa precisa garantir que os arquivos PSOLD e PSMOV tenham o
primeiro registro HEADER, a partir do segundo registro DATA e o ltimo registro
TRAILER.
O processamento deve ocorrer at que seja lido o registro de trailer dos
arquivos de entrada (INPUT) PSOLD e PSMOV.

www.grandeporte.com.br

(11) 4427-4579 (11) 9 9903-3218

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).

(11) 4427-4579 (11) 9 9903-3218

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

WS-REG-PSOLD-HEADER REDEFINES WS-REG-PSOLD.


05 FILLER
PIC X(01).
05 WS-SIGLA-SYS-O
PIC X(05).
05 WS-ANO-MES-REF-O
PIC X(06).
05 FILLER
PIC X(31).

01

WS-REG-PSOLD-DATA REDEFINES WS-REG-PSOLD.


05 FILLER
PIC X(01).
05 WS-CODPS-O
PIC X(05).
05 WS-DESCPS-O
PIC X(30).
05 WS-VALORPS-O
PIC 9(05)V99.

01

WS-REG-PSOLD-TRAILER REDEFINES WS-REG-PSOLD.


05 FILLER
PIC X(01).
05 WS-QTD-REG-O
PIC 9(05).
05 FILLER
PIC X(37).

*--------------------------------------------------------------*
01

WS-REG-PSMOV.
05 WS-TIPO-REGISTRO-M
05 FILLER

PIC X(01).
PIC X(43).

01

WS-REG-PSMOV-HEADER REDEFINES WS-REG-PSMOV.


05 FILLER
PIC X(01).
05 WS-SIGLA-SYS-M
PIC X(05).
05 WS-ANO-MES-REF-M
PIC X(06).
05 FILLER
PIC X(32).

01

WS-REG-PSMOV-DATA REDEFINES WS-REG-PSMOV.


05 FILLER
PIC X(01).
05 WS-CODPS-M
PIC X(05).
05 WS-DESCPS-M
PIC X(30).
05 WS-VALORPS-M
PIC 9(05)V99.
05 WS-TIPOMOV-M
PIC X(01).

01

WS-REG-PSMOV-TRAILER REDEFINES WS-REG-PSMOV.


05 FILLER
PIC X(01).
05 WS-QTD-REG-M
PIC 9(05).
05 FILLER
PIC X(38).

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

(11) 4427-4579 (11) 9 9903-3218

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

OPEN INPUT PSOLD


IF NOT SUCESSO-O
MOVE "ERRO ABERTURA PSOLD"
MOVE FS-PSOLD
GO TO 9000-ERRO
END-IF

TO WS-MSG
TO WS-FS

OPEN INPUT PSMOV


IF NOT SUCESSO-M
MOVE "ERRO ABERTURA PSMOV"
MOVE FS-PSMOV
GO TO 9000-ERRO
END-IF

TO WS-MSG
TO WS-FS

OPEN OUTPUT PSNEW


IF NOT SUCESSO-N
MOVE "ERRO ABERTURA PSNEW"
MOVE FS-PSNEW
GO TO 9000-ERRO
END-IF

TO WS-MSG
TO WS-FS

www.grandeporte.com.br

(11) 4427-4579 (11) 9 9903-3218

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

IF WS-TIPO-REGISTRO-O NOT = "H"


MOVE "PSOLD NAO TEM HEADER" TO WS-MSG
MOVE FS-PSOLD
TO WS-FS
GO TO 9000-ERRO
END-IF
PERFORM 1500-LER-PSOLD
IF WS-TIPO-REGISTRO-O NOT = "D"
MOVE "PSOLD NAO TEM DATA"
TO WS-MSG
MOVE FS-PSOLD
TO WS-FS
GO TO 9000-ERRO
END-IF
PERFORM 1600-LER-PSMOV
IF FIM-ARQ-M
MOVE "PSMOV VAZIO"
MOVE FS-PSMOV
GO TO 9000-ERRO
END-IF

TO WS-MSG
TO WS-FS

IF WS-TIPO-REGISTRO-M NOT = "H"


MOVE "PSMOV NAO TEM HEADER" TO WS-MSG
MOVE FS-PSMOV
TO WS-FS
GO TO 9000-ERRO
END-IF
PERFORM 1600-LER-PSMOV
IF WS-TIPO-REGISTRO-M NOT = "D"
MOVE "PSMOV NAO TEM DATA"
TO WS-MSG
MOVE FS-PSMOV
TO WS-FS
GO TO 9000-ERRO
END-IF
.
1500-LER-PSOLD.
READ PSOLD INTO WS-REG-PSOLD
IF SUCESSO-O
ADD 1 TO WS-CTLIDO-O
IF WS-TIPO-REGISTRO-O = "T"
MOVE HIGH-VALUES
TO
END-IF
ELSE
IF FIM-ARQ-O
IF WS-CTLIDO > 0
MOVE "PSOLD SEM TRAILER"
TO
MOVE FS-PSOLD
TO
GO TO 9000-ERRO
END-IF
ELSE
MOVE "ERRO LEITURA PSOLD" TO
MOVE FS-PSOLD
TO
GO TO 9000-ERRO
END-IF
END-IF
.

www.grandeporte.com.br

WS-CODPS-O

WS-MSG
WS-FS

WS-MSG
WS-FS

(11) 4427-4579 (11) 9 9903-3218

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

(11) 4427-4579 (11) 9 9903-3218

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

(11) 4427-4579 (11) 9 9903-3218

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

(11) 4427-4579 (11) 9 9903-3218

30

Parte 7

JOB de Execuo

Os arquivos de entrada PSOLD e PSMOV esto com o prefixo do seu instrutor,


j o arquivo de sada PSNEW est com o prefixo de seu usurio.
11234567892123456789312345678941234567895123456789612345678971234567898
12345678901234567890123456789012345678901234567890123456789012345678901234567890
//GPXXNN06 JOB SEUNOME,CLASS=A,MSGCLASS=X,NOTIFY=GPXXNN,TIME=(0,20)
//*******************************************************************
//STEP001 EXEC PGM=GPXXNN06
//STEPLIB DD DSN=GP.GERAL.LOADLIB,DISP=SHR
//PSOLD
DD DSN=GP.GPXX99.PSOLD,DISP=SHR
//PSMOV
DD DSN=GP.GPXX99.PSMOV,DISP=SHR
//PSNEW
DD DSN=GP.GPXXNN.PSNEW,DISP=(OLD,CATLG,DELETE),
//
SPACE=(TRK,(1,1),RLSE),UNIT=SYSALLDA,
//
DCB=(LRECL=42,RECFM=FB,DSORG=PS,BLKSIZE=0)

www.grandeporte.com.br

(11) 4427-4579 (11) 9 9903-3218

Parte 7

31

Practice

Reviso aos pares

Atividade

1) Considere os seguintes trechos de determinado


programa. Que valor ser exibido pelo comando
DISPLAY? Preencha a tabela de variveis (adiante) com
todos os valores assumidos por cada uma delas:

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.

Valores assumidos por cada varivel:


Valores

Variveis
COD-ENT-CD
COD-EMP-CD
IND
QUO-EMP-CD
RES-EMP-CD

O valor exibido no comando DISPLAY :

www.grandeporte.com.br

(11) 4427-4579 (11) 9 9903-3218

32

Parte 7

2) Utilizando os comandos aritmticos ADD, SUBTRACT, MULTIPLY e DIVIDE,


escreva a expresso aritmtica equivalente a cada um dos COMPUTE abaixo:
a) COMPUTE A = A + B

b) COMPUTE C = A + 7

c) COMPUTE C = A B 5

d) COMPUTE C = A / B

e) COMPUTE C = A * B

3) Dada as expresses aritmticas abaixo, escreva o comando COMPUTE equivalente.


a)

= 9 ( 32)

b)

= 745.6999

c)

d)

= ( )( )( )

++
2

www.grandeporte.com.br

(11) 4427-4579 (11) 9 9903-3218

Parte 7

Atividade

33

Trabalho em dupla

3) Monte nomes de condies (nvel 88 flags)


para o a varivel WS-GRAU-DE-INSTRUCAO que
numrica PIC 9(01) e pode assumir os seguintes valores:
0 Maternal
1 Ensino Fundamental I
2 Ensino Fundamental II
3 Ensino Mdio
4 Ensino superior
5 Especializao
6 Mestrado
7 Doutorado
8 Ps-Doutorado

WORKING-STORAGE

www.grandeporte.com.br

SECTION.

(11) 4427-4579 (11) 9 9903-3218

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

(11) 4427-4579 (11) 9 9903-3218

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

(11) 4427-4579 (11) 9 9903-3218

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

Layout da Mensagem passada a PGMAUX02

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

Chamar o programa PGMAUX02 de forma DINMICA, ou seja, carregar o


nome do programa na varivel WS-PROGRAMA PIC X(08).

www.grandeporte.com.br

(11) 4427-4579 (11) 9 9903-3218

Parte 7

37

Layout dos Arquivos

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

(11) 4427-4579 (11) 9 9903-3218

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

Orientao para processamento


Pargrafo Principal (0000-GPAZNN06)
Executar o pargrafo 1000-INICIALIZAR
Executar o pargrafo 2000-PROCESSAR
at que WS-TIPO-REGISTRO-O = T E
WS-TIPO-REGISTRO-M = T
Executar o pargrafo 3000-TERMINO
Pargrafo 1000-INICIALIZAR
Receber o horrio inicial de processamento
Mover zero para os contadores:
cadastros lidos CLIOLD
movimentos lidos CLIMOV
cadastros gravados CLINEW
cadastros includos
cadastros excludos
cadastros alterados
cadastros invlidos
movimentos invlidos
Abrir para leitura 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)
Abrir para leitura 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)
Abrir para gravao 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)
www.grandeporte.com.br

(11) 4427-4579 (11) 9 9903-3218

Parte 7

39

Ler o primeiro registro do arquivo CLIOLD (1100-LER-CLIOLD)


Se o arquivo estiver vazio (file status = 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)
Se o primeiro registro no for Header (H)
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 segundo registro do arquivo CLIOLD (1100-LER-CLIOLD)
Se chegou no fim do arquivo (file status = 10) OU
o segundo registro no for Data (D)
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 CLIMOV (1200-LER-CLIMOV)
Se o arquivo estiver vazio (file status = 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)
Se o primeiro registro no for Header (H)
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 segundo registro do arquivo CLIMOV (1200-LER-CLIMOV)
Se chegou no fim do arquivo (file status = 10) OU
o segundo registro no for Data (D)
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

(11) 4427-4579 (11) 9 9903-3218

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

(11) 4427-4579 (11) 9 9903-3218

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

(11) 4427-4579 (11) 9 9903-3218

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

(11) 4427-4579 (11) 9 9903-3218

Parte 7

43

www.grandeporte.com.br

(11) 4427-4579 (11) 9 9903-3218

44

Parte 7

Avaliao

Ento...Como foi ?!?

Estou fera!

Fiz Certo!

Muito Bom

Bom

www.grandeporte.com.br

regular

ruim

Muito ruim

(11) 4427-4579 (11) 9 9903-3218

Parte

Caracteres de controle de impresso ASA

As impressoras de Mainframe usam


alguns caracteres de controle muito simples no
comeo de cada linha para controlar o
movimento do papel em uma impressora de
linha. ASA a sigla de American Standards
Association, o antigo nome da American
National Standards Institute (ANSI), que se
acredita ter sancionado esses caracteres de
controle.

Verso 2.3.5

Parte 8

Preparation

Trocando Ideias

agora que voc fala !!

Antes de iniciarmos, vamos conversar sobre os tpicos apresentados na


capa desta parte. Isso importante para que seu instrutor e seus colegas
saibam como est seu conhecimento sobre o assunto e se voc precisa ou
pode fornecer ajuda aos colegas e instrutor.

O que voc j sabe ?


O que voc no sabe ?
Porque importante conhecer estes tpicos ?
Quais so os seus temores ?
O que voc considera difcil ?

Reflexo

aqui que voc se compromete !!

Depois de falar sobre o assunto com seus colegas e instrutor, escreva,


desenhe, rabisque, diga algo sobre o que voc vai fazer para dominar esses
tpicos. Comprometa-se!

www.grandeporte.com.br

(11) 4427-4579 (11) 9 9903-3218

Parte 8

Presentation
Histria

Relatrios ... finalmente

Relatrios...Finalmente, ns sabemos que voc no via a hora de comear a


fazer o seu. Fazer relatrios uma arte, pois alm da preocupao com a lgica de
impresso dos cabealhos, linha de detalhe e rodap, h tambm a preocupao
esttica. Em um bom relatrio fcil encontrar o que se procura, bonito de se ler, e
sempre tem o comentrio do usurio: dava para colocar esse ttulo um pouquinho
mais para a esquerda?.
uma atividade que requer muita ateno aos detalhes e pacincia nos ajustes
de layout. Portanto tenha muita certeza dos espaos em branco que voc colocar para
que o relatrio no fique desalinhado.
A XPTO Consultoria em Desenvolvimento de Software reconhecida pela
qualidade de seus relatrios, ento vamos trabalhar para que esse legado perdure.

www.grandeporte.com.br

(11) 4427-4579 (11) 9 9903-3218

Parte 8

Teoria

Tratamento de relatrio

Para o COBOL, um relatrio um arquivo. As linhas que compem um relatrio,


tais como cabealhos, detalhes, totais e rodaps so todos registros deste arquivo.
Portanto muito similar ao processamento de arquivos sequenciais. Porm, como
todos os registros gravados no relatrio so diferentes, eles precisam ser definidos
como variveis na WORKING-STORAGE SECTION.
Para que um programa COBOL possa manipular relatrio necessrio cumprir
quatro etapas:
1 Especificao do Relatrio
Um relatrio precisa ser especificado na ENVIRONMENT DIVISION, Seo
INPUT-OUTPUT SECTION, pargrafo FILE-CONTROL. A clusula SELECT faz essa
especificao, como mostra o exemplo abaixo:
----+-*A-1-B--+----2----+----3----+----4----+----5----+----6----+----7--|-+----8
*----------------------------------------------------------------*
ENVIRONMENT
DIVISION.
*----------------------------------------------------------------*
CONFIGURATION
SECTION.
*----------------------------------------------------------------*
SPECIAL-NAMES
DECIMAL-POINT IS COMMA.
*----------------------------------------------------------------*
INPUT-OUTPUT
SECTION.
*----------------------------------------------------------------*
FILE-CONTROL.
SELECT RELPROD ASSIGN TO UT-S-RELPROD
FILE STATUS IS FS-RELPROD.

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

(11) 4427-4579 (11) 9 9903-3218

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

(11) 4427-4579 (11) 9 9903-3218

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

O programa precisa controlar a mudana de pgina. Para isto o programa deve


criar uma varivel para contar linhas, que deve ser incrementada a cada comando
WRITE do relatrio. Quando esta varivel atinge o nmero de linhas disponveis na
folha, o programa deve comandar o salto para a nova folha e imprimir as linhas de
cabealho. As variveis de controle so exemplificadas abaixo:
----+-*A-1-B--+----2----+----3----+----4----+----5----+----6----+----7--|-+----8
XXXXXxX77 WS-CTLIN
PIC 9(02).
XXXXXxX77 WS-CTIMP
PIC 9(03).
XXXXxXX77 WS-CTPAG
PIC 9(02).
XXXXxXX77 WS-PULA
PIC 9(02).

www.grandeporte.com.br

(11) 4427-4579 (11) 9 9903-3218

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

WS-CABEC1 AFTER PAGE


WS-CABEC2
WS-CABEC3
WS-CABEC4

MOVE 4
.

TO WS-CTLIN

Neste exemplo foi suprimido o teste do FILE STATUS, para melhor


visualizao do WRITE.
O WS-CABEC1 precisa ser impresso no incio de cada pgina, por isso foi
utilizado a clusula AFTER PAGE, que grava o registro somente depois de ter pulado
uma pgina. As demais linhas de cabealhos devem aparecer abaixo da primeira,
ento no levam AFTER PAGE.
Observe que a data est sendo atualizada e o nmero da pgina foi
incrementado de 1. No final, como foram gravadas 4 linhas, devendo ento mover
esse valor para o contador de linha WS-CTLIN.
Abaixo temos um exemplo da impresso da linha de detalhe.
----+-*A-1-B--+----2----+----3----+----4----+----5----+----6----+----7--|-+----8
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" TO WS-MSG
MOVE FS-RELATO
TO WS-FS
GO TO 999-ERRO
END-IF
ADD 1 TO WS-CTIMP
ADD 1 TO WS-CTLIN
.

Observe que os dados foram movidos, na verdade copiados, dos campos do


arquivo de entrada para as variveis da WS-LINDET, para depois serem gravadas no
relatrio. A varivel contador de linhas (WS-CTLIN) e contador de linhas de detalhe
impressas (WS-CTIMP) so incrementadas.

www.grandeporte.com.br

(11) 4427-4579 (11) 9 9903-3218

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

Neste exemplo foi suprimido o teste do FILE STATUS, para melhor


visualizao do WRITE.
Como neste exemplo esto sendo impressos 50 linhas por pgina, veja o
layout acima, e as linhas de rodap so impressas exatamente nas linhas 49 e 50,
preciso calcular quantas linhas faltam para chegar at o final da pgina, ou seja linha
49. A varivel WS-PULA armazena esse resultado.
A figura abaixo mostra que qualquer informao gravada no relatrio
(cabealhos, detalhe e rodap) deve obrigatoriamente passar pelo registro do relatrio
(REG-RELPROD), pela opo FROM.

REG-RELPROD

RELPROD

comum haver totalizaes em vrios nveis (sub-totais, totais gerais, etc).


Estes totais so emitidos quando muda a identificao de grupo dentro dos registros
lidos. Por exemplo, em um relatrio de vendas com totais por ms, o programa deve
comparar o ms do registro lido com o ms do registro anterior para verificar se so
diferentes. Nestas mudanas de identificador de grupo (geralmente conhecidos como
QUEBRA), o programa deve emitir uma linha de total, e acertar convenientemente as
variveis de totalizao.

www.grandeporte.com.br

(11) 4427-4579 (11) 9 9903-3218

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

Quando a opo AFTER for utilizada, o COBOL primeiro executa o AFTER,


pulando N pginas ou N linhas e depois grava o registro no relatrio. Quando N for
omitido, o valor default (padro) 1.
Quando a opo BEFORE for utilizada, o COBOL primeiro grava o registro no
relatrio e depois pula N pginas ou N linhas. Tambm quando N for omitido, o valor
default 1.
A opo FROM deve ser sempre utilizada para transferir as linhas do relatrio a
serem impressas, definidas na WORKING-STORAGE SECTION, aps serem
preparadas, para o registro do arquivo de impresso.
TIPOS DE FORMULRIO CONTNUO

ZEBRADO

PR-IMPRESSO

www.grandeporte.com.br

BRANCO

(11) 4427-4579 (11) 9 9903-3218

Parte 8

11

Caracteres de controle de impresso ASA


A maioria das impressoras de Mainframe so configuradas para imprimir uma
largura fixa de 132 caracteres. Os arquivos passados impressora tm um registro
com comprimento de 133 caracteres. A razo para essa diferena de um caractere
que as impressoras de Mainframe esperam que todas as linhas sejam precedidas por
um caractere de controle.
Existem dois tipos diferentes de caracteres de controle que podem ser usados,
MACHINE e ASA, mas ASA o caractere de controle mais comumente usado. ASA
significa American Standard Association, hoje conhecida como ANSI American
National Standard Institute. Os caracteres de controle ASA controlam o movimento do
papel pela impressora a fim de determinar onde cada linha ser impressa no papel.
A seguir temos uma lista dos caracteres de controle ASA que controlam o
espaamento da prxima linha em relao ltima linha impressa: Observao
blank um espao em branco.
Caractere ASA
Blank
0
+
1

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

(11) 4427-4579 (11) 9 9903-3218

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.

Exemplo com 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
0010 PORCA SEXTAVADA
R$
2,10
1,00
10
100
0015 PORTA DE MOGNO
R$
300,50 10,15
200
0025 CAIXA DE FERRAMENTAS
R$
125,00
0150 COMPRESSOR 35 LITROS
R$
1.250,15
-------------------------------------------------------------------------------INDUSTRIAS SEUNOME S/A.
SERVIMOS BEM PARA SERVIR SEMPRE.

www.grandeporte.com.br

(11) 4427-4579 (11) 9 9903-3218

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

(11) 4427-4579 (11) 9 9903-3218

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

Nem todos os registros do arquivo ESTOQUE sero impressos, apenas


aqueles cuja quantidade em estoque esteja abaixo do limite mnimo, sendo necessrio
comprar a quantidade suficiente para atingir o limite mximo.
O relatrio RELATO possui 80 colunas e 50 linhas por pgina. So 4 linhas de
cabealho, 44 linhas de detalhe e 2 linhas de rodap.

www.grandeporte.com.br

(11) 4427-4579 (11) 9 9903-3218

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).

(11) 4427-4579 (11) 9 9903-3218

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

(11) 4427-4579 (11) 9 9903-3218

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

(11) 4427-4579 (11) 9 9903-3218

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

(11) 4427-4579 (11) 9 9903-3218

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

(11) 4427-4579 (11) 9 9903-3218

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

(11) 4427-4579 (11) 9 9903-3218

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

(11) 4427-4579 (11) 9 9903-3218

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

Rgua para formulrio contnuo

Anatomia de um
Formulrio contnuo

com escala em sextos (linhas) e dcimos (colunas) de polegadas

Parte 8

(11) 4427-4579 (11) 9 9903-3218

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

(11) 4427-4579 (11) 9 9903-3218

24

Parte 8

Practice

Atividade

Reviso aos pares

1) O relatrio abaixo possui 50 linhas por pgina.


Associe os componentes indicados no relatrio com a
coluna da direita.

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

(
(
(
(
(

) Microserrilha
) Rodap
) Remalina
) Cabealho
) Detalhe

www.grandeporte.com.br

(11) 4427-4579 (11) 9 9903-3218

Parte 8

Atividade

25

Trabalho em dupla

1) Com base na imagem do relatrio da atividade


anterior, determine o que fazer com as variveis?

a) Varivel WS-CTPAG na rotina de Cabealho.

b) Varivel WS-CTLINHA na rotina de impresso de Cabealho.

c) Varivel WS-CTLINHA na rotina de impresso de Linha de Detalhe.

d) Varivel WS-CTLINHA na rotina de impresso de Rodap.

e) Varivel WS-PULA na rotina de impresso de Rodap.

www.grandeporte.com.br

(11) 4427-4579 (11) 9 9903-3218

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

(11) 4427-4579 (11) 9 9903-3218

Parte 8

27

Layout dos Arquivos

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

(11) 4427-4579 (11) 9 9903-3218

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

(11) 4427-4579 (11) 9 9903-3218

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

** BOX COMPANY DO BRASIL **

HH:MM:SS

WS-CABEC2, que contm as variveis

WS-REF-CABEC2
RELATORIO DE MOVIMENTACAO DE ESTOQUE

WS-PAG-CABEC2

(REFERENCIA 9999/99)

WS-CABEC3, que contm 80 traos -


WS-CABEC4, que contm os ttulos das colunas
WS-CABEC5, que contm traos - sobre as colunas

Vou fazer
direito.
Eu
prometo!

www.grandeporte.com.br

(11) 4427-4579 (11) 9 9903-3218

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

WS-RODAPE1, que contm 80 traos


WS-RODAPE2, Que contm uma frase

Ao carregar data e hora pela rotina de inicializao, garantimos que em todas


as pginas do relatrio teremos a mesma data e hora. Isso crtico quando os
relatrios so longos e impressos prximos meia-noite.

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 GPXXNN07 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 EXECOB07 em sua
JOBLIB, monte o JOB de forma que o arquivos de entrada (MOVTOEST)
sejam lidos com o prefixo de seu instrutor (XX99) e o relatrio ser
impresso na classe de mensagem do JOB.
5) Execute o programa com o job EXECOB07. Compare o resultado com os
dos colegas.

www.grandeporte.com.br

(11) 4427-4579 (11) 9 9903-3218

Parte 8

31

Orientao para processamento

Pargrafo Principal (0000-GPAZNN07)


Executar o pargrafo 1000-INICIALIZAR
Executar o pargrafo 2000-PROCESSAR
at que WS-TIPO-REG-MOVTO = T
Executar o pargrafo 3000-TERMINO
Encerrar o programa
Pargrafo 1000-INICIALIZAR
Receber o horrio inicial de processamento
Receber a data do sistema
Mover zero para os contadores:
registros lidos
pgina
registros impressos
Mover 99 para o contador de linha
Abrir para leitura 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)
Ler o primeiro registro do MOVTOEST (1100-LER-MOVTOEST)
Se file status for igual a 10 (fim do 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)
Se WS-TIPO-REG-MOVTO no for H (Header)
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)
Salvar em varivel o ano e ms de referencia do registro de Header
Abrir para gravao 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)

www.grandeporte.com.br

(11) 4427-4579 (11) 9 9903-3218

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

(11) 4427-4579 (11) 9 9903-3218

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

(11) 4427-4579 (11) 9 9903-3218

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

(11) 4427-4579 (11) 9 9903-3218

Parte 8

35

www.grandeporte.com.br

(11) 4427-4579 (11) 9 9903-3218

36

Parte 8

Avaliao

Ento...Como foi ?!?

Estou fera!

Fiz Certo!

Muito Bom

Bom

www.grandeporte.com.br

regular

ruim

Muito ruim

(11) 4427-4579 (11) 9 9903-3218

Parte

VSAM (Virtual Storage Access Method)


um sistema de gerenciamento de arquivos
introduzido pela IBM nos anos de 1970 como
parte dos sistemas operacionais da poca. Embora
atualmente existam outros mtodos de acesso
(no-VSAM), VSAM o principal componente dos
sistemas operacionais IBM.

Verso 2.3.5

Parte 9

Preparation

Trocando Ideias

agora que voc fala !!

Antes de iniciarmos, vamos conversar sobre os tpicos apresentados na


capa desta parte. Isso importante para que seu instrutor e seus colegas
saibam como est seu conhecimento sobre o assunto e se voc precisa ou
pode fornecer ajuda aos colegas e instrutor.

O que voc j sabe ?


O que voc no sabe ?
Porque importante conhecer estes tpicos ?
Quais so os seus temores ?
O que voc considera difcil ?

Reflexo

aqui que voc se compromete !!

Depois de falar sobre o assunto com seus colegas e instrutor, escreva,


desenhe, rabisque, diga algo sobre o que voc vai fazer para dominar esses
tpicos. Comprometa-se!

www.grandeporte.com.br

(11) 4427-4579 (11) 9 9903-3218

Parte 9

Presentation

Histria

OUTROS TIPOS DE ARQUIVOS?

At agora, todos os projetos que voc desenvolveu utilizou arquivos QSAM


(Queued Storage Access Method), onde os arquivos mantm seus registros
organizados sequencialmente, o que permite apenas o acesso sequencial aos
mesmos. Assim, uma vez comeada a leitura dos registros, s se pode ler o prximo
registro, sem pular a sequencia.
Mas existem outras formas de organizar os registros em um arquivo. isso que
vamos aprender nesta parte. VSAM uma dessas formas, onde os registros podem
ser organizados em arquivos de forma sequencial, indexada ou relativa.
Apesar dos novos sistemas de informao desenvolvidos em mainframe terem
seus dados armazenados em sistemas gerenciadores de bancos de dados (SGBD),
tais como o DB2, ainda h muitos sistemas legados que utilizam arquivos VSAM. Por
isso importante conhecer essa forma de armazenar registros.

www.grandeporte.com.br

(11) 4427-4579 (11) 9 9903-3218

Parte 9

Arquivos vsam

Teoria

VSAM um acrnimo para Virtual Storage Access Method. um mtodo de


acesso para arquivos armazenados em disco. No Mainframe, os discos so
conhecidos pelo acrnimo DASD, que significa Direct Access Storage Device. A
organizao fsica dos arquivos VSAM difere consideravelmente das outras usadas
por outros mtodos de acesso. Existem trs principais tipos de organizao fsica para
os arquivos VSAM:

EOF

0900MARTELO

0800PREGO

0700CADEADO

0500PORTA

0600FECHADURA

0400JANELA

0300ARRUELA

0200PORCA

0100PARAFUSO

BOF

VSAM ESDS (Entry Sequenced Data Set) Os registros do arquivo so


armazenados na ordem em que foram gravados, em uma sequncia, um aps o outro.

VSAM KSDS (Key-Sequenced Data Set) O arquivo dividido em duas


partes, ndice e dados. O ndice contm a chave principal do arquivo. Um campo ou
uma sequencia de campos formam a chave principal, utilizada para ordenar o arquivo.
Uma chave principal identifica um nico registro podendo ser, por exemplo, o cdigo
de um produto, nmero de CPF, nmero de agencia e conta de uma conta corrente,
etc. O ndice aponta para o registro na parte de dados do arquivo. o tipo de arquivo
VSAM mais utilizado nas empresas e foco de nosso curso.

INDEX

DATA

0100

0500PARAFUSO010003001000

0200

0600ARRUELAX030005001200

0300

0100PREGOXXX120015003200

0400

0200PORCAXXX001000300040

0500

0300BUCHAXXX111122223333

0600

0400CHAPAXXX000200030004

www.grandeporte.com.br

(11) 4427-4579 (11) 9 9903-3218

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

O uso de Arquivos VSAM exige sintaxe especializada em algumas partes do


COBOL que descreveremos em seguida.

Teoria

Vsam KSDS via IDCAMS

O utilitrio IDCAMS (Intergrated Data Control Access Method Service) usado


para criar, excluir, alterar e imprimir arquivos VSAM. Ao executar o IDCAMS devemos
informar via SYSIN comandos AMS, tais como DEFINE, DELETE, REPRO, PRINT, etc.
O JOB abaixo cria o arquivo VSAM KSDS chamado GP.GPXXNN.VCADPRD, que
ser usado nos prximos programas deste mdulo.
12345678911234567892123456789312345678941234567895123456789612345678971234567898
12345678901234567890123456789012345678901234567890123456789012345678901234567890
//GPXXNN11xxJOBxxSEUNOME,CLASS=A,MSGCLASS=X,NOTIFY=GPXXNN,TIME=(0,20)
//*********************************************************************
//STEP001xxxEXECxPGM=IDCAMS
//SYSPRINTxxDDxxxSYSOUT=*
//SYSINxxxxxDDxx*
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))
/*

observe que h apenas 1 espao em branco no incio de cada linha da SYSIN

www.grandeporte.com.br

(11) 4427-4579 (11) 9 9903-3218

Parte 9
Na SYSIN passado as instrues para o IDCAMS executar suas aes. A
instruo:
DELETE GP.GPXXNN.VCADPRD PURGE CLUSTER

vai tentar excluir o arquivo VSAM GP.GPXXNN.VCADPRD, pois no possvel


criar um arquivo VSAM se ele j existir. Mas a tentativa de excluir um arquivo que no
exista d erro MAXCC=8, assim a instruo:
IF

MAXCC = 8 THEN SET MAXCC=0

volta o MAXCC para zero. Na sequncia temos a definio do arquivo


CLUSTER que possui os seguintes parmetros:
NAME (GP.GPXXNN.VCADPRD)
VOL (PR39T7)
TRK (1,1)

RECORDSIZE (69,69)

KEYS (04,0)

SHAREOPTIONS (2,3)

DEFINE

nome do arquivo VSAM


nome do volume (disco) onde o VSAM ser criado
tamanho do arquivo, no caso 1 trilha na alocao
primria e 1 na secundria
tamanho mnimo e mximo do registro. Quando
so iguais, significa que o registro tem tamanho
fixo.
os quatro primeiros bytes definem a chave do
arquivo. O primeiro parmetro o tamanho da
chave e o segundo a posio inicial no registro,
comeando pela posio zero (primeira posio).
define o compartilhamento do arquivo.

O shareoptions pode assumir os seguintes valores:


primeiro parmetro: 1 = arquivo no compartilhado
2 = arquivo compartilhado
Segundo parmetro: 1 = registro no compartilhado
2 = registro compartilhado (READ)
3 = registro compartilhado (READ/WRITE)
depois temos a definio do nome dos dois componentes do arquivo VSAM
KSDS, o arquivo de ndice e o arquivo de dados.
nome do arquivo de dados
INDEX(NAME(GP.GPXXNN.VCADPRD.INDEX)) nome do arquivo de ndice
DATA(NAME(GP.GPXXNN.VCADPRD.DATA))

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

(11) 4427-4579 (11) 9 9903-3218

Parte 9

Teoria

Vsam KSDS na file-control

Na FILE-CONTROL, declaramos o arquivo VSAM KSDS da seguinte da forma:


----+-*A-1-B--+----2----+----3----+----4----+----5----+----6----+----7--|-+----8
*----------------------------------------------------------------*
ENVIRONMENT
DIVISION.
*----------------------------------------------------------------*
CONFIGURATION
SECTION.
*----------------------------------------------------------------*
SPECIAL-NAMES.
DECIMAL-POINT IS COMMA.
*----------------------------------------------------------------*
INPUT-OUTPUT
SECTION.
*----------------------------------------------------------------*
FILE-CONTROL.
SELECT VCADPRD ASSIGN TO DA-I-VCADPRD
ORGANIZATION IS INDEXED
ACCESS MODE IS SEQUENTIAL
RECORD KEY IS CODPROD-V
ALTERNATE KEY IS DESCPROD-V WITH DUPLICATES
FILE STATUS IS FS-VCADPRD.

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:

ACCESS MODE IS SEQUENCIAL para ler ou gravar


sequencialmente desde o incio do arquivo. a opo utilizada para
programas de CARGA e de impresso a partir do incio do arquivo.

ACCESS MODE IS RANDOM para ler ou gravar aleatoriamente os


registros do arquivo.

ACCESS MODE IS DYNAMIC para ler sequencialmente a partir de


um determinado registro do arquivo. Implica primeiro em localizar esse
registro desejado e depois ler a partir dele.

RECORD KEY IS CODPROD-V indica qual campo do registro a chave


principal do arquivo. Deve ser exatamente o informado para o IDCAMS no parmetro
KEYS(04,0).

www.grandeporte.com.br

(11) 4427-4579 (11) 9 9903-3218

Parte 9

ALTERNATE KEY IS DESCPROD-V WITH DUPLICATES Qualquer outro


campo do registro pode ser usado para pesquisa de registros, sendo uma chave
alternada. Pode-se acrescentar a esta clusula a declarao WITH DUPLICATES,
indicando que a pesquisa por esta chave pode conduzir a mais de um registro. O
arquivo pode ter vrias ALTERNATE KEY. Elas devem ser usada com cuidado,
porque aumentam o processamento nas atualizaes das diversas chaves do arquivo.
FILE STATUS IS FS-VCADPRD a varivel de FILE STATUS. Para
arquivos VSAM KSDS, os FILE STATUS mais importantes so:

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

(11) 4427-4579 (11) 9 9903-3218

10

Parte 9

Teoria

Vsam KSDS na file SECTION

Na FILE SECTION, declaramos o arquivo, registro e campos da


seguinte maneira:
----+-*A-1-B--+----2----+----3----+----4----+----5----+----6----+----7--|-+----8
XXXXXXXDATAXXXXXXXXXXXXXXXXXXX
DIVISION.
XXXXXXXFILEXXXXXXXXXXXXXXXXXXX
SECTION.
0,XXXXXFDxxVCADPRD
XXXXXXXXXXXRECORD CONTAINS 69 CHARACTERS
XXXXXXXXXXXDATA RECORD IS REG-VCADPRD
XXXXXXXXXXX.
01XXREG-VCADPRD.
05 CODPROD-V
PIC X(04).
05 DESCPROD-V
PIC X(20).
05 UNIDPROD-V
PIC X(05).
05 LOCALPROD-V
PIC X(05).
05 QTDEST-V
PIC 9(05).
05 QTDMAX-V
PIC 9(05).
05 QTDMIN-V
PIC 9(05).
05 PRECOCOMPRA-V
PIC 9(06)V99.
05 PRECOVENDA-V
PIC 9(06)V99.
05 PERCOMIS-V
PIC 9(02)V99.

RECORD CONTAINS 69 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-VCADPRD indica o nome do registro. uma clusula
opcional.
01 REG-VCADPRD. especifica o registro. 01 o nmero do nvel do registro.
05 CODPROD-V PIC X(04). especifica o campo. 05 o nmero do nvel do
campo, que pode ser de 02 a 49.

www.grandeporte.com.br

(11) 4427-4579 (11) 9 9903-3218

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

INPUT indica que o arquivo ser lido pelo programa. No possvel


gravar um arquivo aberto como INPUT. Abrir um VSAM, que nunca teve
registros, como INPUT causar um erro (FILE STATUS 35), pois ele
tratado como indisponvel

OUTPUT indica que o arquivo ser gravado e est vazio no momento


da abertura. No possvel ler um arquivo aberto como OUTPUT.

I-O indica que o arquivo ser lido e gravado aleatoriamente (ACCESS


MODE IS RANDOM)

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

(11) 4427-4579 (11) 9 9903-3218

12

Parte 9
2. Forma: ACCESS MODE IS RANDOM

(LEITURA DIRETA)

Antes do READ, necessrio mover para o RECORD KEY a chave do registro


que voc deseja ler. Depois s fazer o READ para ler esse registro, se existir. Se o
registro desejado no existir, o FILE STATUS ser 23. Nesta segunda forma, o
READ possui a sentena INVALID KEY, com instrues que sero executadas quando
o registro no for localizado, bem como a sentena NOT INVALID KEY, com
instrues para quando o registro for encontrado. Recomenda-se o teste do FILE
STATUS no lugar do uso do INVALID KEY. Exemplo:
----+-*A-1-B--+----2----+----3----+----4----+----5----+----6----+----7--|-+----8
XXXXXXXXXXXMOVEx0100x
TOxCODPROD-V
XXXXXXXXXXXREADXVCADPRDXINTOXWS-REG-VCADPRD

= 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

No ltimo exemplo foi utilizado a sentena KEY IS CODPROD-V. Quando for


feita a leitura direta pela chave principal, essa sentena no obrigatria, mas quando
for utilizada qualquer outra chave alternada, necessrio informar por qual campo
chave ser feita a leitura.
3. Forma: ACCESS MODE IS DYNAMIC (POSICIONA E L SEQUENCIALMENTE)
quando a leitura ser feita sequencialmente, mas a partir de um determinado
registro. O posicionamento feito com o comando START, como mostra o exemplo
abaixo.
----+-*A-1-B--+----2----+----3----+----4----+----5----+----6----+----7--|-+----8
XXXXXXXXXXXMOVEx0100x
TOxCODPROD-V
XXXXXXXXXXXSTART VCADPRD KEY IS NOT LESS CODPROD-V

Neste exemplo, posiciona-se para leitura no registro cujo campo CODPROD-V


maior ou igual (NOT LESS) 0100. Pode-se tambm utilizar EQUAL (igual) ou
GREATER. As sentenas INVALID KEY e NOT INVALID KEY tambm so possveis,
mas prefervel utilizar a varivel de FILE STATUS.

www.grandeporte.com.br

(11) 4427-4579 (11) 9 9903-3218

Parte 9

13

Na sequncia, se FILE STATUS = 00 feita a leitura, porm a sentena


NEXT utilizada para a primeira e demais leituras sequenciais. Exemplo:
----+-*A-1-B--+----2----+----3----+----4----+----5----+----6----+----7--|-+----8
XXXXXXXXXXXREADXVCADPRDXNEXTXINTOXWS-REG-VCADPRD

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

Se a comparao desejada no for EQUAL ou a chave no for a principal,


deve-se usar a sentena KEY IS seguida da comparao e do campo chave. As
sentenas INVALID KEY e NOT INVALID KEY tambm so permitidas, caso o
posicionamento encontre ou no o registro pesquisado. Exemplo:
----+-*A-1-B--+----2----+----3----+----4----+----5----+----6----+----7--|-+----8
XXXXXXXXXXXMOVEx0100x
TOxCODPROD-V
XXXXXXXXXXXSTART VCADPRD KEY IS NOT LESS 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

(11) 4427-4579 (11) 9 9903-3218

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

(11) 4427-4579 (11) 9 9903-3218

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

(11) 4427-4579 (11) 9 9903-3218

16

Parte 9

EXEMPLO

Carga vsam ksds

Objetivo do Programa

Carregar o arquivo VSAM VCADPRD com os registros do arquivo sequencial


CADPRD.

Macro-Fluxo

CADPRD

EEXXNN08

VCADPRD

Observao

Os registros do arquivo CADPRD esto em ordem crescente de CODPROD,


porm, para fins de exerccio, alguns registros esto:
fora de sequncia (FILE STATUS = 21) ou
duplicados (FILE STATUS = 22)

www.grandeporte.com.br

(11) 4427-4579 (11) 9 9903-3218

Parte 9

17

JOB de Execuo

O STEP001 cria arquivo VSAM KSDS VCADPRD usando o utilitrio IDCAMS e


o STEP002 executa o programa EEXXNN08 para dar carga no VCADPRD usando os
dados do CADPRD.
12345678911234567892123456789312345678941234567895123456789612345678971234567898
12345678901234567890123456789012345678901234567890123456789012345678901234567890
//GPXXNNE9xxJOBxxSEUNOME,CLASS=A,MSGCLASS=X,NOTIFY=GPXXNN,TIME=(0,20)
//*********************************************************************
//STEP001
EXEC PGM=IDCAMS
//SYSPRINTxxDDxxxSYSOUT=*
//SYSINxxxxxDDxx*
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 EXEC PGM=EEXXNN08
//CADPRD
DD DSN=GP.GPXX99.CADPRD,DISP=SHR
//VCADPRD DD DSN=GP.GPXX99.VCADPRD,DISP=SHR

Layout dos Arquivos

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

(11) 4427-4579 (11) 9 9903-3218

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

(11) 4427-4579 (11) 9 9903-3218

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.

(11) 4427-4579 (11) 9 9903-3218

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

OPEN INPUT CADPRD


IF FS-CADPRD NOT = "00"
MOVE "ERRO ABERTURA CADPRD"
MOVE FS-CADPRD
PERFORM 999-ERRO
END-IF

TO WS-MSG
TO WS-FS

OPEN OUTPUT VCADPRD


IF FS-VCADPRD NOT = "00"
MOVE "ERRO ABERTURA VCADPRD" TO WS-MSG
MOVE FS-VCADPRD
TO WS-FS
PERFORM 999-ERRO
END-IF
PERFORM 020-LERCADPRD
.

www.grandeporte.com.br

(11) 4427-4579 (11) 9 9903-3218

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

WRITE REG-VCADPRD FROM WS-REG-VCADPRD


EVALUATE FS-VCADPRD
WHEN "00"
ADD 1 TO WS-CTGRAV
WHEN "21"
ADD 1 TO WS-CTFORASEQ
WHEN "22"
ADD 1 TO WS-CTDUP
WHEN OTHER
MOVE "ERRO GRAVACAO PRODUTO"
TO WS-MSG
MOVE FS-VCADPRD
TO WS-FS
PERFORM 999-ERRO
END-EVALUATE
PERFORM 020-LERCADPRD
.
040-TERMINO.
DISPLAY "=================================================="
DISPLAY "TOTAL DE REGISTROS LIDOS.........: " WS-CTLIDO
DISPLAY "TOTAL DE REGISTROS GRAVADOS......: " WS-CTGRAV
DISPLAY "TOTAL DE REGISTROS DUPLICADOS....: " WS-CTDUP
DISPLAY "TOTAL DE REGISTROS FORA SEQUENCIA: " WS-CTFORASEQ
DISPLAY "=================================================="
CLOSE CADPRD
IF FS-CADPRD NOT = "00"
MOVE "ERRO FECHAMENTO CADPRD" TO WS-MSG
MOVE FS-CADPRD
TO WS-FS
PERFORM 999-ERRO
END-IF
CLOSE VCADPRD
IF FS-VCADPRD NOT = "00"
MOVE "ERRO FECHAMENTO VCADPRD" TO WS-MSG
MOVE FS-VCADPRD TO WS-FS
PERFORM 999-ERRO
END-IF

www.grandeporte.com.br

(11) 4427-4579 (11) 9 9903-3218

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

ACCEPT WS-TIME-SYS FROM TIME


MOVE WS-HORA-SYS
MOVE WS-MIN-SYS
MOVE WS-SEG-SYS

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

(11) 4427-4579 (11) 9 9903-3218

Parte 9

Atividade

23

Reviso aos pares

Responda as questes abaixo, retiradas de


entrevistas, sobre arquivos VSAM.

1 ) Qual a diferena entre os arquivos sequenciais QSAM e VSAM ESDS ?

9
2) O que acontece quando um arquivo VSAM vazio aberto como INPUT no COBOL?

3) O que IDCAMS?

www.grandeporte.com.br

(11) 4427-4579 (11) 9 9903-3218

24

Parte 9

4) Para que serve o SHAREOPTIONS do IDCAMS?

5) Quais so os tipos de arquivos VSAM?

6) Como definir um arquivos VSAM KSDS?

www.grandeporte.com.br

(11) 4427-4579 (11) 9 9903-3218

25

Parte 9

Atividade

Trabalho em dupla

Na definio do arquivo PRODUTO via IDCAMS,


do tipo VSAM KSDS, existem 7 erros. Quais so eles?

//GPXXNNKS JOB SEUNOME,


//
CLASS=A,
//
MSGCLASS=X,
//
NOTIFY=GPXXNN,
//
TIME=(0,20)
//*---------------------------------------------//STEP001
EXEC PGM=IDCAMS
//SYSPRINT DD
SYSOUT=*
//SYSIN
DD *
DELETE GP.GPXXNN.PRODUTO PARGE CLASTER
IF MAXCC = 8 THEN SET MAXCC=12
DEFINE CLASTER
(NAME (GP.GPXXNN.PRODUTO)
VOL (PR39T7)
TRK (1,1)
RECORDSIZE (20,20)
KEYS (10,0)
SHAREOPTIONS (2,3)
DATA(NAME(GP.GPXXNN.PRODUTO.DATA))
INDICE(NAME(GP.GPXXNN.PRODUTO.INDEX))

www.grandeporte.com.br

(11) 4427-4579 (11) 9 9903-3218

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

A Guitar in a Box Industries precisa de um programa para atualizar seu


cadastro de produtos com base em um arquivo de movimento, gerando um relatrio
com as ocorrncias dessa atualizao. Os arquivos envolvidos so:
VCADPRD
MOVPRD
RELOCOR

Cadastro de Produtos (VSAM KSDS)


Movimentao de produtos
Arquivo com a imagem do relatrio de ocorrncias

Macro-Fluxo

MOVPRD

GPXXNN08

VCADPRD

RELOCOR

www.grandeporte.com.br

(11) 4427-4579 (11) 9 9903-3218

Parte 9

27

Layout dos Arquivos

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

(11) 4427-4579 (11) 9 9903-3218

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

(11) 4427-4579 (11) 9 9903-3218

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

(11) 4427-4579 (11) 9 9903-3218

30

Parte 9

Observao

Atualizar o arquivo VCADPRD (VSAM KSDS) com base nos registros do


arquivo sequencial MOVPRD. Os registros do arquivo MOVPRD possuem um campo
TIPOMOVTO-M que indicam se uma incluso (I), excluso (E) ou alterao (A).
O arquivo deve ser definido como ACCESS MODE RANDOM, pois o arquivo j
possui dados e a manuteno (Incluso, Excluso e Alterao) ser feita com base no
cdigo do produto vindo do arquivo MOVPRD.
O relatrio RELOCOR gerado com as ocorrncias do processamento.
preciso saber os produtos que foram includos, excludos e os que foram alterados
dever ser impresso antes e aps a alterao. Tambm sero impressos os
movimentos invlidos.

Execute os passos abaixo (Lembre-se de que XXNN o seu prefixo de


usurio):
1) Pelo TSO, opo P.2 (Edit Entry Panel), crie o membro GPXXNN08 e digite
o programa COBOL.
2) Compile com o job COMPCOB e elimine os erros at obter MAXCC = 0
3) Copie o job EXECOB08 da JOBLIB de seu instrutor e altere XXNN pelo
prefixo de seu usurio.
4) Execute o programa com o job EXECOB08. Compare o resultado com os
dos colegas.

www.grandeporte.com.br

(11) 4427-4579 (11) 9 9903-3218

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

(11) 4427-4579 (11) 9 9903-3218

32

Parte 9

Orientao para processamento

Pargrafo Principal (0000-GPXXNN08)


Executa o pargrafo 1000-INICIALIZAR
Executa o pargrafo 2000-PROCESSAR
at que o file status do arquivo MOVPRD seja 10
Executar o pargrafo 3000-TERMINO
Encerrar o programa
Pargrafo 1000-INICIALIZAR
Receber o horrio inicial de processamento
Inicializar contadores com zero
Movimentos Lidos
Produtos Includo
Produtos Excludo
Produtos Alterado
Movimento Invlido
Linhas de Detalhe Impresso
Pgina
Inicializar com 99 o contador de linha
Abrir para leitura 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)
Abrir para gravao 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)
Abrir para leitura e gravao 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)
Ler o 1 registro do arquivo MOVPRD (1100-LER-MOVPRD)

www.grandeporte.com.br

(11) 4427-4579 (11) 9 9903-3218

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

(11) 4427-4579 (11) 9 9903-3218

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

(11) 4427-4579 (11) 9 9903-3218

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

(11) 4427-4579 (11) 9 9903-3218

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

(11) 4427-4579 (11) 9 9903-3218

Parte 9

37

Se FILE STATUS NOT = 23 AND NOT = 00 (else)


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)
Pargrafo 2400-IMPRIME-RELOCOR
Se WS-CTLINHA > 59
Executar o pargrafo 2500-IMPRIME-CABECALHO
Executar o pargrafo 2600-IMPRIME-DETALHE
Se WS-CTLINHA = 58
Executar o pargrafo 2700-IMPRIME-RODAPE
Pargrafo 2500-IMPRIME-CABECALHO
Mover a data e a hora formatada para o cabealho 1
Somar 1 ao contador de pgina
Mover o contador de pgina para o cabealho 1
gravar os 4 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 4 para o contador de linha
Lembre que o 1 cabealho deve ser AFTER PAGE
Pargrafo 2600-IMPRIME-DETALHE
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

www.grandeporte.com.br

(11) 4427-4579 (11) 9 9903-3218

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

(11) 4427-4579 (11) 9 9903-3218

Parte 9

39

www.grandeporte.com.br

(11) 4427-4579 (11) 9 9903-3218

40

Parte 9

Avaliao

Ento...Como foi ?!?

Estou fera!

Fiz Certo!

Muito Bom

Bom

www.grandeporte.com.br

regular

ruim

Muito ruim

(11) 4427-4579 (11) 9 9903-3218

Parte

Quantas dimenses
uma varivel pode ter
na linguagem COBOL?

Verso 2.3.5

Parte 10

Preparation

Trocando Ideias

agora que voc fala !!

Antes de iniciarmos, vamos conversar sobre os tpicos apresentados na


capa desta parte. Isso importante para que seu instrutor e seus colegas
saibam como est seu conhecimento sobre o assunto e se voc precisa ou
pode fornecer ajuda aos colegas e instrutor.

O que voc j sabe ?


O que voc no sabe ?
Porque importante conhecer estes tpicos ?
Quais so os seus temores ?
O que voc considera difcil ?

Reflexo

aqui que voc se compromete !!

Depois de falar sobre o assunto com seus colegas e instrutor, escreva,


desenhe, rabisque, diga algo sobre o que voc vai fazer para dominar esses
tpicos. Comprometa-se!

www.grandeporte.com.br

(11) 4427-4579 (11) 9 9903-3218

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

(11) 4427-4579 (11) 9 9903-3218

Parte 10

Teoria

Tabela interna (occurs)

Alguns algoritmos mais avanados exigem a definio de uma mesma varivel


vrias vezes, aumentando o trabalho de codificao do programa correspondente,
tanto na DATA DIVISION, como tambm as instrues resultantes na PROCEDURE
DIVISION. Por exemplo, em um algoritmo para acumular a vendas do ano separadas
por ms, precisamos definir 12 variveis de totais na DATA DIVISION e a
PROCEDURE DIVISION dever ter 12 testes de ms da venda para decidir em que
total deve ser feito a soma. Exemplo:
----+-*A-1-B--+----2----+----3----+----4----+----5----+----6----+----7--|-+----8
*----------------------------------------------------------------*
WORKING-STORAGE
SECTION.
*----------------------------------------------------------------*
01 WS-TOTAL-VENDAS.
05 WS-TOTAL-01
PIC 9(06)V99.
05 WS-TOTAL-02
PIC 9(06)V99.
05 WS-TOTAL-03
PIC 9(06)V99.
05 WS-TOTAL-04
PIC 9(06)V99.
05 WS-TOTAL-05
PIC 9(06)V99.
05 WS-TOTAL-06
PIC 9(06)V99.
05 WS-TOTAL-07
PIC 9(06)V99.
05 WS-TOTAL-08
PIC 9(06)V99.
05 WS-TOTAL-09
PIC 9(06)V99.
05 WS-TOTAL-10
PIC 9(06)V99.
05 WS-TOTAL-11
PIC 9(06)V99.
05 WS-TOTAL-12
PIC 9(06)V99.

Na PROCEDURE DIVISION usaramos o EVALUATE, para evitar uma longa


srie de IFs encadeados, pois temos que decidir, de acordo com o ms da venda, qual
total deve ser somado.
----+-*A-1-B--+----2----+----3----+----4----+----5----+----6----+----7--|-+----8
*----------------------------------------------------------------*
PROCEDURE
DIVISION.
*----------------------------------------------------------------*
060-TOTALIZA-VENDAS.
EVALUATE WS-MES
WHEN 01 ADD WS-VALOR-VENDA
WHEN 02 ADD WS-VALOR-VENDA
WHEN 03 ADD WS-VALOR-VENDA
WHEN 04 ADD WS-VALOR-VENDA
WHEN 05 ADD WS-VALOR-VENDA
WHEN 06 ADD WS-VALOR-VENDA
WHEN 07 ADD WS-VALOR-VENDA
WHEN 08 ADD WS-VALOR-VENDA
WHEN 09 ADD WS-VALOR-VENDA
WHEN 10 ADD WS-VALOR-VENDA
WHEN 11 ADD WS-VALOR-VENDA
WHEN 12 ADD WS-VALOR-VENDA
END-EVALUATE
.

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

(11) 4427-4579 (11) 9 9903-3218

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.

Visualmente, a varivel WS-TOTAL-VENDAS tem o seguinte aspecto:

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)
.

Podemos usar OCCURS para criar tabelas de at 7 dimenses. Abaixo temos


alguns exemplos dessas tabelas:
----+-*A-1-B--+----2----+----3----+----4----+----5----+----6----+----7--|-+----8
*----------------------------------------------------------------*
WORKING-STORAGE
SECTION.
*----------------------------------------------------------------*
* TABELA DE UMA DIMENSAO UM CLIENTE COM ATE 5 TELEFONES
*----------------------------------------------------------------*
01 WS-DADOS-DO-CLIENTE.
05 WS-CODCLI
PIC X(05).
05 WS-NOMECLI
PIC X(30).
05 WS-TELEFONES-CLI.
XXXX
10 WS-FONE
PIC X(10) OCCURS 5 TIMES.

www.grandeporte.com.br

(11) 4427-4579 (11) 9 9903-3218

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.

Essa tabela de duas dimenses pode ser representada graficamente da


seguinte forma:
WS-CODVEND (01)
WS-NOMEVEND (02)

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

(11) 4427-4579 (11) 9 9903-3218

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)

possvel criar tabelas internas indexadas, por exemplo:


----+-*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
INDEXED BY WS-IDX-MES.
01

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

As variveis de ndice no so declaradas na WORKING-STORAGE SECTION


e tem seus valores definidos da seguinte forma:
----+-*A-1-B--+----2----+----3----+----4----+----5----+----6----+----7--|-+----8
*--> INICIANDO O INDICE COM 1
SET WS-IDX-MES TO 1
*--> INCREMENTANDO O INDICE 1 UNIDADE
SET WS-IDX-MES UP BY 1
*--> DECREMENTANDO O INDICE 1 UNIDADE
SET WS-IDX-MES DOWN BY 1

Tabelas indexadas podem ter seu contedo pesquisado pelo comando


SEARCH.

www.grandeporte.com.br

(11) 4427-4579 (11) 9 9903-3218

Parte 10

Teoria

Pesquisa em
tabela interna (search)

A instruo SEARCH usada para realizar uma pesquisa linear, ou seja, o


algoritmo percorre a tabela a partir do primeiro elemento, at localizar o item desejado
ou chegar no fim da tabela.
A seguir temos um exemplo de busca linear:
----+-*A-1-B--+----2----+----3----+----4----+----5----+----6----+----7--|-+----8
*----------------------------------------------------------------*
WORKING-STORAGE
SECTION.
*----------------------------------------------------------------*
01 WS-PRODUTOS.
XXXX
05 FILLER
PIC X(19)
VALUE
001CADERNO
001200.
05 FILLER
PIC X(19)
VALUE
002LAPIS
000200.
XXXX
05 FILLER
PIC X(19)
VALUE
003BORRACHA 000350.
05 FILLER
PIC X(19)
VALUE
004REGUA
000500.
05 FILLER
PIC X(19)
VALUE
005GRAMPEADOR001500.
01
XXXX

WS-TAB-PRODUTOS REDEFINES WS-PRODUTOS.


05 WS-REG-PRODUTOS OCCURS 5 TIMES INDEXED BY IDX-PROD.
10 WS-CODPROD
PIC X(03).
10 WS-DESCPROD
PIC X(10).
10 WS-PRECOPROD
PIC 9(04)V99.

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

Cabe ao programador, segundo a especificao do projeto, determinar o que


fazer quando encontrar ou no o item na tabela.
J a instruo SEARCH ALL usada para realizar uma pesquisa binria. A
tabela deve ser ordenada em ordem ascendente (crescente) ou descendente
(decrescente) para que a busca binria tenha xito.

www.grandeporte.com.br

(11) 4427-4579 (11) 9 9903-3218

10

10

Parte 10

A pesquisa ou busca binria um algoritmo de busca em tabela que requer


acesso aleatrio aos elementos da mesma. Ela parte do pressuposto de que a tabela
est ordenada e realiza sucessivas divises do espao de busca (diviso e conquista)
comparando o elemento buscado (chave) com o elemento no meio da tabela. Se o
elemento do meio da tabela for a chave, a busca termina com sucesso. Caso contrrio,
se o elemento do meio vier antes do elemento buscado, ento a busca continua na
metade posterior da tabela. E finalmente, se o elemento do meio vier depois da chave,
a busca continua na metade anterior da tabela.
A seguir temos um exemplo de busca binria:
----+-*A-1-B--+----2----+----3----+----4----+----5----+----6----+----7--|-+----8
*----------------------------------------------------------------*
WORKING-STORAGE
SECTION.
*----------------------------------------------------------------*
01 WS-LISTA-MESES.
05 FILLER
PIC X(11)
VALUE 01JANEIRO .
XXXX
05 FILLER
PIC X(11)
VALUE 02FEVEREIRO.
XXXX
05 FILLER
PIC X(11)
VALUE 03MARCO
.
XXXX
05 FILLER
PIC X(11)
VALUE 04ABRIL
.
XXXX
05 FILLER
PIC X(11)
VALUE 05MAIO
.
XXXX
05 FILLER
PIC X(11)
VALUE 06JUNHO
.
XXXX
05 FILLER
PIC X(11)
VALUE 07JULHO
.
XXXX
05 FILLER
PIC X(11)
VALUE 08AGOSTO
.
XXXX
05 FILLER
PIC X(11)
VALUE 09SETEMBRO .
XXXX
05 FILLER
PIC X(11)
VALUE 10OUTUBRO .
XXXX
05 FILLER
PIC X(11)
VALUE 11NOVEMBRO .
XXXX
05 FILLER
PIC X(11)
VALUE 12DEZEMBRO .
01
XXXX

WS-TABELA-MESES REDEFINES WS-LISTA-MESES.


05 WS-TAB-MES PIC X(11) OCCURS 12 TIMES
ASCENDING KEY WS-NUM-MES
INDEXED BY IDX-MES.
10 WS-NUM-MES
PIC 9(02).
10 WS-TEXTO-MES
PIC X(09).

01 WS-MES
PIC 9(2).
*----------------------------------------------------------------*
PROCEDURE
DIVISION.
*----------------------------------------------------------------*
MOVE 7

TO WS-MES

SEARCH ALL WS-TAB-MES


AT END
DISPLAY MES INVALIDO
WHEN WS-NUM-MES(IDX-MES) = WS-MES
DISPLAY MES LOCALIZADO.....: WS-TEXTO-MES (IDX-MES)
END-SEARCH

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

(11) 4427-4579 (11) 9 9903-3218

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

(11) 4427-4579 (11) 9 9903-3218

12

Parte 10

Atividade

Reviso aos pares

Dada as especificaes das tabelas abaixo,


codifique-as na WORKING-STORAGE SECTION.

1 ) Criar a tabela WS-TAB-TAXAS para armazenar 10 taxas no formato PIC 9(02)V99

WORKING-STORAGE

SECTION.

2) Criar a tabela WS-NOTAS-ALUNO para armazenar 3 notas no formato PIC 9(02)V9


para 50 alunos.
WORKING-STORAGE

SECTION.

www.grandeporte.com.br

(11) 4427-4579 (11) 9 9903-3218

Parte 10

Atividade

13

Trabalho em dupla

Explique o que o fragmento de programa COBOL


abaixo est fazendo.

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

(11) 4427-4579 (11) 9 9903-3218

10

14

Parte 10

Atividade

Projeto 9

Objetivo do Programa

A Box Company do Brasil precisa de algumas alteraes em seu projeto de


impresso de relatrio com a movimentao de estoque:
1 - S devem ser impressos os produtos que tiverem uma data de
movimentao a partir de uma data que dever ser fornecida como parmetro ao
programa (via PARM do JCL).
2 - O programa GPXXNN09 que utilizar os servios do programa PGMAUX03
para classificar essa movimentao (alta prioridade [1] ou baixa prioridade [0]). S
devem ser impressos os produtos com data de movimentao maior ou igual a
informada no PARM GO do JCL com classificao de alta prioridade.

Macro-Fluxo

MOVTOEST

PARM=AAAAMMDD

GPXXNN09

TABCADPROD

CADPROD

PGMAUX03

RELMOV01

www.grandeporte.com.br

(11) 4427-4579 (11) 9 9903-3218

Parte 10

15

Layout dos Arquivos

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

(11) 4427-4579 (11) 9 9903-3218

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)

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

A nova WS-LINDET tem as seguintes 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

XXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXX

LD-CODPRODMOVTO
LD-DESCPRODMOVTO
LD-QTDMOVTO

www.grandeporte.com.br

(11) 4427-4579 (11) 9 9903-3218

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

Para obter a descrio do produto, armazenaremos em tabela interna o


contedo do arquivo CADPROD, indexando pelo cdigo do produto, permitindo assim
a busca (SEARCH ALL) da descrio pelo cdigo do produto.
Execute os passos abaixo (Lembre-se de que XXNN o seu prefixo de
usurio):
1) Copie o programa GPXXNN07 para GPXXNN09 em sua COBLIB. As
alteraes sero feitas nessa cpia.
2) Copie o membro EXECOB07 para EXECOB09 em sua JOBLIB. Altere o
nome do programa no parmetro PGM= para GPXXNN09.
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 EXECOB09. Compare o resultado com os
dos colegas.

www.grandeporte.com.br

(11) 4427-4579 (11) 9 9903-3218

10

18

Parte 10
Orientao para processamento

Na WORKING-STORAGE SECTION, definir a tabela WS-TAB-CADPROD para


armazenar o cdigo e a descrio do produto, a varivel WS-INDICE para ajudar na
carga da tabela e a varivel WS-FLAG para ajudar na seleo do movimento correto.
----+-*A-1-B--+----2----+----3----+----4----+----5----+----6----+----7--|-+----8
DATA
DIVISION
WORKING-STORAGE
SECTION.
01 WS-TAB-CADPROD.
05 WS-REG-TAB-CADPROD OCCURS 100 TIMES
ASCENDING KEY WS-TAB-CODPROD INDEXED BY IDX1.
10 WS-TAB-CODPROD
PIC 9(04).
10 WS-TAB-DESCPROD
PIC X(20).
77 WS-INDICE
PIC 9(03).
77 WS-FLAG
PIC X(01).

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

(11) 4427-4579 (11) 9 9903-3218

Parte 10

19

Alterar o pargrafo 2000-PROCESSAR conforme abaixo:


Pargrafo 2000-PROCESSAR
Mover N para WS-FLAG
Se WS-DATAMOVTO >= LS-DATAREF
Mover S para WS-FLAG
Se WS-FLAG = S
Mover WS-CODPRODMOVTO para WS-MENS-CODPROD
Mover WS-TIPOMOVTO para WS-MENS-TIPOMOVTO
Mover WS-QTDMOVTO para WS-MENS-QTDE
Chamar dinamicamente o programa PGMAUX03
passando WS-MSG-COMUNICACAO
Cancelar dinamicamente o programa PGMAUX03
Se WS-MENS-CLASSIF = 0
Mover N para WS-FLAG
Se WS-FLAG = S
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
Seno
Somar 1 ao contador de desprezado
Executar o pargrafo 1100-LER-MOVTOEST
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

www.grandeporte.com.br

(11) 4427-4579 (11) 9 9903-3218

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

(11) 4427-4579 (11) 9 9903-3218

Parte 10

21

10

www.grandeporte.com.br

(11) 4427-4579 (11) 9 9903-3218

22

Parte 10

Avaliao

Ento...Como foi ?!?

Estou fera!

Fiz Certo!

Muito Bom

Bom

www.grandeporte.com.br

regular

ruim

Muito ruim

(11) 4427-4579 (11) 9 9903-3218

Parte

ANEXOS

Verso 2.3.5

Parte 11

Teoria

MVS abend code

Os ABENDs com a letra S so do sistema e os com a letra U so de usurios.


Os mais comuns esto em destaque.
S001-4

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

(11) 4427-4579 (11) 9 9903-3218

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

COBOL LE intercepted the ABEND. Messages in SYSDBOUT.


COBOL LE intercepted the ABEND. Messages in CEEDUMP.

www.grandeporte.com.br

(11) 4427-4579 (11) 9 9903-3218

Parte 11

Teoria
FILE STATUS
'00'
'02'
'04'
'05'
'07'
'10'
'14'
'20'
'21'
'22'
'23'
'24'

Tabela de File status

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'

PERMANENT DATA ERROR. DATA CHECK, PARITY CHK, HARDW


BOUNDARY VIOLATION. WRITE PAST END OF ESDS RECORD OR NO SPACE TO ADD
KSDS/RRDS RECORD. OUT OF SPACE ON SEQUENTIAL FILE

'35'
'37'
'38'
'39'
'41'
'42'
'43'
'44'
'46'
'47'
'48'
'49'
'90'
'91'
'92'

OPEN, FILE NOT PRESENT


OPEN MODE INCOMPAT WITH DEVICE
OPENING FILE CLOSED WITH LOCK
OPEN, FILE ATTRIB CONFLICTING
OPEN, FILE IS OPEN
CLOSE, FILE IS CLOSED
DELETE OR REWRITE & NO GOOD READ FIRST
BOUNDARY VIOLATION/REWRITE REC TOO BIG
SEQUENTIAL READ WITHOUT POSITIONING
READING FILE NOT OPEN AS INPUT/IO/EXTEND
WRITE WITHOUT OPEN IO
DELETE OR REWRITE WITHOUT OPEN IO
UNKNOWN
VSAM - PASSWORD FAILURE
LOGIC ERROR/OPENING AN OPEN FILE OR READING OUTPUT FILE OR WRITE INPUT
FILE OR DEL/REW BUT NO PRIOR READ
VSAM - VIRTSTOR. RESOURCE NOT AVAILABLE
VSAM - SEQUENTIAL READ AFTER END OF FILE OR NO CURRENT REC POINTER FOR
SEQ

'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

(11) 4427-4579 (11) 9 9903-3218

Parte 11

Teoria

Tabela ascII

ASCII e a sigla para American Standard Code for Information Interchange. Os


computadores s podem entender nmeros, ento o cdigo ASCII a representao
numrica de caracteres tais como @ A X $, que usado quando se deseja colocar
dados em ordem. utilizada nos micro computadores.
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

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

(11) 4427-4579 (11) 9 9903-3218

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

2B CU2 (customer use 2)


107 6B
,
2C
108 6C
%
2D ENQ (enquiry)
109 6D
_
2E ACK (acknowledge)
110 6E
>
2F BEL (bell)
111 6F
?
30
112 70
31
113 71
32 SYN (synchronous idle)
114 72
33
115 73
34 PN (punch on)
116 74
35 RS (reader stop)
117 75
36 UC (upper case)
118 76
37 EOT (end of transmission)
119 77
38
120 78
39
121 79
`
3A
122 7A
:
3B CU3 (customer use 3)
123 7B
#
3C DC4 (device control 4)
124 7C
@
3D NAK (negative acknowledge)
125 7D
'
3E
126 7E
=
3F SUB (substitute)
127 7F
"

www.grandeporte.com.br

Dec Hex Char Dec


Hex Char
128 80
192 C0 {
129 81
a
193 C1 A
130 82
b
194 C2 B
131 83
c
195 C3 C Usados para
132 84
d
196 C4 D representar
133 85
e
197 C5 E
nmeros
134 86
f
198 C6 F
135 87
g
199 C7 G positivos.
136 88
h
200 C8 H
137 89
i
201 C9 I
138 8A
202 CA
139 8B
203 CB
140 8C
204 CC
141 8D
205 CD
142 8E
206 CE
143 8F
207 CF
144 90
208 D0 }
145 91
j
209 D1 J
146 92
k
210 D2 K Usados para
147 93
l
211 D3 L representar
148 94
m
212 D4 M
nmeros
149 95
n
213 D5 N
150 96
o
214 D6 O negativos.
151 97
p
215 D7 P
152 98
q
216 D8 Q
153 99
r
217 D9 R
154 9A
218 DA
155 9B
219 DB
156 9C
220 DC
157 9D
221 DD
158 9E
222 DE
159 9F

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

(11) 4427-4579 (11) 9 9903-3218

Parte 11

Teoria

POTNCIA DE 2

1 Byte

2 Bytes

3 Bytes

4 Bytes

www.grandeporte.com.br

(11) 4427-4579 (11) 9 9903-3218